import { z } from "zod"; /** * A blueprint defines the shape and behavior of a Grove site. * * V1 ships three fixed blueprints. They are not extensible — no custom * blueprint API in V1. */ export declare const blueprintSchema: z.ZodEnum<{ "project-directory": "project-directory"; "resource-hub": "resource-hub"; "ecosystem-map": "ecosystem-map"; }>; export type Blueprint = z.infer; /** * Each blueprint is bound to a single resource kind. Records are * discriminated by `kind`, which must match the blueprint of the site * that owns them. */ export declare const resourceKindSchema: z.ZodEnum<{ project: "project"; resource: "resource"; entity: "entity"; }>; export type ResourceKind = z.infer; export declare const blueprintKind: Record; export declare const healthStatusSchema: z.ZodEnum<{ active: "active"; mature: "mature"; stale: "stale"; inactive: "inactive"; archived: "archived"; unknown: "unknown"; historical: "historical"; needs_review: "needs_review"; quiet: "quiet"; unavailable: "unavailable"; }>; export declare const decisionVisibilitySchema: z.ZodEnum<{ hide: "hide"; remove: "remove"; historical: "historical"; needs_review: "needs_review"; highlight: "highlight"; keep: "keep"; }>; export type DecisionVisibility = z.infer; export declare const healthTierSchema: z.ZodEnum<{ curated: "curated"; listed: "listed"; experimental: "experimental"; hidden: "hidden"; }>; export declare const projectTypeSchema: z.ZodEnum<{ historical: "historical"; "real-app": "real-app"; production: "production"; reference: "reference"; library: "library"; tool: "tool"; demo: "demo"; template: "template"; }>; export declare const resourceTypeSchema: z.ZodEnum<{ other: "other"; tool: "tool"; guide: "guide"; comparison: "comparison"; link: "link"; explainer: "explainer"; video: "video"; article: "article"; course: "course"; book: "book"; podcast: "podcast"; }>; export declare const entityTypeSchema: z.ZodEnum<{ other: "other"; company: "company"; organization: "organization"; community: "community"; school: "school"; university: "university"; "research-lab": "research-lab"; agency: "agency"; service: "service"; product: "product"; person: "person"; }>; export declare const appLabelSchema: z.ZodEnum<{ mature: "mature"; new: "new"; hot: "hot"; featured: "featured"; }>; export declare const scoreSchema: z.ZodObject<{ activity: z.ZodOptional; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>; export declare const linksSchema: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; export declare const githubLicenseSchema: z.ZodOptional>; name: z.ZodOptional>; spdx_id: z.ZodOptional>; url: z.ZodOptional>; }, z.core.$loose>>>; export declare const githubRepositorySchema: z.ZodObject<{ id: z.ZodOptional; node_id: z.ZodOptional; name: z.ZodOptional; full_name: z.ZodOptional; html_url: z.ZodOptional; clone_url: z.ZodOptional; ssh_url: z.ZodOptional; homepage: z.ZodOptional>; description: z.ZodOptional>; fork: z.ZodOptional; archived: z.ZodOptional; disabled: z.ZodOptional; private: z.ZodOptional; is_template: z.ZodOptional; visibility: z.ZodOptional; default_branch: z.ZodOptional; language: z.ZodOptional>; topics: z.ZodOptional>; license: z.ZodOptional>; name: z.ZodOptional>; spdx_id: z.ZodOptional>; url: z.ZodOptional>; }, z.core.$loose>>>; stargazers_count: z.ZodOptional; watchers_count: z.ZodOptional; forks_count: z.ZodOptional; open_issues_count: z.ZodOptional; subscribers_count: z.ZodOptional; size: z.ZodOptional; created_at: z.ZodOptional>; updated_at: z.ZodOptional>; pushed_at: z.ZodOptional>; }, z.core.$loose>; export declare const githubMetadataSchema: z.ZodObject<{ fullName: z.ZodOptional; stars: z.ZodDefault; forks: z.ZodDefault; openIssues: z.ZodOptional; watchers: z.ZodOptional; archived: z.ZodDefault; disabled: z.ZodOptional; private: z.ZodOptional; fork: z.ZodOptional; visibility: z.ZodOptional; pushedAt: z.ZodOptional>; updatedAt: z.ZodOptional>; createdAt: z.ZodOptional>; latestReleaseAt: z.ZodOptional>; license: z.ZodOptional>; topics: z.ZodDefault>; language: z.ZodOptional>; defaultBranch: z.ZodOptional; languages: z.ZodOptional>; contributorsKnown: z.ZodOptional; totalCommitsKnown: z.ZodOptional; openPullRequests: z.ZodOptional; description: z.ZodOptional>; homepage: z.ZodOptional>; htmlUrl: z.ZodOptional; size: z.ZodOptional; files: z.ZodOptional>; monthlyCommits: z.ZodOptional]>>>; }, z.core.$strip>; export declare const healthBlockSchema: z.ZodObject<{ status: z.ZodDefault>; maturity: z.ZodDefault>; tier: z.ZodDefault>; visibility: z.ZodDefault>; cleanupCandidate: z.ZodDefault; staleReason: z.ZodOptional>; confidence: z.ZodDefault>; reasons: z.ZodDefault>; }, z.core.$strip>; export declare const healthEntrySchema: z.ZodObject<{ id: z.ZodString; github: z.ZodOptional; stars: z.ZodDefault; forks: z.ZodDefault; openIssues: z.ZodOptional; watchers: z.ZodOptional; archived: z.ZodDefault; disabled: z.ZodOptional; private: z.ZodOptional; fork: z.ZodOptional; visibility: z.ZodOptional; pushedAt: z.ZodOptional>; updatedAt: z.ZodOptional>; createdAt: z.ZodOptional>; latestReleaseAt: z.ZodOptional>; license: z.ZodOptional>; topics: z.ZodDefault>; language: z.ZodOptional>; defaultBranch: z.ZodOptional; languages: z.ZodOptional>; contributorsKnown: z.ZodOptional; totalCommitsKnown: z.ZodOptional; openPullRequests: z.ZodOptional; description: z.ZodOptional>; homepage: z.ZodOptional>; htmlUrl: z.ZodOptional; size: z.ZodOptional; files: z.ZodOptional>; monthlyCommits: z.ZodOptional]>>>; }, z.core.$strip>>; health: z.ZodObject<{ status: z.ZodDefault>; maturity: z.ZodDefault>; tier: z.ZodDefault>; visibility: z.ZodDefault>; cleanupCandidate: z.ZodDefault; staleReason: z.ZodOptional>; confidence: z.ZodDefault>; reasons: z.ZodDefault>; }, z.core.$strip>; }, z.core.$strip>; export declare const healthFileSchema: z.ZodUnion; stars: z.ZodDefault; forks: z.ZodDefault; openIssues: z.ZodOptional; watchers: z.ZodOptional; archived: z.ZodDefault; disabled: z.ZodOptional; private: z.ZodOptional; fork: z.ZodOptional; visibility: z.ZodOptional; pushedAt: z.ZodOptional>; updatedAt: z.ZodOptional>; createdAt: z.ZodOptional>; latestReleaseAt: z.ZodOptional>; license: z.ZodOptional>; topics: z.ZodDefault>; language: z.ZodOptional>; defaultBranch: z.ZodOptional; languages: z.ZodOptional>; contributorsKnown: z.ZodOptional; totalCommitsKnown: z.ZodOptional; openPullRequests: z.ZodOptional; description: z.ZodOptional>; homepage: z.ZodOptional>; htmlUrl: z.ZodOptional; size: z.ZodOptional; files: z.ZodOptional>; monthlyCommits: z.ZodOptional]>>>; }, z.core.$strip>>; health: z.ZodObject<{ status: z.ZodDefault>; maturity: z.ZodDefault>; tier: z.ZodDefault>; visibility: z.ZodDefault>; cleanupCandidate: z.ZodDefault; staleReason: z.ZodOptional>; confidence: z.ZodDefault>; reasons: z.ZodDefault>; }, z.core.$strip>; }, z.core.$strip>>, z.ZodObject<{ health: z.ZodArray; stars: z.ZodDefault; forks: z.ZodDefault; openIssues: z.ZodOptional; watchers: z.ZodOptional; archived: z.ZodDefault; disabled: z.ZodOptional; private: z.ZodOptional; fork: z.ZodOptional; visibility: z.ZodOptional; pushedAt: z.ZodOptional>; updatedAt: z.ZodOptional>; createdAt: z.ZodOptional>; latestReleaseAt: z.ZodOptional>; license: z.ZodOptional>; topics: z.ZodDefault>; language: z.ZodOptional>; defaultBranch: z.ZodOptional; languages: z.ZodOptional>; contributorsKnown: z.ZodOptional; totalCommitsKnown: z.ZodOptional; openPullRequests: z.ZodOptional; description: z.ZodOptional>; homepage: z.ZodOptional>; htmlUrl: z.ZodOptional; size: z.ZodOptional; files: z.ZodOptional>; monthlyCommits: z.ZodOptional]>>>; }, z.core.$strip>>; health: z.ZodObject<{ status: z.ZodDefault>; maturity: z.ZodDefault>; tier: z.ZodDefault>; visibility: z.ZodDefault>; cleanupCandidate: z.ZodDefault; staleReason: z.ZodOptional>; confidence: z.ZodDefault>; reasons: z.ZodDefault>; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>]>; export declare const decisionSchema: z.ZodObject<{ id: z.ZodString; decision: z.ZodObject<{ visibility: z.ZodEnum<{ hide: "hide"; remove: "remove"; historical: "historical"; needs_review: "needs_review"; highlight: "highlight"; keep: "keep"; }>; reason: z.ZodString; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>; export declare const decisionsFileSchema: z.ZodUnion; reason: z.ZodString; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>, z.ZodObject<{ decisions: z.ZodArray; reason: z.ZodString; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; }, z.core.$strip>; }, z.core.$strip>>; }, z.core.$strip>]>; export declare const overrideSchema: z.ZodObject<{ id: z.ZodString; patch: z.ZodRecord; }, z.core.$strip>; export declare const overridesFileSchema: z.ZodUnion; }, z.core.$strip>>, z.ZodObject<{ overrides: z.ZodArray; }, z.core.$strip>>; }, z.core.$strip>]>; export declare const projectRecordSchema: z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"project">; name: z.ZodString; projectType: z.ZodOptional>; stack: z.ZodOptional; stacks: z.ZodDefault>; platforms: z.ZodDefault>; licenses: z.ZodDefault>; difficulty: z.ZodOptional>; codebaseSize: z.ZodOptional>; repoUrl: z.ZodOptional; logoUrl: z.ZodOptional; screenshots: z.ZodDefault; width: z.ZodOptional; height: z.ZodOptional; }, z.core.$strip>>>; bestFor: z.ZodDefault>; whyListed: z.ZodDefault>; caveats: z.ZodDefault>; distribution: z.ZodDefault; label: z.ZodOptional; url: z.ZodString; verified: z.ZodOptional; notes: z.ZodOptional; }, z.core.$loose>>>; }, z.core.$strip>>; github: z.ZodOptional; node_id: z.ZodOptional; name: z.ZodOptional; full_name: z.ZodOptional; html_url: z.ZodOptional; clone_url: z.ZodOptional; ssh_url: z.ZodOptional; homepage: z.ZodOptional>; description: z.ZodOptional>; fork: z.ZodOptional; archived: z.ZodOptional; disabled: z.ZodOptional; private: z.ZodOptional; is_template: z.ZodOptional; visibility: z.ZodOptional; default_branch: z.ZodOptional; language: z.ZodOptional>; topics: z.ZodOptional>; license: z.ZodOptional>; name: z.ZodOptional>; spdx_id: z.ZodOptional>; url: z.ZodOptional>; }, z.core.$loose>>>; stargazers_count: z.ZodOptional; watchers_count: z.ZodOptional; forks_count: z.ZodOptional; open_issues_count: z.ZodOptional; subscribers_count: z.ZodOptional; size: z.ZodOptional; created_at: z.ZodOptional>; updated_at: z.ZodOptional>; pushed_at: z.ZodOptional>; }, z.core.$loose>>; languages: z.ZodOptional>; latestRelease: z.ZodOptional>>; activity: z.ZodOptional>; files: z.ZodOptional>; labels: z.ZodOptional>>; sync: z.ZodOptional>; }, z.core.$loose>>; health: z.ZodOptional>; maturity: z.ZodDefault>; tier: z.ZodDefault>; visibility: z.ZodDefault>; cleanupCandidate: z.ZodDefault; staleReason: z.ZodOptional>; confidence: z.ZodDefault>; reasons: z.ZodDefault>; }, z.core.$strip>>; }, z.core.$strip>; export type ProjectRecord = z.infer; export declare const resourceRecordSchema: z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"resource">; title: z.ZodString; type: z.ZodEnum<{ other: "other"; tool: "tool"; guide: "guide"; comparison: "comparison"; link: "link"; explainer: "explainer"; video: "video"; article: "article"; course: "course"; book: "book"; podcast: "podcast"; }>; topic: z.ZodString; related: z.ZodDefault>; publishedAt: z.ZodOptional; author: z.ZodOptional; }, z.core.$strip>; export type ResourceRecord = z.infer; export declare const entityRecordSchema: z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"entity">; name: z.ZodString; type: z.ZodEnum<{ other: "other"; company: "company"; organization: "organization"; community: "community"; school: "school"; university: "university"; "research-lab": "research-lab"; agency: "agency"; service: "service"; product: "product"; person: "person"; }>; founded: z.ZodOptional; location: z.ZodOptional; members: z.ZodOptional; parent: z.ZodOptional; }, z.core.$strip>; export type EntityRecord = z.infer; export declare const resourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"project">; name: z.ZodString; projectType: z.ZodOptional>; stack: z.ZodOptional; stacks: z.ZodDefault>; platforms: z.ZodDefault>; licenses: z.ZodDefault>; difficulty: z.ZodOptional>; codebaseSize: z.ZodOptional>; repoUrl: z.ZodOptional; logoUrl: z.ZodOptional; screenshots: z.ZodDefault; width: z.ZodOptional; height: z.ZodOptional; }, z.core.$strip>>>; bestFor: z.ZodDefault>; whyListed: z.ZodDefault>; caveats: z.ZodDefault>; distribution: z.ZodDefault; label: z.ZodOptional; url: z.ZodString; verified: z.ZodOptional; notes: z.ZodOptional; }, z.core.$loose>>>; }, z.core.$strip>>; github: z.ZodOptional; node_id: z.ZodOptional; name: z.ZodOptional; full_name: z.ZodOptional; html_url: z.ZodOptional; clone_url: z.ZodOptional; ssh_url: z.ZodOptional; homepage: z.ZodOptional>; description: z.ZodOptional>; fork: z.ZodOptional; archived: z.ZodOptional; disabled: z.ZodOptional; private: z.ZodOptional; is_template: z.ZodOptional; visibility: z.ZodOptional; default_branch: z.ZodOptional; language: z.ZodOptional>; topics: z.ZodOptional>; license: z.ZodOptional>; name: z.ZodOptional>; spdx_id: z.ZodOptional>; url: z.ZodOptional>; }, z.core.$loose>>>; stargazers_count: z.ZodOptional; watchers_count: z.ZodOptional; forks_count: z.ZodOptional; open_issues_count: z.ZodOptional; subscribers_count: z.ZodOptional; size: z.ZodOptional; created_at: z.ZodOptional>; updated_at: z.ZodOptional>; pushed_at: z.ZodOptional>; }, z.core.$loose>>; languages: z.ZodOptional>; latestRelease: z.ZodOptional>>; activity: z.ZodOptional>; files: z.ZodOptional>; labels: z.ZodOptional>>; sync: z.ZodOptional>; }, z.core.$loose>>; health: z.ZodOptional>; maturity: z.ZodDefault>; tier: z.ZodDefault>; visibility: z.ZodDefault>; cleanupCandidate: z.ZodDefault; staleReason: z.ZodOptional>; confidence: z.ZodDefault>; reasons: z.ZodDefault>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"resource">; title: z.ZodString; type: z.ZodEnum<{ other: "other"; tool: "tool"; guide: "guide"; comparison: "comparison"; link: "link"; explainer: "explainer"; video: "video"; article: "article"; course: "course"; book: "book"; podcast: "podcast"; }>; topic: z.ZodString; related: z.ZodDefault>; publishedAt: z.ZodOptional; author: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"entity">; name: z.ZodString; type: z.ZodEnum<{ other: "other"; company: "company"; organization: "organization"; community: "community"; school: "school"; university: "university"; "research-lab": "research-lab"; agency: "agency"; service: "service"; product: "product"; person: "person"; }>; founded: z.ZodOptional; location: z.ZodOptional; members: z.ZodOptional; parent: z.ZodOptional; }, z.core.$strip>], "kind">; export type Resource = z.infer; export declare const recordsFileSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"project">; name: z.ZodString; projectType: z.ZodOptional>; stack: z.ZodOptional; stacks: z.ZodDefault>; platforms: z.ZodDefault>; licenses: z.ZodDefault>; difficulty: z.ZodOptional>; codebaseSize: z.ZodOptional>; repoUrl: z.ZodOptional; logoUrl: z.ZodOptional; screenshots: z.ZodDefault; width: z.ZodOptional; height: z.ZodOptional; }, z.core.$strip>>>; bestFor: z.ZodDefault>; whyListed: z.ZodDefault>; caveats: z.ZodDefault>; distribution: z.ZodDefault; label: z.ZodOptional; url: z.ZodString; verified: z.ZodOptional; notes: z.ZodOptional; }, z.core.$loose>>>; }, z.core.$strip>>; github: z.ZodOptional; node_id: z.ZodOptional; name: z.ZodOptional; full_name: z.ZodOptional; html_url: z.ZodOptional; clone_url: z.ZodOptional; ssh_url: z.ZodOptional; homepage: z.ZodOptional>; description: z.ZodOptional>; fork: z.ZodOptional; archived: z.ZodOptional; disabled: z.ZodOptional; private: z.ZodOptional; is_template: z.ZodOptional; visibility: z.ZodOptional; default_branch: z.ZodOptional; language: z.ZodOptional>; topics: z.ZodOptional>; license: z.ZodOptional>; name: z.ZodOptional>; spdx_id: z.ZodOptional>; url: z.ZodOptional>; }, z.core.$loose>>>; stargazers_count: z.ZodOptional; watchers_count: z.ZodOptional; forks_count: z.ZodOptional; open_issues_count: z.ZodOptional; subscribers_count: z.ZodOptional; size: z.ZodOptional; created_at: z.ZodOptional>; updated_at: z.ZodOptional>; pushed_at: z.ZodOptional>; }, z.core.$loose>>; languages: z.ZodOptional>; latestRelease: z.ZodOptional>>; activity: z.ZodOptional>; files: z.ZodOptional>; labels: z.ZodOptional>>; sync: z.ZodOptional>; }, z.core.$loose>>; health: z.ZodOptional>; maturity: z.ZodDefault>; tier: z.ZodDefault>; visibility: z.ZodDefault>; cleanupCandidate: z.ZodDefault; staleReason: z.ZodOptional>; confidence: z.ZodDefault>; reasons: z.ZodDefault>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"resource">; title: z.ZodString; type: z.ZodEnum<{ other: "other"; tool: "tool"; guide: "guide"; comparison: "comparison"; link: "link"; explainer: "explainer"; video: "video"; article: "article"; course: "course"; book: "book"; podcast: "podcast"; }>; topic: z.ZodString; related: z.ZodDefault>; publishedAt: z.ZodOptional; author: z.ZodOptional; }, z.core.$strip>, z.ZodObject<{ slug: z.ZodString; description: z.ZodDefault; summary: z.ZodOptional; sourceDescription: z.ZodOptional; category: z.ZodDefault; tags: z.ZodDefault>; links: z.ZodDefault; website: z.ZodOptional; docs: z.ZodOptional; source: z.ZodOptional; }, z.core.$catchall>>; content: z.ZodOptional; source: z.ZodDefault>; file: z.ZodOptional; url: z.ZodOptional; provider: z.ZodOptional; owner: z.ZodOptional; repo: z.ZodOptional; }, z.core.$strip>>; curation: z.ZodDefault; reviewedBy: z.ZodOptional; reviewedAt: z.ZodOptional; notes: z.ZodOptional; labels: z.ZodDefault>>; lenses: z.ZodDefault>; }, z.core.$strip>>; scores: z.ZodDefault; maturity: z.ZodOptional; learning: z.ZodOptional; contribution: z.ZodOptional; docs: z.ZodOptional; overall: z.ZodOptional; }, z.core.$strip>>; visibility: z.ZodDefault>; kind: z.ZodLiteral<"entity">; name: z.ZodString; type: z.ZodEnum<{ other: "other"; company: "company"; organization: "organization"; community: "community"; school: "school"; university: "university"; "research-lab": "research-lab"; agency: "agency"; service: "service"; product: "product"; person: "person"; }>; founded: z.ZodOptional; location: z.ZodOptional; members: z.ZodOptional; parent: z.ZodOptional; }, z.core.$strip>], "kind">; export type RecordsFile = z.infer; export declare const navItemSchema: z.ZodObject<{ label: z.ZodString; href: z.ZodString; }, z.core.$strip>; export declare const footerNavItemSchema: z.ZodObject<{ label: z.ZodString; href: z.ZodString; external: z.ZodOptional; }, z.core.$strip>; export declare const footerColumnSchema: z.ZodObject<{ heading: z.ZodString; items: z.ZodDefault; }, z.core.$strip>>>; }, z.core.$strip>; export declare const footerSchema: z.ZodDefault; }, z.core.$strip>>>; }, z.core.$strip>>>; copyright: z.ZodOptional; license: z.ZodOptional; poweredBy: z.ZodDefault; }, z.core.$strip>>; export declare const submissionSchema: z.ZodDefault; title: z.ZodOptional; description: z.ZodOptional; good: z.ZodDefault>; avoid: z.ZodDefault>; }, z.core.$strip>>; export declare const githubIntegrationSchema: z.ZodUnion; contributors: z.ZodDefault; health: z.ZodDefault; }, z.core.$strip>]>; /** Resolved per-feature GitHub integration flags. */ export interface GithubIntegrationFlags { metadata: boolean; contributors: boolean; health: boolean; } /** * Normalize the `integrations.github` config value — either a blanket * boolean or a partial per-feature object — into explicit flags so * callers (`grove sync`, CI workflows) can gate each feature. */ export declare function normalizeGithubIntegration(value: z.infer | undefined): GithubIntegrationFlags; export declare const themeSchema: z.ZodObject<{ primaryColor: z.ZodOptional; radius: z.ZodDefault>; density: z.ZodDefault>; containerWidth: z.ZodDefault; }, z.core.$strip>; export declare const auditSchema: z.ZodObject<{ baseUrl: z.ZodOptional; pages: z.ZodArray; label: z.ZodString; sample: z.ZodOptional>; }, z.core.$strip>>; }, z.core.$strip>; /** * README preamble configuration. Every field is optional; unset fields * fall back to the matching site.* field, or to a sensible default. * * `intro` is rendered as raw markdown between the H1 and the * `## Contents` TOC, so curators can write a hand-rolled lead section * (sub-headings, paragraphs, lists) without editing the generated * README on every regeneration. */ export declare const readmeConfigSchema: z.ZodObject<{ title: z.ZodOptional; tagline: z.ZodOptional; description: z.ZodOptional; url: z.ZodOptional; browseLabel: z.ZodOptional; intro: z.ZodOptional; showBadge: z.ZodDefault; showToc: z.ZodDefault; showBrowseLink: z.ZodDefault; }, z.core.$strip>; export declare const groveConfigSchema: z.ZodObject<{ blueprint: z.ZodDefault>; site: z.ZodObject<{ name: z.ZodString; tagline: z.ZodDefault; description: z.ZodOptional; url: z.ZodOptional; repoUrl: z.ZodOptional; logo: z.ZodOptional; favicon: z.ZodOptional; locale: z.ZodDefault; twitter: z.ZodOptional; }, z.core.$strip>; analytics: z.ZodDefault; }, z.core.$strip>>; nav: z.ZodDefault>>; footer: z.ZodDefault; }, z.core.$strip>>>; }, z.core.$strip>>>; copyright: z.ZodOptional; license: z.ZodOptional; poweredBy: z.ZodDefault; }, z.core.$strip>>; submission: z.ZodDefault; title: z.ZodOptional; description: z.ZodOptional; good: z.ZodDefault>; avoid: z.ZodDefault>; }, z.core.$strip>>; routes: z.ZodDefault; item: z.ZodOptional; }, z.core.$strip>>; labels: z.ZodDefault; plural: z.ZodOptional; }, z.core.$strip>>; browse: z.ZodPrefault>>; }, z.core.$strip>>; facets: z.ZodOptional & z.ZodType>; integrations: z.ZodDefault; contributors: z.ZodDefault; health: z.ZodDefault; }, z.core.$strip>]>>; }, z.core.$strip>>; theme: z.ZodPrefault; radius: z.ZodDefault>; density: z.ZodDefault>; containerWidth: z.ZodDefault; }, z.core.$strip>>; contributors: z.ZodDefault; }, z.core.$strip>>; audit: z.ZodOptional; pages: z.ZodArray; label: z.ZodString; sample: z.ZodOptional>; }, z.core.$strip>>; }, z.core.$strip>>; readme: z.ZodOptional; tagline: z.ZodOptional; description: z.ZodOptional; url: z.ZodOptional; browseLabel: z.ZodOptional; intro: z.ZodOptional; showBadge: z.ZodDefault; showToc: z.ZodDefault; showBrowseLink: z.ZodDefault; }, z.core.$strip>>; paths: z.ZodDefault; contentDir: z.ZodDefault; recordsDir: z.ZodDefault; pagesDir: z.ZodDefault; bodiesDir: z.ZodDefault; publicDir: z.ZodDefault; taxonomyDir: z.ZodDefault; generatedDir: z.ZodDefault; health: z.ZodDefault; decisions: z.ZodDefault; overrides: z.ZodDefault; }, z.core.$strip>>; }, z.core.$strip>; export type GroveConfig = z.infer; export type GroveConfigInput = z.input; export type NavItem = z.infer; export type FooterConfig = z.infer; export type SubmissionConfig = z.infer; export type GithubIntegration = z.infer; export type Theme = z.infer; export type GithubMetadata = z.infer; export type GithubRepository = z.infer; export type HealthStatus = z.infer; export type HealthTier = z.infer; export type HealthFile = z.infer; export type HealthEntry = z.infer; export type DecisionsFile = z.infer; export type Decision = z.infer; export type OverridesFile = z.infer; export type Override = z.infer; export type ProjectType = z.infer; export type ResourceType = z.infer; export type EntityType = z.infer; export type AppLabel = z.infer; export type Score = z.infer; export type Links = z.infer; export type ReadmeConfig = z.infer; export declare function unwrapHealth(value: HealthFile): HealthEntry[]; export declare function unwrapDecisions(value: DecisionsFile): Decision[]; export declare function unwrapOverrides(value: OverridesFile): Override[]; /** * Parse a single record YAML mapping into a typed Resource. The * `kind` field on the YAML selects which blueprint schema to apply. */ export declare function parseRecordYaml(text: string, fileSlug: string): Record; export declare function stringifyRecordYaml(record: Record): string; export declare function getOwnerRepoFromUrl(repoUrl: string | undefined | null): { owner: string; repo: string; } | null; export interface IndexBase { slug: string; kind: ResourceKind; category: string; tags: string[]; links: Links; description: string; /** Open Apps-written summary, surfaced as the lead paragraph on the * detail page above the original (GitHub-sourced) description. */ summary?: string | undefined; /** The original GitHub description, preserved separately so curators * can write their own `summary` without overwriting it. */ sourceDescription?: string | undefined; content?: string | undefined; curation: ProjectRecord["curation"]; licenses: string[]; } export interface IndexGithubSummary { fullName: string | undefined; stars: number; forks: number; openIssues: number; language: string | null; pushedAt: string | null; archived: boolean; license: string | null; topics: string[]; } export interface IndexProjectRecord extends IndexBase { kind: "project"; name: string; stack: ProjectRecord["stack"]; stacks: string[]; platforms: string[]; licenses: string[]; projectType: ProjectRecord["projectType"]; repoUrl: ProjectRecord["repoUrl"]; logoUrl: ProjectRecord["logoUrl"]; screenshots: ProjectRecord["screenshots"]; difficulty: ProjectRecord["difficulty"]; codebaseSize: ProjectRecord["codebaseSize"]; bestFor: string[]; whyListed: string[]; caveats: string[]; health: ProjectRecord["health"]; /** Effective visibility — decisions.yml overrides win over health. */ visibility: DecisionVisibility; github: IndexGithubSummary | undefined; } export interface IndexResourceRecord extends IndexBase { kind: "resource"; title: string; type: ResourceRecord["type"]; topic: string; related: string[]; publishedAt: ResourceRecord["publishedAt"]; author: ResourceRecord["author"]; /** Effective visibility — decisions.yml overrides win over the record default. */ visibility: DecisionVisibility; } export interface IndexEntityRecord extends IndexBase { kind: "entity"; name: string; type: EntityRecord["type"]; founded: EntityRecord["founded"]; location: EntityRecord["location"]; members: EntityRecord["members"]; parent: EntityRecord["parent"]; /** Effective visibility — decisions.yml overrides win over the record default. */ visibility: DecisionVisibility; } export type IndexRecord = IndexProjectRecord | IndexResourceRecord | IndexEntityRecord; export declare function isIndexProject(r: IndexRecord): r is IndexProjectRecord; export declare function isIndexResource(r: IndexRecord): r is IndexResourceRecord; export declare function isIndexEntity(r: IndexRecord): r is IndexEntityRecord; /** * Project a Resource to a stable, search-index-friendly summary * object. Strips out blueprint-specific heavy fields and leaves * only what the public list/detail UIs need. * * The return type is the discriminated `IndexRecord` union. The * function body uses a single `kind` literal cast per branch * because the `record.kind` is a `ResourceKind` (the union of * all three) and TypeScript cannot narrow the literal from a * runtime check alone. The casts are safe because each branch * is gated on the literal string compare. */ export declare function toIndexRecord(record: Resource): IndexRecord; //# sourceMappingURL=schema.d.ts.map