Documentation
¶
Overview ¶
Package typescript is the TypeScript/TSX LanguageProvider. It parses with gotreesitter (pure Go, no CGO — see ADR 0002) and adapts its AST to the core's parser-agnostic syntax.Node (ADR 0003).
This phase (Prompt 1.1) implements identity + parsing only. The deterministic rules and surface mapping (AnalyzeSecurity/Practices/Surface) are stubs here; they arrive in Prompts 1.2/1.3.
Index ¶
- type Option
- type Provider
- func (*Provider) AnalyzePractices(providers.SourceFile) ([]findings.Finding, error)
- func (p *Provider) AnalyzeSecurity(src providers.SourceFile) ([]findings.Finding, error)
- func (p *Provider) AnalyzeSurface(src providers.SourceFile) ([]findings.SurfaceItem, error)
- func (*Provider) CoverageManifest() coverage.Manifest
- func (*Provider) DefaultPathCriticality() config.PathCriticality
- func (p *Provider) ExtractQueryFilters(src providers.SourceFile) ([]query.QueryFilter, error)
- func (*Provider) FileExtensions() []string
- func (*Provider) Frameworks() []string
- func (*Provider) Language() string
- func (*Provider) Parse(src providers.SourceFile) (syntax.Node, error)
- func (*Provider) ParseSchema(sources []providers.SourceFile) (*db.Schema, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Option ¶ added in v0.1.2
type Option func(*Provider)
Option configures a Provider at construction.
func WithAuthzHelpers ¶ added in v0.1.2
WithAuthzHelpers registers project-specific authorization helper names the provider recognizes in addition to the built-in set. The names come from the committed baseline (a human-approved decision), never from guessing.
type Provider ¶
type Provider struct {
// contains filtered or unexported fields
}
Provider implements providers.LanguageProvider for TypeScript and TSX. authzHelpers holds the project's registered custom authz helpers (in addition to the built-in NextAuth-style set), so surface recognition reflects per-project knowledge without the agent re-reasoning (ADR 0013). Empty for the stateless file-level surface tools; populated by the project-scan path from the baseline.
func New ¶
New returns a TypeScript language provider. With no options it recognizes only the built-in authz helpers (the stateless default).
func (*Provider) AnalyzePractices ¶
AnalyzePractices is a stub; the best-practice rules arrive in Prompt 1.2.
func (*Provider) AnalyzeSecurity ¶
AnalyzeSecurity runs the embedded deterministic security rules over src and returns the findings. The provider is a thin adapter: it loads/compiles the rules (once), parses the file, and hands both to the language-agnostic ruleengine — no detection logic lives here.
func (*Provider) AnalyzeSurface ¶
func (p *Provider) AnalyzeSurface(src providers.SourceFile) ([]findings.SurfaceItem, error)
AnalyzeSurface maps the auditable structural surface of a TypeScript file by running the provider's surface queries through the agnostic framework, which stamps the stable ids. Today only IDOR (Next App Router) is wired; authz and over-fetching are added as their queries land.
func (*Provider) CoverageManifest ¶
CoverageManifest declares, in plain prose, what codefit audits for TypeScript and how — the single source for the human-facing COVERAGE.md and the codefit-coverage tool (PRD §10, RF-07). The two categories that split between a deterministic rule and mapped surface (ADR 0004) appear in BOTH lists, each side describing exactly what it covers, so an evaluator reads a division of labor, not a gap.
CoverageManifest is a provider method (not yet on the shared LanguageProvider interface) — the interface convergence is deferred until the Go provider also emits this (ADR 0003).
The DB dimension's prose (schema-only, language-independent — ADR 0018) lives in core/dbcoverage and is appended here rather than duplicated: this file carries TypeScript/Next/Express/Fastify/NestJS prose only. The DB entries are appended at the END of each list, which is where they already sat before this composition existed, so the manifest's serialized output is unchanged.
func (*Provider) DefaultPathCriticality ¶
func (*Provider) DefaultPathCriticality() config.PathCriticality
func (*Provider) ExtractQueryFilters ¶ added in v0.2.4
func (p *Provider) ExtractQueryFilters(src providers.SourceFile) ([]query.QueryFilter, error)
ExtractQueryFilters extracts the neutral QueryFilter of every Prisma query call-site in src that FILTERS by one or more columns (has a WHERE). It is a pure AST fact — the code side of the code↔schema cross — reusing the same call-site machinery as N+1 and over-fetching (walkTS/isPrismaCall/prismaCallInfo). A call with no WHERE (a create, a bare findMany, an aggregate without filter) yields no filter: there is nothing to cross against an index.
func (*Provider) FileExtensions ¶
func (*Provider) Frameworks ¶
func (*Provider) Parse ¶
Parse parses a TypeScript (.ts) or TSX (.tsx) file and returns the root of the parser-agnostic AST. The concrete gotreesitter tree is hidden behind syntax.Node so the core never depends on the parser.
func (*Provider) ParseSchema ¶ added in v0.2.0
ParseSchema parses Prisma schema source(s) into the neutral db.Schema model. It is a hand-written, line-oriented parser over the Prisma DSL (not tree-sitter — ADR 0014), so it yields a Pos line for every element for free. It is TWO-PASS: a field's type can be a scalar, a model name (a virtual relation field — excluded as a column) or an enum name (a real column). Pass one collects the model and enum names; pass two resolves each field against those sets. Without it, an enum column (role Role) would be silently dropped as a relation.
Prisma view blocks are out of scope this slice and are skipped without error (Schema.Views stays empty; the SQL-DDL parser of slice 3 fills views).