54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
// Package bundled provides access to files bundled with TypeScript.
|
|
package bundled
|
|
|
|
import (
|
|
"path/filepath"
|
|
"runtime"
|
|
"sync"
|
|
"testing"
|
|
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tspath"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/vfs"
|
|
)
|
|
|
|
//go:generate go run generate.go
|
|
|
|
// Define the below here to consolidate documentation.
|
|
|
|
// Embedded is true if the bundled files are implemented through an embedded FS.
|
|
const Embedded = embedded
|
|
|
|
// WrapFS returns an FS which redirects embedded paths to the embedded file system.
|
|
// If the embedded file system is not available, it returns the original FS.
|
|
func WrapFS(fs vfs.FS) vfs.FS {
|
|
return wrapFS(fs)
|
|
}
|
|
|
|
// LibPath returns the path to the directory containing the bundled lib.d.ts files.
|
|
// If embedding is not enabled, this is a path on disk, and must be accessed through
|
|
// a real OS filesystem.
|
|
func LibPath() string {
|
|
return libPath()
|
|
}
|
|
|
|
var bundledSourceDir = sync.OnceValue(func() string {
|
|
_, filename, _, ok := runtime.Caller(0)
|
|
if !ok {
|
|
panic("bundled: could not get current filename")
|
|
}
|
|
return filepath.Dir(filepath.FromSlash(filename))
|
|
})
|
|
|
|
var testingLibPath = sync.OnceValue(func() string {
|
|
if !testing.Testing() {
|
|
panic("bundled: TestingLibPath should only be called during tests")
|
|
}
|
|
return tspath.NormalizeSlashes(filepath.Join(bundledSourceDir(), "libs"))
|
|
})
|
|
|
|
// TestingLibPath returns the path to the source bundled libs directory.
|
|
// It's only valid to use in tests where the source code is available.
|
|
func TestingLibPath() string {
|
|
return testingLibPath()
|
|
}
|