package identity
import "github.com/gohugoio/hugo/identity"
Package provides ways to identify values in Hugo. Used for dependency tracking etc.
Package provides ways to identify values in Hugo. Used for dependency tracking etc.
Index ¶
- Constants
- Variables
- func CleanString(s string) string
- func NewPredicateIdentity( probablyDependent func(Identity) bool, probablyDependency func(Identity) bool, ) *predicateIdentity
- func PrintIdentityInfo(v any)
- func WalkIdentitiesDeep(v any, cb func(level int, id Identity) bool)
- func WalkIdentitiesShallow(v any, cb func(level int, id Identity) bool)
- type DependencyManagerProvider
- type DependencyManagerProviderFunc
- type DependencyManagerScopedProvider
- type FindFirstManagerIdentityProvider
- type Finder
- func NewFinder(cfg FinderConfig) *Finder
- func (f *Finder) Contains(id, in Identity, maxDepth int) FinderResult
- type FinderConfig
- type FinderResult
- type ForEeachIdentityByNameProvider
- type ForEeachIdentityProvider
- type ForEeachIdentityProviderFunc
- type Identities
- type Identity
- func FirstIdentity(v any) Identity
- func NewGlobIdentity(pattern string) Identity
- func Or(a, b Identity) Identity
- func Unwrap(id Identity) Identity
- type IdentityGroupProvider
- type IdentityProvider
- type IncrementByOne
- type Incrementer
- type IsProbablyDependencyProvider
- type IsProbablyDependentProvider
- type Manager
- func GetDependencyManager(v any) Manager
- func NewManager(name string, opts ...ManagerOption) Manager
- type ManagerIdentity
- type ManagerOption
- type Question
- func NewQuestion[T any](id Identity) *Question[T]
- func (q *Question[T]) Answer(fn func() T)
- func (q *Question[T]) Result() (any, bool)
- type SignalRebuilder
- type StringIdentity
Constants ¶
const ( // Anonymous is an Identity that can be used when identity doesn't matter. Anonymous = StringIdentity("__anonymous") // GenghisKhan is an Identity everyone relates to. GenghisKhan = StringIdentity("__genghiskhan") StructuralChangeAdd = StringIdentity("__structural_change_add") StructuralChangeRemove = StringIdentity("__structural_change_remove") )
Variables ¶
var NopManager = new(nopManager)
Functions ¶
func CleanString ¶
CleanString cleans s to be suitable as an identifier.
func NewPredicateIdentity ¶
func NewPredicateIdentity( probablyDependent func(Identity) bool, probablyDependency func(Identity) bool, ) *predicateIdentity
NewPredicateIdentity creates a new Identity that implements both IsProbablyDependencyProvider and IsProbablyDependentProvider using the provided functions, both of which are optional.
func PrintIdentityInfo ¶
func PrintIdentityInfo(v any)
PrintIdentityInfo is used for debugging/tests only.
func WalkIdentitiesDeep ¶
WalkIdentitiesDeep walks identities in v and applies cb to every identity found. Return true from cb to terminate. If deep is true, it will also walk nested Identities in any Manager found.
func WalkIdentitiesShallow ¶
WalkIdentitiesShallow will not walk into a Manager's Identities. See WalkIdentitiesDeep. cb is called for every Identity found and returns whether to terminate the walk.
Types ¶
type DependencyManagerProvider ¶
type DependencyManagerProvider interface { GetDependencyManager() Manager }
DependencyManagerProvider provides a manager for dependencies.
type DependencyManagerProviderFunc ¶
type DependencyManagerProviderFunc func() Manager
DependencyManagerProviderFunc is a function that implements the DependencyManagerProvider interface.
func (DependencyManagerProviderFunc) GetDependencyManager ¶
func (d DependencyManagerProviderFunc) GetDependencyManager() Manager
type DependencyManagerScopedProvider ¶
type DependencyManagerScopedProvider interface { GetDependencyManagerForScope(scope int) Manager GetDependencyManagerForScopesAll() []Manager }
DependencyManagerScopedProvider provides a manager for dependencies with a given scope.
type FindFirstManagerIdentityProvider ¶
type FindFirstManagerIdentityProvider interface { Identity FindFirstManagerIdentity() ManagerIdentity }
func NewFindFirstManagerIdentityProvider ¶
func NewFindFirstManagerIdentityProvider(m Manager, id Identity) FindFirstManagerIdentityProvider
type Finder ¶
type Finder struct {
// contains filtered or unexported fields
}
Finder finds identities inside another.
func NewFinder ¶
func NewFinder(cfg FinderConfig) *Finder
NewFinder creates a new Finder. This is a thread safe implementation with a cache.
func (*Finder) Contains ¶
func (f *Finder) Contains(id, in Identity, maxDepth int) FinderResult
Contains returns whether in contains id.
type FinderConfig ¶
type FinderConfig struct { // Match exact matches only. Exact bool }
FinderConfig provides configuration for the Finder. Note that we by default will use a strategy where probable matches are good enough. The primary use case for this is to identity the change set for a given changed identity (e.g. a template), and we don't want to have any false negatives there, but some false positives are OK. Also, speed is important.
type FinderResult ¶
type FinderResult int
const ( FinderNotFound FinderResult = iota FinderFoundOneOfManyRepetition FinderFoundOneOfMany FinderFound )
type ForEeachIdentityByNameProvider ¶
type ForEeachIdentityByNameProvider interface { // ForEeachIdentityByName calls cb for each Identity that relates to name. // If cb returns true, the iteration is terminated. ForEeachIdentityByName(name string, cb func(id Identity) bool) }
ForEeachIdentityByNameProvider provides a way to look up identities by name.
type ForEeachIdentityProvider ¶
type ForEeachIdentityProvider interface { // ForEeachIdentityProvider calls cb for each Identity. // If cb returns true, the iteration is terminated. // The return value is whether the iteration was terminated. ForEeachIdentity(cb func(id Identity) bool) bool }
ForEeachIdentityProvider provides a way iterate over identities.
type ForEeachIdentityProviderFunc ¶
ForEeachIdentityProviderFunc is a function that implements the ForEeachIdentityProvider interface.
func (ForEeachIdentityProviderFunc) ForEeachIdentity ¶
func (f ForEeachIdentityProviderFunc) ForEeachIdentity(cb func(id Identity) bool) bool
type Identities ¶
Identities stores identity providers.
func (Identities) AsSlice ¶
func (ids Identities) AsSlice() []Identity
func (Identities) String ¶
func (ids Identities) String() string
type Identity ¶
type Identity interface { IdentifierBase() string }
Identity represents a thing in Hugo (a Page, a template etc.) Any implementation must be comparable/hashable.
func FirstIdentity ¶
FirstIdentity returns the first Identity in v, Anonymous if none found
func NewGlobIdentity ¶
NewGlobIdentity creates a new Identity that is probably dependent on any other Identity that matches the given pattern.
func Or ¶
func Unwrap ¶
type IdentityGroupProvider ¶
type IdentityGroupProvider interface { GetIdentityGroup() Identity }
IdentityGroupProvider can be implemented by tightly connected types. Current use case is Resource transformation via Hugo Pipes.
type IdentityProvider ¶
type IdentityProvider interface { GetIdentity() Identity }
IdentityProvider can be implemented by types that isn't itself and Identity, usually because they're not comparable/hashable.
type IncrementByOne ¶
type IncrementByOne struct {
// contains filtered or unexported fields
}
IncrementByOne implements Incrementer adding 1 every time Incr is called.
func (*IncrementByOne) Incr ¶
func (c *IncrementByOne) Incr() int
type Incrementer ¶
type Incrementer interface { Incr() int }
Incrementer increments and returns the value. Typically used for IDs.
type IsProbablyDependencyProvider ¶
IsProbablyDependencyProvider is an optional interface for Identity.
type IsProbablyDependentProvider ¶
IsProbablyDependentProvider is an optional interface for Identity.
type Manager ¶
type Manager interface { Identity AddIdentity(ids ...Identity) AddIdentityForEach(ids ...ForEeachIdentityProvider) GetIdentity() Identity Reset() // contains filtered or unexported methods }
Manager is an Identity that also manages identities, typically dependencies.
func GetDependencyManager ¶
GetDependencyManager returns the DependencyManager from v or nil if none found.
func NewManager ¶
func NewManager(name string, opts ...ManagerOption) Manager
NewIdentityManager creates a new Manager.
type ManagerIdentity ¶
ManagerIdentity wraps a pair of Identity and Manager.
func (ManagerIdentity) String ¶
func (p ManagerIdentity) String() string
type ManagerOption ¶
type ManagerOption func(m *identityManager)
func WithOnAddIdentity ¶
func WithOnAddIdentity(f func(id Identity)) ManagerOption
WithOnAddIdentity sets a callback that will be invoked when an identity is added to the manager.
type Question ¶
A Question is defined by its Identity and can be answered once.
func NewQuestion ¶
NewQuestion creates a new question with the given identity.
func (*Question[T]) Answer ¶
func (q *Question[T]) Answer(fn func() T)
Answer takes a func that knows the answer. Note that this is a one-time operation, fn will not be invoked again it the question is already answered. Use Result to check if the question is answered.
func (*Question[T]) Result ¶
Result returns the fasit of the question (if answered), and a bool indicating if the question has been answered.
type SignalRebuilder ¶
type SignalRebuilder interface { SignalRebuild(ids ...Identity) }
SignalRebuilder is an optional interface for types that can signal a rebuild.
type StringIdentity ¶
type StringIdentity string
StringIdentity is an Identity that wraps a string.
func CleanStringIdentity ¶
func CleanStringIdentity(s string) StringIdentity
CleanStringIdentity cleans s to be suitable as an identifier and wraps it in a StringIdentity.
func (StringIdentity) IdentifierBase ¶
func (s StringIdentity) IdentifierBase() string
Source Files ¶
finder.go identity.go predicate_identity.go question.go
Directories ¶
Path | Synopsis |
---|---|
identity/identitytesting |
- Version
- v0.144.2 (latest)
- Published
- Feb 19, 2025
- Platform
- linux/amd64
- Imports
- 10 packages
- Last checked
- 7 hours ago –
Tools for package owners.