mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-06 12:37:49 +00:00
Fixed other references to "root.yaml"
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
|||||||
"log/slog"
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"path/filepath"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/pb33f/libopenapi/datamodel"
|
"github.com/pb33f/libopenapi/datamodel"
|
||||||
@@ -154,6 +155,17 @@ type SpecIndexConfig struct {
|
|||||||
uri []string
|
uri []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetTheoreticalRoot sets the spec file paths to a theoretical file path
|
||||||
|
func (s *SpecIndexConfig) SetTheoreticalRoot() {
|
||||||
|
s.SpecFilePath = filepath.Join(s.BasePath, theoreticalRoot)
|
||||||
|
|
||||||
|
basePath := s.BasePath
|
||||||
|
if !filepath.IsAbs(basePath) {
|
||||||
|
basePath, _ = filepath.Abs(basePath)
|
||||||
|
}
|
||||||
|
s.SpecAbsolutePath = filepath.Join(basePath, theoreticalRoot)
|
||||||
|
}
|
||||||
|
|
||||||
// CreateOpenAPIIndexConfig is a helper function to create a new SpecIndexConfig with the AllowRemoteLookup and
|
// CreateOpenAPIIndexConfig is a helper function to create a new SpecIndexConfig with the AllowRemoteLookup and
|
||||||
// AllowFileLookup set to true. This is the default behaviour of the index in previous versions of libopenapi. (pre 0.6.0)
|
// AllowFileLookup set to true. This is the default behaviour of the index in previous versions of libopenapi. (pre 0.6.0)
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -303,7 +303,7 @@ func (r *Rolodex) IndexTheRolodex() error {
|
|||||||
// indexed and built every supporting file, we can build the root index (our entry point)
|
// indexed and built every supporting file, we can build the root index (our entry point)
|
||||||
if r.rootNode != nil {
|
if r.rootNode != nil {
|
||||||
|
|
||||||
// if there is a base path, then we need to set the root spec config to point to a theoretical root.yaml
|
// if there is a base path but no SpecFilePath, then we need to set the root spec config to point to a theoretical root.yaml
|
||||||
// which does not exist, but is used to formulate the absolute path to root references correctly.
|
// which does not exist, but is used to formulate the absolute path to root references correctly.
|
||||||
if r.indexConfig.BasePath != "" && r.indexConfig.BaseURL == nil {
|
if r.indexConfig.BasePath != "" && r.indexConfig.BaseURL == nil {
|
||||||
|
|
||||||
@@ -313,13 +313,11 @@ func (r *Rolodex) IndexTheRolodex() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(r.localFS) > 0 || len(r.remoteFS) > 0 {
|
if len(r.localFS) > 0 || len(r.remoteFS) > 0 {
|
||||||
// For specs that are not read from a filesystem (either from remote URL or []byte), we need to
|
|
||||||
// assign a theoretical root file. Having a root file is necessary when mapping references.
|
|
||||||
rootFile := "root.yaml"
|
|
||||||
if r.indexConfig.SpecFilePath != "" {
|
if r.indexConfig.SpecFilePath != "" {
|
||||||
rootFile = filepath.Base(r.indexConfig.SpecFilePath)
|
r.indexConfig.SpecAbsolutePath = filepath.Join(basePath, filepath.Base(r.indexConfig.SpecFilePath))
|
||||||
|
} else {
|
||||||
|
r.indexConfig.SetTheoreticalRoot()
|
||||||
}
|
}
|
||||||
r.indexConfig.SpecAbsolutePath = filepath.Join(basePath, rootFile)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ func (index *SpecIndex) SearchIndexForReferenceByReferenceWithContext(ctx contex
|
|||||||
if strings.Contains(roloLookup, "#") {
|
if strings.Contains(roloLookup, "#") {
|
||||||
roloLookup = strings.Split(roloLookup, "#")[0]
|
roloLookup = strings.Split(roloLookup, "#")[0]
|
||||||
}
|
}
|
||||||
if filepath.Base(roloLookup) == "root.yaml" {
|
if filepath.Base(roloLookup) == index.GetSpecFileName() {
|
||||||
return nil, index, ctx
|
return nil, index, ctx
|
||||||
}
|
}
|
||||||
rFile, err := index.rolodex.Open(roloLookup)
|
rFile, err := index.rolodex.Open(roloLookup)
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ import (
|
|||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
theoreticalRoot = "root.yaml"
|
||||||
|
)
|
||||||
|
|
||||||
// NewSpecIndexWithConfig will create a new index of an OpenAPI or Swagger spec. It uses the same logic as NewSpecIndex
|
// NewSpecIndexWithConfig will create a new index of an OpenAPI or Swagger spec. It uses the same logic as NewSpecIndex
|
||||||
// except it sets a base URL for resolving relative references, except it also allows for granular control over
|
// except it sets a base URL for resolving relative references, except it also allows for granular control over
|
||||||
// how the index is set up.
|
// how the index is set up.
|
||||||
@@ -152,6 +156,13 @@ func (index *SpecIndex) GetRolodex() *Rolodex {
|
|||||||
return index.rolodex
|
return index.rolodex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (index *SpecIndex) GetSpecFileName() string {
|
||||||
|
if index == nil || index.rolodex == nil || index.rolodex.indexConfig == nil {
|
||||||
|
return theoreticalRoot
|
||||||
|
}
|
||||||
|
return index.rolodex.indexConfig.SpecFilePath
|
||||||
|
}
|
||||||
|
|
||||||
// GetGlobalTagsNode returns document root tags node.
|
// GetGlobalTagsNode returns document root tags node.
|
||||||
func (index *SpecIndex) GetGlobalTagsNode() *yaml.Node {
|
func (index *SpecIndex) GetGlobalTagsNode() *yaml.Node {
|
||||||
return index.tagsNode
|
return index.tagsNode
|
||||||
|
|||||||
Reference in New Issue
Block a user