567 lines
16 KiB
Go
567 lines
16 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
|
|
SourceMapInlineAndExternal
|
|
)
|
|
|
|
type SourcesContent uint8
|
|
|
|
const (
|
|
SourcesContentInclude SourcesContent = iota
|
|
SourcesContentExclude
|
|
)
|
|
|
|
type LegalComments uint8
|
|
|
|
const (
|
|
LegalCommentsDefault LegalComments = iota
|
|
LegalCommentsNone
|
|
LegalCommentsInline
|
|
LegalCommentsEndOfFile
|
|
LegalCommentsLinked
|
|
LegalCommentsExternal
|
|
)
|
|
|
|
type JSXMode uint8
|
|
|
|
const (
|
|
JSXModeTransform JSXMode = iota
|
|
JSXModePreserve
|
|
)
|
|
|
|
type Target uint8
|
|
|
|
const (
|
|
DefaultTarget Target = iota
|
|
ESNext
|
|
ES5
|
|
ES2015
|
|
ES2016
|
|
ES2017
|
|
ES2018
|
|
ES2019
|
|
ES2020
|
|
ES2021
|
|
)
|
|
|
|
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
|
|
PlatformNeutral
|
|
)
|
|
|
|
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
|
|
Suggestion string
|
|
}
|
|
|
|
type Message struct {
|
|
PluginName string
|
|
Text string
|
|
Location *Location
|
|
Notes []Note
|
|
|
|
// Optional user-specified data that is passed through unmodified. You can
|
|
// use this to stash the original error, for example.
|
|
Detail interface{}
|
|
}
|
|
|
|
type Note struct {
|
|
Text string
|
|
Location *Location
|
|
}
|
|
|
|
type StderrColor uint8
|
|
|
|
const (
|
|
ColorIfTerminal StderrColor = iota
|
|
ColorNever
|
|
ColorAlways
|
|
)
|
|
|
|
type LogLevel uint8
|
|
|
|
const (
|
|
LogLevelSilent LogLevel = iota
|
|
LogLevelVerbose
|
|
LogLevelDebug
|
|
LogLevelInfo
|
|
LogLevelWarning
|
|
LogLevelError
|
|
)
|
|
|
|
type Charset uint8
|
|
|
|
const (
|
|
CharsetDefault Charset = iota
|
|
CharsetASCII
|
|
CharsetUTF8
|
|
)
|
|
|
|
type TreeShaking uint8
|
|
|
|
const (
|
|
TreeShakingDefault TreeShaking = iota
|
|
TreeShakingFalse
|
|
TreeShakingTrue
|
|
)
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Build API
|
|
|
|
type BuildOptions struct {
|
|
Color StderrColor // Documentation: https://esbuild.github.io/api/#color
|
|
LogLimit int // Documentation: https://esbuild.github.io/api/#log-limit
|
|
LogLevel LogLevel // Documentation: https://esbuild.github.io/api/#log-level
|
|
|
|
Sourcemap SourceMap // Documentation: https://esbuild.github.io/api/#sourcemap
|
|
SourceRoot string // Documentation: https://esbuild.github.io/api/#source-root
|
|
SourcesContent SourcesContent // Documentation: https://esbuild.github.io/api/#sources-content
|
|
|
|
Target Target // Documentation: https://esbuild.github.io/api/#target
|
|
Engines []Engine // Documentation: https://esbuild.github.io/api/#target
|
|
|
|
MinifyWhitespace bool // Documentation: https://esbuild.github.io/api/#minify
|
|
MinifyIdentifiers bool // Documentation: https://esbuild.github.io/api/#minify
|
|
MinifySyntax bool // Documentation: https://esbuild.github.io/api/#minify
|
|
Charset Charset // Documentation: https://esbuild.github.io/api/#charset
|
|
TreeShaking TreeShaking // Documentation: https://esbuild.github.io/api/#tree-shaking
|
|
IgnoreAnnotations bool // Documentation: https://esbuild.github.io/api/#ignore-annotations
|
|
LegalComments LegalComments // Documentation: https://esbuild.github.io/api/#legal-comments
|
|
|
|
JSXMode JSXMode // Documentation: https://esbuild.github.io/api/#jsx-mode
|
|
JSXFactory string // Documentation: https://esbuild.github.io/api/#jsx-factory
|
|
JSXFragment string // Documentation: https://esbuild.github.io/api/#jsx-fragment
|
|
|
|
Define map[string]string // Documentation: https://esbuild.github.io/api/#define
|
|
Pure []string // Documentation: https://esbuild.github.io/api/#pure
|
|
KeepNames bool // Documentation: https://esbuild.github.io/api/#keep-names
|
|
|
|
GlobalName string // Documentation: https://esbuild.github.io/api/#global-name
|
|
Bundle bool // Documentation: https://esbuild.github.io/api/#bundle
|
|
PreserveSymlinks bool // Documentation: https://esbuild.github.io/api/#preserve-symlinks
|
|
Splitting bool // Documentation: https://esbuild.github.io/api/#splitting
|
|
Outfile string // Documentation: https://esbuild.github.io/api/#outfile
|
|
Metafile bool // Documentation: https://esbuild.github.io/api/#metafile
|
|
Outdir string // Documentation: https://esbuild.github.io/api/#outdir
|
|
Outbase string // Documentation: https://esbuild.github.io/api/#outbase
|
|
AbsWorkingDir string // Documentation: https://esbuild.github.io/api/#working-directory
|
|
Platform Platform // Documentation: https://esbuild.github.io/api/#platform
|
|
Format Format // Documentation: https://esbuild.github.io/api/#format
|
|
External []string // Documentation: https://esbuild.github.io/api/#external
|
|
MainFields []string // Documentation: https://esbuild.github.io/api/#main-fields
|
|
Conditions []string // Documentation: https://esbuild.github.io/api/#conditions
|
|
Loader map[string]Loader // Documentation: https://esbuild.github.io/api/#loader
|
|
ResolveExtensions []string // Documentation: https://esbuild.github.io/api/#resolve-extensions
|
|
Tsconfig string // Documentation: https://esbuild.github.io/api/#tsconfig
|
|
OutExtensions map[string]string // Documentation: https://esbuild.github.io/api/#out-extension
|
|
PublicPath string // Documentation: https://esbuild.github.io/api/#public-path
|
|
Inject []string // Documentation: https://esbuild.github.io/api/#inject
|
|
Banner map[string]string // Documentation: https://esbuild.github.io/api/#banner
|
|
Footer map[string]string // Documentation: https://esbuild.github.io/api/#footer
|
|
NodePaths []string // Documentation: https://esbuild.github.io/api/#node-paths
|
|
|
|
EntryNames string // Documentation: https://esbuild.github.io/api/#entry-names
|
|
ChunkNames string // Documentation: https://esbuild.github.io/api/#chunk-names
|
|
AssetNames string // Documentation: https://esbuild.github.io/api/#asset-names
|
|
|
|
EntryPoints []string // Documentation: https://esbuild.github.io/api/#entry-points
|
|
EntryPointsAdvanced []EntryPoint // Documentation: https://esbuild.github.io/api/#entry-points
|
|
|
|
Stdin *StdinOptions // Documentation: https://esbuild.github.io/api/#stdin
|
|
Write bool // Documentation: https://esbuild.github.io/api/#write
|
|
AllowOverwrite bool // Documentation: https://esbuild.github.io/api/#allow-overwrite
|
|
Incremental bool // Documentation: https://esbuild.github.io/api/#incremental
|
|
Plugins []Plugin // Documentation: https://esbuild.github.io/plugins/
|
|
|
|
Watch *WatchMode // Documentation: https://esbuild.github.io/api/#watch
|
|
}
|
|
|
|
type EntryPoint struct {
|
|
InputPath string
|
|
OutputPath string
|
|
}
|
|
|
|
type WatchMode struct {
|
|
OnRebuild func(BuildResult)
|
|
}
|
|
|
|
type StdinOptions struct {
|
|
Contents string
|
|
ResolveDir string
|
|
Sourcefile string
|
|
Loader Loader
|
|
}
|
|
|
|
type BuildResult struct {
|
|
Errors []Message
|
|
Warnings []Message
|
|
|
|
OutputFiles []OutputFile
|
|
Metafile string
|
|
|
|
Rebuild func() BuildResult // Only when "Incremental: true"
|
|
Stop func() // Only when "Watch: true"
|
|
}
|
|
|
|
type OutputFile struct {
|
|
Path string
|
|
Contents []byte
|
|
}
|
|
|
|
// Documentation: https://esbuild.github.io/api/#build-api
|
|
func Build(options BuildOptions) BuildResult {
|
|
return buildImpl(options).result
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Transform API
|
|
|
|
type TransformOptions struct {
|
|
Color StderrColor // Documentation: https://esbuild.github.io/api/#color
|
|
LogLimit int // Documentation: https://esbuild.github.io/api/#log-limit
|
|
LogLevel LogLevel // Documentation: https://esbuild.github.io/api/#log-level
|
|
|
|
Sourcemap SourceMap // Documentation: https://esbuild.github.io/api/#sourcemap
|
|
SourceRoot string // Documentation: https://esbuild.github.io/api/#source-root
|
|
SourcesContent SourcesContent // Documentation: https://esbuild.github.io/api/#sources-content
|
|
|
|
Target Target // Documentation: https://esbuild.github.io/api/#target
|
|
Engines []Engine // Documentation: https://esbuild.github.io/api/#target
|
|
|
|
Format Format // Documentation: https://esbuild.github.io/api/#format
|
|
GlobalName string // Documentation: https://esbuild.github.io/api/#global-name
|
|
|
|
MinifyWhitespace bool // Documentation: https://esbuild.github.io/api/#minify
|
|
MinifyIdentifiers bool // Documentation: https://esbuild.github.io/api/#minify
|
|
MinifySyntax bool // Documentation: https://esbuild.github.io/api/#minify
|
|
Charset Charset // Documentation: https://esbuild.github.io/api/#charset
|
|
TreeShaking TreeShaking // Documentation: https://esbuild.github.io/api/#tree-shaking
|
|
IgnoreAnnotations bool // Documentation: https://esbuild.github.io/api/#ignore-annotations
|
|
LegalComments LegalComments // Documentation: https://esbuild.github.io/api/#legal-comments
|
|
|
|
JSXMode JSXMode // Documentation: https://esbuild.github.io/api/#jsx
|
|
JSXFactory string // Documentation: https://esbuild.github.io/api/#jsx-factory
|
|
JSXFragment string // Documentation: https://esbuild.github.io/api/#jsx-fragment
|
|
|
|
TsconfigRaw string // Documentation: https://esbuild.github.io/api/#tsconfig-raw
|
|
Banner string // Documentation: https://esbuild.github.io/api/#banner
|
|
Footer string // Documentation: https://esbuild.github.io/api/#footer
|
|
|
|
Define map[string]string // Documentation: https://esbuild.github.io/api/#define
|
|
Pure []string // Documentation: https://esbuild.github.io/api/#pure
|
|
KeepNames bool // Documentation: https://esbuild.github.io/api/#keep-names
|
|
|
|
Sourcefile string // Documentation: https://esbuild.github.io/api/#sourcefile
|
|
Loader Loader // Documentation: https://esbuild.github.io/api/#loader
|
|
}
|
|
|
|
type TransformResult struct {
|
|
Errors []Message
|
|
Warnings []Message
|
|
|
|
Code []byte
|
|
Map []byte
|
|
}
|
|
|
|
// Documentation: https://esbuild.github.io/api/#transform-api
|
|
func Transform(input string, options TransformOptions) TransformResult {
|
|
return transformImpl(input, options)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Serve API
|
|
|
|
// Documentation: https://esbuild.github.io/api/#serve-arguments
|
|
type ServeOptions struct {
|
|
Port uint16
|
|
Host string
|
|
Servedir string
|
|
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
|
|
}
|
|
|
|
// Documentation: https://esbuild.github.io/api/#serve-return-values
|
|
type ServeResult struct {
|
|
Port uint16
|
|
Host string
|
|
Wait func() error
|
|
Stop func()
|
|
}
|
|
|
|
// Documentation: https://esbuild.github.io/api/#serve
|
|
func Serve(serveOptions ServeOptions, buildOptions BuildOptions) (ServeResult, error) {
|
|
return serveImpl(serveOptions, buildOptions)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Plugin API
|
|
|
|
type SideEffects uint8
|
|
|
|
const (
|
|
SideEffectsTrue SideEffects = iota
|
|
SideEffectsFalse
|
|
)
|
|
|
|
type Plugin struct {
|
|
Name string
|
|
Setup func(PluginBuild)
|
|
}
|
|
|
|
type PluginBuild struct {
|
|
InitialOptions *BuildOptions
|
|
OnStart func(callback func() (OnStartResult, error))
|
|
OnEnd func(callback func(result *BuildResult))
|
|
OnResolve func(options OnResolveOptions, callback func(OnResolveArgs) (OnResolveResult, error))
|
|
OnLoad func(options OnLoadOptions, callback func(OnLoadArgs) (OnLoadResult, error))
|
|
}
|
|
|
|
type OnStartResult struct {
|
|
Errors []Message
|
|
Warnings []Message
|
|
}
|
|
|
|
type OnResolveOptions struct {
|
|
Filter string
|
|
Namespace string
|
|
}
|
|
|
|
type OnResolveArgs struct {
|
|
Path string
|
|
Importer string
|
|
Namespace string
|
|
ResolveDir string
|
|
Kind ResolveKind
|
|
PluginData interface{}
|
|
}
|
|
|
|
type OnResolveResult struct {
|
|
PluginName string
|
|
|
|
Errors []Message
|
|
Warnings []Message
|
|
|
|
Path string
|
|
External bool
|
|
SideEffects SideEffects
|
|
Namespace string
|
|
Suffix string
|
|
PluginData interface{}
|
|
|
|
WatchFiles []string
|
|
WatchDirs []string
|
|
}
|
|
|
|
type OnLoadOptions struct {
|
|
Filter string
|
|
Namespace string
|
|
}
|
|
|
|
type OnLoadArgs struct {
|
|
Path string
|
|
Namespace string
|
|
Suffix string
|
|
PluginData interface{}
|
|
}
|
|
|
|
type OnLoadResult struct {
|
|
PluginName string
|
|
|
|
Errors []Message
|
|
Warnings []Message
|
|
|
|
Contents *string
|
|
ResolveDir string
|
|
Loader Loader
|
|
PluginData interface{}
|
|
|
|
WatchFiles []string
|
|
WatchDirs []string
|
|
}
|
|
|
|
type ResolveKind uint8
|
|
|
|
const (
|
|
ResolveEntryPoint ResolveKind = iota
|
|
ResolveJSImportStatement
|
|
ResolveJSRequireCall
|
|
ResolveJSDynamicImport
|
|
ResolveJSRequireResolve
|
|
ResolveCSSImportRule
|
|
ResolveCSSURLToken
|
|
)
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// FormatMessages API
|
|
|
|
type MessageKind uint8
|
|
|
|
const (
|
|
ErrorMessage MessageKind = iota
|
|
WarningMessage
|
|
)
|
|
|
|
type FormatMessagesOptions struct {
|
|
TerminalWidth int
|
|
Kind MessageKind
|
|
Color bool
|
|
}
|
|
|
|
func FormatMessages(msgs []Message, opts FormatMessagesOptions) []string {
|
|
return formatMsgsImpl(msgs, opts)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// AnalyzeMetafile API
|
|
|
|
type AnalyzeMetafileOptions struct {
|
|
Color bool
|
|
Verbose bool
|
|
}
|
|
|
|
// Documentation: https://esbuild.github.io/api/#analyze
|
|
func AnalyzeMetafile(metafile string, opts AnalyzeMetafileOptions) string {
|
|
return analyzeMetafileImpl(metafile, opts)
|
|
}
|