// Package common contains any code used by two or more packages. It avoid circular dependencies.
package common

// ImportsParsedFromRuleSources is the "imports" interface returned by Language.GenerateRules(), and
// passed by Gazelle to Resolver.Resolve().
//
// It returns the verbatim paths of the import statements parsed from all the Sass and TypeScript
// sources of a rule generated by this Gazelle extension (e.g. ts_library, sass_library, etc.)
//
// The methods in this interface reflect the programming languages used in our front-end codebase,
// which at this time are TypeScript and Sass.
type ImportsParsedFromRuleSources interface {
	// GetSassImports returns the verbatim paths of the import statements parsed from all the Sass
	// sources of a rule generated by this Gazelle extension (e.g. sass_library, sk_element, etc.).
	GetSassImports() []string

	// GetTypeScriptImports returns the verbatim paths of the import statements parsed from all the
	// TypeScript sources of a rule generated by this Gazelle extension (e.g. ts_library, sk_element,
	// karma_test, etc.).
	GetTypeScriptImports() []string
}
