118 lines
3.5 KiB
Go
118 lines
3.5 KiB
Go
|
package graph
|
||
|
|
||
|
// The code in this file mainly represents data that passes from the scan phase
|
||
|
// to the compile phase of the bundler. There is currently one exception: the
|
||
|
// "meta" member of the JavaScript file representation. That could have been
|
||
|
// stored separately but is stored together for convenience and to avoid an
|
||
|
// extra level of indirection. Instead it's kept in a separate type to keep
|
||
|
// things organized.
|
||
|
|
||
|
import (
|
||
|
"github.com/evanw/esbuild/internal/ast"
|
||
|
"github.com/evanw/esbuild/internal/config"
|
||
|
"github.com/evanw/esbuild/internal/css_ast"
|
||
|
"github.com/evanw/esbuild/internal/js_ast"
|
||
|
"github.com/evanw/esbuild/internal/logger"
|
||
|
"github.com/evanw/esbuild/internal/resolver"
|
||
|
"github.com/evanw/esbuild/internal/sourcemap"
|
||
|
)
|
||
|
|
||
|
type InputFile struct {
|
||
|
Source logger.Source
|
||
|
Repr InputFileRepr
|
||
|
InputSourceMap *sourcemap.SourceMap
|
||
|
|
||
|
// If this file ends up being used in the bundle, these are additional files
|
||
|
// that must be written to the output directory. It's used by the "file"
|
||
|
// loader.
|
||
|
AdditionalFiles []OutputFile
|
||
|
UniqueKeyForFileLoader string
|
||
|
|
||
|
SideEffects SideEffects
|
||
|
Loader config.Loader
|
||
|
}
|
||
|
|
||
|
type OutputFile struct {
|
||
|
AbsPath string
|
||
|
Contents []byte
|
||
|
|
||
|
// If "AbsMetadataFile" is present, this will be filled out with information
|
||
|
// about this file in JSON format. This is a partial JSON file that will be
|
||
|
// fully assembled later.
|
||
|
JSONMetadataChunk string
|
||
|
|
||
|
IsExecutable bool
|
||
|
}
|
||
|
|
||
|
type SideEffects struct {
|
||
|
// This is optional additional information for use in error messages
|
||
|
Data *resolver.SideEffectsData
|
||
|
|
||
|
Kind SideEffectsKind
|
||
|
}
|
||
|
|
||
|
type SideEffectsKind uint8
|
||
|
|
||
|
const (
|
||
|
// The default value conservatively considers all files to have side effects.
|
||
|
HasSideEffects SideEffectsKind = iota
|
||
|
|
||
|
// This file was listed as not having side effects by a "package.json"
|
||
|
// file in one of our containing directories with a "sideEffects" field.
|
||
|
NoSideEffects_PackageJSON
|
||
|
|
||
|
// This file is considered to have no side effects because the AST was empty
|
||
|
// after parsing finished. This should be the case for ".d.ts" files.
|
||
|
NoSideEffects_EmptyAST
|
||
|
|
||
|
// This file was loaded using a data-oriented loader (e.g. "text") that is
|
||
|
// known to not have side effects.
|
||
|
NoSideEffects_PureData
|
||
|
|
||
|
// Same as above but it came from a plugin. We don't want to warn about
|
||
|
// unused imports to these files since running the plugin is a side effect.
|
||
|
// Removing the import would not call the plugin which is observable.
|
||
|
NoSideEffects_PureData_FromPlugin
|
||
|
)
|
||
|
|
||
|
type InputFileRepr interface {
|
||
|
ImportRecords() *[]ast.ImportRecord
|
||
|
}
|
||
|
|
||
|
type JSRepr struct {
|
||
|
AST js_ast.AST
|
||
|
Meta JSReprMeta
|
||
|
|
||
|
// If present, this is the CSS file that this JavaScript stub corresponds to.
|
||
|
// A JavaScript stub is automatically generated for a CSS file when it's
|
||
|
// imported from a JavaScript file.
|
||
|
CSSSourceIndex ast.Index32
|
||
|
}
|
||
|
|
||
|
func (repr *JSRepr) ImportRecords() *[]ast.ImportRecord {
|
||
|
return &repr.AST.ImportRecords
|
||
|
}
|
||
|
|
||
|
func (repr *JSRepr) TopLevelSymbolToParts(ref js_ast.Ref) []uint32 {
|
||
|
// Overlay the mutable map from the linker
|
||
|
if parts, ok := repr.Meta.TopLevelSymbolToPartsOverlay[ref]; ok {
|
||
|
return parts
|
||
|
}
|
||
|
|
||
|
// Fall back to the immutable map from the parser
|
||
|
return repr.AST.TopLevelSymbolToPartsFromParser[ref]
|
||
|
}
|
||
|
|
||
|
type CSSRepr struct {
|
||
|
AST css_ast.AST
|
||
|
|
||
|
// If present, this is the JavaScript stub corresponding to this CSS file.
|
||
|
// A JavaScript stub is automatically generated for a CSS file when it's
|
||
|
// imported from a JavaScript file.
|
||
|
JSSourceIndex ast.Index32
|
||
|
}
|
||
|
|
||
|
func (repr *CSSRepr) ImportRecords() *[]ast.ImportRecord {
|
||
|
return &repr.AST.ImportRecords
|
||
|
}
|