directive

package module
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 13, 2024 License: MIT Imports: 8 Imported by: 0

README

directive

pkg.go.dev

directive finds id fields with no @id directive and arguments in your GraphQL schema files.

input UserCreateInput {
    name: String! # want "UserCreateInput.name has no constraint directive"
}

Usage

directive provides a typical main function and you can install with go install command.

$ go install github.com/gqlgo/directive/cmd/directive@latest

The directive command has a flag, config which will be parsed and analyzed by the Analyzer.

  • sample1: constraint directive exists on the field
---
analyzer:
  - analyzer_name: "constraint directive"
    description: "constraint directive exists on the field"
    field:
      - description: "constraint directive exists on the input field"
        directive: constraint
        kind: ['INPUT_OBJECT']
        field_parent_type: ['.+']
        field_type: ['^\[?Int\]?$', '^\[?Float\]?$', '^\[?String\]?$', '^\[?Decimal\]?$', '^\[?URL\]?$']
        exclude_field: ['^first$', '^last$', '^after$', '^before$']
        report_format: "%s has no constraint directive"
    argument:
      - description: "constraint directive exists on the object field argument"
        directive: constraint
        kind: ['OBJECT']
        argument_type: ['^\[?Int\]?$', '^\[?Float\]?$', '^\[?String\]?$', '^\[?Decimal\]?$', '^\[?URL\]?$']
        exclude_argument: ['^first$', '^last$', '^after$', '^before$']
        report_format: "argument %s has no constraint directive"
  • sample2: permission directive exists on the definition
---
analyzer:
  - analyzer_name: "permission directive"
    description: "permission directive exists on the definition"
    definition:
      - description: "permission directive exists on the definition"
        directive: permission
        kind: ['OBJECT', 'INTERFACE']
        definition: ['.+']
        exclude_definition: [ '^Query$', '^Mutation$', '^Subscription$', '^PageInfo$']
        report_format: "%s has no permission directive"
    field:
      - description: "permission directive exists on the mutation"
        directive: permission
        kind: ['OBJECT']
        field_parent_type:  ['^Mutation$']
        field_type: ['.+']
        exclude_field:
        report_format: "%s has no permission directive"

The directive command has a flag, schema which will be parsed and analyzed by directive's Analyzer.

$ directive -schema="server/graphql/schema/**/*.graphql"

The default value of schema is "schema/*/**.graphql".

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ArgumentAnalyzer added in v0.0.5

func ArgumentAnalyzer(config *ArgumentConfig) *gqlanalysis.Analyzer

func DefinitionAnalyzer added in v0.0.5

func DefinitionAnalyzer(config *DefinitionConfig) *gqlanalysis.Analyzer

func FieldAnalyzer added in v0.0.5

func FieldAnalyzer(config *FieldConfig) *gqlanalysis.Analyzer

func MergeAnalyzers added in v0.0.2

func MergeAnalyzers(analyzerConfig *AnalyzerConfig) func(pass *gqlanalysis.Pass) (any, error)

func NewAnalyzer added in v0.0.2

func NewAnalyzer(analyzerConfig *AnalyzerConfig) *gqlanalysis.Analyzer

func NewAnalyzers added in v0.0.2

func NewAnalyzers(config *Config) []*gqlanalysis.Analyzer

Types

type AnalyzerConfig added in v0.0.2

type AnalyzerConfig struct {
	AnalyzerName     string              `yaml:"analyzer_name"`
	Description      string              `yaml:"description"`
	DefinitionConfig []*DefinitionConfig `yaml:"definition"`
	FieldConfig      []*FieldConfig      `yaml:"field"`
	ArgumentConfig   []*ArgumentConfig   `yaml:"argument"`
}

type ArgumentConfig added in v0.0.5

type ArgumentConfig struct {
	Description             string               `yaml:"description"`
	Directive               string               `yaml:"directive"`
	Kinds                   []ast.DefinitionKind `yaml:"kind"`
	ArgumentTypePatterns    []string             `yaml:"argument_type"`
	ExcludeArgumentPatterns []string             `yaml:"exclude_argument"`
	ReportFormat            string               `yaml:"report_format"`
}

type ArgumentDefinitions added in v0.0.5

type ArgumentDefinitions ast.ArgumentDefinitionList

func (ArgumentDefinitions) ExcludeByArgumentName added in v0.0.5

func (as ArgumentDefinitions) ExcludeByArgumentName(excludeArgumentPatterns []string) ArgumentDefinitions

func (ArgumentDefinitions) FilterByArgumentType added in v0.0.5

func (as ArgumentDefinitions) FilterByArgumentType(argumentTypePatterns []string) ArgumentDefinitions

func (ArgumentDefinitions) FilterByNotHasDirective added in v0.0.5

func (as ArgumentDefinitions) FilterByNotHasDirective(directive string) ArgumentDefinitions

func (ArgumentDefinitions) FilterByPositionNotNil added in v0.0.5

func (as ArgumentDefinitions) FilterByPositionNotNil() ArgumentDefinitions

type Config

type Config struct {
	Analyzer []*AnalyzerConfig `yaml:"analyzer"`
}

func ParseConfigFile

func ParseConfigFile(configFile io.Reader) (*Config, error)

type DefinitionConfig added in v0.0.5

type DefinitionConfig struct {
	Description               string               `yaml:"description"`
	Directive                 string               `yaml:"directive"`
	Kinds                     []ast.DefinitionKind `yaml:"kind"`
	DefinitionPatterns        []string             `yaml:"definition"`
	ExcludeDefinitionPatterns []string             `yaml:"exclude_definition"`
	ReportFormat              string               `yaml:"report_format"`
}

type Definitions added in v0.0.5

type Definitions ast.DefinitionList

func NewDefinitionsByMap added in v0.0.5

func NewDefinitionsByMap(typeByName map[string]*ast.Definition) Definitions

func (Definitions) ExcludeByDefinitionName added in v0.0.5

func (ds Definitions) ExcludeByDefinitionName(excludeDefinitionPatterns []string) Definitions

func (Definitions) Fields added in v0.0.5

func (ds Definitions) Fields() FieldDefinitions

func (Definitions) FilterByDefinitionName added in v0.0.5

func (ds Definitions) FilterByDefinitionName(definitionPattern []string) Definitions

func (Definitions) FilterByKinds added in v0.0.5

func (ds Definitions) FilterByKinds(kinds []ast.DefinitionKind) Definitions

func (Definitions) FilterByNotHasDirective added in v0.0.5

func (ds Definitions) FilterByNotHasDirective(directive string) Definitions

func (Definitions) FilterByPositionNotNil added in v0.0.5

func (ds Definitions) FilterByPositionNotNil() Definitions

func (Definitions) NotBuildIn added in v0.0.5

func (ds Definitions) NotBuildIn() Definitions

type FieldConfig added in v0.0.5

type FieldConfig struct {
	Description             string               `yaml:"description"`
	Directive               string               `yaml:"directive"`
	Kinds                   []ast.DefinitionKind `yaml:"kind"`
	FieldParentTypePatterns []string             `yaml:"field_parent_type"`
	FieldTypePatterns       []string             `yaml:"field_type"`
	ExcludeFieldPatterns    []string             `yaml:"exclude_field"`
	ReportFormat            string               `yaml:"report_format"`
}

type FieldDefinitions added in v0.0.5

type FieldDefinitions ast.FieldList

func (FieldDefinitions) Arguments added in v0.0.5

func (fs FieldDefinitions) Arguments() ArgumentDefinitions

func (FieldDefinitions) ExcludeByField added in v0.0.5

func (fs FieldDefinitions) ExcludeByField(excludeFiledPatterns []string) FieldDefinitions

func (FieldDefinitions) FilterByFieldType added in v0.0.5

func (fs FieldDefinitions) FilterByFieldType(fieldTypePatterns []string) FieldDefinitions

func (FieldDefinitions) FilterByNotHasDirective added in v0.0.5

func (fs FieldDefinitions) FilterByNotHasDirective(directive string) FieldDefinitions

func (FieldDefinitions) FilterByNotNil added in v0.0.5

func (fs FieldDefinitions) FilterByNotNil() FieldDefinitions

func (FieldDefinitions) FilterByPositionNotNil added in v0.0.5

func (fs FieldDefinitions) FilterByPositionNotNil() FieldDefinitions

type Types added in v0.0.5

type Types []*ast.Type

func (Types) FilterByType added in v0.0.5

func (ts Types) FilterByType(typePatterns []string) Types

Directories

Path Synopsis
cmd
directive command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL