import { ExtractorConfig } from '@spotify/backstage-plugin-soundcheck-common'; import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api'; import * as _backstage_filter_predicates from '@backstage/filter-predicates'; import { z } from 'zod/v3'; /** * Extracts a fact on the existence of files within an SCM repository. * * @public */ type FileExistsExtractorConfig = ExtractorConfig & { /** * Describes the data to be extracted. */ data: FileExistsDataSchema[]; }; /** * Extracts data from a JSON/YAML/XML file at specified JSON paths. * * @public */ type JsonYamlPathExtractorConfig = ExtractorConfig & { /** * The path of the JSON, YAML, or XML file. */ path: string; /** * An array describing the data to be extracted. */ data: JsonPathDataSchema[]; }; /** * Executes one or more regular expressions against a specified file and extracts its capture * groups into fact data. * * @public */ type RegexExtractorConfig = ExtractorConfig & { /** * Path to the file to extract data from. */ path: string; /** * A regular expression to execute on the file. Should include one or more capture groups. */ regex: string; /** * An array describing the data to be extracted. The order of the elements in this array * corresponds to the capture groups within the regular expression. If omitted, the extractor * simply returns true or false based on whether the regular expression matched. */ data?: RegexDataSchema[]; /** * Optional flags to use when executing the regular expression. */ flags?: string; /** * When true, finds all matches in the file rather than just the first. * Returns `{ matchCount: number, matches: string[] }` instead of `{ matches: boolean }`. * The global flag (`g`) is automatically applied. * Cannot be used together with `data` (capture groups). */ matchAll?: boolean; }; /** * Uses the SCM provider's code search API to find code patterns across a repository * without downloading individual files. * * @public */ type CodeSearchExtractorConfig = ExtractorConfig & { /** * The search query string (e.g., `'import express'`, * `'com.spotify.junit5.extensions.ServiceHelper;'`). */ query: string; /** * When true, Soundcheck fetches each candidate file returned by the * search API and verifies the query string appears as an exact substring * in its content. This eliminates false positives from GitHub's * token-based search — which splits on punctuation and ignores order — * but costs one additional API call per candidate file. * * Enable this for queries that contain punctuation or must match * verbatim (e.g., fully-qualified class names, import paths). Leave * disabled for broad keyword searches where GitHub's own ranking is * sufficient. * * The fact data includes `exactMatch: true | false` so downstream * checks can distinguish validated results from best-effort search. * * Defaults to false. */ exactMatch?: boolean; /** * Optional qualifiers to narrow the search scope. * These are appended to the query as provider-specific search qualifiers. */ qualifiers?: CodeSearchQualifiers; }; /** * Optional search qualifiers for {@link CodeSearchExtractorConfig}. * * @public */ type CodeSearchQualifiers = { /** File extension filter (e.g., "ts", "yaml"). */ extension?: string; /** Filename filter (e.g., "Dockerfile"). */ filename?: string; /** Path prefix filter (e.g., "src/"). */ path?: string; /** Language filter (e.g., "typescript"). */ language?: string; }; /** * Data Schema for {@link FileExistsExtractorConfig} * * @public */ type FileExistsDataSchema = { /** * Name of the field within the resulting facts data schema. */ name: string; /** * The path to look for the existence of the file at. */ path: string; }; /** * Data Schema for {@link JsonYamlPathExtractorConfig} * * @public */ type JsonPathDataSchema = { /** * A name for the data to be extracted, */ name: string; /** * A JSON Path pointing to the element to extract. */ jsonPath: string; /** * A JSON Schema representation of the data’s type. */ type: string; items?: { /** * A type of array items in case if {@link JsonPathDataSchema}.type is array. */ type: string; }; }; /** * Data Schema for {@link RegexExtractorConfig} * * @public */ type RegexDataSchema = { /** * A name for the data to be extracted. */ name: string; /** * A JSON Schema representation of the data’s type. */ type: string; }; /** @public */ declare const scmSoundcheckModule: _backstage_backend_plugin_api.BackendFeature; /** * Zod schema for validating this module's fact collector / config shape in * YAML configuration files. See the `soundcheck-common` README for usage in * CI pipelines. * * @public */ declare const ScmFactCollectorSchema: z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodObject<{ url: z.ZodString; }, "strict", z.ZodTypeAny, { url: string; }, { url: string; }>, z.ZodEffects, z.ZodEffects; months: z.ZodOptional; weeks: z.ZodOptional; days: z.ZodOptional; hours: z.ZodOptional; minutes: z.ZodOptional; seconds: z.ZodOptional; milliseconds: z.ZodOptional; }, "strip", z.ZodTypeAny, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>]>>; initialDelay: z.ZodOptional; months: z.ZodOptional; weeks: z.ZodOptional; days: z.ZodOptional; hours: z.ZodOptional; minutes: z.ZodOptional; seconds: z.ZodOptional; milliseconds: z.ZodOptional; }, "strip", z.ZodTypeAny, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>, z.ZodEffects]>>; batchSize: z.ZodOptional; filter: z.ZodOptional, Record, Record>, z.ZodRecord]>>>, z.ZodArray, Record, Record>, z.ZodRecord]>>>, "many">]>>; filterQuery: z.ZodOptional, _backstage_filter_predicates.FilterPredicateExpression | { $all: _backstage_filter_predicates.FilterPredicate[]; } | { $any: _backstage_filter_predicates.FilterPredicate[]; } | { $not: _backstage_filter_predicates.FilterPredicate; } | _backstage_filter_predicates.UnknownFilterPredicateOperator, _backstage_filter_predicates.FilterPredicate>>; exclude: z.ZodOptional, Record, Record>, z.ZodRecord]>>>, z.ZodArray, Record, Record>, z.ZodRecord]>>>, "many">]>>; cache: z.ZodOptional; months: z.ZodOptional; weeks: z.ZodOptional; days: z.ZodOptional; hours: z.ZodOptional; minutes: z.ZodOptional; seconds: z.ZodOptional; milliseconds: z.ZodOptional; }, "strip", z.ZodTypeAny, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>; }, "strict", z.ZodTypeAny, { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; }, { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; }>]>>; cacheFullResultsForEtags: z.ZodOptional; collects: z.ZodUnion<[z.ZodUnion, z.ZodEffects, "many">, any[], any[]>]>; }, "strict", z.ZodTypeAny, { filter?: Record | Record[] | undefined; exclude?: Record | Record[] | undefined; frequency?: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | { cron: string; } | undefined; cache?: boolean | { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; } | undefined; batchSize?: number | undefined; filterQuery?: _backstage_filter_predicates.FilterPredicateExpression | { $all: _backstage_filter_predicates.FilterPredicate[]; } | { $any: _backstage_filter_predicates.FilterPredicate[]; } | { $not: _backstage_filter_predicates.FilterPredicate; } | _backstage_filter_predicates.UnknownFilterPredicateOperator | undefined; initialDelay?: string | { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | undefined; cacheFullResultsForEtags?: boolean | undefined; collects?: any; }, { filter?: Record | Record[] | undefined; exclude?: Record | Record[] | undefined; frequency?: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | { cron: string; } | undefined; cache?: boolean | { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; } | undefined; batchSize?: number | undefined; filterQuery?: _backstage_filter_predicates.FilterPredicate | undefined; initialDelay?: string | { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | undefined; cacheFullResultsForEtags?: boolean | undefined; collects?: any; }>, { filter?: Record | Record[] | undefined; exclude?: Record | Record[] | undefined; frequency?: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | { cron: string; } | undefined; cache?: boolean | { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; } | undefined; batchSize?: number | undefined; filterQuery?: _backstage_filter_predicates.FilterPredicateExpression | { $all: _backstage_filter_predicates.FilterPredicate[]; } | { $any: _backstage_filter_predicates.FilterPredicate[]; } | { $not: _backstage_filter_predicates.FilterPredicate; } | _backstage_filter_predicates.UnknownFilterPredicateOperator | undefined; initialDelay?: string | { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | undefined; cacheFullResultsForEtags?: boolean | undefined; collects?: any; }, { filter?: Record | Record[] | undefined; exclude?: Record | Record[] | undefined; frequency?: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | { cron: string; } | undefined; cache?: boolean | { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; } | undefined; batchSize?: number | undefined; filterQuery?: _backstage_filter_predicates.FilterPredicate | undefined; initialDelay?: string | { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | undefined; cacheFullResultsForEtags?: boolean | undefined; collects?: any; }>]>, z.ZodObject<{ cacheFullResultsForEtags: z.ZodBoolean; }, "strict", z.ZodTypeAny, { cacheFullResultsForEtags: boolean; }, { cacheFullResultsForEtags: boolean; }>]>, z.ZodArray]>, z.ZodArray, z.ZodEffects; months: z.ZodOptional; weeks: z.ZodOptional; days: z.ZodOptional; hours: z.ZodOptional; minutes: z.ZodOptional; seconds: z.ZodOptional; milliseconds: z.ZodOptional; }, "strip", z.ZodTypeAny, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>]>>; initialDelay: z.ZodOptional; months: z.ZodOptional; weeks: z.ZodOptional; days: z.ZodOptional; hours: z.ZodOptional; minutes: z.ZodOptional; seconds: z.ZodOptional; milliseconds: z.ZodOptional; }, "strip", z.ZodTypeAny, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>, z.ZodEffects]>>; batchSize: z.ZodOptional; filter: z.ZodOptional, Record, Record>, z.ZodRecord]>>>, z.ZodArray, Record, Record>, z.ZodRecord]>>>, "many">]>>; filterQuery: z.ZodOptional, _backstage_filter_predicates.FilterPredicateExpression | { $all: _backstage_filter_predicates.FilterPredicate[]; } | { $any: _backstage_filter_predicates.FilterPredicate[]; } | { $not: _backstage_filter_predicates.FilterPredicate; } | _backstage_filter_predicates.UnknownFilterPredicateOperator, _backstage_filter_predicates.FilterPredicate>>; exclude: z.ZodOptional, Record, Record>, z.ZodRecord]>>>, z.ZodArray, Record, Record>, z.ZodRecord]>>>, "many">]>>; cache: z.ZodOptional; months: z.ZodOptional; weeks: z.ZodOptional; days: z.ZodOptional; hours: z.ZodOptional; minutes: z.ZodOptional; seconds: z.ZodOptional; milliseconds: z.ZodOptional; }, "strip", z.ZodTypeAny, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }, { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }>; }, "strict", z.ZodTypeAny, { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; }, { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; }>]>>; cacheFullResultsForEtags: z.ZodOptional; collects: z.ZodUnion<[z.ZodUnion, z.ZodEffects, "many">, any[], any[]>]>; }, "strict", z.ZodTypeAny, { filter?: Record | Record[] | undefined; exclude?: Record | Record[] | undefined; frequency?: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | { cron: string; } | undefined; cache?: boolean | { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; } | undefined; batchSize?: number | undefined; filterQuery?: _backstage_filter_predicates.FilterPredicateExpression | { $all: _backstage_filter_predicates.FilterPredicate[]; } | { $any: _backstage_filter_predicates.FilterPredicate[]; } | { $not: _backstage_filter_predicates.FilterPredicate; } | _backstage_filter_predicates.UnknownFilterPredicateOperator | undefined; initialDelay?: string | { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | undefined; cacheFullResultsForEtags?: boolean | undefined; collects?: any; }, { filter?: Record | Record[] | undefined; exclude?: Record | Record[] | undefined; frequency?: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | { cron: string; } | undefined; cache?: boolean | { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; } | undefined; batchSize?: number | undefined; filterQuery?: _backstage_filter_predicates.FilterPredicate | undefined; initialDelay?: string | { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | undefined; cacheFullResultsForEtags?: boolean | undefined; collects?: any; }>, { filter?: Record | Record[] | undefined; exclude?: Record | Record[] | undefined; frequency?: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | { cron: string; } | undefined; cache?: boolean | { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; } | undefined; batchSize?: number | undefined; filterQuery?: _backstage_filter_predicates.FilterPredicateExpression | { $all: _backstage_filter_predicates.FilterPredicate[]; } | { $any: _backstage_filter_predicates.FilterPredicate[]; } | { $not: _backstage_filter_predicates.FilterPredicate; } | _backstage_filter_predicates.UnknownFilterPredicateOperator | undefined; initialDelay?: string | { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | undefined; cacheFullResultsForEtags?: boolean | undefined; collects?: any; }, { filter?: Record | Record[] | undefined; exclude?: Record | Record[] | undefined; frequency?: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | { cron: string; } | undefined; cache?: boolean | { duration: { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; }; } | undefined; batchSize?: number | undefined; filterQuery?: _backstage_filter_predicates.FilterPredicate | undefined; initialDelay?: string | { years?: number | undefined; months?: number | undefined; weeks?: number | undefined; days?: number | undefined; hours?: number | undefined; minutes?: number | undefined; seconds?: number | undefined; milliseconds?: number | undefined; } | undefined; cacheFullResultsForEtags?: boolean | undefined; collects?: any; }>, z.ZodObject<{ cacheFullResultsForEtags: z.ZodBoolean; }, "strict", z.ZodTypeAny, { cacheFullResultsForEtags: boolean; }, { cacheFullResultsForEtags: boolean; }>]>, z.ZodEffects, { url: string; }, { url: string; }>]>, "many">]>; export { type CodeSearchExtractorConfig, type CodeSearchQualifiers, type FileExistsDataSchema, type FileExistsExtractorConfig, type JsonPathDataSchema, type JsonYamlPathExtractorConfig, type RegexDataSchema, type RegexExtractorConfig, ScmFactCollectorSchema, scmSoundcheckModule as default };