vendor tsgo
This commit is contained in:
122
tools/tsgo/internal/packagejson/packagejson.go
Normal file
122
tools/tsgo/internal/packagejson/packagejson.go
Normal file
@@ -0,0 +1,122 @@
|
||||
package packagejson
|
||||
|
||||
import (
|
||||
"github.com/microsoft/typescript-go/internal/collections"
|
||||
json "github.com/microsoft/typescript-go/internal/json"
|
||||
)
|
||||
|
||||
type HeaderFields struct {
|
||||
Name Expected[string] `json:"name"`
|
||||
Version Expected[string] `json:"version"`
|
||||
Type Expected[string] `json:"type"`
|
||||
}
|
||||
|
||||
type PathFields struct {
|
||||
TSConfig Expected[string] `json:"tsconfig"`
|
||||
Main Expected[string] `json:"main"`
|
||||
Types Expected[string] `json:"types"`
|
||||
Typings Expected[string] `json:"typings"`
|
||||
TypesVersions JSONValue `json:"typesVersions"`
|
||||
Imports ExportsOrImports `json:"imports"`
|
||||
Exports ExportsOrImports `json:"exports"`
|
||||
}
|
||||
|
||||
type DependencyFields struct {
|
||||
Dependencies Expected[map[string]string] `json:"dependencies"`
|
||||
DevDependencies Expected[map[string]string] `json:"devDependencies"`
|
||||
PeerDependencies Expected[map[string]string] `json:"peerDependencies"`
|
||||
OptionalDependencies Expected[map[string]string] `json:"optionalDependencies"`
|
||||
}
|
||||
|
||||
// HasDependency returns true if the package.json has a dependency with the given name
|
||||
// under any of the dependency fields (dependencies, devDependencies, peerDependencies,
|
||||
// optionalDependencies).
|
||||
func (df *DependencyFields) HasDependency(name string) bool {
|
||||
if deps, ok := df.Dependencies.GetValue(); ok {
|
||||
if _, ok := deps[name]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
if devDeps, ok := df.DevDependencies.GetValue(); ok {
|
||||
if _, ok := devDeps[name]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
if peerDeps, ok := df.PeerDependencies.GetValue(); ok {
|
||||
if _, ok := peerDeps[name]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
if optDeps, ok := df.OptionalDependencies.GetValue(); ok {
|
||||
if _, ok := optDeps[name]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (df *DependencyFields) RangeDependencies(f func(name, version, dependencyField string) bool) {
|
||||
if deps, ok := df.Dependencies.GetValue(); ok {
|
||||
for name, version := range deps {
|
||||
if !f(name, version, "dependencies") {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
if devDeps, ok := df.DevDependencies.GetValue(); ok {
|
||||
for name, version := range devDeps {
|
||||
if !f(name, version, "devDependencies") {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
if peerDeps, ok := df.PeerDependencies.GetValue(); ok {
|
||||
for name, version := range peerDeps {
|
||||
if !f(name, version, "peerDependencies") {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
if optDeps, ok := df.OptionalDependencies.GetValue(); ok {
|
||||
for name, version := range optDeps {
|
||||
if !f(name, version, "optionalDependencies") {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (df *DependencyFields) GetRuntimeDependencyNames() *collections.Set[string] {
|
||||
var count int
|
||||
deps, _ := df.Dependencies.GetValue()
|
||||
count += len(deps)
|
||||
peerDeps, _ := df.PeerDependencies.GetValue()
|
||||
count += len(peerDeps)
|
||||
optDeps, _ := df.OptionalDependencies.GetValue()
|
||||
count += len(optDeps)
|
||||
names := collections.NewSetWithSizeHint[string](count)
|
||||
for name := range deps {
|
||||
names.Add(name)
|
||||
}
|
||||
for name := range peerDeps {
|
||||
names.Add(name)
|
||||
}
|
||||
for name := range optDeps {
|
||||
names.Add(name)
|
||||
}
|
||||
return names
|
||||
}
|
||||
|
||||
type Fields struct {
|
||||
HeaderFields
|
||||
PathFields
|
||||
DependencyFields
|
||||
}
|
||||
|
||||
func Parse(data []byte) (Fields, error) {
|
||||
var f Fields
|
||||
if err := json.Unmarshal(data, &f, json.AllowDuplicateNames(true)); err != nil {
|
||||
return Fields{}, err
|
||||
}
|
||||
return f, nil
|
||||
}
|
||||
Reference in New Issue
Block a user