mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
expose json schema types
Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
This commit is contained in:
parent
de111f4d5b
commit
63832e5e5a
@ -124,14 +124,14 @@ func renderCatalogerInfoJSON(doc *capabilities.Document, catalogers []capabiliti
|
|||||||
}
|
}
|
||||||
|
|
||||||
type patternInfo struct {
|
type patternInfo struct {
|
||||||
Method string `json:"method"`
|
Method string `json:"method"`
|
||||||
Criteria []string `json:"criteria"`
|
Criteria []string `json:"criteria"`
|
||||||
Conditions []capabilities.DetectorCondition `json:"conditions,omitempty"`
|
Conditions []capabilities.DetectorCondition `json:"conditions,omitempty"`
|
||||||
Packages []detectorPackageInfo `json:"packages,omitempty"`
|
Packages []detectorPackageInfo `json:"packages,omitempty"`
|
||||||
Comment string `json:"comment,omitempty"`
|
Comment string `json:"comment,omitempty"`
|
||||||
MetadataTypes []string `json:"metadata_types,omitempty"`
|
PackageTypes []string `json:"package_types,omitempty"`
|
||||||
PackageTypes []string `json:"package_types,omitempty"`
|
JSONSchemaTypes []string `json:"json_schema_types,omitempty"`
|
||||||
Capabilities capabilities.CapabilitySet `json:"capabilities,omitempty"`
|
Capabilities capabilities.CapabilitySet `json:"capabilities,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type catalogerInfo struct {
|
type catalogerInfo struct {
|
||||||
@ -170,14 +170,14 @@ func renderCatalogerInfoJSON(doc *capabilities.Document, catalogers []capabiliti
|
|||||||
}
|
}
|
||||||
|
|
||||||
pi := patternInfo{
|
pi := patternInfo{
|
||||||
Method: string(parser.Detector.Method),
|
Method: string(parser.Detector.Method),
|
||||||
Criteria: parser.Detector.Criteria,
|
Criteria: parser.Detector.Criteria,
|
||||||
Conditions: parser.Detector.Conditions,
|
Conditions: parser.Detector.Conditions,
|
||||||
Packages: pkgs,
|
Packages: pkgs,
|
||||||
Comment: parser.Detector.Comment,
|
Comment: parser.Detector.Comment,
|
||||||
MetadataTypes: parser.MetadataTypes,
|
PackageTypes: parser.PackageTypes,
|
||||||
PackageTypes: parser.PackageTypes,
|
JSONSchemaTypes: parser.JSONSchemaTypes,
|
||||||
Capabilities: parser.Capabilities,
|
Capabilities: parser.Capabilities,
|
||||||
}
|
}
|
||||||
|
|
||||||
info.Patterns = append(info.Patterns, pi)
|
info.Patterns = append(info.Patterns, pi)
|
||||||
@ -200,13 +200,13 @@ func renderCatalogerInfoJSON(doc *capabilities.Document, catalogers []capabiliti
|
|||||||
}
|
}
|
||||||
|
|
||||||
pi := patternInfo{
|
pi := patternInfo{
|
||||||
Method: string(det.Method),
|
Method: string(det.Method),
|
||||||
Criteria: det.Criteria,
|
Criteria: det.Criteria,
|
||||||
Conditions: det.Conditions,
|
Conditions: det.Conditions,
|
||||||
Packages: pkgs,
|
Packages: pkgs,
|
||||||
Comment: det.Comment,
|
Comment: det.Comment,
|
||||||
MetadataTypes: cat.MetadataTypes,
|
PackageTypes: cat.PackageTypes,
|
||||||
PackageTypes: cat.PackageTypes,
|
JSONSchemaTypes: cat.JSONSchemaTypes,
|
||||||
}
|
}
|
||||||
info.Patterns = append(info.Patterns, pi)
|
info.Patterns = append(info.Patterns, pi)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -869,6 +869,100 @@ func validateCapabilityValueType(fieldPath string, value interface{}) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestMetadataTypesHaveJSONSchemaTypes validates that metadata_types and json_schema_types are synchronized
|
||||||
|
// in packages.yaml - every metadata type should have a corresponding json_schema_type with correct conversion
|
||||||
|
func TestMetadataTypesHaveJSONSchemaTypes(t *testing.T) {
|
||||||
|
repoRoot, err := RepoRoot()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// load the packages.yaml
|
||||||
|
doc, _, err := loadCapabilities(filepath.Join(repoRoot, "internal/capabilities/packages.yaml"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// collect all validation errors
|
||||||
|
var errors []string
|
||||||
|
|
||||||
|
// validate cataloger-level types (custom catalogers)
|
||||||
|
for _, cataloger := range doc.Catalogers {
|
||||||
|
if cataloger.Type == "custom" {
|
||||||
|
if len(cataloger.MetadataTypes) > 0 {
|
||||||
|
// verify counts match
|
||||||
|
if len(cataloger.MetadataTypes) != len(cataloger.JSONSchemaTypes) {
|
||||||
|
errors = append(errors,
|
||||||
|
fmt.Sprintf("Cataloger %q has %d metadata_types but %d json_schema_types (counts must match)",
|
||||||
|
cataloger.Name, len(cataloger.MetadataTypes), len(cataloger.JSONSchemaTypes)))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify each metadata_type converts to its corresponding json_schema_type
|
||||||
|
for i, metadataType := range cataloger.MetadataTypes {
|
||||||
|
expectedJSONSchemaType := convertMetadataTypeToJSONSchemaType(metadataType)
|
||||||
|
if expectedJSONSchemaType == "" {
|
||||||
|
errors = append(errors,
|
||||||
|
fmt.Sprintf("Cataloger %q metadata_type[%d] %q could not be converted to json_schema_type (not found in packagemetadata registry)",
|
||||||
|
cataloger.Name, i, metadataType))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
actualJSONSchemaType := cataloger.JSONSchemaTypes[i]
|
||||||
|
if expectedJSONSchemaType != actualJSONSchemaType {
|
||||||
|
errors = append(errors,
|
||||||
|
fmt.Sprintf("Cataloger %q metadata_type[%d] %q should convert to json_schema_type %q but found %q",
|
||||||
|
cataloger.Name, i, metadataType, expectedJSONSchemaType, actualJSONSchemaType))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate parser-level types (generic catalogers)
|
||||||
|
if cataloger.Type == "generic" {
|
||||||
|
for _, parser := range cataloger.Parsers {
|
||||||
|
if len(parser.MetadataTypes) > 0 {
|
||||||
|
// verify counts match
|
||||||
|
if len(parser.MetadataTypes) != len(parser.JSONSchemaTypes) {
|
||||||
|
errors = append(errors,
|
||||||
|
fmt.Sprintf("Parser %q/%s has %d metadata_types but %d json_schema_types (counts must match)",
|
||||||
|
cataloger.Name, parser.ParserFunction, len(parser.MetadataTypes), len(parser.JSONSchemaTypes)))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify each metadata_type converts to its corresponding json_schema_type
|
||||||
|
for i, metadataType := range parser.MetadataTypes {
|
||||||
|
expectedJSONSchemaType := convertMetadataTypeToJSONSchemaType(metadataType)
|
||||||
|
if expectedJSONSchemaType == "" {
|
||||||
|
errors = append(errors,
|
||||||
|
fmt.Sprintf("Parser %q/%s metadata_type[%d] %q could not be converted to json_schema_type (not found in packagemetadata registry)",
|
||||||
|
cataloger.Name, parser.ParserFunction, i, metadataType))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
actualJSONSchemaType := parser.JSONSchemaTypes[i]
|
||||||
|
if expectedJSONSchemaType != actualJSONSchemaType {
|
||||||
|
errors = append(errors,
|
||||||
|
fmt.Sprintf("Parser %q/%s metadata_type[%d] %q should convert to json_schema_type %q but found %q",
|
||||||
|
cataloger.Name, parser.ParserFunction, i, metadataType, expectedJSONSchemaType, actualJSONSchemaType))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// report all errors at once
|
||||||
|
if len(errors) > 0 {
|
||||||
|
require.Fail(t, "Metadata types and JSON schema types validation failed", strings.Join(errors, "\n"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// convertMetadataTypeToJSONSchemaType converts a metadata type (e.g., "pkg.AlpmDBEntry") to its JSON schema type (e.g., "AlpmDbEntry")
|
||||||
|
func convertMetadataTypeToJSONSchemaType(metadataType string) string {
|
||||||
|
jsonName := packagemetadata.JSONNameFromString(metadataType)
|
||||||
|
if jsonName == "" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return packagemetadata.ToUpperCamelCase(jsonName)
|
||||||
|
}
|
||||||
|
|
||||||
// loadConfigStructFields loads the config struct definition from source code using AST parsing
|
// loadConfigStructFields loads the config struct definition from source code using AST parsing
|
||||||
func loadConfigStructFields(repoRoot, configName string) (map[string]string, error) {
|
func loadConfigStructFields(repoRoot, configName string) (map[string]string, error) {
|
||||||
// configName format: "package.StructName" (e.g., "golang.CatalogerConfig")
|
// configName format: "package.StructName" (e.g., "golang.CatalogerConfig")
|
||||||
|
|||||||
@ -26,11 +26,12 @@ type DiscoveredCataloger struct {
|
|||||||
|
|
||||||
// DiscoveredParser represents a parser function and its detection criteria discovered from source
|
// DiscoveredParser represents a parser function and its detection criteria discovered from source
|
||||||
type DiscoveredParser struct {
|
type DiscoveredParser struct {
|
||||||
ParserFunction string
|
ParserFunction string
|
||||||
Method capabilities.ArtifactDetectionMethod
|
Method capabilities.ArtifactDetectionMethod
|
||||||
Criteria []string
|
Criteria []string
|
||||||
MetadataTypes []string // populated from cataloger-type-uses.json files
|
MetadataTypes []string // populated from cataloger-type-uses.json files
|
||||||
PackageTypes []string // populated from cataloger-type-uses.json files
|
PackageTypes []string // populated from cataloger-type-uses.json files
|
||||||
|
JSONSchemaTypes []string // populated from MetadataTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
// discoverGenericCatalogers finds all uses of generic.NewCataloger() in the codebase
|
// discoverGenericCatalogers finds all uses of generic.NewCataloger() in the codebase
|
||||||
|
|||||||
@ -577,6 +577,11 @@ func addCatalogerFieldComment(keyNode, valueNode *yaml.Node, catalogerName strin
|
|||||||
if keyNode.LineComment == "" {
|
if keyNode.LineComment == "" {
|
||||||
keyNode.LineComment = autoGeneratedComment
|
keyNode.LineComment = autoGeneratedComment
|
||||||
}
|
}
|
||||||
|
case "json_schema_types":
|
||||||
|
// json_schema_types are AUTO-GENERATED
|
||||||
|
if keyNode.LineComment == "" {
|
||||||
|
keyNode.LineComment = autoGeneratedComment
|
||||||
|
}
|
||||||
case "capabilities":
|
case "capabilities":
|
||||||
// capabilities are MANUAL
|
// capabilities are MANUAL
|
||||||
if keyNode.LineComment == "" {
|
if keyNode.LineComment == "" {
|
||||||
@ -625,7 +630,7 @@ func addParserComments(parsersNode *yaml.Node) {
|
|||||||
valueNode := parserNode.Content[i+1]
|
valueNode := parserNode.Content[i+1]
|
||||||
|
|
||||||
switch keyNode.Value {
|
switch keyNode.Value {
|
||||||
case "parser_function", "metadata_types", "package_types":
|
case "parser_function", "metadata_types", "package_types", "json_schema_types":
|
||||||
// add AUTO-GENERATED comment to these fields
|
// add AUTO-GENERATED comment to these fields
|
||||||
if keyNode.LineComment == "" {
|
if keyNode.LineComment == "" {
|
||||||
keyNode.LineComment = autoGeneratedComment
|
keyNode.LineComment = autoGeneratedComment
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/scylladb/go-set/strset"
|
"github.com/scylladb/go-set/strset"
|
||||||
|
|
||||||
"github.com/anchore/syft/internal/capabilities"
|
"github.com/anchore/syft/internal/capabilities"
|
||||||
|
"github.com/anchore/syft/internal/packagemetadata"
|
||||||
"github.com/anchore/syft/syft/pkg/cataloger/binary"
|
"github.com/anchore/syft/syft/pkg/cataloger/binary"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -329,6 +330,8 @@ func (e *EnrichmentData) EnrichEntry(catalogerName string, entry *capabilities.C
|
|||||||
// update metadata types if available
|
// update metadata types if available
|
||||||
if types, ok := e.GetMetadataTypes(catalogerName); ok {
|
if types, ok := e.GetMetadataTypes(catalogerName); ok {
|
||||||
entry.MetadataTypes = types
|
entry.MetadataTypes = types
|
||||||
|
// generate JSON schema types from metadata types
|
||||||
|
entry.JSONSchemaTypes = convertToJSONSchemaTypesFromMetadata(types)
|
||||||
}
|
}
|
||||||
// update package types if available
|
// update package types if available
|
||||||
if types, ok := e.GetPackageTypes(catalogerName); ok {
|
if types, ok := e.GetPackageTypes(catalogerName); ok {
|
||||||
@ -336,6 +339,23 @@ func (e *EnrichmentData) EnrichEntry(catalogerName string, entry *capabilities.C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convertToJSONSchemaTypesFromMetadata converts Go struct names to UpperCamelCase JSON schema names
|
||||||
|
func convertToJSONSchemaTypesFromMetadata(metadataTypes []string) []string {
|
||||||
|
if len(metadataTypes) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
result := make([]string, 0, len(metadataTypes))
|
||||||
|
for _, typeName := range metadataTypes {
|
||||||
|
jsonName := packagemetadata.JSONNameFromString(typeName)
|
||||||
|
if jsonName != "" {
|
||||||
|
camelCase := packagemetadata.ToUpperCamelCase(jsonName)
|
||||||
|
result = append(result, camelCase)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
// EnrichWithBinaryClassifier enriches an entry with binary classifier detectors if it's the binary-classifier-cataloger
|
// EnrichWithBinaryClassifier enriches an entry with binary classifier detectors if it's the binary-classifier-cataloger
|
||||||
func (e *EnrichmentData) EnrichWithBinaryClassifier(catalogerName string, entry *capabilities.CatalogerEntry) {
|
func (e *EnrichmentData) EnrichWithBinaryClassifier(catalogerName string, entry *capabilities.CatalogerEntry) {
|
||||||
// special handling for binary-classifier-cataloger: auto-generate one detector per classifier
|
// special handling for binary-classifier-cataloger: auto-generate one detector per classifier
|
||||||
@ -487,6 +507,12 @@ func (m *CatalogerMerger) addNewCustomCatalogers() {
|
|||||||
// enrich with metadata and package types
|
// enrich with metadata and package types
|
||||||
m.enrichment.EnrichEntry(catalogerName, &entry)
|
m.enrichment.EnrichEntry(catalogerName, &entry)
|
||||||
|
|
||||||
|
// fallback: if we have metadata_types but no json_schema_types, convert them
|
||||||
|
// this handles cases where metadata_types exist in YAML but no enrichment data
|
||||||
|
if len(entry.MetadataTypes) > 0 && len(entry.JSONSchemaTypes) == 0 {
|
||||||
|
entry.JSONSchemaTypes = convertToJSONSchemaTypesFromMetadata(entry.MetadataTypes)
|
||||||
|
}
|
||||||
|
|
||||||
// enrich with binary classifier globs
|
// enrich with binary classifier globs
|
||||||
m.enrichment.EnrichWithBinaryClassifier(catalogerName, &entry)
|
m.enrichment.EnrichWithBinaryClassifier(catalogerName, &entry)
|
||||||
|
|
||||||
@ -500,6 +526,13 @@ func (m *CatalogerMerger) addNewCustomCatalogers() {
|
|||||||
// processGenericCataloger processes an existing generic cataloger entry
|
// processGenericCataloger processes an existing generic cataloger entry
|
||||||
func (m *CatalogerMerger) processGenericCataloger(existingEntry *capabilities.CatalogerEntry, disc DiscoveredCataloger, info *capabilities.CatalogerInfo) {
|
func (m *CatalogerMerger) processGenericCataloger(existingEntry *capabilities.CatalogerEntry, disc DiscoveredCataloger, info *capabilities.CatalogerInfo) {
|
||||||
entry, catalogerOrphans, newParsers := updateEntry(existingEntry, disc, info, m.catalogerConfigMappings)
|
entry, catalogerOrphans, newParsers := updateEntry(existingEntry, disc, info, m.catalogerConfigMappings)
|
||||||
|
|
||||||
|
// fallback for catalogers with type override to custom but processed as generic
|
||||||
|
// these may have cataloger-level metadata_types that need json_schema_types
|
||||||
|
if len(entry.MetadataTypes) > 0 && len(entry.JSONSchemaTypes) == 0 {
|
||||||
|
entry.JSONSchemaTypes = convertToJSONSchemaTypesFromMetadata(entry.MetadataTypes)
|
||||||
|
}
|
||||||
|
|
||||||
m.updated.Catalogers = append(m.updated.Catalogers, entry)
|
m.updated.Catalogers = append(m.updated.Catalogers, entry)
|
||||||
m.orphans = append(m.orphans, catalogerOrphans...)
|
m.orphans = append(m.orphans, catalogerOrphans...)
|
||||||
if len(newParsers) > 0 || len(catalogerOrphans) > 0 {
|
if len(newParsers) > 0 || len(catalogerOrphans) > 0 {
|
||||||
@ -524,6 +557,12 @@ func (m *CatalogerMerger) processCustomCataloger(existingEntry *capabilities.Cat
|
|||||||
// enrich with metadata and package types
|
// enrich with metadata and package types
|
||||||
m.enrichment.EnrichEntry(existingEntry.Name, &entry)
|
m.enrichment.EnrichEntry(existingEntry.Name, &entry)
|
||||||
|
|
||||||
|
// fallback: if we have metadata_types but no json_schema_types, convert them
|
||||||
|
// this handles cases where metadata_types exist in YAML but no enrichment data
|
||||||
|
if len(entry.MetadataTypes) > 0 && len(entry.JSONSchemaTypes) == 0 {
|
||||||
|
entry.JSONSchemaTypes = convertToJSONSchemaTypesFromMetadata(entry.MetadataTypes)
|
||||||
|
}
|
||||||
|
|
||||||
// enrich with binary classifier globs
|
// enrich with binary classifier globs
|
||||||
m.enrichment.EnrichWithBinaryClassifier(existingEntry.Name, &entry)
|
m.enrichment.EnrichWithBinaryClassifier(existingEntry.Name, &entry)
|
||||||
|
|
||||||
@ -640,8 +679,21 @@ func updateParsers(existingParsers []capabilities.Parser, discoveredParsers []Di
|
|||||||
p := *existingParser
|
p := *existingParser
|
||||||
p.Detector.Method = discParser.Method
|
p.Detector.Method = discParser.Method
|
||||||
p.Detector.Criteria = discParser.Criteria
|
p.Detector.Criteria = discParser.Criteria
|
||||||
p.MetadataTypes = discParser.MetadataTypes
|
|
||||||
p.PackageTypes = discParser.PackageTypes
|
// only update metadata/package types if discovered parser has them
|
||||||
|
// this preserves existing YAML values when no test observations exist
|
||||||
|
if len(discParser.MetadataTypes) > 0 {
|
||||||
|
p.MetadataTypes = discParser.MetadataTypes
|
||||||
|
p.JSONSchemaTypes = discParser.JSONSchemaTypes
|
||||||
|
} else if len(p.MetadataTypes) > 0 && len(p.JSONSchemaTypes) == 0 {
|
||||||
|
// fallback: if parser has metadata_types but no json_schema_types, convert them
|
||||||
|
p.JSONSchemaTypes = convertToJSONSchemaTypesFromMetadata(p.MetadataTypes)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(discParser.PackageTypes) > 0 {
|
||||||
|
p.PackageTypes = discParser.PackageTypes
|
||||||
|
}
|
||||||
|
|
||||||
// p.Capabilities is preserved from existing
|
// p.Capabilities is preserved from existing
|
||||||
updated = append(updated, p)
|
updated = append(updated, p)
|
||||||
}
|
}
|
||||||
@ -704,9 +756,10 @@ func createTemplateParser(disc DiscoveredParser) capabilities.Parser {
|
|||||||
Method: disc.Method,
|
Method: disc.Method,
|
||||||
Criteria: disc.Criteria,
|
Criteria: disc.Criteria,
|
||||||
},
|
},
|
||||||
MetadataTypes: disc.MetadataTypes,
|
MetadataTypes: disc.MetadataTypes,
|
||||||
PackageTypes: disc.PackageTypes,
|
PackageTypes: disc.PackageTypes,
|
||||||
Capabilities: capabilities.CapabilitySet{}, // empty array - must be filled manually
|
JSONSchemaTypes: disc.JSONSchemaTypes,
|
||||||
|
Capabilities: capabilities.CapabilitySet{}, // empty array - must be filled manually
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
"github.com/anchore/syft/internal/capabilities/pkgtestobservation"
|
"github.com/anchore/syft/internal/capabilities/pkgtestobservation"
|
||||||
|
"github.com/anchore/syft/internal/packagemetadata"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestObservationIndex indexes all test observations for efficient lookup and application.
|
// TestObservationIndex indexes all test observations for efficient lookup and application.
|
||||||
@ -22,8 +23,9 @@ type TestObservationIndex struct {
|
|||||||
|
|
||||||
// TypeObservation combines metadata types and package types
|
// TypeObservation combines metadata types and package types
|
||||||
type TypeObservation struct {
|
type TypeObservation struct {
|
||||||
MetadataTypes []string
|
MetadataTypes []string
|
||||||
PackageTypes []string
|
PackageTypes []string
|
||||||
|
JSONSchemaTypes []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// newTestObservationIndex creates a new empty index
|
// newTestObservationIndex creates a new empty index
|
||||||
@ -166,6 +168,23 @@ func mergeAndDeduplicateStrings(existing, additional []string) []string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convertToJSONSchemaTypes converts Go struct names to UpperCamelCase JSON schema names
|
||||||
|
func convertToJSONSchemaTypes(metadataTypes []string) []string {
|
||||||
|
if len(metadataTypes) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
result := make([]string, 0, len(metadataTypes))
|
||||||
|
for _, typeName := range metadataTypes {
|
||||||
|
jsonName := packagemetadata.JSONNameFromString(typeName)
|
||||||
|
if jsonName != "" {
|
||||||
|
camelCase := packagemetadata.ToUpperCamelCase(jsonName)
|
||||||
|
result = append(result, camelCase)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
// mergeTestObservations merges metadata and package type data from a test-observations.json file
|
// mergeTestObservations merges metadata and package type data from a test-observations.json file
|
||||||
// into the observation index
|
// into the observation index
|
||||||
func mergeTestObservations(observations *pkgtestobservation.Test, index *TestObservationIndex) {
|
func mergeTestObservations(observations *pkgtestobservation.Test, index *TestObservationIndex) {
|
||||||
@ -185,6 +204,8 @@ func mergeTestObservations(observations *pkgtestobservation.Test, index *TestObs
|
|||||||
// merge the types
|
// merge the types
|
||||||
existing.MetadataTypes = mergeAndDeduplicateStrings(existing.MetadataTypes, parserObs.MetadataTypes)
|
existing.MetadataTypes = mergeAndDeduplicateStrings(existing.MetadataTypes, parserObs.MetadataTypes)
|
||||||
existing.PackageTypes = mergeAndDeduplicateStrings(existing.PackageTypes, parserObs.PackageTypes)
|
existing.PackageTypes = mergeAndDeduplicateStrings(existing.PackageTypes, parserObs.PackageTypes)
|
||||||
|
// generate JSON schema types from metadata types
|
||||||
|
existing.JSONSchemaTypes = convertToJSONSchemaTypes(existing.MetadataTypes)
|
||||||
|
|
||||||
index.setParserObservations(pkg, parserName, existing)
|
index.setParserObservations(pkg, parserName, existing)
|
||||||
}
|
}
|
||||||
@ -203,6 +224,8 @@ func mergeTestObservations(observations *pkgtestobservation.Test, index *TestObs
|
|||||||
// merge the types
|
// merge the types
|
||||||
existing.MetadataTypes = mergeAndDeduplicateStrings(existing.MetadataTypes, catalogerObs.MetadataTypes)
|
existing.MetadataTypes = mergeAndDeduplicateStrings(existing.MetadataTypes, catalogerObs.MetadataTypes)
|
||||||
existing.PackageTypes = mergeAndDeduplicateStrings(existing.PackageTypes, catalogerObs.PackageTypes)
|
existing.PackageTypes = mergeAndDeduplicateStrings(existing.PackageTypes, catalogerObs.PackageTypes)
|
||||||
|
// generate JSON schema types from metadata types
|
||||||
|
existing.JSONSchemaTypes = convertToJSONSchemaTypes(existing.MetadataTypes)
|
||||||
|
|
||||||
index.setCatalogerObservations(catalogerName, existing)
|
index.setCatalogerObservations(catalogerName, existing)
|
||||||
}
|
}
|
||||||
@ -217,6 +240,7 @@ func applyParserObservations(cataloger *DiscoveredCataloger, index *TestObservat
|
|||||||
if obs := index.getParserObservations(cataloger.PackageName, parser.ParserFunction); obs != nil {
|
if obs := index.getParserObservations(cataloger.PackageName, parser.ParserFunction); obs != nil {
|
||||||
if len(obs.MetadataTypes) > 0 {
|
if len(obs.MetadataTypes) > 0 {
|
||||||
cataloger.Parsers[i].MetadataTypes = obs.MetadataTypes
|
cataloger.Parsers[i].MetadataTypes = obs.MetadataTypes
|
||||||
|
cataloger.Parsers[i].JSONSchemaTypes = obs.JSONSchemaTypes
|
||||||
foundData = true
|
foundData = true
|
||||||
}
|
}
|
||||||
if len(obs.PackageTypes) > 0 {
|
if len(obs.PackageTypes) > 0 {
|
||||||
@ -239,6 +263,7 @@ func applySingleParserCatalogerObservations(cataloger *DiscoveredCataloger, cata
|
|||||||
cataloger.Parsers[0].MetadataTypes,
|
cataloger.Parsers[0].MetadataTypes,
|
||||||
catalogerObs.MetadataTypes,
|
catalogerObs.MetadataTypes,
|
||||||
)
|
)
|
||||||
|
cataloger.Parsers[0].JSONSchemaTypes = convertToJSONSchemaTypes(cataloger.Parsers[0].MetadataTypes)
|
||||||
foundData = true
|
foundData = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,6 +299,7 @@ func applyMultiParserCatalogerObservations(cataloger *DiscoveredCataloger, catal
|
|||||||
for i := range cataloger.Parsers {
|
for i := range cataloger.Parsers {
|
||||||
if len(catalogerObs.MetadataTypes) > 0 {
|
if len(catalogerObs.MetadataTypes) > 0 {
|
||||||
cataloger.Parsers[i].MetadataTypes = catalogerObs.MetadataTypes
|
cataloger.Parsers[i].MetadataTypes = catalogerObs.MetadataTypes
|
||||||
|
cataloger.Parsers[i].JSONSchemaTypes = catalogerObs.JSONSchemaTypes
|
||||||
foundData = true
|
foundData = true
|
||||||
}
|
}
|
||||||
if len(catalogerObs.PackageTypes) > 0 {
|
if len(catalogerObs.PackageTypes) > 0 {
|
||||||
@ -286,6 +312,7 @@ func applyMultiParserCatalogerObservations(cataloger *DiscoveredCataloger, catal
|
|||||||
for i, parser := range cataloger.Parsers {
|
for i, parser := range cataloger.Parsers {
|
||||||
if len(parser.MetadataTypes) == 0 && len(catalogerObs.MetadataTypes) > 0 {
|
if len(parser.MetadataTypes) == 0 && len(catalogerObs.MetadataTypes) > 0 {
|
||||||
cataloger.Parsers[i].MetadataTypes = catalogerObs.MetadataTypes
|
cataloger.Parsers[i].MetadataTypes = catalogerObs.MetadataTypes
|
||||||
|
cataloger.Parsers[i].JSONSchemaTypes = catalogerObs.JSONSchemaTypes
|
||||||
foundData = true
|
foundData = true
|
||||||
}
|
}
|
||||||
if len(parser.PackageTypes) == 0 && len(catalogerObs.PackageTypes) > 0 {
|
if len(parser.PackageTypes) == 0 && len(catalogerObs.PackageTypes) > 0 {
|
||||||
|
|||||||
@ -72,26 +72,28 @@ type DetectorCondition struct {
|
|||||||
|
|
||||||
// CatalogerEntry represents a single cataloger's capabilities
|
// CatalogerEntry represents a single cataloger's capabilities
|
||||||
type CatalogerEntry struct {
|
type CatalogerEntry struct {
|
||||||
Ecosystem string `yaml:"ecosystem" json:"ecosystem"` // MANUAL - ecosystem categorization (e.g., "python", "java", "javascript")
|
Ecosystem string `yaml:"ecosystem" json:"ecosystem"` // MANUAL - ecosystem categorization (e.g., "python", "java", "javascript")
|
||||||
Name string `yaml:"name" json:"name"` // AUTO-GENERATED for generic, MANUAL for custom
|
Name string `yaml:"name" json:"name"` // AUTO-GENERATED for generic, MANUAL for custom
|
||||||
Type string `yaml:"type" json:"type"` // AUTO-GENERATED: "generic" or "custom"
|
Type string `yaml:"type" json:"type"` // AUTO-GENERATED: "generic" or "custom"
|
||||||
Source Source `yaml:"source" json:"source"` // AUTO-GENERATED for generic, MANUAL for custom
|
Source Source `yaml:"source" json:"source"` // AUTO-GENERATED for generic, MANUAL for custom
|
||||||
Config string `yaml:"config,omitempty" json:"config,omitempty"` // e.g., "golang.CatalogerConfig"
|
Config string `yaml:"config,omitempty" json:"config,omitempty"` // e.g., "golang.CatalogerConfig"
|
||||||
Selectors []string `yaml:"selectors,omitempty" json:"selectors,omitempty"` // AUTO-GENERATED - cataloger name tags for selection
|
Selectors []string `yaml:"selectors,omitempty" json:"selectors,omitempty"` // AUTO-GENERATED - cataloger name tags for selection
|
||||||
Parsers []Parser `yaml:"parsers,omitempty" json:"parsers,omitempty"` // AUTO-GENERATED structure, only for type=generic
|
Parsers []Parser `yaml:"parsers,omitempty" json:"parsers,omitempty"` // AUTO-GENERATED structure, only for type=generic
|
||||||
Detectors []Detector `yaml:"detectors,omitempty" json:"detectors,omitempty"` // AUTO-GENERATED - detection methods (only for type=custom)
|
Detectors []Detector `yaml:"detectors,omitempty" json:"detectors,omitempty"` // AUTO-GENERATED - detection methods (only for type=custom)
|
||||||
MetadataTypes []string `yaml:"metadata_types,omitempty" json:"metadata_types,omitempty"` // AUTO-GENERATED - pkg metadata types emitted (only for type=custom)
|
MetadataTypes []string `yaml:"metadata_types,omitempty" json:"metadata_types,omitempty"` // AUTO-GENERATED - pkg metadata types emitted (only for type=custom)
|
||||||
PackageTypes []string `yaml:"package_types,omitempty" json:"package_types,omitempty"` // AUTO-GENERATED - package types emitted (only for type=custom)
|
PackageTypes []string `yaml:"package_types,omitempty" json:"package_types,omitempty"` // AUTO-GENERATED - package types emitted (only for type=custom)
|
||||||
Capabilities CapabilitySet `yaml:"capabilities,omitempty" json:"capabilities,omitempty"` // MANUAL - config-driven capability definitions (only for type=custom)
|
JSONSchemaTypes []string `yaml:"json_schema_types,omitempty" json:"json_schema_types,omitempty"` // AUTO-GENERATED - JSON schema type names (UpperCamelCase)
|
||||||
|
Capabilities CapabilitySet `yaml:"capabilities,omitempty" json:"capabilities,omitempty"` // MANUAL - config-driven capability definitions (only for type=custom)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parser represents a parser function and its artifact detection criteria for generic catalogers
|
// Parser represents a parser function and its artifact detection criteria for generic catalogers
|
||||||
type Parser struct {
|
type Parser struct {
|
||||||
ParserFunction string `yaml:"function" json:"function"` // AUTO-GENERATED (used as preservation key)
|
ParserFunction string `yaml:"function" json:"function"` // AUTO-GENERATED (used as preservation key)
|
||||||
Detector Detector `yaml:"detector" json:"detector"` // AUTO-GENERATED - how artifacts are detected
|
Detector Detector `yaml:"detector" json:"detector"` // AUTO-GENERATED - how artifacts are detected
|
||||||
MetadataTypes []string `yaml:"metadata_types,omitempty" json:"metadata_types,omitempty"` // AUTO-GENERATED - pkg metadata types emitted by this parser
|
MetadataTypes []string `yaml:"metadata_types,omitempty" json:"metadata_types,omitempty"` // AUTO-GENERATED - pkg metadata types emitted by this parser
|
||||||
PackageTypes []string `yaml:"package_types,omitempty" json:"package_types,omitempty"` // AUTO-GENERATED - package types emitted by this parser
|
PackageTypes []string `yaml:"package_types,omitempty" json:"package_types,omitempty"` // AUTO-GENERATED - package types emitted by this parser
|
||||||
Capabilities CapabilitySet `yaml:"capabilities,omitempty" json:"capabilities,omitempty"` // MANUAL - config-driven capability definitions
|
JSONSchemaTypes []string `yaml:"json_schema_types,omitempty" json:"json_schema_types,omitempty"` // AUTO-GENERATED - JSON schema type names (UpperCamelCase)
|
||||||
|
Capabilities CapabilitySet `yaml:"capabilities,omitempty" json:"capabilities,omitempty"` // MANUAL - config-driven capability definitions
|
||||||
}
|
}
|
||||||
|
|
||||||
// CapabilityField represents a single capability field with optional conditional values based on configuration.
|
// CapabilityField represents a single capability field with optional conditional values based on configuration.
|
||||||
|
|||||||
@ -313,7 +313,7 @@ configs: # AUTO-GENERATED - config structs and their fields
|
|||||||
app_key: python.guess-unpinned-requirements
|
app_key: python.guess-unpinned-requirements
|
||||||
catalogers:
|
catalogers:
|
||||||
# alpm (arch / pacman) #################################################################################################
|
# alpm (arch / pacman) #################################################################################################
|
||||||
- ecosystem: alpm # MANUAL
|
- ecosystem: arch # MANUAL
|
||||||
name: alpm-db-cataloger # AUTO-GENERATED
|
name: alpm-db-cataloger # AUTO-GENERATED
|
||||||
type: generic # AUTO-GENERATED
|
type: generic # AUTO-GENERATED
|
||||||
source: # AUTO-GENERATED
|
source: # AUTO-GENERATED
|
||||||
@ -339,6 +339,8 @@ catalogers:
|
|||||||
- pkg.AlpmDBEntry
|
- pkg.AlpmDBEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- alpm
|
- alpm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- AlpmDbEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -387,6 +389,8 @@ catalogers:
|
|||||||
- pkg.ApkDBEntry
|
- pkg.ApkDBEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- apk
|
- apk
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- ApkDbEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -1003,6 +1007,8 @@ catalogers:
|
|||||||
- pkg.BinarySignature
|
- pkg.BinarySignature
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- binary
|
- binary
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- BinarySignature
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1047,6 +1053,8 @@ catalogers:
|
|||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- binary
|
- binary
|
||||||
- rpm
|
- rpm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- ElfBinaryPackageNoteJsonPayload
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
# licenses can be detected in some elf packages (via the licenses note field)
|
# licenses can be detected in some elf packages (via the licenses note field)
|
||||||
- name: license
|
- name: license
|
||||||
@ -1092,6 +1100,8 @@ catalogers:
|
|||||||
- pkg.PEBinary
|
- pkg.PEBinary
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- binary
|
- binary
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PeBinary
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1130,6 +1140,8 @@ catalogers:
|
|||||||
- pkg.BitnamiSBOMEntry
|
- pkg.BitnamiSBOMEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- bitnami
|
- bitnami
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- BitnamiSbomEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1181,6 +1193,8 @@ catalogers:
|
|||||||
- pkg.RustBinaryAuditEntry
|
- pkg.RustBinaryAuditEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- rust-crate
|
- rust-crate
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- RustCargoAuditEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1222,6 +1236,8 @@ catalogers:
|
|||||||
- pkg.RustCargoLockEntry
|
- pkg.RustCargoLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- rust-crate
|
- rust-crate
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- RustCargoLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1269,6 +1285,8 @@ catalogers:
|
|||||||
- pkg.CocoaPodfileLockEntry
|
- pkg.CocoaPodfileLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- pod
|
- pod
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- CocoaPodfileLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1314,6 +1332,8 @@ catalogers:
|
|||||||
- pkg.SwiftPackageManagerResolvedEntry
|
- pkg.SwiftPackageManagerResolvedEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- swift
|
- swift
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- SwiftPackageManagerLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1357,6 +1377,9 @@ catalogers:
|
|||||||
- pkg.ConanV2LockEntry
|
- pkg.ConanV2LockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- conan
|
- conan
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- CConanLockEntry
|
||||||
|
- CConanLockV2Entry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1386,6 +1409,8 @@ catalogers:
|
|||||||
- pkg.ConanfileEntry
|
- pkg.ConanfileEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- conan
|
- conan
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- CConanFileEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1427,6 +1452,8 @@ catalogers:
|
|||||||
- pkg.ConaninfoEntry
|
- pkg.ConaninfoEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- conan
|
- conan
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- CConanInfoEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1466,6 +1493,8 @@ catalogers:
|
|||||||
- pkg.CondaMetaPackage
|
- pkg.CondaMetaPackage
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- conda
|
- conda
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- CondaMetadataEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -1512,6 +1541,8 @@ catalogers:
|
|||||||
- pkg.DartPubspec
|
- pkg.DartPubspec
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- dart-pub
|
- dart-pub
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- DartPubspec
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1551,6 +1582,8 @@ catalogers:
|
|||||||
- pkg.DartPubspecLockEntry
|
- pkg.DartPubspecLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- dart-pub
|
- dart-pub
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- DartPubspecLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1571,7 +1604,7 @@ catalogers:
|
|||||||
- name: package_manager.package_integrity_hash
|
- name: package_manager.package_integrity_hash
|
||||||
default: false
|
default: false
|
||||||
# Dpkg (debian) ###################################################################################################
|
# Dpkg (debian) ###################################################################################################
|
||||||
- ecosystem: dpkg # MANUAL
|
- ecosystem: debian # MANUAL
|
||||||
name: dpkg-db-cataloger # AUTO-GENERATED
|
name: dpkg-db-cataloger # AUTO-GENERATED
|
||||||
type: generic # AUTO-GENERATED
|
type: generic # AUTO-GENERATED
|
||||||
source: # AUTO-GENERATED
|
source: # AUTO-GENERATED
|
||||||
@ -1599,6 +1632,8 @@ catalogers:
|
|||||||
- pkg.DpkgDBEntry
|
- pkg.DpkgDBEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- deb
|
- deb
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- DpkgDbEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -1621,7 +1656,7 @@ catalogers:
|
|||||||
- DpkgDBEntry.Files[].Digest
|
- DpkgDBEntry.Files[].Digest
|
||||||
- name: package_manager.package_integrity_hash
|
- name: package_manager.package_integrity_hash
|
||||||
default: false
|
default: false
|
||||||
- ecosystem: dpkg # MANUAL
|
- ecosystem: debian # MANUAL
|
||||||
name: deb-archive-cataloger # AUTO-GENERATED
|
name: deb-archive-cataloger # AUTO-GENERATED
|
||||||
type: generic # AUTO-GENERATED
|
type: generic # AUTO-GENERATED
|
||||||
source: # AUTO-GENERATED
|
source: # AUTO-GENERATED
|
||||||
@ -1645,6 +1680,8 @@ catalogers:
|
|||||||
- pkg.DpkgArchiveEntry
|
- pkg.DpkgArchiveEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- deb
|
- deb
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- DpkgArchiveEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -1692,6 +1729,9 @@ catalogers:
|
|||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- dotnet
|
- dotnet
|
||||||
- npm
|
- npm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- DotnetDepsEntry
|
||||||
|
- DotnetPortableExecutableEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1727,6 +1767,8 @@ catalogers:
|
|||||||
- pkg.DotnetDepsEntry
|
- pkg.DotnetDepsEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- dotnet
|
- dotnet
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- DotnetDepsEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1769,6 +1811,8 @@ catalogers:
|
|||||||
- pkg.DotnetPackagesLockEntry
|
- pkg.DotnetPackagesLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- dotnet
|
- dotnet
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- DotnetPackagesLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1810,6 +1854,8 @@ catalogers:
|
|||||||
- pkg.DotnetPortableExecutableEntry
|
- pkg.DotnetPortableExecutableEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- dotnet
|
- dotnet
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- DotnetPortableExecutableEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1848,6 +1894,8 @@ catalogers:
|
|||||||
- pkg.ElixirMixLockEntry
|
- pkg.ElixirMixLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- hex
|
- hex
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- ElixirMixLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1933,6 +1981,8 @@ catalogers:
|
|||||||
- pkg.ErlangRebarLockEntry
|
- pkg.ErlangRebarLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- hex
|
- hex
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- ErlangRebarLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -1978,6 +2028,8 @@ catalogers:
|
|||||||
- pkg.GitHubActionsUseStatement
|
- pkg.GitHubActionsUseStatement
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- github-action-workflow
|
- github-action-workflow
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- GithubActionsUseStatement
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2017,6 +2069,8 @@ catalogers:
|
|||||||
- pkg.GitHubActionsUseStatement
|
- pkg.GitHubActionsUseStatement
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- github-action
|
- github-action
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- GithubActionsUseStatement
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2043,6 +2097,8 @@ catalogers:
|
|||||||
- pkg.GitHubActionsUseStatement
|
- pkg.GitHubActionsUseStatement
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- github-action
|
- github-action
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- GithubActionsUseStatement
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2092,6 +2148,8 @@ catalogers:
|
|||||||
- pkg.GolangBinaryBuildinfoEntry
|
- pkg.GolangBinaryBuildinfoEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- go-module
|
- go-module
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- GoModuleBuildinfoEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2146,6 +2204,9 @@ catalogers:
|
|||||||
- pkg.GolangSourceEntry
|
- pkg.GolangSourceEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- go-module
|
- go-module
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- GoModuleEntry
|
||||||
|
- GoSourceEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2241,6 +2302,8 @@ catalogers:
|
|||||||
- pkg.JavaArchive
|
- pkg.JavaArchive
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- java-archive
|
- java-archive
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- JavaArchive
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
# TODO: online capabilities
|
# TODO: online capabilities
|
||||||
- name: license
|
- name: license
|
||||||
@ -2288,6 +2351,8 @@ catalogers:
|
|||||||
- pkg.JavaArchive
|
- pkg.JavaArchive
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- java-archive
|
- java-archive
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- JavaArchive
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2329,6 +2394,8 @@ catalogers:
|
|||||||
- pkg.JavaArchive
|
- pkg.JavaArchive
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- java-archive
|
- java-archive
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- JavaArchive
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -2373,6 +2440,8 @@ catalogers:
|
|||||||
- pkg.JavaVMInstallation
|
- pkg.JavaVMInstallation
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- binary
|
- binary
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- JavaJvmInstallation
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -2488,6 +2557,8 @@ catalogers:
|
|||||||
- pkg.HackageStackYamlLockEntry
|
- pkg.HackageStackYamlLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- hackage
|
- hackage
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- HaskellHackageStackLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2518,6 +2589,8 @@ catalogers:
|
|||||||
- pkg.HackageStackYamlEntry
|
- pkg.HackageStackYamlEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- hackage
|
- hackage
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- HaskellHackageStackEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2562,6 +2635,8 @@ catalogers:
|
|||||||
- pkg.HomebrewFormula
|
- pkg.HomebrewFormula
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- homebrew
|
- homebrew
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- HomebrewFormula
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -2629,6 +2704,8 @@ catalogers:
|
|||||||
- pkg.YarnLockEntry
|
- pkg.YarnLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- npm
|
- npm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- JavascriptYarnLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2660,6 +2737,8 @@ catalogers:
|
|||||||
- pkg.NpmPackageLockEntry
|
- pkg.NpmPackageLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- npm
|
- npm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- JavascriptNpmPackageLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -2704,6 +2783,8 @@ catalogers:
|
|||||||
- pkg.NpmPackage
|
- pkg.NpmPackage
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- npm
|
- npm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- JavascriptNpmPackage
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -2754,6 +2835,9 @@ catalogers:
|
|||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- linux-kernel
|
- linux-kernel
|
||||||
- linux-kernel-module
|
- linux-kernel-module
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- LinuxKernelArchive
|
||||||
|
- LinuxKernelModule
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -2793,6 +2877,8 @@ catalogers:
|
|||||||
- pkg.LuaRocksPackage
|
- pkg.LuaRocksPackage
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- lua-rocks
|
- lua-rocks
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- LuarocksPackage
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -2834,6 +2920,8 @@ catalogers:
|
|||||||
- pkg.NixStoreEntry
|
- pkg.NixStoreEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- nix
|
- nix
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- NixStoreEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2873,6 +2961,8 @@ catalogers:
|
|||||||
- pkg.NixStoreEntry
|
- pkg.NixStoreEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- nix
|
- nix
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- NixStoreEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -2923,6 +3013,8 @@ catalogers:
|
|||||||
- pkg.OpamPackage
|
- pkg.OpamPackage
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- opam
|
- opam
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- OpamPackage
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -2964,6 +3056,8 @@ catalogers:
|
|||||||
- pkg.PhpComposerInstalledEntry
|
- pkg.PhpComposerInstalledEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- php-composer
|
- php-composer
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PhpComposerInstalledEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3006,6 +3100,8 @@ catalogers:
|
|||||||
- pkg.PhpComposerLockEntry
|
- pkg.PhpComposerLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- php-composer
|
- php-composer
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PhpComposerLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3049,6 +3145,8 @@ catalogers:
|
|||||||
- pkg.BinarySignature
|
- pkg.BinarySignature
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- binary
|
- binary
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- BinarySignature
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3090,6 +3188,8 @@ catalogers:
|
|||||||
- pkg.PhpPearEntry
|
- pkg.PhpPearEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- php-pear
|
- php-pear
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PhpPearEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3126,6 +3226,8 @@ catalogers:
|
|||||||
- pkg.PhpPeclEntry
|
- pkg.PhpPeclEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- php-pecl
|
- php-pecl
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PhpPeclEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3144,7 +3246,7 @@ catalogers:
|
|||||||
- name: package_manager.package_integrity_hash
|
- name: package_manager.package_integrity_hash
|
||||||
default: false
|
default: false
|
||||||
# Portage (gentoo) ########################################################################################################
|
# Portage (gentoo) ########################################################################################################
|
||||||
- ecosystem: portage # MANUAL
|
- ecosystem: gentoo # MANUAL
|
||||||
name: portage-cataloger # AUTO-GENERATED
|
name: portage-cataloger # AUTO-GENERATED
|
||||||
type: generic # AUTO-GENERATED
|
type: generic # AUTO-GENERATED
|
||||||
source: # AUTO-GENERATED
|
source: # AUTO-GENERATED
|
||||||
@ -3169,6 +3271,8 @@ catalogers:
|
|||||||
- pkg.PortageEntry
|
- pkg.PortageEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- portage
|
- portage
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PortageDbEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3218,6 +3322,8 @@ catalogers:
|
|||||||
- pkg.PythonPackage
|
- pkg.PythonPackage
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- python
|
- python
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PythonPackage
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3262,6 +3368,8 @@ catalogers:
|
|||||||
- pkg.PythonUvLockEntry
|
- pkg.PythonUvLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- python
|
- python
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PythonUvLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3313,6 +3421,8 @@ catalogers:
|
|||||||
- pkg.PythonPipfileLockEntry
|
- pkg.PythonPipfileLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- python
|
- python
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PythonPipfileLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3342,6 +3452,8 @@ catalogers:
|
|||||||
- pkg.PythonPoetryLockEntry
|
- pkg.PythonPoetryLockEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- python
|
- python
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PythonPoetryLockEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3370,6 +3482,8 @@ catalogers:
|
|||||||
- pkg.PythonRequirementsEntry
|
- pkg.PythonRequirementsEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- python
|
- python
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- PythonPipRequirementsEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3409,6 +3523,8 @@ catalogers:
|
|||||||
- pkg.RDescription
|
- pkg.RDescription
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- R-package
|
- R-package
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- RDescription
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3449,6 +3565,8 @@ catalogers:
|
|||||||
- pkg.RpmArchive
|
- pkg.RpmArchive
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- rpm
|
- rpm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- RpmArchive
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3495,6 +3613,8 @@ catalogers:
|
|||||||
- pkg.RpmDBEntry
|
- pkg.RpmDBEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- rpm
|
- rpm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- RpmDbEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3522,6 +3642,8 @@ catalogers:
|
|||||||
- pkg.RpmDBEntry
|
- pkg.RpmDBEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- rpm
|
- rpm
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- RpmDbEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3609,6 +3731,8 @@ catalogers:
|
|||||||
- pkg.RubyGemspec
|
- pkg.RubyGemspec
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- gem
|
- gem
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- RubyGemspec
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3652,6 +3776,8 @@ catalogers:
|
|||||||
- pkg.RubyGemspec
|
- pkg.RubyGemspec
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- gem
|
- gem
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- RubyGemspec
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3702,6 +3828,8 @@ catalogers:
|
|||||||
- pkg.ApkDBEntry
|
- pkg.ApkDBEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- apk
|
- apk
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- ApkDbEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
@ -3740,6 +3868,8 @@ catalogers:
|
|||||||
- pkg.SnapEntry
|
- pkg.SnapEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- deb
|
- deb
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- SnapEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3764,6 +3894,8 @@ catalogers:
|
|||||||
- pkg.SnapEntry
|
- pkg.SnapEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- deb
|
- deb
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- SnapEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3788,6 +3920,8 @@ catalogers:
|
|||||||
- pkg.SnapEntry
|
- pkg.SnapEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- deb
|
- deb
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- SnapEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3812,6 +3946,8 @@ catalogers:
|
|||||||
- pkg.SnapEntry
|
- pkg.SnapEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- deb
|
- deb
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- SnapEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3836,6 +3972,8 @@ catalogers:
|
|||||||
- pkg.SnapEntry
|
- pkg.SnapEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- deb
|
- deb
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- SnapEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3875,6 +4013,8 @@ catalogers:
|
|||||||
- pkg.SwiplPackEntry
|
- pkg.SwiplPackEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- swiplpack
|
- swiplpack
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- SwiplpackPackage
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3915,6 +4055,8 @@ catalogers:
|
|||||||
- pkg.TerraformLockProviderEntry
|
- pkg.TerraformLockProviderEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- terraform
|
- terraform
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- TerraformLockProviderEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: false
|
default: false
|
||||||
@ -3954,6 +4096,8 @@ catalogers:
|
|||||||
- pkg.WordpressPluginEntry
|
- pkg.WordpressPluginEntry
|
||||||
package_types: # AUTO-GENERATED
|
package_types: # AUTO-GENERATED
|
||||||
- wordpress-plugin
|
- wordpress-plugin
|
||||||
|
json_schema_types: # AUTO-GENERATED
|
||||||
|
- WordpressPluginEntry
|
||||||
capabilities: # MANUAL - config-driven capability definitions
|
capabilities: # MANUAL - config-driven capability definitions
|
||||||
- name: license
|
- name: license
|
||||||
default: true
|
default: true
|
||||||
|
|||||||
@ -163,3 +163,30 @@ func ReflectTypeFromJSONName(name string) reflect.Type {
|
|||||||
name = strings.ToLower(name)
|
name = strings.ToLower(name)
|
||||||
return jsonTypes.nameToType[name]
|
return jsonTypes.nameToType[name]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JSONNameFromString converts a Go struct name string (e.g., "pkg.AlpmDBEntry" or "AlpmDBEntry")
|
||||||
|
// to its JSON schema name (e.g., "alpm-db-entry"). Returns empty string if not found.
|
||||||
|
func JSONNameFromString(typeName string) string {
|
||||||
|
// strip "pkg." prefix if present
|
||||||
|
typeName = strings.TrimPrefix(typeName, "pkg.")
|
||||||
|
|
||||||
|
// look through all types to find matching struct name
|
||||||
|
for typ, jsonName := range jsonTypes.typeToName {
|
||||||
|
if typ.Name() == typeName {
|
||||||
|
return jsonName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToUpperCamelCase converts kebab-case to UpperCamelCase
|
||||||
|
// e.g., "alpm-db-entry" -> "AlpmDbEntry"
|
||||||
|
func ToUpperCamelCase(kebab string) string {
|
||||||
|
parts := strings.Split(kebab, "-")
|
||||||
|
for i, part := range parts {
|
||||||
|
if len(part) > 0 {
|
||||||
|
parts[i] = strings.ToUpper(part[0:1]) + part[1:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strings.Join(parts, "")
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user