diff --git a/.gitignore b/.gitignore index ff9d42ad..3ceb1848 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /playground/playground.js.map /playground/compile.js.map .DS_Store +/sourcey/node_modules/ diff --git a/docs/_og/api.png b/docs/_og/api.png new file mode 100644 index 00000000..4d8473ac Binary files /dev/null and b/docs/_og/api.png differ diff --git a/docs/_og/api/package-root.png b/docs/_og/api/package-root.png new file mode 100644 index 00000000..aafa7864 Binary files /dev/null and b/docs/_og/api/package-root.png differ diff --git a/docs/_og/api/pkg-build-cache.png b/docs/_og/api/pkg-build-cache.png new file mode 100644 index 00000000..8f7b070e Binary files /dev/null and b/docs/_og/api/pkg-build-cache.png differ diff --git a/docs/_og/api/pkg-build-versionhack.png b/docs/_og/api/pkg-build-versionhack.png new file mode 100644 index 00000000..d38dda1d Binary files /dev/null and b/docs/_og/api/pkg-build-versionhack.png differ diff --git a/docs/_og/api/pkg-build.png b/docs/_og/api/pkg-build.png new file mode 100644 index 00000000..e79390a6 Binary files /dev/null and b/docs/_og/api/pkg-build.png differ diff --git a/docs/_og/api/pkg-compiler-astutil.png b/docs/_og/api/pkg-compiler-astutil.png new file mode 100644 index 00000000..96c5e761 Binary files /dev/null and b/docs/_og/api/pkg-compiler-astutil.png differ diff --git a/docs/_og/api/pkg-compiler-errlist.png b/docs/_og/api/pkg-compiler-errlist.png new file mode 100644 index 00000000..4493302d Binary files /dev/null and b/docs/_og/api/pkg-compiler-errlist.png differ diff --git a/docs/_og/api/pkg-compiler-filter.png b/docs/_og/api/pkg-compiler-filter.png new file mode 100644 index 00000000..715c66df Binary files /dev/null and b/docs/_og/api/pkg-compiler-filter.png differ diff --git a/docs/_og/api/pkg-compiler-gopherjspkg.png b/docs/_og/api/pkg-compiler-gopherjspkg.png new file mode 100644 index 00000000..62e66cf3 Binary files /dev/null and b/docs/_og/api/pkg-compiler-gopherjspkg.png differ diff --git a/docs/_og/api/pkg-compiler-incjs.png b/docs/_og/api/pkg-compiler-incjs.png new file mode 100644 index 00000000..61abff53 Binary files /dev/null and b/docs/_og/api/pkg-compiler-incjs.png differ diff --git a/docs/_og/api/pkg-compiler-linkname.png b/docs/_og/api/pkg-compiler-linkname.png new file mode 100644 index 00000000..e9cbc09b Binary files /dev/null and b/docs/_og/api/pkg-compiler-linkname.png differ diff --git a/docs/_og/api/pkg-compiler-natives.png b/docs/_og/api/pkg-compiler-natives.png new file mode 100644 index 00000000..7bd73dee Binary files /dev/null and b/docs/_og/api/pkg-compiler-natives.png differ diff --git a/docs/_og/api/pkg-compiler-prelude.png b/docs/_og/api/pkg-compiler-prelude.png new file mode 100644 index 00000000..2ec443a3 Binary files /dev/null and b/docs/_og/api/pkg-compiler-prelude.png differ diff --git a/docs/_og/api/pkg-compiler-sources.png b/docs/_og/api/pkg-compiler-sources.png new file mode 100644 index 00000000..db3317bd Binary files /dev/null and b/docs/_og/api/pkg-compiler-sources.png differ diff --git a/docs/_og/api/pkg-compiler-typesutil.png b/docs/_og/api/pkg-compiler-typesutil.png new file mode 100644 index 00000000..49167fce Binary files /dev/null and b/docs/_og/api/pkg-compiler-typesutil.png differ diff --git a/docs/_og/api/pkg-compiler.png b/docs/_og/api/pkg-compiler.png new file mode 100644 index 00000000..5f427421 Binary files /dev/null and b/docs/_og/api/pkg-compiler.png differ diff --git a/docs/_og/api/pkg-js.png b/docs/_og/api/pkg-js.png new file mode 100644 index 00000000..8e1b9577 Binary files /dev/null and b/docs/_og/api/pkg-js.png differ diff --git a/docs/_og/api/pkg-nosync.png b/docs/_og/api/pkg-nosync.png new file mode 100644 index 00000000..93afd4d9 Binary files /dev/null and b/docs/_og/api/pkg-nosync.png differ diff --git a/docs/_og/introduction.png b/docs/_og/introduction.png new file mode 100644 index 00000000..ade12f24 Binary files /dev/null and b/docs/_og/introduction.png differ diff --git a/docs/api.html b/docs/api.html new file mode 100644 index 00000000..c50053be --- /dev/null +++ b/docs/api.html @@ -0,0 +1,42 @@ + +API Reference - GopherJS
API Reference

API Reference

github.com/gopherjs/gopherjs

github.com/gopherjs/gopherjs

+
+

github.com/gopherjs/gopherjs

github.com/gopherjs/gopherjs

+

build

Package build implements GopherJS build system.

github.com/gopherjs/gopherjs/build

+

build/cache

Package cache solves one of the hardest computer science problems in application to GopherJS compiler outputs.

github.com/gopherjs/gopherjs/build/cache

+

build/versionhack

Package versionhack makes sure go/build doesn't disable module support whenever GopherJS is compiled by a different Go version than it's targeted Go version.

github.com/gopherjs/gopherjs/build/versionhack

+

compiler

Package compiler implements GopherJS compiler logic.

github.com/gopherjs/gopherjs/compiler

+

compiler/astutil

github.com/gopherjs/gopherjs/compiler/astutil

+

compiler/errlist

github.com/gopherjs/gopherjs/compiler/errlist

+

compiler/filter

github.com/gopherjs/gopherjs/compiler/filter

+

compiler/gopherjspkg

Package gopherjspkg provides core GopherJS packages via a virtual filesystem.

github.com/gopherjs/gopherjs/compiler/gopherjspkg

+

compiler/incjs

github.com/gopherjs/gopherjs/compiler/incjs

+

compiler/linkname

github.com/gopherjs/gopherjs/compiler/linkname

+

compiler/natives

Package natives provides native packages via a virtual filesystem.

github.com/gopherjs/gopherjs/compiler/natives

+

compiler/prelude

github.com/gopherjs/gopherjs/compiler/prelude

+

compiler/sources

github.com/gopherjs/gopherjs/compiler/sources

+

compiler/typesutil

github.com/gopherjs/gopherjs/compiler/typesutil

+

js

Package js provides functions for interacting with native JavaScript APIs.

github.com/gopherjs/gopherjs/js

+

nosync

github.com/gopherjs/gopherjs/nosync

+
\ No newline at end of file diff --git a/docs/api/package-root.html b/docs/api/package-root.html new file mode 100644 index 00000000..daaec456 --- /dev/null +++ b/docs/api/package-root.html @@ -0,0 +1,24 @@ + +github.com/gopherjs/gopherjs - GopherJS
Root

github.com/gopherjs/gopherjs

github.com/gopherjs/gopherjs

import "github.com/gopherjs/gopherjs"

+
\ No newline at end of file diff --git a/docs/api/pkg-build-cache.html b/docs/api/pkg-build-cache.html new file mode 100644 index 00000000..552fa8c0 --- /dev/null +++ b/docs/api/pkg-build-cache.html @@ -0,0 +1,148 @@ + +build/cache - GopherJS
Build

build/cache

Package cache solves one of the hardest computer science problems in application to GopherJS compiler outputs.

import "github.com/gopherjs/gopherjs/build/cache"

+

Package cache solves one of the hardest computer science problems in +application to GopherJS compiler outputs.

+ +

Functions

+
+

func Clear() error

+

Source: build/cache/cache.go:78

+

Clear the cache. This will remove all cached artifacts from all build +configurations.

+
+

Types

+
+

type BuildCache

+

Source: build/cache/cache.go:107

+

BuildCache manages build artifacts that are cached for incremental builds.

+

Cache is designed to be non-durable: any store and load errors are swallowed +and simply lead to a cache miss. The caller must be able to handle cache +misses. Nil pointer to BuildCache is valid and simply disables caching.

+

BuildCache struct fields represent build parameters which change invalidates +the cache. For example, any artifacts that were cached for a Linux build +must not be reused for a non-Linux build. GopherJS version change also +invalidates the cache. It is callers responsibility to ensure that artifacts +passed the Store function were generated with the same build +parameters as the cache is configured.

+

There is no upper limit for the total cache size. It can be cleared +programmatically via the Clear() function, or the user can just delete the +directory if it grows too big.

+

The cached files are gzip compressed, therefore each file uses the gzip +checksum as a basic integrity check performed after reading the file.

+

TODO(nevkontakte): changes in the input sources or dependencies doesn't +currently invalidate the cache. This is handled at the higher level by +checking cached package timestamp against loaded package modification time.

+
+
+ +
+
type BuildCache struct {
+	GOOS      string
+	GOARCH    string
+	GOROOT    string
+	GOPATH    string
+	BuildTags []string
+
+	// Version should be set to compiler.Version
+	Version string
+
+	// TestedPackage is the import path of the package being tested, or
+	// empty when not building for tests. The package under test is built
+	// with *_test.go sources included so we should always skip reading
+	// and writing cache in that case. Since we are caching prior to
+	// type-checking for generics, any package importing the package under
+	// test should be unaffected.
+	TestedPackage string
+}
+
+
Fields
  • GOOS string
  • GOARCH string
  • GOROOT string
  • GOPATH string
  • BuildTags []string
  • Version string

    Version should be set to compiler.Version

  • TestedPackage string

    TestedPackage is the import path of the package being tested, or +empty when not building for tests. The package under test is built +with *_test.go sources included so we should always skip reading +and writing cache in that case. Since we are caching prior to +type-checking for generics, any package importing the package under +test should be unaffected.

+
+

func Load(c Cacheable, importPath string, srcModTime time.Time) bool

+

Source: build/cache/cache.go:174

+
+
+

func Store(c Cacheable, importPath string, buildTime time.Time) bool

+

Source: build/cache/cache.go:135

+
+
+

func String() string

+

Source: build/cache/cache.go:126

+
+
+
+

type Cache

+

Source: build/cache/cache.go:32

+

Cache defines methods to store and load cacheable objects.

+
+
+ +
+
type Cache interface {
+	// Store stores the package with the given import path in the cache.
+	// Any error inside this method will cause the cache not to be persisted.
+	//
+	// The passed in buildTime is used to determine if the package is out-of-date when reloaded.
+	// Typically it should be set to the srcModTime or time.Now().
+	Store(c Cacheable, importPath string, buildTime time.Time) bool
+
+	// Load reads a previously cached package at the given import path,
+	// if it was previously stored.
+	//
+	// The loaded package would have been built with the same configuration as
+	// the build cache was.
+	Load(c Cacheable, importPath string, srcModTime time.Time) bool
+}
+
+
Methods
  • Store func(c Cacheable, importPath string, buildTime time.Time) bool

    Store stores the package with the given import path in the cache. +Any error inside this method will cause the cache not to be persisted.

    +

    The passed in buildTime is used to determine if the package is out-of-date when reloaded. +Typically it should be set to the srcModTime or time.Now().

  • Load func(c Cacheable, importPath string, srcModTime time.Time) bool

    Load reads a previously cached package at the given import path, +if it was previously stored.

    +

    The loaded package would have been built with the same configuration as +the build cache was.

+
+
+

type Cacheable

+

Source: build/cache/cache.go:26

+

Cacheable defines methods to serialize and deserialize cachable objects. +This object should represent a package's build artifact.

+

The encode and decode functions are typically wrappers around gob.Encoder.Encode +and gob.Decoder.Decode, but other formats are possible as well, the same way +as FileSet.Write and FileSet.Read work with any encode/decode functions.

+
+
+ +
+
type Cacheable interface {
+	Write(encode func(any) error) error
+	Read(decode func(any) error) error
+}
+
+
Methods
  • Write func(encode func(any) error) error
  • Read func(decode func(any) error) error
+
\ No newline at end of file diff --git a/docs/api/pkg-build-versionhack.html b/docs/api/pkg-build-versionhack.html new file mode 100644 index 00000000..70297067 --- /dev/null +++ b/docs/api/pkg-build-versionhack.html @@ -0,0 +1,45 @@ + +build/versionhack - GopherJS
Build

build/versionhack

Package versionhack makes sure go/build doesn't disable module support whenever GopherJS is compiled by a different Go version than it's targeted Go version.

import "github.com/gopherjs/gopherjs/build/versionhack"

+

Package versionhack makes sure go/build doesn't disable module support +whenever GopherJS is compiled by a different Go version than it's targeted +Go version.

+

Under the hood, go/build relies on go list utility for module support; more +specifically, for package location discovery. Since ReleaseTags are +effectively baked into the go binary and can't be overridden, it needs to +ensure that ReleaseTags set in a go/build.Context instance match the Go tool.

+

However, it naively assumes that the go tool version in the PATH matches the +version that was used to build GopherJS and disables module support whenever +ReleaseTags in the context are set to anything other than the default. This, +unfortunately, isn't very helpful since gopherjs may be built by a Go version +other than the PATH's default.

+

Luckily, even if go tool version is mismatched, it's only used for discovery +of the package locations, and go/build evaluates build constraints on its own +with ReleaseTags we've passed.

+

A better solution would've been for go/build to use go tool from GOROOT and +check its version against build tags: https://github.com/golang/go/issues/46856.

+

Until that issue is fixed, we trick go/build into thinking that whatever +ReleaseTags we've passed are indeed the default. We gain access to the +variable go/build checks against using "go:linkname" directive and override +its content as we wish.

+
\ No newline at end of file diff --git a/docs/api/pkg-build.html b/docs/api/pkg-build.html new file mode 100644 index 00000000..fd92764f --- /dev/null +++ b/docs/api/pkg-build.html @@ -0,0 +1,340 @@ + +build - GopherJS
Build

build

Package build implements GopherJS build system.

import "github.com/gopherjs/gopherjs/build"

+

Package build implements GopherJS build system.

+

WARNING: This package's API is treated as internal and currently doesn't +provide any API stability guarantee, use it at your own risk. If you need a +stable interface, prefer invoking the gopherjs CLI tool as a subprocess.

+ +

Variables

+

DefaultGOROOT is the default GOROOT value for builds.

+

It uses the GOPHERJS_GOROOT environment variable if it is set, +or else the default GOROOT value of the system Go distribution.

Source: build/build.go:45

+
+ +
+
var DefaultGOROOT = func() string {
+	if goroot, ok := os.LookupEnv("GOPHERJS_GOROOT"); ok {
+
+		return goroot
+	}
+
+	return build.Default.GOROOT
+}()
+
+

Functions

+
+

func DefaultEnv() Env

+

Source: build/context.go:46

+

DefaultEnv creates a new instance of build Env according to environment +variables.

+

By default, GopherJS will use GOOS=js GOARCH=ecmascript to build non-standard +library packages. If GOOS or GOARCH environment variables are set and not +empty, user-provided values will be used instead. This is done to facilitate +transition from the legacy GopherJS behavior, which used native GOOS, and may +be removed in future.

+
+
+

func Import(path string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error)

+

Source: build/build.go:85

+

Import returns details about the Go package named by the import path. If the +path is a local import path naming a package that can be imported using +a standard import path, the returned package will set p.ImportPath to +that path.

+

In the directory containing the package, .go and .inc.js files are +considered part of the package except for:

+
    +
  • .go files in package documentation
  • +
  • files starting with _ or . (likely editor temporary files)
  • +
  • files with build constraints not satisfied by the context
  • +
+

If an error occurs, Import returns a non-nil error and a nil +*PackageData.

+
+
+

func ImportDir(dir string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error)

+

Source: build/build.go:114

+

ImportDir is like Import but processes the Go package found in the named +directory.

+
+
+

func IsPkgNotFound(err error) bool

+

Source: build/context.go:458

+

IsPkgNotFound returns true if the error was caused by package not found.

+

Unfortunately, go/build doesn't make use of typed errors, so we have to +rely on the error message.

+
+
+

func NewBuildContext(installSuffix string, buildTags []string) XContext

+

Source: build/build.go:60

+

NewBuildContext creates a build context for building Go packages +with GopherJS compiler.

+

Core GopherJS packages (i.e., "github.com/gopherjs/gopherjs/js", "github.com/gopherjs/gopherjs/nosync") +are loaded from gopherjspkg.FS virtual filesystem if not present in GOPATH or +go.mod.

+
+
+

func NewSession(options *Options) (*Session, error)

+

Source: build/build.go:865

+

NewSession creates a new GopherJS build session.

+
+

Types

+
+

type Env

+

Source: build/context.go:27

+

Env contains build environment configuration required to define an instance +of XContext.

+
+
+ +
+
type Env struct {
+	GOROOT string
+	GOPATH string
+
+	GOOS   string
+	GOARCH string
+
+	BuildTags     []string
+	InstallSuffix string
+}
+
+
Fields
  • GOROOT string
  • GOPATH string
  • GOOS string
  • GOARCH string
  • BuildTags []string
  • InstallSuffix string
+
+
+

type Options

+

Source: build/build.go:672

+

Options controls build process behavior.

+
+
+ +
+
type Options struct {
+	Verbose        bool
+	Quiet          bool
+	Watch          bool
+	CreateMapFile  bool
+	MapToLocalDisk bool
+	Minify         bool
+	Color          bool
+	BuildTags      []string
+	TestedPackage  string
+	NoCache        bool
+}
+
+
Fields
  • Verbose bool
  • Quiet bool
  • Watch bool
  • CreateMapFile bool
  • MapToLocalDisk bool
  • Minify bool
  • Color bool
  • BuildTags []string
  • TestedPackage string
  • NoCache bool
+
+

func PrintError(format string, a ...any)

+

Source: build/build.go:686

+

PrintError message to the terminal.

+
+
+

func PrintSuccess(format string, a ...any)

+

Source: build/build.go:694

+

PrintSuccess message to the terminal.

+
+
+
+

type PackageData

+

Source: build/build.go:703

+

PackageData is an extension of go/build.Package with additional metadata +GopherJS requires.

+
+
+ +
+
type PackageData struct {
+	*build.Package
+	JSFiles []incjs.File
+	// IsTest is true if the package is being built for running tests.
+	IsTest     bool
+	SrcModTime time.Time
+	UpToDate   bool
+	// If true, the package does not have a corresponding physical directory on disk.
+	IsVirtual bool
+	// contains filtered or unexported fields
+}
+
+
Fields
  • *build.Package
  • JSFiles []incjs.File
  • IsTest bool

    IsTest is true if the package is being built for running tests.

  • SrcModTime time.Time
  • UpToDate bool
  • IsVirtual bool

    If true, the package does not have a corresponding physical directory on disk.

+
+

func FileModTime() time.Time

+

Source: build/build.go:723

+

FileModTime returns the most recent modification time of the package's source +files. This includes all .go and .inc.js that would be included in the build, +but excludes any dependencies.

+
+
+

func InstallPath() (string, error)

+

Source: build/build.go:800

+

InstallPath returns the path where "gopherjs install" command should place the +generated output.

+
+
+

func InternalBuildContext() *build.Context

+

Source: build/build.go:761

+

InternalBuildContext returns the build context that produced the package.

+

WARNING: This function is a part of internal API and will be removed in +future.

+
+
+

func String() string

+

Source: build/build.go:716

+
+
+

func TestPackage() *PackageData

+

Source: build/build.go:766

+

TestPackage returns a variant of the package with "internal" tests.

+
+
+

func XTestPackage() *PackageData

+

Source: build/build.go:783

+

XTestPackage returns a variant of the package with "external" tests.

+
+
+
+

type Session

+

Source: build/build.go:833

+

Session manages internal state GopherJS requires to perform a build.

+

This is the main interface to GopherJS build system. Session lifetime is +roughly equivalent to a single GopherJS tool invocation.

+
+
+ +
+
type Session struct {
+
+	// Binary archives produced during the current session and assumed to be
+	// up to date with input sources and dependencies. In the -w ("watch") mode
+	// must be cleared upon entering watching.
+	UpToDateArchives map[string]*compiler.Archive
+	Watcher          *fsnotify.Watcher
+	// contains filtered or unexported fields
+}
+
+
Fields
  • UpToDateArchives map[string]*compiler.Archive

    Binary archives produced during the current session and assumed to be +up to date with input sources and dependencies. In the -w ("watch") mode +must be cleared upon entering watching.

  • Watcher *fsnotify.Watcher
+
+

func BuildFiles(filenames []string, pkgObj string, cwd string) error

+

Source: build/build.go:950

+

BuildFiles passed to the GopherJS tool as if they were a package.

+

A ephemeral package will be created with only the provided files. This +function is intended for use with, for example, gopherjs run main.go.

+
+
+

func BuildProject(pkg *PackageData) (*compiler.Archive, error)

+

Source: build/build.go:1030

+

BuildProject builds a command project (one with a main method) or +builds a test project (one with a synthesized test main package).

+
+
+

func EnableMapping(filter *sourcemapx.Filter, jsFileName string)

+

Source: build/build.go:1380

+

SourceMappingCallback returns a callback for [github.com/gopherjs/gopherjs/compiler.SourceMapFilter] +configured for the current build session.

+
+
+

func GetSortedSources() []*sources.Sources

+

Source: build/build.go:1052

+

GetSortedSources returns the sources sorted by import path. +The files in the sources may still not be sorted yet.

+
+
+

func GoRelease() string

+

Source: build/build.go:930

+

GoRelease returns Go release version this session is building with.

+
+
+

func ImportResolverFor(srcDir string) func(string) (*compiler.Archive, error)

+

Source: build/build.go:1363

+

ImportResolverFor returns a function which returns a compiled package archive +given an import path.

+
+
+

func InstallSuffix() string

+

Source: build/build.go:922

+

InstallSuffix returns the suffix added to the generated output file.

+
+
+

func LoadPackages(pkg *PackageData) (*sources.Sources, error)

+

Source: build/build.go:1189

+

LoadPackages will recursively load and parse the given package and +its dependencies. This will return the sources for the given package. +The returned source and sources for the dependencies will be added +to the session's sources map.

+
+
+

func SourcesForImport(path, srcDir string) (*sources.Sources, error)

+

Source: build/build.go:1347

+
+
+

func TestBinary() string

+

Source: build/build.go:939

+

TestBinary returns the testBinary value that is normally passed into +cmd/link by a -X option. The testBinary value is defined in the STL at +testing/testing.go for the testing.Testing() bool function. +It is set to "1" if the binary (the JS output in our case) is built +with "go test" and "0" otherwise.

+
+
+

func WaitForChange()

+

Source: build/build.go:1420

+

WaitForChange watches file system events and returns if either when one of +the source files is modified.

+
+
+

func WriteCommandPackage(archive *compiler.Archive, pkgObj string) error

+

Source: build/build.go:1385

+

WriteCommandPackage writes the final JavaScript output file at pkgObj path.

+
+
+

func XContext() XContext

+

Source: build/build.go:919

+

XContext returns the session's build context.

+
+
+
+

type XContext

+

Source: build/context.go:69

+

XContext is an extension of go/build.Context with GopherJS-specific features.

+

It abstracts away several different sources GopherJS can load its packages +from, with a minimal API.

+
+
+ +
+
type XContext interface {
+	// Import returns details about the Go package named by the importPath,
+	// interpreting local import paths relative to the srcDir directory.
+	Import(path string, srcDir string, mode build.ImportMode) (*PackageData, error)
+
+	// Env returns build environment configuration this context has been set up for.
+	Env() Env
+
+	// Match explans build patterns into a set of matching import paths (see go help packages).
+	Match(patterns []string) ([]string, error)
+}
+
+
Methods
  • Import func(path string, srcDir string, mode build.ImportMode) (*PackageData, error)

    Import returns details about the Go package named by the importPath, +interpreting local import paths relative to the srcDir directory.

  • Env func() Env

    Env returns build environment configuration this context has been set up for.

  • Match func(patterns []string) ([]string, error)

    Match explans build patterns into a set of matching import paths (see go help packages).

+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-astutil.html b/docs/api/pkg-compiler-astutil.html new file mode 100644 index 00000000..5868d301 --- /dev/null +++ b/docs/api/pkg-compiler-astutil.html @@ -0,0 +1,163 @@ + +compiler/astutil - GopherJS
Compiler

compiler/astutil

github.com/gopherjs/gopherjs/compiler/astutil

import "github.com/gopherjs/gopherjs/compiler/astutil"

+ +

Functions

+
+

func DirectiveNew(d ast.Node) bool

+

Source: compiler/astutil/astutil.go:154

+

DirectiveNew returns true if gopherjs:new directive is +present on a struct, interface, type, variable, constant, or function.

+

//gopherjs:new is a GopherJS-specific directive, which can be +applied in native overlays and will instruct the augmentation logic to +ensure that the original code is not present so that this code does not +override any original code, otherwise an error will be raised.

+
+
+

func DirectiveReplace(d ast.Node) bool

+

Source: compiler/astutil/astutil.go:143

+

DirectiveReplace returns true if gopherjs:replace directive is present +on a struct, interface, type, variable, constant, or function.

+

//gopherjs:replace is a GopherJS-specific directive, which can be +applied in native overlays and will instruct the augmentation logic to +ensure that the original code is present and has not been removed nor renamed, +otherwise an error will be raised.

+
+
+

func EndsWithReturn(stmts []ast.Stmt) bool

+

Source: compiler/astutil/astutil.go:295

+

EndsWithReturn returns true if the last effective statement is a "return".

+
+
+

func FindLoopStmt(stack []ast.Node, branch *ast.BranchStmt, typeInfo *types.Info) ast.Stmt

+

Source: compiler/astutil/astutil.go:263

+

FindLoopStmt tries to find the loop statement among the AST nodes in the +|stack| that corresponds to the break/continue statement represented by +branch.

+

This function is label-aware and assumes the code was successfully +type-checked.

+
+
+

func FuncKey(d *ast.FuncDecl) string

+

Source: compiler/astutil/astutil.go:102

+

FuncKey returns a string, which uniquely identifies a top-level function or +method in a package.

+
+
+

func FuncReceiverKey(d *ast.FuncDecl) string

+

Source: compiler/astutil/astutil.go:112

+

FuncReceiverKey returns a string that uniquely identifies the receiver +struct of the function or an empty string if there is no receiver. +This name will match the name of the struct in the struct's type spec.

+
+
+

func HasDirectivePrefix(file *ast.File, prefix string) bool

+

Source: compiler/astutil/astutil.go:246

+

HasDirectivePrefix determines if any line in the given file +has the given directive prefix in it.

+
+
+

func ImportName(spec *ast.ImportSpec) string

+

Source: compiler/astutil/astutil.go:83

+

ImportName tries to determine the package name for an import.

+

If the package name isn't specified then this will make a best +make a best guess using the import path. +If the import name is dot (.), blank (_), or there +was an issue determining the package name then empty is returned.

+
+
+

func ImportsUnsafe(file *ast.File) bool

+

Source: compiler/astutil/astutil.go:68

+
+
+

func IsTypeExpr(expr ast.Expr, info *types.Info) bool

+

Source: compiler/astutil/astutil.go:40

+

IsTypeExpr returns true if expr denotes a type. This can be used to +distinguish between calls and type conversions.

+
+
+

func KeepOriginal(d *ast.FuncDecl) bool

+

Source: compiler/astutil/astutil.go:169

+

KeepOriginal returns true if gopherjs:keep-original directive is present +before a function decl.

+

//gopherjs:keep-original is a GopherJS-specific directive, which can be +applied to functions in native overlays and will instruct the augmentation +logic to expose the original function such that it can be called. For a +function in the original called foo, it will be accessible by the name +_gopherjs_original_foo.

+

This will also ensure that the original function exists and hasn't been +removed or renamed, otherwise an error will be raised.

+
+
+

func NewIdent(name string, t types.Type, info *types.Info, pkg *types.Package) *ast.Ident

+

Source: compiler/astutil/astutil.go:30

+
+
+

func OverrideSignature(d *ast.FuncDecl) bool

+

Source: compiler/astutil/astutil.go:209

+

OverrideSignature returns true if gopherjs:override-signature directive is +present on a function.

+

//gopherjs:override-signature is a GopherJS-specific directive, which can +be applied in native overlays and will instruct the augmentation logic to +replace the original function signature which has the same FuncKey with the +signature defined in the native overlays.

+

This directive can be used to remove generics from a function signature or +to replace a receiver of a function with another one. The given native +overlay function will be removed, so no method body is needed in the overlay.

+

The new signature may not contain types which require a new import since +the imports will not be automatically added when needed, only removed. +Use a type alias in the overlay to deal manage imports.

+

This will also ensure that the original code exists and hasn't been +removed or renamed, otherwise an error will be raised.

+
+
+

func Purge(d ast.Node) bool

+

Source: compiler/astutil/astutil.go:187

+

Purge returns true if gopherjs:purge directive is present +on a struct, interface, type, variable, constant, or function.

+

//gopherjs:purge is a GopherJS-specific directive, which can be +applied in native overlays and will instruct the augmentation logic to +delete part of the standard library without a replacement. This directive +can be used to remove code that would be invalid in GopherJS, such as code +using unsupported features (e.g. generic interfaces before generics were +fully supported). It should be used with caution since it may remove needed +dependencies. If a type is purged, all methods using that type as +a receiver will also be purged.

+

This will also ensure that the original code exists and hasn't been +removed or renamed, otherwise an error will be raised.

+
+
+

func RemoveParens(e ast.Expr) ast.Expr

+

Source: compiler/astutil/astutil.go:15

+
+
+

func SetType(info *types.Info, t types.Type, e ast.Expr) ast.Expr

+

Source: compiler/astutil/astutil.go:25

+
+
+

func Squeeze[E ast.Node, S ~[]E](s S) S

+

Source: compiler/astutil/astutil.go:316

+

Squeeze removes all nil nodes from the slice.

+

The given slice will be modified. This is designed for squeezing +declaration, specification, imports, and identifier lists.

+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-errlist.html b/docs/api/pkg-compiler-errlist.html new file mode 100644 index 00000000..f3dcf6f1 --- /dev/null +++ b/docs/api/pkg-compiler-errlist.html @@ -0,0 +1,80 @@ + +compiler/errlist - GopherJS
Compiler

compiler/errlist

github.com/gopherjs/gopherjs/compiler/errlist

import "github.com/gopherjs/gopherjs/compiler/errlist"

+ +

Variables

+

ErrTooManyErrors is added to the ErrorList by the Trim method.

Source: compiler/errlist/errlist.go:9

+
+ +
+
var ErrTooManyErrors = errors.New("too many errors")
+
+

Types

+
+

type ErrorList

+

Source: compiler/errlist/errlist.go:12

+

ErrorList wraps multiple errors as a single error.

+
+
+ +
+
type ErrorList []error
+
+
+

func Append(err error) ErrorList

+

Source: compiler/errlist/errlist.go:37

+

Append an error to the list.

+

If err is an instance of ErrorList, the lists are concatenated together, +otherwise err is appended at the end of the list. If err is nil, the list is +returned unmodified.

+
+
+ +
+
err := DoStuff()
+errList := errList.Append(err)
+
+
+
+

func AppendDistinct(err error) ErrorList

+

Source: compiler/errlist/errlist.go:49

+

AppendDistinct is similar to Append, but doesn't append the error if it has +the same message as the last error on the list.

+
+
+

func ErrOrNil() error

+

Source: compiler/errlist/errlist.go:22

+

ErrOrNil returns nil if ErrorList is empty, or the error otherwise.

+
+
+

func ErrorList) Error() string

+

Source: compiler/errlist/errlist.go:14

+
+
+

func Trim(limit int) ErrorList

+

Source: compiler/errlist/errlist.go:62

+

Trim the error list if it has more than limit errors. If the list is trimmed, +all extraneous errors are replaced with a single ErrTooManyErrors, making the +returned ErrorList length of limit+1.

+
+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-filter.html b/docs/api/pkg-compiler-filter.html new file mode 100644 index 00000000..06431aac --- /dev/null +++ b/docs/api/pkg-compiler-filter.html @@ -0,0 +1,33 @@ + +compiler/filter - GopherJS
Compiler

compiler/filter

github.com/gopherjs/gopherjs/compiler/filter

import "github.com/gopherjs/gopherjs/compiler/filter"

+ +

Functions

+
+

func Assign(stmt ast.Stmt, info *types.Info, pkg *types.Package) ast.Stmt

+

Source: compiler/filter/assign.go:11

+
+
+

func IncDecStmt(stmt ast.Stmt, info *types.Info) ast.Stmt

+

Source: compiler/filter/incdecstmt.go:10

+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-gopherjspkg.html b/docs/api/pkg-compiler-gopherjspkg.html new file mode 100644 index 00000000..bd84aa5a --- /dev/null +++ b/docs/api/pkg-compiler-gopherjspkg.html @@ -0,0 +1,48 @@ + +compiler/gopherjspkg - GopherJS
Compiler

compiler/gopherjspkg

Package gopherjspkg provides core GopherJS packages via a virtual filesystem.

import "github.com/gopherjs/gopherjs/compiler/gopherjspkg"

+

Package gopherjspkg provides core GopherJS packages via a virtual filesystem.

+

Core GopherJS packages are packages that are critical for GopherJS compiler +operation. They are needed to build the Go standard library with GopherJS. +Currently, they include:

+
+
+ +
+
github.com/gopherjs/gopherjs/js
+github.com/gopherjs/gopherjs/nosync
+
+ +

Variables

+

FS is a virtual filesystem that contains core GopherJS packages.

Source: compiler/gopherjspkg/fs.go:6

+
+ +
+
var FS http.FileSystem
+
+

Functions

+
+

func RegisterFS(fs http.FileSystem)

+

Source: compiler/gopherjspkg/fs.go:9

+

RegisterFS allows setting the embedded fs from another package.

+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-incjs.html b/docs/api/pkg-compiler-incjs.html new file mode 100644 index 00000000..1b941af5 --- /dev/null +++ b/docs/api/pkg-compiler-incjs.html @@ -0,0 +1,59 @@ + +compiler/incjs - GopherJS
Compiler

compiler/incjs

github.com/gopherjs/gopherjs/compiler/incjs

import "github.com/gopherjs/gopherjs/compiler/incjs"

+ +

Constants

+

Ext is the file extension for .inc.js files.

Source: compiler/incjs/file.go:15

+
+ +
+
const Ext = ".inc.js"
+
+

Functions

+
+

func FromDir(bctx *build.Context, dir string) ([]File, error)

+

Source: compiler/incjs/file.go:26

+

FromDir finds and loads any *.inc.js packages in the build context +directory.

+
+
+

func FromFilename(filename string) (*File, error)

+

Source: compiler/incjs/file.go:75

+
+

Types

+
+

type File

+

Source: compiler/incjs/file.go:18

+

File represents a *.inc.js file metadata and content.

+
+
+ +
+
type File struct {
+	Path    string // Full file path for the build context the file came from.
+	ModTime time.Time
+	Content []byte
+}
+
+
Fields
  • Path string

    Full file path for the build context the file came from.

  • ModTime time.Time
  • Content []byte
+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-linkname.html b/docs/api/pkg-compiler-linkname.html new file mode 100644 index 00000000..3fdeb38c --- /dev/null +++ b/docs/api/pkg-compiler-linkname.html @@ -0,0 +1,96 @@ + +compiler/linkname - GopherJS
Compiler

compiler/linkname

github.com/gopherjs/gopherjs/compiler/linkname

import "github.com/gopherjs/gopherjs/compiler/linkname"

+ +

Functions

+
+

func ParseGoLinknames(fset *token.FileSet, pkgPath string, file *ast.File) ([]GoLinkname, error)

+

Source: compiler/linkname/linkname.go:118

+

parseGoLinknames processed comments in a source file and extracts //go:linkname +compiler directive from the comments.

+

The following directive format is supported: +//go:linkname . +//go:linkname .. +//go:linkname .<(*type)>.

+

GopherJS directive support has the following limitations:

+
    +
  • External linkname must be specified.
  • +
  • The directive must be applied to a package-level function or method (variables +are not supported).
  • +
  • The local function referenced by the directive must have no body (in other +words, it can only "import" an external function implementation into the +local scope).
  • +
+
+

Types

+
+

type GoLinkname

+

Source: compiler/linkname/linkname.go:20

+

GoLinkname describes a go:linkname compiler directive found in the source code.

+

GopherJS treats these directives in a way that resembles a symbolic link, +where for a single given symbol implementation there may be zero or more +symbols referencing it. This is subtly different from the upstream Go +implementation, which simply overrides symbol name the linker will use.

+
+
+ +
+
type GoLinkname struct {
+	Implementation symbol.Name
+	Reference      symbol.Name
+}
+
+
Fields
  • Implementation symbol.Name
  • Reference symbol.Name
+
+
+

type GoLinknameSet

+

Source: compiler/linkname/linkname.go:213

+

GoLinknameSet is a utility that enables quick lookup of whether a decl is +affected by any go:linkname directive in the program.

+
+
+ +
+
type GoLinknameSet struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Add(entries []GoLinkname) error

+

Source: compiler/linkname/linkname.go:219

+

Add more GoLinkname directives into the set.

+
+
+

func FindImplementation(sym symbol.Name) (symbol.Name, bool)

+

Source: compiler/linkname/linkname.go:247

+

FindImplementation returns a symbol name, which provides the implementation +for the given symbol. The second value indicates whether the implementation +was found.

+
+
+

func IsImplementation(sym symbol.Name) bool

+

Source: compiler/linkname/linkname.go:239

+

IsImplementation returns true if there is a directive referencing this symbol +as an implementation.

+
+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-natives.html b/docs/api/pkg-compiler-natives.html new file mode 100644 index 00000000..de4404ab --- /dev/null +++ b/docs/api/pkg-compiler-natives.html @@ -0,0 +1,35 @@ + +compiler/natives - GopherJS
Compiler

compiler/natives

Package natives provides native packages via a virtual filesystem.

import "github.com/gopherjs/gopherjs/compiler/natives"

+

Package natives provides native packages via a virtual filesystem.

+

See documentation of parseAndAugment in github.com/gopherjs/gopherjs/build +for explanation of behavior used to augment the native packages using the files +in src subfolder.

+ +

Variables

+

FS is a virtual filesystem that contains native packages.

Source: compiler/natives/natives.go:13

+
+ +
+
var FS embed.FS
+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-prelude.html b/docs/api/pkg-compiler-prelude.html new file mode 100644 index 00000000..dc22f53b --- /dev/null +++ b/docs/api/pkg-compiler-prelude.html @@ -0,0 +1,45 @@ + +compiler/prelude - GopherJS
Compiler

compiler/prelude

github.com/gopherjs/gopherjs/compiler/prelude

import "github.com/gopherjs/gopherjs/compiler/prelude"

+ +

Functions

+
+

func PreludeFiles() (files []PreludeFile)

+

Source: compiler/prelude/prelude.go:31

+

PreludeFiles gets the GopherJS JavaScript interop layers.

+
+

Types

+
+

type PreludeFile

+

Source: compiler/prelude/prelude.go:25

+
+
+ +
+
type PreludeFile struct {
+	Name   string
+	Source string
+}
+
+
Fields
  • Name string
  • Source string
+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-sources.html b/docs/api/pkg-compiler-sources.html new file mode 100644 index 00000000..e83e4f01 --- /dev/null +++ b/docs/api/pkg-compiler-sources.html @@ -0,0 +1,182 @@ + +compiler/sources - GopherJS
Compiler

compiler/sources

github.com/gopherjs/gopherjs/compiler/sources

import "github.com/gopherjs/gopherjs/compiler/sources"

+ +

Functions

+
+

func SortedSourcesSlice(sourcesSlice []*Sources)

+

Source: compiler/sources/sources.go:269

+

SortedSourcesSlice in place sorts the given slice of Sources by ImportPath. +This will not change the order of the files within any Sources.

+
+

Types

+
+

type Importer

+

Source: compiler/sources/sources.go:62

+
+
+ +
+
type Importer func(path, srcDir string) (*Sources, error)
+
+
+
+

type Sources

+

Source: compiler/sources/sources.go:25

+

Sources is a slice of parsed Go sources and additional data for a package.

+

Note that the sources would normally belong to a single logical Go package, +but they don't have to be a real Go package (i.e. found on the file system) +or represent a complete package (i.e. it could be only a few source files +compiled by gopherjs build foo.go bar.go).

+
+
+ +
+
type Sources struct {
+	// ImportPath representing the sources, if exists.
+	//
+	// May be empty for "virtual"
+	// packages like testmain or playground-generated package.
+	// Otherwise this must be the absolute import path for a package.
+	ImportPath string
+
+	// Dir is the directory containing package sources
+	Dir string
+
+	// Files is the parsed and augmented Go AST files for the package.
+	Files []*ast.File
+
+	// FileSet is the file set for the parsed files for this source.
+	FileSet *token.FileSet
+
+	// JSFiles is the JavaScript files that are part of the package.
+	JSFiles []incjs.File
+
+	// TypeInfo is the type information for this package.
+	// This is nil until set by Analyze.
+	TypeInfo *analysis.Info
+
+	// Package is the types package for these source files.
+	// This is nil until set by TypeCheck.
+	Package *types.Package
+
+	// GoLinknames is the set of Go linknames for this package.
+	// This is nil until set by ParseGoLinknames.
+	GoLinknames []linkname.GoLinkname
+	// contains filtered or unexported fields
+}
+
+
Fields
  • ImportPath string

    ImportPath representing the sources, if exists.

    +

    May be empty for "virtual" +packages like testmain or playground-generated package. +Otherwise this must be the absolute import path for a package.

  • Dir string

    Dir is the directory containing package sources

  • Files []*ast.File

    Files is the parsed and augmented Go AST files for the package.

  • FileSet *token.FileSet

    FileSet is the file set for the parsed files for this source.

  • JSFiles []incjs.File

    JSFiles is the JavaScript files that are part of the package.

  • TypeInfo *analysis.Info

    TypeInfo is the type information for this package. +This is nil until set by Analyze.

  • Package *types.Package

    Package is the types package for these source files. +This is nil until set by TypeCheck.

  • GoLinknames []linkname.GoLinkname

    GoLinknames is the set of Go linknames for this package. +This is nil until set by ParseGoLinknames.

+
+

func Analyze(importer Importer, tContext *types.Context, instances *typeparams.PackageInstanceSets)

+

Source: compiler/sources/sources.go:174

+

Analyze will determine the type parameters instances, blocking, +and other type information for the package. +This will set the TypeInfo and Instances fields on the Sources.

+

This must be called after to simplify to ensure the pointers +in the AST are still valid. +The instances must be collected prior to this call.

+

Note that at the end of this call the analysis information +has NOT been propagated across packages yet.

+
+
+

func CollectInstances(tc *typeparams.Collector)

+

Source: compiler/sources/sources.go:160

+

CollectInstances will determine the type parameters instances for the package.

+

This must be called before Analyze to have the type parameters instances +needed during analysis.

+

Note that once all the sources are collected, the collector needs to be +finished to ensure all the instances are collected.

+
+
+

func ParseGoLinknames() error

+

Source: compiler/sources/sources.go:188

+

ParseGoLinknames extracts all //go:linkname compiler directive from the sources.

+

This will set the GoLinknames field on the Sources.

+
+
+

func Read(decode func(any) error) error

+

Source: compiler/sources/serializer.go:53

+

Read will call decode multiple times to read the various fields +of the sources. +The order of the calls must match the order of the calls in encodeSources.

+

The given srcModTime is used to determine if the serialized sources are +out-of-date. If they are then this returns a nil sources and nil error, +and the build time that was read.

+
+
+

func Simplify()

+

Source: compiler/sources/sources.go:85

+

Simplify processed each Files entry with astrewrite.Simplify.

+

Note this function mutates the original Files slice. +This must be called after TypeCheck and before analyze since +this will change the pointers in the AST. For example, the pointers +to function literals will change, making it impossible to find them +in the type information, if analyze is called first.

+
+
+

func Sort()

+

Source: compiler/sources/sources.go:68

+

Sort sorts the Go files slice by the original source name to ensure consistent order +of processing. This is required for reproducible JavaScript output.

+

Note this function mutates the original Files slice.

+
+
+

func TypeCheck(importer Importer, sizes types.Sizes, tContext *types.Context) error

+

Source: compiler/sources/sources.go:99

+

TypeCheck the sources. Returns information about declared package types and +type information for the supplied AST. +This will set the Package field on the Sources.

+

If the Package field is not nil, e.g. this function has already been run, +this will be a no-op.

+

This must be called prior to simplify to get the types.Info used by simplify.

+
+
+

func UnresolvedImports(skip ...string) []string

+

Source: compiler/sources/sources.go:213

+

UnresolvedImports calculates the import paths of the package's dependencies +based on all the imports in the augmented Go AST files.

+

This is used to determine the unresolved imports that weren't in the +PackageData.Imports slice since they were added during augmentation or +during template generation.

+

The given skip paths (typically those imports from PackageData.Imports) +will not be returned in the results. +This will not return any *_test packages in the results.

+
+
+

func Write(encode func(any) error) error

+

Source: compiler/sources/serializer.go:18

+

Write will call encode multiple times to write the various fields +of the sources. This is designed to be used with a gob.Encoder.

+

The order of the calls must match the order of the calls in Read.

+

s.TypeInfo, s.baseInfo, s.Package, and s.GoLinknames are intentionally +omitted from encoding since they must be constructed in the context of the +full program to be able to handle generics and cross-package references.

+
+
\ No newline at end of file diff --git a/docs/api/pkg-compiler-typesutil.html b/docs/api/pkg-compiler-typesutil.html new file mode 100644 index 00000000..d2972197 --- /dev/null +++ b/docs/api/pkg-compiler-typesutil.html @@ -0,0 +1,212 @@ + +compiler/typesutil - GopherJS
Compiler

compiler/typesutil

github.com/gopherjs/gopherjs/compiler/typesutil

import "github.com/gopherjs/gopherjs/compiler/typesutil"

+ +

Functions

+
+

func IsJsObject(t types.Type) bool

+

Source: compiler/typesutil/typesutil.go:12

+
+
+

func IsJsPackage(pkg *types.Package) bool

+

Source: compiler/typesutil/typesutil.go:8

+
+
+

func IsMethod(o types.Object) bool

+

Source: compiler/typesutil/typesutil.go:112

+

IsMethod returns true if the passed object is a method.

+
+
+

func NewSelection(kind types.SelectionKind, recv types.Type, index []int, obj types.Object, typ types.Type) Selection

+

Source: compiler/typesutil/typesutil.go:60

+

NewSelection creates a new selection.

+
+
+

func OffsetOf(sizes types.Sizes, sel Selection) int64

+

Source: compiler/typesutil/typesutil.go:96

+

OffsetOf returns byte offset of a struct field specified by the provided +selection.

+

Adapted from go/types.Config.offsetof().

+
+
+

func RecvAsFirstArg(sig *types.Signature) *types.Signature

+

Source: compiler/typesutil/typesutil.go:40

+

RecvAsFirstArg takes a method signature and returns a function +signature with receiver as the first parameter.

+
+
+

func RecvType(sig *types.Signature) *types.Named

+

Source: compiler/typesutil/typesutil.go:24

+

RecvType returns a named type of a method receiver, or nil if it's not a method.

+

For methods on a pointer receiver, the underlying named type is returned.

+
+

Types

+
+

type Map

+

Source: compiler/typesutil/map.go:10

+

Map is a type-safe wrapper around golang.org/x/tools/go/types/typeutil.Map.

+
+
+ +
+
type Map[Val any] struct {
+	// contains filtered or unexported fields
+}
+
+
+

func At(key types.Type) Val

+

Source: compiler/typesutil/map.go:12

+
+
+

func Delete(key types.Type) bool

+

Source: compiler/typesutil/map.go:30

+
+
+

func Len() int

+

Source: compiler/typesutil/map.go:32

+
+
+

func Set(key types.Type, value Val) (prev Val)

+

Source: compiler/typesutil/map.go:21

+
+
+

func String() string

+

Source: compiler/typesutil/map.go:34

+
+
+
+

type Selection

+

Source: compiler/typesutil/typesutil.go:51

+

Selection is a common interface for go/types.Selection and our custom-constructed +method and field selections.

+
+
+ +
+
type Selection interface {
+	Kind() types.SelectionKind
+	Recv() types.Type
+	Index() []int
+	Obj() types.Object
+	Type() types.Type
+}
+
+
Methods
  • Kind func() types.SelectionKind
  • Recv func() types.Type
  • Index func() []int
  • Obj func() types.Object
  • Type func() types.Type
+
+
+

type Signature

+

Source: compiler/typesutil/signature.go:10

+

Signature is a helper that provides convenient access to function +signature type information.

+
+
+ +
+
type Signature struct {
+	Sig *types.Signature
+}
+
+
Fields
  • Sig *types.Signature
+
+

func HasNamedResults() bool

+

Source: compiler/typesutil/signature.go:65

+

HasNamedResults returns true if the function signature returns something and +returned results are names (e.g. func () (val int, err error)).

+
+
+

func HasResults() bool

+

Source: compiler/typesutil/signature.go:59

+

HasResults returns true if the function signature returns something.

+
+
+

func Param(i int, ellipsis bool) types.Type

+

Source: compiler/typesutil/signature.go:44

+

Param returns the expected argument type for the i'th argument position.

+

This function is able to return correct expected types for variadic calls +both when ellipsis syntax (e.g. myFunc(requiredArg, optionalArgSlice...)) +is used and when optional args are passed individually.

+

The returned types may differ from the actual argument expression types if +there is an implicit type conversion involved (e.g. passing a struct into a +function that expects an interface).

+
+
+

func RequiredParams() int

+

Source: compiler/typesutil/signature.go:15

+

RequiredParams returns the number of required parameters in the function signature.

+
+
+

func VariadicType() types.Type

+

Source: compiler/typesutil/signature.go:28

+

VariadicType returns the slice-type corresponding to the signature's variadic +parameter, or nil of the signature is not variadic. With the exception of +the special-case append([]byte{}, "string"...), the returned type is +*types.Slice and .Elem() method can be used to get the type of individual +arguments.

+
+
+
+

type TypeList

+

Source: compiler/typesutil/typelist.go:9

+

TypeList an ordered list of types.

+
+
+ +
+
type TypeList []types.Type
+
+
+

func Equal(other TypeList) bool

+

Source: compiler/typesutil/typelist.go:23

+

Equal returns true if both lists of type arguments are identical.

+
+
+

func String() string

+

Source: compiler/typesutil/typelist.go:11

+
+
+
+

type TypeNames

+

Source: compiler/typesutil/typenames.go:8

+

TypeNames implements an ordered set of *types.TypeName pointers.

+

The set is ordered to ensure deterministic behavior across compiler runs.

+
+
+ +
+
type TypeNames struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Add(name *types.TypeName)

+

Source: compiler/typesutil/typenames.go:16

+

Add a type name to the set. If the type name has been previously added, +this operation is a no-op. Two type names are considered equal iff they have +the same memory address.

+
+
+

func Slice() []*types.TypeName

+

Source: compiler/typesutil/typenames.go:28

+

Slice returns set elements in the order they were first added to the set.

+
+
\ No newline at end of file diff --git a/docs/api/pkg-compiler.html b/docs/api/pkg-compiler.html new file mode 100644 index 00000000..a9a6620c --- /dev/null +++ b/docs/api/pkg-compiler.html @@ -0,0 +1,275 @@ + +compiler - GopherJS
Compiler

compiler

Package compiler implements GopherJS compiler logic.

import "github.com/gopherjs/gopherjs/compiler"

+

Package compiler implements GopherJS compiler logic.

+

WARNING: This package's API is treated as internal and currently doesn't +provide any API stability guarantee, use it at your own risk. If you need a +stable interface, prefer invoking the gopherjs CLI tool as a subprocess.

+ +

Constants

+

GoVersion is the current Go 1.x version that GopherJS is compatible with.

Source: compiler/version_check.go:18

+
+ +
+
const GoVersion = 21
+
+

Version is the GopherJS compiler version string.

Source: compiler/version_check.go:15

+
+ +
+
const Version = "1.21.0+go1.21.13"
+
+

Functions

+
+

func CheckGoVersion(goroot string) error

+

Source: compiler/version_check.go:23

+

CheckGoVersion checks the version of the Go distribution +at goroot, and reports an error if it's not compatible +with this version of the GopherJS compiler.

+
+
+

func Compile(srcs *sources.Sources, tContext *types.Context, minify bool) (_ *Archive, err error)

+

Source: compiler/package.go:165

+

Compile the provided Go sources as a single package.

+

Provided sources must be prepared so that the type information has been determined, +and the source files have been sorted by name to ensure reproducible JavaScript output.

+
+
+

func DefaultFilter(w io.Writer) *sourcemapx.Filter

+

Source: compiler/compiler.go:127

+

DefaultFilter creates a new sourcemapx.Filter that writes to the given writer. +This is not in the internal package so that tools like the playground can +use it when calling things like the exported WriteProgramCode function.

+
+
+

func GoRelease(goroot string) string

+

Source: compiler/version_check.go:63

+

GoRelease does a best-effort to identify the Go release we are building with. +If unable to determine the precise version for the given GOROOT, falls back +to the best guess available.

+
+
+

func ImportDependencies(archive *Archive, importPkg func(string) (*Archive, error)) ([]*Archive, error)

+

Source: compiler/compiler.go:89

+
+
+

func PrepareAllSources(allSources []*sources.Sources, importer sources.Importer, tContext *types.Context) error

+

Source: compiler/package.go:243

+

PrepareAllSources prepares all sources for compilation by +parsing go linknames, type checking, sorting, simplifying, and +performing cross package analysis. +The results are stored in the provided sources.

+

All sources must be given at the same time for cross package analysis to +work correctly. For consistency, the sources should be sorted by import path.

+
+
+

func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, gls linkname.GoLinknameSet, minify bool, w *sourcemapx.Filter) error

+

Source: compiler/compiler.go:209

+
+
+

func WriteProgramCode(pkgs []*Archive, w *sourcemapx.Filter, goVersion, testBinary string) error

+

Source: compiler/compiler.go:131

+
+

Types

+
+

type Archive

+

Source: compiler/compiler.go:53

+

Archive contains intermediate build outputs of a single package.

+

This is a logical equivalent of an object file in traditional compilers.

+
+
+ +
+
type Archive struct {
+	// Package's full import path, e.g. "some/package/name".
+	ImportPath string
+	// Package's name as per "package" statement at the top of a source file.
+	// Usually matches the last component of import path, but may differ in
+	// certain cases (e.g. main or test packages).
+	Name string
+	// A list of full package import paths that the current package imports across
+	// all source files. See go/types.Package.Imports().
+	Imports []string
+	// The package information is used by the compiler to type-check packages
+	// that import this one. See [gcexportdata.Write].
+	Package *types.Package
+	// Compiled package-level symbols.
+	Declarations []*Decl
+	// Concatenated contents of all raw .inc.js of the package.
+	IncJSCode []incjs.File
+	// The file set containing the source code locations for various symbols
+	// (e.g. for sourcemap generation). See [token.FileSet.Write].
+	FileSet *token.FileSet
+	// Whether or not the package was compiled with minification enabled.
+	Minified bool
+	// A list of go:linkname directives encountered in the package.
+	GoLinknames []linkname.GoLinkname
+}
+
+
Fields
  • ImportPath string

    Package's full import path, e.g. "some/package/name".

  • Name string

    Package's name as per "package" statement at the top of a source file. +Usually matches the last component of import path, but may differ in +certain cases (e.g. main or test packages).

  • Imports []string

    A list of full package import paths that the current package imports across +all source files. See go/types.Package.Imports().

  • Package *types.Package

    The package information is used by the compiler to type-check packages +that import this one. See [gcexportdata.Write].

  • Declarations []*Decl

    Compiled package-level symbols.

  • IncJSCode []incjs.File

    Concatenated contents of all raw .inc.js of the package.

  • FileSet *token.FileSet

    The file set containing the source code locations for various symbols +(e.g. for sourcemap generation). See [token.FileSet.Write].

  • Minified bool

    Whether or not the package was compiled with minification enabled.

  • GoLinknames []linkname.GoLinkname

    A list of go:linkname directives encountered in the package.

+
+

func String() string

+

Source: compiler/compiler.go:79

+
+
+
+

type Decl

+

Source: compiler/decls.go:30

+

Decl represents a package-level symbol (e.g. a function, variable or type).

+

It contains code generated by the compiler for this specific symbol, which is +grouped by the execution stage it belongs to in the JavaScript runtime.

+

When adding new fields to this struct, make sure the field is exported +so that it Gob serializes correctly for the archive cache.

+
+
+ +
+
type Decl struct {
+	// The package- or receiver-type-qualified name of function or method obj.
+	// See go/types.Func.FullName().
+	FullName string
+	// A logical equivalent of a symbol name in an object file in the traditional
+	// Go compiler/linker toolchain. Used by GopherJS to support go:linkname
+	// directives. Must be set for decls that are supported by go:linkname
+	// implementation.
+	LinkingName symbol.Name
+	// A list of package-level JavaScript variable names this symbol needs to declare.
+	Vars []string
+	// A JS expression by which the object represented by this decl may be
+	// referenced within the package context. Empty if the decl represents no such
+	// object.
+	RefExpr string
+	// NamedRecvType is method named recv declare.
+	NamedRecvType string
+	// JavaScript code that declares a local variable for an imported package.
+	ImportCode []byte
+	// JavaScript code that declares basic information about a named type symbol.
+	// It configures basic information about the type and its identity.
+	TypeDeclCode []byte
+	// JavaScript code that assigns exposed named types to the package.
+	ExportTypeCode []byte
+	// JavaScript code that declares basic information about an anonymous type.
+	// It configures basic information about the type.
+	// This is added to the finish setup phase to have access to all packages.
+	AnonTypeDeclCode []byte
+	// JavaScript code that declares basic information about a function or
+	// method symbol. This contains the function's or method's compiled body.
+	// This is added to the finish setup phase to have access to all packages.
+	FuncDeclCode []byte
+	// JavaScript code that assigns exposed functions to the package.
+	// This is added to the finish setup phase to have access to all packages.
+	ExportFuncCode []byte
+	// JavaScript code that initializes reflection metadata about a type's method list.
+	// This is added to the finish setup phase to have access to all packages.
+	MethodListCode []byte
+	// JavaScript code that initializes the rest of reflection metadata about a type
+	// (e.g. struct fields, array type sizes, element types, etc.).
+	// This is added to the finish setup phase to have access to all packages.
+	TypeInitCode []byte
+	// JavaScript code that needs to be executed during the package init phase to
+	// set the symbol up (e.g. initialize package-level variable value).
+	InitCode []byte
+	// DCEInfo stores the information for dead-code elimination.
+	DCEInfo dce.Info
+	// Set to true if a function performs a blocking operation (I/O or
+	// synchronization). The compiler will have to generate function code such
+	// that it can be resumed after a blocking operation completes without
+	// blocking the main thread in the meantime.
+	Blocking bool
+}
+
+
Fields
  • FullName string

    The package- or receiver-type-qualified name of function or method obj. +See go/types.Func.FullName().

  • LinkingName symbol.Name

    A logical equivalent of a symbol name in an object file in the traditional +Go compiler/linker toolchain. Used by GopherJS to support go:linkname +directives. Must be set for decls that are supported by go:linkname +implementation.

  • Vars []string

    A list of package-level JavaScript variable names this symbol needs to declare.

  • RefExpr string

    A JS expression by which the object represented by this decl may be +referenced within the package context. Empty if the decl represents no such +object.

  • NamedRecvType string

    NamedRecvType is method named recv declare.

  • ImportCode []byte

    JavaScript code that declares a local variable for an imported package.

  • TypeDeclCode []byte

    JavaScript code that declares basic information about a named type symbol. +It configures basic information about the type and its identity.

  • ExportTypeCode []byte

    JavaScript code that assigns exposed named types to the package.

  • AnonTypeDeclCode []byte

    JavaScript code that declares basic information about an anonymous type. +It configures basic information about the type. +This is added to the finish setup phase to have access to all packages.

  • FuncDeclCode []byte

    JavaScript code that declares basic information about a function or +method symbol. This contains the function's or method's compiled body. +This is added to the finish setup phase to have access to all packages.

  • ExportFuncCode []byte

    JavaScript code that assigns exposed functions to the package. +This is added to the finish setup phase to have access to all packages.

  • MethodListCode []byte

    JavaScript code that initializes reflection metadata about a type's method list. +This is added to the finish setup phase to have access to all packages.

  • TypeInitCode []byte

    JavaScript code that initializes the rest of reflection metadata about a type +(e.g. struct fields, array type sizes, element types, etc.). +This is added to the finish setup phase to have access to all packages.

  • InitCode []byte

    JavaScript code that needs to be executed during the package init phase to +set the symbol up (e.g. initialize package-level variable value).

  • DCEInfo dce.Info

    DCEInfo stores the information for dead-code elimination.

  • Blocking bool

    Set to true if a function performs a blocking operation (I/O or +synchronization). The compiler will have to generate function code such +that it can be resumed after a blocking operation completes without +blocking the main thread in the meantime.

+
+

func Dce() *dce.Info

+

Source: compiler/decls.go:100

+

Dce gets the information for dead-code elimination.

+
+
+
+

type Dependency

+

Source: compiler/compiler.go:83

+
+
+ +
+
type Dependency struct {
+	Pkg    string
+	Type   string
+	Method string
+}
+
+
Fields
  • Pkg string
  • Type string
  • Method string
+
+
+

type FatalError

+

Source: compiler/utils.go:952

+

FatalError is an error compiler panics with when it encountered a fatal error.

+

FatalError implements io.Writer, which can be used to record any free-form +debugging details for human consumption. This information will be included +into String() result along with the rest.

+
+
+ +
+
type FatalError struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Error) Error() string

+

Source: compiler/utils.go:974

+
+
+

func Unwrap() error

+

Source: compiler/utils.go:958

+
+
+

func Write(p []byte) (n int, err error)

+

Source: compiler/utils.go:972

+

Write implements io.Writer and can be used to store free-form debugging clues.

+
+
\ No newline at end of file diff --git a/docs/api/pkg-js.html b/docs/api/pkg-js.html new file mode 100644 index 00000000..f1fb8d11 --- /dev/null +++ b/docs/api/pkg-js.html @@ -0,0 +1,277 @@ + +js - GopherJS
Js

js

Package js provides functions for interacting with native JavaScript APIs.

import "github.com/gopherjs/gopherjs/js"

+

Package js provides functions for interacting with native JavaScript APIs. Calls to these functions are treated specially by GopherJS and translated directly to their corresponding JavaScript syntax.

+

Use MakeWrapper to expose methods to JavaScript. Use MakeFullWrapper to expose methods AND fields to JavaScript. When passing values directly, the following type conversions are performed:

+
+
+ +
+
| Go type               | JavaScript type       | Conversions back to any |
+| --------------------- | --------------------- | ----------------------- |
+| bool                  | Boolean               | bool                    |
+| integers and floats   | Number                | float64                 |
+| string                | String                | string                  |
+| []int8                | Int8Array             | []int8                  |
+| []int16               | Int16Array            | []int16                 |
+| []int32, []int        | Int32Array            | []int                   |
+| []uint8               | Uint8Array            | []uint8                 |
+| []uint16              | Uint16Array           | []uint16                |
+| []uint32, []uint      | Uint32Array           | []uint                  |
+| []float32             | Float32Array          | []float32               |
+| []float64             | Float64Array          | []float64               |
+| all other slices      | Array                 | []any                   |
+| arrays                | see slice type        | see slice type          |
+| functions             | Function              | func(...any) *js.Object |
+| time.Time             | Date                  | time.Time               |
+| -                     | instanceof Node       | *js.Object              |
+| maps, structs         | instanceof Object     | map[string]any          |
+

Additionally, for a struct containing a *js.Object field, only the content of the field will be passed to JavaScript and vice versa.

+ +

Variables

+

Global gives JavaScript's global object ("window" for browsers and "GLOBAL" for Node.js).

Source: js/js.go:98

+
+ +
+
var Global *Object
+
+

Module gives the value of the "module" variable set by Node.js. Hint: Set a +module export with 'js.Module.Get("exports").Set("exportName", ...)'.

+

Note that js.Module is only defined in runtimes which support CommonJS +modules (https://nodejs.org/api/modules.html). NodeJS supports it natively, +but in browsers it can only be used if GopherJS output is passed through a +bundler which implements CommonJS (for example, webpack or esbuild).

Source: js/js.go:107

+
+ +
+
var Module *Object
+
+

Undefined gives the JavaScript value "undefined".

Source: js/js.go:110

+
+ +
+
var Undefined *Object
+
+

Functions

+
+

func Debugger()

+

Source: js/js.go:113

+

Debugger gets compiled to JavaScript's "debugger;" statement.

+
+
+

func InternalObject(i any) *Object

+

Source: js/js.go:116

+

InternalObject returns the internal JavaScript object that represents i. Not intended for public use.

+
+
+

func Keys(o *Object) []string

+

Source: js/js.go:126

+

Keys returns the keys of the given JavaScript object.

+
+
+

func MakeFullWrapper(i any) *Object

+

Source: js/js.go:163

+

MakeFullWrapper creates a JavaScript object which has wrappers for the exported +methods of i, and, where i is a (pointer to a) struct value, wrapped getters +and setters +(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) +for the non-embedded exported fields of i. Values accessed via these methods +and getters are themselves wrapped when accessed, but an important point to +note is that a new wrapped value is created on each access.

+
+
+

func MakeFunc(fn func(this *Object, arguments []*Object) any) *Object

+

Source: js/js.go:121

+

MakeFunc wraps a function and gives access to the values of JavaScript's "this" and "arguments" keywords.

+
+
+

func MakeUint64(hi, lo float64) uint64

+

Source: js/js.go:265

+

MakeUint64 will take the high and low parts to construct a uint64 number. +Since JS doesn't have a 64-bit integer we store it as a high and low 32-bit integers.

+
+
+

func MakeWrapper(i any) *Object

+

Source: js/js.go:139

+

MakeWrapper creates a JavaScript object which has wrappers for the exported methods of i. Use explicit getter and setter methods to expose struct fields to JavaScript.

+
+
+

func NewArrayBuffer(b []byte) *Object

+

Source: js/js.go:250

+

NewArrayBuffer creates a JavaScript ArrayBuffer from a byte slice.

+
+
+

func Uint64High(x uint64) uint32

+

Source: js/js.go:268

+

Uint64High will get the high 32-bit integer used when storing uint64.

+
+
+

func Uint64Low(x uint64) uint32

+

Source: js/js.go:271

+

Uint64Low will get the low 32-bit integer used when storing uint64.

+
+

Types

+
+

type Error

+

Source: js/js.go:83

+

Error encapsulates JavaScript errors. Those are turned into a Go panic and may be recovered, giving an *Error that holds the JavaScript error object.

+
+
+ +
+
type Error struct {
+	*Object
+}
+
+
Fields
  • *Object
+
+

func Error) Error() string

+

Source: js/js.go:88

+

Error returns the message of the encapsulated JavaScript error object.

+
+
+

func Stack() string

+

Source: js/js.go:93

+

Stack returns the stack property of the encapsulated JavaScript error object.

+
+
+
+

type M

+

Source: js/js.go:258

+

M is a simple map type. It is intended as a shorthand for JavaScript objects (before conversion).

+
+
+ +
+
type M map[string]any
+
+
+
+

type Object

+

Source: js/js.go:29

+

Object is a container for a native JavaScript object. Calls to its methods are treated specially by GopherJS and translated directly to their JavaScript syntax. A nil pointer to Object is equal to JavaScript's "null". Object can not be used as a map key.

+
+
+ +
+
type Object struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Bool() bool

+

Source: js/js.go:59

+

Bool returns the object converted to bool according to JavaScript type conversions.

+
+
+

func Call(name string, args ...any) *Object

+

Source: js/js.go:50

+

Call calls the object's method with the given name.

+
+
+

func Delete(key string)

+

Source: js/js.go:38

+

Delete removes the object's property with the given key.

+
+
+

func Float() float64

+

Source: js/js.go:74

+

Float returns the object converted to float64 according to JavaScript type conversions (parseFloat).

+
+
+

func Get(key string) *Object

+

Source: js/js.go:32

+

Get returns the object's property with the given key.

+
+
+

func Index(i int) *Object

+

Source: js/js.go:44

+

Index returns the i'th element of an array.

+
+
+

func Int() int

+

Source: js/js.go:65

+

Int returns the object converted to int according to JavaScript type conversions (parseInt).

+
+
+

func Int64() int64

+

Source: js/js.go:68

+

Int64 returns the object converted to int64 according to JavaScript type conversions (parseInt).

+
+
+

func Interface() any

+

Source: js/js.go:77

+

Interface returns the object converted to any. See table in package comment for details.

+
+
+

func Invoke(args ...any) *Object

+

Source: js/js.go:53

+

Invoke calls the object itself. This will fail if it is not a function.

+
+
+

func Length() int

+

Source: js/js.go:41

+

Length returns the object's "length" property, converted to int.

+
+
+

func New(args ...any) *Object

+

Source: js/js.go:56

+

New creates a new instance of this type object. This will fail if it not a function (constructor).

+
+
+

func Set(key string, value any)

+

Source: js/js.go:35

+

Set assigns the value to the object's property with the given key.

+
+
+

func SetIndex(i int, value any)

+

Source: js/js.go:47

+

SetIndex sets the i'th element of an array.

+
+
+

func String() string

+

Source: js/js.go:62

+

String returns the object converted to string according to JavaScript type conversions.

+
+
+

func Uint64() uint64

+

Source: js/js.go:71

+

Uint64 returns the object converted to uint64 according to JavaScript type conversions (parseInt).

+
+
+

func Unsafe() uintptr

+

Source: js/js.go:80

+

Unsafe returns the object as an uintptr, which can be converted via unsafe.Pointer. Not intended for public use.

+
+
+
+

type S

+

Source: js/js.go:261

+

S is a simple slice type. It is intended as a shorthand for JavaScript arrays (before conversion).

+
+
+ +
+
type S []any
+
+
\ No newline at end of file diff --git a/docs/api/pkg-nosync.html b/docs/api/pkg-nosync.html new file mode 100644 index 00000000..2d46ff5b --- /dev/null +++ b/docs/api/pkg-nosync.html @@ -0,0 +1,251 @@ + +nosync - GopherJS
Nosync

nosync

github.com/gopherjs/gopherjs/nosync

import "github.com/gopherjs/gopherjs/nosync"

+ +

Types

+
+

type Map

+

Source: nosync/map.go:9

+

Map is a concurrent map with amortized-constant-time loads, stores, and deletes. +It is safe for multiple goroutines to call a Map's methods concurrently.

+

The zero Map is valid and empty.

+

A Map must not be copied after first use.

+
+
+ +
+
type Map struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Delete(key any)

+

Source: nosync/map.go:44

+

Delete deletes the value for a key.

+
+
+

func Load(key any) (value any, ok bool)

+

Source: nosync/map.go:16

+

Load returns the value stored in the map for a key, or nil if no +value is present. +The ok result indicates whether value was found in the map.

+
+
+

func LoadOrStore(key, value any) (actual any, loaded bool)

+

Source: nosync/map.go:32

+

LoadOrStore returns the existing value for the key if present. +Otherwise, it stores and returns the given value. +The loaded result is true if the value was loaded, false if stored.

+
+
+

func Range(f func(key, value any) bool)

+

Source: nosync/map.go:61

+

Range calls f sequentially for each key and value present in the map. +If f returns false, range stops the iteration.

+

Range does not necessarily correspond to any consistent snapshot of the Map's +contents: no key will be visited more than once, but if the value for any key +is stored or deleted concurrently, Range may reflect any mapping for that key +from any point during the Range call.

+

Range may be O(N) with the number of elements in the map even if f returns +false after a constant number of calls.

+
+
+

func Store(key, value any)

+

Source: nosync/map.go:22

+

Store sets the value for a key.

+
+
+
+

type Mutex

+

Source: nosync/mutex.go:4

+

Mutex is a dummy which is non-blocking.

+
+
+ +
+
type Mutex struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Lock()

+

Source: nosync/mutex.go:13

+

Lock locks m. It is a run-time error if m is already locked.

+
+
+

func Unlock()

+

Source: nosync/mutex.go:21

+

Unlock unlocks m. It is a run-time error if m is not locked.

+
+
+
+

type Once

+

Source: nosync/once.go:4

+

Once is an object that will perform exactly one action.

+
+
+ +
+
type Once struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Do(f func())

+

Source: nosync/once.go:28

+

Do calls the function f if and only if Do is being called for the +first time for this instance of Once. In other words, given

+
+
+ +
+
var once Once
+

if once.Do(f) is called multiple times, only the first call will invoke f, +even if f has a different value in each invocation. A new instance of +Once is required for each function to execute.

+

Do is intended for initialization that must be run exactly once. Since f +is niladic, it may be necessary to use a function literal to capture the +arguments to a function to be invoked by Do:

+
+
+ +
+
config.once.Do(func() { config.init(filename) })
+

If f causes Do to be called, it will panic.

+

If f panics, Do considers it to have returned; future calls of Do return +without calling f.

+
+
+
+

type Pool

+

Source: nosync/pool.go:31

+

A Pool is a set of temporary objects that may be individually saved and +retrieved.

+

Any item stored in the Pool may be removed automatically at any time without +notification. If the Pool holds the only reference when this happens, the +item might be deallocated.

+

A Pool is safe for use by multiple goroutines simultaneously.

+

Pool's purpose is to cache allocated but unused items for later reuse, +relieving pressure on the garbage collector. That is, it makes it easy to +build efficient, thread-safe free lists. However, it is not suitable for all +free lists.

+

An appropriate use of a Pool is to manage a group of temporary items +silently shared among and potentially reused by concurrent independent +clients of a package. Pool provides a way to amortize allocation overhead +across many clients.

+

An example of good use of a Pool is in the fmt package, which maintains a +dynamically-sized store of temporary output buffers. The store scales under +load (when many goroutines are actively printing) and shrinks when +quiescent.

+

On the other hand, a free list maintained as part of a short-lived object is +not a suitable use for a Pool, since the overhead does not amortize well in +that scenario. It is more efficient to have such objects implement their own +free list.

+
+
+ +
+
type Pool struct {
+	New func() any
+	// contains filtered or unexported fields
+}
+
+
Fields
  • New func() any
+
+

func Get() any

+

Source: nosync/pool.go:44

+

Get selects an arbitrary item from the Pool, removes it from the +Pool, and returns it to the caller. +Get may choose to ignore the pool and treat it as empty. +Callers should not assume any relation between values passed to Put and +the values returned by Get.

+

If Get would otherwise return nil and p.New is non-nil, Get returns +the result of calling p.New.

+
+
+

func Put(x any)

+

Source: nosync/pool.go:57

+

Put adds x to the pool.

+
+
+
+

type RWMutex

+

Source: nosync/mutex.go:29

+

RWMutex is a dummy which is non-blocking.

+
+
+ +
+
type RWMutex struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Lock()

+

Source: nosync/mutex.go:41

+

Lock locks m for writing. It is a run-time error if rw is already locked for reading or writing.

+
+
+

func RLock()

+

Source: nosync/mutex.go:57

+

RLock locks m for reading. It is a run-time error if rw is already locked for reading or writing.

+
+
+

func RUnlock()

+

Source: nosync/mutex.go:65

+

RUnlock undoes a single RLock call; it does not affect other simultaneous readers. It is a run-time error if rw is not locked for reading.

+
+
+

func Unlock()

+

Source: nosync/mutex.go:49

+

Unlock unlocks rw for writing. It is a run-time error if rw is not locked for writing.

+
+
+
+

type WaitGroup

+

Source: nosync/mutex.go:73

+

WaitGroup is a dummy which is non-blocking.

+
+
+ +
+
type WaitGroup struct {
+	// contains filtered or unexported fields
+}
+
+
+

func Add(delta int)

+

Source: nosync/mutex.go:78

+

Add adds delta, which may be negative, to the WaitGroup If the counter goes negative, Add panics.

+
+
+

func Done()

+

Source: nosync/mutex.go:86

+

Done decrements the WaitGroup counter.

+
+
+

func WaitGroup) Wait()

+

Source: nosync/mutex.go:91

+

Wait panics if the WaitGroup counter is not zero.

+
+
\ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..97bd5cec --- /dev/null +++ b/docs/index.html @@ -0,0 +1,43 @@ + +GopherJS documentation - GopherJS
Start here

GopherJS documentation

Reference documentation for the GopherJS compiler and its public Go packages.

GopherJS compiles Go code to JavaScript so Go programs can run in browsers and +other JavaScript environments.

+

This site brings the project's public Go API into one searchable reference. It +is generated from the real GopherJS source at commit +490705b, +covering 17 public packages and 197 exported functions, types, methods, +variables, and constants.

+

Start here

+ +

What is included

+

The reference covers the compiler, build system, JavaScript interop package, +source map utilities, and other exported packages intended for GopherJS users +and contributors. Every API entry is derived from Go source and links back to +the pinned project revision for verification.

+
\ No newline at end of file diff --git a/docs/introduction.html b/docs/introduction.html new file mode 100644 index 00000000..97bd5cec --- /dev/null +++ b/docs/introduction.html @@ -0,0 +1,43 @@ + +GopherJS documentation - GopherJS
Start here

GopherJS documentation

Reference documentation for the GopherJS compiler and its public Go packages.

GopherJS compiles Go code to JavaScript so Go programs can run in browsers and +other JavaScript environments.

+

This site brings the project's public Go API into one searchable reference. It +is generated from the real GopherJS source at commit +490705b, +covering 17 public packages and 197 exported functions, types, methods, +variables, and constants.

+

Start here

+ +

What is included

+

The reference covers the compiler, build system, JavaScript interop package, +source map utilities, and other exported packages intended for GopherJS users +and contributors. Every API entry is derived from Go source and links back to +the pinned project revision for verification.

+
\ No newline at end of file diff --git a/docs/llms-full.txt b/docs/llms-full.txt new file mode 100644 index 00000000..7f2f93e1 --- /dev/null +++ b/docs/llms-full.txt @@ -0,0 +1,159 @@ +# GopherJS + +Reference documentation for the GopherJS compiler and its public Go packages. + +## Overview + +### GopherJS documentation + +Path: `/docs/introduction.html` + +Reference documentation for the GopherJS compiler and its public Go packages. + +GopherJS compiles Go code to JavaScript so Go programs can run in browsers and other JavaScript environments. This site brings the project's public Go API into one searchable reference. It is generated from the real GopherJS source at commit 490705b , covering 17 public packages and 197 exported functions, types, methods, variables, and constants. Start here Install and use GopherJS Try the GopherJS playground Read the API reference Review compatibility notes Check supported packages What is included The reference covers the compiler, build system, JavaScript interop package, source map utilities, and other exported packages intended for GopherJS users and contributors. Every API entry is derived from Go source and links back to the pinned project revision for verification. + +## API Reference + +### github.com/gopherjs/gopherjs + +Path: `/docs/api/package-root.html` + +github.com/gopherjs/gopherjs + +import "github.com/gopherjs/gopherjs" + +### build + +Path: `/docs/api/pkg-build.html` + +Package build implements GopherJS build system. + +import "github.com/gopherjs/gopherjs/build" Package build implements GopherJS build system. WARNING: This package's API is treated as internal and currently doesn't provide any API stability guarantee, use it at your own risk. If you need a stable interface, prefer invoking the gopherjs CLI tool as a subprocess. Index Variables Functions func DefaultEnv() Env func Import(path string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error) func ImportDir(dir string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error) func IsPkgNotFound(err error) bool func NewBuildContext(installSuffix string, buildTags []string) XContext func NewSession(options *Options) (*Session, error) Types type Env type Options type PackageData type Session type XContext Variables DefaultGOROOT is the default GOROOT value for builds. It uses the GOPHERJS_GOROOT environment variable if it is set, or else the default GOROOT value of the system Go distribution. Source: build/build.go:45 Copy var DefaultGOROOT = func () string { if goroot , ok := os . LookupEnv ( "GOPHERJS_GOROOT" ); ok { return goroot } return build . Default . GOROOT }() Functions func DefaultEnv() Env Source: build/context.go:46 DefaultEnv creates a new instance of build Env according to environment variables. By default, GopherJS will use GOOS=js GOARCH=ecmascript to build non-standard library packages. If GOOS or GOARCH environment variables are set and not empty, user-provided values will be used instead. This is done to facilitate transition from the legacy GopherJS behavior, which used native GOOS, and may be removed in future. func Import(path string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error) Source: build/build.go:85 Import returns details about the Go package named by the import path. If the path is a local import path naming a package that can be imported using a standard import path, the returned package will set p.ImportPath to that path. In the directory containing the package, .go and .inc.js files are considered part of the package except for: .go files in package documentation files starting with _ or . (likely editor temporary files) files with build constraints not satisfied by the context If an error occurs, Import returns a non-nil error and a nil *PackageData. func ImportDir(dir string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error) Source: build/build.go:114 ImportDir is like Import but processes the Go package found in the named directory. func IsPkgNotFound(err error) bool Source: build/context.go:458 IsPkgNotFound returns true if the error was caused by package not found. Unfortunately, go/build doesn't make use of typed errors, so we have to rely on the error message. func NewBuildContext(installSuffix string, buildTags []string) XContext Source: build/build.go:60 NewBuildContext creates a build context for building Go packages with GopherJS compiler. Core GopherJS packages (i.e., "github.com/gopherjs/gopherjs/js", "github.com/gopherjs/gopherjs/nosync") are loaded from gopherjspkg.FS virtual filesystem if not present in GOPATH or go.mod. func NewSession(options *Options) (*Session, error) Source: build/build.go:865 NewSession creates a new GopherJS build session. Types type Env Source: build/context.go:27 Env contains build environment configuration required to define an instance of XContext. Copy type Env struct { GOROOT string GOPATH string GOOS string GOARCH string BuildTags [] string InstallSuffix string } Fields GOROOT string GOPATH string GOOS string GOARCH string BuildTags []string InstallSuffix string type Options Source: build/build.go:672 Options controls build process behavior. Copy type Options struct { Verbose bool Quiet bool Watch bool CreateMapFile bool MapToLocalDisk bool Minify bool Color bool BuildTags [] string TestedPackage string NoCache bool } Fields Verbose bool Quiet bool Watch bool CreateMapFile bool MapToLocalDisk bool Minify bool Color bool BuildTags []string TestedPackage string NoCache bool func PrintError(format string, a ...any) Source: build/build.go:686 PrintError message to the terminal. func PrintSuccess(format string, a ...any) Source: build/build.go:694 PrintSuccess message to the terminal. type PackageData Source: build/build.go:703 PackageData is an extension of go/build.Package with additional metadata GopherJS requires. Copy type PackageData struct { * build . Package JSFiles [] incjs . File // IsTest is true if the package is being built for running tests. IsTest bool SrcModTime time . Time UpToDate bool // If true, the package does not have a corresponding physical directory on disk. IsVirtual bool // contains filtered or unexported fields } Fields *build.Package JSFiles []incjs.File IsTest bool IsTest is true if the package is being built for running tests. SrcModTime time.Time UpToDate bool IsVirtual bool If true, the package does not have a corresponding physical directory on disk. func FileModTime() time.Time Source: build/build.go:723 FileModTime returns the most recent modification time of the package's source files. This includes all .go and .inc.js that would be included in the build, but excludes any dependencies. func InstallPath() (string, error) Source: build/build.go:800 InstallPath returns the path where "gopherjs install" command should place the generated output. func InternalBuildContext() *build.Context Source: build/build.go:761 InternalBuildContext returns the build context that produced the package. WARNING: This function is a part of internal API and will be removed in future. func String() string Source: build/build.go:716 func TestPackage() *PackageData Source: build/build.go:766 TestPackage returns a variant of the package with "internal" tests. func XTestPackage() *PackageData Source: build/build.go:783 XTestPackage returns a variant of the package with "external" tests. type Session Source: build/build.go:833 Session manages internal state GopherJS requires to perform a build. This is the main interface to GopherJS build system. Session lifetime is roughly equivalent to a single GopherJS tool invocation. Copy type Session struct { // Binary archives produced during the current session and assumed to be // up to date with input sources and dependencies. In the -w ("watch") mode // must be cleared upon entering watching. UpToDateArchives map [ string ] * compiler . Archive Watcher * fsnotify . Watcher // contains filtered or unexported fields } Fields UpToDateArchives map[string]*compiler.Archive Binary archives produced during the current session and assumed to be up to date with input sources and dependencies. In the -w ("watch") mode must be cleared upon entering watching. Watcher *fsnotify.Watcher func BuildFiles(filenames []string, pkgObj string, cwd string) error Source: build/build.go:950 BuildFiles passed to the GopherJS tool as if they were a package. A ephemeral package will be created with only the provided files. This function is intended for use with, for example, gopherjs run main.go . func BuildProject(pkg *PackageData) (*compiler.Archive, error) Source: build/build.go:1030 BuildProject builds a command project (one with a main method) or builds a test project (one with a synthesized test main package). func EnableMapping(filter *sourcemapx.Filter, jsFileName string) Source: build/build.go:1380 SourceMappingCallback returns a callback for [github.com/gopherjs/gopherjs/compiler.SourceMapFilter] configured for the current build session. func GetSortedSources() []*sources.Sources Source: build/build.go:1052 GetSortedSources returns the sources sorted by import path. The files in the sources may still not be sorted yet. func GoRelease() string Source: build/build.go:930 GoRelease returns Go release version this session is building with. func ImportResolverFor(srcDir string) func(string) (*compiler.Archive, error) Source: build/build.go:1363 ImportResolverFor returns a function which returns a compiled package archive given an import path. func InstallSuffix() string Source: build/build.go:922 InstallSuffix returns the suffix added to the generated output file. func LoadPackages(pkg *PackageData) (*sources.Sources, error) Source: build/build.go:1189 LoadPackages will recursively load and parse the given package and its dependencies. This will return the sources for the given package. The returned source and sources for the dependencies will be added to the session's sources map. func SourcesForImport(path, srcDir string) (*sources.Sources, error) Source: build/build.go:1347 func TestBinary() string Source: build/build.go:939 TestBinary returns the testBinary value that is normally passed into cmd/link by a -X option. The testBinary value is defined in the STL at testing/testing.go for the testing.Testing() bool function. It is set to "1" if the binary (the JS output in our case) is built with "go test" and "0" otherwise. func WaitForChange() Source: build/build.go:1420 WaitForChange watches file system events and returns if either when one of the source files is modified. func WriteCommandPackage(archive *compiler.Archive, pkgObj string) error Source: build/build.go:1385 WriteCommandPackage writes the final JavaScript output file at pkgObj path. func XContext() XContext Source: build/build.go:919 XContext returns the session's build context. type XContext Source: build/context.go:69 XContext is an extension of go/build.Context with GopherJS-specific features. It abstracts away several different sources GopherJS can load its packages from, with a minimal API. Copy type XContext interface { // Import returns details about the Go package named by the importPath, // interpreting local import paths relative to the srcDir directory. Import ( path string , srcDir string , mode build . ImportMode ) ( * PackageData , error ) // Env returns build environment configuration this context has been set up for. Env () Env // Match explans build patterns into a set of matching import paths (see go help packages). Match ( patterns [] string ) ([] string , error ) } Methods Import func(path string, srcDir string, mode build.ImportMode) (*PackageData, error) Import returns details about the Go package named by the importPath, interpreting local import paths relative to the srcDir directory. Env func() Env Env returns build environment configuration this context has been set up for. Match func(patterns []string) ([]string, error) Match explans build patterns into a set of matching import paths (see go help packages). + +### build/cache + +Path: `/docs/api/pkg-build-cache.html` + +Package cache solves one of the hardest computer science problems in application to GopherJS compiler outputs. + +import "github.com/gopherjs/gopherjs/build/cache" Package cache solves one of the hardest computer science problems in application to GopherJS compiler outputs. Index Functions func Clear() error Types type BuildCache type Cache type Cacheable Functions func Clear() error Source: build/cache/cache.go:78 Clear the cache. This will remove all cached artifacts from all build configurations. Types type BuildCache Source: build/cache/cache.go:107 BuildCache manages build artifacts that are cached for incremental builds. Cache is designed to be non-durable: any store and load errors are swallowed and simply lead to a cache miss. The caller must be able to handle cache misses. Nil pointer to BuildCache is valid and simply disables caching. BuildCache struct fields represent build parameters which change invalidates the cache. For example, any artifacts that were cached for a Linux build must not be reused for a non-Linux build. GopherJS version change also invalidates the cache. It is callers responsibility to ensure that artifacts passed the Store function were generated with the same build parameters as the cache is configured. There is no upper limit for the total cache size. It can be cleared programmatically via the Clear() function, or the user can just delete the directory if it grows too big. The cached files are gzip compressed, therefore each file uses the gzip checksum as a basic integrity check performed after reading the file. TODO(nevkontakte): changes in the input sources or dependencies doesn't currently invalidate the cache. This is handled at the higher level by checking cached package timestamp against loaded package modification time. Copy type BuildCache struct { GOOS string GOARCH string GOROOT string GOPATH string BuildTags [] string // Version should be set to compiler.Version Version string // TestedPackage is the import path of the package being tested, or // empty when not building for tests. The package under test is built // with *_test.go sources included so we should always skip reading // and writing cache in that case. Since we are caching prior to // type-checking for generics, any package importing the package under // test should be unaffected. TestedPackage string } Fields GOOS string GOARCH string GOROOT string GOPATH string BuildTags []string Version string Version should be set to compiler.Version TestedPackage string TestedPackage is the import path of the package being tested, or empty when not building for tests. The package under test is built with *_test.go sources included so we should always skip reading and writing cache in that case. Since we are caching prior to type-checking for generics, any package importing the package under test should be unaffected. func Load(c Cacheable, importPath string, srcModTime time.Time) bool Source: build/cache/cache.go:174 func Store(c Cacheable, importPath string, buildTime time.Time) bool Source: build/cache/cache.go:135 func String() string Source: build/cache/cache.go:126 type Cache Source: build/cache/cache.go:32 Cache defines methods to store and load cacheable objects. Copy type Cache interface { // Store stores the package with the given import path in the cache. // Any error inside this method will cause the cache not to be persisted. // // The passed in buildTime is used to determine if the package is out-of-date when reloaded. // Typically it should be set to the srcModTime or time.Now(). Store ( c Cacheable , importPath string , buildTime time . Time ) bool // Load reads a previously cached package at the given import path, // if it was previously stored. // // The loaded package would have been built with the same configuration as // the build cache was. Load ( c Cacheable , importPath string , srcModTime time . Time ) bool } Methods Store func(c Cacheable, importPath string, buildTime time.Time) bool Store stores the package with the given import path in the cache. Any error inside this method will cause the cache not to be persisted. The passed in buildTime is used to determine if the package is out-of-date when reloaded. Typically it should be set to the srcModTime or time.Now(). Load func(c Cacheable, importPath string, srcModTime time.Time) bool Load reads a previously cached package at the given import path, if it was previously stored. The loaded package would have been built with the same configuration as the build cache was. type Cacheable Source: build/cache/cache.go:26 Cacheable defines methods to serialize and deserialize cachable objects. This object should represent a package's build artifact. The encode and decode functions are typically wrappers around gob.Encoder.Encode and gob.Decoder.Decode, but other formats are possible as well, the same way as FileSet.Write and FileSet.Read work with any encode/decode functions. Copy type Cacheable interface { Write ( encode func ( any ) error ) error Read ( decode func ( any ) error ) error } Methods Write func(encode func(any) error) error Read func(decode func(any) error) error + +### build/versionhack + +Path: `/docs/api/pkg-build-versionhack.html` + +Package versionhack makes sure go/build doesn't disable module support whenever GopherJS is compiled by a different Go version than it's targeted Go version. + +import "github.com/gopherjs/gopherjs/build/versionhack" Package versionhack makes sure go/build doesn't disable module support whenever GopherJS is compiled by a different Go version than it's targeted Go version. Under the hood, go/build relies on go list utility for module support; more specifically, for package location discovery. Since ReleaseTags are effectively baked into the go binary and can't be overridden, it needs to ensure that ReleaseTags set in a go/build.Context instance match the Go tool. However, it naively assumes that the go tool version in the PATH matches the version that was used to build GopherJS and disables module support whenever ReleaseTags in the context are set to anything other than the default. This, unfortunately, isn't very helpful since gopherjs may be built by a Go version other than the PATH's default. Luckily, even if go tool version is mismatched, it's only used for discovery of the package locations, and go/build evaluates build constraints on its own with ReleaseTags we've passed. A better solution would've been for go/build to use go tool from GOROOT and check its version against build tags: https://github.com/golang/go/issues/46856 . Until that issue is fixed, we trick go/build into thinking that whatever ReleaseTags we've passed are indeed the default. We gain access to the variable go/build checks against using "go:linkname" directive and override its content as we wish. + +### compiler + +Path: `/docs/api/pkg-compiler.html` + +Package compiler implements GopherJS compiler logic. + +import "github.com/gopherjs/gopherjs/compiler" Package compiler implements GopherJS compiler logic. WARNING: This package's API is treated as internal and currently doesn't provide any API stability guarantee, use it at your own risk. If you need a stable interface, prefer invoking the gopherjs CLI tool as a subprocess. Index Constants Functions func CheckGoVersion(goroot string) error func Compile(srcs *sources.Sources, tContext *types.Context, minify bool) (_ *Archive, err error) func DefaultFilter(w io.Writer) *sourcemapx.Filter func GoRelease(goroot string) string func ImportDependencies(archive *Archive, importPkg func(string) (*Archive, error)) ([]*Archive, error) func PrepareAllSources(allSources []*sources.Sources, importer sources.Importer, tContext *types.Context) error func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, gls linkname.GoLinknameSet, minify bool, w *sourcemapx.Filter) error func WriteProgramCode(pkgs []*Archive, w *sourcemapx.Filter, goVersion, testBinary string) error Types type Archive type Decl type Dependency type FatalError Constants GoVersion is the current Go 1.x version that GopherJS is compatible with. Source: compiler/version_check.go:18 Copy const GoVersion = 21 Version is the GopherJS compiler version string. Source: compiler/version_check.go:15 Copy const Version = "1.21.0+go1.21.13" Functions func CheckGoVersion(goroot string) error Source: compiler/version_check.go:23 CheckGoVersion checks the version of the Go distribution at goroot, and reports an error if it's not compatible with this version of the GopherJS compiler. func Compile(srcs *sources.Sources, tContext *types.Context, minify bool) (_ *Archive, err error) Source: compiler/package.go:165 Compile the provided Go sources as a single package. Provided sources must be prepared so that the type information has been determined, and the source files have been sorted by name to ensure reproducible JavaScript output. func DefaultFilter(w io.Writer) *sourcemapx.Filter Source: compiler/compiler.go:127 DefaultFilter creates a new sourcemapx.Filter that writes to the given writer. This is not in the internal package so that tools like the playground can use it when calling things like the exported WriteProgramCode function. func GoRelease(goroot string) string Source: compiler/version_check.go:63 GoRelease does a best-effort to identify the Go release we are building with. If unable to determine the precise version for the given GOROOT, falls back to the best guess available. func ImportDependencies(archive *Archive, importPkg func(string) (*Archive, error)) ([]*Archive, error) Source: compiler/compiler.go:89 func PrepareAllSources(allSources []*sources.Sources, importer sources.Importer, tContext *types.Context) error Source: compiler/package.go:243 PrepareAllSources prepares all sources for compilation by parsing go linknames, type checking, sorting, simplifying, and performing cross package analysis. The results are stored in the provided sources. All sources must be given at the same time for cross package analysis to work correctly. For consistency, the sources should be sorted by import path. func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, gls linkname.GoLinknameSet, minify bool, w *sourcemapx.Filter) error Source: compiler/compiler.go:209 func WriteProgramCode(pkgs []*Archive, w *sourcemapx.Filter, goVersion, testBinary string) error Source: compiler/compiler.go:131 Types type Archive Source: compiler/compiler.go:53 Archive contains intermediate build outputs of a single package. This is a logical equivalent of an object file in traditional compilers. Copy type Archive struct { // Package's full import path, e.g. "some/package/name". ImportPath string // Package's name as per "package" statement at the top of a source file. // Usually matches the last component of import path, but may differ in // certain cases (e.g. main or test packages). Name string // A list of full package import paths that the current package imports across // all source files. See go/types.Package.Imports(). Imports [] string // The package information is used by the compiler to type-check packages // that import this one. See [gcexportdata.Write]. Package * types . Package // Compiled package-level symbols. Declarations [] * Decl // Concatenated contents of all raw .inc.js of the package. IncJSCode [] incjs . File // The file set containing the source code locations for various symbols // (e.g. for sourcemap generation). See [token.FileSet.Write]. FileSet * token . FileSet // Whether or not the package was compiled with minification enabled. Minified bool // A list of go:linkname directives encountered in the package. GoLinknames [] linkname . GoLinkname } Fields ImportPath string Package's full import path, e.g. "some/package/name". Name string Package's name as per "package" statement at the top of a source file. Usually matches the last component of import path, but may differ in certain cases (e.g. main or test packages). Imports []string A list of full package import paths that the current package imports across all source files. See go/types.Package.Imports(). Package *types.Package The package information is used by the compiler to type-check packages that import this one. See [gcexportdata.Write]. Declarations []*Decl Compiled package-level symbols. IncJSCode []incjs.File Concatenated contents of all raw .inc.js of the package. FileSet *token.FileSet The file set containing the source code locations for various symbols (e.g. for sourcemap generation). See [token.FileSet.Write]. Minified bool Whether or not the package was compiled with minification enabled. GoLinknames []linkname.GoLinkname A list of go:linkname directives encountered in the package. func String() string Source: compiler/compiler.go:79 type Decl Source: compiler/decls.go:30 Decl represents a package-level symbol (e.g. a function, variable or type). It contains code generated by the compiler for this specific symbol, which is grouped by the execution stage it belongs to in the JavaScript runtime. When adding new fields to this struct, make sure the field is exported so that it Gob serializes correctly for the archive cache. Copy type Decl struct { // The package- or receiver-type-qualified name of function or method obj. // See go/types.Func.FullName(). FullName string // A logical equivalent of a symbol name in an object file in the traditional // Go compiler/linker toolchain. Used by GopherJS to support go:linkname // directives. Must be set for decls that are supported by go:linkname // implementation. LinkingName symbol . Name // A list of package-level JavaScript variable names this symbol needs to declare. Vars [] string // A JS expression by which the object represented by this decl may be // referenced within the package context. Empty if the decl represents no such // object. RefExpr string // NamedRecvType is method named recv declare. NamedRecvType string // JavaScript code that declares a local variable for an imported package. ImportCode [] byte // JavaScript code that declares basic information about a named type symbol. // It configures basic information about the type and its identity. TypeDeclCode [] byte // JavaScript code that assigns exposed named types to the package. ExportTypeCode [] byte // JavaScript code that declares basic information about an anonymous type. // It configures basic information about the type. // This is added to the finish setup phase to have access to all packages. AnonTypeDeclCode [] byte // JavaScript code that declares basic information about a function or // method symbol. This contains the function's or method's compiled body. // This is added to the finish setup phase to have access to all packages. FuncDeclCode [] byte // JavaScript code that assigns exposed functions to the package. // This is added to the finish setup phase to have access to all packages. ExportFuncCode [] byte // JavaScript code that initializes reflection metadata about a type's method list. // This is added to the finish setup phase to have access to all packages. MethodListCode [] byte // JavaScript code that initializes the rest of reflection metadata about a type // (e.g. struct fields, array type sizes, element types, etc.). // This is added to the finish setup phase to have access to all packages. TypeInitCode [] byte // JavaScript code that needs to be executed during the package init phase to // set the symbol up (e.g. initialize package-level variable value). InitCode [] byte // DCEInfo stores the information for dead-code elimination. DCEInfo dce . Info // Set to true if a function performs a blocking operation (I/O or // synchronization). The compiler will have to generate function code such // that it can be resumed after a blocking operation completes without // blocking the main thread in the meantime. Blocking bool } Fields FullName string The package- or receiver-type-qualified name of function or method obj. See go/types.Func.FullName(). LinkingName symbol.Name A logical equivalent of a symbol name in an object file in the traditional Go compiler/linker toolchain. Used by GopherJS to support go:linkname directives. Must be set for decls that are supported by go:linkname implementation. Vars []string A list of package-level JavaScript variable names this symbol needs to declare. RefExpr string A JS expression by which the object represented by this decl may be referenced within the package context. Empty if the decl represents no such object. NamedRecvType string NamedRecvType is method named recv declare. ImportCode []byte JavaScript code that declares a local variable for an imported package. TypeDeclCode []byte JavaScript code that declares basic information about a named type symbol. It configures basic information about the type and its identity. ExportTypeCode []byte JavaScript code that assigns exposed named types to the package. AnonTypeDeclCode []byte JavaScript code that declares basic information about an anonymous type. It configures basic information about the type. This is added to the finish setup phase to have access to all packages. FuncDeclCode []byte JavaScript code that declares basic information about a function or method symbol. This contains the function's or method's compiled body. This is added to the finish setup phase to have access to all packages. ExportFuncCode []byte JavaScript code that assigns exposed functions to the package. This is added to the finish setup phase to have access to all packages. MethodListCode []byte JavaScript code that initializes reflection metadata about a type's method list. This is added to the finish setup phase to have access to all packages. TypeInitCode []byte JavaScript code that initializes the rest of reflection metadata about a type (e.g. struct fields, array type sizes, element types, etc.). This is added to the finish setup phase to have access to all packages. InitCode []byte JavaScript code that needs to be executed during the package init phase to set the symbol up (e.g. initialize package-level variable value). DCEInfo dce.Info DCEInfo stores the information for dead-code elimination. Blocking bool Set to true if a function performs a blocking operation (I/O or synchronization). The compiler will have to generate function code such that it can be resumed after a blocking operation completes without blocking the main thread in the meantime. func Dce() *dce.Info Source: compiler/decls.go:100 Dce gets the information for dead-code elimination. type Dependency Source: compiler/compiler.go:83 Copy type Dependency struct { Pkg string Type string Method string } Fields Pkg string Type string Method string type FatalError Source: compiler/utils.go:952 FatalError is an error compiler panics with when it encountered a fatal error. FatalError implements io.Writer, which can be used to record any free-form debugging details for human consumption. This information will be included into String() result along with the rest. Copy type FatalError struct { // contains filtered or unexported fields } func Error) Error() string Source: compiler/utils.go:974 func Unwrap() error Source: compiler/utils.go:958 func Write(p []byte) (n int, err error) Source: compiler/utils.go:972 Write implements io.Writer and can be used to store free-form debugging clues. + +### compiler/astutil + +Path: `/docs/api/pkg-compiler-astutil.html` + +github.com/gopherjs/gopherjs/compiler/astutil + +import "github.com/gopherjs/gopherjs/compiler/astutil" Index Functions func DirectiveNew(d ast.Node) bool func DirectiveReplace(d ast.Node) bool func EndsWithReturn(stmts []ast.Stmt) bool func FindLoopStmt(stack []ast.Node, branch *ast.BranchStmt, typeInfo *types.Info) ast.Stmt func FuncKey(d *ast.FuncDecl) string func FuncReceiverKey(d *ast.FuncDecl) string func HasDirectivePrefix(file *ast.File, prefix string) bool func ImportName(spec *ast.ImportSpec) string func ImportsUnsafe(file *ast.File) bool func IsTypeExpr(expr ast.Expr, info *types.Info) bool func KeepOriginal(d *ast.FuncDecl) bool func NewIdent(name string, t types.Type, info *types.Info, pkg *types.Package) *ast.Ident func OverrideSignature(d *ast.FuncDecl) bool func Purge(d ast.Node) bool func RemoveParens(e ast.Expr) ast.Expr func SetType(info *types.Info, t types.Type, e ast.Expr) ast.Expr func Squeeze[E ast.Node, S ~[]E](s S) S Functions func DirectiveNew(d ast.Node) bool Source: compiler/astutil/astutil.go:154 DirectiveNew returns true if gopherjs:new directive is present on a struct, interface, type, variable, constant, or function. //gopherjs:new is a GopherJS-specific directive, which can be applied in native overlays and will instruct the augmentation logic to ensure that the original code is not present so that this code does not override any original code, otherwise an error will be raised. func DirectiveReplace(d ast.Node) bool Source: compiler/astutil/astutil.go:143 DirectiveReplace returns true if gopherjs:replace directive is present on a struct, interface, type, variable, constant, or function. //gopherjs:replace is a GopherJS-specific directive, which can be applied in native overlays and will instruct the augmentation logic to ensure that the original code is present and has not been removed nor renamed, otherwise an error will be raised. func EndsWithReturn(stmts []ast.Stmt) bool Source: compiler/astutil/astutil.go:295 EndsWithReturn returns true if the last effective statement is a "return". func FindLoopStmt(stack []ast.Node, branch *ast.BranchStmt, typeInfo *types.Info) ast.Stmt Source: compiler/astutil/astutil.go:263 FindLoopStmt tries to find the loop statement among the AST nodes in the |stack| that corresponds to the break/continue statement represented by branch. This function is label-aware and assumes the code was successfully type-checked. func FuncKey(d *ast.FuncDecl) string Source: compiler/astutil/astutil.go:102 FuncKey returns a string, which uniquely identifies a top-level function or method in a package. func FuncReceiverKey(d *ast.FuncDecl) string Source: compiler/astutil/astutil.go:112 FuncReceiverKey returns a string that uniquely identifies the receiver struct of the function or an empty string if there is no receiver. This name will match the name of the struct in the struct's type spec. func HasDirectivePrefix(file *ast.File, prefix string) bool Source: compiler/astutil/astutil.go:246 HasDirectivePrefix determines if any line in the given file has the given directive prefix in it. func ImportName(spec *ast.ImportSpec) string Source: compiler/astutil/astutil.go:83 ImportName tries to determine the package name for an import. If the package name isn't specified then this will make a best make a best guess using the import path. If the import name is dot ( . ), blank ( _ ), or there was an issue determining the package name then empty is returned. func ImportsUnsafe(file *ast.File) bool Source: compiler/astutil/astutil.go:68 func IsTypeExpr(expr ast.Expr, info *types.Info) bool Source: compiler/astutil/astutil.go:40 IsTypeExpr returns true if expr denotes a type. This can be used to distinguish between calls and type conversions. func KeepOriginal(d *ast.FuncDecl) bool Source: compiler/astutil/astutil.go:169 KeepOriginal returns true if gopherjs:keep-original directive is present before a function decl. //gopherjs:keep-original is a GopherJS-specific directive, which can be applied to functions in native overlays and will instruct the augmentation logic to expose the original function such that it can be called. For a function in the original called foo , it will be accessible by the name _gopherjs_original_foo . This will also ensure that the original function exists and hasn't been removed or renamed, otherwise an error will be raised. func NewIdent(name string, t types.Type, info *types.Info, pkg *types.Package) *ast.Ident Source: compiler/astutil/astutil.go:30 func OverrideSignature(d *ast.FuncDecl) bool Source: compiler/astutil/astutil.go:209 OverrideSignature returns true if gopherjs:override-signature directive is present on a function. //gopherjs:override-signature is a GopherJS-specific directive, which can be applied in native overlays and will instruct the augmentation logic to replace the original function signature which has the same FuncKey with the signature defined in the native overlays. This directive can be used to remove generics from a function signature or to replace a receiver of a function with another one. The given native overlay function will be removed, so no method body is needed in the overlay. The new signature may not contain types which require a new import since the imports will not be automatically added when needed, only removed. Use a type alias in the overlay to deal manage imports. This will also ensure that the original code exists and hasn't been removed or renamed, otherwise an error will be raised. func Purge(d ast.Node) bool Source: compiler/astutil/astutil.go:187 Purge returns true if gopherjs:purge directive is present on a struct, interface, type, variable, constant, or function. //gopherjs:purge is a GopherJS-specific directive, which can be applied in native overlays and will instruct the augmentation logic to delete part of the standard library without a replacement. This directive can be used to remove code that would be invalid in GopherJS, such as code using unsupported features (e.g. generic interfaces before generics were fully supported). It should be used with caution since it may remove needed dependencies. If a type is purged, all methods using that type as a receiver will also be purged. This will also ensure that the original code exists and hasn't been removed or renamed, otherwise an error will be raised. func RemoveParens(e ast.Expr) ast.Expr Source: compiler/astutil/astutil.go:15 func SetType(info *types.Info, t types.Type, e ast.Expr) ast.Expr Source: compiler/astutil/astutil.go:25 func Squeeze[E ast.Node, S ~[]E](s S) S Source: compiler/astutil/astutil.go:316 Squeeze removes all nil nodes from the slice. The given slice will be modified. This is designed for squeezing declaration, specification, imports, and identifier lists. + +### compiler/errlist + +Path: `/docs/api/pkg-compiler-errlist.html` + +github.com/gopherjs/gopherjs/compiler/errlist + +import "github.com/gopherjs/gopherjs/compiler/errlist" Index Variables Types type ErrorList Variables ErrTooManyErrors is added to the ErrorList by the Trim method. Source: compiler/errlist/errlist.go:9 Copy var ErrTooManyErrors = errors . New ( "too many errors" ) Types type ErrorList Source: compiler/errlist/errlist.go:12 ErrorList wraps multiple errors as a single error. Copy type ErrorList [] error func Append(err error) ErrorList Source: compiler/errlist/errlist.go:37 Append an error to the list. If err is an instance of ErrorList, the lists are concatenated together, otherwise err is appended at the end of the list. If err is nil, the list is returned unmodified. Copy err := DoStuff() errList := errList.Append(err) func AppendDistinct(err error) ErrorList Source: compiler/errlist/errlist.go:49 AppendDistinct is similar to Append, but doesn't append the error if it has the same message as the last error on the list. func ErrOrNil() error Source: compiler/errlist/errlist.go:22 ErrOrNil returns nil if ErrorList is empty, or the error otherwise. func ErrorList) Error() string Source: compiler/errlist/errlist.go:14 func Trim(limit int) ErrorList Source: compiler/errlist/errlist.go:62 Trim the error list if it has more than limit errors. If the list is trimmed, all extraneous errors are replaced with a single ErrTooManyErrors, making the returned ErrorList length of limit+1. + +### compiler/filter + +Path: `/docs/api/pkg-compiler-filter.html` + +github.com/gopherjs/gopherjs/compiler/filter + +import "github.com/gopherjs/gopherjs/compiler/filter" Index Functions func Assign(stmt ast.Stmt, info *types.Info, pkg *types.Package) ast.Stmt func IncDecStmt(stmt ast.Stmt, info *types.Info) ast.Stmt Functions func Assign(stmt ast.Stmt, info *types.Info, pkg *types.Package) ast.Stmt Source: compiler/filter/assign.go:11 func IncDecStmt(stmt ast.Stmt, info *types.Info) ast.Stmt Source: compiler/filter/incdecstmt.go:10 + +### compiler/gopherjspkg + +Path: `/docs/api/pkg-compiler-gopherjspkg.html` + +Package gopherjspkg provides core GopherJS packages via a virtual filesystem. + +import "github.com/gopherjs/gopherjs/compiler/gopherjspkg" Package gopherjspkg provides core GopherJS packages via a virtual filesystem. Core GopherJS packages are packages that are critical for GopherJS compiler operation. They are needed to build the Go standard library with GopherJS. Currently, they include: Copy github.com/gopherjs/gopherjs/js github.com/gopherjs/gopherjs/nosync Index Variables Functions func RegisterFS(fs http.FileSystem) Variables FS is a virtual filesystem that contains core GopherJS packages. Source: compiler/gopherjspkg/fs.go:6 Copy var FS http . FileSystem Functions func RegisterFS(fs http.FileSystem) Source: compiler/gopherjspkg/fs.go:9 RegisterFS allows setting the embedded fs from another package. + +### compiler/incjs + +Path: `/docs/api/pkg-compiler-incjs.html` + +github.com/gopherjs/gopherjs/compiler/incjs + +import "github.com/gopherjs/gopherjs/compiler/incjs" Index Constants Functions func FromDir(bctx *build.Context, dir string) ([]File, error) func FromFilename(filename string) (*File, error) Types type File Constants Ext is the file extension for .inc.js files. Source: compiler/incjs/file.go:15 Copy const Ext = ".inc.js" Functions func FromDir(bctx *build.Context, dir string) ([]File, error) Source: compiler/incjs/file.go:26 FromDir finds and loads any *.inc.js packages in the build context directory. func FromFilename(filename string) (*File, error) Source: compiler/incjs/file.go:75 Types type File Source: compiler/incjs/file.go:18 File represents a *.inc.js file metadata and content. Copy type File struct { Path string // Full file path for the build context the file came from. ModTime time . Time Content [] byte } Fields Path string Full file path for the build context the file came from. ModTime time.Time Content []byte + +### compiler/linkname + +Path: `/docs/api/pkg-compiler-linkname.html` + +github.com/gopherjs/gopherjs/compiler/linkname + +import "github.com/gopherjs/gopherjs/compiler/linkname" Index Functions func ParseGoLinknames(fset *token.FileSet, pkgPath string, file *ast.File) ([]GoLinkname, error) Types type GoLinkname type GoLinknameSet Functions func ParseGoLinknames(fset *token.FileSet, pkgPath string, file *ast.File) ([]GoLinkname, error) Source: compiler/linkname/linkname.go:118 parseGoLinknames processed comments in a source file and extracts //go:linkname compiler directive from the comments. The following directive format is supported: //go:linkname . //go:linkname .. //go:linkname . . GopherJS directive support has the following limitations: External linkname must be specified. The directive must be applied to a package-level function or method (variables are not supported). The local function referenced by the directive must have no body (in other words, it can only "import" an external function implementation into the local scope). Types type GoLinkname Source: compiler/linkname/linkname.go:20 GoLinkname describes a go:linkname compiler directive found in the source code. GopherJS treats these directives in a way that resembles a symbolic link, where for a single given symbol implementation there may be zero or more symbols referencing it. This is subtly different from the upstream Go implementation, which simply overrides symbol name the linker will use. Copy type GoLinkname struct { Implementation symbol . Name Reference symbol . Name } Fields Implementation symbol.Name Reference symbol.Name type GoLinknameSet Source: compiler/linkname/linkname.go:213 GoLinknameSet is a utility that enables quick lookup of whether a decl is affected by any go:linkname directive in the program. Copy type GoLinknameSet struct { // contains filtered or unexported fields } func Add(entries []GoLinkname) error Source: compiler/linkname/linkname.go:219 Add more GoLinkname directives into the set. func FindImplementation(sym symbol.Name) (symbol.Name, bool) Source: compiler/linkname/linkname.go:247 FindImplementation returns a symbol name, which provides the implementation for the given symbol. The second value indicates whether the implementation was found. func IsImplementation(sym symbol.Name) bool Source: compiler/linkname/linkname.go:239 IsImplementation returns true if there is a directive referencing this symbol as an implementation. + +### compiler/natives + +Path: `/docs/api/pkg-compiler-natives.html` + +Package natives provides native packages via a virtual filesystem. + +import "github.com/gopherjs/gopherjs/compiler/natives" Package natives provides native packages via a virtual filesystem. See documentation of parseAndAugment in github.com/gopherjs/gopherjs/build for explanation of behavior used to augment the native packages using the files in src subfolder. Index Variables Variables FS is a virtual filesystem that contains native packages. Source: compiler/natives/natives.go:13 Copy var FS embed . FS + +### compiler/prelude + +Path: `/docs/api/pkg-compiler-prelude.html` + +github.com/gopherjs/gopherjs/compiler/prelude + +import "github.com/gopherjs/gopherjs/compiler/prelude" Index Functions func PreludeFiles() (files []PreludeFile) Types type PreludeFile Functions func PreludeFiles() (files []PreludeFile) Source: compiler/prelude/prelude.go:31 PreludeFiles gets the GopherJS JavaScript interop layers. Types type PreludeFile Source: compiler/prelude/prelude.go:25 Copy type PreludeFile struct { Name string Source string } Fields Name string Source string + +### compiler/sources + +Path: `/docs/api/pkg-compiler-sources.html` + +github.com/gopherjs/gopherjs/compiler/sources + +import "github.com/gopherjs/gopherjs/compiler/sources" Index Functions func SortedSourcesSlice(sourcesSlice []*Sources) Types type Importer type Sources Functions func SortedSourcesSlice(sourcesSlice []*Sources) Source: compiler/sources/sources.go:269 SortedSourcesSlice in place sorts the given slice of Sources by ImportPath. This will not change the order of the files within any Sources. Types type Importer Source: compiler/sources/sources.go:62 Copy type Importer func ( path , srcDir string ) ( * Sources , error ) type Sources Source: compiler/sources/sources.go:25 Sources is a slice of parsed Go sources and additional data for a package. Note that the sources would normally belong to a single logical Go package, but they don't have to be a real Go package (i.e. found on the file system) or represent a complete package (i.e. it could be only a few source files compiled by gopherjs build foo.go bar.go ). Copy type Sources struct { // ImportPath representing the sources, if exists. // // May be empty for "virtual" // packages like testmain or playground-generated package. // Otherwise this must be the absolute import path for a package. ImportPath string // Dir is the directory containing package sources Dir string // Files is the parsed and augmented Go AST files for the package. Files [] * ast . File // FileSet is the file set for the parsed files for this source. FileSet * token . FileSet // JSFiles is the JavaScript files that are part of the package. JSFiles [] incjs . File // TypeInfo is the type information for this package. // This is nil until set by Analyze. TypeInfo * analysis . Info // Package is the types package for these source files. // This is nil until set by TypeCheck. Package * types . Package // GoLinknames is the set of Go linknames for this package. // This is nil until set by ParseGoLinknames. GoLinknames [] linkname . GoLinkname // contains filtered or unexported fields } Fields ImportPath string ImportPath representing the sources, if exists. May be empty for "virtual" packages like testmain or playground-generated package. Otherwise this must be the absolute import path for a package. Dir string Dir is the directory containing package sources Files []*ast.File Files is the parsed and augmented Go AST files for the package. FileSet *token.FileSet FileSet is the file set for the parsed files for this source. JSFiles []incjs.File JSFiles is the JavaScript files that are part of the package. TypeInfo *analysis.Info TypeInfo is the type information for this package. This is nil until set by Analyze. Package *types.Package Package is the types package for these source files. This is nil until set by TypeCheck. GoLinknames []linkname.GoLinkname GoLinknames is the set of Go linknames for this package. This is nil until set by ParseGoLinknames. func Analyze(importer Importer, tContext *types.Context, instances *typeparams.PackageInstanceSets) Source: compiler/sources/sources.go:174 Analyze will determine the type parameters instances, blocking, and other type information for the package. This will set the TypeInfo and Instances fields on the Sources. This must be called after to simplify to ensure the pointers in the AST are still valid. The instances must be collected prior to this call. Note that at the end of this call the analysis information has NOT been propagated across packages yet. func CollectInstances(tc *typeparams.Collector) Source: compiler/sources/sources.go:160 CollectInstances will determine the type parameters instances for the package. This must be called before Analyze to have the type parameters instances needed during analysis. Note that once all the sources are collected, the collector needs to be finished to ensure all the instances are collected. func ParseGoLinknames() error Source: compiler/sources/sources.go:188 ParseGoLinknames extracts all //go:linkname compiler directive from the sources. This will set the GoLinknames field on the Sources. func Read(decode func(any) error) error Source: compiler/sources/serializer.go:53 Read will call decode multiple times to read the various fields of the sources. The order of the calls must match the order of the calls in encodeSources. The given srcModTime is used to determine if the serialized sources are out-of-date. If they are then this returns a nil sources and nil error, and the build time that was read. func Simplify() Source: compiler/sources/sources.go:85 Simplify processed each Files entry with astrewrite.Simplify. Note this function mutates the original Files slice. This must be called after TypeCheck and before analyze since this will change the pointers in the AST. For example, the pointers to function literals will change, making it impossible to find them in the type information, if analyze is called first. func Sort() Source: compiler/sources/sources.go:68 Sort sorts the Go files slice by the original source name to ensure consistent order of processing. This is required for reproducible JavaScript output. Note this function mutates the original Files slice. func TypeCheck(importer Importer, sizes types.Sizes, tContext *types.Context) error Source: compiler/sources/sources.go:99 TypeCheck the sources. Returns information about declared package types and type information for the supplied AST. This will set the Package field on the Sources. If the Package field is not nil, e.g. this function has already been run, this will be a no-op. This must be called prior to simplify to get the types.Info used by simplify. func UnresolvedImports(skip ...string) []string Source: compiler/sources/sources.go:213 UnresolvedImports calculates the import paths of the package's dependencies based on all the imports in the augmented Go AST files. This is used to determine the unresolved imports that weren't in the PackageData.Imports slice since they were added during augmentation or during template generation. The given skip paths (typically those imports from PackageData.Imports) will not be returned in the results. This will not return any *_test packages in the results. func Write(encode func(any) error) error Source: compiler/sources/serializer.go:18 Write will call encode multiple times to write the various fields of the sources. This is designed to be used with a gob.Encoder. The order of the calls must match the order of the calls in Read. s.TypeInfo, s.baseInfo, s.Package, and s.GoLinknames are intentionally omitted from encoding since they must be constructed in the context of the full program to be able to handle generics and cross-package references. + +### compiler/typesutil + +Path: `/docs/api/pkg-compiler-typesutil.html` + +github.com/gopherjs/gopherjs/compiler/typesutil + +import "github.com/gopherjs/gopherjs/compiler/typesutil" Index Functions func IsJsObject(t types.Type) bool func IsJsPackage(pkg *types.Package) bool func IsMethod(o types.Object) bool func NewSelection(kind types.SelectionKind, recv types.Type, index []int, obj types.Object, typ types.Type) Selection func OffsetOf(sizes types.Sizes, sel Selection) int64 func RecvAsFirstArg(sig *types.Signature) *types.Signature func RecvType(sig *types.Signature) *types.Named Types type Map type Selection type Signature type TypeList type TypeNames Functions func IsJsObject(t types.Type) bool Source: compiler/typesutil/typesutil.go:12 func IsJsPackage(pkg *types.Package) bool Source: compiler/typesutil/typesutil.go:8 func IsMethod(o types.Object) bool Source: compiler/typesutil/typesutil.go:112 IsMethod returns true if the passed object is a method. func NewSelection(kind types.SelectionKind, recv types.Type, index []int, obj types.Object, typ types.Type) Selection Source: compiler/typesutil/typesutil.go:60 NewSelection creates a new selection. func OffsetOf(sizes types.Sizes, sel Selection) int64 Source: compiler/typesutil/typesutil.go:96 OffsetOf returns byte offset of a struct field specified by the provided selection. Adapted from go/types.Config.offsetof(). func RecvAsFirstArg(sig *types.Signature) *types.Signature Source: compiler/typesutil/typesutil.go:40 RecvAsFirstArg takes a method signature and returns a function signature with receiver as the first parameter. func RecvType(sig *types.Signature) *types.Named Source: compiler/typesutil/typesutil.go:24 RecvType returns a named type of a method receiver, or nil if it's not a method. For methods on a pointer receiver, the underlying named type is returned. Types type Map Source: compiler/typesutil/map.go:10 Map is a type-safe wrapper around golang.org/x/tools/go/types/typeutil.Map. Copy type Map [ Val any ] struct { // contains filtered or unexported fields } func At(key types.Type) Val Source: compiler/typesutil/map.go:12 func Delete(key types.Type) bool Source: compiler/typesutil/map.go:30 func Len() int Source: compiler/typesutil/map.go:32 func Set(key types.Type, value Val) (prev Val) Source: compiler/typesutil/map.go:21 func String() string Source: compiler/typesutil/map.go:34 type Selection Source: compiler/typesutil/typesutil.go:51 Selection is a common interface for go/types.Selection and our custom-constructed method and field selections. Copy type Selection interface { Kind () types . SelectionKind Recv () types . Type Index () [] int Obj () types . Object Type () types . Type } Methods Kind func() types.SelectionKind Recv func() types.Type Index func() []int Obj func() types.Object Type func() types.Type type Signature Source: compiler/typesutil/signature.go:10 Signature is a helper that provides convenient access to function signature type information. Copy type Signature struct { Sig * types . Signature } Fields Sig *types.Signature func HasNamedResults() bool Source: compiler/typesutil/signature.go:65 HasNamedResults returns true if the function signature returns something and returned results are names (e.g. func () (val int, err error) ). func HasResults() bool Source: compiler/typesutil/signature.go:59 HasResults returns true if the function signature returns something. func Param(i int, ellipsis bool) types.Type Source: compiler/typesutil/signature.go:44 Param returns the expected argument type for the i'th argument position. This function is able to return correct expected types for variadic calls both when ellipsis syntax (e.g. myFunc(requiredArg, optionalArgSlice...)) is used and when optional args are passed individually. The returned types may differ from the actual argument expression types if there is an implicit type conversion involved (e.g. passing a struct into a function that expects an interface). func RequiredParams() int Source: compiler/typesutil/signature.go:15 RequiredParams returns the number of required parameters in the function signature. func VariadicType() types.Type Source: compiler/typesutil/signature.go:28 VariadicType returns the slice-type corresponding to the signature's variadic parameter, or nil of the signature is not variadic. With the exception of the special-case append([]byte{}, "string"...) , the returned type is *types.Slice and .Elem() method can be used to get the type of individual arguments. type TypeList Source: compiler/typesutil/typelist.go:9 TypeList an ordered list of types. Copy type TypeList [] types . Type func Equal(other TypeList) bool Source: compiler/typesutil/typelist.go:23 Equal returns true if both lists of type arguments are identical. func String() string Source: compiler/typesutil/typelist.go:11 type TypeNames Source: compiler/typesutil/typenames.go:8 TypeNames implements an ordered set of *types.TypeName pointers. The set is ordered to ensure deterministic behavior across compiler runs. Copy type TypeNames struct { // contains filtered or unexported fields } func Add(name *types.TypeName) Source: compiler/typesutil/typenames.go:16 Add a type name to the set. If the type name has been previously added, this operation is a no-op. Two type names are considered equal iff they have the same memory address. func Slice() []*types.TypeName Source: compiler/typesutil/typenames.go:28 Slice returns set elements in the order they were first added to the set. + +### js + +Path: `/docs/api/pkg-js.html` + +Package js provides functions for interacting with native JavaScript APIs. + +import "github.com/gopherjs/gopherjs/js" Package js provides functions for interacting with native JavaScript APIs. Calls to these functions are treated specially by GopherJS and translated directly to their corresponding JavaScript syntax. Use MakeWrapper to expose methods to JavaScript. Use MakeFullWrapper to expose methods AND fields to JavaScript. When passing values directly, the following type conversions are performed: Copy | Go type | JavaScript type | Conversions back to any | | --------------------- | --------------------- | ----------------------- | | bool | Boolean | bool | | integers and floats | Number | float64 | | string | String | string | | []int8 | Int8Array | []int8 | | []int16 | Int16Array | []int16 | | []int32, []int | Int32Array | []int | | []uint8 | Uint8Array | []uint8 | | []uint16 | Uint16Array | []uint16 | | []uint32, []uint | Uint32Array | []uint | | []float32 | Float32Array | []float32 | | []float64 | Float64Array | []float64 | | all other slices | Array | []any | | arrays | see slice type | see slice type | | functions | Function | func(...any) *js.Object | | time.Time | Date | time.Time | | - | instanceof Node | *js.Object | | maps, structs | instanceof Object | map[string]any | Additionally, for a struct containing a *js.Object field, only the content of the field will be passed to JavaScript and vice versa. Index Variables Functions func Debugger() func InternalObject(i any) *Object func Keys(o *Object) []string func MakeFullWrapper(i any) *Object func MakeFunc(fn func(this *Object, arguments []*Object) any) *Object func MakeUint64(hi, lo float64) uint64 func MakeWrapper(i any) *Object func NewArrayBuffer(b []byte) *Object func Uint64High(x uint64) uint32 func Uint64Low(x uint64) uint32 Types type Error type M type Object type S Variables Global gives JavaScript's global object ("window" for browsers and "GLOBAL" for Node.js). Source: js/js.go:98 Copy var Global * Object Module gives the value of the "module" variable set by Node.js. Hint: Set a module export with 'js.Module.Get("exports").Set("exportName", ...)'. Note that js.Module is only defined in runtimes which support CommonJS modules ( https://nodejs.org/api/modules.html ). NodeJS supports it natively, but in browsers it can only be used if GopherJS output is passed through a bundler which implements CommonJS (for example, webpack or esbuild). Source: js/js.go:107 Copy var Module * Object Undefined gives the JavaScript value "undefined". Source: js/js.go:110 Copy var Undefined * Object Functions func Debugger() Source: js/js.go:113 Debugger gets compiled to JavaScript's "debugger;" statement. func InternalObject(i any) *Object Source: js/js.go:116 InternalObject returns the internal JavaScript object that represents i. Not intended for public use. func Keys(o *Object) []string Source: js/js.go:126 Keys returns the keys of the given JavaScript object. func MakeFullWrapper(i any) *Object Source: js/js.go:163 MakeFullWrapper creates a JavaScript object which has wrappers for the exported methods of i, and, where i is a (pointer to a) struct value, wrapped getters and setters ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty ) for the non-embedded exported fields of i. Values accessed via these methods and getters are themselves wrapped when accessed, but an important point to note is that a new wrapped value is created on each access. func MakeFunc(fn func(this *Object, arguments []*Object) any) *Object Source: js/js.go:121 MakeFunc wraps a function and gives access to the values of JavaScript's "this" and "arguments" keywords. func MakeUint64(hi, lo float64) uint64 Source: js/js.go:265 MakeUint64 will take the high and low parts to construct a uint64 number. Since JS doesn't have a 64-bit integer we store it as a high and low 32-bit integers. func MakeWrapper(i any) *Object Source: js/js.go:139 MakeWrapper creates a JavaScript object which has wrappers for the exported methods of i. Use explicit getter and setter methods to expose struct fields to JavaScript. func NewArrayBuffer(b []byte) *Object Source: js/js.go:250 NewArrayBuffer creates a JavaScript ArrayBuffer from a byte slice. func Uint64High(x uint64) uint32 Source: js/js.go:268 Uint64High will get the high 32-bit integer used when storing uint64. func Uint64Low(x uint64) uint32 Source: js/js.go:271 Uint64Low will get the low 32-bit integer used when storing uint64. Types type Error Source: js/js.go:83 Error encapsulates JavaScript errors. Those are turned into a Go panic and may be recovered, giving an *Error that holds the JavaScript error object. Copy type Error struct { * Object } Fields *Object func Error) Error() string Source: js/js.go:88 Error returns the message of the encapsulated JavaScript error object. func Stack() string Source: js/js.go:93 Stack returns the stack property of the encapsulated JavaScript error object. type M Source: js/js.go:258 M is a simple map type. It is intended as a shorthand for JavaScript objects (before conversion). Copy type M map [ string ] any type Object Source: js/js.go:29 Object is a container for a native JavaScript object. Calls to its methods are treated specially by GopherJS and translated directly to their JavaScript syntax. A nil pointer to Object is equal to JavaScript's "null". Object can not be used as a map key. Copy type Object struct { // contains filtered or unexported fields } func Bool() bool Source: js/js.go:59 Bool returns the object converted to bool according to JavaScript type conversions. func Call(name string, args ...any) *Object Source: js/js.go:50 Call calls the object's method with the given name. func Delete(key string) Source: js/js.go:38 Delete removes the object's property with the given key. func Float() float64 Source: js/js.go:74 Float returns the object converted to float64 according to JavaScript type conversions (parseFloat). func Get(key string) *Object Source: js/js.go:32 Get returns the object's property with the given key. func Index(i int) *Object Source: js/js.go:44 Index returns the i'th element of an array. func Int() int Source: js/js.go:65 Int returns the object converted to int according to JavaScript type conversions (parseInt). func Int64() int64 Source: js/js.go:68 Int64 returns the object converted to int64 according to JavaScript type conversions (parseInt). func Interface() any Source: js/js.go:77 Interface returns the object converted to any. See table in package comment for details. func Invoke(args ...any) *Object Source: js/js.go:53 Invoke calls the object itself. This will fail if it is not a function. func Length() int Source: js/js.go:41 Length returns the object's "length" property, converted to int. func New(args ...any) *Object Source: js/js.go:56 New creates a new instance of this type object. This will fail if it not a function (constructor). func Set(key string, value any) Source: js/js.go:35 Set assigns the value to the object's property with the given key. func SetIndex(i int, value any) Source: js/js.go:47 SetIndex sets the i'th element of an array. func String() string Source: js/js.go:62 String returns the object converted to string according to JavaScript type conversions. func Uint64() uint64 Source: js/js.go:71 Uint64 returns the object converted to uint64 according to JavaScript type conversions (parseInt). func Unsafe() uintptr Source: js/js.go:80 Unsafe returns the object as an uintptr, which can be converted via unsafe.Pointer. Not intended for public use. type S Source: js/js.go:261 S is a simple slice type. It is intended as a shorthand for JavaScript arrays (before conversion). Copy type S [] any + +### nosync + +Path: `/docs/api/pkg-nosync.html` + +github.com/gopherjs/gopherjs/nosync + +import "github.com/gopherjs/gopherjs/nosync" Index Types type Map type Mutex type Once type Pool type RWMutex type WaitGroup Types type Map Source: nosync/map.go:9 Map is a concurrent map with amortized-constant-time loads, stores, and deletes. It is safe for multiple goroutines to call a Map's methods concurrently. The zero Map is valid and empty. A Map must not be copied after first use. Copy type Map struct { // contains filtered or unexported fields } func Delete(key any) Source: nosync/map.go:44 Delete deletes the value for a key. func Load(key any) (value any, ok bool) Source: nosync/map.go:16 Load returns the value stored in the map for a key, or nil if no value is present. The ok result indicates whether value was found in the map. func LoadOrStore(key, value any) (actual any, loaded bool) Source: nosync/map.go:32 LoadOrStore returns the existing value for the key if present. Otherwise, it stores and returns the given value. The loaded result is true if the value was loaded, false if stored. func Range(f func(key, value any) bool) Source: nosync/map.go:61 Range calls f sequentially for each key and value present in the map. If f returns false, range stops the iteration. Range does not necessarily correspond to any consistent snapshot of the Map's contents: no key will be visited more than once, but if the value for any key is stored or deleted concurrently, Range may reflect any mapping for that key from any point during the Range call. Range may be O(N) with the number of elements in the map even if f returns false after a constant number of calls. func Store(key, value any) Source: nosync/map.go:22 Store sets the value for a key. type Mutex Source: nosync/mutex.go:4 Mutex is a dummy which is non-blocking. Copy type Mutex struct { // contains filtered or unexported fields } func Lock() Source: nosync/mutex.go:13 Lock locks m. It is a run-time error if m is already locked. func Unlock() Source: nosync/mutex.go:21 Unlock unlocks m. It is a run-time error if m is not locked. type Once Source: nosync/once.go:4 Once is an object that will perform exactly one action. Copy type Once struct { // contains filtered or unexported fields } func Do(f func()) Source: nosync/once.go:28 Do calls the function f if and only if Do is being called for the first time for this instance of Once. In other words, given Copy var once Once if once.Do(f) is called multiple times, only the first call will invoke f, even if f has a different value in each invocation. A new instance of Once is required for each function to execute. Do is intended for initialization that must be run exactly once. Since f is niladic, it may be necessary to use a function literal to capture the arguments to a function to be invoked by Do: Copy config.once.Do(func() { config.init(filename) }) If f causes Do to be called, it will panic. If f panics, Do considers it to have returned; future calls of Do return without calling f. type Pool Source: nosync/pool.go:31 A Pool is a set of temporary objects that may be individually saved and retrieved. Any item stored in the Pool may be removed automatically at any time without notification. If the Pool holds the only reference when this happens, the item might be deallocated. A Pool is safe for use by multiple goroutines simultaneously. Pool's purpose is to cache allocated but unused items for later reuse, relieving pressure on the garbage collector. That is, it makes it easy to build efficient, thread-safe free lists. However, it is not suitable for all free lists. An appropriate use of a Pool is to manage a group of temporary items silently shared among and potentially reused by concurrent independent clients of a package. Pool provides a way to amortize allocation overhead across many clients. An example of good use of a Pool is in the fmt package, which maintains a dynamically-sized store of temporary output buffers. The store scales under load (when many goroutines are actively printing) and shrinks when quiescent. On the other hand, a free list maintained as part of a short-lived object is not a suitable use for a Pool, since the overhead does not amortize well in that scenario. It is more efficient to have such objects implement their own free list. Copy type Pool struct { New func () any // contains filtered or unexported fields } Fields New func() any func Get() any Source: nosync/pool.go:44 Get selects an arbitrary item from the Pool, removes it from the Pool, and returns it to the caller. Get may choose to ignore the pool and treat it as empty. Callers should not assume any relation between values passed to Put and the values returned by Get. If Get would otherwise return nil and p.New is non-nil, Get returns the result of calling p.New. func Put(x any) Source: nosync/pool.go:57 Put adds x to the pool. type RWMutex Source: nosync/mutex.go:29 RWMutex is a dummy which is non-blocking. Copy type RWMutex struct { // contains filtered or unexported fields } func Lock() Source: nosync/mutex.go:41 Lock locks m for writing. It is a run-time error if rw is already locked for reading or writing. func RLock() Source: nosync/mutex.go:57 RLock locks m for reading. It is a run-time error if rw is already locked for reading or writing. func RUnlock() Source: nosync/mutex.go:65 RUnlock undoes a single RLock call; it does not affect other simultaneous readers. It is a run-time error if rw is not locked for reading. func Unlock() Source: nosync/mutex.go:49 Unlock unlocks rw for writing. It is a run-time error if rw is not locked for writing. type WaitGroup Source: nosync/mutex.go:73 WaitGroup is a dummy which is non-blocking. Copy type WaitGroup struct { // contains filtered or unexported fields } func Add(delta int) Source: nosync/mutex.go:78 Add adds delta, which may be negative, to the WaitGroup If the counter goes negative, Add panics. func Done() Source: nosync/mutex.go:86 Done decrements the WaitGroup counter. func WaitGroup) Wait() Source: nosync/mutex.go:91 Wait panics if the WaitGroup counter is not zero. + +### API Reference + +Path: `/docs/api.html` + +github.com/gopherjs/gopherjs + +github.com/gopherjs/gopherjs github.com/gopherjs/gopherjs github.com/gopherjs/gopherjs build Package build implements GopherJS build system. github.com/gopherjs/gopherjs/build build/cache Package cache solves one of the hardest computer science problems in application to GopherJS compiler outputs. github.com/gopherjs/gopherjs/build/cache build/versionhack Package versionhack makes sure go/build doesn't disable module support whenever GopherJS is compiled by a different Go version than it's targeted Go version. github.com/gopherjs/gopherjs/build/versionhack compiler Package compiler implements GopherJS compiler logic. github.com/gopherjs/gopherjs/compiler compiler/astutil github.com/gopherjs/gopherjs/compiler/astutil compiler/errlist github.com/gopherjs/gopherjs/compiler/errlist compiler/filter github.com/gopherjs/gopherjs/compiler/filter compiler/gopherjspkg Package gopherjspkg provides core GopherJS packages via a virtual filesystem. github.com/gopherjs/gopherjs/compiler/gopherjspkg compiler/incjs github.com/gopherjs/gopherjs/compiler/incjs compiler/linkname github.com/gopherjs/gopherjs/compiler/linkname compiler/natives Package natives provides native packages via a virtual filesystem. github.com/gopherjs/gopherjs/compiler/natives compiler/prelude github.com/gopherjs/gopherjs/compiler/prelude compiler/sources github.com/gopherjs/gopherjs/compiler/sources compiler/typesutil github.com/gopherjs/gopherjs/compiler/typesutil js Package js provides functions for interacting with native JavaScript APIs. github.com/gopherjs/gopherjs/js nosync github.com/gopherjs/gopherjs/nosync diff --git a/docs/llms.txt b/docs/llms.txt new file mode 100644 index 00000000..7f702733 --- /dev/null +++ b/docs/llms.txt @@ -0,0 +1,28 @@ +# GopherJS + +> Reference documentation for the GopherJS compiler and its public Go packages. + +## Overview + +- [GopherJS documentation](/docs/introduction.html): Reference documentation for the GopherJS compiler and its public Go packages. + +## API Reference + +- [github.com/gopherjs/gopherjs](/docs/api/package-root.html): github.com/gopherjs/gopherjs +- [build](/docs/api/pkg-build.html): Package build implements GopherJS build system. +- [build/cache](/docs/api/pkg-build-cache.html): Package cache solves one of the hardest computer science problems in application to GopherJS compiler outputs. +- [build/versionhack](/docs/api/pkg-build-versionhack.html): Package versionhack makes sure go/build doesn't disable module support whenever GopherJS is compiled by a different Go version than it's targeted Go version. +- [compiler](/docs/api/pkg-compiler.html): Package compiler implements GopherJS compiler logic. +- [compiler/astutil](/docs/api/pkg-compiler-astutil.html): github.com/gopherjs/gopherjs/compiler/astutil +- [compiler/errlist](/docs/api/pkg-compiler-errlist.html): github.com/gopherjs/gopherjs/compiler/errlist +- [compiler/filter](/docs/api/pkg-compiler-filter.html): github.com/gopherjs/gopherjs/compiler/filter +- [compiler/gopherjspkg](/docs/api/pkg-compiler-gopherjspkg.html): Package gopherjspkg provides core GopherJS packages via a virtual filesystem. +- [compiler/incjs](/docs/api/pkg-compiler-incjs.html): github.com/gopherjs/gopherjs/compiler/incjs +- [compiler/linkname](/docs/api/pkg-compiler-linkname.html): github.com/gopherjs/gopherjs/compiler/linkname +- [compiler/natives](/docs/api/pkg-compiler-natives.html): Package natives provides native packages via a virtual filesystem. +- [compiler/prelude](/docs/api/pkg-compiler-prelude.html): github.com/gopherjs/gopherjs/compiler/prelude +- [compiler/sources](/docs/api/pkg-compiler-sources.html): github.com/gopherjs/gopherjs/compiler/sources +- [compiler/typesutil](/docs/api/pkg-compiler-typesutil.html): github.com/gopherjs/gopherjs/compiler/typesutil +- [js](/docs/api/pkg-js.html): Package js provides functions for interacting with native JavaScript APIs. +- [nosync](/docs/api/pkg-nosync.html): github.com/gopherjs/gopherjs/nosync +- [API Reference](/docs/api.html): github.com/gopherjs/gopherjs diff --git a/docs/search-index.json b/docs/search-index.json new file mode 100644 index 00000000..93986368 --- /dev/null +++ b/docs/search-index.json @@ -0,0 +1 @@ +[{"title":"GopherJS documentation","content":"Reference documentation for the GopherJS compiler and its public Go packages.","url":"/docs/introduction.html","tab":"Overview","category":"Pages"},{"title":"Start here","content":"GopherJS documentation - Start here","url":"/docs/introduction.html#start-here","tab":"Overview","category":"Sections"},{"title":"What is included","content":"GopherJS documentation - What is included","url":"/docs/introduction.html#what-is-included","tab":"Overview","category":"Sections"},{"title":"github.com/gopherjs/gopherjs","content":"github.com/gopherjs/gopherjs","url":"/docs/api/package-root.html","tab":"API Reference","category":"Pages"},{"title":"build","content":"Package build implements GopherJS build system.","url":"/docs/api/pkg-build.html","tab":"API Reference","category":"Pages"},{"title":"Variables","content":"build - Variables","url":"/docs/api/pkg-build.html#variables","tab":"API Reference","category":"Sections"},{"title":"Functions","content":"build - Functions","url":"/docs/api/pkg-build.html#functions","tab":"API Reference","category":"Sections"},{"title":"DefaultEnv","content":"build - DefaultEnv","url":"/docs/api/pkg-build.html#func-DefaultEnv","tab":"API Reference","category":"Sections"},{"title":"Import","content":"build - Import","url":"/docs/api/pkg-build.html#func-Import","tab":"API Reference","category":"Sections"},{"title":"ImportDir","content":"build - ImportDir","url":"/docs/api/pkg-build.html#func-ImportDir","tab":"API Reference","category":"Sections"},{"title":"IsPkgNotFound","content":"build - IsPkgNotFound","url":"/docs/api/pkg-build.html#func-IsPkgNotFound","tab":"API Reference","category":"Sections"},{"title":"NewBuildContext","content":"build - NewBuildContext","url":"/docs/api/pkg-build.html#func-NewBuildContext","tab":"API Reference","category":"Sections"},{"title":"NewSession","content":"build - NewSession","url":"/docs/api/pkg-build.html#func-NewSession","tab":"API Reference","category":"Sections"},{"title":"Types","content":"build - Types","url":"/docs/api/pkg-build.html#types","tab":"API Reference","category":"Sections"},{"title":"Env","content":"build - Env","url":"/docs/api/pkg-build.html#type-Env","tab":"API Reference","category":"Sections"},{"title":"Options","content":"build - Options","url":"/docs/api/pkg-build.html#type-Options","tab":"API Reference","category":"Sections"},{"title":"PackageData","content":"build - PackageData","url":"/docs/api/pkg-build.html#type-PackageData","tab":"API Reference","category":"Sections"},{"title":"Session","content":"build - Session","url":"/docs/api/pkg-build.html#type-Session","tab":"API Reference","category":"Sections"},{"title":"XContext","content":"build - XContext","url":"/docs/api/pkg-build.html#type-XContext","tab":"API Reference","category":"Sections"},{"title":"var DefaultGOROOT","content":"DefaultGOROOT is the default GOROOT value for builds.\n\nIt uses the GOPHERJS_GOROOT environment variable if it is set,\nor else the default GOROOT value of the system Go distribution.\n\nvar DefaultGOROOT = func() string {\n\tif goroot, ok := os.LookupEnv(\"GOPHERJS_GOROOT\"); ok {\n\n\t\treturn goroot\n\t}\n\n\treturn build.Default.GOROOT\n}()","url":"/docs/api/pkg-build.html#var-DefaultGOROOT","tab":"API Reference","category":"go variable"},{"title":"func DefaultEnv() Env","content":"DefaultEnv creates a new instance of build Env according to environment\nvariables.\n\nBy default, GopherJS will use GOOS=js GOARCH=ecmascript to build non-standard\nlibrary packages. If GOOS or GOARCH environment variables are set and not\nempty, user-provided values will be used instead. This is done to facilitate\ntransition from the legacy GopherJS behavior, which used native GOOS, and may\nbe removed in future.\n\nfunc DefaultEnv() Env","url":"/docs/api/pkg-build.html#func-DefaultEnv","tab":"API Reference","category":"go function"},{"title":"func Import(path string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error)","content":"Import returns details about the Go package named by the import path. If the\npath is a local import path naming a package that can be imported using\na standard import path, the returned package will set p.ImportPath to\nthat path.\n\nIn the directory containing the package, .go and .inc.js files are\nconsidered part of the package except for:\n\n - .go files in package documentation\n - files starting with _ or . (likely editor temporary files)\n - files with build constraints not satisfied by the co","url":"/docs/api/pkg-build.html#func-Import","tab":"API Reference","category":"go function"},{"title":"func ImportDir(dir string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error)","content":"ImportDir is like Import but processes the Go package found in the named\ndirectory.\n\nfunc ImportDir(dir string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error)","url":"/docs/api/pkg-build.html#func-ImportDir","tab":"API Reference","category":"go function"},{"title":"func IsPkgNotFound(err error) bool","content":"IsPkgNotFound returns true if the error was caused by package not found.\n\nUnfortunately, go/build doesn't make use of typed errors, so we have to\nrely on the error message.\n\nfunc IsPkgNotFound(err error) bool","url":"/docs/api/pkg-build.html#func-IsPkgNotFound","tab":"API Reference","category":"go function"},{"title":"func NewBuildContext(installSuffix string, buildTags []string) XContext","content":"NewBuildContext creates a build context for building Go packages\nwith GopherJS compiler.\n\nCore GopherJS packages (i.e., \"github.com/gopherjs/gopherjs/js\", \"github.com/gopherjs/gopherjs/nosync\")\nare loaded from gopherjspkg.FS virtual filesystem if not present in GOPATH or\ngo.mod.\n\nfunc NewBuildContext(installSuffix string, buildTags []string) XContext","url":"/docs/api/pkg-build.html#func-NewBuildContext","tab":"API Reference","category":"go function"},{"title":"func NewSession(options *Options) (*Session, error)","content":"NewSession creates a new GopherJS build session.\n\nfunc NewSession(options *Options) (*Session, error)","url":"/docs/api/pkg-build.html#func-NewSession","tab":"API Reference","category":"go function"},{"title":"type Env","content":"Env contains build environment configuration required to define an instance\nof XContext.\n\ntype Env struct {\n\tGOROOT string\n\tGOPATH string\n\n\tGOOS string\n\tGOARCH string\n\n\tBuildTags []string\n\tInstallSuffix string\n}","url":"/docs/api/pkg-build.html#type-Env","tab":"API Reference","category":"go type"},{"title":"type Options","content":"Options controls build process behavior.\n\ntype Options struct {\n\tVerbose bool\n\tQuiet bool\n\tWatch bool\n\tCreateMapFile bool\n\tMapToLocalDisk bool\n\tMinify bool\n\tColor bool\n\tBuildTags []string\n\tTestedPackage string\n\tNoCache bool\n}","url":"/docs/api/pkg-build.html#type-Options","tab":"API Reference","category":"go type"},{"title":"Options.PrintError","content":"PrintError message to the terminal.\n\nfunc PrintError(format string, a ...any)","url":"/docs/api/pkg-build.html#method-Options-PrintError","tab":"API Reference","category":"go method"},{"title":"Options.PrintSuccess","content":"PrintSuccess message to the terminal.\n\nfunc PrintSuccess(format string, a ...any)","url":"/docs/api/pkg-build.html#method-Options-PrintSuccess","tab":"API Reference","category":"go method"},{"title":"type PackageData","content":"PackageData is an extension of go/build.Package with additional metadata\nGopherJS requires.\n\ntype PackageData struct {\n\t*build.Package\n\tJSFiles []incjs.File\n\t// IsTest is true if the package is being built for running tests.\n\tIsTest bool\n\tSrcModTime time.Time\n\tUpToDate bool\n\t// If true, the package does not have a corresponding physical directory on disk.\n\tIsVirtual bool\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-build.html#type-PackageData","tab":"API Reference","category":"go type"},{"title":"PackageData.FileModTime","content":"FileModTime returns the most recent modification time of the package's source\nfiles. This includes all .go and .inc.js that would be included in the build,\nbut excludes any dependencies.\n\nfunc FileModTime() time.Time","url":"/docs/api/pkg-build.html#method-PackageData-FileModTime","tab":"API Reference","category":"go method"},{"title":"PackageData.InstallPath","content":"InstallPath returns the path where \"gopherjs install\" command should place the\ngenerated output.\n\nfunc InstallPath() (string, error)","url":"/docs/api/pkg-build.html#method-PackageData-InstallPath","tab":"API Reference","category":"go method"},{"title":"PackageData.InternalBuildContext","content":"InternalBuildContext returns the build context that produced the package.\n\nWARNING: This function is a part of internal API and will be removed in\nfuture.\n\nfunc InternalBuildContext() *build.Context","url":"/docs/api/pkg-build.html#method-PackageData-InternalBuildContext","tab":"API Reference","category":"go method"},{"title":"PackageData.String","content":"func String() string","url":"/docs/api/pkg-build.html#method-PackageData-String","tab":"API Reference","category":"go method"},{"title":"PackageData.TestPackage","content":"TestPackage returns a variant of the package with \"internal\" tests.\n\nfunc TestPackage() *PackageData","url":"/docs/api/pkg-build.html#method-PackageData-TestPackage","tab":"API Reference","category":"go method"},{"title":"PackageData.XTestPackage","content":"XTestPackage returns a variant of the package with \"external\" tests.\n\nfunc XTestPackage() *PackageData","url":"/docs/api/pkg-build.html#method-PackageData-XTestPackage","tab":"API Reference","category":"go method"},{"title":"type Session","content":"Session manages internal state GopherJS requires to perform a build.\n\nThis is the main interface to GopherJS build system. Session lifetime is\nroughly equivalent to a single GopherJS tool invocation.\n\ntype Session struct {\n\n\t// Binary archives produced during the current session and assumed to be\n\t// up to date with input sources and dependencies. In the -w (\"watch\") mode\n\t// must be cleared upon entering watching.\n\tUpToDateArchives map[string]*compiler.Archive\n\tWatcher *fsnotify.Watche","url":"/docs/api/pkg-build.html#type-Session","tab":"API Reference","category":"go type"},{"title":"Session.BuildFiles","content":"BuildFiles passed to the GopherJS tool as if they were a package.\n\nA ephemeral package will be created with only the provided files. This\nfunction is intended for use with, for example, `gopherjs run main.go`.\n\nfunc BuildFiles(filenames []string, pkgObj string, cwd string) error","url":"/docs/api/pkg-build.html#method-Session-BuildFiles","tab":"API Reference","category":"go method"},{"title":"Session.BuildProject","content":"BuildProject builds a command project (one with a main method) or\nbuilds a test project (one with a synthesized test main package).\n\nfunc BuildProject(pkg *PackageData) (*compiler.Archive, error)","url":"/docs/api/pkg-build.html#method-Session-BuildProject","tab":"API Reference","category":"go method"},{"title":"Session.EnableMapping","content":"SourceMappingCallback returns a callback for [github.com/gopherjs/gopherjs/compiler.SourceMapFilter]\nconfigured for the current build session.\n\nfunc EnableMapping(filter *sourcemapx.Filter, jsFileName string)","url":"/docs/api/pkg-build.html#method-Session-EnableMapping","tab":"API Reference","category":"go method"},{"title":"Session.GetSortedSources","content":"GetSortedSources returns the sources sorted by import path.\nThe files in the sources may still not be sorted yet.\n\nfunc GetSortedSources() []*sources.Sources","url":"/docs/api/pkg-build.html#method-Session-GetSortedSources","tab":"API Reference","category":"go method"},{"title":"Session.GoRelease","content":"GoRelease returns Go release version this session is building with.\n\nfunc GoRelease() string","url":"/docs/api/pkg-build.html#method-Session-GoRelease","tab":"API Reference","category":"go method"},{"title":"Session.ImportResolverFor","content":"ImportResolverFor returns a function which returns a compiled package archive\ngiven an import path.\n\nfunc ImportResolverFor(srcDir string) func(string) (*compiler.Archive, error)","url":"/docs/api/pkg-build.html#method-Session-ImportResolverFor","tab":"API Reference","category":"go method"},{"title":"Session.InstallSuffix","content":"InstallSuffix returns the suffix added to the generated output file.\n\nfunc InstallSuffix() string","url":"/docs/api/pkg-build.html#method-Session-InstallSuffix","tab":"API Reference","category":"go method"},{"title":"Session.LoadPackages","content":"LoadPackages will recursively load and parse the given package and\nits dependencies. This will return the sources for the given package.\nThe returned source and sources for the dependencies will be added\nto the session's sources map.\n\nfunc LoadPackages(pkg *PackageData) (*sources.Sources, error)","url":"/docs/api/pkg-build.html#method-Session-LoadPackages","tab":"API Reference","category":"go method"},{"title":"Session.SourcesForImport","content":"func SourcesForImport(path, srcDir string) (*sources.Sources, error)","url":"/docs/api/pkg-build.html#method-Session-SourcesForImport","tab":"API Reference","category":"go method"},{"title":"Session.TestBinary","content":"TestBinary returns the testBinary value that is normally passed into\ncmd/link by a -X option. The testBinary value is defined in the STL at\ntesting/testing.go for the `testing.Testing() bool` function.\nIt is set to \"1\" if the binary (the JS output in our case) is built\nwith \"go test\" and \"0\" otherwise.\n\nfunc TestBinary() string","url":"/docs/api/pkg-build.html#method-Session-TestBinary","tab":"API Reference","category":"go method"},{"title":"Session.WaitForChange","content":"WaitForChange watches file system events and returns if either when one of\nthe source files is modified.\n\nfunc WaitForChange()","url":"/docs/api/pkg-build.html#method-Session-WaitForChange","tab":"API Reference","category":"go method"},{"title":"Session.WriteCommandPackage","content":"WriteCommandPackage writes the final JavaScript output file at pkgObj path.\n\nfunc WriteCommandPackage(archive *compiler.Archive, pkgObj string) error","url":"/docs/api/pkg-build.html#method-Session-WriteCommandPackage","tab":"API Reference","category":"go method"},{"title":"Session.XContext","content":"XContext returns the session's build context.\n\nfunc XContext() XContext","url":"/docs/api/pkg-build.html#method-Session-XContext","tab":"API Reference","category":"go method"},{"title":"type XContext","content":"XContext is an extension of go/build.Context with GopherJS-specific features.\n\nIt abstracts away several different sources GopherJS can load its packages\nfrom, with a minimal API.\n\ntype XContext interface {\n\t// Import returns details about the Go package named by the importPath,\n\t// interpreting local import paths relative to the srcDir directory.\n\tImport(path string, srcDir string, mode build.ImportMode) (*PackageData, error)\n\n\t// Env returns build environment configuration this context has bee","url":"/docs/api/pkg-build.html#type-XContext","tab":"API Reference","category":"go type"},{"title":"build/cache","content":"Package cache solves one of the hardest computer science problems in application to GopherJS compiler outputs.","url":"/docs/api/pkg-build-cache.html","tab":"API Reference","category":"Pages"},{"title":"Functions","content":"build/cache - Functions","url":"/docs/api/pkg-build-cache.html#functions","tab":"API Reference","category":"Sections"},{"title":"Clear","content":"build/cache - Clear","url":"/docs/api/pkg-build-cache.html#func-Clear","tab":"API Reference","category":"Sections"},{"title":"Types","content":"build/cache - Types","url":"/docs/api/pkg-build-cache.html#types","tab":"API Reference","category":"Sections"},{"title":"BuildCache","content":"build/cache - BuildCache","url":"/docs/api/pkg-build-cache.html#type-BuildCache","tab":"API Reference","category":"Sections"},{"title":"Cache","content":"build/cache - Cache","url":"/docs/api/pkg-build-cache.html#type-Cache","tab":"API Reference","category":"Sections"},{"title":"Cacheable","content":"build/cache - Cacheable","url":"/docs/api/pkg-build-cache.html#type-Cacheable","tab":"API Reference","category":"Sections"},{"title":"func Clear() error","content":"Clear the cache. This will remove *all* cached artifacts from *all* build\nconfigurations.\n\nfunc Clear() error","url":"/docs/api/pkg-build-cache.html#func-Clear","tab":"API Reference","category":"go function"},{"title":"type BuildCache","content":"BuildCache manages build artifacts that are cached for incremental builds.\n\nCache is designed to be non-durable: any store and load errors are swallowed\nand simply lead to a cache miss. The caller must be able to handle cache\nmisses. Nil pointer to BuildCache is valid and simply disables caching.\n\nBuildCache struct fields represent build parameters which change invalidates\nthe cache. For example, any artifacts that were cached for a Linux build\nmust not be reused for a non-Linux build. GopherJS ","url":"/docs/api/pkg-build-cache.html#type-BuildCache","tab":"API Reference","category":"go type"},{"title":"BuildCache.Load","content":"func Load(c Cacheable, importPath string, srcModTime time.Time) bool","url":"/docs/api/pkg-build-cache.html#method-BuildCache-Load","tab":"API Reference","category":"go method"},{"title":"BuildCache.Store","content":"func Store(c Cacheable, importPath string, buildTime time.Time) bool","url":"/docs/api/pkg-build-cache.html#method-BuildCache-Store","tab":"API Reference","category":"go method"},{"title":"BuildCache.String","content":"func String() string","url":"/docs/api/pkg-build-cache.html#method-BuildCache-String","tab":"API Reference","category":"go method"},{"title":"type Cache","content":"Cache defines methods to store and load cacheable objects.\n\ntype Cache interface {\n\t// Store stores the package with the given import path in the cache.\n\t// Any error inside this method will cause the cache not to be persisted.\n\t//\n\t// The passed in buildTime is used to determine if the package is out-of-date when reloaded.\n\t// Typically it should be set to the srcModTime or time.Now().\n\tStore(c Cacheable, importPath string, buildTime time.Time) bool\n\n\t// Load reads a previously cached package a","url":"/docs/api/pkg-build-cache.html#type-Cache","tab":"API Reference","category":"go type"},{"title":"type Cacheable","content":"Cacheable defines methods to serialize and deserialize cachable objects.\nThis object should represent a package's build artifact.\n\nThe encode and decode functions are typically wrappers around gob.Encoder.Encode\nand gob.Decoder.Decode, but other formats are possible as well, the same way\nas FileSet.Write and FileSet.Read work with any encode/decode functions.\n\ntype Cacheable interface {\n\tWrite(encode func(any) error) error\n\tRead(decode func(any) error) error\n}","url":"/docs/api/pkg-build-cache.html#type-Cacheable","tab":"API Reference","category":"go type"},{"title":"build/versionhack","content":"Package versionhack makes sure go/build doesn't disable module support whenever GopherJS is compiled by a different Go version than it's targeted Go version.","url":"/docs/api/pkg-build-versionhack.html","tab":"API Reference","category":"Pages"},{"title":"compiler","content":"Package compiler implements GopherJS compiler logic.","url":"/docs/api/pkg-compiler.html","tab":"API Reference","category":"Pages"},{"title":"Constants","content":"compiler - Constants","url":"/docs/api/pkg-compiler.html#constants","tab":"API Reference","category":"Sections"},{"title":"Functions","content":"compiler - Functions","url":"/docs/api/pkg-compiler.html#functions","tab":"API Reference","category":"Sections"},{"title":"CheckGoVersion","content":"compiler - CheckGoVersion","url":"/docs/api/pkg-compiler.html#func-CheckGoVersion","tab":"API Reference","category":"Sections"},{"title":"Compile","content":"compiler - Compile","url":"/docs/api/pkg-compiler.html#func-Compile","tab":"API Reference","category":"Sections"},{"title":"DefaultFilter","content":"compiler - DefaultFilter","url":"/docs/api/pkg-compiler.html#func-DefaultFilter","tab":"API Reference","category":"Sections"},{"title":"GoRelease","content":"compiler - GoRelease","url":"/docs/api/pkg-compiler.html#func-GoRelease","tab":"API Reference","category":"Sections"},{"title":"ImportDependencies","content":"compiler - ImportDependencies","url":"/docs/api/pkg-compiler.html#func-ImportDependencies","tab":"API Reference","category":"Sections"},{"title":"PrepareAllSources","content":"compiler - PrepareAllSources","url":"/docs/api/pkg-compiler.html#func-PrepareAllSources","tab":"API Reference","category":"Sections"},{"title":"WritePkgCode","content":"compiler - WritePkgCode","url":"/docs/api/pkg-compiler.html#func-WritePkgCode","tab":"API Reference","category":"Sections"},{"title":"WriteProgramCode","content":"compiler - WriteProgramCode","url":"/docs/api/pkg-compiler.html#func-WriteProgramCode","tab":"API Reference","category":"Sections"},{"title":"Types","content":"compiler - Types","url":"/docs/api/pkg-compiler.html#types","tab":"API Reference","category":"Sections"},{"title":"Archive","content":"compiler - Archive","url":"/docs/api/pkg-compiler.html#type-Archive","tab":"API Reference","category":"Sections"},{"title":"Decl","content":"compiler - Decl","url":"/docs/api/pkg-compiler.html#type-Decl","tab":"API Reference","category":"Sections"},{"title":"Dependency","content":"compiler - Dependency","url":"/docs/api/pkg-compiler.html#type-Dependency","tab":"API Reference","category":"Sections"},{"title":"FatalError","content":"compiler - FatalError","url":"/docs/api/pkg-compiler.html#type-FatalError","tab":"API Reference","category":"Sections"},{"title":"const GoVersion","content":"GoVersion is the current Go 1.x version that GopherJS is compatible with.\n\nconst GoVersion = 21","url":"/docs/api/pkg-compiler.html#const-GoVersion","tab":"API Reference","category":"go constant"},{"title":"const Version","content":"Version is the GopherJS compiler version string.\n\nconst Version = \"1.21.0+go1.21.13\"","url":"/docs/api/pkg-compiler.html#const-Version","tab":"API Reference","category":"go constant"},{"title":"func CheckGoVersion(goroot string) error","content":"CheckGoVersion checks the version of the Go distribution\nat goroot, and reports an error if it's not compatible\nwith this version of the GopherJS compiler.\n\nfunc CheckGoVersion(goroot string) error","url":"/docs/api/pkg-compiler.html#func-CheckGoVersion","tab":"API Reference","category":"go function"},{"title":"func Compile(srcs *sources.Sources, tContext *types.Context, minify bool) (_ *Archive, err error)","content":"Compile the provided Go sources as a single package.\n\nProvided sources must be prepared so that the type information has been determined,\nand the source files have been sorted by name to ensure reproducible JavaScript output.\n\nfunc Compile(srcs *sources.Sources, tContext *types.Context, minify bool) (_ *Archive, err error)","url":"/docs/api/pkg-compiler.html#func-Compile","tab":"API Reference","category":"go function"},{"title":"func DefaultFilter(w io.Writer) *sourcemapx.Filter","content":"DefaultFilter creates a new sourcemapx.Filter that writes to the given writer.\nThis is not in the internal package so that tools like the playground can\nuse it when calling things like the exported WriteProgramCode function.\n\nfunc DefaultFilter(w io.Writer) *sourcemapx.Filter","url":"/docs/api/pkg-compiler.html#func-DefaultFilter","tab":"API Reference","category":"go function"},{"title":"func GoRelease(goroot string) string","content":"GoRelease does a best-effort to identify the Go release we are building with.\nIf unable to determine the precise version for the given GOROOT, falls back\nto the best guess available.\n\nfunc GoRelease(goroot string) string","url":"/docs/api/pkg-compiler.html#func-GoRelease","tab":"API Reference","category":"go function"},{"title":"func ImportDependencies(archive *Archive, importPkg func(string) (*Archive, error)) ([]*Archive, error)","content":"func ImportDependencies(archive *Archive, importPkg func(string) (*Archive, error)) ([]*Archive, error)","url":"/docs/api/pkg-compiler.html#func-ImportDependencies","tab":"API Reference","category":"go function"},{"title":"func PrepareAllSources(allSources []*sources.Sources, importer sources.Importer, tContext *types.Context) error","content":"PrepareAllSources prepares all sources for compilation by\nparsing go linknames, type checking, sorting, simplifying, and\nperforming cross package analysis.\nThe results are stored in the provided sources.\n\nAll sources must be given at the same time for cross package analysis to\nwork correctly. For consistency, the sources should be sorted by import path.\n\nfunc PrepareAllSources(allSources []*sources.Sources, importer sources.Importer, tContext *types.Context) error","url":"/docs/api/pkg-compiler.html#func-PrepareAllSources","tab":"API Reference","category":"go function"},{"title":"func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, gls linkname.GoLinknameSet, minify bool, w *sourcemapx.Filter) error","content":"func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, gls linkname.GoLinknameSet, minify bool, w *sourcemapx.Filter) error","url":"/docs/api/pkg-compiler.html#func-WritePkgCode","tab":"API Reference","category":"go function"},{"title":"func WriteProgramCode(pkgs []*Archive, w *sourcemapx.Filter, goVersion, testBinary string) error","content":"func WriteProgramCode(pkgs []*Archive, w *sourcemapx.Filter, goVersion, testBinary string) error","url":"/docs/api/pkg-compiler.html#func-WriteProgramCode","tab":"API Reference","category":"go function"},{"title":"type Archive","content":"Archive contains intermediate build outputs of a single package.\n\nThis is a logical equivalent of an object file in traditional compilers.\n\ntype Archive struct {\n\t// Package's full import path, e.g. \"some/package/name\".\n\tImportPath string\n\t// Package's name as per \"package\" statement at the top of a source file.\n\t// Usually matches the last component of import path, but may differ in\n\t// certain cases (e.g. main or test packages).\n\tName string\n\t// A list of full package import paths that the cur","url":"/docs/api/pkg-compiler.html#type-Archive","tab":"API Reference","category":"go type"},{"title":"Archive.String","content":"func String() string","url":"/docs/api/pkg-compiler.html#method-Archive-String","tab":"API Reference","category":"go method"},{"title":"type Decl","content":"Decl represents a package-level symbol (e.g. a function, variable or type).\n\nIt contains code generated by the compiler for this specific symbol, which is\ngrouped by the execution stage it belongs to in the JavaScript runtime.\n\nWhen adding new fields to this struct, make sure the field is exported\nso that it Gob serializes correctly for the archive cache.\n\ntype Decl struct {\n\t// The package- or receiver-type-qualified name of function or method obj.\n\t// See go/types.Func.FullName().\n\tFullName st","url":"/docs/api/pkg-compiler.html#type-Decl","tab":"API Reference","category":"go type"},{"title":"Decl.Dce","content":"Dce gets the information for dead-code elimination.\n\nfunc Dce() *dce.Info","url":"/docs/api/pkg-compiler.html#method-Decl-Dce","tab":"API Reference","category":"go method"},{"title":"type Dependency","content":"type Dependency struct {\n\tPkg string\n\tType string\n\tMethod string\n}","url":"/docs/api/pkg-compiler.html#type-Dependency","tab":"API Reference","category":"go type"},{"title":"type FatalError","content":"FatalError is an error compiler panics with when it encountered a fatal error.\n\nFatalError implements io.Writer, which can be used to record any free-form\ndebugging details for human consumption. This information will be included\ninto String() result along with the rest.\n\ntype FatalError struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-compiler.html#type-FatalError","tab":"API Reference","category":"go type"},{"title":"FatalError.Error","content":"func Error) Error() string","url":"/docs/api/pkg-compiler.html#method-FatalError-Error","tab":"API Reference","category":"go method"},{"title":"FatalError.Unwrap","content":"func Unwrap() error","url":"/docs/api/pkg-compiler.html#method-FatalError-Unwrap","tab":"API Reference","category":"go method"},{"title":"FatalError.Write","content":"Write implements io.Writer and can be used to store free-form debugging clues.\n\nfunc Write(p []byte) (n int, err error)","url":"/docs/api/pkg-compiler.html#method-FatalError-Write","tab":"API Reference","category":"go method"},{"title":"compiler/astutil","content":"github.com/gopherjs/gopherjs/compiler/astutil","url":"/docs/api/pkg-compiler-astutil.html","tab":"API Reference","category":"Pages"},{"title":"Functions","content":"compiler/astutil - Functions","url":"/docs/api/pkg-compiler-astutil.html#functions","tab":"API Reference","category":"Sections"},{"title":"DirectiveNew","content":"compiler/astutil - DirectiveNew","url":"/docs/api/pkg-compiler-astutil.html#func-DirectiveNew","tab":"API Reference","category":"Sections"},{"title":"DirectiveReplace","content":"compiler/astutil - DirectiveReplace","url":"/docs/api/pkg-compiler-astutil.html#func-DirectiveReplace","tab":"API Reference","category":"Sections"},{"title":"EndsWithReturn","content":"compiler/astutil - EndsWithReturn","url":"/docs/api/pkg-compiler-astutil.html#func-EndsWithReturn","tab":"API Reference","category":"Sections"},{"title":"FindLoopStmt","content":"compiler/astutil - FindLoopStmt","url":"/docs/api/pkg-compiler-astutil.html#func-FindLoopStmt","tab":"API Reference","category":"Sections"},{"title":"FuncKey","content":"compiler/astutil - FuncKey","url":"/docs/api/pkg-compiler-astutil.html#func-FuncKey","tab":"API Reference","category":"Sections"},{"title":"FuncReceiverKey","content":"compiler/astutil - FuncReceiverKey","url":"/docs/api/pkg-compiler-astutil.html#func-FuncReceiverKey","tab":"API Reference","category":"Sections"},{"title":"HasDirectivePrefix","content":"compiler/astutil - HasDirectivePrefix","url":"/docs/api/pkg-compiler-astutil.html#func-HasDirectivePrefix","tab":"API Reference","category":"Sections"},{"title":"ImportName","content":"compiler/astutil - ImportName","url":"/docs/api/pkg-compiler-astutil.html#func-ImportName","tab":"API Reference","category":"Sections"},{"title":"ImportsUnsafe","content":"compiler/astutil - ImportsUnsafe","url":"/docs/api/pkg-compiler-astutil.html#func-ImportsUnsafe","tab":"API Reference","category":"Sections"},{"title":"IsTypeExpr","content":"compiler/astutil - IsTypeExpr","url":"/docs/api/pkg-compiler-astutil.html#func-IsTypeExpr","tab":"API Reference","category":"Sections"},{"title":"KeepOriginal","content":"compiler/astutil - KeepOriginal","url":"/docs/api/pkg-compiler-astutil.html#func-KeepOriginal","tab":"API Reference","category":"Sections"},{"title":"NewIdent","content":"compiler/astutil - NewIdent","url":"/docs/api/pkg-compiler-astutil.html#func-NewIdent","tab":"API Reference","category":"Sections"},{"title":"OverrideSignature","content":"compiler/astutil - OverrideSignature","url":"/docs/api/pkg-compiler-astutil.html#func-OverrideSignature","tab":"API Reference","category":"Sections"},{"title":"Purge","content":"compiler/astutil - Purge","url":"/docs/api/pkg-compiler-astutil.html#func-Purge","tab":"API Reference","category":"Sections"},{"title":"RemoveParens","content":"compiler/astutil - RemoveParens","url":"/docs/api/pkg-compiler-astutil.html#func-RemoveParens","tab":"API Reference","category":"Sections"},{"title":"SetType","content":"compiler/astutil - SetType","url":"/docs/api/pkg-compiler-astutil.html#func-SetType","tab":"API Reference","category":"Sections"},{"title":"Squeeze","content":"compiler/astutil - Squeeze","url":"/docs/api/pkg-compiler-astutil.html#func-Squeeze","tab":"API Reference","category":"Sections"},{"title":"func DirectiveNew(d ast.Node) bool","content":"DirectiveNew returns true if gopherjs:new directive is\npresent on a struct, interface, type, variable, constant, or function.\n\n`//gopherjs:new` is a GopherJS-specific directive, which can be\napplied in native overlays and will instruct the augmentation logic to\nensure that the original code is not present so that this code does not\noverride any original code, otherwise an error will be raised.\n\nfunc DirectiveNew(d ast.Node) bool","url":"/docs/api/pkg-compiler-astutil.html#func-DirectiveNew","tab":"API Reference","category":"go function"},{"title":"func DirectiveReplace(d ast.Node) bool","content":"DirectiveReplace returns true if gopherjs:replace directive is present\non a struct, interface, type, variable, constant, or function.\n\n`//gopherjs:replace` is a GopherJS-specific directive, which can be\napplied in native overlays and will instruct the augmentation logic to\nensure that the original code is present and has not been removed nor renamed,\notherwise an error will be raised.\n\nfunc DirectiveReplace(d ast.Node) bool","url":"/docs/api/pkg-compiler-astutil.html#func-DirectiveReplace","tab":"API Reference","category":"go function"},{"title":"func EndsWithReturn(stmts []ast.Stmt) bool","content":"EndsWithReturn returns true if the last effective statement is a \"return\".\n\nfunc EndsWithReturn(stmts []ast.Stmt) bool","url":"/docs/api/pkg-compiler-astutil.html#func-EndsWithReturn","tab":"API Reference","category":"go function"},{"title":"func FindLoopStmt(stack []ast.Node, branch *ast.BranchStmt, typeInfo *types.Info) ast.Stmt","content":"FindLoopStmt tries to find the loop statement among the AST nodes in the\n|stack| that corresponds to the break/continue statement represented by\nbranch.\n\nThis function is label-aware and assumes the code was successfully\ntype-checked.\n\nfunc FindLoopStmt(stack []ast.Node, branch *ast.BranchStmt, typeInfo *types.Info) ast.Stmt","url":"/docs/api/pkg-compiler-astutil.html#func-FindLoopStmt","tab":"API Reference","category":"go function"},{"title":"func FuncKey(d *ast.FuncDecl) string","content":"FuncKey returns a string, which uniquely identifies a top-level function or\nmethod in a package.\n\nfunc FuncKey(d *ast.FuncDecl) string","url":"/docs/api/pkg-compiler-astutil.html#func-FuncKey","tab":"API Reference","category":"go function"},{"title":"func FuncReceiverKey(d *ast.FuncDecl) string","content":"FuncReceiverKey returns a string that uniquely identifies the receiver\nstruct of the function or an empty string if there is no receiver.\nThis name will match the name of the struct in the struct's type spec.\n\nfunc FuncReceiverKey(d *ast.FuncDecl) string","url":"/docs/api/pkg-compiler-astutil.html#func-FuncReceiverKey","tab":"API Reference","category":"go function"},{"title":"func HasDirectivePrefix(file *ast.File, prefix string) bool","content":"HasDirectivePrefix determines if any line in the given file\nhas the given directive prefix in it.\n\nfunc HasDirectivePrefix(file *ast.File, prefix string) bool","url":"/docs/api/pkg-compiler-astutil.html#func-HasDirectivePrefix","tab":"API Reference","category":"go function"},{"title":"func ImportName(spec *ast.ImportSpec) string","content":"ImportName tries to determine the package name for an import.\n\nIf the package name isn't specified then this will make a best\nmake a best guess using the import path.\nIf the import name is dot (`.`), blank (`_`), or there\nwas an issue determining the package name then empty is returned.\n\nfunc ImportName(spec *ast.ImportSpec) string","url":"/docs/api/pkg-compiler-astutil.html#func-ImportName","tab":"API Reference","category":"go function"},{"title":"func ImportsUnsafe(file *ast.File) bool","content":"func ImportsUnsafe(file *ast.File) bool","url":"/docs/api/pkg-compiler-astutil.html#func-ImportsUnsafe","tab":"API Reference","category":"go function"},{"title":"func IsTypeExpr(expr ast.Expr, info *types.Info) bool","content":"IsTypeExpr returns true if expr denotes a type. This can be used to\ndistinguish between calls and type conversions.\n\nfunc IsTypeExpr(expr ast.Expr, info *types.Info) bool","url":"/docs/api/pkg-compiler-astutil.html#func-IsTypeExpr","tab":"API Reference","category":"go function"},{"title":"func KeepOriginal(d *ast.FuncDecl) bool","content":"KeepOriginal returns true if gopherjs:keep-original directive is present\nbefore a function decl.\n\n`//gopherjs:keep-original` is a GopherJS-specific directive, which can be\napplied to functions in native overlays and will instruct the augmentation\nlogic to expose the original function such that it can be called. For a\nfunction in the original called `foo`, it will be accessible by the name\n`_gopherjs_original_foo`.\n\nThis will also ensure that the original function exists and hasn't been\nremoved o","url":"/docs/api/pkg-compiler-astutil.html#func-KeepOriginal","tab":"API Reference","category":"go function"},{"title":"func NewIdent(name string, t types.Type, info *types.Info, pkg *types.Package) *ast.Ident","content":"func NewIdent(name string, t types.Type, info *types.Info, pkg *types.Package) *ast.Ident","url":"/docs/api/pkg-compiler-astutil.html#func-NewIdent","tab":"API Reference","category":"go function"},{"title":"func OverrideSignature(d *ast.FuncDecl) bool","content":"OverrideSignature returns true if gopherjs:override-signature directive is\npresent on a function.\n\n`//gopherjs:override-signature` is a GopherJS-specific directive, which can\nbe applied in native overlays and will instruct the augmentation logic to\nreplace the original function signature which has the same FuncKey with the\nsignature defined in the native overlays.\n\nThis directive can be used to remove generics from a function signature or\nto replace a receiver of a function with another one. The","url":"/docs/api/pkg-compiler-astutil.html#func-OverrideSignature","tab":"API Reference","category":"go function"},{"title":"func Purge(d ast.Node) bool","content":"Purge returns true if gopherjs:purge directive is present\non a struct, interface, type, variable, constant, or function.\n\n`//gopherjs:purge` is a GopherJS-specific directive, which can be\napplied in native overlays and will instruct the augmentation logic to\ndelete part of the standard library without a replacement. This directive\ncan be used to remove code that would be invalid in GopherJS, such as code\nusing unsupported features (e.g. generic interfaces before generics were\nfully supported). I","url":"/docs/api/pkg-compiler-astutil.html#func-Purge","tab":"API Reference","category":"go function"},{"title":"func RemoveParens(e ast.Expr) ast.Expr","content":"func RemoveParens(e ast.Expr) ast.Expr","url":"/docs/api/pkg-compiler-astutil.html#func-RemoveParens","tab":"API Reference","category":"go function"},{"title":"func SetType(info *types.Info, t types.Type, e ast.Expr) ast.Expr","content":"func SetType(info *types.Info, t types.Type, e ast.Expr) ast.Expr","url":"/docs/api/pkg-compiler-astutil.html#func-SetType","tab":"API Reference","category":"go function"},{"title":"func Squeeze[E ast.Node, S ~[]E](s S) S","content":"Squeeze removes all nil nodes from the slice.\n\nThe given slice will be modified. This is designed for squeezing\ndeclaration, specification, imports, and identifier lists.\n\nfunc Squeeze[E ast.Node, S ~[]E](s S) S","url":"/docs/api/pkg-compiler-astutil.html#func-Squeeze","tab":"API Reference","category":"go function"},{"title":"compiler/errlist","content":"github.com/gopherjs/gopherjs/compiler/errlist","url":"/docs/api/pkg-compiler-errlist.html","tab":"API Reference","category":"Pages"},{"title":"Variables","content":"compiler/errlist - Variables","url":"/docs/api/pkg-compiler-errlist.html#variables","tab":"API Reference","category":"Sections"},{"title":"Types","content":"compiler/errlist - Types","url":"/docs/api/pkg-compiler-errlist.html#types","tab":"API Reference","category":"Sections"},{"title":"ErrorList","content":"compiler/errlist - ErrorList","url":"/docs/api/pkg-compiler-errlist.html#type-ErrorList","tab":"API Reference","category":"Sections"},{"title":"var ErrTooManyErrors","content":"ErrTooManyErrors is added to the ErrorList by the Trim method.\n\nvar ErrTooManyErrors = errors.New(\"too many errors\")","url":"/docs/api/pkg-compiler-errlist.html#var-ErrTooManyErrors","tab":"API Reference","category":"go variable"},{"title":"type ErrorList","content":"ErrorList wraps multiple errors as a single error.\n\ntype ErrorList []error","url":"/docs/api/pkg-compiler-errlist.html#type-ErrorList","tab":"API Reference","category":"go type"},{"title":"ErrorList.Append","content":"Append an error to the list.\n\nIf err is an instance of ErrorList, the lists are concatenated together,\notherwise err is appended at the end of the list. If err is nil, the list is\nreturned unmodified.\n\n\terr := DoStuff()\n\terrList := errList.Append(err)\n\nfunc Append(err error) ErrorList","url":"/docs/api/pkg-compiler-errlist.html#method-ErrorList-Append","tab":"API Reference","category":"go method"},{"title":"ErrorList.AppendDistinct","content":"AppendDistinct is similar to Append, but doesn't append the error if it has\nthe same message as the last error on the list.\n\nfunc AppendDistinct(err error) ErrorList","url":"/docs/api/pkg-compiler-errlist.html#method-ErrorList-AppendDistinct","tab":"API Reference","category":"go method"},{"title":"ErrorList.ErrOrNil","content":"ErrOrNil returns nil if ErrorList is empty, or the error otherwise.\n\nfunc ErrOrNil() error","url":"/docs/api/pkg-compiler-errlist.html#method-ErrorList-ErrOrNil","tab":"API Reference","category":"go method"},{"title":"ErrorList.Error","content":"func ErrorList) Error() string","url":"/docs/api/pkg-compiler-errlist.html#method-ErrorList-Error","tab":"API Reference","category":"go method"},{"title":"ErrorList.Trim","content":"Trim the error list if it has more than limit errors. If the list is trimmed,\nall extraneous errors are replaced with a single ErrTooManyErrors, making the\nreturned ErrorList length of limit+1.\n\nfunc Trim(limit int) ErrorList","url":"/docs/api/pkg-compiler-errlist.html#method-ErrorList-Trim","tab":"API Reference","category":"go method"},{"title":"compiler/filter","content":"github.com/gopherjs/gopherjs/compiler/filter","url":"/docs/api/pkg-compiler-filter.html","tab":"API Reference","category":"Pages"},{"title":"Functions","content":"compiler/filter - Functions","url":"/docs/api/pkg-compiler-filter.html#functions","tab":"API Reference","category":"Sections"},{"title":"Assign","content":"compiler/filter - Assign","url":"/docs/api/pkg-compiler-filter.html#func-Assign","tab":"API Reference","category":"Sections"},{"title":"IncDecStmt","content":"compiler/filter - IncDecStmt","url":"/docs/api/pkg-compiler-filter.html#func-IncDecStmt","tab":"API Reference","category":"Sections"},{"title":"func Assign(stmt ast.Stmt, info *types.Info, pkg *types.Package) ast.Stmt","content":"func Assign(stmt ast.Stmt, info *types.Info, pkg *types.Package) ast.Stmt","url":"/docs/api/pkg-compiler-filter.html#func-Assign","tab":"API Reference","category":"go function"},{"title":"func IncDecStmt(stmt ast.Stmt, info *types.Info) ast.Stmt","content":"func IncDecStmt(stmt ast.Stmt, info *types.Info) ast.Stmt","url":"/docs/api/pkg-compiler-filter.html#func-IncDecStmt","tab":"API Reference","category":"go function"},{"title":"compiler/gopherjspkg","content":"Package gopherjspkg provides core GopherJS packages via a virtual filesystem.","url":"/docs/api/pkg-compiler-gopherjspkg.html","tab":"API Reference","category":"Pages"},{"title":"Variables","content":"compiler/gopherjspkg - Variables","url":"/docs/api/pkg-compiler-gopherjspkg.html#variables","tab":"API Reference","category":"Sections"},{"title":"Functions","content":"compiler/gopherjspkg - Functions","url":"/docs/api/pkg-compiler-gopherjspkg.html#functions","tab":"API Reference","category":"Sections"},{"title":"RegisterFS","content":"compiler/gopherjspkg - RegisterFS","url":"/docs/api/pkg-compiler-gopherjspkg.html#func-RegisterFS","tab":"API Reference","category":"Sections"},{"title":"var FS","content":"FS is a virtual filesystem that contains core GopherJS packages.\n\nvar FS http.FileSystem","url":"/docs/api/pkg-compiler-gopherjspkg.html#var-FS","tab":"API Reference","category":"go variable"},{"title":"func RegisterFS(fs http.FileSystem)","content":"RegisterFS allows setting the embedded fs from another package.\n\nfunc RegisterFS(fs http.FileSystem)","url":"/docs/api/pkg-compiler-gopherjspkg.html#func-RegisterFS","tab":"API Reference","category":"go function"},{"title":"compiler/incjs","content":"github.com/gopherjs/gopherjs/compiler/incjs","url":"/docs/api/pkg-compiler-incjs.html","tab":"API Reference","category":"Pages"},{"title":"Constants","content":"compiler/incjs - Constants","url":"/docs/api/pkg-compiler-incjs.html#constants","tab":"API Reference","category":"Sections"},{"title":"Functions","content":"compiler/incjs - Functions","url":"/docs/api/pkg-compiler-incjs.html#functions","tab":"API Reference","category":"Sections"},{"title":"FromDir","content":"compiler/incjs - FromDir","url":"/docs/api/pkg-compiler-incjs.html#func-FromDir","tab":"API Reference","category":"Sections"},{"title":"FromFilename","content":"compiler/incjs - FromFilename","url":"/docs/api/pkg-compiler-incjs.html#func-FromFilename","tab":"API Reference","category":"Sections"},{"title":"Types","content":"compiler/incjs - Types","url":"/docs/api/pkg-compiler-incjs.html#types","tab":"API Reference","category":"Sections"},{"title":"File","content":"compiler/incjs - File","url":"/docs/api/pkg-compiler-incjs.html#type-File","tab":"API Reference","category":"Sections"},{"title":"const Ext","content":"Ext is the file extension for .inc.js files.\n\nconst Ext = \".inc.js\"","url":"/docs/api/pkg-compiler-incjs.html#const-Ext","tab":"API Reference","category":"go constant"},{"title":"func FromDir(bctx *build.Context, dir string) ([]File, error)","content":"FromDir finds and loads any *.inc.js packages in the build context\ndirectory.\n\nfunc FromDir(bctx *build.Context, dir string) ([]File, error)","url":"/docs/api/pkg-compiler-incjs.html#func-FromDir","tab":"API Reference","category":"go function"},{"title":"func FromFilename(filename string) (*File, error)","content":"func FromFilename(filename string) (*File, error)","url":"/docs/api/pkg-compiler-incjs.html#func-FromFilename","tab":"API Reference","category":"go function"},{"title":"type File","content":"File represents a *.inc.js file metadata and content.\n\ntype File struct {\n\tPath string // Full file path for the build context the file came from.\n\tModTime time.Time\n\tContent []byte\n}","url":"/docs/api/pkg-compiler-incjs.html#type-File","tab":"API Reference","category":"go type"},{"title":"compiler/linkname","content":"github.com/gopherjs/gopherjs/compiler/linkname","url":"/docs/api/pkg-compiler-linkname.html","tab":"API Reference","category":"Pages"},{"title":"Functions","content":"compiler/linkname - Functions","url":"/docs/api/pkg-compiler-linkname.html#functions","tab":"API Reference","category":"Sections"},{"title":"ParseGoLinknames","content":"compiler/linkname - ParseGoLinknames","url":"/docs/api/pkg-compiler-linkname.html#func-ParseGoLinknames","tab":"API Reference","category":"Sections"},{"title":"Types","content":"compiler/linkname - Types","url":"/docs/api/pkg-compiler-linkname.html#types","tab":"API Reference","category":"Sections"},{"title":"GoLinkname","content":"compiler/linkname - GoLinkname","url":"/docs/api/pkg-compiler-linkname.html#type-GoLinkname","tab":"API Reference","category":"Sections"},{"title":"GoLinknameSet","content":"compiler/linkname - GoLinknameSet","url":"/docs/api/pkg-compiler-linkname.html#type-GoLinknameSet","tab":"API Reference","category":"Sections"},{"title":"func ParseGoLinknames(fset *token.FileSet, pkgPath string, file *ast.File) ([]GoLinkname, error)","content":"parseGoLinknames processed comments in a source file and extracts //go:linkname\ncompiler directive from the comments.\n\nThe following directive format is supported:\n//go:linkname .\n//go:linkname ..\n//go:linkname .<(*type)>.\n\nGopherJS directive support has the following limitations:\n\n - External linkname must be specified.\n - The directive must be applied to a package-level function or method (variabl","url":"/docs/api/pkg-compiler-linkname.html#func-ParseGoLinknames","tab":"API Reference","category":"go function"},{"title":"type GoLinkname","content":"GoLinkname describes a go:linkname compiler directive found in the source code.\n\nGopherJS treats these directives in a way that resembles a symbolic link,\nwhere for a single given symbol implementation there may be zero or more\nsymbols referencing it. This is subtly different from the upstream Go\nimplementation, which simply overrides symbol name the linker will use.\n\ntype GoLinkname struct {\n\tImplementation symbol.Name\n\tReference symbol.Name\n}","url":"/docs/api/pkg-compiler-linkname.html#type-GoLinkname","tab":"API Reference","category":"go type"},{"title":"type GoLinknameSet","content":"GoLinknameSet is a utility that enables quick lookup of whether a decl is\naffected by any go:linkname directive in the program.\n\ntype GoLinknameSet struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-compiler-linkname.html#type-GoLinknameSet","tab":"API Reference","category":"go type"},{"title":"GoLinknameSet.Add","content":"Add more GoLinkname directives into the set.\n\nfunc Add(entries []GoLinkname) error","url":"/docs/api/pkg-compiler-linkname.html#method-GoLinknameSet-Add","tab":"API Reference","category":"go method"},{"title":"GoLinknameSet.FindImplementation","content":"FindImplementation returns a symbol name, which provides the implementation\nfor the given symbol. The second value indicates whether the implementation\nwas found.\n\nfunc FindImplementation(sym symbol.Name) (symbol.Name, bool)","url":"/docs/api/pkg-compiler-linkname.html#method-GoLinknameSet-FindImplementation","tab":"API Reference","category":"go method"},{"title":"GoLinknameSet.IsImplementation","content":"IsImplementation returns true if there is a directive referencing this symbol\nas an implementation.\n\nfunc IsImplementation(sym symbol.Name) bool","url":"/docs/api/pkg-compiler-linkname.html#method-GoLinknameSet-IsImplementation","tab":"API Reference","category":"go method"},{"title":"compiler/natives","content":"Package natives provides native packages via a virtual filesystem.","url":"/docs/api/pkg-compiler-natives.html","tab":"API Reference","category":"Pages"},{"title":"Variables","content":"compiler/natives - Variables","url":"/docs/api/pkg-compiler-natives.html#variables","tab":"API Reference","category":"Sections"},{"title":"var FS","content":"FS is a virtual filesystem that contains native packages.\n\nvar FS embed.FS","url":"/docs/api/pkg-compiler-natives.html#var-FS","tab":"API Reference","category":"go variable"},{"title":"compiler/prelude","content":"github.com/gopherjs/gopherjs/compiler/prelude","url":"/docs/api/pkg-compiler-prelude.html","tab":"API Reference","category":"Pages"},{"title":"Functions","content":"compiler/prelude - Functions","url":"/docs/api/pkg-compiler-prelude.html#functions","tab":"API Reference","category":"Sections"},{"title":"PreludeFiles","content":"compiler/prelude - PreludeFiles","url":"/docs/api/pkg-compiler-prelude.html#func-PreludeFiles","tab":"API Reference","category":"Sections"},{"title":"Types","content":"compiler/prelude - Types","url":"/docs/api/pkg-compiler-prelude.html#types","tab":"API Reference","category":"Sections"},{"title":"PreludeFile","content":"compiler/prelude - PreludeFile","url":"/docs/api/pkg-compiler-prelude.html#type-PreludeFile","tab":"API Reference","category":"Sections"},{"title":"func PreludeFiles() (files []PreludeFile)","content":"PreludeFiles gets the GopherJS JavaScript interop layers.\n\nfunc PreludeFiles() (files []PreludeFile)","url":"/docs/api/pkg-compiler-prelude.html#func-PreludeFiles","tab":"API Reference","category":"go function"},{"title":"type PreludeFile","content":"type PreludeFile struct {\n\tName string\n\tSource string\n}","url":"/docs/api/pkg-compiler-prelude.html#type-PreludeFile","tab":"API Reference","category":"go type"},{"title":"compiler/sources","content":"github.com/gopherjs/gopherjs/compiler/sources","url":"/docs/api/pkg-compiler-sources.html","tab":"API Reference","category":"Pages"},{"title":"Functions","content":"compiler/sources - Functions","url":"/docs/api/pkg-compiler-sources.html#functions","tab":"API Reference","category":"Sections"},{"title":"SortedSourcesSlice","content":"compiler/sources - SortedSourcesSlice","url":"/docs/api/pkg-compiler-sources.html#func-SortedSourcesSlice","tab":"API Reference","category":"Sections"},{"title":"Types","content":"compiler/sources - Types","url":"/docs/api/pkg-compiler-sources.html#types","tab":"API Reference","category":"Sections"},{"title":"Importer","content":"compiler/sources - Importer","url":"/docs/api/pkg-compiler-sources.html#type-Importer","tab":"API Reference","category":"Sections"},{"title":"Sources","content":"compiler/sources - Sources","url":"/docs/api/pkg-compiler-sources.html#type-Sources","tab":"API Reference","category":"Sections"},{"title":"func SortedSourcesSlice(sourcesSlice []*Sources)","content":"SortedSourcesSlice in place sorts the given slice of Sources by ImportPath.\nThis will not change the order of the files within any Sources.\n\nfunc SortedSourcesSlice(sourcesSlice []*Sources)","url":"/docs/api/pkg-compiler-sources.html#func-SortedSourcesSlice","tab":"API Reference","category":"go function"},{"title":"type Importer","content":"type Importer func(path, srcDir string) (*Sources, error)","url":"/docs/api/pkg-compiler-sources.html#type-Importer","tab":"API Reference","category":"go type"},{"title":"type Sources","content":"Sources is a slice of parsed Go sources and additional data for a package.\n\nNote that the sources would normally belong to a single logical Go package,\nbut they don't have to be a real Go package (i.e. found on the file system)\nor represent a complete package (i.e. it could be only a few source files\ncompiled by `gopherjs build foo.go bar.go`).\n\ntype Sources struct {\n\t// ImportPath representing the sources, if exists.\n\t//\n\t// May be empty for \"virtual\"\n\t// packages like testmain or playground-ge","url":"/docs/api/pkg-compiler-sources.html#type-Sources","tab":"API Reference","category":"go type"},{"title":"Sources.Analyze","content":"Analyze will determine the type parameters instances, blocking,\nand other type information for the package.\nThis will set the TypeInfo and Instances fields on the Sources.\n\nThis must be called after to simplify to ensure the pointers\nin the AST are still valid.\nThe instances must be collected prior to this call.\n\nNote that at the end of this call the analysis information\nhas NOT been propagated across packages yet.\n\nfunc Analyze(importer Importer, tContext *types.Context, instances *typeparams.","url":"/docs/api/pkg-compiler-sources.html#method-Sources-Analyze","tab":"API Reference","category":"go method"},{"title":"Sources.CollectInstances","content":"CollectInstances will determine the type parameters instances for the package.\n\nThis must be called before Analyze to have the type parameters instances\nneeded during analysis.\n\nNote that once all the sources are collected, the collector needs to be\nfinished to ensure all the instances are collected.\n\nfunc CollectInstances(tc *typeparams.Collector)","url":"/docs/api/pkg-compiler-sources.html#method-Sources-CollectInstances","tab":"API Reference","category":"go method"},{"title":"Sources.ParseGoLinknames","content":"ParseGoLinknames extracts all //go:linkname compiler directive from the sources.\n\nThis will set the GoLinknames field on the Sources.\n\nfunc ParseGoLinknames() error","url":"/docs/api/pkg-compiler-sources.html#method-Sources-ParseGoLinknames","tab":"API Reference","category":"go method"},{"title":"Sources.Read","content":"Read will call decode multiple times to read the various fields\nof the sources.\nThe order of the calls must match the order of the calls in encodeSources.\n\nThe given srcModTime is used to determine if the serialized sources are\nout-of-date. If they are then this returns a nil sources and nil error,\nand the build time that was read.\n\nfunc Read(decode func(any) error) error","url":"/docs/api/pkg-compiler-sources.html#method-Sources-Read","tab":"API Reference","category":"go method"},{"title":"Sources.Simplify","content":"Simplify processed each Files entry with astrewrite.Simplify.\n\nNote this function mutates the original Files slice.\nThis must be called after TypeCheck and before analyze since\nthis will change the pointers in the AST. For example, the pointers\nto function literals will change, making it impossible to find them\nin the type information, if analyze is called first.\n\nfunc Simplify()","url":"/docs/api/pkg-compiler-sources.html#method-Sources-Simplify","tab":"API Reference","category":"go method"},{"title":"Sources.Sort","content":"Sort sorts the Go files slice by the original source name to ensure consistent order\nof processing. This is required for reproducible JavaScript output.\n\nNote this function mutates the original Files slice.\n\nfunc Sort()","url":"/docs/api/pkg-compiler-sources.html#method-Sources-Sort","tab":"API Reference","category":"go method"},{"title":"Sources.TypeCheck","content":"TypeCheck the sources. Returns information about declared package types and\ntype information for the supplied AST.\nThis will set the Package field on the Sources.\n\nIf the Package field is not nil, e.g. this function has already been run,\nthis will be a no-op.\n\nThis must be called prior to simplify to get the types.Info used by simplify.\n\nfunc TypeCheck(importer Importer, sizes types.Sizes, tContext *types.Context) error","url":"/docs/api/pkg-compiler-sources.html#method-Sources-TypeCheck","tab":"API Reference","category":"go method"},{"title":"Sources.UnresolvedImports","content":"UnresolvedImports calculates the import paths of the package's dependencies\nbased on all the imports in the augmented Go AST files.\n\nThis is used to determine the unresolved imports that weren't in the\nPackageData.Imports slice since they were added during augmentation or\nduring template generation.\n\nThe given skip paths (typically those imports from PackageData.Imports)\nwill not be returned in the results.\nThis will not return any `*_test` packages in the results.\n\nfunc UnresolvedImports(skip ","url":"/docs/api/pkg-compiler-sources.html#method-Sources-UnresolvedImports","tab":"API Reference","category":"go method"},{"title":"Sources.Write","content":"Write will call encode multiple times to write the various fields\nof the sources. This is designed to be used with a gob.Encoder.\n\nThe order of the calls must match the order of the calls in Read.\n\ns.TypeInfo, s.baseInfo, s.Package, and s.GoLinknames are intentionally\nomitted from encoding since they must be constructed in the context of the\nfull program to be able to handle generics and cross-package references.\n\nfunc Write(encode func(any) error) error","url":"/docs/api/pkg-compiler-sources.html#method-Sources-Write","tab":"API Reference","category":"go method"},{"title":"compiler/typesutil","content":"github.com/gopherjs/gopherjs/compiler/typesutil","url":"/docs/api/pkg-compiler-typesutil.html","tab":"API Reference","category":"Pages"},{"title":"Functions","content":"compiler/typesutil - Functions","url":"/docs/api/pkg-compiler-typesutil.html#functions","tab":"API Reference","category":"Sections"},{"title":"IsJsObject","content":"compiler/typesutil - IsJsObject","url":"/docs/api/pkg-compiler-typesutil.html#func-IsJsObject","tab":"API Reference","category":"Sections"},{"title":"IsJsPackage","content":"compiler/typesutil - IsJsPackage","url":"/docs/api/pkg-compiler-typesutil.html#func-IsJsPackage","tab":"API Reference","category":"Sections"},{"title":"IsMethod","content":"compiler/typesutil - IsMethod","url":"/docs/api/pkg-compiler-typesutil.html#func-IsMethod","tab":"API Reference","category":"Sections"},{"title":"NewSelection","content":"compiler/typesutil - NewSelection","url":"/docs/api/pkg-compiler-typesutil.html#func-NewSelection","tab":"API Reference","category":"Sections"},{"title":"OffsetOf","content":"compiler/typesutil - OffsetOf","url":"/docs/api/pkg-compiler-typesutil.html#func-OffsetOf","tab":"API Reference","category":"Sections"},{"title":"RecvAsFirstArg","content":"compiler/typesutil - RecvAsFirstArg","url":"/docs/api/pkg-compiler-typesutil.html#func-RecvAsFirstArg","tab":"API Reference","category":"Sections"},{"title":"RecvType","content":"compiler/typesutil - RecvType","url":"/docs/api/pkg-compiler-typesutil.html#func-RecvType","tab":"API Reference","category":"Sections"},{"title":"Types","content":"compiler/typesutil - Types","url":"/docs/api/pkg-compiler-typesutil.html#types","tab":"API Reference","category":"Sections"},{"title":"Map","content":"compiler/typesutil - Map","url":"/docs/api/pkg-compiler-typesutil.html#type-Map","tab":"API Reference","category":"Sections"},{"title":"Selection","content":"compiler/typesutil - Selection","url":"/docs/api/pkg-compiler-typesutil.html#type-Selection","tab":"API Reference","category":"Sections"},{"title":"Signature","content":"compiler/typesutil - Signature","url":"/docs/api/pkg-compiler-typesutil.html#type-Signature","tab":"API Reference","category":"Sections"},{"title":"TypeList","content":"compiler/typesutil - TypeList","url":"/docs/api/pkg-compiler-typesutil.html#type-TypeList","tab":"API Reference","category":"Sections"},{"title":"TypeNames","content":"compiler/typesutil - TypeNames","url":"/docs/api/pkg-compiler-typesutil.html#type-TypeNames","tab":"API Reference","category":"Sections"},{"title":"func IsJsObject(t types.Type) bool","content":"func IsJsObject(t types.Type) bool","url":"/docs/api/pkg-compiler-typesutil.html#func-IsJsObject","tab":"API Reference","category":"go function"},{"title":"func IsJsPackage(pkg *types.Package) bool","content":"func IsJsPackage(pkg *types.Package) bool","url":"/docs/api/pkg-compiler-typesutil.html#func-IsJsPackage","tab":"API Reference","category":"go function"},{"title":"func IsMethod(o types.Object) bool","content":"IsMethod returns true if the passed object is a method.\n\nfunc IsMethod(o types.Object) bool","url":"/docs/api/pkg-compiler-typesutil.html#func-IsMethod","tab":"API Reference","category":"go function"},{"title":"func NewSelection(kind types.SelectionKind, recv types.Type, index []int, obj types.Object, typ types.Type) Selection","content":"NewSelection creates a new selection.\n\nfunc NewSelection(kind types.SelectionKind, recv types.Type, index []int, obj types.Object, typ types.Type) Selection","url":"/docs/api/pkg-compiler-typesutil.html#func-NewSelection","tab":"API Reference","category":"go function"},{"title":"func OffsetOf(sizes types.Sizes, sel Selection) int64","content":"OffsetOf returns byte offset of a struct field specified by the provided\nselection.\n\nAdapted from go/types.Config.offsetof().\n\nfunc OffsetOf(sizes types.Sizes, sel Selection) int64","url":"/docs/api/pkg-compiler-typesutil.html#func-OffsetOf","tab":"API Reference","category":"go function"},{"title":"func RecvAsFirstArg(sig *types.Signature) *types.Signature","content":"RecvAsFirstArg takes a method signature and returns a function\nsignature with receiver as the first parameter.\n\nfunc RecvAsFirstArg(sig *types.Signature) *types.Signature","url":"/docs/api/pkg-compiler-typesutil.html#func-RecvAsFirstArg","tab":"API Reference","category":"go function"},{"title":"func RecvType(sig *types.Signature) *types.Named","content":"RecvType returns a named type of a method receiver, or nil if it's not a method.\n\nFor methods on a pointer receiver, the underlying named type is returned.\n\nfunc RecvType(sig *types.Signature) *types.Named","url":"/docs/api/pkg-compiler-typesutil.html#func-RecvType","tab":"API Reference","category":"go function"},{"title":"type Map","content":"Map is a type-safe wrapper around golang.org/x/tools/go/types/typeutil.Map.\n\ntype Map[Val any] struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-compiler-typesutil.html#type-Map","tab":"API Reference","category":"go type"},{"title":"Map.At","content":"func At(key types.Type) Val","url":"/docs/api/pkg-compiler-typesutil.html#method-Map-At","tab":"API Reference","category":"go method"},{"title":"Map.Delete","content":"func Delete(key types.Type) bool","url":"/docs/api/pkg-compiler-typesutil.html#method-Map-Delete","tab":"API Reference","category":"go method"},{"title":"Map.Len","content":"func Len() int","url":"/docs/api/pkg-compiler-typesutil.html#method-Map-Len","tab":"API Reference","category":"go method"},{"title":"Map.Set","content":"func Set(key types.Type, value Val) (prev Val)","url":"/docs/api/pkg-compiler-typesutil.html#method-Map-Set","tab":"API Reference","category":"go method"},{"title":"Map.String","content":"func String() string","url":"/docs/api/pkg-compiler-typesutil.html#method-Map-String","tab":"API Reference","category":"go method"},{"title":"type Selection","content":"Selection is a common interface for go/types.Selection and our custom-constructed\nmethod and field selections.\n\ntype Selection interface {\n\tKind() types.SelectionKind\n\tRecv() types.Type\n\tIndex() []int\n\tObj() types.Object\n\tType() types.Type\n}","url":"/docs/api/pkg-compiler-typesutil.html#type-Selection","tab":"API Reference","category":"go type"},{"title":"type Signature","content":"Signature is a helper that provides convenient access to function\nsignature type information.\n\ntype Signature struct {\n\tSig *types.Signature\n}","url":"/docs/api/pkg-compiler-typesutil.html#type-Signature","tab":"API Reference","category":"go type"},{"title":"Signature.HasNamedResults","content":"HasNamedResults returns true if the function signature returns something and\nreturned results are names (e.g. `func () (val int, err error)`).\n\nfunc HasNamedResults() bool","url":"/docs/api/pkg-compiler-typesutil.html#method-Signature-HasNamedResults","tab":"API Reference","category":"go method"},{"title":"Signature.HasResults","content":"HasResults returns true if the function signature returns something.\n\nfunc HasResults() bool","url":"/docs/api/pkg-compiler-typesutil.html#method-Signature-HasResults","tab":"API Reference","category":"go method"},{"title":"Signature.Param","content":"Param returns the expected argument type for the i'th argument position.\n\nThis function is able to return correct expected types for variadic calls\nboth when ellipsis syntax (e.g. myFunc(requiredArg, optionalArgSlice...))\nis used and when optional args are passed individually.\n\nThe returned types may differ from the actual argument expression types if\nthere is an implicit type conversion involved (e.g. passing a struct into a\nfunction that expects an interface).\n\nfunc Param(i int, ellipsis bool","url":"/docs/api/pkg-compiler-typesutil.html#method-Signature-Param","tab":"API Reference","category":"go method"},{"title":"Signature.RequiredParams","content":"RequiredParams returns the number of required parameters in the function signature.\n\nfunc RequiredParams() int","url":"/docs/api/pkg-compiler-typesutil.html#method-Signature-RequiredParams","tab":"API Reference","category":"go method"},{"title":"Signature.VariadicType","content":"VariadicType returns the slice-type corresponding to the signature's variadic\nparameter, or nil of the signature is not variadic. With the exception of\nthe special-case `append([]byte{}, \"string\"...)`, the returned type is\n`*types.Slice` and `.Elem()` method can be used to get the type of individual\narguments.\n\nfunc VariadicType() types.Type","url":"/docs/api/pkg-compiler-typesutil.html#method-Signature-VariadicType","tab":"API Reference","category":"go method"},{"title":"type TypeList","content":"TypeList an ordered list of types.\n\ntype TypeList []types.Type","url":"/docs/api/pkg-compiler-typesutil.html#type-TypeList","tab":"API Reference","category":"go type"},{"title":"TypeList.Equal","content":"Equal returns true if both lists of type arguments are identical.\n\nfunc Equal(other TypeList) bool","url":"/docs/api/pkg-compiler-typesutil.html#method-TypeList-Equal","tab":"API Reference","category":"go method"},{"title":"TypeList.String","content":"func String() string","url":"/docs/api/pkg-compiler-typesutil.html#method-TypeList-String","tab":"API Reference","category":"go method"},{"title":"type TypeNames","content":"TypeNames implements an ordered set of *types.TypeName pointers.\n\nThe set is ordered to ensure deterministic behavior across compiler runs.\n\ntype TypeNames struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-compiler-typesutil.html#type-TypeNames","tab":"API Reference","category":"go type"},{"title":"TypeNames.Add","content":"Add a type name to the set. If the type name has been previously added,\nthis operation is a no-op. Two type names are considered equal iff they have\nthe same memory address.\n\nfunc Add(name *types.TypeName)","url":"/docs/api/pkg-compiler-typesutil.html#method-TypeNames-Add","tab":"API Reference","category":"go method"},{"title":"TypeNames.Slice","content":"Slice returns set elements in the order they were first added to the set.\n\nfunc Slice() []*types.TypeName","url":"/docs/api/pkg-compiler-typesutil.html#method-TypeNames-Slice","tab":"API Reference","category":"go method"},{"title":"js","content":"Package js provides functions for interacting with native JavaScript APIs.","url":"/docs/api/pkg-js.html","tab":"API Reference","category":"Pages"},{"title":"Variables","content":"js - Variables","url":"/docs/api/pkg-js.html#variables","tab":"API Reference","category":"Sections"},{"title":"Functions","content":"js - Functions","url":"/docs/api/pkg-js.html#functions","tab":"API Reference","category":"Sections"},{"title":"Debugger","content":"js - Debugger","url":"/docs/api/pkg-js.html#func-Debugger","tab":"API Reference","category":"Sections"},{"title":"InternalObject","content":"js - InternalObject","url":"/docs/api/pkg-js.html#func-InternalObject","tab":"API Reference","category":"Sections"},{"title":"Keys","content":"js - Keys","url":"/docs/api/pkg-js.html#func-Keys","tab":"API Reference","category":"Sections"},{"title":"MakeFullWrapper","content":"js - MakeFullWrapper","url":"/docs/api/pkg-js.html#func-MakeFullWrapper","tab":"API Reference","category":"Sections"},{"title":"MakeFunc","content":"js - MakeFunc","url":"/docs/api/pkg-js.html#func-MakeFunc","tab":"API Reference","category":"Sections"},{"title":"MakeUint64","content":"js - MakeUint64","url":"/docs/api/pkg-js.html#func-MakeUint64","tab":"API Reference","category":"Sections"},{"title":"MakeWrapper","content":"js - MakeWrapper","url":"/docs/api/pkg-js.html#func-MakeWrapper","tab":"API Reference","category":"Sections"},{"title":"NewArrayBuffer","content":"js - NewArrayBuffer","url":"/docs/api/pkg-js.html#func-NewArrayBuffer","tab":"API Reference","category":"Sections"},{"title":"Uint64High","content":"js - Uint64High","url":"/docs/api/pkg-js.html#func-Uint64High","tab":"API Reference","category":"Sections"},{"title":"Uint64Low","content":"js - Uint64Low","url":"/docs/api/pkg-js.html#func-Uint64Low","tab":"API Reference","category":"Sections"},{"title":"Types","content":"js - Types","url":"/docs/api/pkg-js.html#types","tab":"API Reference","category":"Sections"},{"title":"Error","content":"js - Error","url":"/docs/api/pkg-js.html#type-Error","tab":"API Reference","category":"Sections"},{"title":"M","content":"js - M","url":"/docs/api/pkg-js.html#type-M","tab":"API Reference","category":"Sections"},{"title":"Object","content":"js - Object","url":"/docs/api/pkg-js.html#type-Object","tab":"API Reference","category":"Sections"},{"title":"S","content":"js - S","url":"/docs/api/pkg-js.html#type-S","tab":"API Reference","category":"Sections"},{"title":"var Global","content":"Global gives JavaScript's global object (\"window\" for browsers and \"GLOBAL\" for Node.js).\n\nvar Global *Object","url":"/docs/api/pkg-js.html#var-Global","tab":"API Reference","category":"go variable"},{"title":"var Module","content":"Module gives the value of the \"module\" variable set by Node.js. Hint: Set a\nmodule export with 'js.Module.Get(\"exports\").Set(\"exportName\", ...)'.\n\nNote that js.Module is only defined in runtimes which support CommonJS\nmodules (https://nodejs.org/api/modules.html). NodeJS supports it natively,\nbut in browsers it can only be used if GopherJS output is passed through a\nbundler which implements CommonJS (for example, webpack or esbuild).\n\nvar Module *Object","url":"/docs/api/pkg-js.html#var-Module","tab":"API Reference","category":"go variable"},{"title":"var Undefined","content":"Undefined gives the JavaScript value \"undefined\".\n\nvar Undefined *Object","url":"/docs/api/pkg-js.html#var-Undefined","tab":"API Reference","category":"go variable"},{"title":"func Debugger()","content":"Debugger gets compiled to JavaScript's \"debugger;\" statement.\n\nfunc Debugger()","url":"/docs/api/pkg-js.html#func-Debugger","tab":"API Reference","category":"go function"},{"title":"func InternalObject(i any) *Object","content":"InternalObject returns the internal JavaScript object that represents i. Not intended for public use.\n\nfunc InternalObject(i any) *Object","url":"/docs/api/pkg-js.html#func-InternalObject","tab":"API Reference","category":"go function"},{"title":"func Keys(o *Object) []string","content":"Keys returns the keys of the given JavaScript object.\n\nfunc Keys(o *Object) []string","url":"/docs/api/pkg-js.html#func-Keys","tab":"API Reference","category":"go function"},{"title":"func MakeFullWrapper(i any) *Object","content":"MakeFullWrapper creates a JavaScript object which has wrappers for the exported\nmethods of i, and, where i is a (pointer to a) struct value, wrapped getters\nand setters\n(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)\nfor the non-embedded exported fields of i. Values accessed via these methods\nand getters are themselves wrapped when accessed, but an important point to\nnote is that a new wrapped value is created on each access.\n\nfunc MakeFul","url":"/docs/api/pkg-js.html#func-MakeFullWrapper","tab":"API Reference","category":"go function"},{"title":"func MakeFunc(fn func(this *Object, arguments []*Object) any) *Object","content":"MakeFunc wraps a function and gives access to the values of JavaScript's \"this\" and \"arguments\" keywords.\n\nfunc MakeFunc(fn func(this *Object, arguments []*Object) any) *Object","url":"/docs/api/pkg-js.html#func-MakeFunc","tab":"API Reference","category":"go function"},{"title":"func MakeUint64(hi, lo float64) uint64","content":"MakeUint64 will take the high and low parts to construct a uint64 number.\nSince JS doesn't have a 64-bit integer we store it as a high and low 32-bit integers.\n\nfunc MakeUint64(hi, lo float64) uint64","url":"/docs/api/pkg-js.html#func-MakeUint64","tab":"API Reference","category":"go function"},{"title":"func MakeWrapper(i any) *Object","content":"MakeWrapper creates a JavaScript object which has wrappers for the exported methods of i. Use explicit getter and setter methods to expose struct fields to JavaScript.\n\nfunc MakeWrapper(i any) *Object","url":"/docs/api/pkg-js.html#func-MakeWrapper","tab":"API Reference","category":"go function"},{"title":"func NewArrayBuffer(b []byte) *Object","content":"NewArrayBuffer creates a JavaScript ArrayBuffer from a byte slice.\n\nfunc NewArrayBuffer(b []byte) *Object","url":"/docs/api/pkg-js.html#func-NewArrayBuffer","tab":"API Reference","category":"go function"},{"title":"func Uint64High(x uint64) uint32","content":"Uint64High will get the high 32-bit integer used when storing uint64.\n\nfunc Uint64High(x uint64) uint32","url":"/docs/api/pkg-js.html#func-Uint64High","tab":"API Reference","category":"go function"},{"title":"func Uint64Low(x uint64) uint32","content":"Uint64Low will get the low 32-bit integer used when storing uint64.\n\nfunc Uint64Low(x uint64) uint32","url":"/docs/api/pkg-js.html#func-Uint64Low","tab":"API Reference","category":"go function"},{"title":"type Error","content":"Error encapsulates JavaScript errors. Those are turned into a Go panic and may be recovered, giving an *Error that holds the JavaScript error object.\n\ntype Error struct {\n\t*Object\n}","url":"/docs/api/pkg-js.html#type-Error","tab":"API Reference","category":"go type"},{"title":"Error.Error","content":"Error returns the message of the encapsulated JavaScript error object.\n\nfunc Error) Error() string","url":"/docs/api/pkg-js.html#method-Error-Error","tab":"API Reference","category":"go method"},{"title":"Error.Stack","content":"Stack returns the stack property of the encapsulated JavaScript error object.\n\nfunc Stack() string","url":"/docs/api/pkg-js.html#method-Error-Stack","tab":"API Reference","category":"go method"},{"title":"type M","content":"M is a simple map type. It is intended as a shorthand for JavaScript objects (before conversion).\n\ntype M map[string]any","url":"/docs/api/pkg-js.html#type-M","tab":"API Reference","category":"go type"},{"title":"type Object","content":"Object is a container for a native JavaScript object. Calls to its methods are treated specially by GopherJS and translated directly to their JavaScript syntax. A nil pointer to Object is equal to JavaScript's \"null\". Object can not be used as a map key.\n\ntype Object struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-js.html#type-Object","tab":"API Reference","category":"go type"},{"title":"Object.Bool","content":"Bool returns the object converted to bool according to JavaScript type conversions.\n\nfunc Bool() bool","url":"/docs/api/pkg-js.html#method-Object-Bool","tab":"API Reference","category":"go method"},{"title":"Object.Call","content":"Call calls the object's method with the given name.\n\nfunc Call(name string, args ...any) *Object","url":"/docs/api/pkg-js.html#method-Object-Call","tab":"API Reference","category":"go method"},{"title":"Object.Delete","content":"Delete removes the object's property with the given key.\n\nfunc Delete(key string)","url":"/docs/api/pkg-js.html#method-Object-Delete","tab":"API Reference","category":"go method"},{"title":"Object.Float","content":"Float returns the object converted to float64 according to JavaScript type conversions (parseFloat).\n\nfunc Float() float64","url":"/docs/api/pkg-js.html#method-Object-Float","tab":"API Reference","category":"go method"},{"title":"Object.Get","content":"Get returns the object's property with the given key.\n\nfunc Get(key string) *Object","url":"/docs/api/pkg-js.html#method-Object-Get","tab":"API Reference","category":"go method"},{"title":"Object.Index","content":"Index returns the i'th element of an array.\n\nfunc Index(i int) *Object","url":"/docs/api/pkg-js.html#method-Object-Index","tab":"API Reference","category":"go method"},{"title":"Object.Int","content":"Int returns the object converted to int according to JavaScript type conversions (parseInt).\n\nfunc Int() int","url":"/docs/api/pkg-js.html#method-Object-Int","tab":"API Reference","category":"go method"},{"title":"Object.Int64","content":"Int64 returns the object converted to int64 according to JavaScript type conversions (parseInt).\n\nfunc Int64() int64","url":"/docs/api/pkg-js.html#method-Object-Int64","tab":"API Reference","category":"go method"},{"title":"Object.Interface","content":"Interface returns the object converted to any. See table in package comment for details.\n\nfunc Interface() any","url":"/docs/api/pkg-js.html#method-Object-Interface","tab":"API Reference","category":"go method"},{"title":"Object.Invoke","content":"Invoke calls the object itself. This will fail if it is not a function.\n\nfunc Invoke(args ...any) *Object","url":"/docs/api/pkg-js.html#method-Object-Invoke","tab":"API Reference","category":"go method"},{"title":"Object.Length","content":"Length returns the object's \"length\" property, converted to int.\n\nfunc Length() int","url":"/docs/api/pkg-js.html#method-Object-Length","tab":"API Reference","category":"go method"},{"title":"Object.New","content":"New creates a new instance of this type object. This will fail if it not a function (constructor).\n\nfunc New(args ...any) *Object","url":"/docs/api/pkg-js.html#method-Object-New","tab":"API Reference","category":"go method"},{"title":"Object.Set","content":"Set assigns the value to the object's property with the given key.\n\nfunc Set(key string, value any)","url":"/docs/api/pkg-js.html#method-Object-Set","tab":"API Reference","category":"go method"},{"title":"Object.SetIndex","content":"SetIndex sets the i'th element of an array.\n\nfunc SetIndex(i int, value any)","url":"/docs/api/pkg-js.html#method-Object-SetIndex","tab":"API Reference","category":"go method"},{"title":"Object.String","content":"String returns the object converted to string according to JavaScript type conversions.\n\nfunc String() string","url":"/docs/api/pkg-js.html#method-Object-String","tab":"API Reference","category":"go method"},{"title":"Object.Uint64","content":"Uint64 returns the object converted to uint64 according to JavaScript type conversions (parseInt).\n\nfunc Uint64() uint64","url":"/docs/api/pkg-js.html#method-Object-Uint64","tab":"API Reference","category":"go method"},{"title":"Object.Unsafe","content":"Unsafe returns the object as an uintptr, which can be converted via unsafe.Pointer. Not intended for public use.\n\nfunc Unsafe() uintptr","url":"/docs/api/pkg-js.html#method-Object-Unsafe","tab":"API Reference","category":"go method"},{"title":"type S","content":"S is a simple slice type. It is intended as a shorthand for JavaScript arrays (before conversion).\n\ntype S []any","url":"/docs/api/pkg-js.html#type-S","tab":"API Reference","category":"go type"},{"title":"nosync","content":"github.com/gopherjs/gopherjs/nosync","url":"/docs/api/pkg-nosync.html","tab":"API Reference","category":"Pages"},{"title":"Types","content":"nosync - Types","url":"/docs/api/pkg-nosync.html#types","tab":"API Reference","category":"Sections"},{"title":"Map","content":"nosync - Map","url":"/docs/api/pkg-nosync.html#type-Map","tab":"API Reference","category":"Sections"},{"title":"Mutex","content":"nosync - Mutex","url":"/docs/api/pkg-nosync.html#type-Mutex","tab":"API Reference","category":"Sections"},{"title":"Once","content":"nosync - Once","url":"/docs/api/pkg-nosync.html#type-Once","tab":"API Reference","category":"Sections"},{"title":"Pool","content":"nosync - Pool","url":"/docs/api/pkg-nosync.html#type-Pool","tab":"API Reference","category":"Sections"},{"title":"RWMutex","content":"nosync - RWMutex","url":"/docs/api/pkg-nosync.html#type-RWMutex","tab":"API Reference","category":"Sections"},{"title":"WaitGroup","content":"nosync - WaitGroup","url":"/docs/api/pkg-nosync.html#type-WaitGroup","tab":"API Reference","category":"Sections"},{"title":"type Map","content":"Map is a concurrent map with amortized-constant-time loads, stores, and deletes.\nIt is safe for multiple goroutines to call a Map's methods concurrently.\n\nThe zero Map is valid and empty.\n\nA Map must not be copied after first use.\n\ntype Map struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-nosync.html#type-Map","tab":"API Reference","category":"go type"},{"title":"Map.Delete","content":"Delete deletes the value for a key.\n\nfunc Delete(key any)","url":"/docs/api/pkg-nosync.html#method-Map-Delete","tab":"API Reference","category":"go method"},{"title":"Map.Load","content":"Load returns the value stored in the map for a key, or nil if no\nvalue is present.\nThe ok result indicates whether value was found in the map.\n\nfunc Load(key any) (value any, ok bool)","url":"/docs/api/pkg-nosync.html#method-Map-Load","tab":"API Reference","category":"go method"},{"title":"Map.LoadOrStore","content":"LoadOrStore returns the existing value for the key if present.\nOtherwise, it stores and returns the given value.\nThe loaded result is true if the value was loaded, false if stored.\n\nfunc LoadOrStore(key, value any) (actual any, loaded bool)","url":"/docs/api/pkg-nosync.html#method-Map-LoadOrStore","tab":"API Reference","category":"go method"},{"title":"Map.Range","content":"Range calls f sequentially for each key and value present in the map.\nIf f returns false, range stops the iteration.\n\nRange does not necessarily correspond to any consistent snapshot of the Map's\ncontents: no key will be visited more than once, but if the value for any key\nis stored or deleted concurrently, Range may reflect any mapping for that key\nfrom any point during the Range call.\n\nRange may be O(N) with the number of elements in the map even if f returns\nfalse after a constant number of c","url":"/docs/api/pkg-nosync.html#method-Map-Range","tab":"API Reference","category":"go method"},{"title":"Map.Store","content":"Store sets the value for a key.\n\nfunc Store(key, value any)","url":"/docs/api/pkg-nosync.html#method-Map-Store","tab":"API Reference","category":"go method"},{"title":"type Mutex","content":"Mutex is a dummy which is non-blocking.\n\ntype Mutex struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-nosync.html#type-Mutex","tab":"API Reference","category":"go type"},{"title":"Mutex.Lock","content":"Lock locks m. It is a run-time error if m is already locked.\n\nfunc Lock()","url":"/docs/api/pkg-nosync.html#method-Mutex-Lock","tab":"API Reference","category":"go method"},{"title":"Mutex.Unlock","content":"Unlock unlocks m. It is a run-time error if m is not locked.\n\nfunc Unlock()","url":"/docs/api/pkg-nosync.html#method-Mutex-Unlock","tab":"API Reference","category":"go method"},{"title":"type Once","content":"Once is an object that will perform exactly one action.\n\ntype Once struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-nosync.html#type-Once","tab":"API Reference","category":"go type"},{"title":"Once.Do","content":"Do calls the function f if and only if Do is being called for the\nfirst time for this instance of Once. In other words, given\n\n\tvar once Once\n\nif once.Do(f) is called multiple times, only the first call will invoke f,\neven if f has a different value in each invocation. A new instance of\nOnce is required for each function to execute.\n\nDo is intended for initialization that must be run exactly once. Since f\nis niladic, it may be necessary to use a function literal to capture the\narguments to a f","url":"/docs/api/pkg-nosync.html#method-Once-Do","tab":"API Reference","category":"go method"},{"title":"type Pool","content":"A Pool is a set of temporary objects that may be individually saved and\nretrieved.\n\nAny item stored in the Pool may be removed automatically at any time without\nnotification. If the Pool holds the only reference when this happens, the\nitem might be deallocated.\n\nA Pool is safe for use by multiple goroutines simultaneously.\n\nPool's purpose is to cache allocated but unused items for later reuse,\nrelieving pressure on the garbage collector. That is, it makes it easy to\nbuild efficient, thread-safe ","url":"/docs/api/pkg-nosync.html#type-Pool","tab":"API Reference","category":"go type"},{"title":"Pool.Get","content":"Get selects an arbitrary item from the Pool, removes it from the\nPool, and returns it to the caller.\nGet may choose to ignore the pool and treat it as empty.\nCallers should not assume any relation between values passed to Put and\nthe values returned by Get.\n\nIf Get would otherwise return nil and p.New is non-nil, Get returns\nthe result of calling p.New.\n\nfunc Get() any","url":"/docs/api/pkg-nosync.html#method-Pool-Get","tab":"API Reference","category":"go method"},{"title":"Pool.Put","content":"Put adds x to the pool.\n\nfunc Put(x any)","url":"/docs/api/pkg-nosync.html#method-Pool-Put","tab":"API Reference","category":"go method"},{"title":"type RWMutex","content":"RWMutex is a dummy which is non-blocking.\n\ntype RWMutex struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-nosync.html#type-RWMutex","tab":"API Reference","category":"go type"},{"title":"RWMutex.Lock","content":"Lock locks m for writing. It is a run-time error if rw is already locked for reading or writing.\n\nfunc Lock()","url":"/docs/api/pkg-nosync.html#method-RWMutex-Lock","tab":"API Reference","category":"go method"},{"title":"RWMutex.RLock","content":"RLock locks m for reading. It is a run-time error if rw is already locked for reading or writing.\n\nfunc RLock()","url":"/docs/api/pkg-nosync.html#method-RWMutex-RLock","tab":"API Reference","category":"go method"},{"title":"RWMutex.RUnlock","content":"RUnlock undoes a single RLock call; it does not affect other simultaneous readers. It is a run-time error if rw is not locked for reading.\n\nfunc RUnlock()","url":"/docs/api/pkg-nosync.html#method-RWMutex-RUnlock","tab":"API Reference","category":"go method"},{"title":"RWMutex.Unlock","content":"Unlock unlocks rw for writing. It is a run-time error if rw is not locked for writing.\n\nfunc Unlock()","url":"/docs/api/pkg-nosync.html#method-RWMutex-Unlock","tab":"API Reference","category":"go method"},{"title":"type WaitGroup","content":"WaitGroup is a dummy which is non-blocking.\n\ntype WaitGroup struct {\n\t// contains filtered or unexported fields\n}","url":"/docs/api/pkg-nosync.html#type-WaitGroup","tab":"API Reference","category":"go type"},{"title":"WaitGroup.Add","content":"Add adds delta, which may be negative, to the WaitGroup If the counter goes negative, Add panics.\n\nfunc Add(delta int)","url":"/docs/api/pkg-nosync.html#method-WaitGroup-Add","tab":"API Reference","category":"go method"},{"title":"WaitGroup.Done","content":"Done decrements the WaitGroup counter.\n\nfunc Done()","url":"/docs/api/pkg-nosync.html#method-WaitGroup-Done","tab":"API Reference","category":"go method"},{"title":"WaitGroup.Wait","content":"Wait panics if the WaitGroup counter is not zero.\n\nfunc WaitGroup) Wait()","url":"/docs/api/pkg-nosync.html#method-WaitGroup-Wait","tab":"API Reference","category":"go method"},{"title":"API Reference","content":"github.com/gopherjs/gopherjs","url":"/docs/api.html","tab":"API Reference","category":"Pages"}] \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 00000000..1e3b1553 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,23 @@ + + + + https://gopherjs.github.io/docs/introduction.html + https://gopherjs.github.io/docs/api/package-root.html + https://gopherjs.github.io/docs/api/pkg-build.html + https://gopherjs.github.io/docs/api/pkg-build-cache.html + https://gopherjs.github.io/docs/api/pkg-build-versionhack.html + https://gopherjs.github.io/docs/api/pkg-compiler.html + https://gopherjs.github.io/docs/api/pkg-compiler-astutil.html + https://gopherjs.github.io/docs/api/pkg-compiler-errlist.html + https://gopherjs.github.io/docs/api/pkg-compiler-filter.html + https://gopherjs.github.io/docs/api/pkg-compiler-gopherjspkg.html + https://gopherjs.github.io/docs/api/pkg-compiler-incjs.html + https://gopherjs.github.io/docs/api/pkg-compiler-linkname.html + https://gopherjs.github.io/docs/api/pkg-compiler-natives.html + https://gopherjs.github.io/docs/api/pkg-compiler-prelude.html + https://gopherjs.github.io/docs/api/pkg-compiler-sources.html + https://gopherjs.github.io/docs/api/pkg-compiler-typesutil.html + https://gopherjs.github.io/docs/api/pkg-js.html + https://gopherjs.github.io/docs/api/pkg-nosync.html + https://gopherjs.github.io/docs/api.html + \ No newline at end of file diff --git a/docs/sourcey.css b/docs/sourcey.css new file mode 100644 index 00000000..c194df93 --- /dev/null +++ b/docs/sourcey.css @@ -0,0 +1,2474 @@ +/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:ui-monospace, "SF Mono", "Cascadia Code", Consolas, "Liberation Mono", Menlo, monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-600:oklch(57.7% .245 27.325);--color-red-800:oklch(44.4% .177 26.899);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-green-100:oklch(96.2% .044 156.743);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-900:oklch(37.8% .077 168.94);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-600:oklch(51.1% .262 276.966);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-700:oklch(49.6% .265 301.924);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-gray-50:245 245 250;--color-gray-100:241 241 245;--color-gray-200:225 225 229;--color-gray-300:209 209 213;--color-gray-400:161 161 165;--color-gray-500:115 115 119;--color-gray-600:83 83 87;--color-gray-700:65 65 69;--color-gray-800:40 40 44;--color-gray-900:25 25 30;--color-gray-950:13 13 17;--color-stone-50:250 250 249;--color-stone-100:245 245 244;--color-stone-200:231 229 228;--color-stone-400:168 162 158;--color-stone-500:120 113 108;--color-stone-600:87 83 78;--color-stone-700:68 64 60;--color-stone-900:oklch(21.6% .006 56.043);--color-stone-950:12 10 9;--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-tight:1.25;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--radius:.75rem;--sidebar-width:18rem;--header-height:7rem;--toc-width:19rem;--toc-inner-width:16.5rem;--content-padding:2.5rem;--content-max-width:44rem;--color-primary:99 102 241;--color-primary-light:129 140 248;--color-primary-dark:79 70 229;--color-primary-ink:79 70 229;--color-background-light:255 255 255;--color-background-dark:11 12 16;--color-code-block-light:255 255 255;--color-code-block-dark:11 12 14;--color-success:34 197 94;--color-overlay:0 0 0;--color-border-dark-subtle:255 255 255;--color-surface-dark-tint:255 255 255;--method-get:#16a34a;--method-post:#2563eb;--method-put:#d97706;--method-delete:#dc2626;--method-patch:#9333ea;--method-tool:#9333ea;--method-resource:#16a34a;--method-prompt:#2563eb}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.top-0{top:0}.top-3{top:calc(var(--spacing) * 3)}.top-\[2\.75rem\]{top:2.75rem}.top-full{top:100%}.right-0{right:0}.right-4{right:calc(var(--spacing) * 4)}.right-auto{right:auto}.bottom-0{bottom:0}.left-0{left:0}.left-1\/2{left:50%}.-z-10{z-index:calc(10 * -1)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-\[21\]{z-index:21}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.71429}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.11111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.8em;font-size:2.14286em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.8em;font-size:1.42857em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.444444em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.42857em;margin-bottom:.571429em;line-height:1.42857}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.142857em;padding-inline-end:.357143em;padding-bottom:.142857em;border-radius:.3125rem;padding-inline-start:.357143em;font-size:.857143em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;border-radius:.25rem;margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em;font-size:.857143em;line-height:1.66667}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em;padding-inline-start:1.57143em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;margin-bottom:.285714em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.428571em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;padding-inline-start:1.57143em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.85714em;margin-bottom:2.85714em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;font-size:.857143em;line-height:1.33333}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.-mt-10{margin-top:calc(var(--spacing) * -10)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.mb-0{margin-bottom:0}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-14{margin-bottom:calc(var(--spacing) * 14)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-\[26px\]{width:26px;height:26px}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-\[1\.5px\]{height:1.5px}.h-\[1lh\]{height:1lh}.h-full{height:100%}.max-h-full{max-height:100%}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-8{width:calc(var(--spacing) * 8)}.w-\[16\.5rem\]{width:16.5rem}.w-\[18rem\]{width:18rem}.w-\[19rem\]{width:19rem}.w-\[28rem\]{width:28rem}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[28rem\]{max-width:28rem}.max-w-\[92rem\]{max-width:92rem}.max-w-none{max-width:none}.min-w-0{min-width:0}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-\[42px\]{min-width:42px}.min-w-\[43px\]{min-width:43px}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-12{gap:calc(var(--spacing) * 12)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px * var(--tw-space-y-reverse));margin-block-end:calc(1px * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}:where(.space-x-2\.5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:var(--spacing)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-\[var\(--radius\)\]{border-radius:var(--radius)}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[rgb\(var\(--color-gray-100\)\)\]{border-color:rgb(var(--color-gray-100))}.border-\[rgb\(var\(--color-gray-200\)\/0\.7\)\]{border-color:rgb(var(--color-gray-200)/.7)}.border-\[rgb\(var\(--color-gray-500\)\/0\.08\)\]{border-color:rgb(var(--color-gray-500)/.08)}.border-\[rgb\(var\(--color-stone-200\)\)\]{border-color:rgb(var(--color-stone-200))}.bg-\[rgb\(var\(--color-background-light\)\)\]{background-color:rgb(var(--color-background-light))}.bg-\[rgb\(var\(--color-code-block-light\)\)\]{background-color:rgb(var(--color-code-block-light))}.bg-\[rgb\(var\(--color-gray-100\)\/0\.5\)\]{background-color:rgb(var(--color-gray-100)/.5)}.bg-\[rgb\(var\(--color-primary\)\)\]{background-color:rgb(var(--color-primary))}.bg-\[rgb\(var\(--color-primary-dark\)\)\]{background-color:rgb(var(--color-primary-dark))}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-100\/50{background-color:#fef3c680}@supports (color:color-mix(in lab, red, red)){.bg-amber-100\/50{background-color:color-mix(in oklab, var(--color-amber-100) 50%, transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-100\/50{background-color:#dbeafe80}@supports (color:color-mix(in lab, red, red)){.bg-blue-100\/50{background-color:color-mix(in oklab, var(--color-blue-100) 50%, transparent)}}.bg-blue-400\/20{background-color:#54a2ff33}@supports (color:color-mix(in lab, red, red)){.bg-blue-400\/20{background-color:color-mix(in oklab, var(--color-blue-400) 20%, transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-400\/20{background-color:color-mix(in srgb, 161 161 165 20%, transparent)}@supports (color:color-mix(in lab, red, red)){.bg-gray-400\/20{background-color:color-mix(in oklab, var(--color-gray-400) 20%, transparent)}}.bg-green-100{background-color:var(--color-green-100)}.bg-green-100\/50{background-color:#dcfce780}@supports (color:color-mix(in lab, red, red)){.bg-green-100\/50{background-color:color-mix(in oklab, var(--color-green-100) 50%, transparent)}}.bg-green-400\/20{background-color:#05df7233}@supports (color:color-mix(in lab, red, red)){.bg-green-400\/20{background-color:color-mix(in oklab, var(--color-green-400) 20%, transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-purple-400\/20{background-color:#c07eff33}@supports (color:color-mix(in lab, red, red)){.bg-purple-400\/20{background-color:color-mix(in oklab, var(--color-purple-400) 20%, transparent)}}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-100\/50{background-color:#ffe2e280}@supports (color:color-mix(in lab, red, red)){.bg-red-100\/50{background-color:color-mix(in oklab, var(--color-red-100) 50%, transparent)}}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[rgb\(var\(--color-background-light\)\)\]{--tw-gradient-from:rgb(var(--color-background-light));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.p-2{padding:calc(var(--spacing) * 2)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-12{padding-inline:calc(var(--spacing) * 12)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-\[8\.5rem\]{padding-top:8.5rem}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-3\.5{padding-left:calc(var(--spacing) * 3.5)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.55rem\]{font-size:.55rem}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\[1\.35rem\]{--tw-leading:1.35rem;line-height:1.35rem}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.\[word-break\:break-word\]{word-break:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.text-\[rgb\(var\(--color-gray-400\)\)\]{color:rgb(var(--color-gray-400))}.text-\[rgb\(var\(--color-gray-500\)\)\]{color:rgb(var(--color-gray-500))}.text-\[rgb\(var\(--color-gray-600\)\)\]{color:rgb(var(--color-gray-600))}.text-\[rgb\(var\(--color-gray-700\)\)\]{color:rgb(var(--color-gray-700))}.text-\[rgb\(var\(--color-gray-800\)\)\]{color:rgb(var(--color-gray-800))}.text-\[rgb\(var\(--color-gray-900\)\)\]{color:rgb(var(--color-gray-900))}.text-\[rgb\(var\(--color-primary\)\)\]{color:rgb(var(--color-primary))}.text-\[rgb\(var\(--color-primary-ink\)\)\]{color:rgb(var(--color-primary-ink))}.text-\[rgb\(var\(--color-stone-400\)\)\]{color:rgb(var(--color-stone-400))}.text-\[rgb\(var\(--color-stone-500\)\)\]{color:rgb(var(--color-stone-500))}.text-\[rgb\(var\(--color-stone-600\)\)\]{color:rgb(var(--color-stone-600))}.text-\[rgb\(var\(--color-stone-950\)\)\]{color:rgb(var(--color-stone-950))}.text-amber-600{color:var(--color-amber-600)}.text-amber-900{color:var(--color-amber-900)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-gray-700{color:var(--color-gray-700)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-orange-900{color:var(--color-orange-900)}.text-purple-700{color:var(--color-purple-700)}.text-red-600{color:var(--color-red-600)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-90{opacity:.9}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-\[rgb\(var\(--color-gray-400\)\/0\.3\)\]{--tw-ring-color:rgb(var(--color-gray-400)/.3)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-0{outline-style:var(--tw-outline-style);outline-width:0}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.prose-gray{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733)}.select-none{-webkit-user-select:none;user-select:none}.\[text-shadow\:-0\.2px_0_0_currentColor\,0\.2px_0_0_currentColor\]{text-shadow:-.2px 0,.2px 0}@media (hover:hover){.group-hover\:bg-\[rgb\(var\(--color-gray-200\)\)\]:is(:where(.group):hover *){background-color:rgb(var(--color-gray-200))}.group-hover\:bg-\[rgb\(var\(--color-stone-200\)\/0\.5\)\]:is(:where(.group):hover *){background-color:rgb(var(--color-stone-200)/.5)}.group-hover\:text-\[rgb\(var\(--color-primary\)\)\]:is(:where(.group):hover *){color:rgb(var(--color-primary))}.group-hover\:text-\[rgb\(var\(--color-primary-ink\)\)\]:is(:where(.group):hover *){color:rgb(var(--color-primary-ink))}.group-hover\:opacity-90:is(:where(.group):hover *){opacity:.9}.group-hover\/copy\:text-\[rgb\(var\(--color-stone-500\)\)\]:is(:where(.group\/copy):hover *){color:rgb(var(--color-stone-500))}.peer-hover\:opacity-100:is(:where(.peer):hover~*){opacity:1}}.first\:mt-0:first-child{margin-top:0}@media (hover:hover){.hover\:border-\[rgb\(var\(--color-primary\)\/0\.4\)\]:hover{border-color:rgb(var(--color-primary)/.4)}.hover\:bg-\[rgb\(var\(--color-stone-100\)\)\]:hover{background-color:rgb(var(--color-stone-100))}.hover\:text-\[rgb\(var\(--color-gray-600\)\)\]:hover{color:rgb(var(--color-gray-600))}.hover\:text-\[rgb\(var\(--color-gray-700\)\)\]:hover{color:rgb(var(--color-gray-700))}.hover\:text-\[rgb\(var\(--color-gray-800\)\)\]:hover{color:rgb(var(--color-gray-800))}.hover\:text-\[rgb\(var\(--color-gray-900\)\)\]:hover{color:rgb(var(--color-gray-900))}.hover\:underline:hover{text-decoration-line:underline}.hover\:ring-\[rgb\(var\(--color-gray-600\)\/0\.3\)\]:hover{--tw-ring-color:rgb(var(--color-gray-600)/.3)}}@media (width>=40rem){.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}@media (width>=64rem){.lg\:sticky{position:sticky}.lg\:mx-0{margin-inline:0}.lg\:mt-8{margin-top:calc(var(--spacing) * 8)}.lg\:-ml-12{margin-left:calc(var(--spacing) * -12)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:flex-row{flex-direction:row}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}.lg\:px-12{padding-inline:calc(var(--spacing) * 12)}.lg\:pt-10{padding-top:calc(var(--spacing) * 10)}.lg\:pl-\[23\.7rem\]{padding-left:23.7rem}}@media (width>=80rem){.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:w-\[calc\(100\%-28rem\)\]{width:calc(100% - 28rem)}.xl\:flex-col{flex-direction:column}.xl\:flex-row{flex-direction:row}}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:border-\[rgb\(255_255_255\/0\.1\)\]:where(.dark,.dark *){border-color:#ffffff1a}.dark\:border-\[rgb\(var\(--color-border-dark-subtle\)\/0\.1\)\]:where(.dark,.dark *){border-color:rgb(var(--color-border-dark-subtle)/.1)}.dark\:border-\[rgb\(var\(--color-gray-300\)\/0\.06\)\]:where(.dark,.dark *){border-color:rgb(var(--color-gray-300)/.06)}.dark\:border-\[rgb\(var\(--color-gray-300\)\/0\.08\)\]:where(.dark,.dark *){border-color:rgb(var(--color-gray-300)/.08)}.dark\:border-\[rgb\(var\(--color-gray-800\)\)\]:where(.dark,.dark *){border-color:rgb(var(--color-gray-800))}.dark\:border-\[rgb\(var\(--color-gray-800\)\/0\.5\)\]:where(.dark,.dark *){border-color:rgb(var(--color-gray-800)/.5)}.dark\:bg-\[rgb\(var\(--color-background-dark\)\)\]:where(.dark,.dark *){background-color:rgb(var(--color-background-dark))}.dark\:bg-\[rgb\(var\(--color-code-block-dark\)\)\]:where(.dark,.dark *){background-color:rgb(var(--color-code-block-dark))}.dark\:bg-\[rgb\(var\(--color-primary-light\)\)\]:where(.dark,.dark *){background-color:rgb(var(--color-primary-light))}.dark\:bg-\[rgb\(var\(--color-stone-900\)\)\]:where(.dark,.dark *){background-color:rgb(var(--color-stone-900))}.dark\:bg-\[rgb\(var\(--color-surface-dark-tint\)\/0\.05\)\]:where(.dark,.dark *){background-color:rgb(var(--color-surface-dark-tint)/.05)}.dark\:bg-amber-400\/10:where(.dark,.dark *){background-color:#fcbb001a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-400) 10%, transparent)}}.dark\:bg-blue-400:where(.dark,.dark *){background-color:var(--color-blue-400)}.dark\:bg-blue-400\/10:where(.dark,.dark *){background-color:#54a2ff1a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-400) 10%, transparent)}}.dark\:bg-blue-400\/20:where(.dark,.dark *){background-color:#54a2ff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-400) 20%, transparent)}}.dark\:bg-green-400:where(.dark,.dark *){background-color:var(--color-green-400)}.dark\:bg-green-400\/10:where(.dark,.dark *){background-color:#05df721a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-400) 10%, transparent)}}.dark\:bg-green-400\/20:where(.dark,.dark *){background-color:#05df7233}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-400) 20%, transparent)}}.dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:#ff8b1a33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-orange-400) 20%, transparent)}}.dark\:bg-purple-400:where(.dark,.dark *){background-color:var(--color-purple-400)}.dark\:bg-purple-400\/20:where(.dark,.dark *){background-color:#c07eff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-purple-400) 20%, transparent)}}.dark\:bg-red-400\/10:where(.dark,.dark *){background-color:#ff65681a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-400) 10%, transparent)}}.dark\:bg-red-400\/20:where(.dark,.dark *){background-color:#ff656833}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-400) 20%, transparent)}}.dark\:bg-yellow-400\/20:where(.dark,.dark *){background-color:#fac80033}@supports (color:color-mix(in lab, red, red)){.dark\:bg-yellow-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-yellow-400) 20%, transparent)}}.dark\:from-\[rgb\(var\(--color-background-dark\)\)\]:where(.dark,.dark *){--tw-gradient-from:rgb(var(--color-background-dark));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.dark\:text-\[rgb\(255_255_255\/0\.4\)\]:where(.dark,.dark *){color:#fff6}.dark\:text-\[rgb\(var\(--color-gray-50\)\)\]:where(.dark,.dark *){color:rgb(var(--color-gray-50))}.dark\:text-\[rgb\(var\(--color-gray-200\)\)\]:where(.dark,.dark *){color:rgb(var(--color-gray-200))}.dark\:text-\[rgb\(var\(--color-gray-300\)\)\]:where(.dark,.dark *){color:rgb(var(--color-gray-300))}.dark\:text-\[rgb\(var\(--color-gray-400\)\)\]:where(.dark,.dark *){color:rgb(var(--color-gray-400))}.dark\:text-\[rgb\(var\(--color-gray-500\)\)\]:where(.dark,.dark *){color:rgb(var(--color-gray-500))}.dark\:text-\[rgb\(var\(--color-primary-light\)\)\]:where(.dark,.dark *){color:rgb(var(--color-primary-light))}.dark\:text-\[rgb\(var\(--color-stone-50\)\)\]:where(.dark,.dark *){color:rgb(var(--color-stone-50))}.dark\:text-\[rgb\(var\(--color-stone-400\)\)\]:where(.dark,.dark *){color:rgb(var(--color-stone-400))}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-blue-300:where(.dark,.dark *){color:var(--color-blue-300)}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-green-300:where(.dark,.dark *){color:var(--color-green-300)}.dark\:text-green-400:where(.dark,.dark *){color:var(--color-green-400)}.dark\:text-orange-300:where(.dark,.dark *){color:var(--color-orange-300)}.dark\:text-purple-400:where(.dark,.dark *){color:var(--color-purple-400)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-yellow-300:where(.dark,.dark *){color:var(--color-yellow-300)}.dark\:ring-\[rgb\(var\(--color-gray-600\)\/0\.3\)\]:where(.dark,.dark *){--tw-ring-color:rgb(var(--color-gray-600)/.3)}.dark\:brightness-110:where(.dark,.dark *){--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.dark\:prose-invert:where(.dark,.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}@media (hover:hover){.dark\:group-hover\:bg-\[rgb\(var\(--color-gray-700\)\)\]:where(.dark,.dark *):is(:where(.group):hover *){background-color:rgb(var(--color-gray-700))}.dark\:group-hover\:bg-\[rgb\(var\(--color-stone-700\)\/0\.7\)\]:where(.dark,.dark *):is(:where(.group):hover *){background-color:rgb(var(--color-stone-700)/.7)}.dark\:group-hover\:text-\[rgb\(var\(--color-primary-light\)\)\]:where(.dark,.dark *):is(:where(.group):hover *){color:rgb(var(--color-primary-light))}.dark\:group-hover\/copy\:text-\[rgb\(255_255_255\/0\.6\)\]:where(.dark,.dark *):is(:where(.group\/copy):hover *){color:#fff9}.dark\:hover\:border-\[rgb\(var\(--color-primary-light\)\/0\.3\)\]:where(.dark,.dark *):hover{border-color:rgb(var(--color-primary-light)/.3)}.dark\:hover\:bg-\[rgb\(255_255_255\/0\.05\)\]:where(.dark,.dark *):hover{background-color:#ffffff0d}.dark\:hover\:text-\[rgb\(var\(--color-gray-200\)\)\]:where(.dark,.dark *):hover{color:rgb(var(--color-gray-200))}.dark\:hover\:text-\[rgb\(var\(--color-gray-300\)\)\]:where(.dark,.dark *):hover{color:rgb(var(--color-gray-300))}.dark\:hover\:ring-\[rgb\(var\(--color-gray-500\)\/0\.3\)\]:where(.dark,.dark *):hover{--tw-ring-color:rgb(var(--color-gray-500)/.3)}.dark\:hover\:brightness-125:where(.dark,.dark *):hover{--tw-brightness:brightness(125%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false} +/*$vite$:1*/ +/** + * Sourcey - Component styles. + * + * Layout and OpenAPI components use Tailwind classes in .tsx files. + * Markdown-generated components (code blocks, cards, steps, accordions, + * callouts, tabs) use semantic class names styled here - no Tailwind + * utilities in generated HTML. + */ + +/* ── Page Description (display font) ─────────────────────────────── */ + +#sourcey .page-description { + font-family: ui-serif, Georgia, Cambria, "Times New Roman", serif; + font-size: 1.125rem; + line-height: 1.35; + font-style: italic; + color: rgb(var(--color-gray-600)); +} +@media (min-width: 1024px) { + #sourcey .page-description { + font-size: 1.375rem; + line-height: 1.4; + } +} +.dark #sourcey .page-description { + color: rgb(var(--color-gray-400)); +} + +/* ── Page Top Gradient ────────────────────────────────────────────── */ + +#sourcey #page::before { + content: ""; + position: fixed; + top: 0; + left: 0; + right: 0; + height: 400px; + background: linear-gradient(to bottom, rgb(var(--color-primary) / 0.03), transparent); + pointer-events: none; + z-index: -1; +} +.dark #sourcey #page::before { + background: none; +} + +/* ── Scroll Offset (clears fixed navbar on anchor clicks) ──────────── */ + +[data-traverse-target], +h1[id], +h2[id], +h3[id], +h4[id], +h5[id], +h6[id] { + scroll-margin-top: var(--header-height, 7rem); +} + +/* ── Focus ─────────────────────────────────────────────────────────── */ + +#sourcey button:focus-visible { + outline: 2px solid rgb(var(--color-primary)); + outline-offset: 2px; +} + +/* ── Shiki Dual-Theme (defaultColor: false) ───────────────────────── */ +/* Shiki outputs --shiki-light and --shiki-dark CSS vars on each span. */ +/* Light mode: use --shiki-light. Dark mode: use --shiki-dark. */ + +.shiki, +.shiki span { + color: var(--shiki-light); + background-color: transparent !important; +} + +.dark .shiki, +.dark .shiki span { + color: var(--shiki-dark); +} + +.shiki pre { + background-color: transparent !important; + margin: 0; +} + +.shiki code { + font-family: inherit; + background: transparent; + border: none; + padding: 0; +} + +/* ── Responsive Tables ────────────────────────────────────────────── */ + +#sourcey .table-wrap { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +#sourcey .table-wrap table { + margin: 0; +} +#sourcey .prose :where(thead th):not(:where([class~="not-prose"], [class~="not-prose"] *)) { + padding-top: 0.571429em; +} + +/* ── Prose Video (::video directive) ──────────────────────────────── */ + +#sourcey .prose-video { + position: relative; + width: 100%; + padding-bottom: 56.25%; /* 16:9 */ + margin: 1.5rem 0; + border-radius: var(--radius); + overflow: hidden; +} +#sourcey .prose-video iframe, +#sourcey .prose-video video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* ── Prose Iframe (::iframe directive) ────────────────────────────── */ + +#sourcey .prose-iframe { + width: 100%; + margin: 1.5rem 0; + border-radius: var(--radius); + overflow: hidden; + border: 1px solid rgb(var(--color-stone-950) / 0.1); +} +.dark #sourcey .prose-iframe { + border-color: rgb(255 255 255 / 0.1); +} +#sourcey .prose-iframe iframe { + width: 100%; + height: 100%; + display: block; +} + +/* ── Inline Code (not-prose containers lose Tailwind prose styling) ── */ + +#sourcey .not-prose :not(pre) > code { + font-size: 0.875em; + font-weight: 600; + color: var(--tw-prose-code); +} +#sourcey .not-prose :not(pre) > code::before, +#sourcey .not-prose :not(pre) > code::after { + content: "`"; +} + +/* ── Prose Code Block (fenced code in markdown pages) ─────────────── */ + +#sourcey .prose-code-block { + position: relative; + border-radius: var(--radius); + border: 1px solid rgb(var(--color-stone-950) / 0.1); + margin: 1.25rem 0 2rem; + overflow: hidden; + color: rgb(var(--color-stone-950)); +} +.dark #sourcey .prose-code-block { + border-color: rgb(255 255 255 / 0.1); + color: rgb(var(--color-stone-50)); +} + +#sourcey .prose-code-copy { + position: absolute; + top: 0.75rem; + right: 1rem; + z-index: 10; +} + +#sourcey .prose-code-copy .copy-btn { + display: flex; + align-items: center; + justify-content: center; + width: 26px; + height: 26px; + border-radius: 0.375rem; + border: none; + background: transparent; + cursor: pointer; + color: rgb(var(--color-stone-400)); + transition: color 0.15s; +} +#sourcey .prose-code-copy .copy-btn:hover { + color: rgb(var(--color-stone-500)); +} +.dark #sourcey .prose-code-copy .copy-btn { + color: rgb(255 255 255 / 0.4); +} +.dark #sourcey .prose-code-copy .copy-btn:hover { + color: rgb(255 255 255 / 0.6); +} + +#sourcey .prose-code-copy .copy-btn svg { + width: 1rem; + height: 1rem; +} + +#sourcey .prose-code-content { + padding: 0.875rem 1rem; + border-radius: var(--radius); + background: rgb(var(--color-code-block-light)); + overflow-x: auto; + font-variant-ligatures: none; +} +.dark #sourcey .prose-code-content { + background: rgb(var(--color-code-block-dark)); +} + +#sourcey .prose-code-content pre { + margin: 0; + font-family: var(--font-mono); + font-size: 0.875rem; + line-height: 1.5rem; + white-space: pre; +} + +/* ── Nav Links ────────────────────────────────────────────────────── */ + +#sourcey .nav-group-label { + display: block; + padding: 0 0.75rem 0.25rem 1rem; + margin-bottom: 0.625rem; + font-size: inherit; + font-weight: 600; + color: rgb(var(--color-gray-900)); +} +.dark #sourcey .nav-group-label { + color: rgb(var(--color-gray-200)); +} +#sourcey .nav-group-link { + cursor: pointer; + border-radius: 0.75rem; + text-decoration: none; + transition: + color 0.15s, + background-color 0.15s; +} +#sourcey .nav-group-link:hover { + color: rgb(var(--color-primary-ink)); +} +.dark #sourcey .nav-group-link:hover { + color: rgb(var(--color-primary-light)); +} +#sourcey .nav-group-link.active { + color: rgb(var(--color-primary-ink)); +} +.dark #sourcey .nav-group-link.active { + color: rgb(var(--color-primary-light)); +} + +#sourcey .nav-tab-label { + display: block; + padding: 0.5rem 0.75rem 0.25rem 1rem; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + color: rgb(var(--color-gray-400)); +} +.dark #sourcey .nav-tab-label { + color: rgb(var(--color-gray-500)); +} + +#sourcey .nav-link { + display: flex; + align-items: flex-start; + padding: 0.375rem 0.75rem 0.375rem 1rem; + gap: 0.75rem; + cursor: pointer; + text-align: left; + overflow-wrap: break-word; + hyphens: auto; + border-radius: 0.75rem; + width: 100%; + color: rgb(var(--color-gray-700)); + transition: + color 0.15s, + background-color 0.15s; +} +.dark #sourcey .nav-link { + color: rgb(var(--color-gray-400)); +} +#sourcey .nav-link:hover { + color: rgb(var(--color-gray-900)); + background: rgb(var(--color-gray-100) / 0.6); +} +.dark #sourcey .nav-link:hover { + color: rgb(var(--color-gray-300)); + background: rgb(var(--color-gray-800) / 0.4); +} +#sourcey .nav-link.active { + color: rgb(var(--color-primary-ink)); + background: rgb(var(--color-primary) / 0.08); + text-shadow: + -0.2px 0 0 currentColor, + 0.2px 0 0 currentColor; +} +.dark #sourcey .nav-link.active { + color: rgb(var(--color-primary-light)); + background: rgb(var(--color-primary-light) / 0.08); +} + +/* ── TOC Active State ─────────────────────────────────────────────── */ + +#sourcey #toc .toc-item { + border-left: 2px solid rgb(var(--color-gray-200)); + padding-left: 0.75rem; + transition: + color 0.15s, + border-color 0.15s; +} +#sourcey #toc ul ul .toc-item { + margin-left: 0.75rem; + border-left: none; +} +.dark #sourcey #toc .toc-item { + border-left-color: rgb(var(--color-gray-700)); +} +#sourcey #toc .toc-item.active { + color: rgb(var(--color-primary-ink)); + border-left-color: rgb(var(--color-primary-ink)); + font-weight: 500; +} +.dark #sourcey #toc .toc-item.active { + color: rgb(var(--color-primary-light)); + border-left-color: rgb(var(--color-primary-light)); +} + +/* ── Code Block Panels (language dropdown + response tabs) ─────────── */ + +#sourcey .code-lang-panel { + display: none; +} +#sourcey .code-lang-panel.active { + display: block; +} + +#sourcey .lang-icon { + width: 0.875rem; + height: 0.875rem; + flex-shrink: 0; + vertical-align: -0.125rem; +} + +#sourcey .lang-icon[data-lang] { + display: inline-block; + background: currentColor; + -webkit-mask-size: contain; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; +} + +#sourcey .response-panel { + display: none; +} +#sourcey .response-panel.active { + display: block; +} + +/* ── Response Tabs (status code tabs on code block) ───────────────── */ + +#sourcey .response-tab { + color: rgb(var(--color-gray-500)); + transition: color 0.15s; +} +.dark #sourcey .response-tab { + color: rgb(var(--color-gray-400)); +} + +#sourcey .response-tab.active { + color: rgb(var(--color-primary-ink)); +} +.dark #sourcey .response-tab.active { + color: rgb(var(--color-primary-light)); +} + +/* Active response tab underline */ +#sourcey .response-tab.active::after { + content: ""; + position: absolute; + right: 0; + bottom: -0.375rem; + left: 0; + height: 2px; + border-radius: 9999px; + background: rgb(var(--color-primary)); +} +.dark #sourcey .response-tab.active::after { + background: rgb(var(--color-primary-light)); +} + +/* ── Copy Button Feedback ─────────────────────────────────────────── */ + +#sourcey .copy-btn.copied { + color: rgb(var(--color-success)); +} + +/* ── Schema Utilities (used by SchemaView.tsx) ─────────────────────── */ + +/* ── Collapsible child attributes ── */ + +#sourcey .schema-expandable { + margin-top: 1rem; + border: 1px solid rgb(var(--color-gray-200) / 0.7); + border-radius: 0.75rem; +} +.dark #sourcey .schema-expandable { + border-color: rgb(255 255 255 / 0.1); +} + +#sourcey .schema-expandable-toggle { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 0.75rem 1rem; + font-size: 0.875rem; + font-weight: 400; + color: rgb(var(--color-gray-600)); + cursor: pointer; + list-style: none; + user-select: none; +} +#sourcey .schema-expandable-toggle::-webkit-details-marker { + display: none; +} +.dark #sourcey .schema-expandable-toggle { + color: rgb(var(--color-gray-300)); +} +#sourcey .schema-expandable-toggle:hover { + background: rgb(var(--color-gray-100) / 0.5); + color: rgb(var(--color-gray-900)); + border-radius: 0.75rem; +} +.dark #sourcey .schema-expandable-toggle:hover { + background: rgb(255 255 255 / 0.05); + color: rgb(var(--color-gray-200)); +} + +#sourcey .schema-expandable-icon { + width: 0.625rem; + height: 0.625rem; + flex-shrink: 0; + transition: transform 75ms; + color: rgb(var(--color-gray-400)); +} +#sourcey details[open] > .schema-expandable-toggle > .schema-expandable-icon { + transform: rotate(90deg); +} + +#sourcey .schema-expandable-content { + padding: 0 1rem 0.5rem; + border-top: 1px solid rgb(var(--color-gray-100)); +} +.dark #sourcey .schema-expandable-content { + border-top-color: rgb(255 255 255 / 0.1); +} + +/* Legacy schema-nested - kept for variant nesting */ +#sourcey .schema-nested { + padding-left: 1rem; + border-left: 2px solid rgb(var(--color-gray-200)); + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} +.dark #sourcey .schema-nested { + border-left-color: rgb(var(--color-gray-800)); +} + +#sourcey .schema-variant-option { + padding-left: 1rem; + border-left: 2px solid rgb(var(--color-gray-200)); + margin-bottom: 0.5rem; +} +.dark #sourcey .schema-variant-option { + border-left-color: rgb(var(--color-gray-800)); +} + +#sourcey .schema-variant-label { + font-size: 0.75rem; + font-weight: 600; + letter-spacing: 0.05em; + color: rgb(var(--color-gray-400)); + margin-bottom: 0.25rem; +} + +/* ── Type Display (used by SchemaDatatype.tsx) ─────────────────────── */ + +#sourcey .json-property-type { + display: inline-flex; + align-items: center; + font-style: normal; + font-weight: 500; + font-size: 0.75rem; + line-height: 1; + white-space: nowrap; + color: rgb(var(--color-gray-600)); + background: rgb(var(--color-gray-100) / 0.5); + padding: 0.25rem 0.5rem; + border-radius: 0.375rem; +} +.dark #sourcey .json-property-type { + background: rgb(var(--color-surface-dark-tint) / 0.05); + color: rgb(var(--color-gray-200)); +} + +#sourcey .json-property-format { + font-size: 0.75rem; + color: rgb(var(--color-gray-400)); +} + +#sourcey .json-property-enum { + display: inline-flex; + align-items: baseline; + gap: 0.25rem; + flex-wrap: wrap; +} + +#sourcey .json-property-enum-item, +#sourcey .json-property-default-value, +#sourcey .json-property-range { + display: inline-flex; + align-items: center; + font-size: 0.6875rem; + font-family: var(--font-mono); + line-height: 1; + white-space: nowrap; + color: rgb(var(--color-gray-500)); + background: rgb(var(--color-gray-100) / 0.5); + padding: 0.125rem 0.375rem; + border-radius: 9999px; +} +.dark #sourcey .json-property-enum-item, +.dark #sourcey .json-property-default-value, +.dark #sourcey .json-property-range { + background: rgb(var(--color-surface-dark-tint) / 0.05); + color: rgb(var(--color-gray-400)); +} + +#sourcey .json-property-enum-item { + color: rgb(var(--color-gray-700)); +} +.dark #sourcey .json-property-enum-item { + color: rgb(var(--color-gray-300)); +} + +#sourcey .json-property-default-value::before { + content: "= "; + color: rgb(var(--color-gray-400)); +} + +/* ── Parameter/Schema List (used by SchemaView.tsx, Parameters.tsx) ── */ + +#sourcey .param-item { + padding: 1rem 0; + border-bottom: 1px solid rgb(var(--color-gray-100)); +} +.dark #sourcey .param-item { + border-bottom-color: rgb(var(--color-gray-800)); +} + +#sourcey .param-item:last-child { + border-bottom: none; +} + +#sourcey .param-header { + display: flex; + align-items: baseline; + gap: 0.5rem; + flex-wrap: wrap; +} + +#sourcey .param-name { + font-family: var(--font-mono); + font-size: 0.875rem; + font-weight: 600; + color: rgb(var(--color-primary-ink)); + background: transparent; + border: none; + padding: 0; +} +.dark #sourcey .param-name { + color: rgb(var(--color-primary-light)); +} + +#sourcey .param-type { + display: inline-flex; + align-items: baseline; + gap: 0.375rem; +} + +#sourcey .param-in { + display: inline-flex; + align-items: center; + padding: 0.125rem 0.5rem; + font-size: 0.75rem; + font-weight: 500; + border-radius: 0.375rem; + background: rgb(var(--color-gray-100) / 0.5); + color: rgb(var(--color-gray-600)); + margin-left: auto; +} +.dark #sourcey .param-in { + background: rgb(var(--color-surface-dark-tint) / 0.05); + color: rgb(var(--color-gray-200)); +} + +#sourcey .param-description { + padding-top: 0.5rem; + font-size: 0.875rem; + color: rgb(var(--color-gray-700)); +} +.dark #sourcey .param-description { + color: rgb(var(--color-gray-400)); +} + +/* ── Steps (numbered step list with vertical connector) ────────────── */ + +#sourcey .steps { + margin-left: 0.875rem; + margin-top: 1rem; + margin-bottom: 1.5rem; +} + +#sourcey .steps .step-item { + position: relative; + display: flex; + align-items: flex-start; + padding-bottom: 1.25rem; +} + +#sourcey .steps .step-item::before { + content: ""; + position: absolute; + left: 13px; + top: 2.75rem; + bottom: 0; + width: 1px; + background: rgb(var(--color-gray-200) / 0.7); +} +.dark #sourcey .steps .step-item::before { + background: rgb(255 255 255 / 0.1); +} + +#sourcey .steps .step-item:last-child::before { + background: linear-gradient(to bottom, rgb(var(--color-gray-200) / 0.7), transparent); +} +.dark #sourcey .steps .step-item:last-child::before { + background: linear-gradient(to bottom, rgb(255 255 255 / 0.1), transparent); +} + +#sourcey .steps .step-number { + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 1.75rem; + height: 1.75rem; + flex-shrink: 0; + border-radius: 9999px; + background: rgb(var(--color-gray-50)); + font-size: 0.75rem; + font-weight: 600; + color: rgb(var(--color-gray-900)); + margin-top: 0.5rem; +} +.dark #sourcey .steps .step-number { + background: rgb(255 255 255 / 0.1); + color: rgb(var(--color-gray-50)); +} + +#sourcey .steps .step-body { + padding-left: 1rem; + flex: 1; + overflow: hidden; +} + +#sourcey .steps .step-title { + margin-top: 0.5rem; + font-weight: 600; + color: rgb(var(--color-gray-900)); +} +.dark #sourcey .steps .step-title { + color: rgb(var(--color-gray-200)); +} + +#sourcey .steps .step-content { + margin-top: 0.25rem; +} + +#sourcey .steps .step-content p { + margin: 0.25rem 0; +} + +/* ── Card Group (icon cards in a grid) ─────────────────────────────── */ + +#sourcey .card-group { + display: grid; + gap: 1rem; + margin-top: 1.25rem; + margin-bottom: 2rem; +} +@media (min-width: 640px) { + #sourcey .card-group[data-cols="2"] { + grid-template-columns: repeat(2, 1fr); + } + #sourcey .card-group[data-cols="3"] { + grid-template-columns: repeat(3, 1fr); + } + #sourcey .card-group[data-cols="4"] { + grid-template-columns: repeat(4, 1fr); + } +} + +#sourcey .card-item { + display: block; + position: relative; + border: 1px solid rgb(var(--color-gray-950) / 0.1); + border-radius: var(--radius); + padding: 1.25rem 1.5rem; + background: rgb(var(--color-background-light)); + text-decoration: none; + color: inherit; + cursor: pointer; + overflow: hidden; + transition: border-color 0.15s; +} +.dark #sourcey .card-item { + border-color: rgb(255 255 255 / 0.1); + background: rgb(var(--color-background-dark)); +} + +#sourcey .card-item:hover { + border-color: rgb(var(--color-primary)); +} +.dark #sourcey .card-item:hover { + border-color: rgb(var(--color-primary-light)); +} + +#sourcey .card-icon { + width: 1.5rem; + height: 1.5rem; + flex-shrink: 0; + color: rgb(var(--color-primary)); + margin-bottom: 0.75rem; +} +.dark #sourcey .card-icon { + color: rgb(var(--color-primary-light)); +} + +#sourcey .card-item-title { + font-size: 1rem; + font-weight: 600; + color: rgb(var(--color-gray-800)); + margin: 0 0 0.25rem; +} +.dark #sourcey .card-item-title { + color: #fff; +} + +#sourcey .card-item-content { + margin-top: 0.25rem; + font-size: 1rem; + line-height: 1.5; + color: rgb(var(--color-gray-600)); +} +.dark #sourcey .card-item-content { + color: rgb(var(--color-gray-400)); +} + +#sourcey .card-item-content p { + margin: 0; +} + +/* ── Accordion (expandable details) ────────────────────────────────── */ + +#sourcey .accordion-group { + margin-top: 0; + margin-bottom: 0.75rem; + border-radius: var(--radius); + border: 1px solid rgb(var(--color-gray-200) / 0.7); + overflow: hidden; +} +.dark #sourcey .accordion-group { + border-color: rgb(var(--color-gray-800) / 0.5); +} + +#sourcey .accordion-item { + border-bottom: 1px solid rgb(var(--color-gray-200) / 0.7); + background: rgb(var(--color-background-light)); +} +.dark #sourcey .accordion-item { + border-bottom-color: rgb(var(--color-gray-800) / 0.5); + background: rgb(var(--color-code-block-dark)); +} + +#sourcey .accordion-item:last-child { + border-bottom: none; +} + +#sourcey .accordion-trigger { + display: flex; + align-items: center; + gap: 0.5rem; + width: 100%; + padding: 1rem 1.25rem; + cursor: pointer; + font-weight: 500; + color: rgb(var(--color-gray-900)); + list-style: none; +} +#sourcey .accordion-trigger::-webkit-details-marker { + display: none; +} +.dark #sourcey .accordion-trigger { + color: rgb(var(--color-gray-200)); +} + +#sourcey .accordion-trigger:hover { + background: rgb(var(--color-gray-100)); +} +.dark #sourcey .accordion-trigger:hover { + background: rgb(var(--color-gray-800)); +} + +#sourcey .accordion-trigger::before { + content: ""; + display: inline-block; + width: 0.75rem; + height: 0.75rem; + flex-shrink: 0; + background: rgb(var(--color-gray-700)); + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 512'%3E%3Cpath d='M246.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 256c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l128-128z'/%3E%3C/svg%3E"); + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + transition: transform 0.15s; +} +.dark #sourcey .accordion-trigger::before { + background: rgb(var(--color-gray-400)); +} + +#sourcey .accordion-item[open] > .accordion-trigger::before { + transform: rotate(90deg); +} + +#sourcey .accordion-content { + padding: 0 1.25rem 1rem 2.5rem; + color: rgb(var(--color-gray-700)); +} +.dark #sourcey .accordion-content { + color: rgb(var(--color-gray-400)); +} + +#sourcey .accordion-content p { + margin: 0.25rem 0; +} + +/* ── Callouts (:::note, :::warning, :::tip, :::info) ───────────────── */ + +#sourcey .callout { + margin: 1.25rem 0; + border: none; + border-left: 2px solid; + border-radius: 0; + padding: 0.875rem 1rem; + font-size: 0.875rem; + line-height: 1.6; + color: rgb(var(--color-gray-700)); + border-left-color: rgb(var(--color-gray-300)); +} +.dark #sourcey .callout { + border-left-color: rgb(var(--color-gray-700)); + color: rgb(var(--color-gray-400)); +} + +#sourcey .callout-title { + font-weight: 600; + font-size: 0.8125rem; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +/* Remove bottom margin when no content follows */ +#sourcey .callout-title:last-child { + margin-bottom: 0; +} + +#sourcey .callout-content { + margin-top: 0.375rem; +} + +#sourcey .callout-content p { + margin: 0.25rem 0; +} + +#sourcey .callout-content p:last-child { + margin-bottom: 0; +} + +/* Note - blue */ +#sourcey .callout-note { + border-left-color: #3b82f6; +} +.dark #sourcey .callout-note { + border-left-color: #60a5fa; +} +#sourcey .callout-note .callout-title { + color: #3b82f6; +} +.dark #sourcey .callout-note .callout-title { + color: #60a5fa; +} + +/* Warning - amber */ +#sourcey .callout-warning { + border-left-color: #f59e0b; +} +.dark #sourcey .callout-warning { + border-left-color: #fbbf24; +} +#sourcey .callout-warning .callout-title { + color: #f59e0b; +} +.dark #sourcey .callout-warning .callout-title { + color: #fbbf24; +} + +/* ── Changelog ───────────────────────────────────────────────────── */ + +#sourcey .sourcey-changelog-page { + width: 100%; +} + +#sourcey .sourcey-changelog-header { + margin-bottom: 2rem; +} + +#sourcey .sourcey-changelog-description { + margin-top: 0.75rem; + font-size: 1.05rem; + line-height: 1.7; + color: rgb(var(--color-gray-600)); + max-width: 65ch; + text-wrap: pretty; +} + +.dark #sourcey .sourcey-changelog-description { + color: rgb(var(--color-gray-400)); +} + +#sourcey .sourcey-changelog-description a { + color: rgb(var(--color-primary-ink)); + text-decoration: none; + border-bottom: 1px solid rgb(var(--color-primary-ink) / 0.3); +} + +#sourcey .sourcey-changelog-description a:hover { + border-bottom-color: rgb(var(--color-primary-ink)); +} + +.dark #sourcey .sourcey-changelog-description a { + color: rgb(var(--color-primary-light)); + border-bottom-color: rgb(var(--color-primary-light) / 0.3); +} + +.dark #sourcey .sourcey-changelog-description a:hover { + border-bottom-color: rgb(var(--color-primary-light)); +} + +#sourcey .sourcey-changelog-description code { + font-size: 0.92em; + padding: 0.05rem 0.3rem; + border-radius: 0.25rem; + background: rgb(var(--color-gray-100)); + color: rgb(var(--color-gray-800)); +} + +.dark #sourcey .sourcey-changelog-description code { + background: rgb(255 255 255 / 0.08); + color: rgb(var(--color-gray-200)); +} + +#sourcey .sourcey-changelog-list { + display: flex; + flex-direction: column; + gap: 1rem; +} + +#sourcey .sourcey-changelog-version { + border: 1px solid rgb(var(--color-gray-200) / 0.8); + border-radius: 1rem; + padding: 1.25rem 1.25rem 1rem; + background: linear-gradient(180deg, rgb(var(--color-gray-50) / 0.75), rgb(255 255 255)); +} + +.dark #sourcey .sourcey-changelog-version { + border-color: rgb(var(--color-gray-800) / 0.8); + background: linear-gradient(180deg, rgb(255 255 255 / 0.03), rgb(255 255 255 / 0.015)); +} + +#sourcey .sourcey-changelog-version-unreleased { + border-color: rgb(var(--color-primary) / 0.18); + border-left: 3px solid rgb(var(--color-primary)); + padding-left: calc(1.25rem - 2px); + background: linear-gradient( + 180deg, + rgb(var(--color-primary) / 0.04), + rgb(var(--color-primary) / 0.015) + ); +} + +.dark #sourcey .sourcey-changelog-version-unreleased { + border-color: rgb(var(--color-primary-light) / 0.22); + border-left-color: rgb(var(--color-primary-light)); + background: linear-gradient( + 180deg, + rgb(var(--color-primary-light) / 0.06), + rgb(var(--color-primary-light) / 0.02) + ); +} + +#sourcey .sourcey-changelog-version-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 1rem; + margin-bottom: 1rem; +} + +@media (max-width: 768px) { + #sourcey .sourcey-changelog-version-header { + flex-direction: column; + } +} + +#sourcey .sourcey-changelog-version-heading { + display: flex; + align-items: center; + gap: 0.5rem; + flex-wrap: wrap; +} + +#sourcey .sourcey-changelog-version-link { + font-size: 1.25rem; + font-weight: 700; + color: rgb(var(--color-gray-900)); + text-decoration: none; +} + +.dark #sourcey .sourcey-changelog-version-link { + color: rgb(var(--color-gray-200)); +} + +#sourcey .sourcey-changelog-version-link:hover { + color: rgb(var(--color-primary-ink)); +} + +.dark #sourcey .sourcey-changelog-version-link:hover { + color: rgb(var(--color-primary-light)); +} + +#sourcey .sourcey-changelog-version-meta { + display: flex; + align-items: center; + gap: 0.75rem; + font-size: 0.925rem; + color: rgb(var(--color-gray-500)); +} + +.dark #sourcey .sourcey-changelog-version-meta { + color: rgb(var(--color-gray-400)); +} + +#sourcey .sourcey-changelog-compare-link { + color: rgb(var(--color-primary-ink)); + text-decoration: none; +} + +.dark #sourcey .sourcey-changelog-compare-link { + color: rgb(var(--color-primary-light)); +} + +#sourcey .sourcey-changelog-pill { + display: inline-flex; + align-items: center; + border-radius: 999px; + padding: 0.15rem 0.5rem; + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.03em; +} + +#sourcey .sourcey-changelog-pill-yanked { + background: rgb(239 68 68 / 0.12); + color: rgb(185 28 28); +} + +.dark #sourcey .sourcey-changelog-pill-yanked { + background: rgb(248 113 113 / 0.15); + color: rgb(252 165 165); +} + +#sourcey .sourcey-changelog-pill-pre { + background: rgb(var(--color-gray-100)); + color: rgb(var(--color-gray-600)); +} + +.dark #sourcey .sourcey-changelog-pill-pre { + background: rgb(255 255 255 / 0.08); + color: rgb(var(--color-gray-300)); +} + +#sourcey .sourcey-changelog-pill-next { + background: rgb(var(--color-primary) / 0.1); + color: rgb(var(--color-primary-ink)); + text-transform: uppercase; + letter-spacing: 0.06em; + font-size: 0.68rem; +} + +.dark #sourcey .sourcey-changelog-pill-next { + background: rgb(var(--color-primary-light) / 0.14); + color: rgb(var(--color-primary-light)); +} + +#sourcey .sourcey-changelog-summary { + margin-bottom: 1rem; +} + +#sourcey .sourcey-changelog-summary p:first-child { + margin-top: 0; +} + +#sourcey .sourcey-changelog-sections { + display: flex; + flex-direction: column; + gap: 0.875rem; +} + +#sourcey .sourcey-changelog-section { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +#sourcey .sourcey-changelog-section-header { + display: flex; + align-items: center; + gap: 0.5rem; +} + +#sourcey .sourcey-changelog-entry-list { + margin: 0; + padding-left: 1.25rem; + color: rgb(var(--color-gray-700)); +} + +.dark #sourcey .sourcey-changelog-entry-list { + color: rgb(var(--color-gray-300)); +} + +#sourcey .sourcey-changelog-entry-list li { + margin: 0.35rem 0; +} + +#sourcey .sourcey-changelog-entry-list li > p { + margin: 0; +} + +#sourcey .sourcey-changelog-badge { + text-transform: none; +} + +#sourcey .sourcey-changelog-badge-added { + background: rgb(var(--color-success) / 0.12); + color: rgb(21 128 61); +} + +.dark #sourcey .sourcey-changelog-badge-added { + background: rgb(var(--color-success) / 0.16); + color: rgb(134 239 172); +} + +#sourcey .sourcey-changelog-badge-changed { + background: rgb(var(--color-primary) / 0.12); + color: rgb(var(--color-primary-ink)); +} + +.dark #sourcey .sourcey-changelog-badge-changed { + background: rgb(var(--color-primary-light) / 0.12); + color: rgb(var(--color-primary-light)); +} + +#sourcey .sourcey-changelog-badge-fixed { + background: rgb(245 158 11 / 0.14); + color: rgb(180 83 9); +} + +.dark #sourcey .sourcey-changelog-badge-fixed { + background: rgb(251 191 36 / 0.16); + color: rgb(253 224 71); +} + +#sourcey .sourcey-changelog-badge-removed, +#sourcey .sourcey-changelog-badge-security { + background: rgb(239 68 68 / 0.12); + color: rgb(185 28 28); +} + +.dark #sourcey .sourcey-changelog-badge-removed, +.dark #sourcey .sourcey-changelog-badge-security { + background: rgb(248 113 113 / 0.16); + color: rgb(252 165 165); +} + +#sourcey .sourcey-changelog-badge-deprecated, +#sourcey .sourcey-changelog-badge-other { + background: rgb(var(--color-gray-100)); + color: rgb(var(--color-gray-600)); +} + +.dark #sourcey .sourcey-changelog-badge-deprecated, +.dark #sourcey .sourcey-changelog-badge-other { + background: rgb(255 255 255 / 0.08); + color: rgb(var(--color-gray-300)); +} + +/* Tip - green */ +#sourcey .callout-tip { + border-left-color: #22c55e; +} +.dark #sourcey .callout-tip { + border-left-color: #4ade80; +} +#sourcey .callout-tip .callout-title { + color: #22c55e; +} +.dark #sourcey .callout-tip .callout-title { + color: #4ade80; +} + +/* Info - violet */ +#sourcey .callout-info { + border-left-color: #8b5cf6; +} +.dark #sourcey .callout-info { + border-left-color: #a78bfa; +} +#sourcey .callout-info .callout-title { + color: #8b5cf6; +} +.dark #sourcey .callout-info .callout-title { + color: #a78bfa; +} + +/* ── Directive Tabs (:::tabs, :::code-group) ───────────────────────── */ + +#sourcey .directive-tabs { + margin: 1.25rem 0; + border: 1px solid rgb(var(--color-stone-950) / 0.1); + border-radius: var(--radius); + overflow: hidden; +} +.dark #sourcey .directive-tabs { + border-color: rgb(255 255 255 / 0.1); +} + +#sourcey .directive-tab-bar { + display: flex; + gap: 0; + border-bottom: 1px solid rgb(var(--color-stone-200)); + background: rgb(var(--color-stone-50)); + padding: 0 0.25rem; +} +.dark #sourcey .directive-tab-bar { + border-bottom-color: rgb(255 255 255 / 0.06); + background: rgb(var(--color-code-block-dark)); +} + +#sourcey .directive-tab { + position: relative; + padding: 0.625rem 1rem; + font-size: 0.8125rem; + font-weight: 500; + color: rgb(var(--color-stone-500)); + background: transparent; + border: none; + cursor: pointer; + transition: color 0.15s; +} +#sourcey .directive-tab:hover { + color: rgb(var(--color-gray-900)); +} +.dark #sourcey .directive-tab:hover { + color: rgb(var(--color-gray-300)); +} + +#sourcey .directive-tab.active { + color: rgb(var(--color-primary-ink)); +} +.dark #sourcey .directive-tab.active { + color: rgb(var(--color-primary-light)); +} + +#sourcey .directive-tab.active::after { + content: ""; + position: absolute; + right: 0.5rem; + bottom: -1px; + left: 0.5rem; + height: 2px; + border-radius: 9999px; + background: rgb(var(--color-primary)); +} +.dark #sourcey .directive-tab.active::after { + background: rgb(var(--color-primary-light)); +} + +#sourcey .directive-tab-panel { + display: none; + padding: 1rem 1.25rem; +} + +#sourcey .directive-tab-panel.active { + display: block; +} + +/* Code group: tighter padding, code blocks fill the panel */ +#sourcey .directive-code-group .directive-tab-panel { + padding: 0; +} + +#sourcey .directive-code-group .directive-tab-panel pre { + margin: 0; + border-radius: 0; +} + +/* Strip nested code block chrome inside tab panels */ +#sourcey .directive-tabs .prose-code-block { + border: none; + border-radius: 0; + margin: 0; +} + +#sourcey .directive-tabs .prose-code-block .prose-code-copy { + display: none; +} + +/* ── Mobile navigation drawer (dialog) ────────────────────────────── */ + +.mobile-nav-dialog { + padding: 0; + border: none; + max-width: 20rem; + width: 80%; + height: 100%; + max-height: 100%; + margin: 0; + overflow-y: auto; + font-family: var(--font-sans); + font-size: 0.875rem; + line-height: 1.5rem; + background: rgb(var(--color-background-light)); + color: rgb(var(--color-gray-500)); +} +.mobile-nav-dialog[open] { + display: flex; + flex-direction: column; +} +.dark .mobile-nav-dialog { + background: rgb(var(--color-background-dark)); + color: rgb(var(--color-gray-400)); +} +.mobile-nav-dialog::backdrop { + background: rgb(0 0 0 / 0.25); + backdrop-filter: blur(2px); +} +.mobile-nav-dialog[open] { + animation: drawer-slide-in 0.2s ease-out; +} +.mobile-nav-dialog[open]::backdrop { + animation: drawer-fade-in 0.2s ease-out; +} + +/* ── Drawer group dropdown ─────────────────────────────────────────── */ + +.drawer-dropdown { + position: relative; +} + +.drawer-dropdown-trigger { + position: relative; + z-index: 11; + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.5rem; + width: 100%; + padding: 0.625rem 1.125rem; + border-radius: var(--radius, 0.5rem); + font-size: 1rem; + font-weight: 600; + font-family: var(--font-sans); + color: rgb(var(--color-gray-900)); + background: rgb(var(--color-background-light)); + border: none; + box-shadow: inset 0 0 0 1px rgb(var(--color-gray-200)); + cursor: pointer; + text-align: left; +} +.dark .drawer-dropdown-trigger { + color: rgb(var(--color-gray-200)); + background: rgb(var(--color-background-dark)); + box-shadow: inset 0 0 0 1px rgb(var(--color-gray-600)); +} +.drawer-dropdown-trigger[aria-expanded="true"] { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + box-shadow: + inset 1px 0 0 rgb(var(--color-gray-200)), + inset -1px 0 0 rgb(var(--color-gray-200)), + inset 0 1px 0 rgb(var(--color-gray-200)); +} +.dark .drawer-dropdown-trigger[aria-expanded="true"] { + box-shadow: + inset 1px 0 0 rgb(var(--color-gray-600)), + inset -1px 0 0 rgb(var(--color-gray-600)), + inset 0 1px 0 rgb(var(--color-gray-600)); +} + +.drawer-dropdown-chevron { + color: rgb(var(--color-gray-400)); + transition: transform 0.15s ease; + flex-shrink: 0; +} +.drawer-dropdown-trigger[aria-expanded="true"] .drawer-dropdown-chevron { + transform: rotate(180deg); +} + +.drawer-dropdown-list { + position: absolute; + top: 100%; + left: 0; + right: 0; + z-index: 10; + list-style: none; + margin: 0; + padding: 0.375rem 0; + border-radius: 0 0 var(--radius, 0.5rem) var(--radius, 0.5rem); + background: rgb(var(--color-background-light)); + border: none; + box-shadow: + inset 1px 0 0 rgb(var(--color-gray-200)), + inset -1px 0 0 rgb(var(--color-gray-200)), + inset 0 -1px 0 rgb(var(--color-gray-200)), + 0 6px 16px rgb(0 0 0 / 0.08); +} +.dark .drawer-dropdown-list { + background: rgb(var(--color-background-dark)); + box-shadow: + inset 1px 0 0 rgb(var(--color-gray-600)), + inset -1px 0 0 rgb(var(--color-gray-600)), + inset 0 -1px 0 rgb(var(--color-gray-600)), + 0 6px 16px rgb(0 0 0 / 0.3); +} + +.drawer-dropdown-item { + display: block; + width: 100%; + padding: 0.5rem 1.125rem; + font-size: 1rem; + font-family: var(--font-sans); + text-align: left; + color: rgb(var(--color-gray-600)); + background: none; + border: none; + cursor: pointer; +} +.drawer-dropdown-item:hover { + background: rgb(var(--color-gray-50)); +} +.dark .drawer-dropdown-item { + color: rgb(var(--color-gray-400)); +} +.dark .drawer-dropdown-item:hover { + background: rgb(var(--color-gray-800)); +} +.drawer-dropdown-item.active { + color: rgb(var(--color-primary-ink)); + font-weight: 500; +} +.dark .drawer-dropdown-item.active { + color: rgb(var(--color-primary-light)); +} + +/* Drawer nav items - larger touch targets */ +#sourcey .mobile-nav-dialog .nav-link, +#sourcey .mobile-nav-dialog .nav-link:hover, +#sourcey .mobile-nav-dialog .nav-link.active { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.mobile-nav-dialog ul { + display: flex; + flex-direction: column; + gap: 0.125rem; +} + +@keyframes drawer-slide-in { + from { + transform: translateX(-100%); + } + to { + transform: translateX(0); + } +} +@keyframes drawer-fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +/* ── Code group cards (API right-hand panels) ─────────────────────── */ + +#sourcey .code-group { + position: relative; + display: flex; + flex-direction: column; + /* Visible so an open header dropdown menu is not clipped by the card; the + code body's rounded corners are clipped by .code-card-body instead. */ + overflow: visible; + border-radius: var(--radius); + border: 1px solid rgb(var(--color-stone-950) / 0.1); +} +.dark #sourcey .code-group { + border-color: rgb(255 255 255 / 0.1); +} + +#sourcey .code-group > div:first-child { + background: rgb(var(--color-stone-50)); + border-top-left-radius: var(--radius); + border-top-right-radius: var(--radius); +} +.dark #sourcey .code-group > div:first-child { + background: rgb(255 255 255 / 0.03); +} + +/* Clips the code panels' rounded bottom corners now that the card itself does + not clip. Horizontal code scrolling stays on the inner body element. */ +#sourcey .code-card-body { + overflow: hidden; + border-bottom-left-radius: var(--radius); + border-bottom-right-radius: var(--radius); +} + +#sourcey .code-lang-menu { + max-height: min(18rem, calc(100vh - var(--header-height, 0px) - 2rem)); + overflow-y: auto; + overscroll-behavior: contain; +} + +/* ── Print/PDF output ─────────────────────────────────────────────── */ + +@media print { + @page { + margin: 0.7in; + } + + html, + body, + #sourcey, + #sourcey #page, + #sourcey #docs { + background: #fff !important; + color: #111827 !important; + } + + #sourcey #page::before, + #sourcey #navbar, + #sourcey #toc, + #sourcey #search-dialog, + #sourcey .mobile-nav-dialog, + #sourcey .copy-btn, + #sourcey .prose-code-copy, + #sourcey .code-lang-dropdown { + display: none !important; + } + + #sourcey .max-w-\[92rem\], + #sourcey .max-w-3xl { + max-width: none !important; + margin: 0 !important; + padding: 0 !important; + } + + #sourcey #docs { + padding-top: 0 !important; + } + + #sourcey #docs > .flex, + #sourcey #docs [class*="lg:flex-row"], + #sourcey #docs [class*="xl:flex-row"] { + display: block !important; + } + + #sourcey #content-area { + width: 100% !important; + max-width: none !important; + margin: 0 !important; + padding: 0 !important; + } + + #sourcey #sidebar { + display: block !important; + position: static !important; + inset: auto !important; + width: auto !important; + margin: 0 0 1.5rem !important; + padding: 0 0 1rem !important; + border-bottom: 1px solid #e5e7eb; + } + + #sourcey #sidebar > div { + position: static !important; + inset: auto !important; + overflow: visible !important; + padding: 0 !important; + } + + #sourcey #sidebar .sticky { + display: none !important; + } + + #sourcey #sidebar #nav::before { + content: "Table of Contents"; + display: block; + margin: 0 0 0.75rem; + font-size: 0.875rem; + font-weight: 700; + color: #111827; + } + + #sourcey #sidebar .nav-group-label, + #sourcey #sidebar .nav-link { + color: #111827 !important; + background: transparent !important; + } + + #sourcey #sidebar .nav-link { + padding: 0.125rem 0 !important; + } + + #sourcey #docs article aside { + display: none !important; + } + + #sourcey #docs [class*="lg:hidden"], + #sourcey #docs [class*="xl:hidden"] { + display: block !important; + } + + #sourcey .code-group, + #sourcey .prose-code-block, + #sourcey .param-item, + #sourcey .schema-expandable, + #sourcey .sourcey-changelog-version { + break-inside: avoid; + } + + #sourcey .code-group, + #sourcey .prose-code-block, + #sourcey .prose-code-content, + #sourcey .code-card-body, + #sourcey .code-card-body > div, + #sourcey .code-card-body .font-mono { + background: #fff !important; + color: #111827 !important; + } + + #sourcey a { + color: #111827 !important; + text-decoration: underline; + } +} + +/* ── Selection ─────────────────────────────────────────────────────── */ + +#sourcey ::selection { + background: rgb(var(--color-primary) / 0.12); +} + +/* ── Search Dialog ────────────────────────────────────────────────── */ + +#sourcey #search-dialog { + display: none; + position: fixed; + inset: 0; + z-index: 500; + background: transparent; +} + +#sourcey #search-dialog.open { + display: block; +} + +#sourcey .search-dialog-inner { + position: absolute; + background: rgb(var(--color-background-light)); + border-radius: var(--radius); + border: 1px solid rgb(var(--color-gray-200) / 0.7); + box-shadow: 0 8px 32px rgb(var(--color-overlay) / 0.12); + overflow: hidden; +} +.dark #sourcey .search-dialog-inner { + background: rgb(var(--color-gray-900)); + border-color: rgb(var(--color-gray-700) / 0.5); + box-shadow: 0 8px 32px rgb(var(--color-overlay) / 0.4); +} + +#sourcey .search-input-row { + display: flex; + align-items: center; + gap: 0.625rem; + padding: 0.75rem 1rem; + border-bottom: 1px solid rgb(var(--color-gray-200)); +} +.dark #sourcey .search-input-row { + border-bottom-color: rgb(var(--color-gray-800)); +} + +#sourcey .search-input-icon { + width: 1.125rem; + height: 1.125rem; + flex-shrink: 0; + color: rgb(var(--color-gray-400)); +} + +#sourcey #search-input { + width: 100%; + border: none; + font-family: var(--font-sans); + font-size: 0.9375rem; + color: rgb(var(--color-gray-900)); + background: transparent; + outline: none; +} +.dark #sourcey #search-input { + color: rgb(var(--color-gray-100)); +} + +#sourcey #search-input::placeholder { + color: rgb(var(--color-gray-400)); +} + +#sourcey #search-results { + max-height: 50vh; + overflow-y: auto; + padding: 0.25rem; +} + +#sourcey .search-category { + padding: 0.5rem 0.75rem 0.25rem; + font-size: 0.6875rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + color: rgb(var(--color-gray-400)); +} + +#sourcey .search-footer { + display: flex; + align-items: center; + gap: 1rem; + padding: 0.5rem 0.75rem; + border-top: 1px solid rgb(var(--color-gray-200)); + font-size: 0.6875rem; + color: rgb(var(--color-gray-400)); +} +.dark #sourcey .search-footer { + border-top-color: rgb(var(--color-gray-800)); +} + +#sourcey .search-footer-hint { + display: flex; + align-items: center; + gap: 0.25rem; +} + +#sourcey .search-footer kbd, +#sourcey #search-open kbd { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 1.25rem; + height: 1.125rem; + padding: 0 0.25rem; + font-family: var(--font-sans); + font-size: 0.625rem; + font-weight: 500; + border-radius: 0.25rem; + border: 1px solid rgb(var(--color-gray-200)); + background: rgb(var(--color-gray-50)); + color: rgb(var(--color-gray-500)); +} +.dark #sourcey .search-footer kbd, +.dark #sourcey #search-open kbd { + border-color: rgb(var(--color-gray-700)); + background: rgb(var(--color-gray-800)); + color: rgb(var(--color-gray-400)); +} + +#sourcey .search-result { + display: flex; + align-items: baseline; + gap: 0.5rem; + padding: 0.5rem 0.75rem; + text-decoration: none; + color: rgb(var(--color-gray-700)); + border-radius: 0.375rem; + cursor: pointer; + transition: background 0.1s; +} +.dark #sourcey .search-result { + color: rgb(var(--color-gray-400)); +} + +#sourcey .search-result:hover, +#sourcey .search-result.active { + background: rgb(var(--color-primary) / 0.06); + color: rgb(var(--color-gray-900)); +} +.dark #sourcey .search-result:hover, +.dark #sourcey .search-result.active { + background: rgb(var(--color-primary-light) / 0.08); + color: rgb(var(--color-gray-200)); +} + +#sourcey .search-result-main { + display: flex; + align-items: baseline; + gap: 0.375rem; + flex: 1; + min-width: 0; +} + +#sourcey .search-result-method { + display: inline-flex; + align-items: center; + padding: 0.125rem 0.375rem; + font-size: 0.625rem; + font-weight: 700; + line-height: 1; + letter-spacing: 0.04em; + text-transform: uppercase; + white-space: nowrap; + border: 1px solid transparent; + border-radius: 3px; + color: rgb(var(--color-background-light)); + flex-shrink: 0; +} + +#sourcey .search-result-method.method-get { + background: var(--method-get); +} +#sourcey .search-result-method.method-post { + background: var(--method-post); +} +#sourcey .search-result-method.method-put { + background: var(--method-put); +} +#sourcey .search-result-method.method-delete { + background: var(--method-delete); +} +#sourcey .search-result-method.method-patch { + background: var(--method-patch); +} +#sourcey .search-result-method.method-tool { + background: var(--method-tool); +} +#sourcey .search-result-method.method-resource { + background: var(--method-resource); +} +#sourcey .search-result-method.method-prompt { + background: var(--method-prompt); +} + +#sourcey .search-result-path { + font-family: var(--font-mono); + font-size: 0.8125rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#sourcey .search-result-summary { + font-size: 0.8125rem; + color: rgb(var(--color-gray-500)); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#sourcey .search-result-tag { + font-size: 0.6875rem; + color: rgb(var(--color-gray-400)); + white-space: nowrap; + flex-shrink: 0; +} + +#sourcey .search-loading { + padding: 1rem; + color: rgb(var(--color-gray-500)); + font-size: 0.8125rem; +} + +/* ── Godoc rendering ─────────────────────────────────────────────── */ + +#sourcey .godoc-import, +#sourcey .godoc-import-path { + font-size: 0.8125rem; + color: rgb(var(--color-gray-500)); + margin: 0.25rem 0 1.5rem; +} + +#sourcey .godoc-import code, +#sourcey .godoc-import-path code { + font-family: var(--font-mono); + background: rgba(var(--color-gray-100), 0.6); + padding: 0.125rem 0.375rem; + border-radius: 3px; +} + +#sourcey .godoc-source { + margin: -0.25rem 0 0.625rem; + font-size: 0.75rem; + color: rgb(var(--color-gray-500)); +} + +#sourcey .godoc-source a { + color: inherit; + text-decoration: none; +} + +#sourcey .godoc-source a:hover { + color: rgb(var(--color-primary-ink)); +} + +#sourcey .godoc-toc { + margin: 1.5rem 0 2.5rem; + padding: 0.875rem 1rem; + border: 1px solid rgb(var(--color-gray-200)); + border-radius: 6px; + background: rgba(var(--color-gray-50), 0.5); +} + +#sourcey .godoc-toc h4 { + margin: 0 0 0.5rem; + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + color: rgb(var(--color-gray-500)); +} + +#sourcey .godoc-toc ul { + list-style: none; + margin: 0; + padding: 0; + font-size: 0.8125rem; +} + +#sourcey .godoc-toc li { + margin: 0.125rem 0; +} + +#sourcey .godoc-toc li.godoc-toc-sub { + padding-left: 1rem; + font-family: var(--font-mono); + font-size: 0.75rem; + color: rgb(var(--color-gray-600)); +} + +#sourcey .godoc-toc a { + color: inherit; + text-decoration: none; + border-bottom: 1px dotted transparent; +} + +#sourcey .godoc-toc a:hover { + color: rgb(var(--color-primary)); + border-bottom-color: currentColor; +} + +#sourcey .godoc-symbol { + font-family: var(--font-mono); + font-size: 0.95rem; + font-weight: 600; + margin: 1.75rem 0 0.5rem; + color: rgb(var(--color-gray-900)); + scroll-margin-top: 5rem; +} + +#sourcey .godoc-doc { + margin: 0.5rem 0 0.75rem; + color: rgb(var(--color-gray-700)); + font-size: 0.9375rem; + line-height: 1.65; +} + +#sourcey .godoc-doc p:first-child { + margin-top: 0; +} + +#sourcey .godoc-doc p:last-child { + margin-bottom: 0; +} + +#sourcey .godoc-value, +#sourcey .godoc-func, +#sourcey .godoc-type { + margin: 1rem 0 1.5rem; + scroll-margin-top: 5rem; +} + +#sourcey .godoc-type { + border-top: 1px solid rgb(var(--color-gray-200)); + padding-top: 1.25rem; + margin-top: 2rem; +} + +#sourcey .godoc-anchor { + display: block; + height: 0; + scroll-margin-top: 5rem; +} + +#sourcey .godoc-fields { + margin: 0.75rem 0 1rem; + padding: 0; + border: 1px solid rgb(var(--color-gray-200)); + border-radius: 6px; + background: rgba(var(--color-gray-50), 0.4); +} + +#sourcey .godoc-fields > summary { + cursor: pointer; + padding: 0.5rem 0.875rem; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + color: rgb(var(--color-gray-600)); + list-style: none; +} + +#sourcey .godoc-fields > summary::-webkit-details-marker { + display: none; +} + +#sourcey .godoc-fields > ul { + list-style: none; + margin: 0; + padding: 0; + border-top: 1px solid rgb(var(--color-gray-200)); +} + +#sourcey .godoc-field { + padding: 0.625rem 0.875rem; + border-bottom: 1px solid rgb(var(--color-gray-200)); + font-size: 0.875rem; +} + +#sourcey .godoc-field:last-child { + border-bottom: none; +} + +#sourcey .godoc-field-sig { + font-family: var(--font-mono); + font-size: 0.8125rem; + font-weight: 600; + color: rgb(var(--color-gray-900)); + background: transparent; + padding: 0; +} + +#sourcey .godoc-field-type { + font-weight: 400; + color: rgb(var(--color-gray-700)); +} + +#sourcey .godoc-tag { + font-family: var(--font-mono); + font-size: 0.75rem; + color: rgb(var(--color-gray-500)); + background: transparent; + padding: 0; + margin-left: 0.5rem; +} + +#sourcey .godoc-field-doc { + margin-top: 0.25rem; + font-size: 0.8125rem; + color: rgb(var(--color-gray-600)); + line-height: 1.55; +} + +#sourcey .godoc-example { + margin: 0.75rem 0 1.25rem; + padding: 0; + border: 1px solid rgb(var(--color-gray-200)); + border-radius: 6px; + background: rgba(var(--color-gray-50), 0.4); +} + +#sourcey .godoc-example > summary { + cursor: pointer; + padding: 0.5rem 0.875rem; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + color: rgb(var(--color-gray-600)); + list-style: none; +} + +#sourcey .godoc-example > summary::-webkit-details-marker { + display: none; +} + +#sourcey .godoc-example > summary::before { + content: "▸ "; + color: rgb(var(--color-gray-400)); + margin-right: 0.25rem; +} + +#sourcey .godoc-example[open] > summary::before { + content: "▾ "; +} + +#sourcey .godoc-example > pre, +#sourcey .godoc-example > .godoc-doc, +#sourcey .godoc-example > p { + margin: 0.5rem 0.875rem; +} + +#sourcey .godoc-example-output-label { + margin: 0.5rem 0.875rem 0; + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + color: rgb(var(--color-gray-500)); +} + +#sourcey .godoc-func .godoc-symbol, +#sourcey .godoc-type .godoc-symbol { + word-break: break-word; +} + +/* ── Rust API rendering (rustdoc adapter) ────────────────────────── */ +/* Shared API primitives (api-*) introduced for rustdoc and reusable + by godoc/doxygen in a follow-on retrofit. Class names mirror + rustdoc's DOM so deep-links from a rustdoc URL line up with + sourcey output. */ + +#sourcey .rust-item { + border-top: 1px solid rgb(var(--color-gray-200)); + padding-top: 1rem; + margin-top: 1.25rem; +} +.dark #sourcey .rust-item { + border-top-color: rgb(var(--color-gray-800)); +} + +#sourcey .code-header, +#sourcey .rust-signature { + font-family: + ui-monospace, "SF Mono", "Cascadia Code", Consolas, "Liberation Mono", Menlo, monospace; + font-size: 0.9375rem; + color: rgb(var(--color-gray-900)); + white-space: pre-wrap; + word-break: break-word; +} +.dark #sourcey .code-header, +.dark #sourcey .rust-signature { + color: rgb(var(--color-gray-100)); +} + +#sourcey .rust-signature .kw { + color: rgb(var(--color-rose-600)); + font-weight: 600; +} +.dark #sourcey .rust-signature .kw { + color: rgb(var(--color-rose-300)); +} + +#sourcey .rust-signature .ident { + color: rgb(var(--color-indigo-600)); +} +.dark #sourcey .rust-signature .ident { + color: rgb(var(--color-indigo-300)); +} + +#sourcey .rust-signature .lifetime { + color: rgb(var(--color-amber-700)); + font-style: italic; +} +.dark #sourcey .rust-signature .lifetime { + color: rgb(var(--color-amber-300)); +} + +#sourcey .api-rightside, +#sourcey .rightside { + float: right; + font-size: 0.8125rem; + color: rgb(var(--color-gray-500)); +} + +#sourcey .api-since, +#sourcey .since { + font-feature-settings: "tnum"; +} + +#sourcey .api-srclink, +#sourcey .srclink { + color: rgb(var(--color-indigo-600)); + text-decoration: none; +} +#sourcey .api-srclink:hover, +#sourcey .srclink:hover { + text-decoration: underline; +} +.dark #sourcey .api-srclink, +.dark #sourcey .srclink { + color: rgb(var(--color-indigo-300)); +} + +#sourcey .docblock, +#sourcey .rust-doc { + color: rgb(var(--color-gray-700)); + margin-top: 0.5rem; +} +.dark #sourcey .docblock, +.dark #sourcey .rust-doc { + color: rgb(var(--color-gray-300)); +} + +#sourcey .stab, +#sourcey .api-stab { + display: block; + margin: 0.5rem 0; + padding: 0.5rem 0.75rem; + border-radius: 0.375rem; + font-size: 0.875rem; + border: 1px solid transparent; +} +#sourcey .stab.unstable, +#sourcey .api-stab-unstable { + background-color: rgb(var(--color-amber-50)); + border-color: rgb(var(--color-amber-200)); + color: rgb(var(--color-amber-900)); +} +#sourcey .stab.deprecated, +#sourcey .api-stab-deprecated { + background-color: rgb(var(--color-rose-50)); + border-color: rgb(var(--color-rose-200)); + color: rgb(var(--color-rose-900)); +} +#sourcey .stab.portability, +#sourcey .api-stab-portability { + background-color: rgb(var(--color-emerald-50)); + border-color: rgb(var(--color-emerald-200)); + color: rgb(var(--color-emerald-900)); +} +.dark #sourcey .stab.unstable, +.dark #sourcey .api-stab-unstable { + background-color: rgba(251, 191, 36, 0.08); + border-color: rgba(251, 191, 36, 0.25); + color: rgb(var(--color-amber-200)); +} +.dark #sourcey .stab.deprecated, +.dark #sourcey .api-stab-deprecated { + background-color: rgba(244, 63, 94, 0.08); + border-color: rgba(244, 63, 94, 0.25); + color: rgb(var(--color-rose-200)); +} +.dark #sourcey .stab.portability, +.dark #sourcey .api-stab-portability { + background-color: rgba(16, 185, 129, 0.08); + border-color: rgba(16, 185, 129, 0.25); + color: rgb(var(--color-emerald-200)); +} + +/* Collapsible trait-impl block. Chevron pattern mirrors .godoc-example so the + disclosure reads the same across adapters. */ +#sourcey .api-toggle { + margin: 0.75rem 0; + border: 1px solid rgb(var(--color-gray-200)); + border-radius: 6px; + background: rgba(var(--color-gray-50), 0.4); +} +.dark #sourcey .api-toggle { + border-color: rgb(var(--color-gray-800)); +} +#sourcey .api-toggle > summary { + cursor: pointer; + padding: 0.5rem 0.875rem; + list-style: none; + font-family: var(--font-mono); + font-size: 0.8125rem; + color: rgb(var(--color-gray-700)); +} +.dark #sourcey .api-toggle > summary { + color: rgb(var(--color-gray-300)); +} +#sourcey .api-toggle > summary::-webkit-details-marker { + display: none; +} +#sourcey .api-toggle > summary::before { + content: "▸ "; + color: rgb(var(--color-gray-400)); + margin-right: 0.25rem; +} +#sourcey .api-toggle[open] > summary::before { + content: "▾ "; +} +/* The impl header lives inside the summary; keep it inline with the chevron + and strip heading margins. */ +#sourcey .api-toggle > summary .rust-impl-header { + display: inline; + margin: 0; + font-size: inherit; +} +#sourcey .api-toggle-body { + padding: 0.25rem 0.875rem 0.5rem; + border-top: 1px solid rgb(var(--color-gray-200)); +} +.dark #sourcey .api-toggle-body { + border-top-color: rgb(var(--color-gray-800)); +} +/* Marker / auto / blanket trait impls: a quiet list, not expandable boxes. */ +#sourcey .rust-impl-rows { + margin: 0.5rem 0 0.75rem; +} +#sourcey .rust-impl-row { + padding: 0.2rem 0; +} +#sourcey .rust-impl-row .rust-impl-header { + display: inline; + margin: 0; + font-size: 0.8125rem; + font-weight: 400; + color: rgb(var(--color-gray-600)); +} +.dark #sourcey .rust-impl-row .rust-impl-header { + color: rgb(var(--color-gray-400)); +} + +#sourcey .anchor, +#sourcey .api-anchor { + margin-left: 0.4rem; + color: rgb(var(--color-gray-400)); + text-decoration: none; + opacity: 0; + transition: opacity 0.1s ease; +} +#sourcey .section-header:hover .anchor, +#sourcey .section-header:hover .api-anchor, +#sourcey .code-header:hover .anchor, +#sourcey .code-header:hover .api-anchor { + opacity: 1; +} + +/* Inherent-impl methods and trait members render inline as their own sections. + Code (signatures, doctests) flows through the shared Shiki code block, so no + bespoke code styling lives here. */ +#sourcey .rust-member { + margin: 0.75rem 0; +} +#sourcey .rust-method-header { + margin: 0.5rem 0 0.25rem; +} +#sourcey .rust-doctest { + margin: 0.75rem 0; +} + +#sourcey .rust-doctest-badges { + display: flex; + flex-wrap: wrap; + gap: 0.25rem; + margin-bottom: 0.25rem; +} +#sourcey .rust-doctest-badge { + display: inline-block; + padding: 0.05rem 0.4rem; + font-size: 0.6875rem; + font-weight: 600; + border-radius: 0.25rem; + background-color: rgb(var(--color-gray-100)); + color: rgb(var(--color-gray-700)); + text-transform: lowercase; + letter-spacing: 0.02em; +} +.dark #sourcey .rust-doctest-badge { + background-color: rgb(var(--color-gray-800)); + color: rgb(var(--color-gray-300)); +} +#sourcey .rust-doctest-badge-should_panic, +#sourcey .rust-doctest-badge-compile_fail { + background-color: rgb(var(--color-rose-100)); + color: rgb(var(--color-rose-800)); +} +#sourcey .rust-doctest-badge-no_run, +#sourcey .rust-doctest-badge-ignore { + background-color: rgb(var(--color-amber-100)); + color: rgb(var(--color-amber-800)); +} + +#sourcey .rust-doctest-controls { + display: flex; + gap: 0.5rem; + margin-top: 0.5rem; + font-size: 0.8125rem; +} +#sourcey .rust-doctest-run, +#sourcey .rust-doctest-toggle-hidden { + cursor: pointer; + padding: 0.2rem 0.6rem; + border-radius: 0.375rem; + border: 1px solid rgb(var(--color-gray-300)); + background-color: rgb(var(--color-white)); + color: rgb(var(--color-gray-800)); + text-decoration: none; + line-height: 1; +} +#sourcey .rust-doctest-run:hover, +#sourcey .rust-doctest-toggle-hidden:hover { + background-color: rgb(var(--color-gray-50)); +} +.dark #sourcey .rust-doctest-run, +.dark #sourcey .rust-doctest-toggle-hidden { + background-color: rgb(var(--color-gray-900)); + border-color: rgb(var(--color-gray-700)); + color: rgb(var(--color-gray-200)); +} + +/* On the aggregated doctests page the code block already renders as a card, so + the section itself stays borderless. Just space the entries and accent the + heading so they don't read as cards within cards. */ +#sourcey .rust-doctests-index .rust-doctest { + margin: 1.5rem 0; +} +#sourcey .rust-doctests-index .rust-doctest > h3 { + padding-left: 0.625rem; + border-left: 3px solid rgb(var(--color-emerald-500)); +} +.dark #sourcey .rust-doctests-index .rust-doctest > h3 { + border-left-color: rgb(var(--color-emerald-400)); +} diff --git a/docs/sourcey.js b/docs/sourcey.js new file mode 100644 index 00000000..d0dc6457 --- /dev/null +++ b/docs/sourcey.js @@ -0,0 +1 @@ +(function(){(function(){function e(e){try{return window.sessionStorage.getItem(e)}catch{return null}}function t(e,t){try{window.sessionStorage.setItem(e,t)}catch{}}function n(e){try{window.sessionStorage.removeItem(e)}catch{}}function r(e){var t=(e||`/`).replace(/\/+$/,``)||`/`;return t=t.replace(/\/index(?:\.html)?$/,``)||`/`,t=t.replace(/\.html$/,``),t||`/`}function i(e){if(!e.length)return null;for(var t=e.map(function(e){return r(e).split(`/`).filter(Boolean)}),n=[],i=0;i=document.body.scrollHeight-10){var l=c[c.length-1];i=n.length?l.getAttribute(`data-traverse-target`):l.id}i&&d(i)}}var _=!1;window.addEventListener(`scroll`,function(){_||(_=!0,requestAnimationFrame(function(){g(),_=!1}))},{passive:!0});var v=window.location.hash.slice(1)||new URLSearchParams(window.location.search).get(`target`);v&&document.getElementById(v)?(d(v),requestAnimationFrame(function(){f(v,`instant`)})):g(),window.addEventListener(`hashchange`,function(){var e=window.location.hash.slice(1);e&&(d(e,!0),f(e,`smooth`))})}window.location.hash.slice(1)||new URLSearchParams(window.location.search).get(`target`)?requestAnimationFrame(e):`requestIdleCallback`in window?window.requestIdleCallback(e,{timeout:250}):window.addEventListener(`load`,e,{once:!0})})(),(function(){function e(){var e=null;document.addEventListener(`click`,function(e){var r=e.target.closest(`.code-lang-trigger`);if(document.querySelectorAll(`.code-lang-menu`).forEach(function(e){if(!r||!e.parentElement.contains(r)){t(e);var n=e.parentElement.querySelector(`.code-lang-trigger`);n&&n.setAttribute(`aria-expanded`,`false`)}}),r){e.stopPropagation();var i=r.nextElementSibling;if(i){var a=!i.classList.contains(`hidden`);a?t(i):(i.classList.remove(`hidden`),n(r,i)),r.setAttribute(`aria-expanded`,a?`false`:`true`)}}}),document.addEventListener(`click`,function(n){var r=n.target.closest(`.code-lang-option`);if(r){var a=r.closest(`.code-lang-dropdown`),o=!!(a&&a.hasAttribute(`data-lang-sync`)),s=r.textContent.trim(),c=r.closest(`.code-lang-menu`);if(c){t(c);var l=c.parentElement.querySelector(`.code-lang-trigger`);l&&l.setAttribute(`aria-expanded`,`false`)}var u=window.scrollY;if(i(r),o&&s!==e){e=s;var d=r.closest(`.code-group`);document.querySelectorAll(`.code-group`).forEach(function(e){e===d||!e.querySelector(`.code-lang-dropdown[data-lang-sync]`)||e.querySelectorAll(`.code-lang-option`).forEach(function(e){e.textContent.trim()===s&&i(e)})})}window.scrollTo(0,u)}});function t(e){e.classList.add(`hidden`),e.style.position=``,e.style.top=``,e.style.right=``,e.style.bottom=``,e.style.maxHeight=``}function n(e,t){var n=e.getBoundingClientRect(),r=4,i=8,a=window.innerHeight-n.bottom-i,o=n.top-i,s=a<160&&o>a;t.style.position=`fixed`,t.style.right=Math.max(i,window.innerWidth-n.right)+`px`,t.style.maxHeight=Math.max(96,Math.floor((s?o:a)-r))+`px`,s?(t.style.top=``,t.style.bottom=Math.max(i,window.innerHeight-n.top+r)+`px`):(t.style.bottom=``,t.style.top=Math.min(window.innerHeight-i,n.bottom+r)+`px`)}function r(e){var t=e.closest(`[data-response-dropdown]`);if(t){var n=t.getAttribute(`data-response-dropdown`),r=t.closest(`.code-group`),i=r&&r.querySelector(`.response-panel[data-response-panel="`+n+`"]`);if(i)return i}return e.closest(`.code-lang-scope`)||e.closest(`.code-group`)}function i(e){var t=e.closest(`.code-lang-dropdown`),n=r(e),i=e.getAttribute(`data-lang-index`);if(t){var a=t.querySelector(`.code-lang-label`);t.querySelectorAll(`.code-lang-option`).forEach(function(e){var n=e.getAttribute(`data-lang-index`)===i;if(e.setAttribute(`aria-selected`,n?`true`:`false`),e.className=e.className.replace(/(dark:)?text-\[rgb\([^\]]+\)\]/g,``).trim(),n){e.classList.add(`text-[rgb(var(--color-primary))]`,`dark:text-[rgb(var(--color-primary-light))]`),a&&(a.textContent=e.textContent.trim());var r=t.querySelector(`.code-lang-trigger .code-lang-icon`),o=e.querySelector(`.lang-icon`);r&&o&&(r.innerHTML=o.outerHTML)}else e.classList.add(`text-[rgb(var(--color-stone-600))]`,`dark:text-[rgb(var(--color-stone-400))]`)})}n&&n.querySelectorAll(`.code-lang-panel`).forEach(function(e){e.classList.toggle(`active`,e.getAttribute(`data-lang-panel`)===i)})}document.addEventListener(`click`,function(e){var t=e.target.closest(`.response-tab`);if(t){var n=t.closest(`.response-tabs`),r=t.getAttribute(`data-response-index`),i=window.scrollY;n.querySelectorAll(`.response-tab`).forEach(function(e){var t=e.getAttribute(`data-response-index`)===r;e.classList.toggle(`active`,t),e.setAttribute(`aria-selected`,t?`true`:`false`)}),n.querySelectorAll(`.response-panel`).forEach(function(e){e.classList.toggle(`active`,e.getAttribute(`data-response-panel`)===r)}),n.querySelectorAll(`[data-response-dropdown]`).forEach(function(e){e.classList.toggle(`hidden`,e.getAttribute(`data-response-dropdown`)!==r)}),window.scrollTo(0,i)}}),document.addEventListener(`click`,function(e){var t=e.target.closest(`.copy-btn`);if(t){var n=t.closest(`.code-group`)||t.closest(`.prose-code-block`);if(n){var r=n.querySelectorAll(`.code-lang-panel.active, .response-panel.active`),i=r.length?r[r.length-1]:null,a=i?i.querySelector(`code, .code-block, .font-mono`):n.querySelector(`code, .code-block, .font-mono`);if(a){var o=a.textContent||``;navigator.clipboard.writeText(o).then(function(){t.classList.add(`copied`);var e=t.nextElementSibling;e&&e.classList.contains(`copy-tooltip`)&&(e.textContent=`Copied!`),setTimeout(function(){t.classList.remove(`copied`),e&&e.classList.contains(`copy-tooltip`)&&(e.textContent=`Copy`)},2e3)})}}}}),document.addEventListener(`click`,function(e){var t=e.target.closest(`.rust-doctest-toggle-hidden`);if(t){var n=t.getAttribute(`data-target`),r=t.getAttribute(`data-display`),i=n?document.getElementById(n.replace(/^#/,``)):null,a=r?document.getElementById(r.replace(/^#/,``)):null;!i||!a||(i.hasAttribute(`hidden`)?(i.removeAttribute(`hidden`),a.setAttribute(`hidden`,``),t.textContent=`Hide hidden lines`):(i.setAttribute(`hidden`,``),a.removeAttribute(`hidden`),t.textContent=`Show hidden lines`))}}),document.addEventListener(`keydown`,function(e){e.key===`Escape`&&document.querySelectorAll(`.code-lang-menu`).forEach(function(e){e.classList.add(`hidden`);var t=e.parentElement.querySelector(`.code-lang-trigger`);t&&t.setAttribute(`aria-expanded`,`false`)})}),document.addEventListener(`click`,function(e){var t=e.target.closest(`.directive-tab`);if(t){var n=t.getAttribute(`data-tab-group`),r=t.getAttribute(`data-tab-index`),i=window.scrollY;document.querySelectorAll(`.directive-tab[data-tab-group="`+n+`"]`).forEach(function(e){e.classList.toggle(`active`,e.getAttribute(`data-tab-index`)===r)}),document.querySelectorAll(`.directive-tab-panel[data-tab-group="`+n+`"]`).forEach(function(e){e.classList.toggle(`active`,e.getAttribute(`data-tab-index`)===r)}),window.scrollTo(0,i)}})}`requestIdleCallback`in window?window.requestIdleCallback(e,{timeout:250}):window.addEventListener(`load`,e,{once:!0})})(),(function(){var e=`sourcey-theme`,t=document.getElementById(`theme-toggle`),n=document.documentElement;function r(){var t=localStorage.getItem(e);return t===`dark`||t===`light`?t:`light`}function i(e){e===`dark`?n.classList.add(`dark`):n.classList.remove(`dark`),n.style.colorScheme=e,t&&(t.setAttribute(`aria-label`,e===`dark`?`Switch to light mode`:`Switch to dark mode`),t.setAttribute(`title`,e===`dark`?`Light mode`:`Dark mode`))}i(r()),t&&t.addEventListener(`click`,function(){var t=n.classList.contains(`dark`)?`light`:`dark`;localStorage.setItem(e,t),i(t)})})(),(function(){function e(){var e=document.getElementById(`search-dialog`),t=document.getElementById(`search-input`),n=document.getElementById(`search-results`),r=document.getElementById(`search-open`);if(!e||!t||!n)return;var i=[],a=-1,o=[],s=!1,c=document.querySelector(`meta[name="sourcey-search"]`);function l(e){if(s){e();return}if(!c){s=!0,e();return}var t=c.getAttribute(`content`);fetch(t).then(function(e){return e.json()}).then(function(t){i=t.map(function(e){var t=e.title||``,n=e.qualifiedName||``,r=e.owner||``,i=e.tab||``;return{url:e.url,method:e.method||``,path:e.path||``,title:t,summary:n||t,tag:r||i,content:e.content||``,category:e.category||``,featured:!!e.featured,symbolKind:e.symbolKind||``,owner:r,ownerKind:e.ownerKind||``,namespace:e.namespace||``,qualifiedName:n,titleLower:t.toLowerCase(),pathLower:(e.path||``).toLowerCase(),qualifiedLower:n.toLowerCase(),ownerLower:r.toLowerCase(),searchText:[e.method||``,e.path||``,t,n,r,e.ownerKind||``,e.namespace||``,e.symbolKind||``,e.content||``,i].join(` `).toLowerCase()}}),s=!0,e()}).catch(function(){s=!0,e()})}var u=e.querySelector(`.search-dialog-inner`);function d(){if(!(!r||!u)){var e=r.getBoundingClientRect();u.style.position=`absolute`,u.style.top=e.top-4+`px`;var t=Math.min(e.width*.5,200);u.style.left=e.left-t/2+`px`,u.style.width=e.width+t+`px`,u.style.maxWidth=`none`,u.style.transform=`none`,u.style.margin=`0`}}function f(){d(),e.classList.add(`open`),t.value=``,t.focus(),s?m(``):(n.innerHTML=`
Loading…
`,l(function(){m(``)})),document.addEventListener(`keydown`,b)}function p(){e.classList.remove(`open`),document.removeEventListener(`keydown`,b)}function m(e){var t=e.toLowerCase().trim();if(t){var n=t.split(/\s+/);o=i.map(function(e){return{entry:e,score:h(e,t,n)}}).filter(function(e){return e.score>0});var r={Pages:0,Endpoints:1,Models:2,Functions:3,Types:4,Enums:5,"Enum Values":6,Variables:7,Friends:8,Properties:9,Members:10,Sections:20};o.sort(function(e,t){return t.score===e.score?(r[e.entry.category]||19)-(r[t.entry.category]||19):t.score-e.score}),o=o.map(function(e){return e.entry}).slice(0,50)}else{var s=i.filter(function(e){return e.featured}),c=i.filter(function(e){return!e.featured&&e.category!==`Sections`});o=s.concat(c).slice(0,30)}a=o.length?0:-1,g()}function h(e,t,n){if(!n.every(function(t){return e.searchText.indexOf(t)!==-1}))return 0;var r=t.replace(/\s+/g,``),i=e.qualifiedLower||``,a=e.titleLower||``,o=e.pathLower||``,s=e.ownerLower||``,c=1;return i&&i===r&&(c+=1200),a&&a===t&&(c+=900),o&&o===t&&(c+=850),i&&i.endsWith(`::`+r)&&(c+=780),s&&r===s+`::`+a&&(c+=760),i&&r.indexOf(`::`)!==-1&&i.indexOf(r)!==-1&&(c+=700),a&&a.indexOf(t)===0&&(c+=500),i&&i.indexOf(r)!==-1&&(c+=420),s&&s.indexOf(r)!==-1&&(c+=240),o&&o.indexOf(t)!==-1&&(c+=180),e.content.toLowerCase().indexOf(t)!==-1&&(c+=80),e.category===`Sections`&&(c-=70),e.symbolKind&&(c+=35),e.featured&&(c+=20),c}function g(){for(var e=``,t=``,r=0;r`+_(s)+``,t=s);var c=`search-result`+(r===a?` active`:``),l=i.method?``+i.method+` `+_(i.path)+``:``+_(i.summary)+``,u=i.tag?``+_(i.tag)+``:``,d=i.method&&i.summary?``+_(i.summary)+``:``;e+=`
`+l+d+`
`+u+`
`}n.innerHTML=e;var f=n.querySelector(`.search-result.active`);f&&f.scrollIntoView({block:`nearest`})}function _(e){var t=document.createElement(`span`);return t.textContent=e,t.innerHTML}function v(e){return _(e).replace(/"/g,`"`).replace(/'/g,`'`)}function y(e){if(!(e<0||e>=o.length)){var t=o[e];p(),window.location.href=t.url}}function b(e){if(e.key===`Escape`){p(),e.preventDefault();return}if(e.key===`ArrowDown`){e.preventDefault(),a=Math.min(a+1,o.length-1),g();return}if(e.key===`ArrowUp`){e.preventDefault(),a=Math.max(a-1,0),g();return}if(e.key===`Enter`){e.preventDefault(),a>=0&&y(a);return}}t.addEventListener(`input`,function(){m(t.value)}),n.addEventListener(`click`,function(e){var t=e.target.closest(`.search-result`);t&&(e.preventDefault(),y(parseInt(t.getAttribute(`data-index`),10)))}),r&&r.addEventListener(`click`,f);var x=document.getElementById(`search-open-mobile`);x&&x.addEventListener(`click`,f),document.addEventListener(`keydown`,function(e){(e.ctrlKey||e.metaKey)&&e.key===`k`&&(e.preventDefault(),f()),e.key===`/`&&!S(e.target)&&(e.preventDefault(),f())}),e.addEventListener(`click`,function(t){t.target===e&&p()});function S(e){var t=e.tagName;return t===`INPUT`||t===`TEXTAREA`||t===`SELECT`||e.isContentEditable}}`requestIdleCallback`in window?window.requestIdleCallback(e,{timeout:250}):window.addEventListener(`load`,e,{once:!0})})()})(); \ No newline at end of file diff --git a/index.html b/index.html index f377ec34..556e3559 100644 --- a/index.html +++ b/index.html @@ -1,11 +1,12 @@ - + - \ No newline at end of file + diff --git a/sourcey/README.md b/sourcey/README.md new file mode 100644 index 00000000..0278c0fc --- /dev/null +++ b/sourcey/README.md @@ -0,0 +1,35 @@ +# Sourcey documentation build + +This directory contains the reproducible source for the static documentation +served from `/docs/`. + +The committed `godoc.json` snapshot was generated from +`gopherjs/gopherjs@490705b1d6fc7d5bd9202ac41888e146183328eb`. The Sourcey build uses snapshot +mode, so publishing the committed site does not require a Go toolchain. + +## Build + +From this directory: + +```sh +npm install +npm run build +``` + +The build writes the static site to `../docs/`. Its postbuild step also fixes a +Sourcey 3.6.5 API landing link and normalizes public copy. + +## Refresh the snapshot + +Clone the GopherJS source at the intended commit next to this repository, then +run: + +```sh +sourcey godoc \ + --module ../gopherjs \ + --packages "./..." \ + --exclude "github.com/gopherjs/gopherjs/internal,github.com/gopherjs/gopherjs/tests,github.com/gopherjs/gopherjs/compiler/internal" \ + --out godoc.json +``` + +Update `sourceCommit` in `sourcey.config.ts` and rebuild in the same change. diff --git a/sourcey/godoc.json b/sourcey/godoc.json new file mode 100644 index 00000000..0c50d69d --- /dev/null +++ b/sourcey/godoc.json @@ -0,0 +1,2866 @@ +{ + "schema_version": 1, + "source": "sourcey-godoc", + "module_path": "github.com/gopherjs/gopherjs", + "generated_at": "2026-08-05T18:50:16Z", + "packages": [ + { + "importPath": "github.com/gopherjs/gopherjs", + "name": "main", + "synopsis": "", + "doc": "", + "dir": ".", + "files": [ + "embed.go", + "tool.go" + ], + "consts": [], + "vars": [], + "funcs": [], + "types": [], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/build", + "name": "build", + "synopsis": "Package build implements GopherJS build system.", + "doc": "Package build implements GopherJS build system.\n\nWARNING: This package's API is treated as internal and currently doesn't\nprovide any API stability guarantee, use it at your own risk. If you need a\nstable interface, prefer invoking the gopherjs CLI tool as a subprocess.", + "dir": "build", + "files": [ + "build/build.go", + "build/context.go", + "build/embed.go", + "build/fsutil.go", + "build/vfs.go" + ], + "consts": [], + "vars": [ + { + "name": "DefaultGOROOT", + "doc": "DefaultGOROOT is the default GOROOT value for builds.\n\nIt uses the GOPHERJS_GOROOT environment variable if it is set,\nor else the default GOROOT value of the system Go distribution.", + "declaration": "var DefaultGOROOT = func() string {\n\tif goroot, ok := os.LookupEnv(\"GOPHERJS_GOROOT\"); ok {\n\n\t\treturn goroot\n\t}\n\n\treturn build.Default.GOROOT\n}()", + "position": { + "file": "build/build.go", + "line": 45 + } + } + ], + "funcs": [ + { + "name": "DefaultEnv", + "doc": "DefaultEnv creates a new instance of build Env according to environment\nvariables.\n\nBy default, GopherJS will use GOOS=js GOARCH=ecmascript to build non-standard\nlibrary packages. If GOOS or GOARCH environment variables are set and not\nempty, user-provided values will be used instead. This is done to facilitate\ntransition from the legacy GopherJS behavior, which used native GOOS, and may\nbe removed in future.", + "signature": "func DefaultEnv() Env", + "position": { + "file": "build/context.go", + "line": 46 + }, + "examples": [] + }, + { + "name": "Import", + "doc": "Import returns details about the Go package named by the import path. If the\npath is a local import path naming a package that can be imported using\na standard import path, the returned package will set p.ImportPath to\nthat path.\n\nIn the directory containing the package, .go and .inc.js files are\nconsidered part of the package except for:\n\n - .go files in package documentation\n - files starting with _ or . (likely editor temporary files)\n - files with build constraints not satisfied by the context\n\nIf an error occurs, Import returns a non-nil error and a nil\n*PackageData.", + "signature": "func Import(path string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error)", + "position": { + "file": "build/build.go", + "line": 85 + }, + "examples": [] + }, + { + "name": "ImportDir", + "doc": "ImportDir is like Import but processes the Go package found in the named\ndirectory.", + "signature": "func ImportDir(dir string, mode build.ImportMode, installSuffix string, buildTags []string) (*PackageData, error)", + "position": { + "file": "build/build.go", + "line": 114 + }, + "examples": [] + }, + { + "name": "IsPkgNotFound", + "doc": "IsPkgNotFound returns true if the error was caused by package not found.\n\nUnfortunately, go/build doesn't make use of typed errors, so we have to\nrely on the error message.", + "signature": "func IsPkgNotFound(err error) bool", + "position": { + "file": "build/context.go", + "line": 458 + }, + "examples": [] + }, + { + "name": "NewBuildContext", + "doc": "NewBuildContext creates a build context for building Go packages\nwith GopherJS compiler.\n\nCore GopherJS packages (i.e., \"github.com/gopherjs/gopherjs/js\", \"github.com/gopherjs/gopherjs/nosync\")\nare loaded from gopherjspkg.FS virtual filesystem if not present in GOPATH or\ngo.mod.", + "signature": "func NewBuildContext(installSuffix string, buildTags []string) XContext", + "position": { + "file": "build/build.go", + "line": 60 + }, + "examples": [] + }, + { + "name": "NewSession", + "doc": "NewSession creates a new GopherJS build session.", + "signature": "func NewSession(options *Options) (*Session, error)", + "position": { + "file": "build/build.go", + "line": 865 + }, + "examples": [] + } + ], + "types": [ + { + "name": "Env", + "doc": "Env contains build environment configuration required to define an instance\nof XContext.", + "declaration": "type Env struct {\n\tGOROOT string\n\tGOPATH string\n\n\tGOOS string\n\tGOARCH string\n\n\tBuildTags []string\n\tInstallSuffix string\n}", + "kind": "struct", + "position": { + "file": "build/context.go", + "line": 27 + }, + "fields": [ + { + "name": "GOROOT", + "doc": "", + "type": "string" + }, + { + "name": "GOPATH", + "doc": "", + "type": "string" + }, + { + "name": "GOOS", + "doc": "", + "type": "string" + }, + { + "name": "GOARCH", + "doc": "", + "type": "string" + }, + { + "name": "BuildTags", + "doc": "", + "type": "[]string" + }, + { + "name": "InstallSuffix", + "doc": "", + "type": "string" + } + ], + "methods": [], + "examples": [] + }, + { + "name": "Options", + "doc": "Options controls build process behavior.", + "declaration": "type Options struct {\n\tVerbose bool\n\tQuiet bool\n\tWatch bool\n\tCreateMapFile bool\n\tMapToLocalDisk bool\n\tMinify bool\n\tColor bool\n\tBuildTags []string\n\tTestedPackage string\n\tNoCache bool\n}", + "kind": "struct", + "position": { + "file": "build/build.go", + "line": 672 + }, + "fields": [ + { + "name": "Verbose", + "doc": "", + "type": "bool" + }, + { + "name": "Quiet", + "doc": "", + "type": "bool" + }, + { + "name": "Watch", + "doc": "", + "type": "bool" + }, + { + "name": "CreateMapFile", + "doc": "", + "type": "bool" + }, + { + "name": "MapToLocalDisk", + "doc": "", + "type": "bool" + }, + { + "name": "Minify", + "doc": "", + "type": "bool" + }, + { + "name": "Color", + "doc": "", + "type": "bool" + }, + { + "name": "BuildTags", + "doc": "", + "type": "[]string" + }, + { + "name": "TestedPackage", + "doc": "", + "type": "string" + }, + { + "name": "NoCache", + "doc": "", + "type": "bool" + } + ], + "methods": [ + { + "name": "PrintError", + "doc": "PrintError message to the terminal.", + "signature": "func PrintError(format string, a ...any)", + "position": { + "file": "build/build.go", + "line": 686 + }, + "examples": [] + }, + { + "name": "PrintSuccess", + "doc": "PrintSuccess message to the terminal.", + "signature": "func PrintSuccess(format string, a ...any)", + "position": { + "file": "build/build.go", + "line": 694 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "PackageData", + "doc": "PackageData is an extension of go/build.Package with additional metadata\nGopherJS requires.", + "declaration": "type PackageData struct {\n\t*build.Package\n\tJSFiles []incjs.File\n\t// IsTest is true if the package is being built for running tests.\n\tIsTest bool\n\tSrcModTime time.Time\n\tUpToDate bool\n\t// If true, the package does not have a corresponding physical directory on disk.\n\tIsVirtual bool\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "build/build.go", + "line": 703 + }, + "fields": [ + { + "name": "*build.Package", + "doc": "", + "type": "*build.Package", + "embedded": true + }, + { + "name": "JSFiles", + "doc": "", + "type": "[]incjs.File" + }, + { + "name": "IsTest", + "doc": "IsTest is true if the package is being built for running tests.", + "type": "bool" + }, + { + "name": "SrcModTime", + "doc": "", + "type": "time.Time" + }, + { + "name": "UpToDate", + "doc": "", + "type": "bool" + }, + { + "name": "IsVirtual", + "doc": "If true, the package does not have a corresponding physical directory on disk.", + "type": "bool" + } + ], + "methods": [ + { + "name": "FileModTime", + "doc": "FileModTime returns the most recent modification time of the package's source\nfiles. This includes all .go and .inc.js that would be included in the build,\nbut excludes any dependencies.", + "signature": "func FileModTime() time.Time", + "position": { + "file": "build/build.go", + "line": 723 + }, + "examples": [] + }, + { + "name": "InstallPath", + "doc": "InstallPath returns the path where \"gopherjs install\" command should place the\ngenerated output.", + "signature": "func InstallPath() (string, error)", + "position": { + "file": "build/build.go", + "line": 800 + }, + "examples": [] + }, + { + "name": "InternalBuildContext", + "doc": "InternalBuildContext returns the build context that produced the package.\n\nWARNING: This function is a part of internal API and will be removed in\nfuture.", + "signature": "func InternalBuildContext() *build.Context", + "position": { + "file": "build/build.go", + "line": 761 + }, + "examples": [] + }, + { + "name": "String", + "doc": "", + "signature": "func String() string", + "position": { + "file": "build/build.go", + "line": 716 + }, + "examples": [] + }, + { + "name": "TestPackage", + "doc": "TestPackage returns a variant of the package with \"internal\" tests.", + "signature": "func TestPackage() *PackageData", + "position": { + "file": "build/build.go", + "line": 766 + }, + "examples": [] + }, + { + "name": "XTestPackage", + "doc": "XTestPackage returns a variant of the package with \"external\" tests.", + "signature": "func XTestPackage() *PackageData", + "position": { + "file": "build/build.go", + "line": 783 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "Session", + "doc": "Session manages internal state GopherJS requires to perform a build.\n\nThis is the main interface to GopherJS build system. Session lifetime is\nroughly equivalent to a single GopherJS tool invocation.", + "declaration": "type Session struct {\n\n\t// Binary archives produced during the current session and assumed to be\n\t// up to date with input sources and dependencies. In the -w (\"watch\") mode\n\t// must be cleared upon entering watching.\n\tUpToDateArchives map[string]*compiler.Archive\n\tWatcher *fsnotify.Watcher\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "build/build.go", + "line": 833 + }, + "fields": [ + { + "name": "UpToDateArchives", + "doc": "Binary archives produced during the current session and assumed to be\nup to date with input sources and dependencies. In the -w (\"watch\") mode\nmust be cleared upon entering watching.", + "type": "map[string]*compiler.Archive" + }, + { + "name": "Watcher", + "doc": "", + "type": "*fsnotify.Watcher" + } + ], + "methods": [ + { + "name": "BuildFiles", + "doc": "BuildFiles passed to the GopherJS tool as if they were a package.\n\nA ephemeral package will be created with only the provided files. This\nfunction is intended for use with, for example, `gopherjs run main.go`.", + "signature": "func BuildFiles(filenames []string, pkgObj string, cwd string) error", + "position": { + "file": "build/build.go", + "line": 950 + }, + "examples": [] + }, + { + "name": "BuildProject", + "doc": "BuildProject builds a command project (one with a main method) or\nbuilds a test project (one with a synthesized test main package).", + "signature": "func BuildProject(pkg *PackageData) (*compiler.Archive, error)", + "position": { + "file": "build/build.go", + "line": 1030 + }, + "examples": [] + }, + { + "name": "EnableMapping", + "doc": "SourceMappingCallback returns a callback for [github.com/gopherjs/gopherjs/compiler.SourceMapFilter]\nconfigured for the current build session.", + "signature": "func EnableMapping(filter *sourcemapx.Filter, jsFileName string)", + "position": { + "file": "build/build.go", + "line": 1380 + }, + "examples": [] + }, + { + "name": "GetSortedSources", + "doc": "GetSortedSources returns the sources sorted by import path.\nThe files in the sources may still not be sorted yet.", + "signature": "func GetSortedSources() []*sources.Sources", + "position": { + "file": "build/build.go", + "line": 1052 + }, + "examples": [] + }, + { + "name": "GoRelease", + "doc": "GoRelease returns Go release version this session is building with.", + "signature": "func GoRelease() string", + "position": { + "file": "build/build.go", + "line": 930 + }, + "examples": [] + }, + { + "name": "ImportResolverFor", + "doc": "ImportResolverFor returns a function which returns a compiled package archive\ngiven an import path.", + "signature": "func ImportResolverFor(srcDir string) func(string) (*compiler.Archive, error)", + "position": { + "file": "build/build.go", + "line": 1363 + }, + "examples": [] + }, + { + "name": "InstallSuffix", + "doc": "InstallSuffix returns the suffix added to the generated output file.", + "signature": "func InstallSuffix() string", + "position": { + "file": "build/build.go", + "line": 922 + }, + "examples": [] + }, + { + "name": "LoadPackages", + "doc": "LoadPackages will recursively load and parse the given package and\nits dependencies. This will return the sources for the given package.\nThe returned source and sources for the dependencies will be added\nto the session's sources map.", + "signature": "func LoadPackages(pkg *PackageData) (*sources.Sources, error)", + "position": { + "file": "build/build.go", + "line": 1189 + }, + "examples": [] + }, + { + "name": "SourcesForImport", + "doc": "", + "signature": "func SourcesForImport(path, srcDir string) (*sources.Sources, error)", + "position": { + "file": "build/build.go", + "line": 1347 + }, + "examples": [] + }, + { + "name": "TestBinary", + "doc": "TestBinary returns the testBinary value that is normally passed into\ncmd/link by a -X option. The testBinary value is defined in the STL at\ntesting/testing.go for the `testing.Testing() bool` function.\nIt is set to \"1\" if the binary (the JS output in our case) is built\nwith \"go test\" and \"0\" otherwise.", + "signature": "func TestBinary() string", + "position": { + "file": "build/build.go", + "line": 939 + }, + "examples": [] + }, + { + "name": "WaitForChange", + "doc": "WaitForChange watches file system events and returns if either when one of\nthe source files is modified.", + "signature": "func WaitForChange()", + "position": { + "file": "build/build.go", + "line": 1420 + }, + "examples": [] + }, + { + "name": "WriteCommandPackage", + "doc": "WriteCommandPackage writes the final JavaScript output file at pkgObj path.", + "signature": "func WriteCommandPackage(archive *compiler.Archive, pkgObj string) error", + "position": { + "file": "build/build.go", + "line": 1385 + }, + "examples": [] + }, + { + "name": "XContext", + "doc": "XContext returns the session's build context.", + "signature": "func XContext() XContext", + "position": { + "file": "build/build.go", + "line": 919 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "XContext", + "doc": "XContext is an extension of go/build.Context with GopherJS-specific features.\n\nIt abstracts away several different sources GopherJS can load its packages\nfrom, with a minimal API.", + "declaration": "type XContext interface {\n\t// Import returns details about the Go package named by the importPath,\n\t// interpreting local import paths relative to the srcDir directory.\n\tImport(path string, srcDir string, mode build.ImportMode) (*PackageData, error)\n\n\t// Env returns build environment configuration this context has been set up for.\n\tEnv() Env\n\n\t// Match explans build patterns into a set of matching import paths (see go help packages).\n\tMatch(patterns []string) ([]string, error)\n}", + "kind": "interface", + "position": { + "file": "build/context.go", + "line": 69 + }, + "fields": [ + { + "name": "Import", + "doc": "Import returns details about the Go package named by the importPath,\ninterpreting local import paths relative to the srcDir directory.", + "type": "func(path string, srcDir string, mode build.ImportMode) (*PackageData, error)" + }, + { + "name": "Env", + "doc": "Env returns build environment configuration this context has been set up for.", + "type": "func() Env" + }, + { + "name": "Match", + "doc": "Match explans build patterns into a set of matching import paths (see go help packages).", + "type": "func(patterns []string) ([]string, error)" + } + ], + "methods": [], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/build/cache", + "name": "cache", + "synopsis": "Package cache solves one of the hardest computer science problems in application to GopherJS compiler outputs.", + "doc": "Package cache solves one of the hardest computer science problems in\napplication to GopherJS compiler outputs.", + "dir": "build/cache", + "files": [ + "build/cache/cache.go" + ], + "consts": [], + "vars": [], + "funcs": [ + { + "name": "Clear", + "doc": "Clear the cache. This will remove *all* cached artifacts from *all* build\nconfigurations.", + "signature": "func Clear() error", + "position": { + "file": "build/cache/cache.go", + "line": 78 + }, + "examples": [] + } + ], + "types": [ + { + "name": "BuildCache", + "doc": "BuildCache manages build artifacts that are cached for incremental builds.\n\nCache is designed to be non-durable: any store and load errors are swallowed\nand simply lead to a cache miss. The caller must be able to handle cache\nmisses. Nil pointer to BuildCache is valid and simply disables caching.\n\nBuildCache struct fields represent build parameters which change invalidates\nthe cache. For example, any artifacts that were cached for a Linux build\nmust not be reused for a non-Linux build. GopherJS version change also\ninvalidates the cache. It is callers responsibility to ensure that artifacts\npassed the Store function were generated with the same build\nparameters as the cache is configured.\n\nThere is no upper limit for the total cache size. It can be cleared\nprogrammatically via the Clear() function, or the user can just delete the\ndirectory if it grows too big.\n\nThe cached files are gzip compressed, therefore each file uses the gzip\nchecksum as a basic integrity check performed after reading the file.\n\nTODO(nevkontakte): changes in the input sources or dependencies doesn't\ncurrently invalidate the cache. This is handled at the higher level by\nchecking cached package timestamp against loaded package modification time.", + "declaration": "type BuildCache struct {\n\tGOOS string\n\tGOARCH string\n\tGOROOT string\n\tGOPATH string\n\tBuildTags []string\n\n\t// Version should be set to compiler.Version\n\tVersion string\n\n\t// TestedPackage is the import path of the package being tested, or\n\t// empty when not building for tests. The package under test is built\n\t// with *_test.go sources included so we should always skip reading\n\t// and writing cache in that case. Since we are caching prior to\n\t// type-checking for generics, any package importing the package under\n\t// test should be unaffected.\n\tTestedPackage string\n}", + "kind": "struct", + "position": { + "file": "build/cache/cache.go", + "line": 107 + }, + "fields": [ + { + "name": "GOOS", + "doc": "", + "type": "string" + }, + { + "name": "GOARCH", + "doc": "", + "type": "string" + }, + { + "name": "GOROOT", + "doc": "", + "type": "string" + }, + { + "name": "GOPATH", + "doc": "", + "type": "string" + }, + { + "name": "BuildTags", + "doc": "", + "type": "[]string" + }, + { + "name": "Version", + "doc": "Version should be set to compiler.Version", + "type": "string" + }, + { + "name": "TestedPackage", + "doc": "TestedPackage is the import path of the package being tested, or\nempty when not building for tests. The package under test is built\nwith *_test.go sources included so we should always skip reading\nand writing cache in that case. Since we are caching prior to\ntype-checking for generics, any package importing the package under\ntest should be unaffected.", + "type": "string" + } + ], + "methods": [ + { + "name": "Load", + "doc": "", + "signature": "func Load(c Cacheable, importPath string, srcModTime time.Time) bool", + "position": { + "file": "build/cache/cache.go", + "line": 174 + }, + "examples": [] + }, + { + "name": "Store", + "doc": "", + "signature": "func Store(c Cacheable, importPath string, buildTime time.Time) bool", + "position": { + "file": "build/cache/cache.go", + "line": 135 + }, + "examples": [] + }, + { + "name": "String", + "doc": "", + "signature": "func String() string", + "position": { + "file": "build/cache/cache.go", + "line": 126 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "Cache", + "doc": "Cache defines methods to store and load cacheable objects.", + "declaration": "type Cache interface {\n\t// Store stores the package with the given import path in the cache.\n\t// Any error inside this method will cause the cache not to be persisted.\n\t//\n\t// The passed in buildTime is used to determine if the package is out-of-date when reloaded.\n\t// Typically it should be set to the srcModTime or time.Now().\n\tStore(c Cacheable, importPath string, buildTime time.Time) bool\n\n\t// Load reads a previously cached package at the given import path,\n\t// if it was previously stored.\n\t//\n\t// The loaded package would have been built with the same configuration as\n\t// the build cache was.\n\tLoad(c Cacheable, importPath string, srcModTime time.Time) bool\n}", + "kind": "interface", + "position": { + "file": "build/cache/cache.go", + "line": 32 + }, + "fields": [ + { + "name": "Store", + "doc": "Store stores the package with the given import path in the cache.\nAny error inside this method will cause the cache not to be persisted.\n\nThe passed in buildTime is used to determine if the package is out-of-date when reloaded.\nTypically it should be set to the srcModTime or time.Now().", + "type": "func(c Cacheable, importPath string, buildTime time.Time) bool" + }, + { + "name": "Load", + "doc": "Load reads a previously cached package at the given import path,\nif it was previously stored.\n\nThe loaded package would have been built with the same configuration as\nthe build cache was.", + "type": "func(c Cacheable, importPath string, srcModTime time.Time) bool" + } + ], + "methods": [], + "examples": [] + }, + { + "name": "Cacheable", + "doc": "Cacheable defines methods to serialize and deserialize cachable objects.\nThis object should represent a package's build artifact.\n\nThe encode and decode functions are typically wrappers around gob.Encoder.Encode\nand gob.Decoder.Decode, but other formats are possible as well, the same way\nas FileSet.Write and FileSet.Read work with any encode/decode functions.", + "declaration": "type Cacheable interface {\n\tWrite(encode func(any) error) error\n\tRead(decode func(any) error) error\n}", + "kind": "interface", + "position": { + "file": "build/cache/cache.go", + "line": 26 + }, + "fields": [ + { + "name": "Write", + "doc": "", + "type": "func(encode func(any) error) error" + }, + { + "name": "Read", + "doc": "", + "type": "func(decode func(any) error) error" + } + ], + "methods": [], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/build/versionhack", + "name": "versionhack", + "synopsis": "Package versionhack makes sure go/build doesn't disable module support whenever GopherJS is compiled by a different Go version than it's targeted Go version.", + "doc": "Package versionhack makes sure go/build doesn't disable module support\nwhenever GopherJS is compiled by a different Go version than it's targeted\nGo version.\n\nUnder the hood, go/build relies on `go list` utility for module support; more\nspecifically, for package location discovery. Since ReleaseTags are\neffectively baked into the go binary and can't be overridden, it needs to\nensure that ReleaseTags set in a go/build.Context instance match the Go tool.\n\nHowever, it naively assumes that the go tool version in the PATH matches the\nversion that was used to build GopherJS and disables module support whenever\nReleaseTags in the context are set to anything other than the default. This,\nunfortunately, isn't very helpful since gopherjs may be built by a Go version\nother than the PATH's default.\n\nLuckily, even if go tool version is mismatched, it's only used for discovery\nof the package locations, and go/build evaluates build constraints on its own\nwith ReleaseTags we've passed.\n\nA better solution would've been for go/build to use go tool from GOROOT and\ncheck its version against build tags: https://github.com/golang/go/issues/46856.\n\nUntil that issue is fixed, we trick go/build into thinking that whatever\nReleaseTags we've passed are indeed the default. We gain access to the\nvariable go/build checks against using \"go:linkname\" directive and override\nits content as we wish.", + "dir": "build/versionhack", + "files": [ + "build/versionhack/versionhack.go" + ], + "consts": [], + "vars": [], + "funcs": [], + "types": [], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler", + "name": "compiler", + "synopsis": "Package compiler implements GopherJS compiler logic.", + "doc": "Package compiler implements GopherJS compiler logic.\n\nWARNING: This package's API is treated as internal and currently doesn't\nprovide any API stability guarantee, use it at your own risk. If you need a\nstable interface, prefer invoking the gopherjs CLI tool as a subprocess.", + "dir": "compiler", + "files": [ + "compiler/compiler.go", + "compiler/declNames.go", + "compiler/decls.go", + "compiler/expressions.go", + "compiler/functions.go", + "compiler/package.go", + "compiler/statements.go", + "compiler/utils.go", + "compiler/version_check.go" + ], + "consts": [ + { + "name": "GoVersion", + "doc": "GoVersion is the current Go 1.x version that GopherJS is compatible with.", + "declaration": "const GoVersion = 21", + "position": { + "file": "compiler/version_check.go", + "line": 18 + } + }, + { + "name": "Version", + "doc": "Version is the GopherJS compiler version string.", + "declaration": "const Version = \"1.21.0+go1.21.13\"", + "position": { + "file": "compiler/version_check.go", + "line": 15 + } + } + ], + "vars": [], + "funcs": [ + { + "name": "CheckGoVersion", + "doc": "CheckGoVersion checks the version of the Go distribution\nat goroot, and reports an error if it's not compatible\nwith this version of the GopherJS compiler.", + "signature": "func CheckGoVersion(goroot string) error", + "position": { + "file": "compiler/version_check.go", + "line": 23 + }, + "examples": [] + }, + { + "name": "Compile", + "doc": "Compile the provided Go sources as a single package.\n\nProvided sources must be prepared so that the type information has been determined,\nand the source files have been sorted by name to ensure reproducible JavaScript output.", + "signature": "func Compile(srcs *sources.Sources, tContext *types.Context, minify bool) (_ *Archive, err error)", + "position": { + "file": "compiler/package.go", + "line": 165 + }, + "examples": [] + }, + { + "name": "DefaultFilter", + "doc": "DefaultFilter creates a new sourcemapx.Filter that writes to the given writer.\nThis is not in the internal package so that tools like the playground can\nuse it when calling things like the exported WriteProgramCode function.", + "signature": "func DefaultFilter(w io.Writer) *sourcemapx.Filter", + "position": { + "file": "compiler/compiler.go", + "line": 127 + }, + "examples": [] + }, + { + "name": "GoRelease", + "doc": "GoRelease does a best-effort to identify the Go release we are building with.\nIf unable to determine the precise version for the given GOROOT, falls back\nto the best guess available.", + "signature": "func GoRelease(goroot string) string", + "position": { + "file": "compiler/version_check.go", + "line": 63 + }, + "examples": [] + }, + { + "name": "ImportDependencies", + "doc": "", + "signature": "func ImportDependencies(archive *Archive, importPkg func(string) (*Archive, error)) ([]*Archive, error)", + "position": { + "file": "compiler/compiler.go", + "line": 89 + }, + "examples": [] + }, + { + "name": "PrepareAllSources", + "doc": "PrepareAllSources prepares all sources for compilation by\nparsing go linknames, type checking, sorting, simplifying, and\nperforming cross package analysis.\nThe results are stored in the provided sources.\n\nAll sources must be given at the same time for cross package analysis to\nwork correctly. For consistency, the sources should be sorted by import path.", + "signature": "func PrepareAllSources(allSources []*sources.Sources, importer sources.Importer, tContext *types.Context) error", + "position": { + "file": "compiler/package.go", + "line": 243 + }, + "examples": [] + }, + { + "name": "WritePkgCode", + "doc": "", + "signature": "func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, gls linkname.GoLinknameSet, minify bool, w *sourcemapx.Filter) error", + "position": { + "file": "compiler/compiler.go", + "line": 209 + }, + "examples": [] + }, + { + "name": "WriteProgramCode", + "doc": "", + "signature": "func WriteProgramCode(pkgs []*Archive, w *sourcemapx.Filter, goVersion, testBinary string) error", + "position": { + "file": "compiler/compiler.go", + "line": 131 + }, + "examples": [] + } + ], + "types": [ + { + "name": "Archive", + "doc": "Archive contains intermediate build outputs of a single package.\n\nThis is a logical equivalent of an object file in traditional compilers.", + "declaration": "type Archive struct {\n\t// Package's full import path, e.g. \"some/package/name\".\n\tImportPath string\n\t// Package's name as per \"package\" statement at the top of a source file.\n\t// Usually matches the last component of import path, but may differ in\n\t// certain cases (e.g. main or test packages).\n\tName string\n\t// A list of full package import paths that the current package imports across\n\t// all source files. See go/types.Package.Imports().\n\tImports []string\n\t// The package information is used by the compiler to type-check packages\n\t// that import this one. See [gcexportdata.Write].\n\tPackage *types.Package\n\t// Compiled package-level symbols.\n\tDeclarations []*Decl\n\t// Concatenated contents of all raw .inc.js of the package.\n\tIncJSCode []incjs.File\n\t// The file set containing the source code locations for various symbols\n\t// (e.g. for sourcemap generation). See [token.FileSet.Write].\n\tFileSet *token.FileSet\n\t// Whether or not the package was compiled with minification enabled.\n\tMinified bool\n\t// A list of go:linkname directives encountered in the package.\n\tGoLinknames []linkname.GoLinkname\n}", + "kind": "struct", + "position": { + "file": "compiler/compiler.go", + "line": 53 + }, + "fields": [ + { + "name": "ImportPath", + "doc": "Package's full import path, e.g. \"some/package/name\".", + "type": "string" + }, + { + "name": "Name", + "doc": "Package's name as per \"package\" statement at the top of a source file.\nUsually matches the last component of import path, but may differ in\ncertain cases (e.g. main or test packages).", + "type": "string" + }, + { + "name": "Imports", + "doc": "A list of full package import paths that the current package imports across\nall source files. See go/types.Package.Imports().", + "type": "[]string" + }, + { + "name": "Package", + "doc": "The package information is used by the compiler to type-check packages\nthat import this one. See [gcexportdata.Write].", + "type": "*types.Package" + }, + { + "name": "Declarations", + "doc": "Compiled package-level symbols.", + "type": "[]*Decl" + }, + { + "name": "IncJSCode", + "doc": "Concatenated contents of all raw .inc.js of the package.", + "type": "[]incjs.File" + }, + { + "name": "FileSet", + "doc": "The file set containing the source code locations for various symbols\n(e.g. for sourcemap generation). See [token.FileSet.Write].", + "type": "*token.FileSet" + }, + { + "name": "Minified", + "doc": "Whether or not the package was compiled with minification enabled.", + "type": "bool" + }, + { + "name": "GoLinknames", + "doc": "A list of go:linkname directives encountered in the package.", + "type": "[]linkname.GoLinkname" + } + ], + "methods": [ + { + "name": "String", + "doc": "", + "signature": "func String() string", + "position": { + "file": "compiler/compiler.go", + "line": 79 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "Decl", + "doc": "Decl represents a package-level symbol (e.g. a function, variable or type).\n\nIt contains code generated by the compiler for this specific symbol, which is\ngrouped by the execution stage it belongs to in the JavaScript runtime.\n\nWhen adding new fields to this struct, make sure the field is exported\nso that it Gob serializes correctly for the archive cache.", + "declaration": "type Decl struct {\n\t// The package- or receiver-type-qualified name of function or method obj.\n\t// See go/types.Func.FullName().\n\tFullName string\n\t// A logical equivalent of a symbol name in an object file in the traditional\n\t// Go compiler/linker toolchain. Used by GopherJS to support go:linkname\n\t// directives. Must be set for decls that are supported by go:linkname\n\t// implementation.\n\tLinkingName symbol.Name\n\t// A list of package-level JavaScript variable names this symbol needs to declare.\n\tVars []string\n\t// A JS expression by which the object represented by this decl may be\n\t// referenced within the package context. Empty if the decl represents no such\n\t// object.\n\tRefExpr string\n\t// NamedRecvType is method named recv declare.\n\tNamedRecvType string\n\t// JavaScript code that declares a local variable for an imported package.\n\tImportCode []byte\n\t// JavaScript code that declares basic information about a named type symbol.\n\t// It configures basic information about the type and its identity.\n\tTypeDeclCode []byte\n\t// JavaScript code that assigns exposed named types to the package.\n\tExportTypeCode []byte\n\t// JavaScript code that declares basic information about an anonymous type.\n\t// It configures basic information about the type.\n\t// This is added to the finish setup phase to have access to all packages.\n\tAnonTypeDeclCode []byte\n\t// JavaScript code that declares basic information about a function or\n\t// method symbol. This contains the function's or method's compiled body.\n\t// This is added to the finish setup phase to have access to all packages.\n\tFuncDeclCode []byte\n\t// JavaScript code that assigns exposed functions to the package.\n\t// This is added to the finish setup phase to have access to all packages.\n\tExportFuncCode []byte\n\t// JavaScript code that initializes reflection metadata about a type's method list.\n\t// This is added to the finish setup phase to have access to all packages.\n\tMethodListCode []byte\n\t// JavaScript code that initializes the rest of reflection metadata about a type\n\t// (e.g. struct fields, array type sizes, element types, etc.).\n\t// This is added to the finish setup phase to have access to all packages.\n\tTypeInitCode []byte\n\t// JavaScript code that needs to be executed during the package init phase to\n\t// set the symbol up (e.g. initialize package-level variable value).\n\tInitCode []byte\n\t// DCEInfo stores the information for dead-code elimination.\n\tDCEInfo dce.Info\n\t// Set to true if a function performs a blocking operation (I/O or\n\t// synchronization). The compiler will have to generate function code such\n\t// that it can be resumed after a blocking operation completes without\n\t// blocking the main thread in the meantime.\n\tBlocking bool\n}", + "kind": "struct", + "position": { + "file": "compiler/decls.go", + "line": 30 + }, + "fields": [ + { + "name": "FullName", + "doc": "The package- or receiver-type-qualified name of function or method obj.\nSee go/types.Func.FullName().", + "type": "string" + }, + { + "name": "LinkingName", + "doc": "A logical equivalent of a symbol name in an object file in the traditional\nGo compiler/linker toolchain. Used by GopherJS to support go:linkname\ndirectives. Must be set for decls that are supported by go:linkname\nimplementation.", + "type": "symbol.Name" + }, + { + "name": "Vars", + "doc": "A list of package-level JavaScript variable names this symbol needs to declare.", + "type": "[]string" + }, + { + "name": "RefExpr", + "doc": "A JS expression by which the object represented by this decl may be\nreferenced within the package context. Empty if the decl represents no such\nobject.", + "type": "string" + }, + { + "name": "NamedRecvType", + "doc": "NamedRecvType is method named recv declare.", + "type": "string" + }, + { + "name": "ImportCode", + "doc": "JavaScript code that declares a local variable for an imported package.", + "type": "[]byte" + }, + { + "name": "TypeDeclCode", + "doc": "JavaScript code that declares basic information about a named type symbol.\nIt configures basic information about the type and its identity.", + "type": "[]byte" + }, + { + "name": "ExportTypeCode", + "doc": "JavaScript code that assigns exposed named types to the package.", + "type": "[]byte" + }, + { + "name": "AnonTypeDeclCode", + "doc": "JavaScript code that declares basic information about an anonymous type.\nIt configures basic information about the type.\nThis is added to the finish setup phase to have access to all packages.", + "type": "[]byte" + }, + { + "name": "FuncDeclCode", + "doc": "JavaScript code that declares basic information about a function or\nmethod symbol. This contains the function's or method's compiled body.\nThis is added to the finish setup phase to have access to all packages.", + "type": "[]byte" + }, + { + "name": "ExportFuncCode", + "doc": "JavaScript code that assigns exposed functions to the package.\nThis is added to the finish setup phase to have access to all packages.", + "type": "[]byte" + }, + { + "name": "MethodListCode", + "doc": "JavaScript code that initializes reflection metadata about a type's method list.\nThis is added to the finish setup phase to have access to all packages.", + "type": "[]byte" + }, + { + "name": "TypeInitCode", + "doc": "JavaScript code that initializes the rest of reflection metadata about a type\n(e.g. struct fields, array type sizes, element types, etc.).\nThis is added to the finish setup phase to have access to all packages.", + "type": "[]byte" + }, + { + "name": "InitCode", + "doc": "JavaScript code that needs to be executed during the package init phase to\nset the symbol up (e.g. initialize package-level variable value).", + "type": "[]byte" + }, + { + "name": "DCEInfo", + "doc": "DCEInfo stores the information for dead-code elimination.", + "type": "dce.Info" + }, + { + "name": "Blocking", + "doc": "Set to true if a function performs a blocking operation (I/O or\nsynchronization). The compiler will have to generate function code such\nthat it can be resumed after a blocking operation completes without\nblocking the main thread in the meantime.", + "type": "bool" + } + ], + "methods": [ + { + "name": "Dce", + "doc": "Dce gets the information for dead-code elimination.", + "signature": "func Dce() *dce.Info", + "position": { + "file": "compiler/decls.go", + "line": 100 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "Dependency", + "doc": "", + "declaration": "type Dependency struct {\n\tPkg string\n\tType string\n\tMethod string\n}", + "kind": "struct", + "position": { + "file": "compiler/compiler.go", + "line": 83 + }, + "fields": [ + { + "name": "Pkg", + "doc": "", + "type": "string" + }, + { + "name": "Type", + "doc": "", + "type": "string" + }, + { + "name": "Method", + "doc": "", + "type": "string" + } + ], + "methods": [], + "examples": [] + }, + { + "name": "FatalError", + "doc": "FatalError is an error compiler panics with when it encountered a fatal error.\n\nFatalError implements io.Writer, which can be used to record any free-form\ndebugging details for human consumption. This information will be included\ninto String() result along with the rest.", + "declaration": "type FatalError struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "compiler/utils.go", + "line": 952 + }, + "fields": [], + "methods": [ + { + "name": "Error", + "doc": "", + "signature": "func Error) Error() string", + "position": { + "file": "compiler/utils.go", + "line": 974 + }, + "examples": [] + }, + { + "name": "Unwrap", + "doc": "", + "signature": "func Unwrap() error", + "position": { + "file": "compiler/utils.go", + "line": 958 + }, + "examples": [] + }, + { + "name": "Write", + "doc": "Write implements io.Writer and can be used to store free-form debugging clues.", + "signature": "func Write(p []byte) (n int, err error)", + "position": { + "file": "compiler/utils.go", + "line": 972 + }, + "examples": [] + } + ], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/astutil", + "name": "astutil", + "synopsis": "", + "doc": "", + "dir": "compiler/astutil", + "files": [ + "compiler/astutil/astutil.go" + ], + "consts": [], + "vars": [], + "funcs": [ + { + "name": "DirectiveNew", + "doc": "DirectiveNew returns true if gopherjs:new directive is\npresent on a struct, interface, type, variable, constant, or function.\n\n`//gopherjs:new` is a GopherJS-specific directive, which can be\napplied in native overlays and will instruct the augmentation logic to\nensure that the original code is not present so that this code does not\noverride any original code, otherwise an error will be raised.", + "signature": "func DirectiveNew(d ast.Node) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 154 + }, + "examples": [] + }, + { + "name": "DirectiveReplace", + "doc": "DirectiveReplace returns true if gopherjs:replace directive is present\non a struct, interface, type, variable, constant, or function.\n\n`//gopherjs:replace` is a GopherJS-specific directive, which can be\napplied in native overlays and will instruct the augmentation logic to\nensure that the original code is present and has not been removed nor renamed,\notherwise an error will be raised.", + "signature": "func DirectiveReplace(d ast.Node) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 143 + }, + "examples": [] + }, + { + "name": "EndsWithReturn", + "doc": "EndsWithReturn returns true if the last effective statement is a \"return\".", + "signature": "func EndsWithReturn(stmts []ast.Stmt) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 295 + }, + "examples": [] + }, + { + "name": "FindLoopStmt", + "doc": "FindLoopStmt tries to find the loop statement among the AST nodes in the\n|stack| that corresponds to the break/continue statement represented by\nbranch.\n\nThis function is label-aware and assumes the code was successfully\ntype-checked.", + "signature": "func FindLoopStmt(stack []ast.Node, branch *ast.BranchStmt, typeInfo *types.Info) ast.Stmt", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 263 + }, + "examples": [] + }, + { + "name": "FuncKey", + "doc": "FuncKey returns a string, which uniquely identifies a top-level function or\nmethod in a package.", + "signature": "func FuncKey(d *ast.FuncDecl) string", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 102 + }, + "examples": [] + }, + { + "name": "FuncReceiverKey", + "doc": "FuncReceiverKey returns a string that uniquely identifies the receiver\nstruct of the function or an empty string if there is no receiver.\nThis name will match the name of the struct in the struct's type spec.", + "signature": "func FuncReceiverKey(d *ast.FuncDecl) string", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 112 + }, + "examples": [] + }, + { + "name": "HasDirectivePrefix", + "doc": "HasDirectivePrefix determines if any line in the given file\nhas the given directive prefix in it.", + "signature": "func HasDirectivePrefix(file *ast.File, prefix string) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 246 + }, + "examples": [] + }, + { + "name": "ImportName", + "doc": "ImportName tries to determine the package name for an import.\n\nIf the package name isn't specified then this will make a best\nmake a best guess using the import path.\nIf the import name is dot (`.`), blank (`_`), or there\nwas an issue determining the package name then empty is returned.", + "signature": "func ImportName(spec *ast.ImportSpec) string", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 83 + }, + "examples": [] + }, + { + "name": "ImportsUnsafe", + "doc": "", + "signature": "func ImportsUnsafe(file *ast.File) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 68 + }, + "examples": [] + }, + { + "name": "IsTypeExpr", + "doc": "IsTypeExpr returns true if expr denotes a type. This can be used to\ndistinguish between calls and type conversions.", + "signature": "func IsTypeExpr(expr ast.Expr, info *types.Info) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 40 + }, + "examples": [] + }, + { + "name": "KeepOriginal", + "doc": "KeepOriginal returns true if gopherjs:keep-original directive is present\nbefore a function decl.\n\n`//gopherjs:keep-original` is a GopherJS-specific directive, which can be\napplied to functions in native overlays and will instruct the augmentation\nlogic to expose the original function such that it can be called. For a\nfunction in the original called `foo`, it will be accessible by the name\n`_gopherjs_original_foo`.\n\nThis will also ensure that the original function exists and hasn't been\nremoved or renamed, otherwise an error will be raised.", + "signature": "func KeepOriginal(d *ast.FuncDecl) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 169 + }, + "examples": [] + }, + { + "name": "NewIdent", + "doc": "", + "signature": "func NewIdent(name string, t types.Type, info *types.Info, pkg *types.Package) *ast.Ident", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 30 + }, + "examples": [] + }, + { + "name": "OverrideSignature", + "doc": "OverrideSignature returns true if gopherjs:override-signature directive is\npresent on a function.\n\n`//gopherjs:override-signature` is a GopherJS-specific directive, which can\nbe applied in native overlays and will instruct the augmentation logic to\nreplace the original function signature which has the same FuncKey with the\nsignature defined in the native overlays.\n\nThis directive can be used to remove generics from a function signature or\nto replace a receiver of a function with another one. The given native\noverlay function will be removed, so no method body is needed in the overlay.\n\nThe new signature may not contain types which require a new import since\nthe imports will not be automatically added when needed, only removed.\nUse a type alias in the overlay to deal manage imports.\n\nThis will also ensure that the original code exists and hasn't been\nremoved or renamed, otherwise an error will be raised.", + "signature": "func OverrideSignature(d *ast.FuncDecl) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 209 + }, + "examples": [] + }, + { + "name": "Purge", + "doc": "Purge returns true if gopherjs:purge directive is present\non a struct, interface, type, variable, constant, or function.\n\n`//gopherjs:purge` is a GopherJS-specific directive, which can be\napplied in native overlays and will instruct the augmentation logic to\ndelete part of the standard library without a replacement. This directive\ncan be used to remove code that would be invalid in GopherJS, such as code\nusing unsupported features (e.g. generic interfaces before generics were\nfully supported). It should be used with caution since it may remove needed\ndependencies. If a type is purged, all methods using that type as\na receiver will also be purged.\n\nThis will also ensure that the original code exists and hasn't been\nremoved or renamed, otherwise an error will be raised.", + "signature": "func Purge(d ast.Node) bool", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 187 + }, + "examples": [] + }, + { + "name": "RemoveParens", + "doc": "", + "signature": "func RemoveParens(e ast.Expr) ast.Expr", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 15 + }, + "examples": [] + }, + { + "name": "SetType", + "doc": "", + "signature": "func SetType(info *types.Info, t types.Type, e ast.Expr) ast.Expr", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 25 + }, + "examples": [] + }, + { + "name": "Squeeze", + "doc": "Squeeze removes all nil nodes from the slice.\n\nThe given slice will be modified. This is designed for squeezing\ndeclaration, specification, imports, and identifier lists.", + "signature": "func Squeeze[E ast.Node, S ~[]E](s S) S", + "position": { + "file": "compiler/astutil/astutil.go", + "line": 316 + }, + "examples": [] + } + ], + "types": [], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/errlist", + "name": "errlist", + "synopsis": "", + "doc": "", + "dir": "compiler/errlist", + "files": [ + "compiler/errlist/errlist.go" + ], + "consts": [], + "vars": [ + { + "name": "ErrTooManyErrors", + "doc": "ErrTooManyErrors is added to the ErrorList by the Trim method.", + "declaration": "var ErrTooManyErrors = errors.New(\"too many errors\")", + "position": { + "file": "compiler/errlist/errlist.go", + "line": 9 + } + } + ], + "funcs": [], + "types": [ + { + "name": "ErrorList", + "doc": "ErrorList wraps multiple errors as a single error.", + "declaration": "type ErrorList []error", + "kind": "defined", + "position": { + "file": "compiler/errlist/errlist.go", + "line": 12 + }, + "fields": [], + "methods": [ + { + "name": "Append", + "doc": "Append an error to the list.\n\nIf err is an instance of ErrorList, the lists are concatenated together,\notherwise err is appended at the end of the list. If err is nil, the list is\nreturned unmodified.\n\n\terr := DoStuff()\n\terrList := errList.Append(err)", + "signature": "func Append(err error) ErrorList", + "position": { + "file": "compiler/errlist/errlist.go", + "line": 37 + }, + "examples": [] + }, + { + "name": "AppendDistinct", + "doc": "AppendDistinct is similar to Append, but doesn't append the error if it has\nthe same message as the last error on the list.", + "signature": "func AppendDistinct(err error) ErrorList", + "position": { + "file": "compiler/errlist/errlist.go", + "line": 49 + }, + "examples": [] + }, + { + "name": "ErrOrNil", + "doc": "ErrOrNil returns nil if ErrorList is empty, or the error otherwise.", + "signature": "func ErrOrNil() error", + "position": { + "file": "compiler/errlist/errlist.go", + "line": 22 + }, + "examples": [] + }, + { + "name": "Error", + "doc": "", + "signature": "func ErrorList) Error() string", + "position": { + "file": "compiler/errlist/errlist.go", + "line": 14 + }, + "examples": [] + }, + { + "name": "Trim", + "doc": "Trim the error list if it has more than limit errors. If the list is trimmed,\nall extraneous errors are replaced with a single ErrTooManyErrors, making the\nreturned ErrorList length of limit+1.", + "signature": "func Trim(limit int) ErrorList", + "position": { + "file": "compiler/errlist/errlist.go", + "line": 62 + }, + "examples": [] + } + ], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/filter", + "name": "filter", + "synopsis": "", + "doc": "", + "dir": "compiler/filter", + "files": [ + "compiler/filter/assign.go", + "compiler/filter/incdecstmt.go" + ], + "consts": [], + "vars": [], + "funcs": [ + { + "name": "Assign", + "doc": "", + "signature": "func Assign(stmt ast.Stmt, info *types.Info, pkg *types.Package) ast.Stmt", + "position": { + "file": "compiler/filter/assign.go", + "line": 11 + }, + "examples": [] + }, + { + "name": "IncDecStmt", + "doc": "", + "signature": "func IncDecStmt(stmt ast.Stmt, info *types.Info) ast.Stmt", + "position": { + "file": "compiler/filter/incdecstmt.go", + "line": 10 + }, + "examples": [] + } + ], + "types": [], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/gopherjspkg", + "name": "gopherjspkg", + "synopsis": "Package gopherjspkg provides core GopherJS packages via a virtual filesystem.", + "doc": "Package gopherjspkg provides core GopherJS packages via a virtual filesystem.\n\nCore GopherJS packages are packages that are critical for GopherJS compiler\noperation. They are needed to build the Go standard library with GopherJS.\nCurrently, they include:\n\n\tgithub.com/gopherjs/gopherjs/js\n\tgithub.com/gopherjs/gopherjs/nosync", + "dir": "compiler/gopherjspkg", + "files": [ + "compiler/gopherjspkg/doc.go", + "compiler/gopherjspkg/fs.go" + ], + "consts": [], + "vars": [ + { + "name": "FS", + "doc": "FS is a virtual filesystem that contains core GopherJS packages.", + "declaration": "var FS http.FileSystem", + "position": { + "file": "compiler/gopherjspkg/fs.go", + "line": 6 + } + } + ], + "funcs": [ + { + "name": "RegisterFS", + "doc": "RegisterFS allows setting the embedded fs from another package.", + "signature": "func RegisterFS(fs http.FileSystem)", + "position": { + "file": "compiler/gopherjspkg/fs.go", + "line": 9 + }, + "examples": [] + } + ], + "types": [], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/incjs", + "name": "incjs", + "synopsis": "", + "doc": "", + "dir": "compiler/incjs", + "files": [ + "compiler/incjs/file.go" + ], + "consts": [ + { + "name": "Ext", + "doc": "Ext is the file extension for .inc.js files.", + "declaration": "const Ext = \".inc.js\"", + "position": { + "file": "compiler/incjs/file.go", + "line": 15 + } + } + ], + "vars": [], + "funcs": [ + { + "name": "FromDir", + "doc": "FromDir finds and loads any *.inc.js packages in the build context\ndirectory.", + "signature": "func FromDir(bctx *build.Context, dir string) ([]File, error)", + "position": { + "file": "compiler/incjs/file.go", + "line": 26 + }, + "examples": [] + }, + { + "name": "FromFilename", + "doc": "", + "signature": "func FromFilename(filename string) (*File, error)", + "position": { + "file": "compiler/incjs/file.go", + "line": 75 + }, + "examples": [] + } + ], + "types": [ + { + "name": "File", + "doc": "File represents a *.inc.js file metadata and content.", + "declaration": "type File struct {\n\tPath string // Full file path for the build context the file came from.\n\tModTime time.Time\n\tContent []byte\n}", + "kind": "struct", + "position": { + "file": "compiler/incjs/file.go", + "line": 18 + }, + "fields": [ + { + "name": "Path", + "doc": "Full file path for the build context the file came from.", + "type": "string" + }, + { + "name": "ModTime", + "doc": "", + "type": "time.Time" + }, + { + "name": "Content", + "doc": "", + "type": "[]byte" + } + ], + "methods": [], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/linkname", + "name": "linkname", + "synopsis": "", + "doc": "", + "dir": "compiler/linkname", + "files": [ + "compiler/linkname/linkname.go" + ], + "consts": [], + "vars": [], + "funcs": [ + { + "name": "ParseGoLinknames", + "doc": "parseGoLinknames processed comments in a source file and extracts //go:linkname\ncompiler directive from the comments.\n\nThe following directive format is supported:\n//go:linkname .\n//go:linkname ..\n//go:linkname .<(*type)>.\n\nGopherJS directive support has the following limitations:\n\n - External linkname must be specified.\n - The directive must be applied to a package-level function or method (variables\n are not supported).\n - The local function referenced by the directive must have no body (in other\n words, it can only \"import\" an external function implementation into the\n local scope).", + "signature": "func ParseGoLinknames(fset *token.FileSet, pkgPath string, file *ast.File) ([]GoLinkname, error)", + "position": { + "file": "compiler/linkname/linkname.go", + "line": 118 + }, + "examples": [] + } + ], + "types": [ + { + "name": "GoLinkname", + "doc": "GoLinkname describes a go:linkname compiler directive found in the source code.\n\nGopherJS treats these directives in a way that resembles a symbolic link,\nwhere for a single given symbol implementation there may be zero or more\nsymbols referencing it. This is subtly different from the upstream Go\nimplementation, which simply overrides symbol name the linker will use.", + "declaration": "type GoLinkname struct {\n\tImplementation symbol.Name\n\tReference symbol.Name\n}", + "kind": "struct", + "position": { + "file": "compiler/linkname/linkname.go", + "line": 20 + }, + "fields": [ + { + "name": "Implementation", + "doc": "", + "type": "symbol.Name" + }, + { + "name": "Reference", + "doc": "", + "type": "symbol.Name" + } + ], + "methods": [], + "examples": [] + }, + { + "name": "GoLinknameSet", + "doc": "GoLinknameSet is a utility that enables quick lookup of whether a decl is\naffected by any go:linkname directive in the program.", + "declaration": "type GoLinknameSet struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "compiler/linkname/linkname.go", + "line": 213 + }, + "fields": [], + "methods": [ + { + "name": "Add", + "doc": "Add more GoLinkname directives into the set.", + "signature": "func Add(entries []GoLinkname) error", + "position": { + "file": "compiler/linkname/linkname.go", + "line": 219 + }, + "examples": [] + }, + { + "name": "FindImplementation", + "doc": "FindImplementation returns a symbol name, which provides the implementation\nfor the given symbol. The second value indicates whether the implementation\nwas found.", + "signature": "func FindImplementation(sym symbol.Name) (symbol.Name, bool)", + "position": { + "file": "compiler/linkname/linkname.go", + "line": 247 + }, + "examples": [] + }, + { + "name": "IsImplementation", + "doc": "IsImplementation returns true if there is a directive referencing this symbol\nas an implementation.", + "signature": "func IsImplementation(sym symbol.Name) bool", + "position": { + "file": "compiler/linkname/linkname.go", + "line": 239 + }, + "examples": [] + } + ], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/natives", + "name": "natives", + "synopsis": "Package natives provides native packages via a virtual filesystem.", + "doc": "Package natives provides native packages via a virtual filesystem.\n\nSee documentation of parseAndAugment in github.com/gopherjs/gopherjs/build\nfor explanation of behavior used to augment the native packages using the files\nin src subfolder.", + "dir": "compiler/natives", + "files": [ + "compiler/natives/natives.go" + ], + "consts": [], + "vars": [ + { + "name": "FS", + "doc": "FS is a virtual filesystem that contains native packages.", + "declaration": "var FS embed.FS", + "position": { + "file": "compiler/natives/natives.go", + "line": 13 + } + } + ], + "funcs": [], + "types": [], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/prelude", + "name": "prelude", + "synopsis": "", + "doc": "", + "dir": "compiler/prelude", + "files": [ + "compiler/prelude/prelude.go" + ], + "consts": [], + "vars": [], + "funcs": [ + { + "name": "PreludeFiles", + "doc": "PreludeFiles gets the GopherJS JavaScript interop layers.", + "signature": "func PreludeFiles() (files []PreludeFile)", + "position": { + "file": "compiler/prelude/prelude.go", + "line": 31 + }, + "examples": [] + } + ], + "types": [ + { + "name": "PreludeFile", + "doc": "", + "declaration": "type PreludeFile struct {\n\tName string\n\tSource string\n}", + "kind": "struct", + "position": { + "file": "compiler/prelude/prelude.go", + "line": 25 + }, + "fields": [ + { + "name": "Name", + "doc": "", + "type": "string" + }, + { + "name": "Source", + "doc": "", + "type": "string" + } + ], + "methods": [], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/sources", + "name": "sources", + "synopsis": "", + "doc": "", + "dir": "compiler/sources", + "files": [ + "compiler/sources/serializer.go", + "compiler/sources/sources.go" + ], + "consts": [], + "vars": [], + "funcs": [ + { + "name": "SortedSourcesSlice", + "doc": "SortedSourcesSlice in place sorts the given slice of Sources by ImportPath.\nThis will not change the order of the files within any Sources.", + "signature": "func SortedSourcesSlice(sourcesSlice []*Sources)", + "position": { + "file": "compiler/sources/sources.go", + "line": 269 + }, + "examples": [] + } + ], + "types": [ + { + "name": "Importer", + "doc": "", + "declaration": "type Importer func(path, srcDir string) (*Sources, error)", + "kind": "defined", + "position": { + "file": "compiler/sources/sources.go", + "line": 62 + }, + "fields": [], + "methods": [], + "examples": [] + }, + { + "name": "Sources", + "doc": "Sources is a slice of parsed Go sources and additional data for a package.\n\nNote that the sources would normally belong to a single logical Go package,\nbut they don't have to be a real Go package (i.e. found on the file system)\nor represent a complete package (i.e. it could be only a few source files\ncompiled by `gopherjs build foo.go bar.go`).", + "declaration": "type Sources struct {\n\t// ImportPath representing the sources, if exists.\n\t//\n\t// May be empty for \"virtual\"\n\t// packages like testmain or playground-generated package.\n\t// Otherwise this must be the absolute import path for a package.\n\tImportPath string\n\n\t// Dir is the directory containing package sources\n\tDir string\n\n\t// Files is the parsed and augmented Go AST files for the package.\n\tFiles []*ast.File\n\n\t// FileSet is the file set for the parsed files for this source.\n\tFileSet *token.FileSet\n\n\t// JSFiles is the JavaScript files that are part of the package.\n\tJSFiles []incjs.File\n\n\t// TypeInfo is the type information for this package.\n\t// This is nil until set by Analyze.\n\tTypeInfo *analysis.Info\n\n\t// Package is the types package for these source files.\n\t// This is nil until set by TypeCheck.\n\tPackage *types.Package\n\n\t// GoLinknames is the set of Go linknames for this package.\n\t// This is nil until set by ParseGoLinknames.\n\tGoLinknames []linkname.GoLinkname\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "compiler/sources/sources.go", + "line": 25 + }, + "fields": [ + { + "name": "ImportPath", + "doc": "ImportPath representing the sources, if exists.\n\nMay be empty for \"virtual\"\npackages like testmain or playground-generated package.\nOtherwise this must be the absolute import path for a package.", + "type": "string" + }, + { + "name": "Dir", + "doc": "Dir is the directory containing package sources", + "type": "string" + }, + { + "name": "Files", + "doc": "Files is the parsed and augmented Go AST files for the package.", + "type": "[]*ast.File" + }, + { + "name": "FileSet", + "doc": "FileSet is the file set for the parsed files for this source.", + "type": "*token.FileSet" + }, + { + "name": "JSFiles", + "doc": "JSFiles is the JavaScript files that are part of the package.", + "type": "[]incjs.File" + }, + { + "name": "TypeInfo", + "doc": "TypeInfo is the type information for this package.\nThis is nil until set by Analyze.", + "type": "*analysis.Info" + }, + { + "name": "Package", + "doc": "Package is the types package for these source files.\nThis is nil until set by TypeCheck.", + "type": "*types.Package" + }, + { + "name": "GoLinknames", + "doc": "GoLinknames is the set of Go linknames for this package.\nThis is nil until set by ParseGoLinknames.", + "type": "[]linkname.GoLinkname" + } + ], + "methods": [ + { + "name": "Analyze", + "doc": "Analyze will determine the type parameters instances, blocking,\nand other type information for the package.\nThis will set the TypeInfo and Instances fields on the Sources.\n\nThis must be called after to simplify to ensure the pointers\nin the AST are still valid.\nThe instances must be collected prior to this call.\n\nNote that at the end of this call the analysis information\nhas NOT been propagated across packages yet.", + "signature": "func Analyze(importer Importer, tContext *types.Context, instances *typeparams.PackageInstanceSets)", + "position": { + "file": "compiler/sources/sources.go", + "line": 174 + }, + "examples": [] + }, + { + "name": "CollectInstances", + "doc": "CollectInstances will determine the type parameters instances for the package.\n\nThis must be called before Analyze to have the type parameters instances\nneeded during analysis.\n\nNote that once all the sources are collected, the collector needs to be\nfinished to ensure all the instances are collected.", + "signature": "func CollectInstances(tc *typeparams.Collector)", + "position": { + "file": "compiler/sources/sources.go", + "line": 160 + }, + "examples": [] + }, + { + "name": "ParseGoLinknames", + "doc": "ParseGoLinknames extracts all //go:linkname compiler directive from the sources.\n\nThis will set the GoLinknames field on the Sources.", + "signature": "func ParseGoLinknames() error", + "position": { + "file": "compiler/sources/sources.go", + "line": 188 + }, + "examples": [] + }, + { + "name": "Read", + "doc": "Read will call decode multiple times to read the various fields\nof the sources.\nThe order of the calls must match the order of the calls in encodeSources.\n\nThe given srcModTime is used to determine if the serialized sources are\nout-of-date. If they are then this returns a nil sources and nil error,\nand the build time that was read.", + "signature": "func Read(decode func(any) error) error", + "position": { + "file": "compiler/sources/serializer.go", + "line": 53 + }, + "examples": [] + }, + { + "name": "Simplify", + "doc": "Simplify processed each Files entry with astrewrite.Simplify.\n\nNote this function mutates the original Files slice.\nThis must be called after TypeCheck and before analyze since\nthis will change the pointers in the AST. For example, the pointers\nto function literals will change, making it impossible to find them\nin the type information, if analyze is called first.", + "signature": "func Simplify()", + "position": { + "file": "compiler/sources/sources.go", + "line": 85 + }, + "examples": [] + }, + { + "name": "Sort", + "doc": "Sort sorts the Go files slice by the original source name to ensure consistent order\nof processing. This is required for reproducible JavaScript output.\n\nNote this function mutates the original Files slice.", + "signature": "func Sort()", + "position": { + "file": "compiler/sources/sources.go", + "line": 68 + }, + "examples": [] + }, + { + "name": "TypeCheck", + "doc": "TypeCheck the sources. Returns information about declared package types and\ntype information for the supplied AST.\nThis will set the Package field on the Sources.\n\nIf the Package field is not nil, e.g. this function has already been run,\nthis will be a no-op.\n\nThis must be called prior to simplify to get the types.Info used by simplify.", + "signature": "func TypeCheck(importer Importer, sizes types.Sizes, tContext *types.Context) error", + "position": { + "file": "compiler/sources/sources.go", + "line": 99 + }, + "examples": [] + }, + { + "name": "UnresolvedImports", + "doc": "UnresolvedImports calculates the import paths of the package's dependencies\nbased on all the imports in the augmented Go AST files.\n\nThis is used to determine the unresolved imports that weren't in the\nPackageData.Imports slice since they were added during augmentation or\nduring template generation.\n\nThe given skip paths (typically those imports from PackageData.Imports)\nwill not be returned in the results.\nThis will not return any `*_test` packages in the results.", + "signature": "func UnresolvedImports(skip ...string) []string", + "position": { + "file": "compiler/sources/sources.go", + "line": 213 + }, + "examples": [] + }, + { + "name": "Write", + "doc": "Write will call encode multiple times to write the various fields\nof the sources. This is designed to be used with a gob.Encoder.\n\nThe order of the calls must match the order of the calls in Read.\n\ns.TypeInfo, s.baseInfo, s.Package, and s.GoLinknames are intentionally\nomitted from encoding since they must be constructed in the context of the\nfull program to be able to handle generics and cross-package references.", + "signature": "func Write(encode func(any) error) error", + "position": { + "file": "compiler/sources/serializer.go", + "line": 18 + }, + "examples": [] + } + ], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/compiler/typesutil", + "name": "typesutil", + "synopsis": "", + "doc": "", + "dir": "compiler/typesutil", + "files": [ + "compiler/typesutil/map.go", + "compiler/typesutil/signature.go", + "compiler/typesutil/typelist.go", + "compiler/typesutil/typenames.go", + "compiler/typesutil/typesutil.go" + ], + "consts": [], + "vars": [], + "funcs": [ + { + "name": "IsJsObject", + "doc": "", + "signature": "func IsJsObject(t types.Type) bool", + "position": { + "file": "compiler/typesutil/typesutil.go", + "line": 12 + }, + "examples": [] + }, + { + "name": "IsJsPackage", + "doc": "", + "signature": "func IsJsPackage(pkg *types.Package) bool", + "position": { + "file": "compiler/typesutil/typesutil.go", + "line": 8 + }, + "examples": [] + }, + { + "name": "IsMethod", + "doc": "IsMethod returns true if the passed object is a method.", + "signature": "func IsMethod(o types.Object) bool", + "position": { + "file": "compiler/typesutil/typesutil.go", + "line": 112 + }, + "examples": [] + }, + { + "name": "NewSelection", + "doc": "NewSelection creates a new selection.", + "signature": "func NewSelection(kind types.SelectionKind, recv types.Type, index []int, obj types.Object, typ types.Type) Selection", + "position": { + "file": "compiler/typesutil/typesutil.go", + "line": 60 + }, + "examples": [] + }, + { + "name": "OffsetOf", + "doc": "OffsetOf returns byte offset of a struct field specified by the provided\nselection.\n\nAdapted from go/types.Config.offsetof().", + "signature": "func OffsetOf(sizes types.Sizes, sel Selection) int64", + "position": { + "file": "compiler/typesutil/typesutil.go", + "line": 96 + }, + "examples": [] + }, + { + "name": "RecvAsFirstArg", + "doc": "RecvAsFirstArg takes a method signature and returns a function\nsignature with receiver as the first parameter.", + "signature": "func RecvAsFirstArg(sig *types.Signature) *types.Signature", + "position": { + "file": "compiler/typesutil/typesutil.go", + "line": 40 + }, + "examples": [] + }, + { + "name": "RecvType", + "doc": "RecvType returns a named type of a method receiver, or nil if it's not a method.\n\nFor methods on a pointer receiver, the underlying named type is returned.", + "signature": "func RecvType(sig *types.Signature) *types.Named", + "position": { + "file": "compiler/typesutil/typesutil.go", + "line": 24 + }, + "examples": [] + } + ], + "types": [ + { + "name": "Map", + "doc": "Map is a type-safe wrapper around golang.org/x/tools/go/types/typeutil.Map.", + "declaration": "type Map[Val any] struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "compiler/typesutil/map.go", + "line": 10 + }, + "fields": [], + "methods": [ + { + "name": "At", + "doc": "", + "signature": "func At(key types.Type) Val", + "position": { + "file": "compiler/typesutil/map.go", + "line": 12 + }, + "examples": [] + }, + { + "name": "Delete", + "doc": "", + "signature": "func Delete(key types.Type) bool", + "position": { + "file": "compiler/typesutil/map.go", + "line": 30 + }, + "examples": [] + }, + { + "name": "Len", + "doc": "", + "signature": "func Len() int", + "position": { + "file": "compiler/typesutil/map.go", + "line": 32 + }, + "examples": [] + }, + { + "name": "Set", + "doc": "", + "signature": "func Set(key types.Type, value Val) (prev Val)", + "position": { + "file": "compiler/typesutil/map.go", + "line": 21 + }, + "examples": [] + }, + { + "name": "String", + "doc": "", + "signature": "func String() string", + "position": { + "file": "compiler/typesutil/map.go", + "line": 34 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "Selection", + "doc": "Selection is a common interface for go/types.Selection and our custom-constructed\nmethod and field selections.", + "declaration": "type Selection interface {\n\tKind() types.SelectionKind\n\tRecv() types.Type\n\tIndex() []int\n\tObj() types.Object\n\tType() types.Type\n}", + "kind": "interface", + "position": { + "file": "compiler/typesutil/typesutil.go", + "line": 51 + }, + "fields": [ + { + "name": "Kind", + "doc": "", + "type": "func() types.SelectionKind" + }, + { + "name": "Recv", + "doc": "", + "type": "func() types.Type" + }, + { + "name": "Index", + "doc": "", + "type": "func() []int" + }, + { + "name": "Obj", + "doc": "", + "type": "func() types.Object" + }, + { + "name": "Type", + "doc": "", + "type": "func() types.Type" + } + ], + "methods": [], + "examples": [] + }, + { + "name": "Signature", + "doc": "Signature is a helper that provides convenient access to function\nsignature type information.", + "declaration": "type Signature struct {\n\tSig *types.Signature\n}", + "kind": "struct", + "position": { + "file": "compiler/typesutil/signature.go", + "line": 10 + }, + "fields": [ + { + "name": "Sig", + "doc": "", + "type": "*types.Signature" + } + ], + "methods": [ + { + "name": "HasNamedResults", + "doc": "HasNamedResults returns true if the function signature returns something and\nreturned results are names (e.g. `func () (val int, err error)`).", + "signature": "func HasNamedResults() bool", + "position": { + "file": "compiler/typesutil/signature.go", + "line": 65 + }, + "examples": [] + }, + { + "name": "HasResults", + "doc": "HasResults returns true if the function signature returns something.", + "signature": "func HasResults() bool", + "position": { + "file": "compiler/typesutil/signature.go", + "line": 59 + }, + "examples": [] + }, + { + "name": "Param", + "doc": "Param returns the expected argument type for the i'th argument position.\n\nThis function is able to return correct expected types for variadic calls\nboth when ellipsis syntax (e.g. myFunc(requiredArg, optionalArgSlice...))\nis used and when optional args are passed individually.\n\nThe returned types may differ from the actual argument expression types if\nthere is an implicit type conversion involved (e.g. passing a struct into a\nfunction that expects an interface).", + "signature": "func Param(i int, ellipsis bool) types.Type", + "position": { + "file": "compiler/typesutil/signature.go", + "line": 44 + }, + "examples": [] + }, + { + "name": "RequiredParams", + "doc": "RequiredParams returns the number of required parameters in the function signature.", + "signature": "func RequiredParams() int", + "position": { + "file": "compiler/typesutil/signature.go", + "line": 15 + }, + "examples": [] + }, + { + "name": "VariadicType", + "doc": "VariadicType returns the slice-type corresponding to the signature's variadic\nparameter, or nil of the signature is not variadic. With the exception of\nthe special-case `append([]byte{}, \"string\"...)`, the returned type is\n`*types.Slice` and `.Elem()` method can be used to get the type of individual\narguments.", + "signature": "func VariadicType() types.Type", + "position": { + "file": "compiler/typesutil/signature.go", + "line": 28 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "TypeList", + "doc": "TypeList an ordered list of types.", + "declaration": "type TypeList []types.Type", + "kind": "defined", + "position": { + "file": "compiler/typesutil/typelist.go", + "line": 9 + }, + "fields": [], + "methods": [ + { + "name": "Equal", + "doc": "Equal returns true if both lists of type arguments are identical.", + "signature": "func Equal(other TypeList) bool", + "position": { + "file": "compiler/typesutil/typelist.go", + "line": 23 + }, + "examples": [] + }, + { + "name": "String", + "doc": "", + "signature": "func String() string", + "position": { + "file": "compiler/typesutil/typelist.go", + "line": 11 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "TypeNames", + "doc": "TypeNames implements an ordered set of *types.TypeName pointers.\n\nThe set is ordered to ensure deterministic behavior across compiler runs.", + "declaration": "type TypeNames struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "compiler/typesutil/typenames.go", + "line": 8 + }, + "fields": [], + "methods": [ + { + "name": "Add", + "doc": "Add a type name to the set. If the type name has been previously added,\nthis operation is a no-op. Two type names are considered equal iff they have\nthe same memory address.", + "signature": "func Add(name *types.TypeName)", + "position": { + "file": "compiler/typesutil/typenames.go", + "line": 16 + }, + "examples": [] + }, + { + "name": "Slice", + "doc": "Slice returns set elements in the order they were first added to the set.", + "signature": "func Slice() []*types.TypeName", + "position": { + "file": "compiler/typesutil/typenames.go", + "line": 28 + }, + "examples": [] + } + ], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/js", + "name": "js", + "synopsis": "Package js provides functions for interacting with native JavaScript APIs.", + "doc": "Package js provides functions for interacting with native JavaScript APIs. Calls to these functions are treated specially by GopherJS and translated directly to their corresponding JavaScript syntax.\n\nUse MakeWrapper to expose methods to JavaScript. Use MakeFullWrapper to expose methods AND fields to JavaScript. When passing values directly, the following type conversions are performed:\n\n\t| Go type | JavaScript type | Conversions back to any |\n\t| --------------------- | --------------------- | ----------------------- |\n\t| bool | Boolean | bool |\n\t| integers and floats | Number | float64 |\n\t| string | String | string |\n\t| []int8 | Int8Array | []int8 |\n\t| []int16 | Int16Array | []int16 |\n\t| []int32, []int | Int32Array | []int |\n\t| []uint8 | Uint8Array | []uint8 |\n\t| []uint16 | Uint16Array | []uint16 |\n\t| []uint32, []uint | Uint32Array | []uint |\n\t| []float32 | Float32Array | []float32 |\n\t| []float64 | Float64Array | []float64 |\n\t| all other slices | Array | []any |\n\t| arrays | see slice type | see slice type |\n\t| functions | Function | func(...any) *js.Object |\n\t| time.Time | Date | time.Time |\n\t| - | instanceof Node | *js.Object |\n\t| maps, structs | instanceof Object | map[string]any |\n\nAdditionally, for a struct containing a *js.Object field, only the content of the field will be passed to JavaScript and vice versa.", + "dir": "js", + "files": [ + "js/js.go" + ], + "consts": [], + "vars": [ + { + "name": "Global", + "doc": "Global gives JavaScript's global object (\"window\" for browsers and \"GLOBAL\" for Node.js).", + "declaration": "var Global *Object", + "position": { + "file": "js/js.go", + "line": 98 + } + }, + { + "name": "Module", + "doc": "Module gives the value of the \"module\" variable set by Node.js. Hint: Set a\nmodule export with 'js.Module.Get(\"exports\").Set(\"exportName\", ...)'.\n\nNote that js.Module is only defined in runtimes which support CommonJS\nmodules (https://nodejs.org/api/modules.html). NodeJS supports it natively,\nbut in browsers it can only be used if GopherJS output is passed through a\nbundler which implements CommonJS (for example, webpack or esbuild).", + "declaration": "var Module *Object", + "position": { + "file": "js/js.go", + "line": 107 + } + }, + { + "name": "Undefined", + "doc": "Undefined gives the JavaScript value \"undefined\".", + "declaration": "var Undefined *Object", + "position": { + "file": "js/js.go", + "line": 110 + } + } + ], + "funcs": [ + { + "name": "Debugger", + "doc": "Debugger gets compiled to JavaScript's \"debugger;\" statement.", + "signature": "func Debugger()", + "position": { + "file": "js/js.go", + "line": 113 + }, + "examples": [] + }, + { + "name": "InternalObject", + "doc": "InternalObject returns the internal JavaScript object that represents i. Not intended for public use.", + "signature": "func InternalObject(i any) *Object", + "position": { + "file": "js/js.go", + "line": 116 + }, + "examples": [] + }, + { + "name": "Keys", + "doc": "Keys returns the keys of the given JavaScript object.", + "signature": "func Keys(o *Object) []string", + "position": { + "file": "js/js.go", + "line": 126 + }, + "examples": [] + }, + { + "name": "MakeFullWrapper", + "doc": "MakeFullWrapper creates a JavaScript object which has wrappers for the exported\nmethods of i, and, where i is a (pointer to a) struct value, wrapped getters\nand setters\n(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)\nfor the non-embedded exported fields of i. Values accessed via these methods\nand getters are themselves wrapped when accessed, but an important point to\nnote is that a new wrapped value is created on each access.", + "signature": "func MakeFullWrapper(i any) *Object", + "position": { + "file": "js/js.go", + "line": 163 + }, + "examples": [] + }, + { + "name": "MakeFunc", + "doc": "MakeFunc wraps a function and gives access to the values of JavaScript's \"this\" and \"arguments\" keywords.", + "signature": "func MakeFunc(fn func(this *Object, arguments []*Object) any) *Object", + "position": { + "file": "js/js.go", + "line": 121 + }, + "examples": [] + }, + { + "name": "MakeUint64", + "doc": "MakeUint64 will take the high and low parts to construct a uint64 number.\nSince JS doesn't have a 64-bit integer we store it as a high and low 32-bit integers.", + "signature": "func MakeUint64(hi, lo float64) uint64", + "position": { + "file": "js/js.go", + "line": 265 + }, + "examples": [] + }, + { + "name": "MakeWrapper", + "doc": "MakeWrapper creates a JavaScript object which has wrappers for the exported methods of i. Use explicit getter and setter methods to expose struct fields to JavaScript.", + "signature": "func MakeWrapper(i any) *Object", + "position": { + "file": "js/js.go", + "line": 139 + }, + "examples": [] + }, + { + "name": "NewArrayBuffer", + "doc": "NewArrayBuffer creates a JavaScript ArrayBuffer from a byte slice.", + "signature": "func NewArrayBuffer(b []byte) *Object", + "position": { + "file": "js/js.go", + "line": 250 + }, + "examples": [] + }, + { + "name": "Uint64High", + "doc": "Uint64High will get the high 32-bit integer used when storing uint64.", + "signature": "func Uint64High(x uint64) uint32", + "position": { + "file": "js/js.go", + "line": 268 + }, + "examples": [] + }, + { + "name": "Uint64Low", + "doc": "Uint64Low will get the low 32-bit integer used when storing uint64.", + "signature": "func Uint64Low(x uint64) uint32", + "position": { + "file": "js/js.go", + "line": 271 + }, + "examples": [] + } + ], + "types": [ + { + "name": "Error", + "doc": "Error encapsulates JavaScript errors. Those are turned into a Go panic and may be recovered, giving an *Error that holds the JavaScript error object.", + "declaration": "type Error struct {\n\t*Object\n}", + "kind": "struct", + "position": { + "file": "js/js.go", + "line": 83 + }, + "fields": [ + { + "name": "*Object", + "doc": "", + "type": "*Object", + "embedded": true + } + ], + "methods": [ + { + "name": "Error", + "doc": "Error returns the message of the encapsulated JavaScript error object.", + "signature": "func Error) Error() string", + "position": { + "file": "js/js.go", + "line": 88 + }, + "examples": [] + }, + { + "name": "Stack", + "doc": "Stack returns the stack property of the encapsulated JavaScript error object.", + "signature": "func Stack() string", + "position": { + "file": "js/js.go", + "line": 93 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "M", + "doc": "M is a simple map type. It is intended as a shorthand for JavaScript objects (before conversion).", + "declaration": "type M map[string]any", + "kind": "defined", + "position": { + "file": "js/js.go", + "line": 258 + }, + "fields": [], + "methods": [], + "examples": [] + }, + { + "name": "Object", + "doc": "Object is a container for a native JavaScript object. Calls to its methods are treated specially by GopherJS and translated directly to their JavaScript syntax. A nil pointer to Object is equal to JavaScript's \"null\". Object can not be used as a map key.", + "declaration": "type Object struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "js/js.go", + "line": 29 + }, + "fields": [], + "methods": [ + { + "name": "Bool", + "doc": "Bool returns the object converted to bool according to JavaScript type conversions.", + "signature": "func Bool() bool", + "position": { + "file": "js/js.go", + "line": 59 + }, + "examples": [] + }, + { + "name": "Call", + "doc": "Call calls the object's method with the given name.", + "signature": "func Call(name string, args ...any) *Object", + "position": { + "file": "js/js.go", + "line": 50 + }, + "examples": [] + }, + { + "name": "Delete", + "doc": "Delete removes the object's property with the given key.", + "signature": "func Delete(key string)", + "position": { + "file": "js/js.go", + "line": 38 + }, + "examples": [] + }, + { + "name": "Float", + "doc": "Float returns the object converted to float64 according to JavaScript type conversions (parseFloat).", + "signature": "func Float() float64", + "position": { + "file": "js/js.go", + "line": 74 + }, + "examples": [] + }, + { + "name": "Get", + "doc": "Get returns the object's property with the given key.", + "signature": "func Get(key string) *Object", + "position": { + "file": "js/js.go", + "line": 32 + }, + "examples": [] + }, + { + "name": "Index", + "doc": "Index returns the i'th element of an array.", + "signature": "func Index(i int) *Object", + "position": { + "file": "js/js.go", + "line": 44 + }, + "examples": [] + }, + { + "name": "Int", + "doc": "Int returns the object converted to int according to JavaScript type conversions (parseInt).", + "signature": "func Int() int", + "position": { + "file": "js/js.go", + "line": 65 + }, + "examples": [] + }, + { + "name": "Int64", + "doc": "Int64 returns the object converted to int64 according to JavaScript type conversions (parseInt).", + "signature": "func Int64() int64", + "position": { + "file": "js/js.go", + "line": 68 + }, + "examples": [] + }, + { + "name": "Interface", + "doc": "Interface returns the object converted to any. See table in package comment for details.", + "signature": "func Interface() any", + "position": { + "file": "js/js.go", + "line": 77 + }, + "examples": [] + }, + { + "name": "Invoke", + "doc": "Invoke calls the object itself. This will fail if it is not a function.", + "signature": "func Invoke(args ...any) *Object", + "position": { + "file": "js/js.go", + "line": 53 + }, + "examples": [] + }, + { + "name": "Length", + "doc": "Length returns the object's \"length\" property, converted to int.", + "signature": "func Length() int", + "position": { + "file": "js/js.go", + "line": 41 + }, + "examples": [] + }, + { + "name": "New", + "doc": "New creates a new instance of this type object. This will fail if it not a function (constructor).", + "signature": "func New(args ...any) *Object", + "position": { + "file": "js/js.go", + "line": 56 + }, + "examples": [] + }, + { + "name": "Set", + "doc": "Set assigns the value to the object's property with the given key.", + "signature": "func Set(key string, value any)", + "position": { + "file": "js/js.go", + "line": 35 + }, + "examples": [] + }, + { + "name": "SetIndex", + "doc": "SetIndex sets the i'th element of an array.", + "signature": "func SetIndex(i int, value any)", + "position": { + "file": "js/js.go", + "line": 47 + }, + "examples": [] + }, + { + "name": "String", + "doc": "String returns the object converted to string according to JavaScript type conversions.", + "signature": "func String() string", + "position": { + "file": "js/js.go", + "line": 62 + }, + "examples": [] + }, + { + "name": "Uint64", + "doc": "Uint64 returns the object converted to uint64 according to JavaScript type conversions (parseInt).", + "signature": "func Uint64() uint64", + "position": { + "file": "js/js.go", + "line": 71 + }, + "examples": [] + }, + { + "name": "Unsafe", + "doc": "Unsafe returns the object as an uintptr, which can be converted via unsafe.Pointer. Not intended for public use.", + "signature": "func Unsafe() uintptr", + "position": { + "file": "js/js.go", + "line": 80 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "S", + "doc": "S is a simple slice type. It is intended as a shorthand for JavaScript arrays (before conversion).", + "declaration": "type S []any", + "kind": "defined", + "position": { + "file": "js/js.go", + "line": 261 + }, + "fields": [], + "methods": [], + "examples": [] + } + ], + "examples": [] + }, + { + "importPath": "github.com/gopherjs/gopherjs/nosync", + "name": "nosync", + "synopsis": "", + "doc": "", + "dir": "nosync", + "files": [ + "nosync/map.go", + "nosync/mutex.go", + "nosync/once.go", + "nosync/pool.go" + ], + "consts": [], + "vars": [], + "funcs": [], + "types": [ + { + "name": "Map", + "doc": "Map is a concurrent map with amortized-constant-time loads, stores, and deletes.\nIt is safe for multiple goroutines to call a Map's methods concurrently.\n\nThe zero Map is valid and empty.\n\nA Map must not be copied after first use.", + "declaration": "type Map struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "nosync/map.go", + "line": 9 + }, + "fields": [], + "methods": [ + { + "name": "Delete", + "doc": "Delete deletes the value for a key.", + "signature": "func Delete(key any)", + "position": { + "file": "nosync/map.go", + "line": 44 + }, + "examples": [] + }, + { + "name": "Load", + "doc": "Load returns the value stored in the map for a key, or nil if no\nvalue is present.\nThe ok result indicates whether value was found in the map.", + "signature": "func Load(key any) (value any, ok bool)", + "position": { + "file": "nosync/map.go", + "line": 16 + }, + "examples": [] + }, + { + "name": "LoadOrStore", + "doc": "LoadOrStore returns the existing value for the key if present.\nOtherwise, it stores and returns the given value.\nThe loaded result is true if the value was loaded, false if stored.", + "signature": "func LoadOrStore(key, value any) (actual any, loaded bool)", + "position": { + "file": "nosync/map.go", + "line": 32 + }, + "examples": [] + }, + { + "name": "Range", + "doc": "Range calls f sequentially for each key and value present in the map.\nIf f returns false, range stops the iteration.\n\nRange does not necessarily correspond to any consistent snapshot of the Map's\ncontents: no key will be visited more than once, but if the value for any key\nis stored or deleted concurrently, Range may reflect any mapping for that key\nfrom any point during the Range call.\n\nRange may be O(N) with the number of elements in the map even if f returns\nfalse after a constant number of calls.", + "signature": "func Range(f func(key, value any) bool)", + "position": { + "file": "nosync/map.go", + "line": 61 + }, + "examples": [] + }, + { + "name": "Store", + "doc": "Store sets the value for a key.", + "signature": "func Store(key, value any)", + "position": { + "file": "nosync/map.go", + "line": 22 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "Mutex", + "doc": "Mutex is a dummy which is non-blocking.", + "declaration": "type Mutex struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "nosync/mutex.go", + "line": 4 + }, + "fields": [], + "methods": [ + { + "name": "Lock", + "doc": "Lock locks m. It is a run-time error if m is already locked.", + "signature": "func Lock()", + "position": { + "file": "nosync/mutex.go", + "line": 13 + }, + "examples": [] + }, + { + "name": "Unlock", + "doc": "Unlock unlocks m. It is a run-time error if m is not locked.", + "signature": "func Unlock()", + "position": { + "file": "nosync/mutex.go", + "line": 21 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "Once", + "doc": "Once is an object that will perform exactly one action.", + "declaration": "type Once struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "nosync/once.go", + "line": 4 + }, + "fields": [], + "methods": [ + { + "name": "Do", + "doc": "Do calls the function f if and only if Do is being called for the\nfirst time for this instance of Once. In other words, given\n\n\tvar once Once\n\nif once.Do(f) is called multiple times, only the first call will invoke f,\neven if f has a different value in each invocation. A new instance of\nOnce is required for each function to execute.\n\nDo is intended for initialization that must be run exactly once. Since f\nis niladic, it may be necessary to use a function literal to capture the\narguments to a function to be invoked by Do:\n\n\tconfig.once.Do(func() { config.init(filename) })\n\nIf f causes Do to be called, it will panic.\n\nIf f panics, Do considers it to have returned; future calls of Do return\nwithout calling f.", + "signature": "func Do(f func())", + "position": { + "file": "nosync/once.go", + "line": 28 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "Pool", + "doc": "A Pool is a set of temporary objects that may be individually saved and\nretrieved.\n\nAny item stored in the Pool may be removed automatically at any time without\nnotification. If the Pool holds the only reference when this happens, the\nitem might be deallocated.\n\nA Pool is safe for use by multiple goroutines simultaneously.\n\nPool's purpose is to cache allocated but unused items for later reuse,\nrelieving pressure on the garbage collector. That is, it makes it easy to\nbuild efficient, thread-safe free lists. However, it is not suitable for all\nfree lists.\n\nAn appropriate use of a Pool is to manage a group of temporary items\nsilently shared among and potentially reused by concurrent independent\nclients of a package. Pool provides a way to amortize allocation overhead\nacross many clients.\n\nAn example of good use of a Pool is in the fmt package, which maintains a\ndynamically-sized store of temporary output buffers. The store scales under\nload (when many goroutines are actively printing) and shrinks when\nquiescent.\n\nOn the other hand, a free list maintained as part of a short-lived object is\nnot a suitable use for a Pool, since the overhead does not amortize well in\nthat scenario. It is more efficient to have such objects implement their own\nfree list.", + "declaration": "type Pool struct {\n\tNew func() any\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "nosync/pool.go", + "line": 31 + }, + "fields": [ + { + "name": "New", + "doc": "", + "type": "func() any" + } + ], + "methods": [ + { + "name": "Get", + "doc": "Get selects an arbitrary item from the Pool, removes it from the\nPool, and returns it to the caller.\nGet may choose to ignore the pool and treat it as empty.\nCallers should not assume any relation between values passed to Put and\nthe values returned by Get.\n\nIf Get would otherwise return nil and p.New is non-nil, Get returns\nthe result of calling p.New.", + "signature": "func Get() any", + "position": { + "file": "nosync/pool.go", + "line": 44 + }, + "examples": [] + }, + { + "name": "Put", + "doc": "Put adds x to the pool.", + "signature": "func Put(x any)", + "position": { + "file": "nosync/pool.go", + "line": 57 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "RWMutex", + "doc": "RWMutex is a dummy which is non-blocking.", + "declaration": "type RWMutex struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "nosync/mutex.go", + "line": 29 + }, + "fields": [], + "methods": [ + { + "name": "Lock", + "doc": "Lock locks m for writing. It is a run-time error if rw is already locked for reading or writing.", + "signature": "func Lock()", + "position": { + "file": "nosync/mutex.go", + "line": 41 + }, + "examples": [] + }, + { + "name": "RLock", + "doc": "RLock locks m for reading. It is a run-time error if rw is already locked for reading or writing.", + "signature": "func RLock()", + "position": { + "file": "nosync/mutex.go", + "line": 57 + }, + "examples": [] + }, + { + "name": "RUnlock", + "doc": "RUnlock undoes a single RLock call; it does not affect other simultaneous readers. It is a run-time error if rw is not locked for reading.", + "signature": "func RUnlock()", + "position": { + "file": "nosync/mutex.go", + "line": 65 + }, + "examples": [] + }, + { + "name": "Unlock", + "doc": "Unlock unlocks rw for writing. It is a run-time error if rw is not locked for writing.", + "signature": "func Unlock()", + "position": { + "file": "nosync/mutex.go", + "line": 49 + }, + "examples": [] + } + ], + "examples": [] + }, + { + "name": "WaitGroup", + "doc": "WaitGroup is a dummy which is non-blocking.", + "declaration": "type WaitGroup struct {\n\t// contains filtered or unexported fields\n}", + "kind": "struct", + "position": { + "file": "nosync/mutex.go", + "line": 73 + }, + "fields": [], + "methods": [ + { + "name": "Add", + "doc": "Add adds delta, which may be negative, to the WaitGroup If the counter goes negative, Add panics.", + "signature": "func Add(delta int)", + "position": { + "file": "nosync/mutex.go", + "line": 78 + }, + "examples": [] + }, + { + "name": "Done", + "doc": "Done decrements the WaitGroup counter.", + "signature": "func Done()", + "position": { + "file": "nosync/mutex.go", + "line": 86 + }, + "examples": [] + }, + { + "name": "Wait", + "doc": "Wait panics if the WaitGroup counter is not zero.", + "signature": "func WaitGroup) Wait()", + "position": { + "file": "nosync/mutex.go", + "line": 91 + }, + "examples": [] + } + ], + "examples": [] + } + ], + "examples": [] + } + ] +} diff --git a/sourcey/introduction.md b/sourcey/introduction.md new file mode 100644 index 00000000..1dac95af --- /dev/null +++ b/sourcey/introduction.md @@ -0,0 +1,30 @@ +--- +title: GopherJS documentation +description: Reference documentation for the GopherJS compiler and its public Go packages. +--- + +# GopherJS documentation + +GopherJS compiles Go code to JavaScript so Go programs can run in browsers and +other JavaScript environments. + +This site brings the project's public Go API into one searchable reference. It +is generated from the real GopherJS source at commit +[`490705b`](https://github.com/gopherjs/gopherjs/tree/490705b1d6fc7d5bd9202ac41888e146183328eb), +covering 17 public packages and 197 exported functions, types, methods, +variables, and constants. + +## Start here + +- [Install and use GopherJS](https://github.com/gopherjs/gopherjs#how-to-use) +- [Try the GopherJS playground](https://gopherjs.github.io/playground/) +- [Read the API reference](/docs/api.html) +- [Review compatibility notes](https://github.com/gopherjs/gopherjs/blob/490705b1d6fc7d5bd9202ac41888e146183328eb/doc/compatibility.md) +- [Check supported packages](https://github.com/gopherjs/gopherjs/blob/490705b1d6fc7d5bd9202ac41888e146183328eb/doc/packages.md) + +## What is included + +The reference covers the compiler, build system, JavaScript interop package, +source map utilities, and other exported packages intended for GopherJS users +and contributors. Every API entry is derived from Go source and links back to +the pinned project revision for verification. diff --git a/sourcey/package-lock.json b/sourcey/package-lock.json new file mode 100644 index 00000000..22e1e8ee --- /dev/null +++ b/sourcey/package-lock.json @@ -0,0 +1,4549 @@ +{ + "name": "gopherjs-sourcey-docs", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "gopherjs-sourcey-docs", + "devDependencies": { + "sourcey": "3.6.5" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-13.0.5.tgz", + "integrity": "sha512-xfh4xVJD62gG6spIc7lwxoWT+l16nZu1ELyU8FkjaP/oD2yP09EvLAU6KhtudN9aML2Khhs9pY6Slr7KGTES3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz", + "integrity": "sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz", + "integrity": "sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@exodus/schemasafe": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", + "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.143.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.143.0.tgz", + "integrity": "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@preact/preset-vite": { + "version": "2.10.6", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.10.6.tgz", + "integrity": "sha512-ZZ5RIT2ZVXg8UxRA8VZpoT8CdpDG7RFIqOT4bELqNBp85+HKvQBbgmh3gsoW1UOQXx26TLe+ZRNKI7q281Kckw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@prefresh/vite": "^2.4.11", + "@rollup/pluginutils": "^5.0.0", + "babel-plugin-transform-hook-names": "^1.0.2", + "debug": "^4.4.3", + "magic-string": "^0.30.21", + "picocolors": "^1.1.1", + "vite-prerender-plugin": "^0.5.8", + "zimmerframe": "^1.1.4" + }, + "peerDependencies": { + "@babel/core": "7.x", + "vite": "2.x || 3.x || 4.x || 5.x || 6.x || 7.x || 8.x" + } + }, + "node_modules/@prefresh/babel-plugin": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.3.tgz", + "integrity": "sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@prefresh/core": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.10.tgz", + "integrity": "sha512-7yPTFbG56sutaFu8krp3B4a200KOFUvrtlllKWRuLjsYXo9UUucHOZRcer+gtgMkFTpv6ob8TGcTwA32bSwa1w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "preact": "^10.0.0 || ^11.0.0-0" + } + }, + "node_modules/@prefresh/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@prefresh/vite": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.12.tgz", + "integrity": "sha512-FY1fzXpUjiuosznMV0YM7XAOPZjB5FIdWS0W24+XnlxYkt9hNAwwsiKYn+cuTEoMtD/ZVazS5QVssBr9YhpCQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "^0.5.2", + "@prefresh/core": "^1.5.0", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" + }, + "peerDependencies": { + "preact": "^10.4.0 || ^11.0.0-0", + "vite": ">=2.0.0" + } + }, + "node_modules/@prefresh/vite/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@prefresh/vite/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@resvg/resvg-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz", + "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@resvg/resvg-js-android-arm-eabi": "2.6.2", + "@resvg/resvg-js-android-arm64": "2.6.2", + "@resvg/resvg-js-darwin-arm64": "2.6.2", + "@resvg/resvg-js-darwin-x64": "2.6.2", + "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2", + "@resvg/resvg-js-linux-arm64-gnu": "2.6.2", + "@resvg/resvg-js-linux-arm64-musl": "2.6.2", + "@resvg/resvg-js-linux-x64-gnu": "2.6.2", + "@resvg/resvg-js-linux-x64-musl": "2.6.2", + "@resvg/resvg-js-win32-arm64-msvc": "2.6.2", + "@resvg/resvg-js-win32-ia32-msvc": "2.6.2", + "@resvg/resvg-js-win32-x64-msvc": "2.6.2" + } + }, + "node_modules/@resvg/resvg-js-android-arm-eabi": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz", + "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-android-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz", + "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz", + "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-x64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz", + "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz", + "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-gnu": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz", + "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-musl": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz", + "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-gnu": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz", + "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-musl": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz", + "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-arm64-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz", + "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-ia32-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz", + "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-x64-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz", + "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.3.tgz", + "integrity": "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.3.tgz", + "integrity": "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.3.tgz", + "integrity": "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.3.tgz", + "integrity": "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.3.tgz", + "integrity": "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.3.tgz", + "integrity": "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.3.tgz", + "integrity": "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.3.tgz", + "integrity": "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.3.tgz", + "integrity": "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.3.tgz", + "integrity": "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.3.tgz", + "integrity": "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.3.tgz", + "integrity": "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@shikijs/core": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.2.tgz", + "integrity": "sha512-StyzbAyxg2/tBGf78gwbBkGyeQ73lf8UiJArFaQhTQIDqQOCKPCQFanvrs4/Yv3Yfyc+ONInJM6K+FMIf+P+kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.4.2", + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.2.tgz", + "integrity": "sha512-MnIkeqWdVPUWsxlx8gKLVCJFTsqrQJgpTPBPpQwaFeJ56lOnJxj5aN2LUFnfxUEcvOQuNocmbaMnVrCEln6rkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.2.tgz", + "integrity": "sha512-GLhowz1+jixjz+wiZ3wMnOn1jTxiFCGl2PkXufivbnwPHKuyw1AYqu5/hbWhZZ2oAb0NP05WUJhYeigY14drnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.2.tgz", + "integrity": "sha512-8DfeusD+Zdv/eYIDdXyJTUnSMHt+aAWjAOCXV20HNGAHRlInXpG8wh421v6B91WOm9TFwRLN+b/LG5F2NAIojg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.2.tgz", + "integrity": "sha512-l6fQQKsOMlz72n38fztmSgZ76MO6KSWuw8o+GJ+FhmqrpC9pIOJNQNXGgbb5yX2AwpzlEHwsaLPnk/8o4Fm+rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.2.tgz", + "integrity": "sha512-H0CFoL07ddDC2Dd6EdrPYNkRhUR6YCkJlnuYFceYYUJJA5TIm2b5B33qqiDYryBExgbKMndFJPb2u1gTuqO37g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.2.tgz", + "integrity": "sha512-PFYitV4vpDr/iPCIhnHp+Q4ftic5N5VeNJ3KQ1O8gn3h2ar8qgwMAXF7tq4m1CWaMS60fV4VqF6vfnWH4F7vqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@shuding/opentype.js": { + "version": "1.4.0-beta.0", + "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz", + "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fflate": "^0.7.3", + "string.prototype.codepointat": "^0.2.1" + }, + "bin": { + "ot": "bin/ot" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "inBundle": true, + "license": "0BSD", + "optional": true + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.20.tgz", + "integrity": "sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >=4.0.0 || insiders" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "dev": true, + "license": "ISC" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/babel-plugin-transform-hook-names": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", + "integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.12.10" + } + }, + "node_modules/base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.12", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.12.tgz", + "integrity": "sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.28.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz", + "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.44", + "caniuse-lite": "^1.0.30001806", + "electron-to-chromium": "^1.5.393", + "node-releases": "^2.0.51", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001806", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-background-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz", + "integrity": "sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-box-shadow": { + "version": "1.0.0-3", + "resolved": "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz", + "integrity": "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-gradient-parser": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/css-gradient-parser/-/css-gradient-parser-0.0.17.tgz", + "integrity": "sha512-w2Xy9UMMwlKtou0vlRnXvWglPAceXCTtcmVSo8ZBUvqCV5aXEFP/PC6d+I464810I9FT++UACwTD5511bmGPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/css-select/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/css-select/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dom-serializer": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-3.1.1.tgz", + "integrity": "sha512-4MEa38/QexBob6gFNwu+EGdWvhJ1OKuNwdYY3Y3NyeWDQfnGeDYQUDfIRzWu5B5gsv03so2Uxd28YC6zrsx3Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^3.0.0", + "domhandler": "^6.0.0", + "entities": "^8.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-3.0.0.tgz", + "integrity": "sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/domhandler": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-6.0.1.tgz", + "integrity": "sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^3.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-4.0.2.tgz", + "integrity": "sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^3.0.0", + "domelementtype": "^3.0.0", + "domhandler": "^6.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.401", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.401.tgz", + "integrity": "sha512-H6ViHN68nGYlChEvlIU67fn8O2/tpbWQPwck98yaJmh+08LSvHiydzDQ6oXNccLU3kNRVIRS9A4mA7CG+i6fLQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex-xs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-2.0.1.tgz", + "integrity": "sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.24.5", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", + "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.5.tgz", + "integrity": "sha512-QieYf//cis6ywHNi5qW1+PXPQ4bC+XVJAtS4AXIML8P76GroEiOxm/oQtn1f02UkJY1+KsXMJcC+R2v/Eg4G3g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/heroicons": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/heroicons/-/heroicons-2.2.0.tgz", + "integrity": "sha512-yOwvztmNiBWqR946t+JdgZmyzEmnRMC2nxvHFC90bF1SUttwB6yJKYeme1JeEcBfobdOs827nCyiWBS2z/brog==", + "dev": true, + "license": "MIT" + }, + "node_modules/hex-rgb": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz", + "integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlparser2": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-12.0.0.tgz", + "integrity": "sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^3.0.0", + "domhandler": "^6.0.0", + "domutils": "^4.0.2", + "entities": "^8.0.0" + }, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/http2-client": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", + "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/launder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/launder/-/launder-1.7.1.tgz", + "integrity": "sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dayjs": "^1.11.7" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/linebreak": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", + "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "0.0.8", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mcp-parser": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mcp-parser/-/mcp-parser-0.4.1.tgz", + "integrity": "sha512-6h2WCkQa5mXqGE1fg4VK/IhGMvvulevhGZaj5ydRp4ZXIil0U0eYZ6n8RteMUfkGXf1sCMeAnht17a0YK40nzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mcp-schema": "^0.3.2" + }, + "bin": { + "mcp-parser": "dist/cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/mcp-schema": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/mcp-schema/-/mcp-schema-0.3.2.tgz", + "integrity": "sha512-s3OpiroBwXd09h2GBssi1vpjPtq8M8Sv1J7O4JTWEr2TYlHM3Gf0Ae4HaZLrTznQ0EDKPWEE7LqQ+2+JHWqoOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/moxygen": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/moxygen/-/moxygen-2.1.12.tgz", + "integrity": "sha512-jPDT933A9JJNDPXyy4HayCUYhMr9+42oB4n5OwIwcI8b8EX1n184lTRzvyLiNQuv386fj5Qp0F54u1RMTKvkzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^13.1.0", + "handlebars": "^4.7.9", + "xml2js": "^0.6.2" + }, + "bin": { + "moxygen": "dist/cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.17", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", + "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-h2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", + "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "http2-client": "^1.2.5" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/node-readfiles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", + "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-promise": "^3.2.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.52", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.52.tgz", + "integrity": "sha512-MRlTqhAfoMx/4mhEbPo3Hi02g9LJZaJkka69V6h67Cb1gjrAG0jsTE4CZX1eptNx+VCAwJmfpnDIF4P0Nh1A7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/oas-kit-common": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", + "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/oas-linter": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", + "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@exodus/schemasafe": "^1.0.0-rc.2", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-linter/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/oas-resolver": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", + "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "node-fetch-h2": "^2.3.0", + "oas-kit-common": "^1.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "resolve": "resolve.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-resolver/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/oas-schema-walker": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", + "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", + "dev": true, + "license": "BSD-3-Clause", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-validator": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", + "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "call-me-maybe": "^1.0.1", + "oas-kit-common": "^1.0.8", + "oas-linter": "^3.2.2", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "reftools": "^1.1.9", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-validator/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-css-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/parse-css-color/-/parse-css-color-0.2.1.tgz", + "integrity": "sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.1.4", + "hex-rgb": "^4.1.0" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/preact": { + "version": "10.29.8", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz", + "integrity": "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + }, + "peerDependencies": { + "preact-render-to-string": ">=5" + }, + "peerDependenciesMeta": { + "preact-render-to-string": { + "optional": true + } + } + }, + "node_modules/preact-render-to-string": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.7.0.tgz", + "integrity": "sha512-Z4WR8fmLMRpdYqJ9i7vrlXSsSrxVJydwrkEXHapexfARbWfGb7vGcnvNQnIzN0cXciMVOlz/XLoiMCi9gUsy9Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "preact": ">=10 || >= 11.0.0-0" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/reftools": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", + "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", + "dev": true, + "license": "BSD-3-Clause", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rolldown": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.3.tgz", + "integrity": "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.143.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.2.3", + "@rolldown/binding-darwin-arm64": "1.2.3", + "@rolldown/binding-darwin-x64": "1.2.3", + "@rolldown/binding-freebsd-x64": "1.2.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.3", + "@rolldown/binding-linux-arm64-gnu": "1.2.3", + "@rolldown/binding-linux-arm64-musl": "1.2.3", + "@rolldown/binding-linux-ppc64-gnu": "1.2.3", + "@rolldown/binding-linux-s390x-gnu": "1.2.3", + "@rolldown/binding-linux-x64-gnu": "1.2.3", + "@rolldown/binding-linux-x64-musl": "1.2.3", + "@rolldown/binding-openharmony-arm64": "1.2.3", + "@rolldown/binding-win32-arm64-msvc": "1.2.3", + "@rolldown/binding-win32-x64-msvc": "1.2.3" + } + }, + "node_modules/sanitize-html": { + "version": "2.17.6", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.6.tgz", + "integrity": "sha512-M4bo9tfv1yfhQZZKkc6dL07ALrGJtfvNOuhX3hU9AVPR/uPQ+nKOJBqTYc7LfMQblTW04mtSWDJWEyLvygJsLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^12.0.0", + "is-plain-object": "^5.0.0", + "launder": "^1.7.1", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/satori": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/satori/-/satori-0.26.0.tgz", + "integrity": "sha512-tkMFrfIs3l2mQ2JEcyW0ADTy3zGggFRFzi6Ef8YozQSFsFKEqaSO1Y8F9wJg4//PJGQauMalHGTUEkPrFwhVPA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@shuding/opentype.js": "1.4.0-beta.0", + "css-background-parser": "^0.1.0", + "css-box-shadow": "1.0.0-3", + "css-gradient-parser": "^0.0.17", + "css-to-react-native": "^3.0.0", + "emoji-regex-xs": "^2.0.1", + "escape-html": "^1.0.3", + "linebreak": "^1.1.0", + "parse-css-color": "^0.2.1", + "postcss-value-parser": "^4.2.0", + "yoga-layout": "^3.2.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shiki": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.2.tgz", + "integrity": "sha512-P8F/dFhRevaw2uSdeIYlq/5SXZNY85DPtmXQ947gD1Zj2JqO5AkNvVVBar0Me9JkFx3uzVud/qOtP5ek9NEQGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.4.2", + "@shikijs/engine-javascript": "4.4.2", + "@shikijs/engine-oniguruma": "4.4.2", + "@shikijs/langs": "4.4.2", + "@shikijs/themes": "4.4.2", + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/simple-code-frame": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/simple-code-frame/-/simple-code-frame-1.3.0.tgz", + "integrity": "sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "kolorist": "^1.6.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcey": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/sourcey/-/sourcey-3.6.5.tgz", + "integrity": "sha512-Pq0UMFsMha5lYrA57iPiUxXe3usvpzbuOs8kawQydxFGUlGvasP9bPFF2gQpN9yWBTWpnIVlaxZamHEzdtj+1A==", + "dev": true, + "license": "AGPL-3.0-only", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^13.0.5", + "@preact/preset-vite": "^2.10.4", + "@resvg/resvg-js": "^2.6.2", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.2.2", + "citty": "^0.1.6", + "heroicons": "^2.2.0", + "jiti": "^2.6.1", + "js-yaml": "^4.1.0", + "marked": "^15.0.0", + "mcp-parser": "^0.4.0", + "moxygen": "^2.1.12", + "preact": "^10.28.4", + "preact-render-to-string": "^6.6.6", + "sanitize-html": "^2.17.4", + "satori": "^0.26.0", + "shiki": "^4.0.2", + "swagger2openapi": "^7.0.8", + "tailwindcss": "^4.2.2", + "vite": "^8.0.9" + }, + "bin": { + "sourcey": "dist/cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://sourcey.com" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0.tgz", + "integrity": "sha512-H6D7134xi6qONvh7ZHKgviXf+rd3vhGBSvebPZCaUkd8zvQ+7PtDw6CljPTe4cXWNf2IKZGNqw6VJXSb9IgBpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", + "dev": true, + "license": "MIT" + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swagger2openapi": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", + "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "call-me-maybe": "^1.0.1", + "node-fetch": "^2.6.1", + "node-fetch-h2": "^2.3.0", + "node-readfiles": "^0.2.0", + "oas-kit-common": "^1.0.8", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "oas-validator": "^5.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "boast": "boast.js", + "oas-validate": "oas-validate.js", + "swagger2openapi": "swagger2openapi.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/swagger2openapi/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.0.tgz", + "integrity": "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.23", + "rolldown": "~1.2.0", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-prerender-plugin": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/vite-prerender-plugin/-/vite-prerender-plugin-0.5.13.tgz", + "integrity": "sha512-IKSpYkzDBsKAxa05naRbj7GvNVMSdww/Z/E89oO3xndz+gWnOBOKOAbEXv7qDhktY/j3vHgJmoV1pPzqU2tx9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "kolorist": "^1.8.0", + "magic-string": "0.x >= 0.26.0", + "node-html-parser": "^6.1.12", + "simple-code-frame": "^1.3.0", + "source-map": "^0.7.4", + "stack-trace": "^1.0.0-pre2" + }, + "peerDependencies": { + "vite": "5.x || 6.x || 7.x || 8.x" + } + }, + "node_modules/vite-prerender-plugin/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/vite/node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/vite/node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "extraneous": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/sourcey/package.json b/sourcey/package.json new file mode 100644 index 00000000..4a5ef756 --- /dev/null +++ b/sourcey/package.json @@ -0,0 +1,11 @@ +{ + "name": "gopherjs-sourcey-docs", + "private": true, + "scripts": { + "build": "sourcey build -c sourcey.config.ts -o ../docs", + "postbuild": "node scripts/fix-sourcey-links.mjs" + }, + "devDependencies": { + "sourcey": "3.6.5" + } +} diff --git a/sourcey/scripts/fix-sourcey-links.mjs b/sourcey/scripts/fix-sourcey-links.mjs new file mode 100644 index 00000000..18dc044d --- /dev/null +++ b/sourcey/scripts/fix-sourcey-links.mjs @@ -0,0 +1,51 @@ +import { readdir, readFile, writeFile } from "node:fs/promises"; +import { join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const outputDirectory = fileURLToPath(new URL("../../docs/", import.meta.url)); +const sourceCommit = "490705b1d6fc7d5bd9202ac41888e146183328eb"; +const wrongIntroductionEditUrl = + `https://github.com/gopherjs/gopherjs/edit/${sourceCommit}/introduction.md`; +const correctIntroductionEditUrl = + "https://github.com/gopherjs/gopherjs.github.io/edit/master/sourcey/introduction.md"; + +async function collectTextFiles(directory) { + const entries = await readdir(directory, { withFileTypes: true }); + const files = []; + + for (const entry of entries) { + const path = join(directory, entry.name); + if (entry.isDirectory()) { + files.push(...(await collectTextFiles(path))); + } else if (/\.(?:html|json|txt|xml|css|js)$/.test(entry.name)) { + files.push(path); + } + } + + return files; +} + +let landingLinkFixes = 0; +let introductionEditFixes = 0; +let normalizedDashes = 0; + +for (const file of await collectTextFiles(outputDirectory)) { + const original = await readFile(file, "utf8"); + const fixed = original + .replaceAll("api/index.html", "api.html") + .replaceAll(wrongIntroductionEditUrl, correctIntroductionEditUrl) + .replaceAll("\u2013", "-") + .replaceAll("\u2014", "-"); + + if (fixed !== original) { + landingLinkFixes += original.split("api/index.html").length - 1; + introductionEditFixes += + original.split(wrongIntroductionEditUrl).length - 1; + normalizedDashes += [...original.matchAll(/[\u2013\u2014]/g)].length; + await writeFile(file, fixed); + } +} + +console.log(`Fixed ${landingLinkFixes} generated API landing-page links.`); +console.log(`Fixed ${introductionEditFixes} introduction edit links.`); +console.log(`Normalized ${normalizedDashes} typographic dashes in public output.`); diff --git a/sourcey/sourcey.config.ts b/sourcey/sourcey.config.ts new file mode 100644 index 00000000..01814c08 --- /dev/null +++ b/sourcey/sourcey.config.ts @@ -0,0 +1,73 @@ +import { defineConfig, godoc, markdown } from "sourcey"; + +const sourceCommit = "490705b1d6fc7d5bd9202ac41888e146183328eb"; + +export default defineConfig({ + name: "GopherJS", + siteUrl: "https://gopherjs.github.io", + baseUrl: "/docs", + prettyUrls: false, + repo: "https://github.com/gopherjs/gopherjs", + editBranch: sourceCommit, + theme: { + preset: "default", + colors: { + primary: "#00add8", + light: "#38c6e8", + dark: "#007d9c", + }, + }, + navigation: { + tabs: [ + { + tab: "Overview", + slug: "", + source: markdown({ + groups: [{ group: "Start here", pages: ["introduction"] }], + }), + }, + { + tab: "API Reference", + slug: "api", + source: godoc({ + snapshot: "./godoc.json", + mode: "snapshot", + includeTests: true, + exclude: [ + "github.com/gopherjs/gopherjs/internal", + "github.com/gopherjs/gopherjs/tests", + "github.com/gopherjs/gopherjs/compiler/internal", + ], + }), + }, + ], + }, + navbar: { + links: [ + { + type: "github", + href: "https://github.com/gopherjs/gopherjs", + label: "GitHub", + }, + { + type: "link", + href: "https://gopherjs.github.io/playground/", + label: "Playground", + }, + ], + }, + footer: { + links: [ + { + type: "github", + href: "https://github.com/gopherjs/gopherjs", + label: "GopherJS source", + }, + { + type: "link", + href: "https://pkg.go.dev/github.com/gopherjs/gopherjs", + label: "pkg.go.dev", + }, + ], + }, +});