404 lines
7.4 KiB
Go
404 lines
7.4 KiB
Go
// This API exposes esbuild's two main operations: building and transforming.
|
|
// It's intended for integrating esbuild into other tools as a library.
|
|
//
|
|
// If you are just trying to run esbuild from Go without the overhead of
|
|
// creating a child process, there is also an API for the command-line
|
|
// interface itself: https://godoc.org/github.com/evanw/esbuild/pkg/cli.
|
|
//
|
|
// Build API
|
|
//
|
|
// This function runs an end-to-end build operation. It takes an array of file
|
|
// paths as entry points, parses them and all of their dependencies, and
|
|
// returns the output files to write to the file system. The available options
|
|
// roughly correspond to esbuild's command-line flags.
|
|
//
|
|
// Example usage:
|
|
//
|
|
// package main
|
|
//
|
|
// import (
|
|
// "os"
|
|
//
|
|
// "github.com/evanw/esbuild/pkg/api"
|
|
// )
|
|
//
|
|
// func main() {
|
|
// result := api.Build(api.BuildOptions{
|
|
// EntryPoints: []string{"input.js"},
|
|
// Outfile: "output.js",
|
|
// Bundle: true,
|
|
// Write: true,
|
|
// LogLevel: api.LogLevelInfo,
|
|
// })
|
|
//
|
|
// if len(result.Errors) > 0 {
|
|
// os.Exit(1)
|
|
// }
|
|
// }
|
|
//
|
|
// Transform API
|
|
//
|
|
// This function transforms a string of source code into JavaScript. It can be
|
|
// used to minify JavaScript, convert TypeScript/JSX to JavaScript, or convert
|
|
// newer JavaScript to older JavaScript. The available options roughly
|
|
// correspond to esbuild's command-line flags.
|
|
//
|
|
// Example usage:
|
|
//
|
|
// package main
|
|
//
|
|
// import (
|
|
// "fmt"
|
|
// "os"
|
|
//
|
|
// "github.com/evanw/esbuild/pkg/api"
|
|
// )
|
|
//
|
|
// func main() {
|
|
// jsx := `
|
|
// import * as React from 'react'
|
|
// import * as ReactDOM from 'react-dom'
|
|
//
|
|
// ReactDOM.render(
|
|
// <h1>Hello, world!</h1>,
|
|
// document.getElementById('root')
|
|
// );
|
|
// `
|
|
//
|
|
// result := api.Transform(jsx, api.TransformOptions{
|
|
// Loader: api.LoaderJSX,
|
|
// })
|
|
//
|
|
// fmt.Printf("%d errors and %d warnings\n",
|
|
// len(result.Errors), len(result.Warnings))
|
|
//
|
|
// os.Stdout.Write(result.Code)
|
|
// }
|
|
//
|
|
package api
|
|
|
|
type SourceMap uint8
|
|
|
|
const (
|
|
SourceMapNone SourceMap = iota
|
|
SourceMapInline
|
|
SourceMapLinked
|
|
SourceMapExternal
|
|
)
|
|
|
|
type Target uint8
|
|
|
|
const (
|
|
ESNext Target = iota
|
|
ES5
|
|
ES2015
|
|
ES2016
|
|
ES2017
|
|
ES2018
|
|
ES2019
|
|
ES2020
|
|
)
|
|
|
|
type Loader uint8
|
|
|
|
const (
|
|
LoaderNone Loader = iota
|
|
LoaderJS
|
|
LoaderJSX
|
|
LoaderTS
|
|
LoaderTSX
|
|
LoaderJSON
|
|
LoaderText
|
|
LoaderBase64
|
|
LoaderDataURL
|
|
LoaderFile
|
|
LoaderBinary
|
|
LoaderCSS
|
|
LoaderDefault
|
|
)
|
|
|
|
type Platform uint8
|
|
|
|
const (
|
|
PlatformBrowser Platform = iota
|
|
PlatformNode
|
|
)
|
|
|
|
type Format uint8
|
|
|
|
const (
|
|
FormatDefault Format = iota
|
|
FormatIIFE
|
|
FormatCommonJS
|
|
FormatESModule
|
|
)
|
|
|
|
type EngineName uint8
|
|
|
|
const (
|
|
EngineChrome EngineName = iota
|
|
EngineEdge
|
|
EngineFirefox
|
|
EngineIOS
|
|
EngineNode
|
|
EngineSafari
|
|
)
|
|
|
|
type Engine struct {
|
|
Name EngineName
|
|
Version string
|
|
}
|
|
|
|
type Location struct {
|
|
File string
|
|
Namespace string
|
|
Line int // 1-based
|
|
Column int // 0-based, in bytes
|
|
Length int // in bytes
|
|
LineText string
|
|
}
|
|
|
|
type Message struct {
|
|
Text string
|
|
Location *Location
|
|
}
|
|
|
|
type StderrColor uint8
|
|
|
|
const (
|
|
ColorIfTerminal StderrColor = iota
|
|
ColorNever
|
|
ColorAlways
|
|
)
|
|
|
|
type LogLevel uint8
|
|
|
|
const (
|
|
LogLevelSilent LogLevel = iota
|
|
LogLevelInfo
|
|
LogLevelWarning
|
|
LogLevelError
|
|
)
|
|
|
|
type Charset uint8
|
|
|
|
const (
|
|
CharsetDefault Charset = iota
|
|
CharsetASCII
|
|
CharsetUTF8
|
|
)
|
|
|
|
type TreeShaking uint8
|
|
|
|
const (
|
|
TreeShakingDefault TreeShaking = iota
|
|
TreeShakingIgnoreAnnotations
|
|
)
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Build API
|
|
|
|
type BuildOptions struct {
|
|
Color StderrColor
|
|
ErrorLimit int
|
|
LogLevel LogLevel
|
|
|
|
Sourcemap SourceMap
|
|
Target Target
|
|
Engines []Engine
|
|
|
|
MinifyWhitespace bool
|
|
MinifyIdentifiers bool
|
|
MinifySyntax bool
|
|
Charset Charset
|
|
TreeShaking TreeShaking
|
|
|
|
JSXFactory string
|
|
JSXFragment string
|
|
|
|
Define map[string]string
|
|
Pure []string
|
|
AvoidTDZ bool
|
|
KeepNames bool
|
|
|
|
GlobalName string
|
|
Bundle bool
|
|
Splitting bool
|
|
Outfile string
|
|
Metafile string
|
|
Outdir string
|
|
Outbase string
|
|
Platform Platform
|
|
Format Format
|
|
External []string
|
|
MainFields []string
|
|
Loader map[string]Loader
|
|
ResolveExtensions []string
|
|
Tsconfig string
|
|
OutExtensions map[string]string
|
|
PublicPath string
|
|
Inject []string
|
|
Banner string
|
|
Footer string
|
|
|
|
EntryPoints []string
|
|
Stdin *StdinOptions
|
|
Write bool
|
|
Incremental bool
|
|
Plugins []Plugin
|
|
}
|
|
|
|
type StdinOptions struct {
|
|
Contents string
|
|
ResolveDir string
|
|
Sourcefile string
|
|
Loader Loader
|
|
}
|
|
|
|
type BuildResult struct {
|
|
Errors []Message
|
|
Warnings []Message
|
|
|
|
OutputFiles []OutputFile
|
|
|
|
Rebuild func() BuildResult
|
|
}
|
|
|
|
type OutputFile struct {
|
|
Path string
|
|
Contents []byte
|
|
}
|
|
|
|
func Build(options BuildOptions) BuildResult {
|
|
return buildImpl(options)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Transform API
|
|
|
|
type TransformOptions struct {
|
|
Color StderrColor
|
|
ErrorLimit int
|
|
LogLevel LogLevel
|
|
|
|
Sourcemap SourceMap
|
|
Target Target
|
|
Format Format
|
|
GlobalName string
|
|
Engines []Engine
|
|
|
|
MinifyWhitespace bool
|
|
MinifyIdentifiers bool
|
|
MinifySyntax bool
|
|
Charset Charset
|
|
TreeShaking TreeShaking
|
|
|
|
JSXFactory string
|
|
JSXFragment string
|
|
TsconfigRaw string
|
|
Footer string
|
|
Banner string
|
|
|
|
Define map[string]string
|
|
Pure []string
|
|
AvoidTDZ bool
|
|
KeepNames bool
|
|
|
|
Sourcefile string
|
|
Loader Loader
|
|
}
|
|
|
|
type TransformResult struct {
|
|
Errors []Message
|
|
Warnings []Message
|
|
|
|
Code []byte
|
|
Map []byte
|
|
}
|
|
|
|
func Transform(input string, options TransformOptions) TransformResult {
|
|
return transformImpl(input, options)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Serve API
|
|
|
|
type ServeOptions struct {
|
|
Port uint16
|
|
OnRequest func(ServeOnRequestArgs)
|
|
}
|
|
|
|
type ServeOnRequestArgs struct {
|
|
RemoteAddress string
|
|
Method string
|
|
Path string
|
|
Status int
|
|
TimeInMS int // The time to generate the response, not to send it
|
|
}
|
|
|
|
type ServeResult struct {
|
|
Port uint16
|
|
Wait func() error
|
|
Stop func()
|
|
}
|
|
|
|
func Serve(serveOptions ServeOptions, buildOptions BuildOptions) (ServeResult, error) {
|
|
return serveImpl(serveOptions, buildOptions)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Plugin API
|
|
|
|
type Plugin struct {
|
|
Name string
|
|
Setup func(PluginBuild)
|
|
}
|
|
|
|
type PluginBuild interface {
|
|
OnResolve(options OnResolveOptions, callback func(OnResolveArgs) (OnResolveResult, error))
|
|
OnLoad(options OnLoadOptions, callback func(OnLoadArgs) (OnLoadResult, error))
|
|
}
|
|
|
|
type OnResolveOptions struct {
|
|
Filter string
|
|
Namespace string
|
|
}
|
|
|
|
type OnResolveArgs struct {
|
|
Path string
|
|
Importer string
|
|
Namespace string
|
|
ResolveDir string
|
|
}
|
|
|
|
type OnResolveResult struct {
|
|
PluginName string
|
|
|
|
Errors []Message
|
|
Warnings []Message
|
|
|
|
Path string
|
|
External bool
|
|
Namespace string
|
|
}
|
|
|
|
type OnLoadOptions struct {
|
|
Filter string
|
|
Namespace string
|
|
}
|
|
|
|
type OnLoadArgs struct {
|
|
Path string
|
|
Namespace string
|
|
}
|
|
|
|
type OnLoadResult struct {
|
|
PluginName string
|
|
|
|
Errors []Message
|
|
Warnings []Message
|
|
|
|
Contents *string
|
|
ResolveDir string
|
|
Loader Loader
|
|
}
|