verimu 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generate-sbom.ts","../src/sbom/shared.ts","../src/generate-spdx.ts","../src/generate-swid.ts","../src/scan.ts","../src/scanners/npm/npm-scanner.ts","../src/core/errors.ts","../src/scanners/nuget/nuget-scanner.ts","../src/scanners/cargo/cargo-scanner.ts","../src/scanners/pip/pip-scanner.ts","../src/scanners/maven/maven-scanner.ts","../src/scanners/go/go-scanner.ts","../src/scanners/ruby/ruby-scanner.ts","../src/scanners/composer/composer-scanner.ts","../src/scanners/yarn/yarn-scanner.ts","../src/scanners/pnpm/pnpm-scanner.ts","../src/scanners/deno/deno-scanner.ts","../src/scanners/poetry/poetry-scanner.ts","../src/scanners/uv/uv-scanner.ts","../src/scanners/registry.ts","../src/sbom/cyclonedx.ts","../src/sbom/spdx.ts","../src/sbom/swid.ts","../src/sbom/artifacts.ts","../src/cve/osv.ts","../src/cve/aggregator.ts","../src/reporters/console.ts","../src/api/client.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport type {\n GenerateSbomInput,\n GenerateSbomResult,\n} from './core/types.js';\nimport {\n DEFAULT_PROJECT_VERSION,\n VERIMU_TOOL_DESCRIPTION,\n VERIMU_TOOL_NAME,\n VERIMU_TOOL_WEBSITE,\n buildPurl,\n normalizeDependencies,\n} from './sbom/shared.js';\n\n/**\n * Generates an NTIA-compliant CycloneDX 1.7 SBOM from structured dependency data.\n *\n * This is a **pure function** — no filesystem access, no network calls, no side effects.\n * It takes a project name, version, and list of dependencies, and returns a complete\n * CycloneDX 1.7 JSON SBOM that passes NTIA minimum-element validation.\n *\n * @example\n * ```ts\n * import { generateSbom } from 'verimu';\n *\n * const result = generateSbom({\n * projectName: 'my-app',\n * projectVersion: '1.0.0',\n * dependencies: [\n * { name: 'express', version: '4.18.2', ecosystem: 'npm' },\n * { name: '@types/node', version: '20.11.5', ecosystem: 'npm', direct: false },\n * ],\n * });\n *\n * console.log(result.componentCount); // 2\n * console.log(result.content); // formatted JSON string\n * ```\n */\nexport function generateSbom(input: GenerateSbomInput): GenerateSbomResult {\n const {\n projectName,\n projectVersion = DEFAULT_PROJECT_VERSION,\n dependencies,\n } = input;\n\n const timestamp = new Date().toISOString();\n const resolvedDeps = normalizeDependencies(dependencies);\n\n const rootPurl = buildPurl(projectName, projectVersion, 'npm');\n\n const sbom = {\n $schema: 'http://cyclonedx.org/schema/bom-1.7.schema.json',\n bomFormat: 'CycloneDX',\n specVersion: '1.7',\n serialNumber: `urn:uuid:${randomUUID()}`,\n version: 1,\n metadata: {\n timestamp,\n tools: {\n components: [\n {\n type: 'application',\n name: VERIMU_TOOL_NAME,\n version: '0.0.1',\n description: VERIMU_TOOL_DESCRIPTION,\n supplier: { name: 'Verimu' },\n externalReferences: [\n { type: 'website', url: VERIMU_TOOL_WEBSITE },\n ],\n },\n ],\n },\n supplier: { name: projectName },\n component: {\n type: 'application',\n name: projectName,\n version: projectVersion,\n 'bom-ref': rootPurl,\n supplier: { name: projectName },\n },\n },\n components: resolvedDeps.map((dep) => ({\n type: 'library',\n name: dep.name,\n version: dep.version,\n purl: dep.purl,\n 'bom-ref': dep.purl,\n scope: dep.direct ? 'required' : 'optional',\n supplier: { name: dep.supplierName },\n })),\n dependencies: [\n {\n ref: rootPurl,\n dependsOn: resolvedDeps.map((d) => d.purl),\n },\n ],\n };\n\n const content = JSON.stringify(sbom, null, 2);\n\n return {\n sbom,\n content,\n componentCount: resolvedDeps.length,\n specVersion: '1.7',\n generatedAt: timestamp,\n };\n}\n","import type { Ecosystem } from '../core/types.js';\n\nexport const VERIMU_TOOL_NAME = 'verimu';\nexport const VERIMU_TOOL_WEBSITE = 'https://verimu.com';\nexport const VERIMU_TOOL_DESCRIPTION = 'Verimu CRA Compliance Scanner';\nexport const DEFAULT_TOOL_VERSION = '0.1.0';\nexport const DEFAULT_PROJECT_VERSION = '0.0.0';\nexport const DEFAULT_SWID_VERSION = '0.0.0';\n\ntype DependencyLike = {\n name: string;\n version: string;\n ecosystem: Ecosystem;\n direct?: boolean;\n purl?: string;\n};\n\nexport interface NormalizedDependency {\n name: string;\n version: string;\n ecosystem: Ecosystem;\n direct: boolean;\n purl: string;\n supplierName: string;\n}\n\nconst PURL_TYPE_MAP: Record<Ecosystem, string> = {\n npm: 'npm',\n nuget: 'nuget',\n cargo: 'cargo',\n maven: 'maven',\n pip: 'pypi',\n poetry: 'pypi',\n uv: 'pypi',\n go: 'golang',\n ruby: 'gem',\n composer: 'composer',\n deno: 'deno',\n};\n\n/**\n * Builds a Package URL (purl) per the purl spec.\n *\n * For npm scoped packages, the @ prefix is percent-encoded as %40:\n * @types/node@20.11.5 → pkg:npm/%40types/node@20.11.5\n */\nexport function buildPurl(name: string, version: string, ecosystem: Ecosystem): string {\n const type = PURL_TYPE_MAP[ecosystem] || ecosystem;\n\n if (ecosystem === 'npm' && name.startsWith('@')) {\n return `pkg:${type}/%40${name.slice(1)}@${version}`;\n }\n\n return `pkg:${type}/${name}@${version}`;\n}\n\n/**\n * Derives supplier name from a package name.\n * Scoped packages: \"@vue/reactivity\" → \"@vue\"\n * Unscoped packages: \"express\" → \"express\"\n */\nexport function deriveSupplierName(packageName: string): string {\n if (packageName.startsWith('@')) {\n return packageName.split('/')[0];\n }\n return packageName;\n}\n\n/** Extracts project name from a file system path */\nexport function extractProjectName(projectPath: string): string {\n const parts = projectPath.replace(/\\\\/g, '/').split('/');\n return parts[parts.length - 1] || 'unknown-project';\n}\n\n/** Normalizes dependencies so all generators work from the same shape */\nexport function normalizeDependencies(dependencies: DependencyLike[]): NormalizedDependency[] {\n return dependencies.map((dep) => ({\n name: dep.name,\n version: dep.version,\n ecosystem: dep.ecosystem,\n direct: dep.direct ?? true,\n purl: dep.purl ?? buildPurl(dep.name, dep.version, dep.ecosystem),\n supplierName: deriveSupplierName(dep.name),\n }));\n}\n\n","import { randomUUID } from 'crypto';\nimport type {\n GenerateSbomInput,\n GenerateSpdxSbomResult,\n} from './core/types.js';\nimport {\n DEFAULT_PROJECT_VERSION,\n VERIMU_TOOL_NAME,\n normalizeDependencies,\n} from './sbom/shared.js';\n\nconst SPDX_VERSION = '2.3';\n\n/**\n * Generates an SPDX 2.3 JSON document from structured dependency data.\n *\n * This is a pure function with no filesystem or network access.\n */\nexport function generateSpdxSbom(input: GenerateSbomInput): GenerateSpdxSbomResult {\n const {\n projectName,\n projectVersion = DEFAULT_PROJECT_VERSION,\n dependencies,\n } = input;\n\n const timestamp = new Date().toISOString();\n const resolvedDeps = normalizeDependencies(dependencies);\n const rootPackageId = 'SPDXRef-Package-root';\n\n const spdx = {\n spdxVersion: `SPDX-${SPDX_VERSION}`,\n dataLicense: 'CC0-1.0',\n SPDXID: 'SPDXRef-DOCUMENT',\n name: `${projectName}-sbom`,\n documentNamespace: `https://verimu.com/spdxdocs/${projectName}-${randomUUID()}`,\n creationInfo: {\n created: timestamp,\n creators: [`Tool: ${VERIMU_TOOL_NAME}`],\n },\n documentDescribes: [rootPackageId],\n packages: [\n {\n name: projectName,\n SPDXID: rootPackageId,\n versionInfo: projectVersion,\n supplier: `Organization: ${projectName}`,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n licenseConcluded: 'NOASSERTION',\n licenseDeclared: 'NOASSERTION',\n primaryPackagePurpose: 'APPLICATION',\n },\n ...resolvedDeps.map((dep, index) => ({\n name: dep.name,\n SPDXID: `SPDXRef-Package-${index + 1}`,\n versionInfo: dep.version,\n supplier: `Organization: ${dep.supplierName}`,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n licenseConcluded: 'NOASSERTION',\n licenseDeclared: 'NOASSERTION',\n primaryPackagePurpose: 'LIBRARY',\n externalRefs: [\n {\n referenceCategory: 'PACKAGE-MANAGER',\n referenceType: 'purl',\n referenceLocator: dep.purl,\n },\n ],\n })),\n ],\n relationships: [\n {\n spdxElementId: 'SPDXRef-DOCUMENT',\n relationshipType: 'DESCRIBES',\n relatedSpdxElement: rootPackageId,\n },\n ...resolvedDeps.map((_dep, index) => ({\n spdxElementId: rootPackageId,\n relationshipType: 'DEPENDS_ON',\n relatedSpdxElement: `SPDXRef-Package-${index + 1}`,\n })),\n ],\n };\n\n const content = JSON.stringify(spdx, null, 2);\n\n return {\n sbom: spdx,\n content,\n componentCount: resolvedDeps.length,\n specVersion: SPDX_VERSION,\n generatedAt: timestamp,\n };\n}\n\n","import { randomUUID } from 'crypto';\nimport type {\n GenerateSbomInput,\n GenerateSwidTagResult,\n} from './core/types.js';\nimport {\n DEFAULT_PROJECT_VERSION,\n DEFAULT_SWID_VERSION,\n VERIMU_TOOL_NAME,\n} from './sbom/shared.js';\n\nconst SWID_SPEC_VERSION = 'ISO/IEC 19770-2:2015';\n\n/**\n * Generates a minimal SWID XML tag for the root software product.\n *\n * This is intentionally minimal for v1. The current tag describes the root\n * product identity and generator metadata only.\n */\nexport function generateSwidTag(input: GenerateSbomInput): GenerateSwidTagResult {\n const {\n projectName,\n projectVersion = DEFAULT_PROJECT_VERSION,\n } = input;\n\n const timestamp = new Date().toISOString();\n const tagVersion = 1;\n const normalizedVersion = projectVersion || DEFAULT_SWID_VERSION;\n const tagId = `com.verimu:${sanitizeTagId(projectName)}:${normalizedVersion}:${randomUUID()}`;\n\n const tag = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<SoftwareIdentity',\n ' xmlns=\"http://standards.iso.org/iso/19770/-2/2015/schema.xsd\"',\n ` name=\"${escapeXml(projectName)}\"`,\n ` tagId=\"${escapeXml(tagId)}\"`,\n ` tagVersion=\"${tagVersion}\"`,\n ` version=\"${escapeXml(normalizedVersion)}\"`,\n ' versionScheme=\"semver\">',\n ` <Entity name=\"${escapeXml(projectName)}\" role=\"softwareCreator\" />`,\n ' <Entity name=\"Verimu\" role=\"tagCreator\" />',\n ` <Meta product=\"${escapeXml(projectName)}\" generator=\"${VERIMU_TOOL_NAME}\" generated=\"${timestamp}\" />`,\n ' <!-- TODO: Consider adding dependency/package evidence if we need richer SWID coverage. -->',\n ' <Link rel=\"describedby\" href=\"https://verimu.com\" />',\n '</SoftwareIdentity>',\n ].join('\\n');\n\n return {\n tag,\n content: tag,\n componentCount: 1,\n specVersion: SWID_SPEC_VERSION,\n generatedAt: timestamp,\n };\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&apos;');\n}\n\nfunction sanitizeTagId(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n","import { writeFile } from 'fs/promises';\nimport { basename, join, parse } from 'path';\nimport { ScannerRegistry } from './scanners/registry.js';\nimport { generateSbomArtifacts } from './sbom/artifacts.js';\nimport { CveAggregator } from './cve/aggregator.js';\nimport { ConsoleReporter } from './reporters/console.js';\nimport { VerimuApiClient } from './api/client.js';\nimport type { ScanResponse } from './api/client.js';\nimport type { VerimuConfig, VerimuReport, Severity } from './core/types.js';\n\n/** Result of uploading scan results to the Verimu platform */\nexport interface UploadResult {\n projectId: string;\n projectCreated: boolean;\n totalDependencies: number;\n vulnerableDependencies: number;\n dashboardUrl: string;\n scanResponse: ScanResponse;\n}\n\n/**\n * Main scan pipeline — orchestrates the full Verimu workflow:\n * 1. Detect ecosystem & parse lockfile\n * 2. Generate software inventory artifacts (CycloneDX + SPDX + SWID)\n * 3. Check dependencies for CVEs (via OSV)\n * 4. Produce report\n * 5. Upload to Verimu platform (if API key provided)\n */\nexport async function scan(config: VerimuConfig): Promise<VerimuReport> {\n const {\n projectPath,\n sbomOutput = './sbom.cdx.json',\n skipCveCheck = false,\n cyclonedxVersion = '1.7',\n } = config;\n\n // 1. Scan dependencies\n const registry = new ScannerRegistry();\n const scanResult = await registry.detectAndScan(projectPath);\n\n // 2. Generate all supported artifacts\n const artifacts = generateSbomArtifacts(scanResult, undefined, cyclonedxVersion);\n const sbom = artifacts.cyclonedx;\n\n // 3. Write artifacts to disk\n const outputPaths = deriveArtifactOutputPaths(sbomOutput);\n await Promise.all([\n writeFile(outputPaths.cyclonedx, artifacts.cyclonedx.content, 'utf-8'),\n writeFile(outputPaths.spdx, artifacts.spdx.content, 'utf-8'),\n writeFile(outputPaths.swid, artifacts.swid.content, 'utf-8'),\n ]);\n\n // 4. Check CVEs (unless skipped)\n let cveCheck;\n if (skipCveCheck) {\n cveCheck = {\n vulnerabilities: [],\n sourcesQueried: [],\n sourceErrors: [],\n checkDurationMs: 0,\n };\n } else {\n const aggregator = new CveAggregator();\n cveCheck = await aggregator.check(scanResult.dependencies);\n }\n\n // 5. Build report\n const summary = {\n totalDependencies: scanResult.dependencies.length,\n totalVulnerabilities: cveCheck.vulnerabilities.length,\n critical: cveCheck.vulnerabilities.filter((v) => v.severity === 'CRITICAL').length,\n high: cveCheck.vulnerabilities.filter((v) => v.severity === 'HIGH').length,\n medium: cveCheck.vulnerabilities.filter((v) => v.severity === 'MEDIUM').length,\n low: cveCheck.vulnerabilities.filter((v) => v.severity === 'LOW').length,\n exploitedInWild: cveCheck.vulnerabilities.filter((v) => v.exploitedInWild).length,\n };\n\n const report: VerimuReport = {\n project: {\n path: projectPath,\n ecosystem: scanResult.ecosystem,\n dependencyCount: scanResult.dependencies.length,\n },\n sbom,\n artifacts,\n cveCheck,\n summary,\n generatedAt: new Date().toISOString(),\n };\n\n // 6. Upload to Verimu platform (if API key provided)\n if (config.apiKey) {\n try {\n const uploadResult = await uploadToVerimu(report, config);\n (report as VerimuReport & { upload?: UploadResult }).upload = uploadResult;\n } catch {\n // Upload failure should not break the scan — log but continue\n // The CLI will handle displaying the error\n }\n }\n\n return report;\n}\n\n/**\n * Uploads scan results to the Verimu platform.\n *\n * 1. Upserts the project (create-if-not-exists by name)\n * 2. POSTs the artifact bundle for dependency tracking + CVE scanning\n */\nexport async function uploadToVerimu(\n report: VerimuReport,\n config: VerimuConfig\n): Promise<UploadResult> {\n if (!config.apiKey) {\n throw new Error('API key required for upload');\n }\n\n const client = new VerimuApiClient(config.apiKey, config.apiBaseUrl);\n\n // Derive project name from the directory\n const projectName = basename(config.projectPath);\n\n // 1. Upsert project\n const upsertRes = await client.upsertProject({\n name: projectName,\n ecosystem: report.project.ecosystem,\n });\n\n const projectId = upsertRes.project.id;\n\n // 2. Upload software inventory artifacts\n const scanRes = await client.uploadSbom(projectId, buildUploadPayload(report));\n\n return {\n projectId,\n projectCreated: upsertRes.created,\n totalDependencies: scanRes.summary.total_dependencies,\n vulnerableDependencies: scanRes.summary.vulnerable_dependencies,\n dashboardUrl: `https://app.verimu.com/dashboard/projects/${projectId}`,\n scanResponse: scanRes,\n };\n}\n\n/**\n * Determines if the scan should fail CI based on severity threshold.\n */\nexport function shouldFailCi(report: VerimuReport, threshold: Severity): boolean {\n const severityOrder: Record<Severity, number> = {\n CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3, UNKNOWN: 4,\n };\n const thresholdLevel = severityOrder[threshold] ?? 4;\n\n return report.cveCheck.vulnerabilities.some(\n (v) => severityOrder[v.severity] <= thresholdLevel\n );\n}\n\n/**\n * Prints a console report to stdout.\n */\nexport function printReport(report: VerimuReport): void {\n const reporter = new ConsoleReporter();\n console.log(reporter.report(report));\n}\n\nfunction deriveArtifactOutputPaths(cycloneDxOutput: string): {\n cyclonedx: string;\n spdx: string;\n swid: string;\n} {\n const parsed = parse(cycloneDxOutput);\n let baseName = parsed.name;\n\n if (parsed.ext === '.json' && baseName.endsWith('.cdx')) {\n baseName = baseName.slice(0, -4);\n }\n\n return {\n cyclonedx: cycloneDxOutput,\n spdx: join(parsed.dir, `${baseName}.spdx.json`),\n swid: join(parsed.dir, `${baseName}.swid.xml`),\n };\n}\n\nfunction buildUploadPayload(report: VerimuReport): string | {\n cyclonedx: Record<string, unknown>;\n spdx: Record<string, unknown>;\n swid: string;\n} {\n if (!report.artifacts) {\n return report.sbom.content;\n }\n\n return {\n cyclonedx: JSON.parse(report.artifacts.cyclonedx.content) as Record<string, unknown>,\n spdx: JSON.parse(report.artifacts.spdx.content) as Record<string, unknown>,\n swid: report.artifacts.swid.content,\n };\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * npm / Node.js dependency scanner.\n *\n * Parses package-lock.json (v2/v3 format) to extract the full\n * resolved dependency tree. Also reads package.json to determine\n * which dependencies are direct vs transitive.\n */\nexport class NpmScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'npm';\n readonly lockfileNames = ['package-lock.json'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'package-lock.json');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, packageJsonRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'package.json'), 'utf-8').catch(() => null),\n ]);\n\n let lockfile: NpmLockfile;\n try {\n lockfile = JSON.parse(lockfileRaw);\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON');\n }\n\n // Determine direct dependency names from package.json\n const directNames = new Set<string>();\n if (packageJsonRaw) {\n try {\n const pkg = JSON.parse(packageJsonRaw);\n for (const name of Object.keys(pkg.dependencies ?? {})) {\n directNames.add(name);\n }\n for (const name of Object.keys(pkg.devDependencies ?? {})) {\n directNames.add(name);\n }\n } catch {\n // If package.json can't be parsed, all deps are \"unknown\" direct status\n }\n }\n\n const dependencies = this.parseLockfile(lockfile, directNames);\n\n return {\n projectPath,\n ecosystem: 'npm',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses package-lock.json and extracts dependencies.\n * Supports lockfile v2 and v3 (uses the `packages` field).\n * Falls back to `dependencies` field for lockfile v1.\n */\n private parseLockfile(lockfile: NpmLockfile, directNames: Set<string>): Dependency[] {\n const deps: Dependency[] = [];\n\n if (lockfile.packages) {\n // Lockfile v2/v3: `packages` is a flat map of \"node_modules/name\" → info\n for (const [pkgPath, pkgInfo] of Object.entries(lockfile.packages)) {\n // Skip the root package (empty string key)\n if (pkgPath === '') continue;\n\n // Extract package name from the path\n // e.g., \"node_modules/express\" → \"express\"\n // e.g., \"node_modules/@types/node\" → \"@types/node\"\n const name = this.extractPackageName(pkgPath);\n if (!name || !pkgInfo.version) continue;\n\n // Skip link: true entries (workspace references)\n if (pkgInfo.link) continue;\n\n deps.push({\n name,\n version: pkgInfo.version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, pkgInfo.version),\n });\n }\n } else if (lockfile.dependencies) {\n // Lockfile v1 fallback: `dependencies` is a nested tree\n this.parseDependenciesV1(lockfile.dependencies, directNames, deps);\n }\n\n return deps;\n }\n\n /**\n * Builds a purl (Package URL) for an npm package.\n *\n * Per the purl spec (https://github.com/package-url/purl-spec/blob/main/types-doc/npm-definition.md):\n * \"The npm scope @ sign prefix is always percent encoded.\"\n *\n * So @types/node@20.11.5 → pkg:npm/%40types/node@20.11.5\n * And express@4.18.2 → pkg:npm/express@4.18.2\n */\n private buildPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n // Scoped: encode the @ as %40 per purl spec\n return `pkg:npm/%40${name.slice(1)}@${version}`;\n }\n return `pkg:npm/${name}@${version}`;\n }\n\n /** Extracts the package name from a node_modules path */\n private extractPackageName(pkgPath: string): string | null {\n // \"node_modules/@scope/name\" → \"@scope/name\"\n // \"node_modules/name\" → \"name\"\n // \"node_modules/a/node_modules/b\" → \"b\" (nested)\n const parts = pkgPath.split('node_modules/');\n const last = parts[parts.length - 1];\n return last || null;\n }\n\n /** Recursively parses lockfile v1 `dependencies` tree */\n private parseDependenciesV1(\n depsObj: Record<string, NpmLockfileV1Dep>,\n directNames: Set<string>,\n result: Dependency[]\n ): void {\n for (const [name, info] of Object.entries(depsObj)) {\n if (info.version) {\n result.push({\n name,\n version: info.version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, info.version),\n });\n }\n // Recurse into nested dependencies\n if (info.dependencies) {\n this.parseDependenciesV1(info.dependencies, directNames, result);\n }\n }\n }\n}\n\n// ─── Types for package-lock.json parsing ─────────────────────────\n\ninterface NpmLockfile {\n name?: string;\n version?: string;\n lockfileVersion?: number;\n packages?: Record<string, NpmLockfilePackage>;\n dependencies?: Record<string, NpmLockfileV1Dep>;\n}\n\ninterface NpmLockfilePackage {\n version?: string;\n resolved?: string;\n integrity?: string;\n dev?: boolean;\n optional?: boolean;\n link?: boolean;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\ninterface NpmLockfileV1Dep {\n version?: string;\n resolved?: string;\n integrity?: string;\n requires?: Record<string, string>;\n dependencies?: Record<string, NpmLockfileV1Dep>;\n}\n","/** Base error for all Verimu errors */\nexport class VerimuError extends Error {\n constructor(message: string, public readonly code: string) {\n super(message);\n this.name = 'VerimuError';\n }\n}\n\n/** Thrown when no supported lockfile is found */\nexport class NoLockfileError extends VerimuError {\n constructor(projectPath: string) {\n super(\n `No supported lockfile found in ${projectPath}. ` +\n `Supported: package-lock.json (npm), packages.lock.json (NuGet), ` +\n `Cargo.lock (Rust), requirements.txt / Pipfile.lock (pip), poetry.lock (Poetry), uv.lock (uv), pom.xml (Maven), go.sum (Go), Gemfile.lock (Ruby), composer.lock (Composer), yarn.lock (Yarn), pnpm-lock.yaml (pnpm)`,\n 'NO_LOCKFILE'\n );\n this.name = 'NoLockfileError';\n }\n}\n\n/** Thrown when lockfile parsing fails */\nexport class LockfileParseError extends VerimuError {\n constructor(lockfilePath: string, reason: string) {\n super(`Failed to parse ${lockfilePath}: ${reason}`, 'LOCKFILE_PARSE_ERROR');\n this.name = 'LockfileParseError';\n }\n}\n\n/** Thrown when a CVE source query fails */\nexport class CveSourceError extends VerimuError {\n constructor(source: string, reason: string) {\n super(`CVE source \"${source}\" failed: ${reason}`, 'CVE_SOURCE_ERROR');\n this.name = 'CveSourceError';\n }\n}\n\n/** Thrown when API key is required but missing */\nexport class ApiKeyRequiredError extends VerimuError {\n constructor(feature: string) {\n super(\n `API key required for \"${feature}\". Get one at https://verimu.com/dashboard`,\n 'API_KEY_REQUIRED'\n );\n this.name = 'ApiKeyRequiredError';\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * C# / NuGet dependency scanner.\n *\n * Parses `packages.lock.json` (NuGet lock file, generated by\n * `dotnet restore --use-lock-file`) to extract the full resolved\n * dependency tree. The lock file itself tracks Direct vs Transitive.\n *\n * Lock file format (NuGet v1):\n * ```json\n * {\n * \"version\": 1,\n * \"dependencies\": {\n * \"net8.0\": {\n * \"PackageName\": {\n * \"type\": \"Direct\" | \"Transitive\",\n * \"resolved\": \"13.0.3\",\n * \"contentHash\": \"...\"\n * }\n * }\n * }\n * }\n * ```\n */\nexport class NugetScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'nuget';\n readonly lockfileNames = ['packages.lock.json'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'packages.lock.json');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const lockfileRaw = await readFile(lockfilePath, 'utf-8');\n\n let lockfile: NugetLockfile;\n try {\n lockfile = JSON.parse(lockfileRaw);\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON');\n }\n\n if (!lockfile.dependencies) {\n throw new LockfileParseError(lockfilePath, 'Missing \"dependencies\" field');\n }\n\n const dependencies = this.parseLockfile(lockfile);\n\n return {\n projectPath,\n ecosystem: 'nuget',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses packages.lock.json and extracts dependencies across all\n * target frameworks. Deduplicates by package name (keeps highest version\n * if the same package appears under multiple frameworks).\n */\n private parseLockfile(lockfile: NugetLockfile): Dependency[] {\n const depMap = new Map<string, Dependency>();\n\n for (const [_framework, packages] of Object.entries(lockfile.dependencies)) {\n for (const [name, info] of Object.entries(packages)) {\n if (!info.resolved) continue;\n\n // \"Direct\" in the lock file means it's a PackageReference in .csproj\n const isDirect = info.type === 'Direct';\n\n const existing = depMap.get(name);\n if (!existing) {\n depMap.set(name, {\n name,\n version: info.resolved,\n direct: isDirect,\n ecosystem: 'nuget',\n purl: this.buildPurl(name, info.resolved),\n });\n }\n // If already seen, keep the direct flag if either occurrence is direct\n else if (isDirect && !existing.direct) {\n existing.direct = true;\n }\n }\n }\n\n return Array.from(depMap.values());\n }\n\n /**\n * Builds a purl for a NuGet package.\n * NuGet purls are straightforward: pkg:nuget/Name@Version\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:nuget/${name}@${version}`;\n }\n}\n\n// ─── Types for packages.lock.json parsing ────────────────────────\n\ninterface NugetLockfile {\n version?: number;\n dependencies: Record<string, Record<string, NugetLockfileEntry>>;\n}\n\ninterface NugetLockfileEntry {\n type?: 'Direct' | 'Transitive';\n resolved?: string;\n contentHash?: string;\n dependencies?: Record<string, string>;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Rust / Cargo dependency scanner.\n *\n * Parses `Cargo.lock` (TOML format) to extract the full resolved\n * dependency tree. Reads `Cargo.toml` to determine which packages\n * are direct dependencies vs transitive.\n *\n * Cargo.lock format (v3):\n * ```toml\n * [[package]]\n * name = \"serde\"\n * version = \"1.0.195\"\n * source = \"registry+https://github.com/rust-lang/crates.io-index\"\n * checksum = \"abc123...\"\n * dependencies = [\n * \"serde_derive\",\n * ]\n * ```\n *\n * Note: We use a simple TOML parser since Cargo.lock has a very\n * regular structure (just [[package]] entries). No need for a full\n * TOML library.\n */\nexport class CargoScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'cargo';\n readonly lockfileNames = ['Cargo.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'Cargo.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, cargoTomlRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'Cargo.toml'), 'utf-8').catch(() => null),\n ]);\n\n const packages = this.parseLockfile(lockfileRaw, lockfilePath);\n const directNames = cargoTomlRaw ? this.parseCargoToml(cargoTomlRaw) : new Set<string>();\n\n // The first [[package]] is typically the root project — skip it\n const rootName = packages.length > 0 ? packages[0].name : null;\n\n const dependencies: Dependency[] = [];\n for (const pkg of packages) {\n // Skip the root project itself\n if (pkg.name === rootName && pkg.source === undefined) continue;\n\n dependencies.push({\n name: pkg.name,\n version: pkg.version,\n direct: directNames.has(pkg.name),\n ecosystem: 'cargo',\n purl: this.buildPurl(pkg.name, pkg.version),\n });\n }\n\n return {\n projectPath,\n ecosystem: 'cargo',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses Cargo.lock by splitting on [[package]] blocks.\n * This is a lightweight parser that handles the regular structure\n * of Cargo.lock without needing a full TOML parser.\n */\n private parseLockfile(content: string, lockfilePath: string): CargoPackage[] {\n const packages: CargoPackage[] = [];\n const blocks = content.split(/^\\[\\[package\\]\\]$/m);\n\n for (const block of blocks) {\n if (!block.trim()) continue;\n\n const name = this.extractField(block, 'name');\n const version = this.extractField(block, 'version');\n const source = this.extractField(block, 'source');\n\n if (name && version) {\n packages.push({ name, version, source: source || undefined });\n }\n }\n\n if (packages.length === 0 && content.includes('[[package]]')) {\n throw new LockfileParseError(lockfilePath, 'Failed to parse any packages from Cargo.lock');\n }\n\n return packages;\n }\n\n /**\n * Extracts a string field value from a TOML block.\n * Handles: `name = \"value\"` format.\n */\n private extractField(block: string, fieldName: string): string | null {\n const regex = new RegExp(`^${fieldName}\\\\s*=\\\\s*\"([^\"]*)\"`, 'm');\n const match = block.match(regex);\n return match ? match[1] : null;\n }\n\n /**\n * Parses Cargo.toml to extract direct dependency names.\n * Looks for [dependencies] and [dev-dependencies] sections.\n */\n private parseCargoToml(content: string): Set<string> {\n const directNames = new Set<string>();\n let inDepsSection = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n // Detect section headers\n if (line.startsWith('[')) {\n inDepsSection =\n line === '[dependencies]' ||\n line === '[dev-dependencies]' ||\n line === '[build-dependencies]';\n continue;\n }\n\n if (inDepsSection && line && !line.startsWith('#')) {\n // Extract package name from \"name = ...\" or \"name = { version = ... }\"\n const match = line.match(/^([a-zA-Z0-9_-]+)\\s*=/);\n if (match) {\n directNames.add(match[1]);\n }\n }\n }\n\n return directNames;\n }\n\n /**\n * Builds a purl for a Cargo (crates.io) package.\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:cargo/${name}@${version}`;\n }\n}\n\n// ─── Internal types ──────────────────────────────────────────────\n\ninterface CargoPackage {\n name: string;\n version: string;\n source?: string;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Python / pip dependency scanner.\n *\n * Supports multiple Python dependency file formats (in priority order):\n * 1. `requirements.txt` — flat list of pinned dependencies\n * 2. `Pipfile.lock` — Pipenv lock file with exact versions\n *\n * For `requirements.txt`, all listed packages are treated as direct\n * dependencies (the file doesn't distinguish direct vs transitive).\n * For `Pipfile.lock`, `default` packages are direct and `develop`\n * packages are dev dependencies.\n *\n * Limitation: `requirements.txt` doesn't capture transitive deps unless\n * generated with `pip freeze`. If using `pip freeze` output, all deps\n * are listed but we can't distinguish direct vs transitive.\n */\nexport class PipScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'pip';\n readonly lockfileNames = ['Pipfile.lock', 'requirements.txt'];\n\n async detect(projectPath: string): Promise<string | null> {\n // Check in priority order\n for (const lockfile of this.lockfileNames) {\n const fullPath = path.join(projectPath, lockfile);\n if (existsSync(fullPath)) return fullPath;\n }\n return null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const raw = await readFile(lockfilePath, 'utf-8');\n const filename = path.basename(lockfilePath);\n\n let dependencies: Dependency[];\n\n if (filename === 'Pipfile.lock') {\n dependencies = this.parsePipfileLock(raw, lockfilePath);\n } else {\n dependencies = await this.parseRequirementsTxt(raw, lockfilePath);\n }\n\n return {\n projectPath,\n ecosystem: 'pip',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses `requirements.txt` format.\n *\n * Supports:\n * - `package==1.2.3` (pinned) — REQUIRED\n * - Comments (`#`) and blank lines are skipped\n * - `-r other-file.txt` (include directive) — recursively parsed\n * - `--index-url` and other pip flags — skipped\n *\n * Throws if any dependency is not strictly pinned with ==.\n * Use `pip freeze` to generate a properly pinned requirements.txt.\n */\n private async parseRequirementsTxt(\n content: string,\n lockfilePath: string,\n visited: Set<string> = new Set()\n ): Promise<Dependency[]> {\n const deps: Dependency[] = [];\n const currentDir = path.dirname(lockfilePath);\n const normalizedPath = path.resolve(lockfilePath);\n\n // Prevent circular includes\n if (visited.has(normalizedPath)) {\n return deps;\n }\n visited.add(normalizedPath);\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n // Skip comments and blank lines\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n // Handle -r / --requirement includes\n const includeMatch = line.match(/^-r\\s+(.+)$/) || line.match(/^--requirement\\s+(.+)$/);\n if (includeMatch) {\n const includePath = path.resolve(currentDir, includeMatch[1].trim());\n if (existsSync(includePath)) {\n const includeContent = await readFile(includePath, 'utf-8');\n const includedDeps = await this.parseRequirementsTxt(includeContent, includePath, visited);\n deps.push(...includedDeps);\n }\n continue;\n }\n\n // Skip other pip flags (--index-url, -e, etc.)\n if (line.startsWith('-') || line.startsWith('--')) {\n continue;\n }\n\n // Parse strictly pinned \"package==version\" only\n const pinnedMatch = line.match(/^([a-zA-Z0-9_][a-zA-Z0-9._-]*)\\s*==\\s*([^,\\s]+)$/);\n if (pinnedMatch) {\n const [, name, version] = pinnedMatch;\n if (name && version) {\n deps.push({\n name: this.normalizePipName(name),\n version,\n direct: true, // requirements.txt doesn't distinguish\n ecosystem: 'pip',\n purl: this.buildPurl(name, version),\n });\n }\n continue;\n }\n\n // Check if it's a dependency line with non-pinned version specifier\n const depMatch = line.match(/^([a-zA-Z0-9_][a-zA-Z0-9._-]*)\\s*([~=!<>].*)$/);\n if (depMatch) {\n throw new LockfileParseError(\n lockfilePath,\n `Non-pinned dependency detected: \"${line}\". Use pip freeze or Pipfile.lock.`\n );\n }\n }\n\n return deps;\n }\n\n /**\n * Parses `Pipfile.lock` (JSON format from Pipenv).\n *\n * Structure:\n * ```json\n * {\n * \"_meta\": { ... },\n * \"default\": {\n * \"requests\": { \"version\": \"==2.31.0\", ... }\n * },\n * \"develop\": {\n * \"pytest\": { \"version\": \"==7.4.0\", ... }\n * }\n * }\n * ```\n */\n private parsePipfileLock(content: string, lockfilePath: string): Dependency[] {\n let lockfile: PipfileLock;\n try {\n lockfile = JSON.parse(content);\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON in Pipfile.lock');\n }\n\n const deps: Dependency[] = [];\n\n // Parse \"default\" (production) dependencies\n if (lockfile.default) {\n for (const [name, info] of Object.entries(lockfile.default)) {\n const version = info.version?.replace(/^==/, '') ?? '';\n if (version) {\n deps.push({\n name: this.normalizePipName(name),\n version,\n direct: true,\n ecosystem: 'pip',\n purl: this.buildPurl(name, version),\n });\n }\n }\n }\n\n // Parse \"develop\" dependencies\n if (lockfile.develop) {\n for (const [name, info] of Object.entries(lockfile.develop)) {\n const version = info.version?.replace(/^==/, '') ?? '';\n if (version) {\n deps.push({\n name: this.normalizePipName(name),\n version,\n direct: true,\n ecosystem: 'pip',\n purl: this.buildPurl(name, version),\n });\n }\n }\n }\n\n return deps;\n }\n\n /**\n * Normalizes a pip package name per PEP 503.\n * Converts to lowercase and replaces any run of [-_.] with a single hyphen.\n */\n private normalizePipName(name: string): string {\n return name.toLowerCase().replace(/[-_.]+/g, '-');\n }\n\n /**\n * Builds a purl for a PyPI package.\n * Per purl spec, the type is \"pypi\" (not \"pip\").\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:pypi/${this.normalizePipName(name)}@${version}`;\n }\n}\n\n// ─── Types for Pipfile.lock parsing ──────────────────────────────\n\ninterface PipfileLock {\n _meta?: Record<string, unknown>;\n default?: Record<string, PipfileLockEntry>;\n develop?: Record<string, PipfileLockEntry>;\n}\n\ninterface PipfileLockEntry {\n version?: string;\n hashes?: string[];\n markers?: string;\n index?: string;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { execSync } from 'child_process';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Java / Maven dependency scanner.\n *\n * Maven doesn't have a lockfile. This scanner uses two strategies:\n *\n * 1. **Primary (auto)**: If `mvn` is on `$PATH`, runs\n * `mvn dependency:list -DoutputType=text` to get the resolved\n * dependency tree including transitive dependencies.\n *\n * 2. **Fallback (pre-generated)**: Looks for a `dependency-tree.txt`\n * file in the project root. Users can generate this with:\n * ```\n * mvn dependency:list -DoutputFile=dependency-tree.txt -DoutputType=text\n * ```\n *\n * The scanner detects a Maven project by the presence of `pom.xml`.\n *\n * Maven dependency:list output format (one per line):\n * ```\n * com.google.guava:guava:jar:32.1.3-jre:compile\n * org.slf4j:slf4j-api:jar:2.0.9:compile\n * junit:junit:jar:4.13.2:test\n * ```\n * Fields: groupId:artifactId:type:version:scope\n * With classifier: groupId:artifactId:type:classifier:version:scope\n */\nexport class MavenScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'maven';\n readonly lockfileNames = ['pom.xml'];\n\n /** Allow injection for testing */\n private execSyncFn: typeof execSync;\n\n constructor(execSyncImpl?: typeof execSync) {\n this.execSyncFn = execSyncImpl ?? execSync;\n }\n\n async detect(projectPath: string): Promise<string | null> {\n const pomPath = path.join(projectPath, 'pom.xml');\n return existsSync(pomPath) ? pomPath : null;\n }\n\n async scan(projectPath: string, _lockfilePath: string): Promise<ScanResult> {\n // Read pom.xml to determine direct dependencies\n const pomPath = path.join(projectPath, 'pom.xml');\n const pomContent = await readFile(pomPath, 'utf-8').catch(() => null);\n const directDeps = pomContent ? this.parsePomDependencies(pomContent) : new Set<string>();\n\n // Strategy 1: Try pre-generated dependency-tree.txt\n const depTreePath = path.join(projectPath, 'dependency-tree.txt');\n if (existsSync(depTreePath)) {\n const content = await readFile(depTreePath, 'utf-8');\n const dependencies = this.parseDependencyList(content, directDeps);\n return this.buildResult(projectPath, depTreePath, dependencies);\n }\n\n // Strategy 2: Try running `mvn dependency:list`\n if (this.isMavenAvailable()) {\n const output = this.runMavenDependencyList(projectPath);\n const dependencies = this.parseDependencyList(output, directDeps);\n return this.buildResult(projectPath, pomPath, dependencies);\n }\n\n throw new LockfileParseError(\n pomPath,\n 'Maven project detected (pom.xml found) but could not resolve dependencies. ' +\n 'Either install Maven (`mvn` must be on $PATH) or pre-generate a dependency list:\\n' +\n ' mvn dependency:list -DoutputFile=dependency-tree.txt -DappendOutput=true'\n );\n }\n\n /**\n * Parses pom.xml to extract direct dependency coordinates (groupId:artifactId).\n * This is a simple regex-based parser that handles standard dependency declarations.\n */\n private parsePomDependencies(pomContent: string): Set<string> {\n const directDeps = new Set<string>();\n\n // Match <dependency> blocks and extract groupId + artifactId\n // This regex handles multi-line dependency declarations\n const depBlockRegex = /<dependency>\\s*([\\s\\S]*?)<\\/dependency>/g;\n const groupIdRegex = /<groupId>\\s*([^<]+)\\s*<\\/groupId>/;\n const artifactIdRegex = /<artifactId>\\s*([^<]+)\\s*<\\/artifactId>/;\n\n let match;\n while ((match = depBlockRegex.exec(pomContent)) !== null) {\n const block = match[1];\n const groupMatch = block.match(groupIdRegex);\n const artifactMatch = block.match(artifactIdRegex);\n\n if (groupMatch && artifactMatch) {\n const groupId = groupMatch[1].trim();\n const artifactId = artifactMatch[1].trim();\n directDeps.add(`${groupId}:${artifactId}`);\n }\n }\n\n return directDeps;\n }\n\n /**\n * Parses Maven `dependency:list` output.\n *\n * Each dependency line has the format:\n * groupId:artifactId:type:version:scope (5 parts)\n * groupId:artifactId:type:classifier:version:scope (6 parts)\n *\n * Lines are typically indented with leading whitespace.\n */\n private parseDependencyList(content: string, directDeps: Set<string>): Dependency[] {\n const deps: Dependency[] = [];\n const seen = new Set<string>();\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n if (!line) continue;\n\n // Split by colon - Maven coords use : as separator\n const parts = line.split(':');\n\n // Need at least 5 parts: groupId:artifactId:type:version:scope\n if (parts.length < 5) continue;\n\n const groupId = parts[0];\n const artifactId = parts[1];\n // parts[2] = type (jar, war, pom, etc.)\n\n // Handle optional classifier (6 parts) vs no classifier (5 parts)\n let version: string;\n let scope: string;\n\n if (parts.length >= 6) {\n // With classifier: groupId:artifactId:type:classifier:version:scope\n version = parts[4];\n scope = parts[5];\n } else {\n // Without classifier: groupId:artifactId:type:version:scope\n version = parts[3];\n scope = parts[4];\n }\n\n // Skip invalid entries\n if (!groupId || !artifactId || !version) continue;\n\n // Skip test-scoped dependencies\n if (scope === 'test') continue;\n\n const name = `${groupId}:${artifactId}`;\n\n // Deduplicate (same dep might appear multiple times)\n if (seen.has(name)) continue;\n seen.add(name);\n\n // Determine if direct by checking against pom.xml dependencies\n const isDirect = directDeps.has(name);\n\n deps.push({\n name,\n version,\n direct: isDirect,\n ecosystem: 'maven',\n purl: this.buildPurl(groupId, artifactId, version),\n });\n }\n\n return deps;\n }\n\n /** Checks if `mvn` is available on PATH */\n private isMavenAvailable(): boolean {\n try {\n this.execSyncFn('mvn --version', { stdio: 'pipe', timeout: 10_000 });\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Runs `mvn dependency:list` and returns the output.\n */\n private runMavenDependencyList(projectPath: string): string {\n try {\n const output = this.execSyncFn(\n 'mvn dependency:list -DoutputType=text -DincludeScope=compile',\n {\n cwd: projectPath,\n stdio: 'pipe',\n timeout: 120_000, // 2 minute timeout\n encoding: 'utf-8',\n }\n );\n return output.toString();\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n throw new LockfileParseError(\n path.join(projectPath, 'pom.xml'),\n `Failed to run 'mvn dependency:list': ${message}`\n );\n }\n }\n\n /**\n * Builds a purl for a Maven package.\n * Format: pkg:maven/groupId/artifactId@version\n */\n private buildPurl(groupId: string, artifactId: string, version: string): string {\n return `pkg:maven/${groupId}/${artifactId}@${version}`;\n }\n\n private buildResult(\n projectPath: string,\n lockfilePath: string,\n dependencies: Dependency[]\n ): ScanResult {\n return {\n projectPath,\n ecosystem: 'maven',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Go module dependency scanner.\n *\n * Parses `go.sum` to extract the full resolved dependency list, and\n * cross-references `go.mod` to distinguish direct vs indirect (transitive)\n * dependencies.\n *\n * go.sum format (one or two lines per module):\n * ```\n * github.com/gin-gonic/gin v1.9.1 h1:abc123...=\n * github.com/gin-gonic/gin v1.9.1/go.mod h1:def456...=\n * ```\n *\n * Lines ending in `/go.mod` are checksums of the module's go.mod file —\n * we skip those and only keep the `h1:` lines (source archive checksums).\n *\n * go.mod `require` block format:\n * ```\n * require (\n * github.com/gin-gonic/gin v1.9.1\n * golang.org/x/text v0.14.0 // indirect\n * )\n * ```\n *\n * Dependencies marked `// indirect` are transitive.\n */\nexport class GoScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'go';\n readonly lockfileNames = ['go.sum'];\n\n async detect(projectPath: string): Promise<string | null> {\n const goSumPath = path.join(projectPath, 'go.sum');\n return existsSync(goSumPath) ? goSumPath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [goSumRaw, goModRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'go.mod'), 'utf-8').catch(() => null),\n ]);\n\n const { directNames, indirectNames } = goModRaw\n ? this.parseGoMod(goModRaw)\n : { directNames: new Set<string>(), indirectNames: new Set<string>() };\n\n const dependencies = this.parseGoSum(goSumRaw, lockfilePath, directNames, indirectNames);\n\n return {\n projectPath,\n ecosystem: 'go',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses go.sum and extracts unique module dependencies.\n *\n * Each module may appear twice in go.sum (once for the source archive,\n * once for go.mod). We deduplicate by module path + version, keeping\n * only the `h1:` entry (not the `/go.mod` entry).\n */\n private parseGoSum(\n content: string,\n lockfilePath: string,\n directNames: Set<string>,\n indirectNames: Set<string>,\n ): Dependency[] {\n const depMap = new Map<string, Dependency>();\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n if (!line) continue;\n\n // Format: \"module version hash\"\n const parts = line.split(/\\s+/);\n if (parts.length < 3) continue;\n\n const modulePath = parts[0];\n let version = parts[1];\n\n // Skip /go.mod checksum lines\n if (version.endsWith('/go.mod')) continue;\n\n // Strip any +incompatible suffix for cleaner versions\n version = version.replace(/\\+incompatible$/, '');\n\n const key = `${modulePath}@${version}`;\n if (depMap.has(key)) continue;\n\n // Determine direct/indirect from go.mod data\n // If go.mod is available: explicit direct or not marked indirect = direct\n // If go.mod is not available: default to direct (conservative)\n const isDirect = directNames.size > 0 || indirectNames.size > 0\n ? directNames.has(modulePath) || (!indirectNames.has(modulePath) && !directNames.has(modulePath) ? false : directNames.has(modulePath))\n : true;\n\n depMap.set(key, {\n name: modulePath,\n version,\n direct: isDirect,\n ecosystem: 'go',\n purl: this.buildPurl(modulePath, version),\n });\n }\n\n return Array.from(depMap.values());\n }\n\n /**\n * Parses go.mod to extract direct and indirect dependency names.\n *\n * Handles both single-line and block `require` directives:\n * ```\n * require github.com/pkg/errors v0.9.1\n *\n * require (\n * github.com/gin-gonic/gin v1.9.1\n * golang.org/x/text v0.14.0 // indirect\n * )\n * ```\n */\n private parseGoMod(content: string): { directNames: Set<string>; indirectNames: Set<string> } {\n const directNames = new Set<string>();\n const indirectNames = new Set<string>();\n\n let inRequireBlock = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n // Single-line require: `require github.com/pkg/errors v0.9.1`\n if (line.startsWith('require ') && !line.includes('(')) {\n const match = line.match(/^require\\s+(\\S+)\\s+\\S+(.*)$/);\n if (match) {\n const modulePath = match[1];\n const rest = match[2];\n if (rest.includes('// indirect')) {\n indirectNames.add(modulePath);\n } else {\n directNames.add(modulePath);\n }\n }\n continue;\n }\n\n // Start of require block\n if (line === 'require (' || line.startsWith('require (')) {\n inRequireBlock = true;\n continue;\n }\n\n // End of require block\n if (inRequireBlock && line === ')') {\n inRequireBlock = false;\n continue;\n }\n\n // Inside require block\n if (inRequireBlock && line && !line.startsWith('//')) {\n const match = line.match(/^(\\S+)\\s+\\S+(.*)$/);\n if (match) {\n const modulePath = match[1];\n const rest = match[2];\n if (rest.includes('// indirect')) {\n indirectNames.add(modulePath);\n } else {\n directNames.add(modulePath);\n }\n }\n }\n }\n\n return { directNames, indirectNames };\n }\n\n /**\n * Builds a purl for a Go module.\n *\n * Per purl spec, the type is \"golang\" and the module path\n * uses `/` separators (no encoding needed for path segments).\n *\n * Example: `pkg:golang/github.com/gin-gonic/gin@v1.9.1`\n */\n private buildPurl(modulePath: string, version: string): string {\n return `pkg:golang/${modulePath}@${version}`;\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Ruby dependency scanner (Bundler).\n *\n * Parses `Gemfile.lock` to extract the full resolved dependency list,\n * and cross-references the `DEPENDENCIES` section to distinguish\n * direct vs transitive gems.\n *\n * Gemfile.lock format:\n * ```\n * GEM\n * remote: https://rubygems.org/\n * specs:\n * actioncable (7.1.2)\n * actionpack (= 7.1.2)\n * activesupport (= 7.1.2)\n * rack (3.0.8)\n *\n * PLATFORMS\n * ruby\n *\n * DEPENDENCIES\n * puma (>= 5.0)\n * rails (~> 7.1.2)\n *\n * BUNDLED WITH\n * 2.5.3\n * ```\n *\n * The `GEM > specs:` section lists all resolved gems with exact versions.\n * The `DEPENDENCIES` section lists direct gems (from the Gemfile).\n */\nexport class RubyScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'ruby';\n readonly lockfileNames = ['Gemfile.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'Gemfile.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const content = await readFile(lockfilePath, 'utf-8');\n\n const specs = this.parseSpecs(content, lockfilePath);\n const directNames = this.parseDependencies(content);\n\n const dependencies: Dependency[] = specs.map(({ name, version }) => ({\n name,\n version,\n direct: directNames.has(name),\n ecosystem: 'ruby' as Ecosystem,\n purl: `pkg:gem/${name}@${version}`,\n }));\n\n return {\n projectPath,\n ecosystem: 'ruby',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses the GEM > specs section to extract all resolved gems.\n *\n * Gems at the top level of the specs section (indented 4 spaces) are\n * resolved packages. Their sub-dependencies (indented 6+ spaces) are\n * constraints, not separate entries — those sub-deps appear as their\n * own top-level spec entries elsewhere.\n *\n * Format: ` gem-name (1.2.3)`\n */\n private parseSpecs(\n content: string,\n lockfilePath: string,\n ): Array<{ name: string; version: string }> {\n const gems: Array<{ name: string; version: string }> = [];\n\n let inGemSection = false;\n let inSpecs = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine;\n\n // Detect section boundaries (lines with no leading whitespace)\n if (line.length > 0 && line[0] !== ' ') {\n if (line.startsWith('GEM')) {\n inGemSection = true;\n inSpecs = false;\n continue;\n }\n // Any other top-level section ends GEM\n inGemSection = false;\n inSpecs = false;\n continue;\n }\n\n if (inGemSection && line.trimStart().startsWith('specs:')) {\n inSpecs = true;\n continue;\n }\n\n if (!inSpecs) continue;\n\n // Top-level gems are indented exactly 4 spaces: \" gem-name (1.2.3)\"\n // Sub-dependencies are indented 6+ spaces: \" dep-name (>= 1.0)\"\n // We only want the 4-space entries (actual resolved packages)\n const match = line.match(/^ {4}(\\S+)\\s+\\(([^)]+)\\)$/);\n if (match) {\n const [, name, version] = match;\n gems.push({ name, version });\n }\n }\n\n if (gems.length === 0) {\n throw new LockfileParseError(\n lockfilePath,\n 'No gems found in GEM specs section',\n );\n }\n\n return gems;\n }\n\n /**\n * Parses the DEPENDENCIES section to get direct dependency names.\n *\n * Format: ` gem-name (>= 1.0)` or ` gem-name`\n * The version constraint is optional and we only need the name.\n */\n private parseDependencies(content: string): Set<string> {\n const directNames = new Set<string>();\n let inDependencies = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine;\n\n // Section header (no leading space)\n if (line.length > 0 && line[0] !== ' ') {\n if (line.startsWith('DEPENDENCIES')) {\n inDependencies = true;\n continue;\n }\n if (inDependencies) break; // Next section → stop\n continue;\n }\n\n if (!inDependencies) continue;\n\n // Dependencies are indented 2 spaces: \" gem-name\" or \" gem-name (>= 1.0)\"\n // The ! suffix indicates a gem loaded from a specific source/path\n const match = line.match(/^ {2}(\\S+?)!?\\s*(?:\\(|$)/);\n if (match) {\n directNames.add(match[1]);\n }\n }\n\n return directNames;\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * PHP / Composer dependency scanner.\n *\n * Parses `composer.lock` for resolved packages and uses `composer.json`\n * (if present) to identify direct dependencies.\n */\nexport class ComposerScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'composer';\n readonly lockfileNames = ['composer.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'composer.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockRaw, manifestRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'composer.json'), 'utf-8').catch(() => null),\n ]);\n\n const directNames = manifestRaw ? this.parseComposerManifest(manifestRaw) : null;\n const dependencies = this.parseComposerLock(lockRaw, lockfilePath, directNames);\n\n return {\n projectPath,\n ecosystem: 'composer',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n private parseComposerLock(\n content: string,\n lockfilePath: string,\n directNames: Set<string> | null\n ): Dependency[] {\n let lock: ComposerLock;\n try {\n lock = JSON.parse(content) as ComposerLock;\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON in composer.lock');\n }\n\n const allPackages = [...(lock.packages ?? []), ...(lock['packages-dev'] ?? [])];\n if (allPackages.length === 0) {\n throw new LockfileParseError(lockfilePath, 'No packages found in composer.lock');\n }\n\n return allPackages\n .filter((pkg) => pkg.name && pkg.version)\n .map((pkg) => ({\n name: pkg.name,\n version: this.normalizeVersion(pkg.version),\n direct: directNames ? directNames.has(pkg.name) : true,\n ecosystem: 'composer' as Ecosystem,\n purl: this.buildPurl(pkg.name, this.normalizeVersion(pkg.version)),\n }));\n }\n\n private parseComposerManifest(content: string): Set<string> {\n let manifest: ComposerManifest;\n try {\n manifest = JSON.parse(content) as ComposerManifest;\n } catch {\n return new Set<string>();\n }\n\n const names = new Set<string>();\n for (const section of [manifest.require ?? {}, manifest['require-dev'] ?? {}]) {\n for (const name of Object.keys(section)) {\n // Exclude platform constraints.\n if (name === 'php' || name.startsWith('ext-') || name.startsWith('lib-')) continue;\n names.add(name);\n }\n }\n\n return names;\n }\n\n private normalizeVersion(version: string): string {\n return version.trim();\n }\n\n private buildPurl(name: string, version: string): string {\n return `pkg:composer/${name}@${version}`;\n }\n}\n\ninterface ComposerLock {\n packages?: ComposerPackage[];\n 'packages-dev'?: ComposerPackage[];\n}\n\ninterface ComposerPackage {\n name: string;\n version: string;\n}\n\ninterface ComposerManifest {\n require?: Record<string, string>;\n 'require-dev'?: Record<string, string>;\n}\n\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport { parse as parseYaml } from 'yaml';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Yarn dependency scanner.\n *\n * Supports Yarn v1 (Classic) and Yarn v2/v3/v4 (Berry) lockfile formats.\n * \n * - Yarn v1: Plain text format with indentation\n * - Yarn v2+: YAML-based format with __metadata section\n *\n * Parses yarn.lock to extract the full resolved dependency tree.\n * Also reads package.json to determine which dependencies are direct vs transitive.\n *\n * Note: Yarn uses the npm ecosystem since it's an alternative\n * package manager for the npm registry.\n */\nexport class YarnScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'npm';\n readonly lockfileNames = ['yarn.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'yarn.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, packageJsonRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'package.json'), 'utf-8').catch(() => null),\n ]);\n\n // Determine direct dependency names from package.json\n const directNames = new Set<string>();\n if (packageJsonRaw) {\n try {\n const pkg = JSON.parse(packageJsonRaw);\n for (const name of Object.keys(pkg.dependencies ?? {})) {\n directNames.add(name);\n }\n for (const name of Object.keys(pkg.devDependencies ?? {})) {\n directNames.add(name);\n }\n } catch {\n // If package.json can't be parsed, all deps are \"unknown\" direct status\n }\n }\n\n const dependencies = this.parseLockfile(lockfileRaw, lockfilePath, directNames);\n\n return {\n projectPath,\n ecosystem: 'npm',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses yarn.lock file and extracts dependencies.\n * Automatically detects and handles both v1 (Classic) and v2+ (Berry) formats.\n */\n private parseLockfile(\n content: string,\n lockfilePath: string,\n directNames: Set<string>\n ): Dependency[] {\n try {\n // Detect Yarn version by checking for v2+ indicators\n const isV2Plus = this.isYarnV2Plus(content);\n\n if (isV2Plus) {\n return this.parseLockfileV2Plus(content, lockfilePath, directNames);\n } else {\n return this.parseLockfileV1(content, lockfilePath, directNames);\n }\n } catch (err) {\n throw new LockfileParseError(\n lockfilePath,\n `Failed to parse yarn.lock: ${err instanceof Error ? err.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Detects if the lockfile is Yarn v2+ (Berry) format.\n * v2+ uses YAML format and contains __metadata section.\n */\n private isYarnV2Plus(content: string): boolean {\n return content.startsWith('__metadata:') ||\n content.includes('\\n__metadata:');\n }\n\n /**\n * Parses Yarn v2+ (Berry) lockfile format.\n * \n * Yarn v2+ format (YAML):\n * ```yaml\n * __metadata:\n * version: 6\n * \n * \"package-name@npm:^1.0.0\":\n * version: 1.2.3\n * resolution: \"package-name@npm:1.2.3\"\n * dependencies:\n * dep1: ^2.0.0\n * checksum: ...\n * languageName: node\n * linkType: hard\n * ```\n */\n private parseLockfileV2Plus(\n content: string,\n lockfilePath: string,\n directNames: Set<string>\n ): Dependency[] {\n const deps: Dependency[] = [];\n const seen = new Map<string, boolean>();\n\n try {\n const parsed = parseYaml(content);\n\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Invalid YAML format');\n }\n\n for (const [key, value] of Object.entries(parsed)) {\n // Skip metadata and workspace entries\n if (key === '__metadata' || key.includes('@workspace:')) {\n continue;\n }\n\n if (typeof value !== 'object' || value === null) {\n continue;\n }\n\n const entry = value as Record<string, any>;\n\n // Extract package name - prefer resolution field as it contains the real package\n let name: string | null = null;\n if (entry.resolution && typeof entry.resolution === 'string') {\n name = this.extractPackageNameFromResolution(entry.resolution);\n }\n // Fall back to extracting from key if resolution is not available\n if (!name) {\n name = this.extractPackageNameV2Plus(key);\n }\n\n const version = entry.version;\n\n if (!name || !version || typeof version !== 'string') {\n continue;\n }\n\n // Deduplicate by name@version\n const depKey = `${name}@${version}`;\n if (seen.has(depKey)) {\n continue;\n }\n seen.set(depKey, true);\n\n deps.push({\n name,\n version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, version),\n });\n }\n } catch (err) {\n throw new Error(`Failed to parse Yarn v2+ lockfile: ${err instanceof Error ? err.message : 'Unknown error'}`);\n }\n\n return deps;\n }\n\n /**\n * Extracts package name from Yarn v2+ resolution field.\n * The resolution field contains the real package name.\n * Examples:\n * \"express@npm:4.18.2\" → \"express\"\n * \"@types/node@npm:20.11.5\" → \"@types/node\"\n * \"lodash@npm:4.17.21\" → \"lodash\"\n */\n private extractPackageNameFromResolution(resolution: string): string | null {\n // Resolution format: \"package-name@npm:version\"\n\n // Handle scoped packages: \"@scope/name@npm:version\"\n if (resolution.startsWith('@')) {\n const match = resolution.match(/^(@[^@]+\\/[^@]+)@/);\n if (match) {\n return match[1];\n }\n }\n\n // Handle regular packages: \"package@npm:version\"\n const match = resolution.match(/^([^@]+)@/);\n if (match) {\n return match[1];\n }\n\n return null;\n }\n\n /**\n * Extracts package name from Yarn v2+ package key.\n * Examples:\n * \"express@npm:^4.18.0\" → \"express\"\n * \"@types/node@npm:^20.0.0\" → \"@types/node\"\n * \"pkg@npm:other@npm:^1.0.0\" → \"pkg\" (aliased packages)\n */\n private extractPackageNameV2Plus(key: string): string | null {\n // Remove the @npm: protocol prefix and version specifier\n // Format: \"package-name@npm:^version\" or \"@scope/name@npm:^version\"\n\n // Handle scoped packages: \"@scope/name@npm:^version\"\n if (key.startsWith('@')) {\n const match = key.match(/^(@[^@]+\\/[^@]+)@/);\n if (match) {\n return match[1];\n }\n }\n\n // Handle regular packages: \"package@npm:^version\"\n const match = key.match(/^([^@]+)@/);\n if (match) {\n return match[1];\n }\n\n return null;\n }\n\n /**\n * Parses Yarn v1 (Classic) lockfile format.\n *\n * Yarn v1 format:\n * ```\n * \"package-name@^1.0.0\":\n * version \"1.2.3\"\n * resolved \"https://...\"\n * integrity sha512-...\n * dependencies:\n * dep1 \"^2.0.0\"\n * ```\n */\n private parseLockfileV1(\n content: string,\n lockfilePath: string,\n directNames: Set<string>\n ): Dependency[] {\n const deps: Dependency[] = [];\n const seen = new Map<string, boolean>(); // Track unique name@version pairs\n\n const lines = content.split('\\n');\n let currentPackage: { names: string[]; version?: string } | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Skip comments and empty lines\n if (line.trim().startsWith('#') || line.trim() === '') {\n continue;\n }\n\n // Package declaration: \"name@version\", name@version (with or without quotes)\n // Can be multiple aliases separated by comma: \"pkg@^1.0.0\", pkg@1.2.3:\n if (line.match(/^[\"\\w@]/) && line.includes(':') && !line.startsWith(' ')) {\n // Save previous package\n if (currentPackage?.version) {\n this.addDependency(currentPackage, directNames, seen, deps);\n }\n\n // Parse package name(s)\n const pkgLine = line.substring(0, line.lastIndexOf(':'));\n const names = pkgLine\n .split(',')\n .map((s) => s.trim().replace(/^[\"']|[\"']$/g, ''))\n .map((s) => this.extractPackageName(s))\n .filter((s): s is string => !!s);\n\n currentPackage = { names, version: undefined };\n }\n // Version field\n else if (line.trim().startsWith('version ') && currentPackage) {\n const match = line.match(/version\\s+\"([^\"]+)\"/);\n if (match) {\n currentPackage.version = match[1];\n }\n }\n }\n\n // Don't forget the last package\n if (currentPackage?.version) {\n this.addDependency(currentPackage, directNames, seen, deps);\n }\n\n return deps;\n }\n\n /**\n * Adds a dependency to the result list (deduplicates by name@version)\n */\n private addDependency(\n pkg: { names: string[]; version?: string },\n directNames: Set<string>,\n seen: Map<string, boolean>,\n deps: Dependency[]\n ): void {\n if (!pkg.version) return;\n\n // Use the first name as the canonical package name\n const name = pkg.names[0];\n if (!name) return;\n\n // Deduplicate: only add once per name@version\n const key = `${name}@${pkg.version}`;\n if (seen.has(key)) return;\n seen.set(key, true);\n\n deps.push({\n name,\n version: pkg.version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, pkg.version),\n });\n }\n\n /**\n * Extracts package name from yarn.lock package declaration.\n * Examples:\n * \"express@^4.18.0\" → \"express\"\n * \"@types/node@^20.0.0\" → \"@types/node\"\n * \"pkg@npm:other@^1.0.0\" → \"pkg\" (aliased packages)\n */\n private extractPackageName(pkgDeclaration: string): string | null {\n // Handle npm: aliases (e.g., \"pkg@npm:other@^1.0.0\")\n if (pkgDeclaration.includes('@npm:')) {\n const beforeAlias = pkgDeclaration.split('@npm:')[0];\n return beforeAlias || null;\n }\n\n // Standard format: name@version\n // For scoped packages: @scope/name@version\n if (pkgDeclaration.startsWith('@')) {\n // Scoped package: @scope/name@version\n const parts = pkgDeclaration.split('@');\n // parts = ['', 'scope/name', 'version']\n if (parts.length >= 3) {\n return `@${parts[1]}`;\n }\n } else {\n // Regular package: name@version\n const atIndex = pkgDeclaration.indexOf('@');\n if (atIndex > 0) {\n return pkgDeclaration.substring(0, atIndex);\n }\n }\n\n return null;\n }\n\n /**\n * Builds a purl (Package URL) for an npm package.\n *\n * Per the purl spec:\n * \"The npm scope @ sign prefix is always percent encoded.\"\n *\n * So @types/node@20.11.5 → pkg:npm/%40types/node@20.11.5\n * And express@4.18.2 → pkg:npm/express@4.18.2\n */\n private buildPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n // Scoped: encode the @ as %40 per purl spec\n return `pkg:npm/%40${name.slice(1)}@${version}`;\n }\n return `pkg:npm/${name}@${version}`;\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport { parse as parseYaml } from 'yaml';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * pnpm dependency scanner.\n *\n * Parses pnpm-lock.yaml to extract the full resolved dependency tree\n * and determine which dependencies are direct vs transitive.\n *\n * Note: pnpm uses the npm ecosystem since it's an alternative\n * package manager for the npm registry.\n */\nexport class PnpmScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'npm';\n readonly lockfileNames = ['pnpm-lock.yaml'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'pnpm-lock.yaml');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const lockfileRaw = await readFile(lockfilePath, 'utf-8');\n\n const dependencies = this.parseLockfile(lockfileRaw, lockfilePath);\n\n return {\n projectPath,\n ecosystem: 'npm',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses pnpm-lock.yaml file and extracts dependencies.\n * \n * pnpm-lock.yaml format (v5.4+):\n * ```yaml\n * lockfileVersion: 5.4\n * \n * dependencies:\n * express: 4.18.2\n * \n * devDependencies:\n * typescript: 5.0.0\n * \n * packages:\n * /express/4.18.2:\n * resolution: {integrity: sha512-...}\n * dependencies:\n * accepts: 1.3.8\n * /@types/node/20.11.5:\n * resolution: {integrity: sha512-...}\n * dev: true\n * ```\n * \n * pnpm-lock.yaml format (v6.0+):\n * ```yaml\n * lockfileVersion: '6.0'\n * \n * dependencies:\n * express:\n * specifier: ^4.18.0\n * version: 4.18.2\n * \n * packages:\n * /express@4.18.2:\n * resolution: {integrity: sha512-...}\n * ```\n */\n private parseLockfile(\n content: string,\n lockfilePath: string\n ): Dependency[] {\n try {\n const parsed = parseYaml(content);\n\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Invalid YAML format');\n }\n\n const lockfile = parsed as PnpmLockfile;\n\n // Determine lockfile version format\n const lockfileVersion = this.parseLockfileVersion(lockfile.lockfileVersion);\n\n // Extract direct dependency names from lockfile\n const directNames = this.extractDirectDependencies(lockfile);\n\n return this.extractDependencies(lockfile, lockfileVersion, directNames);\n } catch (err) {\n throw new LockfileParseError(\n lockfilePath,\n `Failed to parse pnpm-lock.yaml: ${err instanceof Error ? err.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Extracts direct dependency names from pnpm lockfile.\n * \n * Supports both formats:\n * - pnpm v5.x: root-level dependencies/devDependencies\n * - pnpm v6+: importers['.'].dependencies/devDependencies\n */\n private extractDirectDependencies(lockfile: PnpmLockfile): Set<string> {\n const directNames = new Set<string>();\n\n // Try modern format first (v6+): importers section\n if (lockfile.importers && typeof lockfile.importers === 'object') {\n const rootImporter = lockfile.importers['.'];\n if (rootImporter && typeof rootImporter === 'object') {\n // Extract from importers['.'].dependencies\n if (rootImporter.dependencies && typeof rootImporter.dependencies === 'object') {\n for (const name of Object.keys(rootImporter.dependencies)) {\n directNames.add(name);\n }\n }\n\n // Extract from importers['.'].devDependencies\n if (rootImporter.devDependencies && typeof rootImporter.devDependencies === 'object') {\n for (const name of Object.keys(rootImporter.devDependencies)) {\n directNames.add(name);\n }\n }\n }\n }\n\n // Fallback to legacy format (v5.x): root-level dependencies\n if (directNames.size === 0) {\n // Extract from root-level dependencies section\n if (lockfile.dependencies && typeof lockfile.dependencies === 'object') {\n for (const name of Object.keys(lockfile.dependencies)) {\n directNames.add(name);\n }\n }\n\n // Extract from root-level devDependencies section\n if (lockfile.devDependencies && typeof lockfile.devDependencies === 'object') {\n for (const name of Object.keys(lockfile.devDependencies)) {\n directNames.add(name);\n }\n }\n }\n\n return directNames;\n }\n\n /**\n * Parses lockfile version (can be string or number)\n */\n private parseLockfileVersion(version: string | number | undefined): number {\n if (typeof version === 'number') {\n return version;\n }\n if (typeof version === 'string') {\n const parsed = parseFloat(version);\n return isNaN(parsed) ? 5.4 : parsed;\n }\n return 5.4; // Default to 5.4 if not specified\n }\n\n /**\n * Extracts dependencies from the lockfile packages section\n */\n private extractDependencies(\n lockfile: PnpmLockfile,\n lockfileVersion: number,\n directNames: Set<string>\n ): Dependency[] {\n const deps: Dependency[] = [];\n const seen = new Map<string, boolean>();\n\n if (!lockfile.packages || typeof lockfile.packages !== 'object') {\n return deps;\n }\n\n for (const [pkgPath, pkgInfo] of Object.entries(lockfile.packages)) {\n if (!pkgInfo || typeof pkgInfo !== 'object') {\n continue;\n }\n\n // Skip workspace packages (e.g., \"/project@workspace:*\")\n if (pkgPath.includes('@workspace:')) {\n continue;\n }\n\n // Extract package name and version from path\n // v5.x format: \"/express/4.18.2\", \"/@types/node/20.11.5\"\n // v6+ format: \"/express@4.18.2\", \"/@types/node@20.11.5\"\n const { name, version } = this.parsePackagePath(pkgPath, lockfileVersion);\n\n if (!name || !version) {\n continue;\n }\n\n // Deduplicate by name@version\n const depKey = `${name}@${version}`;\n if (seen.has(depKey)) {\n continue;\n }\n seen.set(depKey, true);\n\n deps.push({\n name,\n version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, version),\n });\n }\n\n return deps;\n }\n\n /**\n * Parses package path to extract name and version.\n * \n * pnpm v5.x format:\n * \"/express/4.18.2\" → name: \"express\", version: \"4.18.2\"\n * \"/@types/node/20.11.5\" → name: \"@types/node\", version: \"20.11.5\"\n * \"/accepts/1.3.8\" → name: \"accepts\", version: \"1.3.8\"\n * \n * pnpm v6+ format:\n * \"/express@4.18.2\" → name: \"express\", version: \"4.18.2\"\n * \"/@types/node@20.11.5\" → name: \"@types/node\", version: \"20.11.5\"\n * \"/accepts@1.3.8\" → name: \"accepts\", version: \"1.3.8\"\n * \n * Also handles peer dependency suffixes:\n * \"/pkg@1.0.0_dep@2.0.0\" → name: \"pkg\", version: \"1.0.0\"\n * \"/pkg@1.0.0(dep@2.0.0)\" → name: \"pkg\", version: \"1.0.0\"\n */\n private parsePackagePath(pkgPath: string, lockfileVersion: number): { name: string | null; version: string | null } {\n // Remove leading slash\n const path = pkgPath.startsWith('/') ? pkgPath.slice(1) : pkgPath;\n\n // Remove peer dependency suffixes (anything after _ or opening parenthesis)\n const cleanPath = path.split('_')[0].split('(')[0];\n\n if (!cleanPath) {\n return { name: null, version: null };\n }\n\n // v6+ format uses @ separator between name and version\n if (lockfileVersion >= 6) {\n return this.parseV6Format(cleanPath);\n }\n\n // v5.x format uses / separator between name and version\n return this.parseV5Format(cleanPath);\n }\n\n /**\n * Parses v6+ format: \"express@4.18.2\" or \"@types/node@20.11.5\"\n */\n private parseV6Format(path: string): { name: string | null; version: string | null } {\n // Handle scoped packages: \"@scope/name@version\"\n if (path.startsWith('@')) {\n // Find the last @ which separates the version\n const lastAtIndex = path.lastIndexOf('@');\n if (lastAtIndex <= 0) {\n return { name: null, version: null };\n }\n\n const name = path.substring(0, lastAtIndex);\n const version = path.substring(lastAtIndex + 1);\n\n return { name, version };\n }\n\n // Regular packages: \"name@version\"\n const atIndex = path.indexOf('@');\n if (atIndex < 0) {\n return { name: null, version: null };\n }\n\n const name = path.substring(0, atIndex);\n const version = path.substring(atIndex + 1);\n\n return { name, version };\n }\n\n /**\n * Parses v5.x format: \"express/4.18.2\" or \"@types/node/20.11.5\"\n */\n private parseV5Format(path: string): { name: string | null; version: string | null } {\n // Handle scoped packages: \"@scope/name/version\"\n if (path.startsWith('@')) {\n const parts = path.split('/');\n // parts = ['@scope', 'name', 'version']\n if (parts.length < 3) {\n return { name: null, version: null };\n }\n\n const name = `${parts[0]}/${parts[1]}`;\n const version = parts[2];\n\n return { name, version };\n }\n\n // Regular packages: \"name/version\"\n const slashIndex = path.indexOf('/');\n if (slashIndex < 0) {\n return { name: null, version: null };\n }\n\n const name = path.substring(0, slashIndex);\n const version = path.substring(slashIndex + 1);\n\n return { name, version };\n }\n\n /**\n * Builds a purl (Package URL) for an npm package.\n *\n * Per the purl spec:\n * \"The npm scope @ sign prefix is always percent encoded.\"\n *\n * So @types/node@20.11.5 → pkg:npm/%40types/node@20.11.5\n * And express@4.18.2 → pkg:npm/express@4.18.2\n */\n private buildPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n // Scoped: encode the @ as %40 per purl spec\n return `pkg:npm/%40${name.slice(1)}@${version}`;\n }\n return `pkg:npm/${name}@${version}`;\n }\n}\n\n// ─── Types for pnpm-lock.yaml parsing ─────────────────────────\n\ninterface PnpmLockfile {\n lockfileVersion?: string | number;\n // Legacy format (v5.x): root-level dependencies\n dependencies?: Record<string, string | PnpmDependencyEntry>;\n devDependencies?: Record<string, string | PnpmDependencyEntry>;\n // Modern format (v6+): importers section\n importers?: Record<string, PnpmImporter>;\n packages?: Record<string, PnpmPackageInfo>;\n}\n\ninterface PnpmImporter {\n dependencies?: Record<string, PnpmDependencyEntry>;\n devDependencies?: Record<string, PnpmDependencyEntry>;\n specifiers?: Record<string, string>;\n}\n\ninterface PnpmDependencyEntry {\n specifier?: string;\n version?: string;\n}\n\ninterface PnpmPackageInfo {\n resolution?: {\n integrity?: string;\n tarball?: string;\n };\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n dev?: boolean;\n optional?: boolean;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Deno dependency scanner.\n *\n * Limitations:\n * - HTTPS/remote imports (deno.lock `remote` section) are not scanned.\n * - JSR packages are not directly supported by OSV so vulnerability scan will fail\n *\n * deno.lock v4/v5 format:\n * ```json\n * {\n * \"version\": \"4\",\n * \"specifiers\": {\n * \"jsr:@std/assert@^1.0.0\": \"1.0.10\",\n * \"npm:express@^4.18.0\": \"4.21.2\"\n * },\n * \"jsr\": {\n * \"@std/assert@1.0.10\": { \"integrity\": \"...\" },\n * \"@std/internal@1.0.6\": { \"integrity\": \"...\" }\n * },\n * \"npm\": {\n * \"express@4.21.2\": { \"integrity\": \"...\", \"dependencies\": {...} }\n * }\n * }\n * ```\n *\n * deno.lock v3 format:\n * ```json\n * {\n * \"version\": \"3\",\n * \"packages\": {\n * \"specifiers\": {\n * \"jsr:@std/path@^1.0.0\": \"jsr:@std/path@1.0.8\",\n * \"npm:hono@^4.0.0\": \"npm:hono@4.6.20\"\n * },\n * \"jsr\": {\n * \"@std/path@1.0.8\": { \"integrity\": \"...\" },\n * \"@std/internal@1.0.6\": { \"integrity\": \"...\" }\n * },\n * \"npm\": {\n * \"hono@4.6.20\": { \"integrity\": \"...\", \"dependencies\": {...} }\n * }\n * }\n * }\n * ```\n */\nexport class DenoScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'deno';\n readonly lockfileNames = ['deno.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n for (const name of this.lockfileNames) {\n const lockfilePath = path.join(projectPath, name);\n if (existsSync(lockfilePath)) return lockfilePath;\n }\n return null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const lockfileRaw = await readFile(lockfilePath, 'utf-8');\n\n let lockfile: DenoLockfile;\n try {\n lockfile = JSON.parse(lockfileRaw);\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON');\n }\n\n const dependencies = this.parseLockfile(lockfile);\n\n return {\n projectPath,\n ecosystem: 'deno',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n\n\n /**\n * Parses the lockfile and extracts dependencies from both\n * npm and jsr package registries.\n *\n * Supports v3 (packages nested under `packages`), v4, and v5 (top-level jsr/npm sections).\n * Uses lockfile specifiers to determine direct vs transitive dependencies.\n */\n private parseLockfile(lockfile: DenoLockfile): Dependency[] {\n const deps: Dependency[] = [];\n\n // Extract direct dependencies from lockfile specifiers\n const directNames = this.extractDirectDependencies(lockfile);\n\n // Normalize v3 vs v4/v5 structure (prefer top-level, fall back to nested)\n const jsrPackages = lockfile.jsr ?? lockfile.packages?.jsr ?? {};\n const npmPackages = lockfile.npm ?? lockfile.packages?.npm ?? {};\n\n // Parse JSR packages: keys are like \"@std/assert@1.0.10\"\n for (const key of Object.keys(jsrPackages)) {\n const parsed = this.parsePackageKey(key);\n if (!parsed) continue;\n\n deps.push({\n name: parsed.name,\n version: parsed.version,\n direct: directNames.has(`jsr:${parsed.name}`),\n ecosystem: 'deno', // JSR packages belong to Deno ecosystem\n purl: this.buildJsrPurl(parsed.name, parsed.version),\n });\n }\n\n // Parse npm packages: keys are like \"express@4.21.2\"\n for (const key of Object.keys(npmPackages)) {\n const parsed = this.parsePackageKey(key);\n if (!parsed) continue;\n\n deps.push({\n name: parsed.name,\n version: parsed.version,\n direct: directNames.has(`npm:${parsed.name}`),\n ecosystem: 'npm', // npm packages belong to npm ecosystem (for CVE tracking)\n purl: this.buildNpmPurl(parsed.name, parsed.version),\n });\n }\n\n return deps;\n }\n\n /**\n * Extracts direct dependency names from lockfile specifiers.\n *\n * Returns a set of ecosystem-qualified package names like \"jsr:@std/assert\" or \"npm:express\".\n * The ecosystem prefix prevents collisions if the same package name exists in both registries.\n */\n private extractDirectDependencies(lockfile: DenoLockfile): Set<string> {\n const directNames = new Set<string>();\n\n // Get specifiers from v3 (packages.specifiers) or v4/v5 (top-level specifiers)\n const specifiers = lockfile.specifiers ?? lockfile.packages?.specifiers ?? {};\n\n for (const [constraint, resolved] of Object.entries(specifiers)) {\n // Skip non-package URL schemes (file:, https:, data:, etc.)\n if (resolved.startsWith('file:') || resolved.startsWith('https:') || resolved.startsWith('http:') || resolved.startsWith('data:')) {\n continue;\n }\n\n // Determine ecosystem from constraint\n let ecosystem: 'jsr' | 'npm' | null = null;\n if (constraint.startsWith('jsr:')) {\n ecosystem = 'jsr';\n } else if (constraint.startsWith('npm:')) {\n ecosystem = 'npm';\n }\n\n if (!ecosystem) continue; // Skip if we can't determine ecosystem\n\n let resolvedKey = resolved;\n\n if (resolved.startsWith('jsr:') || resolved.startsWith('npm:')) {\n // v3 or some v4 formats: resolved is like \"jsr:@std/path@1.0.8\" or \"npm:express@4.21.2\"\n resolvedKey = resolved.replace(/^(jsr:|npm:)/, '');\n const parsed = this.parsePackageKey(resolvedKey);\n if (parsed) {\n directNames.add(`${ecosystem}:${parsed.name}`);\n }\n } else {\n // v4/v5 format: resolved is just the version like \"1.0.10\"\n // Extract name from constraint key and use directly\n const name = this.extractNameFromSpecifier(constraint);\n if (name) {\n directNames.add(`${ecosystem}:${name}`);\n }\n }\n }\n\n return directNames;\n }\n\n /**\n * Parses a package key like \"@std/assert@1.0.10\" or \"express@4.21.2\"\n * into { name, version }.\n *\n * Handles scoped packages where the name starts with @ (e.g., @std/assert).\n * In that case the version separator is the LAST @ sign.\n */\n private parsePackageKey(key: string): { name: string; version: string } | null {\n // Find the last @ which separates name from version\n const lastAtIndex = key.lastIndexOf('@');\n if (lastAtIndex <= 0) return null;\n\n const name = key.slice(0, lastAtIndex);\n const version = key.slice(lastAtIndex + 1);\n\n if (!name || !version) return null;\n return { name, version };\n }\n\n\n\n /**\n * Extracts the package name from a Deno import specifier.\n *\n * Examples:\n * \"jsr:@std/assert@^1.0.0\" → \"@std/assert\"\n * \"npm:express@^4.18.0\" → \"express\"\n * \"npm:@hono/hono@^4.0.0\" → \"@hono/hono\"\n * \"lodash\" (bare) → \"lodash\"\n */\n private extractNameFromSpecifier(specifier: string): string | null {\n // Strip jsr: or npm: prefix\n const withoutPrefix = specifier.replace(/^(jsr:|npm:)/, '');\n if (!withoutPrefix) return null;\n\n // For scoped packages (@scope/name@version), find the version @\n if (withoutPrefix.startsWith('@')) {\n // Find the @ after the scoped name portion\n const slashIndex = withoutPrefix.indexOf('/');\n if (slashIndex === -1) return null;\n const afterSlash = withoutPrefix.indexOf('@', slashIndex);\n if (afterSlash === -1) return withoutPrefix; // No version constraint\n return withoutPrefix.slice(0, afterSlash);\n }\n\n // Unscoped: \"express@^4.18.0\" → \"express\" or bare \"lodash\" → \"lodash\"\n const atIndex = withoutPrefix.indexOf('@');\n if (atIndex === -1) return withoutPrefix;\n return withoutPrefix.slice(0, atIndex);\n }\n\n /**\n * Builds a purl for a JSR package.\n *\n * JSR packages use the \"jsr\" purl type (non-standard but descriptive).\n * For scoped packages, both @ and all / characters are percent-encoded.\n * Example: `pkg:jsr/%40std%2Fassert@1.0.10`\n */\n private buildJsrPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n // Encode @ and all / characters: @scope/sub/name -> %40scope%2Fsub%2Fname\n const encoded = '%40' + name.slice(1).replace(/\\//g, '%2F');\n return `pkg:jsr/${encoded}@${version}`;\n }\n return `pkg:jsr/${name}@${version}`;\n }\n\n /**\n * Builds a purl for an npm package used via Deno.\n *\n * Uses the standard npm purl type since these are npm packages.\n * Per npm purl spec, only @ is encoded, / remains as namespace separator.\n * Example: `pkg:npm/%40std/assert@1.0.10` or `pkg:npm/express@4.21.2`\n */\n private buildNpmPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n return `pkg:npm/%40${name.slice(1)}@${version}`;\n }\n return `pkg:npm/${name}@${version}`;\n }\n}\n\n// ─── Types for deno.lock parsing ─────────────────────────────────\n\n/** Represents the deno.lock file structure (supports v3, v4, and v5) */\ninterface DenoLockfile {\n version?: string;\n /** v4/v5: top-level specifiers mapping (constraint -> resolved version) */\n specifiers?: Record<string, string>;\n /** v4/v5: top-level jsr packages */\n jsr?: Record<string, DenoLockfilePackage>;\n /** v4/v5: top-level npm packages */\n npm?: Record<string, DenoLockfilePackage>;\n /** v3: all packages nested under this key */\n packages?: {\n specifiers?: Record<string, string>;\n jsr?: Record<string, DenoLockfilePackage>;\n npm?: Record<string, DenoLockfilePackage>;\n };\n}\n\ninterface DenoLockfilePackage {\n integrity?: string;\n /** Dependencies: npm uses Record<string, string> (name -> version), JSR uses string[] (specifier list) */\n dependencies?: Record<string, string> | string[];\n}","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Python / Poetry dependency scanner.\n *\n * Parses `poetry.lock` (TOML format) to extract the full resolved\n * dependency tree. Reads `pyproject.toml` to determine which packages\n * are direct dependencies vs transitive.\n *\n * poetry.lock format:\n * ```toml\n * [[package]]\n * name = \"requests\"\n * version = \"2.31.0\"\n * description = \"Python HTTP for Humans.\"\n * optional = false\n * python-versions = \">=3.8\"\n * ```\n *\n * Direct dependencies are identified by parsing the `[tool.poetry.dependencies]`\n * and `[tool.poetry.group.*.dependencies]` sections of `pyproject.toml`.\n *\n * Note: Uses a simple TOML parser since poetry.lock has a very\n * regular structure (just [[package]] entries). No need for a full\n * TOML library.\n */\nexport class PoetryScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'poetry';\n readonly lockfileNames = ['poetry.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'poetry.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, pyprojectRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'pyproject.toml'), 'utf-8').catch(() => null),\n ]);\n\n const packages = this.parseLockfile(lockfileRaw, lockfilePath);\n const directNames = pyprojectRaw ? this.parsePyprojectToml(pyprojectRaw) : new Set<string>();\n\n const dependencies: Dependency[] = [];\n for (const pkg of packages) {\n dependencies.push({\n name: this.normalizePipName(pkg.name),\n version: pkg.version,\n direct: directNames.size > 0 ? directNames.has(this.normalizePipName(pkg.name)) : true,\n ecosystem: 'poetry',\n purl: this.buildPurl(pkg.name, pkg.version),\n });\n }\n\n return {\n projectPath,\n ecosystem: 'poetry',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses poetry.lock by splitting on [[package]] blocks.\n * Lightweight parser that handles the regular structure\n * without needing a full TOML library.\n */\n private parseLockfile(content: string, lockfilePath: string): PoetryPackage[] {\n const packages: PoetryPackage[] = [];\n const blocks = content.split(/^\\[\\[package\\]\\]$/m);\n\n for (const block of blocks) {\n if (!block.trim()) continue;\n\n const name = this.extractField(block, 'name');\n const version = this.extractField(block, 'version');\n\n if (name && version) {\n packages.push({ name, version });\n }\n }\n\n if (packages.length === 0 && content.includes('[[package]]')) {\n throw new LockfileParseError(lockfilePath, 'Failed to parse any packages from poetry.lock');\n }\n\n return packages;\n }\n\n /**\n * Extracts a string field value from a TOML block.\n * Handles: `name = \"value\"` format.\n */\n private extractField(block: string, fieldName: string): string | null {\n const regex = new RegExp(`^${fieldName}\\\\s*=\\\\s*\"([^\"]*)\"`, 'm');\n const match = block.match(regex);\n return match ? match[1] : null;\n }\n\n /**\n * Parses `pyproject.toml` to extract direct dependency names.\n *\n * Looks for:\n * - `[tool.poetry.dependencies]` — main dependencies\n * - `[tool.poetry.group.dev.dependencies]` — dev dependencies\n * - `[tool.poetry.group.*.dependencies]` — other groups\n *\n * Supports formats:\n * - `requests = \"^2.31.0\"`\n * - `requests = { version = \"^2.31.0\", optional = true }`\n * - `python = \"^3.12\"` — skipped (the Python interpreter itself)\n */\n private parsePyprojectToml(content: string): Set<string> {\n const directNames = new Set<string>();\n let inDepsSection = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n // Detect section headers\n if (line.startsWith('[')) {\n inDepsSection =\n line === '[tool.poetry.dependencies]' ||\n /^\\[tool\\.poetry\\.group\\.[^\\]]+\\.dependencies\\]$/.test(line);\n continue;\n }\n\n if (inDepsSection && line && !line.startsWith('#')) {\n // Extract package name from \"name = ...\" lines\n const match = line.match(/^([a-zA-Z0-9_][a-zA-Z0-9._-]*)\\s*=/);\n if (match && match[1]) {\n const name = this.normalizePipName(match[1]);\n // Skip the python version constraint\n if (name !== 'python') {\n directNames.add(name);\n }\n }\n }\n }\n\n return directNames;\n }\n\n /**\n * Normalizes a pip package name per PEP 503.\n * Converts to lowercase and replaces any run of [-_.] with a single hyphen.\n */\n private normalizePipName(name: string): string {\n return name.toLowerCase().replace(/[-_.]+/g, '-');\n }\n\n /**\n * Builds a purl for a PyPI package.\n * Per purl spec, the type is \"pypi\" (not \"poetry\").\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:pypi/${this.normalizePipName(name)}@${version}`;\n }\n}\n\n// ─── Internal types ──────────────────────────────────────────────\n\ninterface PoetryPackage {\n name: string;\n version: string;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Python / UV dependency scanner.\n *\n * Parses `uv.lock` to extract the full resolved dependency tree.\n * Reads `pyproject.toml` to determine which packages are direct\n * dependencies vs transitive.\n *\n * uv.lock format:\n * ```toml\n * version = 1\n * requires-python = \">=3.12\"\n *\n * [[package]]\n * name = \"requests\"\n * version = \"2.31.0\"\n * source = { registry = \"https://pypi.org/simple\" }\n * dependencies = [\n * { name = \"certifi\" },\n * { name = \"charset-normalizer\" },\n * ]\n * ```\n *\n * The root project is typically included as a `[[package]]` entry\n * without a `source` field (or with `source = { editable = \".\" }`).\n * It is excluded from the dependency list.\n *\n * Note: Uses a simple TOML parser since uv.lock has a very\n * regular structure. No need for a full TOML library.\n */\nexport class UvScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'uv';\n readonly lockfileNames = ['uv.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'uv.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, pyprojectRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'pyproject.toml'), 'utf-8').catch(() => null),\n ]);\n\n const packages = this.parseLockfile(lockfileRaw, lockfilePath);\n const projectName = pyprojectRaw ? this.extractProjectName(pyprojectRaw) : null;\n const directNames = pyprojectRaw ? this.parsePyprojectDeps(pyprojectRaw) : new Set<string>();\n\n const dependencies: Dependency[] = [];\n for (const pkg of packages) {\n // Skip the root project itself\n if (pkg.isEditable) continue;\n if (projectName && this.normalizePipName(pkg.name) === this.normalizePipName(projectName)) {\n continue;\n }\n\n dependencies.push({\n name: this.normalizePipName(pkg.name),\n version: pkg.version,\n direct: directNames.size > 0 ? directNames.has(this.normalizePipName(pkg.name)) : true,\n ecosystem: 'uv',\n purl: this.buildPurl(pkg.name, pkg.version),\n });\n }\n\n return {\n projectPath,\n ecosystem: 'uv',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses uv.lock by splitting on [[package]] blocks.\n * Lightweight parser that handles the regular structure\n * without needing a full TOML library.\n */\n private parseLockfile(content: string, lockfilePath: string): UvPackage[] {\n const packages: UvPackage[] = [];\n const blocks = content.split(/^\\[\\[package\\]\\]$/m);\n\n for (const block of blocks) {\n if (!block.trim()) continue;\n\n const name = this.extractField(block, 'name');\n const version = this.extractField(block, 'version');\n\n if (name && version) {\n // Detect editable/virtual packages (root project)\n const isEditable = /source\\s*=\\s*\\{[^}]*editable\\s*=/.test(block) ||\n /source\\s*=\\s*\\{[^}]*virtual\\s*=/.test(block);\n packages.push({ name, version, isEditable });\n }\n }\n\n if (packages.length === 0 && content.includes('[[package]]')) {\n throw new LockfileParseError(lockfilePath, 'Failed to parse any packages from uv.lock');\n }\n\n return packages;\n }\n\n /**\n * Extracts a string field value from a TOML block.\n * Handles: `name = \"value\"` format.\n */\n private extractField(block: string, fieldName: string): string | null {\n const regex = new RegExp(`^${fieldName}\\\\s*=\\\\s*\"([^\"]*)\"`, 'm');\n const match = block.match(regex);\n return match ? match[1] : null;\n }\n\n /**\n * Extracts the project name from `pyproject.toml`.\n * Looks for `name = \"...\"` under `[project]`.\n */\n private extractProjectName(content: string): string | null {\n let inProjectSection = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n if (line.startsWith('[')) {\n inProjectSection = line === '[project]';\n continue;\n }\n\n if (inProjectSection) {\n const match = line.match(/^name\\s*=\\s*\"([^\"]*)\"/);\n if (match) return match[1];\n }\n }\n\n return null;\n }\n\n /**\n * Parses `pyproject.toml` to extract direct dependency names.\n *\n * Looks for:\n * - `[project]` → `dependencies = [...]` (PEP 621)\n * - `[project.optional-dependencies]` (extras)\n * - `[dependency-groups]` (PEP 735, used by uv for dev deps)\n *\n * Dependency strings follow PEP 508:\n * - `\"requests>=2.31.0\"`\n * - `\"flask[dotenv]>=3.0\"`\n * - `\"black\"` (bare name)\n */\n private parsePyprojectDeps(content: string): Set<string> {\n const directNames = new Set<string>();\n\n // Extract dependencies from PEP 621 [project] dependencies array\n this.extractInlineArray(content, directNames);\n\n // Extract from [dependency-groups] sections (PEP 735)\n this.extractDependencyGroups(content, directNames);\n\n return directNames;\n }\n\n /**\n * Extracts dependency names from PEP 621 `dependencies = [...]` arrays\n * and `[project.optional-dependencies]` sections.\n */\n private extractInlineArray(content: string, directNames: Set<string>): void {\n // Match multi-line array patterns like:\n // dependencies = [\n // \"requests>=2.31.0\",\n // \"flask\",\n // ]\n const arrayRegex = /(?:^dependencies|^[a-zA-Z0-9_-]+)\\s*=\\s*\\[([^\\]]*)\\]/gm;\n let match;\n while ((match = arrayRegex.exec(content)) !== null) {\n const arrayContent = match[1];\n this.extractPepNames(arrayContent, directNames);\n }\n }\n\n /**\n * Extracts dependency names from [dependency-groups] sections.\n * Format:\n * ```toml\n * [dependency-groups]\n * dev = [\"pytest>=7.0\", \"black\"]\n * ```\n */\n private extractDependencyGroups(content: string, directNames: Set<string>): void {\n let inDepGroups = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n if (line.startsWith('[')) {\n inDepGroups = line === '[dependency-groups]';\n continue;\n }\n\n if (inDepGroups && line && !line.startsWith('#')) {\n // Match: dev = [\"pytest>=7.0\", \"black\"]\n const arrayMatch = line.match(/^[a-zA-Z0-9_-]+\\s*=\\s*\\[([^\\]]*)\\]/);\n if (arrayMatch) {\n this.extractPepNames(arrayMatch[1], directNames);\n }\n }\n }\n }\n\n /**\n * Extracts PEP 508 package names from a comma-separated\n * list of quoted dependency strings.\n */\n private extractPepNames(content: string, directNames: Set<string>): void {\n const depStrings = content.match(/\"([^\"]*)\"/g);\n if (!depStrings) return;\n\n for (const quoted of depStrings) {\n const depStr = quoted.replace(/\"/g, '').trim();\n if (!depStr) continue;\n\n // PEP 508: name is everything before the first specifier char\n const nameMatch = depStr.match(/^([a-zA-Z0-9_][a-zA-Z0-9._-]*)/);\n if (nameMatch && nameMatch[1]) {\n directNames.add(this.normalizePipName(nameMatch[1]));\n }\n }\n }\n\n /**\n * Normalizes a pip package name per PEP 503.\n * Converts to lowercase and replaces any run of [-_.] with a single hyphen.\n */\n private normalizePipName(name: string): string {\n return name.toLowerCase().replace(/[-_.]+/g, '-');\n }\n\n /**\n * Builds a purl for a PyPI package.\n * Per purl spec, the type is \"pypi\" (not \"uv\").\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:pypi/${this.normalizePipName(name)}@${version}`;\n }\n}\n\n// ─── Internal types ──────────────────────────────────────────────\n\ninterface UvPackage {\n name: string;\n version: string;\n isEditable: boolean;\n}\n","import type { DependencyScanner } from './scanner.interface.js';\nimport type { ScanResult } from '../core/types.js';\nimport { NpmScanner } from './npm/npm-scanner.js';\nimport { NugetScanner } from './nuget/nuget-scanner.js';\nimport { CargoScanner } from './cargo/cargo-scanner.js';\nimport { PipScanner } from './pip/pip-scanner.js';\nimport { MavenScanner } from './maven/maven-scanner.js';\nimport { GoScanner } from './go/go-scanner.js';\nimport { RubyScanner } from './ruby/ruby-scanner.js';\nimport { ComposerScanner } from './composer/composer-scanner.js';\nimport { NoLockfileError } from '../core/errors.js';\nimport { YarnScanner } from './yarn/yarn-scanner.js';\nimport { PnpmScanner } from './pnpm/pnpm-scanner.js';\nimport { DenoScanner } from './deno/deno-scanner.js';\nimport { PoetryScanner } from './poetry/poetry-scanner.js';\nimport { UvScanner } from './uv/uv-scanner.js';\n\n/**\n * Registry of all available dependency scanners.\n * Auto-detects the correct scanner for a given project.\n */\nexport class ScannerRegistry {\n private scanners: DependencyScanner[];\n\n constructor() {\n this.scanners = [\n new NpmScanner(),\n new NugetScanner(),\n new CargoScanner(),\n new PipScanner(),\n new PoetryScanner(),\n new UvScanner(),\n new MavenScanner(),\n new GoScanner(),\n new RubyScanner(),\n new ComposerScanner(),\n new YarnScanner(),\n new PnpmScanner(),\n new DenoScanner(),\n ];\n }\n\n /**\n * Auto-detects the project's ecosystem and scans dependencies.\n * Tries each registered scanner in order until one matches.\n */\n async detectAndScan(projectPath: string): Promise<ScanResult> {\n for (const scanner of this.scanners) {\n const lockfilePath = await scanner.detect(projectPath);\n if (lockfilePath) {\n return scanner.scan(projectPath, lockfilePath);\n }\n }\n throw new NoLockfileError(projectPath);\n }\n\n /** Returns a specific scanner by ecosystem name */\n getScanner(ecosystem: string): DependencyScanner | undefined {\n return this.scanners.find((s) => s.ecosystem === ecosystem);\n }\n\n /** Lists all registered ecosystems */\n listEcosystems(): string[] {\n return this.scanners.map((s) => s.ecosystem);\n }\n}\n","import { randomUUID } from 'crypto';\nimport type { SbomGenerator } from './generator.interface.js';\nimport type { ScanResult, Sbom, SbomFormat, Dependency } from '../core/types.js';\nimport {\n DEFAULT_TOOL_VERSION,\n VERIMU_TOOL_DESCRIPTION,\n VERIMU_TOOL_NAME,\n VERIMU_TOOL_WEBSITE,\n deriveSupplierName,\n extractProjectName,\n} from './shared.js';\n\n/** Supported CycloneDX spec versions */\nexport type CycloneDxSpecVersion = '1.4' | '1.5' | '1.6' | '1.7';\n\nconst SCHEMA_URLS: Record<CycloneDxSpecVersion, string> = {\n '1.4': 'http://cyclonedx.org/schema/bom-1.4.schema.json',\n '1.5': 'http://cyclonedx.org/schema/bom-1.5.schema.json',\n '1.6': 'http://cyclonedx.org/schema/bom-1.6.schema.json',\n '1.7': 'http://cyclonedx.org/schema/bom-1.7.schema.json',\n};\n\n/**\n * Generates CycloneDX JSON SBOMs (versions 1.4 – 1.7).\n *\n * CycloneDX is the preferred SBOM format for CRA compliance.\n * Spec: https://cyclonedx.org/specification/overview/\n *\n * NTIA minimum elements are satisfied:\n * - metadata.supplier (supplier of the root software)\n * - components[].supplier (supplier of each dependency)\n * - components[].name, version, purl, bom-ref\n * - dependencies[] graph\n *\n * Schema differences handled per version:\n * - 1.4: metadata.tools is a flat array of { vendor, name, version, ... }\n * - 1.5+: metadata.tools is { components: [...] }\n */\nexport class CycloneDxGenerator implements SbomGenerator {\n readonly format: SbomFormat = 'cyclonedx-json';\n\n constructor(private readonly specVersion: CycloneDxSpecVersion = '1.7') { }\n\n generate(scanResult: ScanResult, toolVersion: string = DEFAULT_TOOL_VERSION): Sbom {\n const bom = this.buildBom(scanResult, toolVersion);\n const content = JSON.stringify(bom, null, 2);\n\n return {\n format: 'cyclonedx-json',\n specVersion: this.specVersion,\n content,\n componentCount: scanResult.dependencies.length,\n generatedAt: new Date().toISOString(),\n };\n }\n\n private buildBom(scanResult: ScanResult, toolVersion: string): CycloneDxBom {\n const projectName = extractProjectName(scanResult.projectPath);\n\n return {\n $schema: SCHEMA_URLS[this.specVersion],\n bomFormat: 'CycloneDX',\n specVersion: this.specVersion,\n serialNumber: `urn:uuid:${randomUUID()}`,\n version: 1,\n metadata: {\n timestamp: new Date().toISOString(),\n tools: this.buildTools(toolVersion),\n // NTIA: metadata.supplier — the org supplying the root software\n supplier: {\n name: projectName,\n },\n component: {\n type: 'application',\n name: projectName,\n 'bom-ref': 'root-component',\n supplier: { name: projectName },\n },\n },\n components: scanResult.dependencies.map((dep) => this.toComponent(dep)),\n dependencies: this.buildDependencyGraph(scanResult),\n };\n }\n\n /** Converts a Verimu Dependency to a CycloneDX component */\n private toComponent(dep: Dependency): CycloneDxComponent {\n return {\n type: 'library',\n name: dep.name,\n version: dep.version,\n purl: dep.purl,\n 'bom-ref': dep.purl,\n scope: dep.direct ? 'required' : 'optional',\n // NTIA: component.supplier — derived from npm scope or package name\n supplier: {\n name: deriveSupplierName(dep.name),\n },\n };\n }\n\n /**\n * Builds the dependency graph section of the SBOM.\n *\n * The root component depends on all dependencies (direct + transitive).\n * This ensures a single root node in the graph, which NTIA validators expect.\n *\n * We include ALL deps under root (not just direct) because from a flat lockfile\n * we can't reliably reconstruct which transitive dep belongs to which direct dep.\n * This is still valid per the CycloneDX spec — it represents a complete but flat\n * dependency relationship.\n */\n private buildDependencyGraph(scanResult: ScanResult): CycloneDxDependencyEntry[] {\n const allDepPurls = scanResult.dependencies.map((d) => d.purl);\n\n return [\n {\n ref: 'root-component',\n dependsOn: allDepPurls,\n },\n ];\n }\n\n /**\n * Builds the tools metadata section.\n *\n * CycloneDX 1.4: tools is a flat array of { vendor, name, version, ... }\n * CycloneDX 1.5+: tools is an object { components: [...] }\n */\n private buildTools(toolVersion: string): CycloneDxTools {\n if (this.specVersion === '1.4') {\n return [\n {\n vendor: 'Verimu',\n name: VERIMU_TOOL_NAME,\n version: toolVersion,\n externalReferences: [{ type: 'website', url: VERIMU_TOOL_WEBSITE }],\n },\n ];\n }\n\n return {\n components: [\n {\n type: 'application',\n name: VERIMU_TOOL_NAME,\n version: toolVersion,\n description: VERIMU_TOOL_DESCRIPTION,\n supplier: { name: 'Verimu' },\n externalReferences: [{ type: 'website', url: VERIMU_TOOL_WEBSITE }],\n },\n ],\n };\n }\n}\n\n// ─── CycloneDX JSON Types ─────────────────────────────────────\n\ninterface OrganizationalEntity {\n name: string;\n url?: string[];\n contact?: Array<{ name?: string; email?: string; phone?: string }>;\n}\n\n/** tools format for CycloneDX 1.4 — a flat array of tool objects */\ntype CycloneDxToolsV14 = Array<{\n vendor?: string;\n name: string;\n version: string;\n externalReferences?: Array<{ type: string; url: string }>;\n}>;\n\n/** tools format for CycloneDX 1.5+ — object with a components array */\ntype CycloneDxToolsV15Plus = {\n components: Array<{\n type: string;\n name: string;\n version: string;\n description?: string;\n supplier?: OrganizationalEntity;\n externalReferences?: Array<{ type: string; url: string }>;\n }>;\n};\n\ntype CycloneDxTools = CycloneDxToolsV14 | CycloneDxToolsV15Plus;\n\ninterface CycloneDxBom {\n $schema: string;\n bomFormat: string;\n specVersion: string;\n serialNumber: string;\n version: number;\n metadata: {\n timestamp: string;\n tools: CycloneDxTools;\n supplier: OrganizationalEntity;\n component: {\n type: string;\n name: string;\n 'bom-ref': string;\n supplier: OrganizationalEntity;\n };\n };\n components: CycloneDxComponent[];\n dependencies: CycloneDxDependencyEntry[];\n}\n\ninterface CycloneDxComponent {\n type: string;\n name: string;\n version: string;\n purl: string;\n 'bom-ref': string;\n scope?: string;\n supplier: OrganizationalEntity;\n}\n\ninterface CycloneDxDependencyEntry {\n ref: string;\n dependsOn: string[];\n}\n","import { randomUUID } from 'crypto';\nimport type { SbomGenerator } from './generator.interface.js';\nimport type { ScanResult, Sbom, SbomFormat } from '../core/types.js';\nimport {\n DEFAULT_TOOL_VERSION,\n VERIMU_TOOL_NAME,\n extractProjectName,\n normalizeDependencies,\n} from './shared.js';\n\nconst SPDX_VERSION = '2.3';\n\n/** Generates SPDX 2.3 JSON SBOMs. */\nexport class SpdxJsonGenerator implements SbomGenerator {\n readonly format: SbomFormat = 'spdx-json';\n\n generate(scanResult: ScanResult, toolVersion: string = DEFAULT_TOOL_VERSION): Sbom {\n const timestamp = new Date().toISOString();\n const projectName = extractProjectName(scanResult.projectPath);\n const rootPackageId = 'SPDXRef-Package-root';\n const dependencies = normalizeDependencies(scanResult.dependencies);\n\n const document = {\n spdxVersion: `SPDX-${SPDX_VERSION}`,\n dataLicense: 'CC0-1.0',\n SPDXID: 'SPDXRef-DOCUMENT',\n name: `${projectName}-sbom`,\n documentNamespace: `https://verimu.com/spdxdocs/${projectName}-${randomUUID()}`,\n creationInfo: {\n created: timestamp,\n creators: [`Tool: ${VERIMU_TOOL_NAME}@${toolVersion}`],\n },\n documentDescribes: [rootPackageId],\n packages: [\n {\n name: projectName,\n SPDXID: rootPackageId,\n versionInfo: 'NOASSERTION',\n supplier: `Organization: ${projectName}`,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n licenseConcluded: 'NOASSERTION',\n licenseDeclared: 'NOASSERTION',\n primaryPackagePurpose: 'APPLICATION',\n },\n ...dependencies.map((dep, index) => ({\n name: dep.name,\n SPDXID: `SPDXRef-Package-${index + 1}`,\n versionInfo: dep.version,\n supplier: `Organization: ${dep.supplierName}`,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n licenseConcluded: 'NOASSERTION',\n licenseDeclared: 'NOASSERTION',\n primaryPackagePurpose: 'LIBRARY',\n externalRefs: [\n {\n referenceCategory: 'PACKAGE-MANAGER',\n referenceType: 'purl',\n referenceLocator: dep.purl,\n },\n ],\n })),\n ],\n relationships: [\n {\n spdxElementId: 'SPDXRef-DOCUMENT',\n relationshipType: 'DESCRIBES',\n relatedSpdxElement: rootPackageId,\n },\n ...dependencies.map((_dep, index) => ({\n spdxElementId: rootPackageId,\n relationshipType: 'DEPENDS_ON',\n relatedSpdxElement: `SPDXRef-Package-${index + 1}`,\n })),\n ],\n };\n\n return {\n format: 'spdx-json',\n specVersion: SPDX_VERSION,\n content: JSON.stringify(document, null, 2),\n componentCount: scanResult.dependencies.length,\n generatedAt: timestamp,\n };\n }\n}\n\n","import { randomUUID } from 'crypto';\nimport type { SbomGenerator } from './generator.interface.js';\nimport type { ScanResult, Sbom, SbomFormat } from '../core/types.js';\nimport {\n DEFAULT_SWID_VERSION,\n DEFAULT_TOOL_VERSION,\n VERIMU_TOOL_NAME,\n extractProjectName,\n} from './shared.js';\n\nconst SWID_SPEC_VERSION = 'ISO/IEC 19770-2:2015';\n\n/** Generates a minimal SWID XML tag for the root software product. */\nexport class SwidTagGenerator implements SbomGenerator {\n readonly format: SbomFormat = 'swid-xml';\n\n generate(scanResult: ScanResult, toolVersion: string = DEFAULT_TOOL_VERSION): Sbom {\n const timestamp = new Date().toISOString();\n const projectName = extractProjectName(scanResult.projectPath);\n const tagId = `com.verimu:${sanitizeTagId(projectName)}:${DEFAULT_SWID_VERSION}:${randomUUID()}`;\n\n const content = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<SoftwareIdentity',\n ' xmlns=\"http://standards.iso.org/iso/19770/-2/2015/schema.xsd\"',\n ` name=\"${escapeXml(projectName)}\"`,\n ` tagId=\"${escapeXml(tagId)}\"`,\n ' tagVersion=\"1\"',\n ` version=\"${DEFAULT_SWID_VERSION}\"`,\n ' versionScheme=\"semver\">',\n ` <Entity name=\"${escapeXml(projectName)}\" role=\"softwareCreator\" />`,\n ' <Entity name=\"Verimu\" role=\"tagCreator\" />',\n ` <Meta product=\"${escapeXml(projectName)}\" generator=\"${VERIMU_TOOL_NAME}\" toolVersion=\"${toolVersion}\" generated=\"${timestamp}\" />`,\n ' <!-- TODO: Consider adding dependency/package evidence if we need richer SWID coverage. -->',\n ' <Link rel=\"describedby\" href=\"https://verimu.com\" />',\n '</SoftwareIdentity>',\n ].join('\\n');\n\n return {\n format: 'swid-xml',\n specVersion: SWID_SPEC_VERSION,\n content,\n componentCount: 1,\n generatedAt: timestamp,\n };\n }\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&apos;');\n}\n\nfunction sanitizeTagId(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n","import type { ScanResult, SbomArtifacts } from '../core/types.js';\nimport { DEFAULT_TOOL_VERSION } from './shared.js';\nimport { CycloneDxGenerator } from './cyclonedx.js';\nimport type { CycloneDxSpecVersion } from './cyclonedx.js';\nimport { SpdxJsonGenerator } from './spdx.js';\nimport { SwidTagGenerator } from './swid.js';\n\n/** Generates every supported software inventory artifact for a scan. */\nexport function generateSbomArtifacts(\n scanResult: ScanResult,\n toolVersion: string = DEFAULT_TOOL_VERSION,\n cyclonedxVersion: CycloneDxSpecVersion = '1.7'\n): SbomArtifacts {\n // TODO: Make artifact selection configurable instead of always generating all supported formats.\n return {\n cyclonedx: new CycloneDxGenerator(cyclonedxVersion).generate(scanResult, toolVersion),\n spdx: new SpdxJsonGenerator().generate(scanResult, toolVersion),\n swid: new SwidTagGenerator().generate(scanResult, toolVersion),\n };\n}\n\n","import type { CveSource } from './source.interface.js';\nimport type { Dependency, Vulnerability, VulnerabilitySource, Severity } from '../core/types.js';\n\nconst OSV_API_BASE = 'https://api.osv.dev/v1';\nconst BATCH_SIZE = 1000; // OSV querybatch supports up to 1000\n\n/**\n * OSV.dev (Google Open Source Vulnerabilities) CVE source.\n *\n * Primary CVE source for Verimu because:\n * - Supports direct package name + ecosystem + version queries\n * - Has batch query endpoint for efficiency\n * - No authentication required\n * - Covers npm, PyPI, Go, Rust, Maven, NuGet, etc.\n * - Aggregates data from GitHub Advisory, NVD, and others\n *\n * API docs: https://google.github.io/osv.dev/api/\n *\n * Note: /v1/querybatch only returns minimal data (id, modified).\n * Full vulnerability details must be fetched via /v1/vulns/{id}.\n */\nexport class OsvSource implements CveSource {\n readonly sourceId: VulnerabilitySource = 'osv';\n readonly name = 'OSV.dev (Google Open Source Vulnerabilities)';\n\n private fetchFn: typeof fetch;\n\n constructor(fetchImpl?: typeof fetch) {\n // Allow injecting fetch for testing\n this.fetchFn = fetchImpl ?? globalThis.fetch;\n }\n\n async checkDependencies(dependencies: Dependency[]): Promise<Vulnerability[]> {\n if (dependencies.length === 0) return [];\n\n const allVulns: Vulnerability[] = [];\n\n // Process in batches of BATCH_SIZE\n for (let i = 0; i < dependencies.length; i += BATCH_SIZE) {\n const batch = dependencies.slice(i, i + BATCH_SIZE);\n const batchVulns = await this.queryBatch(batch);\n allVulns.push(...batchVulns);\n }\n\n return allVulns;\n }\n\n /**\n * Uses OSV's /querybatch endpoint to get vulnerability IDs,\n * then fetches full details for each unique vulnerability.\n */\n private async queryBatch(dependencies: Dependency[]): Promise<Vulnerability[]> {\n const queries = dependencies.map((dep) => ({\n version: dep.version,\n package: {\n name: dep.name,\n ecosystem: this.mapEcosystem(dep.ecosystem),\n },\n }));\n\n const response = await this.fetchFn(`${OSV_API_BASE}/querybatch`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ queries }),\n });\n\n if (!response.ok) {\n throw new Error(`OSV API error: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as OsvBatchResponse;\n\n // Collect unique vuln IDs and track which dependencies they affect\n const vulnIdToDeps = new Map<string, Dependency[]>();\n\n for (let i = 0; i < data.results.length; i++) {\n const result = data.results[i];\n const dep = dependencies[i];\n\n if (result.vulns && result.vulns.length > 0) {\n for (const vuln of result.vulns) {\n const existing = vulnIdToDeps.get(vuln.id);\n if (existing) {\n existing.push(dep);\n } else {\n vulnIdToDeps.set(vuln.id, [dep]);\n }\n }\n }\n }\n\n if (vulnIdToDeps.size === 0) {\n return [];\n }\n\n // Fetch full details for each unique vulnerability\n const vulnIds = Array.from(vulnIdToDeps.keys());\n const fullVulns = await this.fetchVulnerabilityDetails(vulnIds);\n\n // Map full vulnerability data to our format, linking to affected deps\n const vulnerabilities: Vulnerability[] = [];\n\n for (const osvVuln of fullVulns) {\n const affectedDeps = vulnIdToDeps.get(osvVuln.id) ?? [];\n for (const dep of affectedDeps) {\n vulnerabilities.push(this.mapVulnerability(osvVuln, dep));\n }\n }\n\n return vulnerabilities;\n }\n\n /**\n * Fetches full vulnerability details from /v1/vulns/{id} for each ID.\n * Makes parallel requests for efficiency.\n */\n private async fetchVulnerabilityDetails(vulnIds: string[]): Promise<OsvVulnerability[]> {\n const results: OsvVulnerability[] = [];\n\n // Fetch in parallel with a reasonable concurrency limit\n const CONCURRENCY = 10;\n for (let i = 0; i < vulnIds.length; i += CONCURRENCY) {\n const batch = vulnIds.slice(i, i + CONCURRENCY);\n const promises = batch.map(async (id) => {\n try {\n const response = await this.fetchFn(`${OSV_API_BASE}/vulns/${encodeURIComponent(id)}`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n // Log but don't fail the entire scan for individual vuln fetch errors\n console.warn(`Failed to fetch vulnerability ${id}: ${response.status}`);\n return null;\n }\n\n return (await response.json()) as OsvVulnerability;\n } catch (err) {\n console.warn(`Error fetching vulnerability ${id}:`, err);\n return null;\n }\n });\n\n const batchResults = await Promise.all(promises);\n results.push(...batchResults.filter((v): v is OsvVulnerability => v !== null));\n }\n\n return results;\n }\n\n /** Maps an OSV vulnerability record to our Vulnerability type */\n private mapVulnerability(osvVuln: OsvVulnerability, dep: Dependency): Vulnerability {\n const cveId = this.extractCveId(osvVuln);\n const severity = this.extractSeverity(osvVuln);\n\n return {\n id: cveId || osvVuln.id,\n aliases: Array.from(new Set([osvVuln.id, ...(osvVuln.aliases ?? [])])),\n summary: osvVuln.summary ?? osvVuln.details?.slice(0, 200) ?? 'No description available',\n severity: severity.level,\n cvssScore: severity.score,\n packageName: dep.name,\n ecosystem: dep.ecosystem,\n affectedVersionRange: this.extractAffectedRange(osvVuln, dep.name),\n fixedVersion: this.extractFixedVersion(osvVuln, dep.name),\n exploitedInWild: false, // OSV doesn't track this — CISA KEV does\n source: 'osv',\n referenceUrl: `https://osv.dev/vulnerability/${osvVuln.id}`,\n publishedAt: osvVuln.published,\n };\n }\n\n /** Extracts CVE ID from aliases (prefers CVE-xxxx over GHSA-xxxx) */\n private extractCveId(vuln: OsvVulnerability): string | null {\n // Check the main ID first\n if (vuln.id.startsWith('CVE-')) return vuln.id;\n\n // Check aliases\n if (vuln.aliases) {\n const cve = vuln.aliases.find((a) => a.startsWith('CVE-'));\n if (cve) return cve;\n }\n\n return null;\n }\n\n /** Extracts severity from CVSS scores in the OSV record */\n private extractSeverity(vuln: OsvVulnerability): { level: Severity; score?: number } {\n // Try database_specific first (often has CVSS)\n if (vuln.severity && vuln.severity.length > 0) {\n for (const sev of vuln.severity) {\n if (sev.type === 'CVSS_V3') {\n const score = this.parseCvssScore(sev.score);\n if (score !== null) {\n return { level: this.scoreToSeverity(score), score };\n }\n }\n }\n }\n\n // Try to extract from database_specific\n if (vuln.database_specific?.severity) {\n const s = vuln.database_specific.severity.toUpperCase();\n if (['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'].includes(s)) {\n return { level: s as Severity };\n }\n }\n\n return { level: 'UNKNOWN' };\n }\n\n /** Parses CVSS v3 vector string to extract/calculate the base score */\n private parseCvssScore(vectorOrScore: string): number | null {\n // Could be a raw score like \"7.5\"\n const num = parseFloat(vectorOrScore);\n if (!isNaN(num) && num >= 0 && num <= 10) return num;\n\n // Parse CVSS v3.x vector string like \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H\"\n if (vectorOrScore.startsWith('CVSS:3')) {\n return this.calculateCvss3Score(vectorOrScore);\n }\n\n return null;\n }\n\n /** Calculate CVSS v3.x base score from vector string */\n private calculateCvss3Score(vector: string): number | null {\n // CVSS v3 metric values\n const metricValues: Record<string, Record<string, number>> = {\n AV: { N: 0.85, A: 0.62, L: 0.55, P: 0.2 }, // Attack Vector\n AC: { L: 0.77, H: 0.44 }, // Attack Complexity\n PR: { // Privileges Required (varies by Scope)\n N_U: 0.85, L_U: 0.62, H_U: 0.27,\n N_C: 0.85, L_C: 0.68, H_C: 0.5,\n },\n UI: { N: 0.85, R: 0.62 }, // User Interaction\n C: { H: 0.56, L: 0.22, N: 0 }, // Confidentiality Impact\n I: { H: 0.56, L: 0.22, N: 0 }, // Integrity Impact\n A: { H: 0.56, L: 0.22, N: 0 }, // Availability Impact\n };\n\n // Parse vector string\n const parts = vector.split('/');\n const metrics: Record<string, string> = {};\n for (const part of parts) {\n const [key, value] = part.split(':');\n if (key && value) metrics[key] = value;\n }\n\n // Extract required metrics\n const av = metricValues.AV[metrics.AV];\n const ac = metricValues.AC[metrics.AC];\n const ui = metricValues.UI[metrics.UI];\n const scope = metrics.S; // 'U' = Unchanged, 'C' = Changed\n const c = metricValues.C[metrics.C];\n const i = metricValues.I[metrics.I];\n const a = metricValues.A[metrics.A];\n\n // PR depends on Scope\n const prKey = `${metrics.PR}_${scope}`;\n const pr = metricValues.PR[prKey];\n\n if ([av, ac, pr, ui, c, i, a].some((v) => v === undefined)) {\n return null; // Missing required metrics\n }\n\n // Calculate Impact Sub Score (ISS)\n const iss = 1 - (1 - c) * (1 - i) * (1 - a);\n\n // Calculate Impact\n let impact: number;\n if (scope === 'U') {\n impact = 6.42 * iss;\n } else {\n impact = 7.52 * (iss - 0.029) - 3.25 * Math.pow(iss - 0.02, 15);\n }\n\n // Calculate Exploitability\n const exploitability = 8.22 * av * ac * pr * ui;\n\n // Calculate Base Score\n if (impact <= 0) return 0;\n\n let baseScore: number;\n if (scope === 'U') {\n baseScore = Math.min(impact + exploitability, 10);\n } else {\n baseScore = Math.min(1.08 * (impact + exploitability), 10);\n }\n\n // Round up to 1 decimal place (CVSS spec)\n return Math.ceil(baseScore * 10) / 10;\n }\n\n /** Converts a CVSS score (0-10) to a severity level */\n private scoreToSeverity(score: number): Severity {\n if (score >= 9.0) return 'CRITICAL';\n if (score >= 7.0) return 'HIGH';\n if (score >= 4.0) return 'MEDIUM';\n if (score > 0.0) return 'LOW';\n return 'UNKNOWN';\n }\n\n /** Extracts affected version range for a specific package */\n private extractAffectedRange(vuln: OsvVulnerability, packageName: string): string | undefined {\n if (!vuln.affected) return undefined;\n\n for (const affected of vuln.affected) {\n if (affected.package?.name === packageName && affected.ranges) {\n for (const range of affected.ranges) {\n if (range.events) {\n const introduced = range.events.find((e) => e.introduced)?.introduced;\n const fixed = range.events.find((e) => e.fixed)?.fixed;\n if (introduced && fixed) return `>=${introduced}, <${fixed}`;\n if (introduced) return `>=${introduced}`;\n }\n }\n }\n }\n return undefined;\n }\n\n /** Extracts the fixed version for a specific package */\n private extractFixedVersion(vuln: OsvVulnerability, packageName: string): string | undefined {\n if (!vuln.affected) return undefined;\n\n for (const affected of vuln.affected) {\n if (affected.package?.name === packageName && affected.ranges) {\n for (const range of affected.ranges) {\n if (range.events) {\n const fixed = range.events.find((e) => e.fixed)?.fixed;\n if (fixed) return fixed;\n }\n }\n }\n }\n return undefined;\n }\n\n /** Maps our ecosystem names to OSV ecosystem names */\n private mapEcosystem(ecosystem: string): string {\n const map: Record<string, string> = {\n npm: 'npm',\n nuget: 'NuGet',\n cargo: 'crates.io',\n maven: 'Maven',\n pip: 'PyPI',\n poetry: 'PyPI',\n uv: 'PyPI',\n go: 'Go',\n ruby: 'RubyGems',\n composer: 'Packagist',\n deno: 'JSR', // JSR packages (Deno registry)\n };\n return map[ecosystem] ?? ecosystem;\n }\n}\n\n// ─── OSV API Response Types ─────────────────────────────────────\n\n/** Response from /v1/querybatch - returns minimal vuln info (just id and modified) */\ninterface OsvBatchResponse {\n results: Array<{\n vulns?: OsvBatchVuln[];\n }>;\n}\n\n/** Minimal vulnerability info returned by /v1/querybatch */\ninterface OsvBatchVuln {\n id: string;\n modified?: string;\n}\n\n/** Full vulnerability details from /v1/vulns/{id} */\ninterface OsvVulnerability {\n id: string;\n summary?: string;\n details?: string;\n aliases?: string[];\n published?: string;\n modified?: string;\n severity?: Array<{\n type: string;\n score: string;\n }>;\n affected?: Array<{\n package?: {\n name: string;\n ecosystem: string;\n };\n ranges?: Array<{\n type: string;\n events: Array<{\n introduced?: string;\n fixed?: string;\n last_affected?: string;\n }>;\n }>;\n versions?: string[];\n }>;\n database_specific?: {\n severity?: string;\n [key: string]: unknown;\n };\n references?: Array<{\n type: string;\n url: string;\n }>;\n}\n","import type { CveSource } from './source.interface.js';\nimport type { Dependency, CveCheckResult, Vulnerability, VulnerabilitySource } from '../core/types.js';\nimport { OsvSource } from './osv.js';\n\n/**\n * Aggregates vulnerability data from multiple CVE sources.\n * Deduplicates results by CVE ID across sources.\n */\nexport class CveAggregator {\n private sources: CveSource[];\n\n constructor(sources?: CveSource[]) {\n this.sources = sources ?? [\n new OsvSource(),\n // Future: new NvdSource(), new EuvdSource(), new CisaKevSource()\n ];\n }\n\n /**\n * Checks dependencies against all registered CVE sources.\n * Runs sources in parallel and merges/deduplicates results.\n */\n async check(dependencies: Dependency[]): Promise<CveCheckResult> {\n const startTime = Date.now();\n const sourcesQueried: VulnerabilitySource[] = [];\n const sourceErrors: { source: VulnerabilitySource; error: string }[] = [];\n const allVulns: Vulnerability[] = [];\n\n // Run all sources in parallel\n const results = await Promise.allSettled(\n this.sources.map(async (source) => {\n const vulns = await source.checkDependencies(dependencies);\n return { sourceId: source.sourceId, vulns };\n })\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n sourcesQueried.push(result.value.sourceId);\n allVulns.push(...result.value.vulns);\n } else {\n // Extract the source ID from the error context\n const sourceIndex = results.indexOf(result);\n const sourceId = this.sources[sourceIndex].sourceId;\n sourceErrors.push({\n source: sourceId,\n error: result.reason instanceof Error ? result.reason.message : String(result.reason),\n });\n }\n }\n\n // Deduplicate by CVE ID (prefer the entry with more data)\n const deduplicated = this.deduplicateVulnerabilities(allVulns);\n\n return {\n vulnerabilities: deduplicated,\n sourcesQueried,\n sourceErrors,\n checkDurationMs: Date.now() - startTime,\n };\n }\n\n /**\n * Deduplicates vulnerabilities by ID.\n * When the same CVE appears from multiple sources,\n * keeps the one with more complete data (has CVSS score, has fix version, etc.)\n */\n private deduplicateVulnerabilities(vulns: Vulnerability[]): Vulnerability[] {\n const byKey = new Map<string, Vulnerability>();\n\n for (const vuln of vulns) {\n // Key by (vulnerability ID + package name) to handle the same CVE\n // affecting multiple packages\n const key = `${vuln.id}::${vuln.packageName}`;\n const existing = byKey.get(key);\n\n if (!existing) {\n byKey.set(key, vuln);\n } else {\n // Keep the one with more data\n byKey.set(key, this.pickBetterEntry(existing, vuln));\n }\n }\n\n return Array.from(byKey.values());\n }\n\n /** Picks the vulnerability entry with more complete data */\n private pickBetterEntry(a: Vulnerability, b: Vulnerability): Vulnerability {\n let scoreA = 0;\n let scoreB = 0;\n\n if (a.cvssScore !== undefined) scoreA++;\n if (b.cvssScore !== undefined) scoreB++;\n if (a.fixedVersion) scoreA++;\n if (b.fixedVersion) scoreB++;\n if (a.affectedVersionRange) scoreA++;\n if (b.affectedVersionRange) scoreB++;\n if (a.severity !== 'UNKNOWN') scoreA++;\n if (b.severity !== 'UNKNOWN') scoreB++;\n\n // Merge: start with the lesser entry, overlay with the better one.\n // Strip undefined/null values so they don't overwrite real data.\n const strip = (obj: Record<string, unknown>) =>\n Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined && v !== null));\n\n const winner = scoreB > scoreA\n ? { ...strip(a as unknown as Record<string, unknown>), ...strip(b as unknown as Record<string, unknown>) } as unknown as Vulnerability\n : { ...strip(b as unknown as Record<string, unknown>), ...strip(a as unknown as Record<string, unknown>) } as unknown as Vulnerability;\n\n // Merge aliases\n const allAliases = new Set([...a.aliases, ...b.aliases]);\n winner.aliases = Array.from(allAliases);\n\n // If either says exploited, it's exploited\n winner.exploitedInWild = a.exploitedInWild || b.exploitedInWild;\n\n return winner;\n }\n}\n","import type { Reporter } from './reporter.interface.js';\nimport type { VerimuReport, Vulnerability, Severity } from '../core/types.js';\n\n/** Outputs a human-readable console report */\nexport class ConsoleReporter implements Reporter {\n readonly name = 'console';\n\n report(result: VerimuReport): string {\n const lines: string[] = [];\n\n lines.push('');\n lines.push('┌─────────────────────────────────────────────┐');\n lines.push('│ VERIMU CRA COMPLIANCE SCAN │');\n lines.push('└─────────────────────────────────────────────┘');\n lines.push('');\n\n // Project info\n lines.push(` Project: ${result.project.path}`);\n lines.push(` Ecosystem: ${result.project.ecosystem}`);\n lines.push(` Dependencies: ${result.project.dependencyCount}`);\n lines.push(` Scanned at: ${result.generatedAt}`);\n lines.push('');\n\n // SBOM info\n lines.push(` ✓ SBOM generated (${result.sbom.format}, ${result.sbom.specVersion})`);\n lines.push(` Components: ${result.sbom.componentCount}`);\n if (result.artifacts) {\n lines.push(` Also wrote: ${result.artifacts.spdx.format}, ${result.artifacts.swid.format}`);\n }\n lines.push('');\n\n // CVE results\n const vulns = result.cveCheck.vulnerabilities;\n if (vulns.length === 0) {\n lines.push(' ✓ No known vulnerabilities found');\n } else {\n lines.push(` ⚠ ${vulns.length} vulnerabilit${vulns.length === 1 ? 'y' : 'ies'} found:`);\n lines.push('');\n\n // Sort by severity: CRITICAL → HIGH → MEDIUM → LOW → UNKNOWN\n const sorted = [...vulns].sort((a, b) => severityOrder(a.severity) - severityOrder(b.severity));\n\n for (const vuln of sorted) {\n const badge = severityBadge(vuln.severity);\n const fix = vuln.fixedVersion ? ` → fix: ${vuln.fixedVersion}` : '';\n lines.push(` ${badge} ${vuln.id}`);\n lines.push(` ${vuln.packageName}@${vuln.affectedVersionRange ?? '?'}${fix}`);\n lines.push(` ${vuln.summary.slice(0, 100)}`);\n if (vuln.exploitedInWild) {\n lines.push(` 🔴 ACTIVELY EXPLOITED — 24h CRA reporting required`);\n }\n lines.push('');\n }\n }\n\n // Sources\n const sources = result.cveCheck.sourcesQueried.join(', ');\n lines.push(` Sources queried: ${sources} (${result.cveCheck.checkDurationMs}ms)`);\n\n if (result.cveCheck.sourceErrors.length > 0) {\n for (const err of result.cveCheck.sourceErrors) {\n lines.push(` ⚠ ${err.source}: ${err.error}`);\n }\n }\n\n // Summary\n lines.push('');\n lines.push(' ─── Summary ───');\n lines.push(` Total: ${result.summary.totalVulnerabilities} | ` +\n `Critical: ${result.summary.critical} | ` +\n `High: ${result.summary.high} | ` +\n `Medium: ${result.summary.medium} | ` +\n `Low: ${result.summary.low}`);\n\n if (result.summary.exploitedInWild > 0) {\n lines.push(` 🔴 ${result.summary.exploitedInWild} actively exploited — immediate action required`);\n }\n\n lines.push('');\n return lines.join('\\n');\n }\n}\n\nfunction severityOrder(s: Severity): number {\n const order: Record<Severity, number> = {\n CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3, UNKNOWN: 4,\n };\n return order[s] ?? 5;\n}\n\nfunction severityBadge(s: Severity): string {\n const badges: Record<Severity, string> = {\n CRITICAL: '[CRIT]',\n HIGH: '[HIGH]',\n MEDIUM: '[MED] ',\n LOW: '[LOW] ',\n UNKNOWN: '[???] ',\n };\n return badges[s] ?? '[???] ';\n}\n","/**\n * Verimu API client — communicates with the Verimu backend.\n *\n * Used by the CLI and scan pipeline to:\n * 1. Upsert a project (create-if-not-exists)\n * 2. Upload SBOM + trigger CVE scan\n */\n\nimport type { Ecosystem } from '../core/types.js';\n\nconst DEFAULT_API_BASE = 'https://api.verimu.com';\n\nexport interface UpsertProjectResponse {\n project: {\n id: string;\n name: string;\n ecosystem: string;\n repository_url: string | null;\n platform: string | null;\n };\n created: boolean;\n}\n\nexport interface ScanResponse {\n project: {\n id: string;\n name: string;\n };\n scan_results: Array<{\n dependency_id: string;\n dependency_name: string;\n version: string;\n vulnerabilities: Array<{\n cve_id: string;\n severity?: string | null;\n summary?: string | null;\n description?: string | null;\n fixed_version?: string | null;\n sources?: Array<{\n name?: string;\n url?: string;\n data?: {\n fixed_version?: string | null;\n } | null;\n }> | null;\n }> | null;\n }>;\n summary: {\n total_dependencies: number;\n vulnerable_dependencies: number;\n };\n}\n\nexport interface SbomUploadBundle {\n cyclonedx: Record<string, unknown>;\n spdx?: Record<string, unknown>;\n swid?: string;\n}\n\nexport class VerimuApiClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(apiKey: string, baseUrl?: string) {\n this.apiKey = apiKey;\n this.baseUrl = (baseUrl ?? DEFAULT_API_BASE).replace(/\\/+$/, '');\n }\n\n /**\n * Upsert a project — finds by name or creates it.\n * Used so `npx verimu` auto-registers projects without manual dashboard setup.\n */\n async upsertProject(opts: {\n name: string;\n ecosystem: Ecosystem;\n repositoryUrl?: string;\n platform?: string;\n }): Promise<UpsertProjectResponse> {\n const res = await fetch(`${this.baseUrl}/api/projects/upsert`, {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify({\n name: opts.name,\n ecosystem: this.mapEcosystem(opts.ecosystem),\n repository_url: opts.repositoryUrl ?? null,\n platform: opts.platform ?? null,\n }),\n });\n\n if (!res.ok) {\n const body = await res.text();\n throw new Error(`Verimu API: upsert project failed (${res.status}): ${body}`);\n }\n\n return res.json() as Promise<UpsertProjectResponse>;\n }\n\n /**\n * Upload a software inventory artifact payload to a project and trigger CVE scanning.\n *\n * Backward-compatible:\n * - string payloads are treated as legacy raw CycloneDX JSON\n * - object payloads can include CycloneDX + SPDX + SWID together\n */\n async uploadSbom(projectId: string, payload: string | SbomUploadBundle): Promise<ScanResponse> {\n const body = typeof payload === 'string'\n ? JSON.stringify(JSON.parse(payload))\n : JSON.stringify(payload);\n\n const res = await fetch(`${this.baseUrl}/api/projects/${projectId}/scan`, {\n method: 'POST',\n headers: this.headers(),\n body,\n });\n\n if (!res.ok) {\n const body = await res.text();\n throw new Error(`Verimu API: upload SBOM failed (${res.status}): ${body}`);\n }\n\n return res.json() as Promise<ScanResponse>;\n }\n\n private headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n };\n }\n\n /**\n * Maps internal ecosystem names to what the backend expects.\n * Currently 1:1, but keeps the mapping explicit.\n */\n private mapEcosystem(eco: Ecosystem): string {\n const map: Record<Ecosystem, string> = {\n npm: 'npm',\n pip: 'pip',\n poetry: 'poetry',\n uv: 'uv',\n maven: 'maven',\n nuget: 'nuget',\n go: 'gomod',\n cargo: 'cargo',\n ruby: 'bundler',\n composer: 'composer',\n deno: 'deno',\n };\n return map[eco] ?? eco;\n }\n}\n"],"mappings":";AAAA,SAAS,kBAAkB;;;ACEpB,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAC5B,IAAM,0BAA0B;AAChC,IAAM,uBAAuB;AAC7B,IAAM,0BAA0B;AAChC,IAAM,uBAAuB;AAmBpC,IAAM,gBAA2C;AAAA,EAC/C,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACR;AAQO,SAAS,UAAU,MAAc,SAAiB,WAA8B;AACrF,QAAM,OAAO,cAAc,SAAS,KAAK;AAEzC,MAAI,cAAc,SAAS,KAAK,WAAW,GAAG,GAAG;AAC/C,WAAO,OAAO,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO;AAAA,EACnD;AAEA,SAAO,OAAO,IAAI,IAAI,IAAI,IAAI,OAAO;AACvC;AAOO,SAAS,mBAAmB,aAA6B;AAC9D,MAAI,YAAY,WAAW,GAAG,GAAG;AAC/B,WAAO,YAAY,MAAM,GAAG,EAAE,CAAC;AAAA,EACjC;AACA,SAAO;AACT;AAGO,SAAS,mBAAmB,aAA6B;AAC9D,QAAM,QAAQ,YAAY,QAAQ,OAAO,GAAG,EAAE,MAAM,GAAG;AACvD,SAAO,MAAM,MAAM,SAAS,CAAC,KAAK;AACpC;AAGO,SAAS,sBAAsB,cAAwD;AAC5F,SAAO,aAAa,IAAI,CAAC,SAAS;AAAA,IAChC,MAAM,IAAI;AAAA,IACV,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI,UAAU;AAAA,IACtB,MAAM,IAAI,QAAQ,UAAU,IAAI,MAAM,IAAI,SAAS,IAAI,SAAS;AAAA,IAChE,cAAc,mBAAmB,IAAI,IAAI;AAAA,EAC3C,EAAE;AACJ;;;AD9CO,SAAS,aAAa,OAA8C;AACzE,QAAM;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,EACF,IAAI;AAEJ,QAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,QAAM,eAAe,sBAAsB,YAAY;AAEvD,QAAM,WAAW,UAAU,aAAa,gBAAgB,KAAK;AAE7D,QAAM,OAAO;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,cAAc,YAAY,WAAW,CAAC;AAAA,IACtC,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,MACA,OAAO;AAAA,QACL,YAAY;AAAA,UACV;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,YACT,aAAa;AAAA,YACb,UAAU,EAAE,MAAM,SAAS;AAAA,YAC3B,oBAAoB;AAAA,cAClB,EAAE,MAAM,WAAW,KAAK,oBAAoB;AAAA,YAC9C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,UAAU,EAAE,MAAM,YAAY;AAAA,MAC9B,WAAW;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,UAAU,EAAE,MAAM,YAAY;AAAA,MAChC;AAAA,IACF;AAAA,IACA,YAAY,aAAa,IAAI,CAAC,SAAS;AAAA,MACrC,MAAM;AAAA,MACN,MAAM,IAAI;AAAA,MACV,SAAS,IAAI;AAAA,MACb,MAAM,IAAI;AAAA,MACV,WAAW,IAAI;AAAA,MACf,OAAO,IAAI,SAAS,aAAa;AAAA,MACjC,UAAU,EAAE,MAAM,IAAI,aAAa;AAAA,IACrC,EAAE;AAAA,IACF,cAAc;AAAA,MACZ;AAAA,QACE,KAAK;AAAA,QACL,WAAW,aAAa,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,UAAU,MAAM,MAAM,CAAC;AAE5C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,gBAAgB,aAAa;AAAA,IAC7B,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;;;AE3GA,SAAS,cAAAA,mBAAkB;AAW3B,IAAM,eAAe;AAOd,SAAS,iBAAiB,OAAkD;AACjF,QAAM;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,EACF,IAAI;AAEJ,QAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,QAAM,eAAe,sBAAsB,YAAY;AACvD,QAAM,gBAAgB;AAEtB,QAAM,OAAO;AAAA,IACX,aAAa,QAAQ,YAAY;AAAA,IACjC,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,MAAM,GAAG,WAAW;AAAA,IACpB,mBAAmB,+BAA+B,WAAW,IAAIC,YAAW,CAAC;AAAA,IAC7E,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,UAAU,CAAC,SAAS,gBAAgB,EAAE;AAAA,IACxC;AAAA,IACA,mBAAmB,CAAC,aAAa;AAAA,IACjC,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,UAAU,iBAAiB,WAAW;AAAA,QACtC,kBAAkB;AAAA,QAClB,eAAe;AAAA,QACf,kBAAkB;AAAA,QAClB,iBAAiB;AAAA,QACjB,uBAAuB;AAAA,MACzB;AAAA,MACA,GAAG,aAAa,IAAI,CAAC,KAAK,WAAW;AAAA,QACnC,MAAM,IAAI;AAAA,QACV,QAAQ,mBAAmB,QAAQ,CAAC;AAAA,QACpC,aAAa,IAAI;AAAA,QACjB,UAAU,iBAAiB,IAAI,YAAY;AAAA,QAC3C,kBAAkB;AAAA,QAClB,eAAe;AAAA,QACf,kBAAkB;AAAA,QAClB,iBAAiB;AAAA,QACjB,uBAAuB;AAAA,QACvB,cAAc;AAAA,UACZ;AAAA,YACE,mBAAmB;AAAA,YACnB,eAAe;AAAA,YACf,kBAAkB,IAAI;AAAA,UACxB;AAAA,QACF;AAAA,MACF,EAAE;AAAA,IACJ;AAAA,IACA,eAAe;AAAA,MACb;AAAA,QACE,eAAe;AAAA,QACf,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,MACtB;AAAA,MACA,GAAG,aAAa,IAAI,CAAC,MAAM,WAAW;AAAA,QACpC,eAAe;AAAA,QACf,kBAAkB;AAAA,QAClB,oBAAoB,mBAAmB,QAAQ,CAAC;AAAA,MAClD,EAAE;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,UAAU,MAAM,MAAM,CAAC;AAE5C,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,gBAAgB,aAAa;AAAA,IAC7B,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;;;AC9FA,SAAS,cAAAC,mBAAkB;AAW3B,IAAM,oBAAoB;AAQnB,SAAS,gBAAgB,OAAiD;AAC/E,QAAM;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,EACnB,IAAI;AAEJ,QAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,QAAM,aAAa;AACnB,QAAM,oBAAoB,kBAAkB;AAC5C,QAAM,QAAQ,cAAc,cAAc,WAAW,CAAC,IAAI,iBAAiB,IAAIC,YAAW,CAAC;AAE3F,QAAM,MAAM;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,UAAU,WAAW,CAAC;AAAA,IACjC,YAAY,UAAU,KAAK,CAAC;AAAA,IAC5B,iBAAiB,UAAU;AAAA,IAC3B,cAAc,UAAU,iBAAiB,CAAC;AAAA,IAC1C;AAAA,IACA,mBAAmB,UAAU,WAAW,CAAC;AAAA,IACzC;AAAA,IACA,oBAAoB,UAAU,WAAW,CAAC,gBAAgB,gBAAgB,gBAAgB,SAAS;AAAA,IACnG;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,MACJ,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,QAAQ;AAC7B;AAEA,SAAS,cAAc,OAAuB;AAC5C,SAAO,MACJ,YAAY,EACZ,QAAQ,kBAAkB,GAAG,EAC7B,QAAQ,YAAY,EAAE;AAC3B;;;ACtEA,SAAS,iBAAiB;AAC1B,SAAS,UAAU,MAAM,aAAa;;;ACDtC,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,OAAO,UAAU;;;ACDV,IAAM,cAAN,cAA0B,MAAM;AAAA,EACrC,YAAY,SAAiC,MAAc;AACzD,UAAM,OAAO;AAD8B;AAE3C,SAAK,OAAO;AAAA,EACd;AACF;AAGO,IAAM,kBAAN,cAA8B,YAAY;AAAA,EAC/C,YAAY,aAAqB;AAC/B;AAAA,MACE,kCAAkC,WAAW;AAAA,MAG7C;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAGO,IAAM,qBAAN,cAAiC,YAAY;AAAA,EAClD,YAAY,cAAsB,QAAgB;AAChD,UAAM,mBAAmB,YAAY,KAAK,MAAM,IAAI,sBAAsB;AAC1E,SAAK,OAAO;AAAA,EACd;AACF;AAGO,IAAM,iBAAN,cAA6B,YAAY;AAAA,EAC9C,YAAY,QAAgB,QAAgB;AAC1C,UAAM,eAAe,MAAM,aAAa,MAAM,IAAI,kBAAkB;AACpE,SAAK,OAAO;AAAA,EACd;AACF;AAGO,IAAM,sBAAN,cAAkC,YAAY;AAAA,EACnD,YAAY,SAAiB;AAC3B;AAAA,MACE,yBAAyB,OAAO;AAAA,MAChC;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;;;ADhCO,IAAM,aAAN,MAA8C;AAAA,EAC1C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,mBAAmB;AAAA,EAE7C,MAAM,OAAO,aAA6C;AACxD,UAAM,eAAe,KAAK,KAAK,aAAa,mBAAmB;AAC/D,WAAO,WAAW,YAAY,IAAI,eAAe;AAAA,EACnD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACzE,UAAM,CAAC,aAAa,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,MACtD,SAAS,cAAc,OAAO;AAAA,MAC9B,SAAS,KAAK,KAAK,aAAa,cAAc,GAAG,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,IAC5E,CAAC;AAED,QAAI;AACJ,QAAI;AACF,iBAAW,KAAK,MAAM,WAAW;AAAA,IACnC,QAAQ;AACN,YAAM,IAAI,mBAAmB,cAAc,cAAc;AAAA,IAC3D;AAGA,UAAM,cAAc,oBAAI,IAAY;AACpC,QAAI,gBAAgB;AAClB,UAAI;AACF,cAAM,MAAM,KAAK,MAAM,cAAc;AACrC,mBAAW,QAAQ,OAAO,KAAK,IAAI,gBAAgB,CAAC,CAAC,GAAG;AACtD,sBAAY,IAAI,IAAI;AAAA,QACtB;AACA,mBAAW,QAAQ,OAAO,KAAK,IAAI,mBAAmB,CAAC,CAAC,GAAG;AACzD,sBAAY,IAAI,IAAI;AAAA,QACtB;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,UAAM,eAAe,KAAK,cAAc,UAAU,WAAW;AAE7D,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,cAAc,UAAuB,aAAwC;AACnF,UAAM,OAAqB,CAAC;AAE5B,QAAI,SAAS,UAAU;AAErB,iBAAW,CAAC,SAAS,OAAO,KAAK,OAAO,QAAQ,SAAS,QAAQ,GAAG;AAElE,YAAI,YAAY,GAAI;AAKpB,cAAM,OAAO,KAAK,mBAAmB,OAAO;AAC5C,YAAI,CAAC,QAAQ,CAAC,QAAQ,QAAS;AAG/B,YAAI,QAAQ,KAAM;AAElB,aAAK,KAAK;AAAA,UACR;AAAA,UACA,SAAS,QAAQ;AAAA,UACjB,QAAQ,YAAY,IAAI,IAAI;AAAA,UAC5B,WAAW;AAAA,UACX,MAAM,KAAK,UAAU,MAAM,QAAQ,OAAO;AAAA,QAC5C,CAAC;AAAA,MACH;AAAA,IACF,WAAW,SAAS,cAAc;AAEhC,WAAK,oBAAoB,SAAS,cAAc,aAAa,IAAI;AAAA,IACnE;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,UAAU,MAAc,SAAyB;AACvD,QAAI,KAAK,WAAW,GAAG,GAAG;AAExB,aAAO,cAAc,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO;AAAA,IAC/C;AACA,WAAO,WAAW,IAAI,IAAI,OAAO;AAAA,EACnC;AAAA;AAAA,EAGQ,mBAAmB,SAAgC;AAIzD,UAAM,QAAQ,QAAQ,MAAM,eAAe;AAC3C,UAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,WAAO,QAAQ;AAAA,EACjB;AAAA;AAAA,EAGQ,oBACN,SACA,aACA,QACM;AACN,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,UAAI,KAAK,SAAS;AAChB,eAAO,KAAK;AAAA,UACV;AAAA,UACA,SAAS,KAAK;AAAA,UACd,QAAQ,YAAY,IAAI,IAAI;AAAA,UAC5B,WAAW;AAAA,UACX,MAAM,KAAK,UAAU,MAAM,KAAK,OAAO;AAAA,QACzC,CAAC;AAAA,MACH;AAEA,UAAI,KAAK,cAAc;AACrB,aAAK,oBAAoB,KAAK,cAAc,aAAa,MAAM;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AACF;;;AEvJA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,WAAU;AA4BV,IAAM,eAAN,MAAgD;AAAA,EAC5C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,oBAAoB;AAAA,EAE9C,MAAM,OAAO,aAA6C;AACxD,UAAM,eAAeC,MAAK,KAAK,aAAa,oBAAoB;AAChE,WAAOC,YAAW,YAAY,IAAI,eAAe;AAAA,EACnD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACzE,UAAM,cAAc,MAAMC,UAAS,cAAc,OAAO;AAExD,QAAI;AACJ,QAAI;AACF,iBAAW,KAAK,MAAM,WAAW;AAAA,IACnC,QAAQ;AACN,YAAM,IAAI,mBAAmB,cAAc,cAAc;AAAA,IAC3D;AAEA,QAAI,CAAC,SAAS,cAAc;AAC1B,YAAM,IAAI,mBAAmB,cAAc,8BAA8B;AAAA,IAC3E;AAEA,UAAM,eAAe,KAAK,cAAc,QAAQ;AAEhD,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,cAAc,UAAuC;AAC3D,UAAM,SAAS,oBAAI,IAAwB;AAE3C,eAAW,CAAC,YAAY,QAAQ,KAAK,OAAO,QAAQ,SAAS,YAAY,GAAG;AAC1E,iBAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,YAAI,CAAC,KAAK,SAAU;AAGpB,cAAM,WAAW,KAAK,SAAS;AAE/B,cAAM,WAAW,OAAO,IAAI,IAAI;AAChC,YAAI,CAAC,UAAU;AACb,iBAAO,IAAI,MAAM;AAAA,YACf;AAAA,YACA,SAAS,KAAK;AAAA,YACd,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,MAAM,KAAK,UAAU,MAAM,KAAK,QAAQ;AAAA,UAC1C,CAAC;AAAA,QACH,WAES,YAAY,CAAC,SAAS,QAAQ;AACrC,mBAAS,SAAS;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,WAAO,MAAM,KAAK,OAAO,OAAO,CAAC;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAAU,MAAc,SAAyB;AACvD,WAAO,aAAa,IAAI,IAAI,OAAO;AAAA,EACrC;AACF;;;AC1GA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,WAAU;AA4BV,IAAM,eAAN,MAAgD;AAAA,EAC5C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,YAAY;AAAA,EAEtC,MAAM,OAAO,aAA6C;AACxD,UAAM,eAAeC,MAAK,KAAK,aAAa,YAAY;AACxD,WAAOC,YAAW,YAAY,IAAI,eAAe;AAAA,EACnD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACzE,UAAM,CAAC,aAAa,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpDC,UAAS,cAAc,OAAO;AAAA,MAC9BA,UAASF,MAAK,KAAK,aAAa,YAAY,GAAG,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,IAC1E,CAAC;AAED,UAAM,WAAW,KAAK,cAAc,aAAa,YAAY;AAC7D,UAAM,cAAc,eAAe,KAAK,eAAe,YAAY,IAAI,oBAAI,IAAY;AAGvF,UAAM,WAAW,SAAS,SAAS,IAAI,SAAS,CAAC,EAAE,OAAO;AAE1D,UAAM,eAA6B,CAAC;AACpC,eAAW,OAAO,UAAU;AAE1B,UAAI,IAAI,SAAS,YAAY,IAAI,WAAW,OAAW;AAEvD,mBAAa,KAAK;AAAA,QAChB,MAAM,IAAI;AAAA,QACV,SAAS,IAAI;AAAA,QACb,QAAQ,YAAY,IAAI,IAAI,IAAI;AAAA,QAChC,WAAW;AAAA,QACX,MAAM,KAAK,UAAU,IAAI,MAAM,IAAI,OAAO;AAAA,MAC5C,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,cAAc,SAAiB,cAAsC;AAC3E,UAAM,WAA2B,CAAC;AAClC,UAAM,SAAS,QAAQ,MAAM,oBAAoB;AAEjD,eAAW,SAAS,QAAQ;AAC1B,UAAI,CAAC,MAAM,KAAK,EAAG;AAEnB,YAAM,OAAO,KAAK,aAAa,OAAO,MAAM;AAC5C,YAAM,UAAU,KAAK,aAAa,OAAO,SAAS;AAClD,YAAM,SAAS,KAAK,aAAa,OAAO,QAAQ;AAEhD,UAAI,QAAQ,SAAS;AACnB,iBAAS,KAAK,EAAE,MAAM,SAAS,QAAQ,UAAU,OAAU,CAAC;AAAA,MAC9D;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,KAAK,QAAQ,SAAS,aAAa,GAAG;AAC5D,YAAM,IAAI,mBAAmB,cAAc,8CAA8C;AAAA,IAC3F;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa,OAAe,WAAkC;AACpE,UAAM,QAAQ,IAAI,OAAO,IAAI,SAAS,sBAAsB,GAAG;AAC/D,UAAM,QAAQ,MAAM,MAAM,KAAK;AAC/B,WAAO,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,SAA8B;AACnD,UAAM,cAAc,oBAAI,IAAY;AACpC,QAAI,gBAAgB;AAEpB,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,YAAM,OAAO,QAAQ,KAAK;AAG1B,UAAI,KAAK,WAAW,GAAG,GAAG;AACxB,wBACE,SAAS,oBACT,SAAS,wBACT,SAAS;AACX;AAAA,MACF;AAEA,UAAI,iBAAiB,QAAQ,CAAC,KAAK,WAAW,GAAG,GAAG;AAElD,cAAM,QAAQ,KAAK,MAAM,uBAAuB;AAChD,YAAI,OAAO;AACT,sBAAY,IAAI,MAAM,CAAC,CAAC;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,MAAc,SAAyB;AACvD,WAAO,aAAa,IAAI,IAAI,OAAO;AAAA,EACrC;AACF;;;ACtJA,SAAS,YAAAG,iBAAgB;AACzB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,WAAU;AAqBV,IAAM,aAAN,MAA8C;AAAA,EAC1C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,gBAAgB,kBAAkB;AAAA,EAE5D,MAAM,OAAO,aAA6C;AAExD,eAAW,YAAY,KAAK,eAAe;AACzC,YAAM,WAAWC,MAAK,KAAK,aAAa,QAAQ;AAChD,UAAIC,YAAW,QAAQ,EAAG,QAAO;AAAA,IACnC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACzE,UAAM,MAAM,MAAMC,UAAS,cAAc,OAAO;AAChD,UAAM,WAAWF,MAAK,SAAS,YAAY;AAE3C,QAAI;AAEJ,QAAI,aAAa,gBAAgB;AAC/B,qBAAe,KAAK,iBAAiB,KAAK,YAAY;AAAA,IACxD,OAAO;AACL,qBAAe,MAAM,KAAK,qBAAqB,KAAK,YAAY;AAAA,IAClE;AAEA,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAc,qBACZ,SACA,cACA,UAAuB,oBAAI,IAAI,GACR;AACvB,UAAM,OAAqB,CAAC;AAC5B,UAAM,aAAaA,MAAK,QAAQ,YAAY;AAC5C,UAAM,iBAAiBA,MAAK,QAAQ,YAAY;AAGhD,QAAI,QAAQ,IAAI,cAAc,GAAG;AAC/B,aAAO;AAAA,IACT;AACA,YAAQ,IAAI,cAAc;AAE1B,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,YAAM,OAAO,QAAQ,KAAK;AAG1B,UAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,GAAG;AACjC;AAAA,MACF;AAGA,YAAM,eAAe,KAAK,MAAM,aAAa,KAAK,KAAK,MAAM,wBAAwB;AACrF,UAAI,cAAc;AAChB,cAAM,cAAcA,MAAK,QAAQ,YAAY,aAAa,CAAC,EAAE,KAAK,CAAC;AACnE,YAAIC,YAAW,WAAW,GAAG;AAC3B,gBAAM,iBAAiB,MAAMC,UAAS,aAAa,OAAO;AAC1D,gBAAM,eAAe,MAAM,KAAK,qBAAqB,gBAAgB,aAAa,OAAO;AACzF,eAAK,KAAK,GAAG,YAAY;AAAA,QAC3B;AACA;AAAA,MACF;AAGA,UAAI,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,IAAI,GAAG;AACjD;AAAA,MACF;AAGA,YAAM,cAAc,KAAK,MAAM,kDAAkD;AACjF,UAAI,aAAa;AACf,cAAM,CAAC,EAAE,MAAM,OAAO,IAAI;AAC1B,YAAI,QAAQ,SAAS;AACnB,eAAK,KAAK;AAAA,YACR,MAAM,KAAK,iBAAiB,IAAI;AAAA,YAChC;AAAA,YACA,QAAQ;AAAA;AAAA,YACR,WAAW;AAAA,YACX,MAAM,KAAK,UAAU,MAAM,OAAO;AAAA,UACpC,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAGA,YAAM,WAAW,KAAK,MAAM,+CAA+C;AAC3E,UAAI,UAAU;AACZ,cAAM,IAAI;AAAA,UACR;AAAA,UACA,oCAAoC,IAAI;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBQ,iBAAiB,SAAiB,cAAoC;AAC5E,QAAI;AACJ,QAAI;AACF,iBAAW,KAAK,MAAM,OAAO;AAAA,IAC/B,QAAQ;AACN,YAAM,IAAI,mBAAmB,cAAc,8BAA8B;AAAA,IAC3E;AAEA,UAAM,OAAqB,CAAC;AAG5B,QAAI,SAAS,SAAS;AACpB,iBAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,SAAS,OAAO,GAAG;AAC3D,cAAM,UAAU,KAAK,SAAS,QAAQ,OAAO,EAAE,KAAK;AACpD,YAAI,SAAS;AACX,eAAK,KAAK;AAAA,YACR,MAAM,KAAK,iBAAiB,IAAI;AAAA,YAChC;AAAA,YACA,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,MAAM,KAAK,UAAU,MAAM,OAAO;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAGA,QAAI,SAAS,SAAS;AACpB,iBAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,SAAS,OAAO,GAAG;AAC3D,cAAM,UAAU,KAAK,SAAS,QAAQ,OAAO,EAAE,KAAK;AACpD,YAAI,SAAS;AACX,eAAK,KAAK;AAAA,YACR,MAAM,KAAK,iBAAiB,IAAI;AAAA,YAChC;AAAA,YACA,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,MAAM,KAAK,UAAU,MAAM,OAAO;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAAiB,MAAsB;AAC7C,WAAO,KAAK,YAAY,EAAE,QAAQ,WAAW,GAAG;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAAU,MAAc,SAAyB;AACvD,WAAO,YAAY,KAAK,iBAAiB,IAAI,CAAC,IAAI,OAAO;AAAA,EAC3D;AACF;;;ACtNA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,gBAAgB;AACzB,OAAOC,WAAU;AA+BV,IAAM,eAAN,MAAgD;AAAA,EAC5C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,SAAS;AAAA;AAAA,EAG3B;AAAA,EAER,YAAY,cAAgC;AAC1C,SAAK,aAAa,gBAAgB;AAAA,EACpC;AAAA,EAEA,MAAM,OAAO,aAA6C;AACxD,UAAM,UAAUC,MAAK,KAAK,aAAa,SAAS;AAChD,WAAOC,YAAW,OAAO,IAAI,UAAU;AAAA,EACzC;AAAA,EAEA,MAAM,KAAK,aAAqB,eAA4C;AAE1E,UAAM,UAAUD,MAAK,KAAK,aAAa,SAAS;AAChD,UAAM,aAAa,MAAME,UAAS,SAAS,OAAO,EAAE,MAAM,MAAM,IAAI;AACpE,UAAM,aAAa,aAAa,KAAK,qBAAqB,UAAU,IAAI,oBAAI,IAAY;AAGxF,UAAM,cAAcF,MAAK,KAAK,aAAa,qBAAqB;AAChE,QAAIC,YAAW,WAAW,GAAG;AAC3B,YAAM,UAAU,MAAMC,UAAS,aAAa,OAAO;AACnD,YAAM,eAAe,KAAK,oBAAoB,SAAS,UAAU;AACjE,aAAO,KAAK,YAAY,aAAa,aAAa,YAAY;AAAA,IAChE;AAGA,QAAI,KAAK,iBAAiB,GAAG;AAC3B,YAAM,SAAS,KAAK,uBAAuB,WAAW;AACtD,YAAM,eAAe,KAAK,oBAAoB,QAAQ,UAAU;AAChE,aAAO,KAAK,YAAY,aAAa,SAAS,YAAY;AAAA,IAC5D;AAEA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAGF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,qBAAqB,YAAiC;AAC5D,UAAM,aAAa,oBAAI,IAAY;AAInC,UAAM,gBAAgB;AACtB,UAAM,eAAe;AACrB,UAAM,kBAAkB;AAExB,QAAI;AACJ,YAAQ,QAAQ,cAAc,KAAK,UAAU,OAAO,MAAM;AACxD,YAAM,QAAQ,MAAM,CAAC;AACrB,YAAM,aAAa,MAAM,MAAM,YAAY;AAC3C,YAAM,gBAAgB,MAAM,MAAM,eAAe;AAEjD,UAAI,cAAc,eAAe;AAC/B,cAAM,UAAU,WAAW,CAAC,EAAE,KAAK;AACnC,cAAM,aAAa,cAAc,CAAC,EAAE,KAAK;AACzC,mBAAW,IAAI,GAAG,OAAO,IAAI,UAAU,EAAE;AAAA,MAC3C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,oBAAoB,SAAiB,YAAuC;AAClF,UAAM,OAAqB,CAAC;AAC5B,UAAM,OAAO,oBAAI,IAAY;AAE7B,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,YAAM,OAAO,QAAQ,KAAK;AAC1B,UAAI,CAAC,KAAM;AAGX,YAAM,QAAQ,KAAK,MAAM,GAAG;AAG5B,UAAI,MAAM,SAAS,EAAG;AAEtB,YAAM,UAAU,MAAM,CAAC;AACvB,YAAM,aAAa,MAAM,CAAC;AAI1B,UAAI;AACJ,UAAI;AAEJ,UAAI,MAAM,UAAU,GAAG;AAErB,kBAAU,MAAM,CAAC;AACjB,gBAAQ,MAAM,CAAC;AAAA,MACjB,OAAO;AAEL,kBAAU,MAAM,CAAC;AACjB,gBAAQ,MAAM,CAAC;AAAA,MACjB;AAGA,UAAI,CAAC,WAAW,CAAC,cAAc,CAAC,QAAS;AAGzC,UAAI,UAAU,OAAQ;AAEtB,YAAM,OAAO,GAAG,OAAO,IAAI,UAAU;AAGrC,UAAI,KAAK,IAAI,IAAI,EAAG;AACpB,WAAK,IAAI,IAAI;AAGb,YAAM,WAAW,WAAW,IAAI,IAAI;AAEpC,WAAK,KAAK;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM,KAAK,UAAU,SAAS,YAAY,OAAO;AAAA,MACnD,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,mBAA4B;AAClC,QAAI;AACF,WAAK,WAAW,iBAAiB,EAAE,OAAO,QAAQ,SAAS,IAAO,CAAC;AACnE,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,aAA6B;AAC1D,QAAI;AACF,YAAM,SAAS,KAAK;AAAA,QAClB;AAAA,QACA;AAAA,UACE,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA;AAAA,UACT,UAAU;AAAA,QACZ;AAAA,MACF;AACA,aAAO,OAAO,SAAS;AAAA,IACzB,SAAS,KAAc;AACrB,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,YAAM,IAAI;AAAA,QACRF,MAAK,KAAK,aAAa,SAAS;AAAA,QAChC,wCAAwC,OAAO;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAAU,SAAiB,YAAoB,SAAyB;AAC9E,WAAO,aAAa,OAAO,IAAI,UAAU,IAAI,OAAO;AAAA,EACtD;AAAA,EAEQ,YACN,aACA,cACA,cACY;AACZ,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AACF;;;ACvOA,SAAS,YAAAG,iBAAgB;AACzB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,WAAU;AA+BV,IAAM,YAAN,MAA6C;AAAA,EACzC,YAAuB;AAAA,EACvB,gBAAgB,CAAC,QAAQ;AAAA,EAElC,MAAM,OAAO,aAA6C;AACxD,UAAM,YAAYA,MAAK,KAAK,aAAa,QAAQ;AACjD,WAAOD,YAAW,SAAS,IAAI,YAAY;AAAA,EAC7C;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACzE,UAAM,CAAC,UAAU,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC7CD,UAAS,cAAc,OAAO;AAAA,MAC9BA,UAASE,MAAK,KAAK,aAAa,QAAQ,GAAG,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,IACtE,CAAC;AAED,UAAM,EAAE,aAAa,cAAc,IAAI,WACnC,KAAK,WAAW,QAAQ,IACxB,EAAE,aAAa,oBAAI,IAAY,GAAG,eAAe,oBAAI,IAAY,EAAE;AAEvE,UAAM,eAAe,KAAK,WAAW,UAAU,cAAc,aAAa,aAAa;AAEvF,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,WACN,SACA,cACA,aACA,eACc;AACd,UAAM,SAAS,oBAAI,IAAwB;AAE3C,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,YAAM,OAAO,QAAQ,KAAK;AAC1B,UAAI,CAAC,KAAM;AAGX,YAAM,QAAQ,KAAK,MAAM,KAAK;AAC9B,UAAI,MAAM,SAAS,EAAG;AAEtB,YAAM,aAAa,MAAM,CAAC;AAC1B,UAAI,UAAU,MAAM,CAAC;AAGrB,UAAI,QAAQ,SAAS,SAAS,EAAG;AAGjC,gBAAU,QAAQ,QAAQ,mBAAmB,EAAE;AAE/C,YAAM,MAAM,GAAG,UAAU,IAAI,OAAO;AACpC,UAAI,OAAO,IAAI,GAAG,EAAG;AAKrB,YAAM,WAAW,YAAY,OAAO,KAAK,cAAc,OAAO,IAC1D,YAAY,IAAI,UAAU,MAAM,CAAC,cAAc,IAAI,UAAU,KAAK,CAAC,YAAY,IAAI,UAAU,IAAI,QAAQ,YAAY,IAAI,UAAU,KACnI;AAEJ,aAAO,IAAI,KAAK;AAAA,QACd,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM,KAAK,UAAU,YAAY,OAAO;AAAA,MAC1C,CAAC;AAAA,IACH;AAEA,WAAO,MAAM,KAAK,OAAO,OAAO,CAAC;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeQ,WAAW,SAA2E;AAC5F,UAAM,cAAc,oBAAI,IAAY;AACpC,UAAM,gBAAgB,oBAAI,IAAY;AAEtC,QAAI,iBAAiB;AAErB,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,YAAM,OAAO,QAAQ,KAAK;AAG1B,UAAI,KAAK,WAAW,UAAU,KAAK,CAAC,KAAK,SAAS,GAAG,GAAG;AACtD,cAAM,QAAQ,KAAK,MAAM,6BAA6B;AACtD,YAAI,OAAO;AACT,gBAAM,aAAa,MAAM,CAAC;AAC1B,gBAAM,OAAO,MAAM,CAAC;AACpB,cAAI,KAAK,SAAS,aAAa,GAAG;AAChC,0BAAc,IAAI,UAAU;AAAA,UAC9B,OAAO;AACL,wBAAY,IAAI,UAAU;AAAA,UAC5B;AAAA,QACF;AACA;AAAA,MACF;AAGA,UAAI,SAAS,eAAe,KAAK,WAAW,WAAW,GAAG;AACxD,yBAAiB;AACjB;AAAA,MACF;AAGA,UAAI,kBAAkB,SAAS,KAAK;AAClC,yBAAiB;AACjB;AAAA,MACF;AAGA,UAAI,kBAAkB,QAAQ,CAAC,KAAK,WAAW,IAAI,GAAG;AACpD,cAAM,QAAQ,KAAK,MAAM,mBAAmB;AAC5C,YAAI,OAAO;AACT,gBAAM,aAAa,MAAM,CAAC;AAC1B,gBAAM,OAAO,MAAM,CAAC;AACpB,cAAI,KAAK,SAAS,aAAa,GAAG;AAChC,0BAAc,IAAI,UAAU;AAAA,UAC9B,OAAO;AACL,wBAAY,IAAI,UAAU;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,aAAa,cAAc;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,UAAU,YAAoB,SAAyB;AAC7D,WAAO,cAAc,UAAU,IAAI,OAAO;AAAA,EAC5C;AACF;;;ACnMA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,WAAU;AAoCV,IAAM,cAAN,MAA+C;AAAA,EAC3C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,cAAc;AAAA,EAExC,MAAM,OAAO,aAA6C;AACxD,UAAM,eAAeC,MAAK,KAAK,aAAa,cAAc;AAC1D,WAAOC,YAAW,YAAY,IAAI,eAAe;AAAA,EACnD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACzE,UAAM,UAAU,MAAMC,UAAS,cAAc,OAAO;AAEpD,UAAM,QAAQ,KAAK,WAAW,SAAS,YAAY;AACnD,UAAM,cAAc,KAAK,kBAAkB,OAAO;AAElD,UAAM,eAA6B,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,OAAO;AAAA,MACnE;AAAA,MACA;AAAA,MACA,QAAQ,YAAY,IAAI,IAAI;AAAA,MAC5B,WAAW;AAAA,MACX,MAAM,WAAW,IAAI,IAAI,OAAO;AAAA,IAClC,EAAE;AAEF,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYQ,WACN,SACA,cAC0C;AAC1C,UAAM,OAAiD,CAAC;AAExD,QAAI,eAAe;AACnB,QAAI,UAAU;AAEd,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,YAAM,OAAO;AAGb,UAAI,KAAK,SAAS,KAAK,KAAK,CAAC,MAAM,KAAK;AACtC,YAAI,KAAK,WAAW,KAAK,GAAG;AAC1B,yBAAe;AACf,oBAAU;AACV;AAAA,QACF;AAEA,uBAAe;AACf,kBAAU;AACV;AAAA,MACF;AAEA,UAAI,gBAAgB,KAAK,UAAU,EAAE,WAAW,QAAQ,GAAG;AACzD,kBAAU;AACV;AAAA,MACF;AAEA,UAAI,CAAC,QAAS;AAKd,YAAM,QAAQ,KAAK,MAAM,2BAA2B;AACpD,UAAI,OAAO;AACT,cAAM,CAAC,EAAE,MAAM,OAAO,IAAI;AAC1B,aAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,MAC7B;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,kBAAkB,SAA8B;AACtD,UAAM,cAAc,oBAAI,IAAY;AACpC,QAAI,iBAAiB;AAErB,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACzC,YAAM,OAAO;AAGb,UAAI,KAAK,SAAS,KAAK,KAAK,CAAC,MAAM,KAAK;AACtC,YAAI,KAAK,WAAW,cAAc,GAAG;AACnC,2BAAiB;AACjB;AAAA,QACF;AACA,YAAI,eAAgB;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,eAAgB;AAIrB,YAAM,QAAQ,KAAK,MAAM,0BAA0B;AACnD,UAAI,OAAO;AACT,oBAAY,IAAI,MAAM,CAAC,CAAC;AAAA,MAC1B;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;;;ACvKA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,WAAU;AAWV,IAAM,kBAAN,MAAmD;AAAA,EAC/C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,eAAe;AAAA,EAEzC,MAAM,OAAO,aAA6C;AACxD,UAAM,eAAeC,MAAK,KAAK,aAAa,eAAe;AAC3D,WAAOC,YAAW,YAAY,IAAI,eAAe;AAAA,EACnD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACzE,UAAM,CAAC,SAAS,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC/CC,UAAS,cAAc,OAAO;AAAA,MAC9BA,UAASF,MAAK,KAAK,aAAa,eAAe,GAAG,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,IAC7E,CAAC;AAED,UAAM,cAAc,cAAc,KAAK,sBAAsB,WAAW,IAAI;AAC5E,UAAM,eAAe,KAAK,kBAAkB,SAAS,cAAc,WAAW;AAE9E,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA,EAEQ,kBACN,SACA,cACA,aACc;AACd,QAAI;AACJ,QAAI;AACF,aAAO,KAAK,MAAM,OAAO;AAAA,IAC3B,QAAQ;AACN,YAAM,IAAI,mBAAmB,cAAc,+BAA+B;AAAA,IAC5E;AAEA,UAAM,cAAc,CAAC,GAAI,KAAK,YAAY,CAAC,GAAI,GAAI,KAAK,cAAc,KAAK,CAAC,CAAE;AAC9E,QAAI,YAAY,WAAW,GAAG;AAC5B,YAAM,IAAI,mBAAmB,cAAc,oCAAoC;AAAA,IACjF;AAEA,WAAO,YACJ,OAAO,CAAC,QAAQ,IAAI,QAAQ,IAAI,OAAO,EACvC,IAAI,CAAC,SAAS;AAAA,MACb,MAAM,IAAI;AAAA,MACV,SAAS,KAAK,iBAAiB,IAAI,OAAO;AAAA,MAC1C,QAAQ,cAAc,YAAY,IAAI,IAAI,IAAI,IAAI;AAAA,MAClD,WAAW;AAAA,MACX,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,iBAAiB,IAAI,OAAO,CAAC;AAAA,IACnE,EAAE;AAAA,EACN;AAAA,EAEQ,sBAAsB,SAA8B;AAC1D,QAAI;AACJ,QAAI;AACF,iBAAW,KAAK,MAAM,OAAO;AAAA,IAC/B,QAAQ;AACN,aAAO,oBAAI,IAAY;AAAA,IACzB;AAEA,UAAM,QAAQ,oBAAI,IAAY;AAC9B,eAAW,WAAW,CAAC,SAAS,WAAW,CAAC,GAAG,SAAS,aAAa,KAAK,CAAC,CAAC,GAAG;AAC7E,iBAAW,QAAQ,OAAO,KAAK,OAAO,GAAG;AAEvC,YAAI,SAAS,SAAS,KAAK,WAAW,MAAM,KAAK,KAAK,WAAW,MAAM,EAAG;AAC1E,cAAM,IAAI,IAAI;AAAA,MAChB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,SAAyB;AAChD,WAAO,QAAQ,KAAK;AAAA,EACtB;AAAA,EAEQ,UAAU,MAAc,SAAyB;AACvD,WAAO,gBAAgB,IAAI,IAAI,OAAO;AAAA,EACxC;AACF;;;AC/FA,SAAS,YAAAG,iBAAgB;AACzB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,WAAU;AACjB,SAAS,SAAS,iBAAiB;AAmB5B,IAAM,cAAN,MAA+C;AAAA,EACzC,YAAuB;AAAA,EACvB,gBAAgB,CAAC,WAAW;AAAA,EAErC,MAAM,OAAO,aAA6C;AACtD,UAAM,eAAeC,MAAK,KAAK,aAAa,WAAW;AACvD,WAAOC,YAAW,YAAY,IAAI,eAAe;AAAA,EACrD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACvE,UAAM,CAAC,aAAa,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpDC,UAAS,cAAc,OAAO;AAAA,MAC9BA,UAASF,MAAK,KAAK,aAAa,cAAc,GAAG,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,IAC9E,CAAC;AAGD,UAAM,cAAc,oBAAI,IAAY;AACpC,QAAI,gBAAgB;AAChB,UAAI;AACA,cAAM,MAAM,KAAK,MAAM,cAAc;AACrC,mBAAW,QAAQ,OAAO,KAAK,IAAI,gBAAgB,CAAC,CAAC,GAAG;AACpD,sBAAY,IAAI,IAAI;AAAA,QACxB;AACA,mBAAW,QAAQ,OAAO,KAAK,IAAI,mBAAmB,CAAC,CAAC,GAAG;AACvD,sBAAY,IAAI,IAAI;AAAA,QACxB;AAAA,MACJ,QAAQ;AAAA,MAER;AAAA,IACJ;AAEA,UAAM,eAAe,KAAK,cAAc,aAAa,cAAc,WAAW;AAE9E,WAAO;AAAA,MACH;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACtC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,cACJ,SACA,cACA,aACY;AACZ,QAAI;AAEA,YAAM,WAAW,KAAK,aAAa,OAAO;AAE1C,UAAI,UAAU;AACV,eAAO,KAAK,oBAAoB,SAAS,cAAc,WAAW;AAAA,MACtE,OAAO;AACH,eAAO,KAAK,gBAAgB,SAAS,cAAc,WAAW;AAAA,MAClE;AAAA,IACJ,SAAS,KAAK;AACV,YAAM,IAAI;AAAA,QACN;AAAA,QACA,8BAA8B,eAAe,QAAQ,IAAI,UAAU,eAAe;AAAA,MACtF;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa,SAA0B;AAC3C,WAAO,QAAQ,WAAW,aAAa,KACnC,QAAQ,SAAS,eAAe;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBQ,oBACJ,SACA,cACA,aACY;AACZ,UAAM,OAAqB,CAAC;AAC5B,UAAM,OAAO,oBAAI,IAAqB;AAEtC,QAAI;AACA,YAAM,SAAS,UAAU,OAAO;AAEhC,UAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACvC,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACzC;AAEA,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAE/C,YAAI,QAAQ,gBAAgB,IAAI,SAAS,aAAa,GAAG;AACrD;AAAA,QACJ;AAEA,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C;AAAA,QACJ;AAEA,cAAM,QAAQ;AAGd,YAAI,OAAsB;AAC1B,YAAI,MAAM,cAAc,OAAO,MAAM,eAAe,UAAU;AAC1D,iBAAO,KAAK,iCAAiC,MAAM,UAAU;AAAA,QACjE;AAEA,YAAI,CAAC,MAAM;AACP,iBAAO,KAAK,yBAAyB,GAAG;AAAA,QAC5C;AAEA,cAAM,UAAU,MAAM;AAEtB,YAAI,CAAC,QAAQ,CAAC,WAAW,OAAO,YAAY,UAAU;AAClD;AAAA,QACJ;AAGA,cAAM,SAAS,GAAG,IAAI,IAAI,OAAO;AACjC,YAAI,KAAK,IAAI,MAAM,GAAG;AAClB;AAAA,QACJ;AACA,aAAK,IAAI,QAAQ,IAAI;AAErB,aAAK,KAAK;AAAA,UACN;AAAA,UACA;AAAA,UACA,QAAQ,YAAY,IAAI,IAAI;AAAA,UAC5B,WAAW;AAAA,UACX,MAAM,KAAK,UAAU,MAAM,OAAO;AAAA,QACtC,CAAC;AAAA,MACL;AAAA,IACJ,SAAS,KAAK;AACV,YAAM,IAAI,MAAM,sCAAsC,eAAe,QAAQ,IAAI,UAAU,eAAe,EAAE;AAAA,IAChH;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,iCAAiC,YAAmC;AAIxE,QAAI,WAAW,WAAW,GAAG,GAAG;AAC5B,YAAMG,SAAQ,WAAW,MAAM,mBAAmB;AAClD,UAAIA,QAAO;AACP,eAAOA,OAAM,CAAC;AAAA,MAClB;AAAA,IACJ;AAGA,UAAM,QAAQ,WAAW,MAAM,WAAW;AAC1C,QAAI,OAAO;AACP,aAAO,MAAM,CAAC;AAAA,IAClB;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,yBAAyB,KAA4B;AAKzD,QAAI,IAAI,WAAW,GAAG,GAAG;AACrB,YAAMA,SAAQ,IAAI,MAAM,mBAAmB;AAC3C,UAAIA,QAAO;AACP,eAAOA,OAAM,CAAC;AAAA,MAClB;AAAA,IACJ;AAGA,UAAM,QAAQ,IAAI,MAAM,WAAW;AACnC,QAAI,OAAO;AACP,aAAO,MAAM,CAAC;AAAA,IAClB;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeQ,gBACJ,SACA,cACA,aACY;AACZ,UAAM,OAAqB,CAAC;AAC5B,UAAM,OAAO,oBAAI,IAAqB;AAEtC,UAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,QAAI,iBAA+D;AAEnE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAM,OAAO,MAAM,CAAC;AAGpB,UAAI,KAAK,KAAK,EAAE,WAAW,GAAG,KAAK,KAAK,KAAK,MAAM,IAAI;AACnD;AAAA,MACJ;AAIA,UAAI,KAAK,MAAM,SAAS,KAAK,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,WAAW,IAAI,GAAG;AAEvE,YAAI,gBAAgB,SAAS;AACzB,eAAK,cAAc,gBAAgB,aAAa,MAAM,IAAI;AAAA,QAC9D;AAGA,cAAM,UAAU,KAAK,UAAU,GAAG,KAAK,YAAY,GAAG,CAAC;AACvD,cAAM,QAAQ,QACT,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,gBAAgB,EAAE,CAAC,EAC/C,IAAI,CAAC,MAAM,KAAK,mBAAmB,CAAC,CAAC,EACrC,OAAO,CAAC,MAAmB,CAAC,CAAC,CAAC;AAEnC,yBAAiB,EAAE,OAAO,SAAS,OAAU;AAAA,MACjD,WAES,KAAK,KAAK,EAAE,WAAW,UAAU,KAAK,gBAAgB;AAC3D,cAAM,QAAQ,KAAK,MAAM,qBAAqB;AAC9C,YAAI,OAAO;AACP,yBAAe,UAAU,MAAM,CAAC;AAAA,QACpC;AAAA,MACJ;AAAA,IACJ;AAGA,QAAI,gBAAgB,SAAS;AACzB,WAAK,cAAc,gBAAgB,aAAa,MAAM,IAAI;AAAA,IAC9D;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKQ,cACJ,KACA,aACA,MACA,MACI;AACJ,QAAI,CAAC,IAAI,QAAS;AAGlB,UAAM,OAAO,IAAI,MAAM,CAAC;AACxB,QAAI,CAAC,KAAM;AAGX,UAAM,MAAM,GAAG,IAAI,IAAI,IAAI,OAAO;AAClC,QAAI,KAAK,IAAI,GAAG,EAAG;AACnB,SAAK,IAAI,KAAK,IAAI;AAElB,SAAK,KAAK;AAAA,MACN;AAAA,MACA,SAAS,IAAI;AAAA,MACb,QAAQ,YAAY,IAAI,IAAI;AAAA,MAC5B,WAAW;AAAA,MACX,MAAM,KAAK,UAAU,MAAM,IAAI,OAAO;AAAA,IAC1C,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,mBAAmB,gBAAuC;AAE9D,QAAI,eAAe,SAAS,OAAO,GAAG;AAClC,YAAM,cAAc,eAAe,MAAM,OAAO,EAAE,CAAC;AACnD,aAAO,eAAe;AAAA,IAC1B;AAIA,QAAI,eAAe,WAAW,GAAG,GAAG;AAEhC,YAAM,QAAQ,eAAe,MAAM,GAAG;AAEtC,UAAI,MAAM,UAAU,GAAG;AACnB,eAAO,IAAI,MAAM,CAAC,CAAC;AAAA,MACvB;AAAA,IACJ,OAAO;AAEH,YAAM,UAAU,eAAe,QAAQ,GAAG;AAC1C,UAAI,UAAU,GAAG;AACb,eAAO,eAAe,UAAU,GAAG,OAAO;AAAA,MAC9C;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,UAAU,MAAc,SAAyB;AACrD,QAAI,KAAK,WAAW,GAAG,GAAG;AAEtB,aAAO,cAAc,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO;AAAA,IACjD;AACA,WAAO,WAAW,IAAI,IAAI,OAAO;AAAA,EACrC;AACJ;;;AChYA,SAAS,YAAAC,kBAAgB;AACzB,SAAS,cAAAC,oBAAkB;AAC3B,OAAOC,YAAU;AACjB,SAAS,SAASC,kBAAiB;AAc5B,IAAM,cAAN,MAA+C;AAAA,EACzC,YAAuB;AAAA,EACvB,gBAAgB,CAAC,gBAAgB;AAAA,EAE1C,MAAM,OAAO,aAA6C;AACtD,UAAM,eAAeC,OAAK,KAAK,aAAa,gBAAgB;AAC5D,WAAOC,aAAW,YAAY,IAAI,eAAe;AAAA,EACrD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACvE,UAAM,cAAc,MAAMC,WAAS,cAAc,OAAO;AAExD,UAAM,eAAe,KAAK,cAAc,aAAa,YAAY;AAEjE,WAAO;AAAA,MACH;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACtC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuCQ,cACJ,SACA,cACY;AACZ,QAAI;AACA,YAAM,SAASC,WAAU,OAAO;AAEhC,UAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACvC,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACzC;AAEA,YAAM,WAAW;AAGjB,YAAM,kBAAkB,KAAK,qBAAqB,SAAS,eAAe;AAG1E,YAAM,cAAc,KAAK,0BAA0B,QAAQ;AAE3D,aAAO,KAAK,oBAAoB,UAAU,iBAAiB,WAAW;AAAA,IAC1E,SAAS,KAAK;AACV,YAAM,IAAI;AAAA,QACN;AAAA,QACA,mCAAmC,eAAe,QAAQ,IAAI,UAAU,eAAe;AAAA,MAC3F;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,0BAA0B,UAAqC;AACnE,UAAM,cAAc,oBAAI,IAAY;AAGpC,QAAI,SAAS,aAAa,OAAO,SAAS,cAAc,UAAU;AAC9D,YAAM,eAAe,SAAS,UAAU,GAAG;AAC3C,UAAI,gBAAgB,OAAO,iBAAiB,UAAU;AAElD,YAAI,aAAa,gBAAgB,OAAO,aAAa,iBAAiB,UAAU;AAC5E,qBAAW,QAAQ,OAAO,KAAK,aAAa,YAAY,GAAG;AACvD,wBAAY,IAAI,IAAI;AAAA,UACxB;AAAA,QACJ;AAGA,YAAI,aAAa,mBAAmB,OAAO,aAAa,oBAAoB,UAAU;AAClF,qBAAW,QAAQ,OAAO,KAAK,aAAa,eAAe,GAAG;AAC1D,wBAAY,IAAI,IAAI;AAAA,UACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAGA,QAAI,YAAY,SAAS,GAAG;AAExB,UAAI,SAAS,gBAAgB,OAAO,SAAS,iBAAiB,UAAU;AACpE,mBAAW,QAAQ,OAAO,KAAK,SAAS,YAAY,GAAG;AACnD,sBAAY,IAAI,IAAI;AAAA,QACxB;AAAA,MACJ;AAGA,UAAI,SAAS,mBAAmB,OAAO,SAAS,oBAAoB,UAAU;AAC1E,mBAAW,QAAQ,OAAO,KAAK,SAAS,eAAe,GAAG;AACtD,sBAAY,IAAI,IAAI;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,SAA8C;AACvE,QAAI,OAAO,YAAY,UAAU;AAC7B,aAAO;AAAA,IACX;AACA,QAAI,OAAO,YAAY,UAAU;AAC7B,YAAM,SAAS,WAAW,OAAO;AACjC,aAAO,MAAM,MAAM,IAAI,MAAM;AAAA,IACjC;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKQ,oBACJ,UACA,iBACA,aACY;AACZ,UAAM,OAAqB,CAAC;AAC5B,UAAM,OAAO,oBAAI,IAAqB;AAEtC,QAAI,CAAC,SAAS,YAAY,OAAO,SAAS,aAAa,UAAU;AAC7D,aAAO;AAAA,IACX;AAEA,eAAW,CAAC,SAAS,OAAO,KAAK,OAAO,QAAQ,SAAS,QAAQ,GAAG;AAChE,UAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AACzC;AAAA,MACJ;AAGA,UAAI,QAAQ,SAAS,aAAa,GAAG;AACjC;AAAA,MACJ;AAKA,YAAM,EAAE,MAAM,QAAQ,IAAI,KAAK,iBAAiB,SAAS,eAAe;AAExE,UAAI,CAAC,QAAQ,CAAC,SAAS;AACnB;AAAA,MACJ;AAGA,YAAM,SAAS,GAAG,IAAI,IAAI,OAAO;AACjC,UAAI,KAAK,IAAI,MAAM,GAAG;AAClB;AAAA,MACJ;AACA,WAAK,IAAI,QAAQ,IAAI;AAErB,WAAK,KAAK;AAAA,QACN;AAAA,QACA;AAAA,QACA,QAAQ,YAAY,IAAI,IAAI;AAAA,QAC5B,WAAW;AAAA,QACX,MAAM,KAAK,UAAU,MAAM,OAAO;AAAA,MACtC,CAAC;AAAA,IACL;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBQ,iBAAiB,SAAiB,iBAA0E;AAEhH,UAAMH,SAAO,QAAQ,WAAW,GAAG,IAAI,QAAQ,MAAM,CAAC,IAAI;AAG1D,UAAM,YAAYA,OAAK,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AAEjD,QAAI,CAAC,WAAW;AACZ,aAAO,EAAE,MAAM,MAAM,SAAS,KAAK;AAAA,IACvC;AAGA,QAAI,mBAAmB,GAAG;AACtB,aAAO,KAAK,cAAc,SAAS;AAAA,IACvC;AAGA,WAAO,KAAK,cAAc,SAAS;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAcA,QAA+D;AAEjF,QAAIA,OAAK,WAAW,GAAG,GAAG;AAEtB,YAAM,cAAcA,OAAK,YAAY,GAAG;AACxC,UAAI,eAAe,GAAG;AAClB,eAAO,EAAE,MAAM,MAAM,SAAS,KAAK;AAAA,MACvC;AAEA,YAAMI,QAAOJ,OAAK,UAAU,GAAG,WAAW;AAC1C,YAAMK,WAAUL,OAAK,UAAU,cAAc,CAAC;AAE9C,aAAO,EAAE,MAAAI,OAAM,SAAAC,SAAQ;AAAA,IAC3B;AAGA,UAAM,UAAUL,OAAK,QAAQ,GAAG;AAChC,QAAI,UAAU,GAAG;AACb,aAAO,EAAE,MAAM,MAAM,SAAS,KAAK;AAAA,IACvC;AAEA,UAAM,OAAOA,OAAK,UAAU,GAAG,OAAO;AACtC,UAAM,UAAUA,OAAK,UAAU,UAAU,CAAC;AAE1C,WAAO,EAAE,MAAM,QAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAcA,QAA+D;AAEjF,QAAIA,OAAK,WAAW,GAAG,GAAG;AACtB,YAAM,QAAQA,OAAK,MAAM,GAAG;AAE5B,UAAI,MAAM,SAAS,GAAG;AAClB,eAAO,EAAE,MAAM,MAAM,SAAS,KAAK;AAAA,MACvC;AAEA,YAAMI,QAAO,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACpC,YAAMC,WAAU,MAAM,CAAC;AAEvB,aAAO,EAAE,MAAAD,OAAM,SAAAC,SAAQ;AAAA,IAC3B;AAGA,UAAM,aAAaL,OAAK,QAAQ,GAAG;AACnC,QAAI,aAAa,GAAG;AAChB,aAAO,EAAE,MAAM,MAAM,SAAS,KAAK;AAAA,IACvC;AAEA,UAAM,OAAOA,OAAK,UAAU,GAAG,UAAU;AACzC,UAAM,UAAUA,OAAK,UAAU,aAAa,CAAC;AAE7C,WAAO,EAAE,MAAM,QAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,UAAU,MAAc,SAAyB;AACrD,QAAI,KAAK,WAAW,GAAG,GAAG;AAEtB,aAAO,cAAc,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO;AAAA,IACjD;AACA,WAAO,WAAW,IAAI,IAAI,OAAO;AAAA,EACrC;AACJ;;;AC/UA,SAAS,YAAAM,kBAAgB;AACzB,SAAS,cAAAC,oBAAkB;AAC3B,OAAOC,YAAU;AAkDV,IAAM,cAAN,MAA+C;AAAA,EAC3C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,WAAW;AAAA,EAErC,MAAM,OAAO,aAA6C;AACxD,eAAW,QAAQ,KAAK,eAAe;AACrC,YAAM,eAAeC,OAAK,KAAK,aAAa,IAAI;AAChD,UAAIC,aAAW,YAAY,EAAG,QAAO;AAAA,IACvC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACzE,UAAM,cAAc,MAAMC,WAAS,cAAc,OAAO;AAExD,QAAI;AACJ,QAAI;AACF,iBAAW,KAAK,MAAM,WAAW;AAAA,IACnC,QAAQ;AACN,YAAM,IAAI,mBAAmB,cAAc,cAAc;AAAA,IAC3D;AAEA,UAAM,eAAe,KAAK,cAAc,QAAQ;AAEhD,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,cAAc,UAAsC;AAC1D,UAAM,OAAqB,CAAC;AAG5B,UAAM,cAAc,KAAK,0BAA0B,QAAQ;AAG3D,UAAM,cAAc,SAAS,OAAO,SAAS,UAAU,OAAO,CAAC;AAC/D,UAAM,cAAc,SAAS,OAAO,SAAS,UAAU,OAAO,CAAC;AAG/D,eAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,YAAM,SAAS,KAAK,gBAAgB,GAAG;AACvC,UAAI,CAAC,OAAQ;AAEb,WAAK,KAAK;AAAA,QACR,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,QAAQ,YAAY,IAAI,OAAO,OAAO,IAAI,EAAE;AAAA,QAC5C,WAAW;AAAA;AAAA,QACX,MAAM,KAAK,aAAa,OAAO,MAAM,OAAO,OAAO;AAAA,MACrD,CAAC;AAAA,IACH;AAGA,eAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,YAAM,SAAS,KAAK,gBAAgB,GAAG;AACvC,UAAI,CAAC,OAAQ;AAEb,WAAK,KAAK;AAAA,QACR,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,QAAQ,YAAY,IAAI,OAAO,OAAO,IAAI,EAAE;AAAA,QAC5C,WAAW;AAAA;AAAA,QACX,MAAM,KAAK,aAAa,OAAO,MAAM,OAAO,OAAO;AAAA,MACrD,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,0BAA0B,UAAqC;AACrE,UAAM,cAAc,oBAAI,IAAY;AAGpC,UAAM,aAAa,SAAS,cAAc,SAAS,UAAU,cAAc,CAAC;AAE5E,eAAW,CAAC,YAAY,QAAQ,KAAK,OAAO,QAAQ,UAAU,GAAG;AAE/D,UAAI,SAAS,WAAW,OAAO,KAAK,SAAS,WAAW,QAAQ,KAAK,SAAS,WAAW,OAAO,KAAK,SAAS,WAAW,OAAO,GAAG;AACjI;AAAA,MACF;AAGA,UAAI,YAAkC;AACtC,UAAI,WAAW,WAAW,MAAM,GAAG;AACjC,oBAAY;AAAA,MACd,WAAW,WAAW,WAAW,MAAM,GAAG;AACxC,oBAAY;AAAA,MACd;AAEA,UAAI,CAAC,UAAW;AAEhB,UAAI,cAAc;AAElB,UAAI,SAAS,WAAW,MAAM,KAAK,SAAS,WAAW,MAAM,GAAG;AAE9D,sBAAc,SAAS,QAAQ,gBAAgB,EAAE;AACjD,cAAM,SAAS,KAAK,gBAAgB,WAAW;AAC/C,YAAI,QAAQ;AACV,sBAAY,IAAI,GAAG,SAAS,IAAI,OAAO,IAAI,EAAE;AAAA,QAC/C;AAAA,MACF,OAAO;AAGL,cAAM,OAAO,KAAK,yBAAyB,UAAU;AACrD,YAAI,MAAM;AACR,sBAAY,IAAI,GAAG,SAAS,IAAI,IAAI,EAAE;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,gBAAgB,KAAuD;AAE7E,UAAM,cAAc,IAAI,YAAY,GAAG;AACvC,QAAI,eAAe,EAAG,QAAO;AAE7B,UAAM,OAAO,IAAI,MAAM,GAAG,WAAW;AACrC,UAAM,UAAU,IAAI,MAAM,cAAc,CAAC;AAEzC,QAAI,CAAC,QAAQ,CAAC,QAAS,QAAO;AAC9B,WAAO,EAAE,MAAM,QAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaQ,yBAAyB,WAAkC;AAEjE,UAAM,gBAAgB,UAAU,QAAQ,gBAAgB,EAAE;AAC1D,QAAI,CAAC,cAAe,QAAO;AAG3B,QAAI,cAAc,WAAW,GAAG,GAAG;AAEjC,YAAM,aAAa,cAAc,QAAQ,GAAG;AAC5C,UAAI,eAAe,GAAI,QAAO;AAC9B,YAAM,aAAa,cAAc,QAAQ,KAAK,UAAU;AACxD,UAAI,eAAe,GAAI,QAAO;AAC9B,aAAO,cAAc,MAAM,GAAG,UAAU;AAAA,IAC1C;AAGA,UAAM,UAAU,cAAc,QAAQ,GAAG;AACzC,QAAI,YAAY,GAAI,QAAO;AAC3B,WAAO,cAAc,MAAM,GAAG,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,aAAa,MAAc,SAAyB;AAC1D,QAAI,KAAK,WAAW,GAAG,GAAG;AAExB,YAAM,UAAU,QAAQ,KAAK,MAAM,CAAC,EAAE,QAAQ,OAAO,KAAK;AAC1D,aAAO,WAAW,OAAO,IAAI,OAAO;AAAA,IACtC;AACA,WAAO,WAAW,IAAI,IAAI,OAAO;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,aAAa,MAAc,SAAyB;AAC1D,QAAI,KAAK,WAAW,GAAG,GAAG;AACxB,aAAO,cAAc,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO;AAAA,IAC/C;AACA,WAAO,WAAW,IAAI,IAAI,OAAO;AAAA,EACnC;AACF;;;ACzQA,SAAS,YAAAC,kBAAgB;AACzB,SAAS,cAAAC,oBAAkB;AAC3B,OAAOC,YAAU;AA6BV,IAAM,gBAAN,MAAiD;AAAA,EAC3C,YAAuB;AAAA,EACvB,gBAAgB,CAAC,aAAa;AAAA,EAEvC,MAAM,OAAO,aAA6C;AACtD,UAAM,eAAeC,OAAK,KAAK,aAAa,aAAa;AACzD,WAAOC,aAAW,YAAY,IAAI,eAAe;AAAA,EACrD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACvE,UAAM,CAAC,aAAa,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,MAClDC,WAAS,cAAc,OAAO;AAAA,MAC9BA,WAASF,OAAK,KAAK,aAAa,gBAAgB,GAAG,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,IAChF,CAAC;AAED,UAAM,WAAW,KAAK,cAAc,aAAa,YAAY;AAC7D,UAAM,cAAc,eAAe,KAAK,mBAAmB,YAAY,IAAI,oBAAI,IAAY;AAE3F,UAAM,eAA6B,CAAC;AACpC,eAAW,OAAO,UAAU;AACxB,mBAAa,KAAK;AAAA,QACd,MAAM,KAAK,iBAAiB,IAAI,IAAI;AAAA,QACpC,SAAS,IAAI;AAAA,QACb,QAAQ,YAAY,OAAO,IAAI,YAAY,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI;AAAA,QAClF,WAAW;AAAA,QACX,MAAM,KAAK,UAAU,IAAI,MAAM,IAAI,OAAO;AAAA,MAC9C,CAAC;AAAA,IACL;AAEA,WAAO;AAAA,MACH;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACtC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,cAAc,SAAiB,cAAuC;AAC1E,UAAM,WAA4B,CAAC;AACnC,UAAM,SAAS,QAAQ,MAAM,oBAAoB;AAEjD,eAAW,SAAS,QAAQ;AACxB,UAAI,CAAC,MAAM,KAAK,EAAG;AAEnB,YAAM,OAAO,KAAK,aAAa,OAAO,MAAM;AAC5C,YAAM,UAAU,KAAK,aAAa,OAAO,SAAS;AAElD,UAAI,QAAQ,SAAS;AACjB,iBAAS,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,MACnC;AAAA,IACJ;AAEA,QAAI,SAAS,WAAW,KAAK,QAAQ,SAAS,aAAa,GAAG;AAC1D,YAAM,IAAI,mBAAmB,cAAc,+CAA+C;AAAA,IAC9F;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa,OAAe,WAAkC;AAClE,UAAM,QAAQ,IAAI,OAAO,IAAI,SAAS,sBAAsB,GAAG;AAC/D,UAAM,QAAQ,MAAM,MAAM,KAAK;AAC/B,WAAO,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeQ,mBAAmB,SAA8B;AACrD,UAAM,cAAc,oBAAI,IAAY;AACpC,QAAI,gBAAgB;AAEpB,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACvC,YAAM,OAAO,QAAQ,KAAK;AAG1B,UAAI,KAAK,WAAW,GAAG,GAAG;AACtB,wBACI,SAAS,gCACT,kDAAkD,KAAK,IAAI;AAC/D;AAAA,MACJ;AAEA,UAAI,iBAAiB,QAAQ,CAAC,KAAK,WAAW,GAAG,GAAG;AAEhD,cAAM,QAAQ,KAAK,MAAM,oCAAoC;AAC7D,YAAI,SAAS,MAAM,CAAC,GAAG;AACnB,gBAAM,OAAO,KAAK,iBAAiB,MAAM,CAAC,CAAC;AAE3C,cAAI,SAAS,UAAU;AACnB,wBAAY,IAAI,IAAI;AAAA,UACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAAiB,MAAsB;AAC3C,WAAO,KAAK,YAAY,EAAE,QAAQ,WAAW,GAAG;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAAU,MAAc,SAAyB;AACrD,WAAO,YAAY,KAAK,iBAAiB,IAAI,CAAC,IAAI,OAAO;AAAA,EAC7D;AACJ;;;ACrKA,SAAS,YAAAG,kBAAgB;AACzB,SAAS,cAAAC,oBAAkB;AAC3B,OAAOC,YAAU;AAkCV,IAAM,YAAN,MAA6C;AAAA,EACvC,YAAuB;AAAA,EACvB,gBAAgB,CAAC,SAAS;AAAA,EAEnC,MAAM,OAAO,aAA6C;AACtD,UAAM,eAAeC,OAAK,KAAK,aAAa,SAAS;AACrD,WAAOC,aAAW,YAAY,IAAI,eAAe;AAAA,EACrD;AAAA,EAEA,MAAM,KAAK,aAAqB,cAA2C;AACvE,UAAM,CAAC,aAAa,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,MAClDC,WAAS,cAAc,OAAO;AAAA,MAC9BA,WAASF,OAAK,KAAK,aAAa,gBAAgB,GAAG,OAAO,EAAE,MAAM,MAAM,IAAI;AAAA,IAChF,CAAC;AAED,UAAM,WAAW,KAAK,cAAc,aAAa,YAAY;AAC7D,UAAM,cAAc,eAAe,KAAK,mBAAmB,YAAY,IAAI;AAC3E,UAAM,cAAc,eAAe,KAAK,mBAAmB,YAAY,IAAI,oBAAI,IAAY;AAE3F,UAAM,eAA6B,CAAC;AACpC,eAAW,OAAO,UAAU;AAExB,UAAI,IAAI,WAAY;AACpB,UAAI,eAAe,KAAK,iBAAiB,IAAI,IAAI,MAAM,KAAK,iBAAiB,WAAW,GAAG;AACvF;AAAA,MACJ;AAEA,mBAAa,KAAK;AAAA,QACd,MAAM,KAAK,iBAAiB,IAAI,IAAI;AAAA,QACpC,SAAS,IAAI;AAAA,QACb,QAAQ,YAAY,OAAO,IAAI,YAAY,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI;AAAA,QAClF,WAAW;AAAA,QACX,MAAM,KAAK,UAAU,IAAI,MAAM,IAAI,OAAO;AAAA,MAC9C,CAAC;AAAA,IACL;AAEA,WAAO;AAAA,MACH;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACtC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,cAAc,SAAiB,cAAmC;AACtE,UAAM,WAAwB,CAAC;AAC/B,UAAM,SAAS,QAAQ,MAAM,oBAAoB;AAEjD,eAAW,SAAS,QAAQ;AACxB,UAAI,CAAC,MAAM,KAAK,EAAG;AAEnB,YAAM,OAAO,KAAK,aAAa,OAAO,MAAM;AAC5C,YAAM,UAAU,KAAK,aAAa,OAAO,SAAS;AAElD,UAAI,QAAQ,SAAS;AAEjB,cAAM,aAAa,mCAAmC,KAAK,KAAK,KAC5D,kCAAkC,KAAK,KAAK;AAChD,iBAAS,KAAK,EAAE,MAAM,SAAS,WAAW,CAAC;AAAA,MAC/C;AAAA,IACJ;AAEA,QAAI,SAAS,WAAW,KAAK,QAAQ,SAAS,aAAa,GAAG;AAC1D,YAAM,IAAI,mBAAmB,cAAc,2CAA2C;AAAA,IAC1F;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa,OAAe,WAAkC;AAClE,UAAM,QAAQ,IAAI,OAAO,IAAI,SAAS,sBAAsB,GAAG;AAC/D,UAAM,QAAQ,MAAM,MAAM,KAAK;AAC/B,WAAO,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,mBAAmB,SAAgC;AACvD,QAAI,mBAAmB;AAEvB,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACvC,YAAM,OAAO,QAAQ,KAAK;AAE1B,UAAI,KAAK,WAAW,GAAG,GAAG;AACtB,2BAAmB,SAAS;AAC5B;AAAA,MACJ;AAEA,UAAI,kBAAkB;AAClB,cAAM,QAAQ,KAAK,MAAM,uBAAuB;AAChD,YAAI,MAAO,QAAO,MAAM,CAAC;AAAA,MAC7B;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeQ,mBAAmB,SAA8B;AACrD,UAAM,cAAc,oBAAI,IAAY;AAGpC,SAAK,mBAAmB,SAAS,WAAW;AAG5C,SAAK,wBAAwB,SAAS,WAAW;AAEjD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,mBAAmB,SAAiB,aAAgC;AAMxE,UAAM,aAAa;AACnB,QAAI;AACJ,YAAQ,QAAQ,WAAW,KAAK,OAAO,OAAO,MAAM;AAChD,YAAM,eAAe,MAAM,CAAC;AAC5B,WAAK,gBAAgB,cAAc,WAAW;AAAA,IAClD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,wBAAwB,SAAiB,aAAgC;AAC7E,QAAI,cAAc;AAElB,eAAW,WAAW,QAAQ,MAAM,IAAI,GAAG;AACvC,YAAM,OAAO,QAAQ,KAAK;AAE1B,UAAI,KAAK,WAAW,GAAG,GAAG;AACtB,sBAAc,SAAS;AACvB;AAAA,MACJ;AAEA,UAAI,eAAe,QAAQ,CAAC,KAAK,WAAW,GAAG,GAAG;AAE9C,cAAM,aAAa,KAAK,MAAM,oCAAoC;AAClE,YAAI,YAAY;AACZ,eAAK,gBAAgB,WAAW,CAAC,GAAG,WAAW;AAAA,QACnD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,gBAAgB,SAAiB,aAAgC;AACrE,UAAM,aAAa,QAAQ,MAAM,YAAY;AAC7C,QAAI,CAAC,WAAY;AAEjB,eAAW,UAAU,YAAY;AAC7B,YAAM,SAAS,OAAO,QAAQ,MAAM,EAAE,EAAE,KAAK;AAC7C,UAAI,CAAC,OAAQ;AAGb,YAAM,YAAY,OAAO,MAAM,gCAAgC;AAC/D,UAAI,aAAa,UAAU,CAAC,GAAG;AAC3B,oBAAY,IAAI,KAAK,iBAAiB,UAAU,CAAC,CAAC,CAAC;AAAA,MACvD;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAAiB,MAAsB;AAC3C,WAAO,KAAK,YAAY,EAAE,QAAQ,WAAW,GAAG;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,UAAU,MAAc,SAAyB;AACrD,WAAO,YAAY,KAAK,iBAAiB,IAAI,CAAC,IAAI,OAAO;AAAA,EAC7D;AACJ;;;ACvOO,IAAM,kBAAN,MAAsB;AAAA,EACnB;AAAA,EAER,cAAc;AACZ,SAAK,WAAW;AAAA,MACd,IAAI,WAAW;AAAA,MACf,IAAI,aAAa;AAAA,MACjB,IAAI,aAAa;AAAA,MACjB,IAAI,WAAW;AAAA,MACf,IAAI,cAAc;AAAA,MAClB,IAAI,UAAU;AAAA,MACd,IAAI,aAAa;AAAA,MACjB,IAAI,UAAU;AAAA,MACd,IAAI,YAAY;AAAA,MAChB,IAAI,gBAAgB;AAAA,MACpB,IAAI,YAAY;AAAA,MAChB,IAAI,YAAY;AAAA,MAChB,IAAI,YAAY;AAAA,IAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,aAA0C;AAC5D,eAAW,WAAW,KAAK,UAAU;AACnC,YAAM,eAAe,MAAM,QAAQ,OAAO,WAAW;AACrD,UAAI,cAAc;AAChB,eAAO,QAAQ,KAAK,aAAa,YAAY;AAAA,MAC/C;AAAA,IACF;AACA,UAAM,IAAI,gBAAgB,WAAW;AAAA,EACvC;AAAA;AAAA,EAGA,WAAW,WAAkD;AAC3D,WAAO,KAAK,SAAS,KAAK,CAAC,MAAM,EAAE,cAAc,SAAS;AAAA,EAC5D;AAAA;AAAA,EAGA,iBAA2B;AACzB,WAAO,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,SAAS;AAAA,EAC7C;AACF;;;ACjEA,SAAS,cAAAG,mBAAkB;AAe3B,IAAM,cAAoD;AAAA,EACxD,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAkBO,IAAM,qBAAN,MAAkD;AAAA,EAGvD,YAA6B,cAAoC,OAAO;AAA3C;AAAA,EAA6C;AAAA,EAFjE,SAAqB;AAAA,EAI9B,SAAS,YAAwB,cAAsB,sBAA4B;AACjF,UAAM,MAAM,KAAK,SAAS,YAAY,WAAW;AACjD,UAAM,UAAU,KAAK,UAAU,KAAK,MAAM,CAAC;AAE3C,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAa,KAAK;AAAA,MAClB;AAAA,MACA,gBAAgB,WAAW,aAAa;AAAA,MACxC,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,IACtC;AAAA,EACF;AAAA,EAEQ,SAAS,YAAwB,aAAmC;AAC1E,UAAM,cAAc,mBAAmB,WAAW,WAAW;AAE7D,WAAO;AAAA,MACL,SAAS,YAAY,KAAK,WAAW;AAAA,MACrC,WAAW;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,cAAc,YAAYC,YAAW,CAAC;AAAA,MACtC,SAAS;AAAA,MACT,UAAU;AAAA,QACR,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,OAAO,KAAK,WAAW,WAAW;AAAA;AAAA,QAElC,UAAU;AAAA,UACR,MAAM;AAAA,QACR;AAAA,QACA,WAAW;AAAA,UACT,MAAM;AAAA,UACN,MAAM;AAAA,UACN,WAAW;AAAA,UACX,UAAU,EAAE,MAAM,YAAY;AAAA,QAChC;AAAA,MACF;AAAA,MACA,YAAY,WAAW,aAAa,IAAI,CAAC,QAAQ,KAAK,YAAY,GAAG,CAAC;AAAA,MACtE,cAAc,KAAK,qBAAqB,UAAU;AAAA,IACpD;AAAA,EACF;AAAA;AAAA,EAGQ,YAAY,KAAqC;AACvD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,IAAI;AAAA,MACV,SAAS,IAAI;AAAA,MACb,MAAM,IAAI;AAAA,MACV,WAAW,IAAI;AAAA,MACf,OAAO,IAAI,SAAS,aAAa;AAAA;AAAA,MAEjC,UAAU;AAAA,QACR,MAAM,mBAAmB,IAAI,IAAI;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaQ,qBAAqB,YAAoD;AAC/E,UAAM,cAAc,WAAW,aAAa,IAAI,CAAC,MAAM,EAAE,IAAI;AAE7D,WAAO;AAAA,MACL;AAAA,QACE,KAAK;AAAA,QACL,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,WAAW,aAAqC;AACtD,QAAI,KAAK,gBAAgB,OAAO;AAC9B,aAAO;AAAA,QACL;AAAA,UACE,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,SAAS;AAAA,UACT,oBAAoB,CAAC,EAAE,MAAM,WAAW,KAAK,oBAAoB,CAAC;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,YAAY;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,aAAa;AAAA,UACb,UAAU,EAAE,MAAM,SAAS;AAAA,UAC3B,oBAAoB,CAAC,EAAE,MAAM,WAAW,KAAK,oBAAoB,CAAC;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACzJA,SAAS,cAAAC,mBAAkB;AAU3B,IAAMC,gBAAe;AAGd,IAAM,oBAAN,MAAiD;AAAA,EAC7C,SAAqB;AAAA,EAE9B,SAAS,YAAwB,cAAsB,sBAA4B;AACjF,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,cAAc,mBAAmB,WAAW,WAAW;AAC7D,UAAM,gBAAgB;AACtB,UAAM,eAAe,sBAAsB,WAAW,YAAY;AAElE,UAAM,WAAW;AAAA,MACf,aAAa,QAAQA,aAAY;AAAA,MACjC,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,MAAM,GAAG,WAAW;AAAA,MACpB,mBAAmB,+BAA+B,WAAW,IAAIC,YAAW,CAAC;AAAA,MAC7E,cAAc;AAAA,QACZ,SAAS;AAAA,QACT,UAAU,CAAC,SAAS,gBAAgB,IAAI,WAAW,EAAE;AAAA,MACvD;AAAA,MACA,mBAAmB,CAAC,aAAa;AAAA,MACjC,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,UAAU,iBAAiB,WAAW;AAAA,UACtC,kBAAkB;AAAA,UAClB,eAAe;AAAA,UACf,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,uBAAuB;AAAA,QACzB;AAAA,QACA,GAAG,aAAa,IAAI,CAAC,KAAK,WAAW;AAAA,UACnC,MAAM,IAAI;AAAA,UACV,QAAQ,mBAAmB,QAAQ,CAAC;AAAA,UACpC,aAAa,IAAI;AAAA,UACjB,UAAU,iBAAiB,IAAI,YAAY;AAAA,UAC3C,kBAAkB;AAAA,UAClB,eAAe;AAAA,UACf,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,uBAAuB;AAAA,UACvB,cAAc;AAAA,YACZ;AAAA,cACE,mBAAmB;AAAA,cACnB,eAAe;AAAA,cACf,kBAAkB,IAAI;AAAA,YACxB;AAAA,UACF;AAAA,QACF,EAAE;AAAA,MACJ;AAAA,MACA,eAAe;AAAA,QACb;AAAA,UACE,eAAe;AAAA,UACf,kBAAkB;AAAA,UAClB,oBAAoB;AAAA,QACtB;AAAA,QACA,GAAG,aAAa,IAAI,CAAC,MAAM,WAAW;AAAA,UACpC,eAAe;AAAA,UACf,kBAAkB;AAAA,UAClB,oBAAoB,mBAAmB,QAAQ,CAAC;AAAA,QAClD,EAAE;AAAA,MACJ;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAaD;AAAA,MACb,SAAS,KAAK,UAAU,UAAU,MAAM,CAAC;AAAA,MACzC,gBAAgB,WAAW,aAAa;AAAA,MACxC,aAAa;AAAA,IACf;AAAA,EACF;AACF;;;ACtFA,SAAS,cAAAE,mBAAkB;AAU3B,IAAMC,qBAAoB;AAGnB,IAAM,mBAAN,MAAgD;AAAA,EAC5C,SAAqB;AAAA,EAE9B,SAAS,YAAwB,cAAsB,sBAA4B;AACjF,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,cAAc,mBAAmB,WAAW,WAAW;AAC7D,UAAM,QAAQ,cAAcC,eAAc,WAAW,CAAC,IAAI,oBAAoB,IAAIC,YAAW,CAAC;AAE9F,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAWC,WAAU,WAAW,CAAC;AAAA,MACjC,YAAYA,WAAU,KAAK,CAAC;AAAA,MAC5B;AAAA,MACA,cAAc,oBAAoB;AAAA,MAClC;AAAA,MACA,mBAAmBA,WAAU,WAAW,CAAC;AAAA,MACzC;AAAA,MACA,oBAAoBA,WAAU,WAAW,CAAC,gBAAgB,gBAAgB,kBAAkB,WAAW,gBAAgB,SAAS;AAAA,MAChI;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAEX,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAaH;AAAA,MACb;AAAA,MACA,gBAAgB;AAAA,MAChB,aAAa;AAAA,IACf;AAAA,EACF;AACF;AAEA,SAASG,WAAU,OAAuB;AACxC,SAAO,MACJ,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,QAAQ;AAC7B;AAEA,SAASF,eAAc,OAAuB;AAC5C,SAAO,MACJ,YAAY,EACZ,QAAQ,kBAAkB,GAAG,EAC7B,QAAQ,YAAY,EAAE;AAC3B;;;ACtDO,SAAS,sBACd,YACA,cAAsB,sBACtB,mBAAyC,OAC1B;AAEf,SAAO;AAAA,IACL,WAAW,IAAI,mBAAmB,gBAAgB,EAAE,SAAS,YAAY,WAAW;AAAA,IACpF,MAAM,IAAI,kBAAkB,EAAE,SAAS,YAAY,WAAW;AAAA,IAC9D,MAAM,IAAI,iBAAiB,EAAE,SAAS,YAAY,WAAW;AAAA,EAC/D;AACF;;;AChBA,IAAM,eAAe;AACrB,IAAM,aAAa;AAiBZ,IAAM,YAAN,MAAqC;AAAA,EACjC,WAAgC;AAAA,EAChC,OAAO;AAAA,EAER;AAAA,EAER,YAAY,WAA0B;AAEpC,SAAK,UAAU,aAAa,WAAW;AAAA,EACzC;AAAA,EAEA,MAAM,kBAAkB,cAAsD;AAC5E,QAAI,aAAa,WAAW,EAAG,QAAO,CAAC;AAEvC,UAAM,WAA4B,CAAC;AAGnC,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,YAAY;AACxD,YAAM,QAAQ,aAAa,MAAM,GAAG,IAAI,UAAU;AAClD,YAAM,aAAa,MAAM,KAAK,WAAW,KAAK;AAC9C,eAAS,KAAK,GAAG,UAAU;AAAA,IAC7B;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,WAAW,cAAsD;AAC7E,UAAM,UAAU,aAAa,IAAI,CAAC,SAAS;AAAA,MACzC,SAAS,IAAI;AAAA,MACb,SAAS;AAAA,QACP,MAAM,IAAI;AAAA,QACV,WAAW,KAAK,aAAa,IAAI,SAAS;AAAA,MAC5C;AAAA,IACF,EAAE;AAEF,UAAM,WAAW,MAAM,KAAK,QAAQ,GAAG,YAAY,eAAe;AAAA,MAChE,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,QAAQ,CAAC;AAAA,IAClC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,kBAAkB,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,IAC5E;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAGlC,UAAM,eAAe,oBAAI,IAA0B;AAEnD,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC5C,YAAM,SAAS,KAAK,QAAQ,CAAC;AAC7B,YAAM,MAAM,aAAa,CAAC;AAE1B,UAAI,OAAO,SAAS,OAAO,MAAM,SAAS,GAAG;AAC3C,mBAAW,QAAQ,OAAO,OAAO;AAC/B,gBAAM,WAAW,aAAa,IAAI,KAAK,EAAE;AACzC,cAAI,UAAU;AACZ,qBAAS,KAAK,GAAG;AAAA,UACnB,OAAO;AACL,yBAAa,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,SAAS,GAAG;AAC3B,aAAO,CAAC;AAAA,IACV;AAGA,UAAM,UAAU,MAAM,KAAK,aAAa,KAAK,CAAC;AAC9C,UAAM,YAAY,MAAM,KAAK,0BAA0B,OAAO;AAG9D,UAAM,kBAAmC,CAAC;AAE1C,eAAW,WAAW,WAAW;AAC/B,YAAM,eAAe,aAAa,IAAI,QAAQ,EAAE,KAAK,CAAC;AACtD,iBAAW,OAAO,cAAc;AAC9B,wBAAgB,KAAK,KAAK,iBAAiB,SAAS,GAAG,CAAC;AAAA,MAC1D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,0BAA0B,SAAgD;AACtF,UAAM,UAA8B,CAAC;AAGrC,UAAM,cAAc;AACpB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,aAAa;AACpD,YAAM,QAAQ,QAAQ,MAAM,GAAG,IAAI,WAAW;AAC9C,YAAM,WAAW,MAAM,IAAI,OAAO,OAAO;AACvC,YAAI;AACF,gBAAM,WAAW,MAAM,KAAK,QAAQ,GAAG,YAAY,UAAU,mBAAmB,EAAE,CAAC,IAAI;AAAA,YACrF,QAAQ;AAAA,YACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,UAChD,CAAC;AAED,cAAI,CAAC,SAAS,IAAI;AAEhB,oBAAQ,KAAK,iCAAiC,EAAE,KAAK,SAAS,MAAM,EAAE;AACtE,mBAAO;AAAA,UACT;AAEA,iBAAQ,MAAM,SAAS,KAAK;AAAA,QAC9B,SAAS,KAAK;AACZ,kBAAQ,KAAK,gCAAgC,EAAE,KAAK,GAAG;AACvD,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAED,YAAM,eAAe,MAAM,QAAQ,IAAI,QAAQ;AAC/C,cAAQ,KAAK,GAAG,aAAa,OAAO,CAAC,MAA6B,MAAM,IAAI,CAAC;AAAA,IAC/E;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,iBAAiB,SAA2B,KAAgC;AAClF,UAAM,QAAQ,KAAK,aAAa,OAAO;AACvC,UAAM,WAAW,KAAK,gBAAgB,OAAO;AAE7C,WAAO;AAAA,MACL,IAAI,SAAS,QAAQ;AAAA,MACrB,SAAS,MAAM,KAAK,oBAAI,IAAI,CAAC,QAAQ,IAAI,GAAI,QAAQ,WAAW,CAAC,CAAE,CAAC,CAAC;AAAA,MACrE,SAAS,QAAQ,WAAW,QAAQ,SAAS,MAAM,GAAG,GAAG,KAAK;AAAA,MAC9D,UAAU,SAAS;AAAA,MACnB,WAAW,SAAS;AAAA,MACpB,aAAa,IAAI;AAAA,MACjB,WAAW,IAAI;AAAA,MACf,sBAAsB,KAAK,qBAAqB,SAAS,IAAI,IAAI;AAAA,MACjE,cAAc,KAAK,oBAAoB,SAAS,IAAI,IAAI;AAAA,MACxD,iBAAiB;AAAA;AAAA,MACjB,QAAQ;AAAA,MACR,cAAc,iCAAiC,QAAQ,EAAE;AAAA,MACzD,aAAa,QAAQ;AAAA,IACvB;AAAA,EACF;AAAA;AAAA,EAGQ,aAAa,MAAuC;AAE1D,QAAI,KAAK,GAAG,WAAW,MAAM,EAAG,QAAO,KAAK;AAG5C,QAAI,KAAK,SAAS;AAChB,YAAM,MAAM,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC;AACzD,UAAI,IAAK,QAAO;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,gBAAgB,MAA6D;AAEnF,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,iBAAW,OAAO,KAAK,UAAU;AAC/B,YAAI,IAAI,SAAS,WAAW;AAC1B,gBAAM,QAAQ,KAAK,eAAe,IAAI,KAAK;AAC3C,cAAI,UAAU,MAAM;AAClB,mBAAO,EAAE,OAAO,KAAK,gBAAgB,KAAK,GAAG,MAAM;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,mBAAmB,UAAU;AACpC,YAAM,IAAI,KAAK,kBAAkB,SAAS,YAAY;AACtD,UAAI,CAAC,YAAY,QAAQ,UAAU,KAAK,EAAE,SAAS,CAAC,GAAG;AACrD,eAAO,EAAE,OAAO,EAAc;AAAA,MAChC;AAAA,IACF;AAEA,WAAO,EAAE,OAAO,UAAU;AAAA,EAC5B;AAAA;AAAA,EAGQ,eAAe,eAAsC;AAE3D,UAAM,MAAM,WAAW,aAAa;AACpC,QAAI,CAAC,MAAM,GAAG,KAAK,OAAO,KAAK,OAAO,GAAI,QAAO;AAGjD,QAAI,cAAc,WAAW,QAAQ,GAAG;AACtC,aAAO,KAAK,oBAAoB,aAAa;AAAA,IAC/C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,oBAAoB,QAA+B;AAEzD,UAAM,eAAuD;AAAA,MAC3D,IAAI,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;AAAA;AAAA,MACxC,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA;AAAA,MACvB,IAAI;AAAA;AAAA,QACF,KAAK;AAAA,QAAM,KAAK;AAAA,QAAM,KAAK;AAAA,QAC3B,KAAK;AAAA,QAAM,KAAK;AAAA,QAAM,KAAK;AAAA,MAC7B;AAAA,MACA,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA;AAAA,MACvB,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE;AAAA;AAAA,MAC5B,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE;AAAA;AAAA,MAC5B,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE;AAAA;AAAA,IAC9B;AAGA,UAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,UAAM,UAAkC,CAAC;AACzC,eAAW,QAAQ,OAAO;AACxB,YAAM,CAAC,KAAK,KAAK,IAAI,KAAK,MAAM,GAAG;AACnC,UAAI,OAAO,MAAO,SAAQ,GAAG,IAAI;AAAA,IACnC;AAGA,UAAM,KAAK,aAAa,GAAG,QAAQ,EAAE;AACrC,UAAM,KAAK,aAAa,GAAG,QAAQ,EAAE;AACrC,UAAM,KAAK,aAAa,GAAG,QAAQ,EAAE;AACrC,UAAM,QAAQ,QAAQ;AACtB,UAAM,IAAI,aAAa,EAAE,QAAQ,CAAC;AAClC,UAAM,IAAI,aAAa,EAAE,QAAQ,CAAC;AAClC,UAAM,IAAI,aAAa,EAAE,QAAQ,CAAC;AAGlC,UAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,KAAK;AACpC,UAAM,KAAK,aAAa,GAAG,KAAK;AAEhC,QAAI,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,MAAM,MAAS,GAAG;AAC1D,aAAO;AAAA,IACT;AAGA,UAAM,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI;AAGzC,QAAI;AACJ,QAAI,UAAU,KAAK;AACjB,eAAS,OAAO;AAAA,IAClB,OAAO;AACL,eAAS,QAAQ,MAAM,SAAS,OAAO,KAAK,IAAI,MAAM,MAAM,EAAE;AAAA,IAChE;AAGA,UAAM,iBAAiB,OAAO,KAAK,KAAK,KAAK;AAG7C,QAAI,UAAU,EAAG,QAAO;AAExB,QAAI;AACJ,QAAI,UAAU,KAAK;AACjB,kBAAY,KAAK,IAAI,SAAS,gBAAgB,EAAE;AAAA,IAClD,OAAO;AACL,kBAAY,KAAK,IAAI,QAAQ,SAAS,iBAAiB,EAAE;AAAA,IAC3D;AAGA,WAAO,KAAK,KAAK,YAAY,EAAE,IAAI;AAAA,EACrC;AAAA;AAAA,EAGQ,gBAAgB,OAAyB;AAC/C,QAAI,SAAS,EAAK,QAAO;AACzB,QAAI,SAAS,EAAK,QAAO;AACzB,QAAI,SAAS,EAAK,QAAO;AACzB,QAAI,QAAQ,EAAK,QAAO;AACxB,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,qBAAqB,MAAwB,aAAyC;AAC5F,QAAI,CAAC,KAAK,SAAU,QAAO;AAE3B,eAAW,YAAY,KAAK,UAAU;AACpC,UAAI,SAAS,SAAS,SAAS,eAAe,SAAS,QAAQ;AAC7D,mBAAW,SAAS,SAAS,QAAQ;AACnC,cAAI,MAAM,QAAQ;AAChB,kBAAM,aAAa,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG;AAC3D,kBAAM,QAAQ,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;AACjD,gBAAI,cAAc,MAAO,QAAO,KAAK,UAAU,MAAM,KAAK;AAC1D,gBAAI,WAAY,QAAO,KAAK,UAAU;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,oBAAoB,MAAwB,aAAyC;AAC3F,QAAI,CAAC,KAAK,SAAU,QAAO;AAE3B,eAAW,YAAY,KAAK,UAAU;AACpC,UAAI,SAAS,SAAS,SAAS,eAAe,SAAS,QAAQ;AAC7D,mBAAW,SAAS,SAAS,QAAQ;AACnC,cAAI,MAAM,QAAQ;AAChB,kBAAM,QAAQ,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;AACjD,gBAAI,MAAO,QAAO;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,aAAa,WAA2B;AAC9C,UAAM,MAA8B;AAAA,MAClC,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA;AAAA,IACR;AACA,WAAO,IAAI,SAAS,KAAK;AAAA,EAC3B;AACF;;;AC5VO,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EAER,YAAY,SAAuB;AACjC,SAAK,UAAU,WAAW;AAAA,MACxB,IAAI,UAAU;AAAA;AAAA,IAEhB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAM,cAAqD;AAC/D,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,iBAAwC,CAAC;AAC/C,UAAM,eAAiE,CAAC;AACxE,UAAM,WAA4B,CAAC;AAGnC,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B,KAAK,QAAQ,IAAI,OAAO,WAAW;AACjC,cAAM,QAAQ,MAAM,OAAO,kBAAkB,YAAY;AACzD,eAAO,EAAE,UAAU,OAAO,UAAU,MAAM;AAAA,MAC5C,CAAC;AAAA,IACH;AAEA,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,WAAW,aAAa;AACjC,uBAAe,KAAK,OAAO,MAAM,QAAQ;AACzC,iBAAS,KAAK,GAAG,OAAO,MAAM,KAAK;AAAA,MACrC,OAAO;AAEL,cAAM,cAAc,QAAQ,QAAQ,MAAM;AAC1C,cAAM,WAAW,KAAK,QAAQ,WAAW,EAAE;AAC3C,qBAAa,KAAK;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,OAAO,kBAAkB,QAAQ,OAAO,OAAO,UAAU,OAAO,OAAO,MAAM;AAAA,QACtF,CAAC;AAAA,MACH;AAAA,IACF;AAGA,UAAM,eAAe,KAAK,2BAA2B,QAAQ;AAE7D,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,MACA,iBAAiB,KAAK,IAAI,IAAI;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,2BAA2B,OAAyC;AAC1E,UAAM,QAAQ,oBAAI,IAA2B;AAE7C,eAAW,QAAQ,OAAO;AAGxB,YAAM,MAAM,GAAG,KAAK,EAAE,KAAK,KAAK,WAAW;AAC3C,YAAM,WAAW,MAAM,IAAI,GAAG;AAE9B,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,KAAK,IAAI;AAAA,MACrB,OAAO;AAEL,cAAM,IAAI,KAAK,KAAK,gBAAgB,UAAU,IAAI,CAAC;AAAA,MACrD;AAAA,IACF;AAEA,WAAO,MAAM,KAAK,MAAM,OAAO,CAAC;AAAA,EAClC;AAAA;AAAA,EAGQ,gBAAgB,GAAkB,GAAiC;AACzE,QAAI,SAAS;AACb,QAAI,SAAS;AAEb,QAAI,EAAE,cAAc,OAAW;AAC/B,QAAI,EAAE,cAAc,OAAW;AAC/B,QAAI,EAAE,aAAc;AACpB,QAAI,EAAE,aAAc;AACpB,QAAI,EAAE,qBAAsB;AAC5B,QAAI,EAAE,qBAAsB;AAC5B,QAAI,EAAE,aAAa,UAAW;AAC9B,QAAI,EAAE,aAAa,UAAW;AAI9B,UAAM,QAAQ,CAAC,QACb,OAAO,YAAY,OAAO,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,MAAM,UAAa,MAAM,IAAI,CAAC;AAEzF,UAAM,SAAS,SAAS,SACpB,EAAE,GAAG,MAAM,CAAuC,GAAG,GAAG,MAAM,CAAuC,EAAE,IACvG,EAAE,GAAG,MAAM,CAAuC,GAAG,GAAG,MAAM,CAAuC,EAAE;AAG3G,UAAM,aAAa,oBAAI,IAAI,CAAC,GAAG,EAAE,SAAS,GAAG,EAAE,OAAO,CAAC;AACvD,WAAO,UAAU,MAAM,KAAK,UAAU;AAGtC,WAAO,kBAAkB,EAAE,mBAAmB,EAAE;AAEhD,WAAO;AAAA,EACT;AACF;;;ACnHO,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAO;AAAA,EAEhB,OAAO,QAA8B;AACnC,UAAM,QAAkB,CAAC;AAEzB,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,4RAAiD;AAC5D,UAAM,KAAK,2DAAiD;AAC5D,UAAM,KAAK,4RAAiD;AAC5D,UAAM,KAAK,EAAE;AAGb,UAAM,KAAK,mBAAmB,OAAO,QAAQ,IAAI,EAAE;AACnD,UAAM,KAAK,mBAAmB,OAAO,QAAQ,SAAS,EAAE;AACxD,UAAM,KAAK,mBAAmB,OAAO,QAAQ,eAAe,EAAE;AAC9D,UAAM,KAAK,mBAAmB,OAAO,WAAW,EAAE;AAClD,UAAM,KAAK,EAAE;AAGb,UAAM,KAAK,4BAAuB,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,WAAW,GAAG;AACnF,UAAM,KAAK,mBAAmB,OAAO,KAAK,cAAc,EAAE;AAC1D,QAAI,OAAO,WAAW;AACpB,YAAM,KAAK,mBAAmB,OAAO,UAAU,KAAK,MAAM,KAAK,OAAO,UAAU,KAAK,MAAM,EAAE;AAAA,IAC/F;AACA,UAAM,KAAK,EAAE;AAGb,UAAM,QAAQ,OAAO,SAAS;AAC9B,QAAI,MAAM,WAAW,GAAG;AACtB,YAAM,KAAK,yCAAoC;AAAA,IACjD,OAAO;AACL,YAAM,KAAK,YAAO,MAAM,MAAM,gBAAgB,MAAM,WAAW,IAAI,MAAM,KAAK,SAAS;AACvF,YAAM,KAAK,EAAE;AAGb,YAAM,SAAS,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,cAAc,EAAE,QAAQ,IAAI,cAAc,EAAE,QAAQ,CAAC;AAE9F,iBAAW,QAAQ,QAAQ;AACzB,cAAM,QAAQ,cAAc,KAAK,QAAQ;AACzC,cAAM,MAAM,KAAK,eAAe,gBAAW,KAAK,YAAY,KAAK;AACjE,cAAM,KAAK,OAAO,KAAK,KAAK,KAAK,EAAE,EAAE;AACrC,cAAM,KAAK,cAAc,KAAK,WAAW,IAAI,KAAK,wBAAwB,GAAG,GAAG,GAAG,EAAE;AACrF,cAAM,KAAK,cAAc,KAAK,QAAQ,MAAM,GAAG,GAAG,CAAC,EAAE;AACrD,YAAI,KAAK,iBAAiB;AACxB,gBAAM,KAAK,2EAA+D;AAAA,QAC5E;AACA,cAAM,KAAK,EAAE;AAAA,MACf;AAAA,IACF;AAGA,UAAM,UAAU,OAAO,SAAS,eAAe,KAAK,IAAI;AACxD,UAAM,KAAK,sBAAsB,OAAO,KAAK,OAAO,SAAS,eAAe,KAAK;AAEjF,QAAI,OAAO,SAAS,aAAa,SAAS,GAAG;AAC3C,iBAAW,OAAO,OAAO,SAAS,cAAc;AAC9C,cAAM,KAAK,YAAO,IAAI,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,MAC9C;AAAA,IACF;AAGA,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,iDAAmB;AAC9B,UAAM,KAAK,YAAY,OAAO,QAAQ,oBAAoB,kBAC3C,OAAO,QAAQ,QAAQ,cAC3B,OAAO,QAAQ,IAAI,gBACjB,OAAO,QAAQ,MAAM,aACxB,OAAO,QAAQ,GAAG,EAAE;AAE9B,QAAI,OAAO,QAAQ,kBAAkB,GAAG;AACtC,YAAM,KAAK,eAAQ,OAAO,QAAQ,eAAe,sDAAiD;AAAA,IACpG;AAEA,UAAM,KAAK,EAAE;AACb,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;AAEA,SAAS,cAAc,GAAqB;AAC1C,QAAM,QAAkC;AAAA,IACtC,UAAU;AAAA,IAAG,MAAM;AAAA,IAAG,QAAQ;AAAA,IAAG,KAAK;AAAA,IAAG,SAAS;AAAA,EACpD;AACA,SAAO,MAAM,CAAC,KAAK;AACrB;AAEA,SAAS,cAAc,GAAqB;AAC1C,QAAM,SAAmC;AAAA,IACvC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,SAAS;AAAA,EACX;AACA,SAAO,OAAO,CAAC,KAAK;AACtB;;;ACzFA,IAAM,mBAAmB;AAiDlB,IAAM,kBAAN,MAAsB;AAAA,EACV;AAAA,EACA;AAAA,EAEjB,YAAY,QAAgB,SAAkB;AAC5C,SAAK,SAAS;AACd,SAAK,WAAW,WAAW,kBAAkB,QAAQ,QAAQ,EAAE;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,MAKe;AACjC,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,OAAO,wBAAwB;AAAA,MAC7D,QAAQ;AAAA,MACR,SAAS,KAAK,QAAQ;AAAA,MACtB,MAAM,KAAK,UAAU;AAAA,QACnB,MAAM,KAAK;AAAA,QACX,WAAW,KAAK,aAAa,KAAK,SAAS;AAAA,QAC3C,gBAAgB,KAAK,iBAAiB;AAAA,QACtC,UAAU,KAAK,YAAY;AAAA,MAC7B,CAAC;AAAA,IACH,CAAC;AAED,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,YAAM,IAAI,MAAM,sCAAsC,IAAI,MAAM,MAAM,IAAI,EAAE;AAAA,IAC9E;AAEA,WAAO,IAAI,KAAK;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WAAW,WAAmB,SAA2D;AAC7F,UAAM,OAAO,OAAO,YAAY,WAC5B,KAAK,UAAU,KAAK,MAAM,OAAO,CAAC,IAClC,KAAK,UAAU,OAAO;AAE1B,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,OAAO,iBAAiB,SAAS,SAAS;AAAA,MACxE,QAAQ;AAAA,MACR,SAAS,KAAK,QAAQ;AAAA,MACtB;AAAA,IACF,CAAC;AAED,QAAI,CAAC,IAAI,IAAI;AACX,YAAMG,QAAO,MAAM,IAAI,KAAK;AAC5B,YAAM,IAAI,MAAM,mCAAmC,IAAI,MAAM,MAAMA,KAAI,EAAE;AAAA,IAC3E;AAEA,WAAO,IAAI,KAAK;AAAA,EAClB;AAAA,EAEQ,UAAkC;AACxC,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa,KAAwB;AAC3C,UAAM,MAAiC;AAAA,MACrC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,IACR;AACA,WAAO,IAAI,GAAG,KAAK;AAAA,EACrB;AACF;;;AvB1HA,eAAsB,KAAK,QAA6C;AACtE,QAAM;AAAA,IACJ;AAAA,IACA,aAAa;AAAA,IACb,eAAe;AAAA,IACf,mBAAmB;AAAA,EACrB,IAAI;AAGJ,QAAM,WAAW,IAAI,gBAAgB;AACrC,QAAM,aAAa,MAAM,SAAS,cAAc,WAAW;AAG3D,QAAM,YAAY,sBAAsB,YAAY,QAAW,gBAAgB;AAC/E,QAAM,OAAO,UAAU;AAGvB,QAAM,cAAc,0BAA0B,UAAU;AACxD,QAAM,QAAQ,IAAI;AAAA,IAChB,UAAU,YAAY,WAAW,UAAU,UAAU,SAAS,OAAO;AAAA,IACrE,UAAU,YAAY,MAAM,UAAU,KAAK,SAAS,OAAO;AAAA,IAC3D,UAAU,YAAY,MAAM,UAAU,KAAK,SAAS,OAAO;AAAA,EAC7D,CAAC;AAGD,MAAI;AACJ,MAAI,cAAc;AAChB,eAAW;AAAA,MACT,iBAAiB,CAAC;AAAA,MAClB,gBAAgB,CAAC;AAAA,MACjB,cAAc,CAAC;AAAA,MACf,iBAAiB;AAAA,IACnB;AAAA,EACF,OAAO;AACL,UAAM,aAAa,IAAI,cAAc;AACrC,eAAW,MAAM,WAAW,MAAM,WAAW,YAAY;AAAA,EAC3D;AAGA,QAAM,UAAU;AAAA,IACd,mBAAmB,WAAW,aAAa;AAAA,IAC3C,sBAAsB,SAAS,gBAAgB;AAAA,IAC/C,UAAU,SAAS,gBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,UAAU,EAAE;AAAA,IAC5E,MAAM,SAAS,gBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,MAAM,EAAE;AAAA,IACpE,QAAQ,SAAS,gBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ,EAAE;AAAA,IACxE,KAAK,SAAS,gBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,KAAK,EAAE;AAAA,IAClE,iBAAiB,SAAS,gBAAgB,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE;AAAA,EAC7E;AAEA,QAAM,SAAuB;AAAA,IAC3B,SAAS;AAAA,MACP,MAAM;AAAA,MACN,WAAW,WAAW;AAAA,MACtB,iBAAiB,WAAW,aAAa;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,EACtC;AAGA,MAAI,OAAO,QAAQ;AACjB,QAAI;AACF,YAAM,eAAe,MAAM,eAAe,QAAQ,MAAM;AACxD,MAAC,OAAoD,SAAS;AAAA,IAChE,QAAQ;AAAA,IAGR;AAAA,EACF;AAEA,SAAO;AACT;AAQA,eAAsB,eACpB,QACA,QACuB;AACvB,MAAI,CAAC,OAAO,QAAQ;AAClB,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AAEA,QAAM,SAAS,IAAI,gBAAgB,OAAO,QAAQ,OAAO,UAAU;AAGnE,QAAM,cAAc,SAAS,OAAO,WAAW;AAG/C,QAAM,YAAY,MAAM,OAAO,cAAc;AAAA,IAC3C,MAAM;AAAA,IACN,WAAW,OAAO,QAAQ;AAAA,EAC5B,CAAC;AAED,QAAM,YAAY,UAAU,QAAQ;AAGpC,QAAM,UAAU,MAAM,OAAO,WAAW,WAAW,mBAAmB,MAAM,CAAC;AAE7E,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,UAAU;AAAA,IAC1B,mBAAmB,QAAQ,QAAQ;AAAA,IACnC,wBAAwB,QAAQ,QAAQ;AAAA,IACxC,cAAc,6CAA6C,SAAS;AAAA,IACpE,cAAc;AAAA,EAChB;AACF;AAKO,SAAS,aAAa,QAAsB,WAA8B;AAC/E,QAAMC,iBAA0C;AAAA,IAC9C,UAAU;AAAA,IAAG,MAAM;AAAA,IAAG,QAAQ;AAAA,IAAG,KAAK;AAAA,IAAG,SAAS;AAAA,EACpD;AACA,QAAM,iBAAiBA,eAAc,SAAS,KAAK;AAEnD,SAAO,OAAO,SAAS,gBAAgB;AAAA,IACrC,CAAC,MAAMA,eAAc,EAAE,QAAQ,KAAK;AAAA,EACtC;AACF;AAKO,SAAS,YAAY,QAA4B;AACtD,QAAM,WAAW,IAAI,gBAAgB;AACrC,UAAQ,IAAI,SAAS,OAAO,MAAM,CAAC;AACrC;AAEA,SAAS,0BAA0B,iBAIjC;AACA,QAAM,SAAS,MAAM,eAAe;AACpC,MAAI,WAAW,OAAO;AAEtB,MAAI,OAAO,QAAQ,WAAW,SAAS,SAAS,MAAM,GAAG;AACvD,eAAW,SAAS,MAAM,GAAG,EAAE;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,MAAM,KAAK,OAAO,KAAK,GAAG,QAAQ,YAAY;AAAA,IAC9C,MAAM,KAAK,OAAO,KAAK,GAAG,QAAQ,WAAW;AAAA,EAC/C;AACF;AAEA,SAAS,mBAAmB,QAI1B;AACA,MAAI,CAAC,OAAO,WAAW;AACrB,WAAO,OAAO,KAAK;AAAA,EACrB;AAEA,SAAO;AAAA,IACL,WAAW,KAAK,MAAM,OAAO,UAAU,UAAU,OAAO;AAAA,IACxD,MAAM,KAAK,MAAM,OAAO,UAAU,KAAK,OAAO;AAAA,IAC9C,MAAM,OAAO,UAAU,KAAK;AAAA,EAC9B;AACF;","names":["randomUUID","randomUUID","randomUUID","randomUUID","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","match","readFile","existsSync","path","parseYaml","path","existsSync","readFile","parseYaml","name","version","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","randomUUID","randomUUID","randomUUID","SPDX_VERSION","randomUUID","randomUUID","SWID_SPEC_VERSION","sanitizeTagId","randomUUID","escapeXml","body","severityOrder"]}
1
+ {"version":3,"sources":["../node_modules/@babel/types/src/utils/shallowEqual.ts","../node_modules/@babel/types/src/utils/deprecationWarning.ts","../node_modules/@babel/types/src/validators/generated/index.ts","../node_modules/@babel/types/src/validators/matchesPattern.ts","../node_modules/@babel/types/src/validators/buildMatchMemberExpression.ts","../node_modules/@babel/types/src/validators/react/isReactComponent.ts","../node_modules/@babel/types/src/validators/react/isCompatTag.ts","../node_modules/@babel/types/src/validators/isType.ts","../node_modules/@babel/types/src/validators/isPlaceholderType.ts","../node_modules/@babel/types/src/validators/is.ts","../node_modules/@babel/helper-validator-identifier/src/identifier.ts","../node_modules/@babel/helper-validator-identifier/src/keyword.ts","../node_modules/@babel/helper-validator-identifier/src/index.ts","../node_modules/@babel/types/src/validators/isValidIdentifier.ts","../node_modules/@babel/helper-string-parser/src/index.ts","../node_modules/@babel/types/src/constants/index.ts","../node_modules/@babel/types/src/definitions/utils.ts","../node_modules/@babel/types/src/definitions/core.ts","../node_modules/@babel/types/src/definitions/flow.ts","../node_modules/@babel/types/src/definitions/jsx.ts","../node_modules/@babel/types/src/definitions/placeholders.ts","../node_modules/@babel/types/src/definitions/misc.ts","../node_modules/@babel/types/src/definitions/experimental.ts","../node_modules/@babel/types/src/definitions/typescript.ts","../node_modules/@babel/types/src/definitions/deprecated-aliases.ts","../node_modules/@babel/types/src/definitions/index.ts","../node_modules/@babel/types/src/validators/validate.ts","../node_modules/@babel/types/src/builders/generated/lowercase.ts","../node_modules/@babel/types/src/builders/generated/uppercase.ts","../node_modules/@babel/types/src/builders/generated/index.ts","../node_modules/@babel/types/src/utils/react/cleanJSXElementLiteralChild.ts","../node_modules/@babel/types/src/builders/react/buildChildren.ts","../node_modules/@babel/types/src/validators/isNode.ts","../node_modules/@babel/types/src/asserts/assertNode.ts","../node_modules/@babel/types/src/asserts/generated/index.ts","../node_modules/@babel/types/src/builders/flow/createTypeAnnotationBasedOnTypeof.ts","../node_modules/@babel/types/src/modifications/flow/removeTypeDuplicates.ts","../node_modules/@babel/types/src/builders/flow/createFlowUnionType.ts","../node_modules/@babel/types/src/modifications/typescript/removeTypeDuplicates.ts","../node_modules/@babel/types/src/builders/typescript/createTSUnionType.ts","../node_modules/@babel/types/src/builders/productions.ts","../node_modules/@babel/types/src/clone/cloneNode.ts","../node_modules/@babel/types/src/clone/clone.ts","../node_modules/@babel/types/src/clone/cloneDeep.ts","../node_modules/@babel/types/src/clone/cloneDeepWithoutLoc.ts","../node_modules/@babel/types/src/clone/cloneWithoutLoc.ts","../node_modules/@babel/types/src/comments/addComments.ts","../node_modules/@babel/types/src/comments/addComment.ts","../node_modules/@babel/types/src/utils/inherit.ts","../node_modules/@babel/types/src/comments/inheritInnerComments.ts","../node_modules/@babel/types/src/comments/inheritLeadingComments.ts","../node_modules/@babel/types/src/comments/inheritTrailingComments.ts","../node_modules/@babel/types/src/comments/inheritsComments.ts","../node_modules/@babel/types/src/comments/removeComments.ts","../node_modules/@babel/types/src/constants/generated/index.ts","../node_modules/@babel/types/src/converters/toBlock.ts","../node_modules/@babel/types/src/converters/ensureBlock.ts","../node_modules/@babel/types/src/converters/toIdentifier.ts","../node_modules/@babel/types/src/converters/toBindingIdentifierName.ts","../node_modules/@babel/types/src/converters/toComputedKey.ts","../node_modules/@babel/types/src/converters/toExpression.ts","../node_modules/@babel/types/src/traverse/traverseFast.ts","../node_modules/@babel/types/src/modifications/removeProperties.ts","../node_modules/@babel/types/src/modifications/removePropertiesDeep.ts","../node_modules/@babel/types/src/converters/toKeyAlias.ts","../node_modules/@babel/types/src/converters/toStatement.ts","../node_modules/@babel/types/src/converters/valueToNode.ts","../node_modules/@babel/types/src/modifications/appendToMemberExpression.ts","../node_modules/@babel/types/src/modifications/inherits.ts","../node_modules/@babel/types/src/modifications/prependToMemberExpression.ts","../node_modules/@babel/types/src/retrievers/getAssignmentIdentifiers.ts","../node_modules/@babel/types/src/retrievers/getBindingIdentifiers.ts","../node_modules/@babel/types/src/retrievers/getOuterBindingIdentifiers.ts","../node_modules/@babel/types/src/retrievers/getFunctionName.ts","../node_modules/@babel/types/src/traverse/traverse.ts","../node_modules/@babel/types/src/validators/isBinding.ts","../node_modules/@babel/types/src/validators/isLet.ts","../node_modules/@babel/types/src/validators/isBlockScoped.ts","../node_modules/@babel/types/src/validators/isImmutable.ts","../node_modules/@babel/types/src/validators/isNodesEquivalent.ts","../node_modules/@babel/types/src/validators/isReferenced.ts","../node_modules/@babel/types/src/validators/isScope.ts","../node_modules/@babel/types/src/validators/isSpecifierDefault.ts","../node_modules/@babel/types/src/validators/isValidES3Identifier.ts","../node_modules/@babel/types/src/validators/isVar.ts","../node_modules/@babel/types/src/converters/gatherSequenceExpressions.ts","../node_modules/@babel/types/src/converters/toSequenceExpression.ts","../node_modules/@babel/types/src/index.ts","../src/generate-sbom.ts","../src/sbom/shared.ts","../src/generate-spdx.ts","../src/generate-swid.ts","../src/scan.ts","../src/scanners/npm/npm-scanner.ts","../src/core/errors.ts","../src/scanners/nuget/nuget-scanner.ts","../src/scanners/cargo/cargo-scanner.ts","../src/scanners/pip/pip-scanner.ts","../src/scanners/maven/maven-scanner.ts","../src/scanners/go/go-scanner.ts","../src/scanners/ruby/ruby-scanner.ts","../src/scanners/composer/composer-scanner.ts","../src/scanners/yarn/yarn-scanner.ts","../src/scanners/pnpm/pnpm-scanner.ts","../src/scanners/deno/deno-scanner.ts","../src/scanners/poetry/poetry-scanner.ts","../src/scanners/uv/uv-scanner.ts","../src/scanners/registry.ts","../src/sbom/cyclonedx.ts","../src/sbom/spdx.ts","../src/sbom/swid.ts","../src/sbom/artifacts.ts","../src/cve/osv.ts","../src/cve/aggregator.ts","../src/reporters/console.ts","../src/api/client.ts","../src/context/snippet-extractor.ts","../src/context/analyzers/js-ast-analyzer.ts","../src/context/analyzers/unsupported-analyzer.ts","../src/context/usage-context-engine.ts"],"sourcesContent":["export default function shallowEqual<T extends object>(\n actual: object,\n expected: T,\n): actual is T {\n const keys = Object.keys(expected) as (keyof T)[];\n\n for (const key of keys) {\n if (\n // @ts-expect-error maybe we should check whether key exists first\n actual[key] !== expected[key]\n ) {\n return false;\n }\n }\n\n return true;\n}\n","const warnings = new Set();\n\nexport default function deprecationWarning(\n oldName: string,\n newName: string,\n prefix: string = \"\",\n cacheKey: string = oldName,\n) {\n if (warnings.has(cacheKey)) return;\n warnings.add(cacheKey);\n\n const { internal, trace } = captureShortStackTrace(1, 2);\n if (internal) {\n // If usage comes from an internal package, there is no point in warning because\n // 1. The new version of the package will already use the new API\n // 2. When the deprecation will become an error (in a future major version), users\n // will have to update every package anyway.\n return;\n }\n console.warn(\n `${prefix}\\`${oldName}\\` has been deprecated, please migrate to \\`${newName}\\`\\n${trace}`,\n );\n}\n\nfunction captureShortStackTrace(skip: number, length: number) {\n const { stackTraceLimit, prepareStackTrace } = Error;\n let stackTrace: NodeJS.CallSite[];\n // We add 1 to also take into account this function.\n Error.stackTraceLimit = 1 + skip + length;\n Error.prepareStackTrace = function (err, stack) {\n stackTrace = stack;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n new Error().stack;\n Error.stackTraceLimit = stackTraceLimit;\n Error.prepareStackTrace = prepareStackTrace;\n\n if (!stackTrace) return { internal: false, trace: \"\" };\n\n const shortStackTrace = stackTrace.slice(1 + skip, 1 + skip + length);\n return {\n internal: /[\\\\/]@babel[\\\\/]/.test(shortStackTrace[1].getFileName()),\n trace: shortStackTrace.map(frame => ` at ${frame}`).join(\"\\n\"),\n };\n}\n","/*\n * This file is auto-generated! Do not modify it directly.\n * To re-generate run 'make build'\n */\n\n/* eslint-disable no-fallthrough */\n\nimport shallowEqual from \"../../utils/shallowEqual.ts\";\nimport type * as t from \"../../index.ts\";\nimport deprecationWarning from \"../../utils/deprecationWarning.ts\";\n\ntype Options<Obj> = Partial<{\n [Prop in Exclude<keyof Obj, \"type\">]: Obj[Prop] extends t.Node\n ? t.Node\n : Obj[Prop] extends t.Node[]\n ? t.Node[]\n : Obj[Prop];\n}>;\n\nexport function isArrayExpression(\n node: t.Node | null | undefined,\n): node is t.ArrayExpression;\nexport function isArrayExpression<Opts extends Options<t.ArrayExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ArrayExpression & Opts;\nexport function isArrayExpression<Opts extends Options<t.ArrayExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ArrayExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isAssignmentExpression(\n node: t.Node | null | undefined,\n): node is t.AssignmentExpression;\nexport function isAssignmentExpression<\n Opts extends Options<t.AssignmentExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.AssignmentExpression & Opts;\nexport function isAssignmentExpression<\n Opts extends Options<t.AssignmentExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"AssignmentExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBinaryExpression(\n node: t.Node | null | undefined,\n): node is t.BinaryExpression;\nexport function isBinaryExpression<Opts extends Options<t.BinaryExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BinaryExpression & Opts;\nexport function isBinaryExpression<Opts extends Options<t.BinaryExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"BinaryExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isInterpreterDirective(\n node: t.Node | null | undefined,\n): node is t.InterpreterDirective;\nexport function isInterpreterDirective<\n Opts extends Options<t.InterpreterDirective>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.InterpreterDirective & Opts;\nexport function isInterpreterDirective<\n Opts extends Options<t.InterpreterDirective>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"InterpreterDirective\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDirective(\n node: t.Node | null | undefined,\n): node is t.Directive;\nexport function isDirective<Opts extends Options<t.Directive>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Directive & Opts;\nexport function isDirective<Opts extends Options<t.Directive>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Directive\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDirectiveLiteral(\n node: t.Node | null | undefined,\n): node is t.DirectiveLiteral;\nexport function isDirectiveLiteral<Opts extends Options<t.DirectiveLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DirectiveLiteral & Opts;\nexport function isDirectiveLiteral<Opts extends Options<t.DirectiveLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DirectiveLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBlockStatement(\n node: t.Node | null | undefined,\n): node is t.BlockStatement;\nexport function isBlockStatement<Opts extends Options<t.BlockStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BlockStatement & Opts;\nexport function isBlockStatement<Opts extends Options<t.BlockStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"BlockStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBreakStatement(\n node: t.Node | null | undefined,\n): node is t.BreakStatement;\nexport function isBreakStatement<Opts extends Options<t.BreakStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BreakStatement & Opts;\nexport function isBreakStatement<Opts extends Options<t.BreakStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"BreakStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isCallExpression(\n node: t.Node | null | undefined,\n): node is t.CallExpression;\nexport function isCallExpression<Opts extends Options<t.CallExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.CallExpression & Opts;\nexport function isCallExpression<Opts extends Options<t.CallExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"CallExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isCatchClause(\n node: t.Node | null | undefined,\n): node is t.CatchClause;\nexport function isCatchClause<Opts extends Options<t.CatchClause>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.CatchClause & Opts;\nexport function isCatchClause<Opts extends Options<t.CatchClause>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"CatchClause\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isConditionalExpression(\n node: t.Node | null | undefined,\n): node is t.ConditionalExpression;\nexport function isConditionalExpression<\n Opts extends Options<t.ConditionalExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ConditionalExpression & Opts;\nexport function isConditionalExpression<\n Opts extends Options<t.ConditionalExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ConditionalExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isContinueStatement(\n node: t.Node | null | undefined,\n): node is t.ContinueStatement;\nexport function isContinueStatement<Opts extends Options<t.ContinueStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ContinueStatement & Opts;\nexport function isContinueStatement<Opts extends Options<t.ContinueStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ContinueStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDebuggerStatement(\n node: t.Node | null | undefined,\n): node is t.DebuggerStatement;\nexport function isDebuggerStatement<Opts extends Options<t.DebuggerStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DebuggerStatement & Opts;\nexport function isDebuggerStatement<Opts extends Options<t.DebuggerStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DebuggerStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDoWhileStatement(\n node: t.Node | null | undefined,\n): node is t.DoWhileStatement;\nexport function isDoWhileStatement<Opts extends Options<t.DoWhileStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DoWhileStatement & Opts;\nexport function isDoWhileStatement<Opts extends Options<t.DoWhileStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DoWhileStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEmptyStatement(\n node: t.Node | null | undefined,\n): node is t.EmptyStatement;\nexport function isEmptyStatement<Opts extends Options<t.EmptyStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EmptyStatement & Opts;\nexport function isEmptyStatement<Opts extends Options<t.EmptyStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EmptyStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExpressionStatement(\n node: t.Node | null | undefined,\n): node is t.ExpressionStatement;\nexport function isExpressionStatement<\n Opts extends Options<t.ExpressionStatement>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExpressionStatement & Opts;\nexport function isExpressionStatement<\n Opts extends Options<t.ExpressionStatement>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ExpressionStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFile(node: t.Node | null | undefined): node is t.File;\nexport function isFile<Opts extends Options<t.File>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.File & Opts;\nexport function isFile<Opts extends Options<t.File>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"File\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isForInStatement(\n node: t.Node | null | undefined,\n): node is t.ForInStatement;\nexport function isForInStatement<Opts extends Options<t.ForInStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ForInStatement & Opts;\nexport function isForInStatement<Opts extends Options<t.ForInStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ForInStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isForStatement(\n node: t.Node | null | undefined,\n): node is t.ForStatement;\nexport function isForStatement<Opts extends Options<t.ForStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ForStatement & Opts;\nexport function isForStatement<Opts extends Options<t.ForStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ForStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFunctionDeclaration(\n node: t.Node | null | undefined,\n): node is t.FunctionDeclaration;\nexport function isFunctionDeclaration<\n Opts extends Options<t.FunctionDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FunctionDeclaration & Opts;\nexport function isFunctionDeclaration<\n Opts extends Options<t.FunctionDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"FunctionDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFunctionExpression(\n node: t.Node | null | undefined,\n): node is t.FunctionExpression;\nexport function isFunctionExpression<\n Opts extends Options<t.FunctionExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FunctionExpression & Opts;\nexport function isFunctionExpression<\n Opts extends Options<t.FunctionExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"FunctionExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isIdentifier(\n node: t.Node | null | undefined,\n): node is t.Identifier;\nexport function isIdentifier<Opts extends Options<t.Identifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Identifier & Opts;\nexport function isIdentifier<Opts extends Options<t.Identifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Identifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isIfStatement(\n node: t.Node | null | undefined,\n): node is t.IfStatement;\nexport function isIfStatement<Opts extends Options<t.IfStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.IfStatement & Opts;\nexport function isIfStatement<Opts extends Options<t.IfStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"IfStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isLabeledStatement(\n node: t.Node | null | undefined,\n): node is t.LabeledStatement;\nexport function isLabeledStatement<Opts extends Options<t.LabeledStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.LabeledStatement & Opts;\nexport function isLabeledStatement<Opts extends Options<t.LabeledStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"LabeledStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isStringLiteral(\n node: t.Node | null | undefined,\n): node is t.StringLiteral;\nexport function isStringLiteral<Opts extends Options<t.StringLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.StringLiteral & Opts;\nexport function isStringLiteral<Opts extends Options<t.StringLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"StringLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isNumericLiteral(\n node: t.Node | null | undefined,\n): node is t.NumericLiteral;\nexport function isNumericLiteral<Opts extends Options<t.NumericLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.NumericLiteral & Opts;\nexport function isNumericLiteral<Opts extends Options<t.NumericLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"NumericLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isNullLiteral(\n node: t.Node | null | undefined,\n): node is t.NullLiteral;\nexport function isNullLiteral<Opts extends Options<t.NullLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.NullLiteral & Opts;\nexport function isNullLiteral<Opts extends Options<t.NullLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"NullLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBooleanLiteral(\n node: t.Node | null | undefined,\n): node is t.BooleanLiteral;\nexport function isBooleanLiteral<Opts extends Options<t.BooleanLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BooleanLiteral & Opts;\nexport function isBooleanLiteral<Opts extends Options<t.BooleanLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"BooleanLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isRegExpLiteral(\n node: t.Node | null | undefined,\n): node is t.RegExpLiteral;\nexport function isRegExpLiteral<Opts extends Options<t.RegExpLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.RegExpLiteral & Opts;\nexport function isRegExpLiteral<Opts extends Options<t.RegExpLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"RegExpLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isLogicalExpression(\n node: t.Node | null | undefined,\n): node is t.LogicalExpression;\nexport function isLogicalExpression<Opts extends Options<t.LogicalExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.LogicalExpression & Opts;\nexport function isLogicalExpression<Opts extends Options<t.LogicalExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"LogicalExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isMemberExpression(\n node: t.Node | null | undefined,\n): node is t.MemberExpression;\nexport function isMemberExpression<Opts extends Options<t.MemberExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.MemberExpression & Opts;\nexport function isMemberExpression<Opts extends Options<t.MemberExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"MemberExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isNewExpression(\n node: t.Node | null | undefined,\n): node is t.NewExpression;\nexport function isNewExpression<Opts extends Options<t.NewExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.NewExpression & Opts;\nexport function isNewExpression<Opts extends Options<t.NewExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"NewExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isProgram(node: t.Node | null | undefined): node is t.Program;\nexport function isProgram<Opts extends Options<t.Program>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Program & Opts;\nexport function isProgram<Opts extends Options<t.Program>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Program\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectExpression(\n node: t.Node | null | undefined,\n): node is t.ObjectExpression;\nexport function isObjectExpression<Opts extends Options<t.ObjectExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectExpression & Opts;\nexport function isObjectExpression<Opts extends Options<t.ObjectExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectMethod(\n node: t.Node | null | undefined,\n): node is t.ObjectMethod;\nexport function isObjectMethod<Opts extends Options<t.ObjectMethod>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectMethod & Opts;\nexport function isObjectMethod<Opts extends Options<t.ObjectMethod>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectMethod\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectProperty(\n node: t.Node | null | undefined,\n): node is t.ObjectProperty;\nexport function isObjectProperty<Opts extends Options<t.ObjectProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectProperty & Opts;\nexport function isObjectProperty<Opts extends Options<t.ObjectProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isRestElement(\n node: t.Node | null | undefined,\n): node is t.RestElement;\nexport function isRestElement<Opts extends Options<t.RestElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.RestElement & Opts;\nexport function isRestElement<Opts extends Options<t.RestElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"RestElement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isReturnStatement(\n node: t.Node | null | undefined,\n): node is t.ReturnStatement;\nexport function isReturnStatement<Opts extends Options<t.ReturnStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ReturnStatement & Opts;\nexport function isReturnStatement<Opts extends Options<t.ReturnStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ReturnStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isSequenceExpression(\n node: t.Node | null | undefined,\n): node is t.SequenceExpression;\nexport function isSequenceExpression<\n Opts extends Options<t.SequenceExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.SequenceExpression & Opts;\nexport function isSequenceExpression<\n Opts extends Options<t.SequenceExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"SequenceExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isParenthesizedExpression(\n node: t.Node | null | undefined,\n): node is t.ParenthesizedExpression;\nexport function isParenthesizedExpression<\n Opts extends Options<t.ParenthesizedExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ParenthesizedExpression & Opts;\nexport function isParenthesizedExpression<\n Opts extends Options<t.ParenthesizedExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ParenthesizedExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isSwitchCase(\n node: t.Node | null | undefined,\n): node is t.SwitchCase;\nexport function isSwitchCase<Opts extends Options<t.SwitchCase>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.SwitchCase & Opts;\nexport function isSwitchCase<Opts extends Options<t.SwitchCase>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"SwitchCase\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isSwitchStatement(\n node: t.Node | null | undefined,\n): node is t.SwitchStatement;\nexport function isSwitchStatement<Opts extends Options<t.SwitchStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.SwitchStatement & Opts;\nexport function isSwitchStatement<Opts extends Options<t.SwitchStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"SwitchStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isThisExpression(\n node: t.Node | null | undefined,\n): node is t.ThisExpression;\nexport function isThisExpression<Opts extends Options<t.ThisExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ThisExpression & Opts;\nexport function isThisExpression<Opts extends Options<t.ThisExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ThisExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isThrowStatement(\n node: t.Node | null | undefined,\n): node is t.ThrowStatement;\nexport function isThrowStatement<Opts extends Options<t.ThrowStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ThrowStatement & Opts;\nexport function isThrowStatement<Opts extends Options<t.ThrowStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ThrowStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTryStatement(\n node: t.Node | null | undefined,\n): node is t.TryStatement;\nexport function isTryStatement<Opts extends Options<t.TryStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TryStatement & Opts;\nexport function isTryStatement<Opts extends Options<t.TryStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TryStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isUnaryExpression(\n node: t.Node | null | undefined,\n): node is t.UnaryExpression;\nexport function isUnaryExpression<Opts extends Options<t.UnaryExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.UnaryExpression & Opts;\nexport function isUnaryExpression<Opts extends Options<t.UnaryExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"UnaryExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isUpdateExpression(\n node: t.Node | null | undefined,\n): node is t.UpdateExpression;\nexport function isUpdateExpression<Opts extends Options<t.UpdateExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.UpdateExpression & Opts;\nexport function isUpdateExpression<Opts extends Options<t.UpdateExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"UpdateExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isVariableDeclaration(\n node: t.Node | null | undefined,\n): node is t.VariableDeclaration;\nexport function isVariableDeclaration<\n Opts extends Options<t.VariableDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.VariableDeclaration & Opts;\nexport function isVariableDeclaration<\n Opts extends Options<t.VariableDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"VariableDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isVariableDeclarator(\n node: t.Node | null | undefined,\n): node is t.VariableDeclarator;\nexport function isVariableDeclarator<\n Opts extends Options<t.VariableDeclarator>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.VariableDeclarator & Opts;\nexport function isVariableDeclarator<\n Opts extends Options<t.VariableDeclarator>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"VariableDeclarator\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isWhileStatement(\n node: t.Node | null | undefined,\n): node is t.WhileStatement;\nexport function isWhileStatement<Opts extends Options<t.WhileStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.WhileStatement & Opts;\nexport function isWhileStatement<Opts extends Options<t.WhileStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"WhileStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isWithStatement(\n node: t.Node | null | undefined,\n): node is t.WithStatement;\nexport function isWithStatement<Opts extends Options<t.WithStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.WithStatement & Opts;\nexport function isWithStatement<Opts extends Options<t.WithStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"WithStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isAssignmentPattern(\n node: t.Node | null | undefined,\n): node is t.AssignmentPattern;\nexport function isAssignmentPattern<Opts extends Options<t.AssignmentPattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.AssignmentPattern & Opts;\nexport function isAssignmentPattern<Opts extends Options<t.AssignmentPattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"AssignmentPattern\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isArrayPattern(\n node: t.Node | null | undefined,\n): node is t.ArrayPattern;\nexport function isArrayPattern<Opts extends Options<t.ArrayPattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ArrayPattern & Opts;\nexport function isArrayPattern<Opts extends Options<t.ArrayPattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ArrayPattern\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isArrowFunctionExpression(\n node: t.Node | null | undefined,\n): node is t.ArrowFunctionExpression;\nexport function isArrowFunctionExpression<\n Opts extends Options<t.ArrowFunctionExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ArrowFunctionExpression & Opts;\nexport function isArrowFunctionExpression<\n Opts extends Options<t.ArrowFunctionExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ArrowFunctionExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassBody(\n node: t.Node | null | undefined,\n): node is t.ClassBody;\nexport function isClassBody<Opts extends Options<t.ClassBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassBody & Opts;\nexport function isClassBody<Opts extends Options<t.ClassBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassBody\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassExpression(\n node: t.Node | null | undefined,\n): node is t.ClassExpression;\nexport function isClassExpression<Opts extends Options<t.ClassExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassExpression & Opts;\nexport function isClassExpression<Opts extends Options<t.ClassExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassDeclaration(\n node: t.Node | null | undefined,\n): node is t.ClassDeclaration;\nexport function isClassDeclaration<Opts extends Options<t.ClassDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassDeclaration & Opts;\nexport function isClassDeclaration<Opts extends Options<t.ClassDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExportAllDeclaration(\n node: t.Node | null | undefined,\n): node is t.ExportAllDeclaration;\nexport function isExportAllDeclaration<\n Opts extends Options<t.ExportAllDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExportAllDeclaration & Opts;\nexport function isExportAllDeclaration<\n Opts extends Options<t.ExportAllDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ExportAllDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExportDefaultDeclaration(\n node: t.Node | null | undefined,\n): node is t.ExportDefaultDeclaration;\nexport function isExportDefaultDeclaration<\n Opts extends Options<t.ExportDefaultDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExportDefaultDeclaration & Opts;\nexport function isExportDefaultDeclaration<\n Opts extends Options<t.ExportDefaultDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ExportDefaultDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExportNamedDeclaration(\n node: t.Node | null | undefined,\n): node is t.ExportNamedDeclaration;\nexport function isExportNamedDeclaration<\n Opts extends Options<t.ExportNamedDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExportNamedDeclaration & Opts;\nexport function isExportNamedDeclaration<\n Opts extends Options<t.ExportNamedDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ExportNamedDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExportSpecifier(\n node: t.Node | null | undefined,\n): node is t.ExportSpecifier;\nexport function isExportSpecifier<Opts extends Options<t.ExportSpecifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExportSpecifier & Opts;\nexport function isExportSpecifier<Opts extends Options<t.ExportSpecifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ExportSpecifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isForOfStatement(\n node: t.Node | null | undefined,\n): node is t.ForOfStatement;\nexport function isForOfStatement<Opts extends Options<t.ForOfStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ForOfStatement & Opts;\nexport function isForOfStatement<Opts extends Options<t.ForOfStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ForOfStatement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImportDeclaration(\n node: t.Node | null | undefined,\n): node is t.ImportDeclaration;\nexport function isImportDeclaration<Opts extends Options<t.ImportDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ImportDeclaration & Opts;\nexport function isImportDeclaration<Opts extends Options<t.ImportDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ImportDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImportDefaultSpecifier(\n node: t.Node | null | undefined,\n): node is t.ImportDefaultSpecifier;\nexport function isImportDefaultSpecifier<\n Opts extends Options<t.ImportDefaultSpecifier>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ImportDefaultSpecifier & Opts;\nexport function isImportDefaultSpecifier<\n Opts extends Options<t.ImportDefaultSpecifier>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ImportDefaultSpecifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImportNamespaceSpecifier(\n node: t.Node | null | undefined,\n): node is t.ImportNamespaceSpecifier;\nexport function isImportNamespaceSpecifier<\n Opts extends Options<t.ImportNamespaceSpecifier>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ImportNamespaceSpecifier & Opts;\nexport function isImportNamespaceSpecifier<\n Opts extends Options<t.ImportNamespaceSpecifier>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ImportNamespaceSpecifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImportSpecifier(\n node: t.Node | null | undefined,\n): node is t.ImportSpecifier;\nexport function isImportSpecifier<Opts extends Options<t.ImportSpecifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ImportSpecifier & Opts;\nexport function isImportSpecifier<Opts extends Options<t.ImportSpecifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ImportSpecifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImportExpression(\n node: t.Node | null | undefined,\n): node is t.ImportExpression;\nexport function isImportExpression<Opts extends Options<t.ImportExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ImportExpression & Opts;\nexport function isImportExpression<Opts extends Options<t.ImportExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ImportExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isMetaProperty(\n node: t.Node | null | undefined,\n): node is t.MetaProperty;\nexport function isMetaProperty<Opts extends Options<t.MetaProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.MetaProperty & Opts;\nexport function isMetaProperty<Opts extends Options<t.MetaProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"MetaProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassMethod(\n node: t.Node | null | undefined,\n): node is t.ClassMethod;\nexport function isClassMethod<Opts extends Options<t.ClassMethod>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassMethod & Opts;\nexport function isClassMethod<Opts extends Options<t.ClassMethod>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassMethod\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectPattern(\n node: t.Node | null | undefined,\n): node is t.ObjectPattern;\nexport function isObjectPattern<Opts extends Options<t.ObjectPattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectPattern & Opts;\nexport function isObjectPattern<Opts extends Options<t.ObjectPattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectPattern\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isSpreadElement(\n node: t.Node | null | undefined,\n): node is t.SpreadElement;\nexport function isSpreadElement<Opts extends Options<t.SpreadElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.SpreadElement & Opts;\nexport function isSpreadElement<Opts extends Options<t.SpreadElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"SpreadElement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isSuper(node: t.Node | null | undefined): node is t.Super;\nexport function isSuper<Opts extends Options<t.Super>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Super & Opts;\nexport function isSuper<Opts extends Options<t.Super>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Super\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTaggedTemplateExpression(\n node: t.Node | null | undefined,\n): node is t.TaggedTemplateExpression;\nexport function isTaggedTemplateExpression<\n Opts extends Options<t.TaggedTemplateExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TaggedTemplateExpression & Opts;\nexport function isTaggedTemplateExpression<\n Opts extends Options<t.TaggedTemplateExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TaggedTemplateExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTemplateElement(\n node: t.Node | null | undefined,\n): node is t.TemplateElement;\nexport function isTemplateElement<Opts extends Options<t.TemplateElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TemplateElement & Opts;\nexport function isTemplateElement<Opts extends Options<t.TemplateElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TemplateElement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTemplateLiteral(\n node: t.Node | null | undefined,\n): node is t.TemplateLiteral;\nexport function isTemplateLiteral<Opts extends Options<t.TemplateLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TemplateLiteral & Opts;\nexport function isTemplateLiteral<Opts extends Options<t.TemplateLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TemplateLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isYieldExpression(\n node: t.Node | null | undefined,\n): node is t.YieldExpression;\nexport function isYieldExpression<Opts extends Options<t.YieldExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.YieldExpression & Opts;\nexport function isYieldExpression<Opts extends Options<t.YieldExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"YieldExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isAwaitExpression(\n node: t.Node | null | undefined,\n): node is t.AwaitExpression;\nexport function isAwaitExpression<Opts extends Options<t.AwaitExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.AwaitExpression & Opts;\nexport function isAwaitExpression<Opts extends Options<t.AwaitExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"AwaitExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImport(node: t.Node | null | undefined): node is t.Import;\nexport function isImport<Opts extends Options<t.Import>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Import & Opts;\nexport function isImport<Opts extends Options<t.Import>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Import\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBigIntLiteral(\n node: t.Node | null | undefined,\n): node is t.BigIntLiteral;\nexport function isBigIntLiteral<Opts extends Options<t.BigIntLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BigIntLiteral & Opts;\nexport function isBigIntLiteral<Opts extends Options<t.BigIntLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"BigIntLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExportNamespaceSpecifier(\n node: t.Node | null | undefined,\n): node is t.ExportNamespaceSpecifier;\nexport function isExportNamespaceSpecifier<\n Opts extends Options<t.ExportNamespaceSpecifier>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExportNamespaceSpecifier & Opts;\nexport function isExportNamespaceSpecifier<\n Opts extends Options<t.ExportNamespaceSpecifier>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ExportNamespaceSpecifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isOptionalMemberExpression(\n node: t.Node | null | undefined,\n): node is t.OptionalMemberExpression;\nexport function isOptionalMemberExpression<\n Opts extends Options<t.OptionalMemberExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.OptionalMemberExpression & Opts;\nexport function isOptionalMemberExpression<\n Opts extends Options<t.OptionalMemberExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"OptionalMemberExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isOptionalCallExpression(\n node: t.Node | null | undefined,\n): node is t.OptionalCallExpression;\nexport function isOptionalCallExpression<\n Opts extends Options<t.OptionalCallExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.OptionalCallExpression & Opts;\nexport function isOptionalCallExpression<\n Opts extends Options<t.OptionalCallExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"OptionalCallExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassProperty(\n node: t.Node | null | undefined,\n): node is t.ClassProperty;\nexport function isClassProperty<Opts extends Options<t.ClassProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassProperty & Opts;\nexport function isClassProperty<Opts extends Options<t.ClassProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassAccessorProperty(\n node: t.Node | null | undefined,\n): node is t.ClassAccessorProperty;\nexport function isClassAccessorProperty<\n Opts extends Options<t.ClassAccessorProperty>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassAccessorProperty & Opts;\nexport function isClassAccessorProperty<\n Opts extends Options<t.ClassAccessorProperty>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassAccessorProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassPrivateProperty(\n node: t.Node | null | undefined,\n): node is t.ClassPrivateProperty;\nexport function isClassPrivateProperty<\n Opts extends Options<t.ClassPrivateProperty>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassPrivateProperty & Opts;\nexport function isClassPrivateProperty<\n Opts extends Options<t.ClassPrivateProperty>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassPrivateProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassPrivateMethod(\n node: t.Node | null | undefined,\n): node is t.ClassPrivateMethod;\nexport function isClassPrivateMethod<\n Opts extends Options<t.ClassPrivateMethod>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassPrivateMethod & Opts;\nexport function isClassPrivateMethod<\n Opts extends Options<t.ClassPrivateMethod>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassPrivateMethod\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPrivateName(\n node: t.Node | null | undefined,\n): node is t.PrivateName;\nexport function isPrivateName<Opts extends Options<t.PrivateName>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.PrivateName & Opts;\nexport function isPrivateName<Opts extends Options<t.PrivateName>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"PrivateName\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isStaticBlock(\n node: t.Node | null | undefined,\n): node is t.StaticBlock;\nexport function isStaticBlock<Opts extends Options<t.StaticBlock>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.StaticBlock & Opts;\nexport function isStaticBlock<Opts extends Options<t.StaticBlock>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"StaticBlock\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImportAttribute(\n node: t.Node | null | undefined,\n): node is t.ImportAttribute;\nexport function isImportAttribute<Opts extends Options<t.ImportAttribute>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ImportAttribute & Opts;\nexport function isImportAttribute<Opts extends Options<t.ImportAttribute>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ImportAttribute\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isAnyTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.AnyTypeAnnotation;\nexport function isAnyTypeAnnotation<Opts extends Options<t.AnyTypeAnnotation>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.AnyTypeAnnotation & Opts;\nexport function isAnyTypeAnnotation<Opts extends Options<t.AnyTypeAnnotation>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"AnyTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isArrayTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.ArrayTypeAnnotation;\nexport function isArrayTypeAnnotation<\n Opts extends Options<t.ArrayTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ArrayTypeAnnotation & Opts;\nexport function isArrayTypeAnnotation<\n Opts extends Options<t.ArrayTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ArrayTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBooleanTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.BooleanTypeAnnotation;\nexport function isBooleanTypeAnnotation<\n Opts extends Options<t.BooleanTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BooleanTypeAnnotation & Opts;\nexport function isBooleanTypeAnnotation<\n Opts extends Options<t.BooleanTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"BooleanTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBooleanLiteralTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.BooleanLiteralTypeAnnotation;\nexport function isBooleanLiteralTypeAnnotation<\n Opts extends Options<t.BooleanLiteralTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BooleanLiteralTypeAnnotation & Opts;\nexport function isBooleanLiteralTypeAnnotation<\n Opts extends Options<t.BooleanLiteralTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"BooleanLiteralTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isNullLiteralTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.NullLiteralTypeAnnotation;\nexport function isNullLiteralTypeAnnotation<\n Opts extends Options<t.NullLiteralTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.NullLiteralTypeAnnotation & Opts;\nexport function isNullLiteralTypeAnnotation<\n Opts extends Options<t.NullLiteralTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"NullLiteralTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClassImplements(\n node: t.Node | null | undefined,\n): node is t.ClassImplements;\nexport function isClassImplements<Opts extends Options<t.ClassImplements>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ClassImplements & Opts;\nexport function isClassImplements<Opts extends Options<t.ClassImplements>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ClassImplements\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareClass(\n node: t.Node | null | undefined,\n): node is t.DeclareClass;\nexport function isDeclareClass<Opts extends Options<t.DeclareClass>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareClass & Opts;\nexport function isDeclareClass<Opts extends Options<t.DeclareClass>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareClass\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareFunction(\n node: t.Node | null | undefined,\n): node is t.DeclareFunction;\nexport function isDeclareFunction<Opts extends Options<t.DeclareFunction>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareFunction & Opts;\nexport function isDeclareFunction<Opts extends Options<t.DeclareFunction>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareFunction\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareInterface(\n node: t.Node | null | undefined,\n): node is t.DeclareInterface;\nexport function isDeclareInterface<Opts extends Options<t.DeclareInterface>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareInterface & Opts;\nexport function isDeclareInterface<Opts extends Options<t.DeclareInterface>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareInterface\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareModule(\n node: t.Node | null | undefined,\n): node is t.DeclareModule;\nexport function isDeclareModule<Opts extends Options<t.DeclareModule>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareModule & Opts;\nexport function isDeclareModule<Opts extends Options<t.DeclareModule>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareModule\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareModuleExports(\n node: t.Node | null | undefined,\n): node is t.DeclareModuleExports;\nexport function isDeclareModuleExports<\n Opts extends Options<t.DeclareModuleExports>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareModuleExports & Opts;\nexport function isDeclareModuleExports<\n Opts extends Options<t.DeclareModuleExports>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareModuleExports\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareTypeAlias(\n node: t.Node | null | undefined,\n): node is t.DeclareTypeAlias;\nexport function isDeclareTypeAlias<Opts extends Options<t.DeclareTypeAlias>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareTypeAlias & Opts;\nexport function isDeclareTypeAlias<Opts extends Options<t.DeclareTypeAlias>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareTypeAlias\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareOpaqueType(\n node: t.Node | null | undefined,\n): node is t.DeclareOpaqueType;\nexport function isDeclareOpaqueType<Opts extends Options<t.DeclareOpaqueType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareOpaqueType & Opts;\nexport function isDeclareOpaqueType<Opts extends Options<t.DeclareOpaqueType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareOpaqueType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareVariable(\n node: t.Node | null | undefined,\n): node is t.DeclareVariable;\nexport function isDeclareVariable<Opts extends Options<t.DeclareVariable>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareVariable & Opts;\nexport function isDeclareVariable<Opts extends Options<t.DeclareVariable>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareVariable\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareExportDeclaration(\n node: t.Node | null | undefined,\n): node is t.DeclareExportDeclaration;\nexport function isDeclareExportDeclaration<\n Opts extends Options<t.DeclareExportDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareExportDeclaration & Opts;\nexport function isDeclareExportDeclaration<\n Opts extends Options<t.DeclareExportDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareExportDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclareExportAllDeclaration(\n node: t.Node | null | undefined,\n): node is t.DeclareExportAllDeclaration;\nexport function isDeclareExportAllDeclaration<\n Opts extends Options<t.DeclareExportAllDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclareExportAllDeclaration & Opts;\nexport function isDeclareExportAllDeclaration<\n Opts extends Options<t.DeclareExportAllDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclareExportAllDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclaredPredicate(\n node: t.Node | null | undefined,\n): node is t.DeclaredPredicate;\nexport function isDeclaredPredicate<Opts extends Options<t.DeclaredPredicate>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DeclaredPredicate & Opts;\nexport function isDeclaredPredicate<Opts extends Options<t.DeclaredPredicate>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DeclaredPredicate\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExistsTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.ExistsTypeAnnotation;\nexport function isExistsTypeAnnotation<\n Opts extends Options<t.ExistsTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExistsTypeAnnotation & Opts;\nexport function isExistsTypeAnnotation<\n Opts extends Options<t.ExistsTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ExistsTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFunctionTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.FunctionTypeAnnotation;\nexport function isFunctionTypeAnnotation<\n Opts extends Options<t.FunctionTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FunctionTypeAnnotation & Opts;\nexport function isFunctionTypeAnnotation<\n Opts extends Options<t.FunctionTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"FunctionTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFunctionTypeParam(\n node: t.Node | null | undefined,\n): node is t.FunctionTypeParam;\nexport function isFunctionTypeParam<Opts extends Options<t.FunctionTypeParam>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FunctionTypeParam & Opts;\nexport function isFunctionTypeParam<Opts extends Options<t.FunctionTypeParam>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"FunctionTypeParam\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isGenericTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.GenericTypeAnnotation;\nexport function isGenericTypeAnnotation<\n Opts extends Options<t.GenericTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.GenericTypeAnnotation & Opts;\nexport function isGenericTypeAnnotation<\n Opts extends Options<t.GenericTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"GenericTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isInferredPredicate(\n node: t.Node | null | undefined,\n): node is t.InferredPredicate;\nexport function isInferredPredicate<Opts extends Options<t.InferredPredicate>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.InferredPredicate & Opts;\nexport function isInferredPredicate<Opts extends Options<t.InferredPredicate>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"InferredPredicate\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isInterfaceExtends(\n node: t.Node | null | undefined,\n): node is t.InterfaceExtends;\nexport function isInterfaceExtends<Opts extends Options<t.InterfaceExtends>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.InterfaceExtends & Opts;\nexport function isInterfaceExtends<Opts extends Options<t.InterfaceExtends>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"InterfaceExtends\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isInterfaceDeclaration(\n node: t.Node | null | undefined,\n): node is t.InterfaceDeclaration;\nexport function isInterfaceDeclaration<\n Opts extends Options<t.InterfaceDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.InterfaceDeclaration & Opts;\nexport function isInterfaceDeclaration<\n Opts extends Options<t.InterfaceDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"InterfaceDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isInterfaceTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.InterfaceTypeAnnotation;\nexport function isInterfaceTypeAnnotation<\n Opts extends Options<t.InterfaceTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.InterfaceTypeAnnotation & Opts;\nexport function isInterfaceTypeAnnotation<\n Opts extends Options<t.InterfaceTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"InterfaceTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isIntersectionTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.IntersectionTypeAnnotation;\nexport function isIntersectionTypeAnnotation<\n Opts extends Options<t.IntersectionTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.IntersectionTypeAnnotation & Opts;\nexport function isIntersectionTypeAnnotation<\n Opts extends Options<t.IntersectionTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"IntersectionTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isMixedTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.MixedTypeAnnotation;\nexport function isMixedTypeAnnotation<\n Opts extends Options<t.MixedTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.MixedTypeAnnotation & Opts;\nexport function isMixedTypeAnnotation<\n Opts extends Options<t.MixedTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"MixedTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEmptyTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.EmptyTypeAnnotation;\nexport function isEmptyTypeAnnotation<\n Opts extends Options<t.EmptyTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EmptyTypeAnnotation & Opts;\nexport function isEmptyTypeAnnotation<\n Opts extends Options<t.EmptyTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"EmptyTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isNullableTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.NullableTypeAnnotation;\nexport function isNullableTypeAnnotation<\n Opts extends Options<t.NullableTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.NullableTypeAnnotation & Opts;\nexport function isNullableTypeAnnotation<\n Opts extends Options<t.NullableTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"NullableTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isNumberLiteralTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.NumberLiteralTypeAnnotation;\nexport function isNumberLiteralTypeAnnotation<\n Opts extends Options<t.NumberLiteralTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.NumberLiteralTypeAnnotation & Opts;\nexport function isNumberLiteralTypeAnnotation<\n Opts extends Options<t.NumberLiteralTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"NumberLiteralTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isNumberTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.NumberTypeAnnotation;\nexport function isNumberTypeAnnotation<\n Opts extends Options<t.NumberTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.NumberTypeAnnotation & Opts;\nexport function isNumberTypeAnnotation<\n Opts extends Options<t.NumberTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"NumberTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.ObjectTypeAnnotation;\nexport function isObjectTypeAnnotation<\n Opts extends Options<t.ObjectTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectTypeAnnotation & Opts;\nexport function isObjectTypeAnnotation<\n Opts extends Options<t.ObjectTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectTypeInternalSlot(\n node: t.Node | null | undefined,\n): node is t.ObjectTypeInternalSlot;\nexport function isObjectTypeInternalSlot<\n Opts extends Options<t.ObjectTypeInternalSlot>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectTypeInternalSlot & Opts;\nexport function isObjectTypeInternalSlot<\n Opts extends Options<t.ObjectTypeInternalSlot>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectTypeInternalSlot\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectTypeCallProperty(\n node: t.Node | null | undefined,\n): node is t.ObjectTypeCallProperty;\nexport function isObjectTypeCallProperty<\n Opts extends Options<t.ObjectTypeCallProperty>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectTypeCallProperty & Opts;\nexport function isObjectTypeCallProperty<\n Opts extends Options<t.ObjectTypeCallProperty>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectTypeCallProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectTypeIndexer(\n node: t.Node | null | undefined,\n): node is t.ObjectTypeIndexer;\nexport function isObjectTypeIndexer<Opts extends Options<t.ObjectTypeIndexer>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectTypeIndexer & Opts;\nexport function isObjectTypeIndexer<Opts extends Options<t.ObjectTypeIndexer>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectTypeIndexer\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectTypeProperty(\n node: t.Node | null | undefined,\n): node is t.ObjectTypeProperty;\nexport function isObjectTypeProperty<\n Opts extends Options<t.ObjectTypeProperty>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectTypeProperty & Opts;\nexport function isObjectTypeProperty<\n Opts extends Options<t.ObjectTypeProperty>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectTypeProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectTypeSpreadProperty(\n node: t.Node | null | undefined,\n): node is t.ObjectTypeSpreadProperty;\nexport function isObjectTypeSpreadProperty<\n Opts extends Options<t.ObjectTypeSpreadProperty>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectTypeSpreadProperty & Opts;\nexport function isObjectTypeSpreadProperty<\n Opts extends Options<t.ObjectTypeSpreadProperty>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ObjectTypeSpreadProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isOpaqueType(\n node: t.Node | null | undefined,\n): node is t.OpaqueType;\nexport function isOpaqueType<Opts extends Options<t.OpaqueType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.OpaqueType & Opts;\nexport function isOpaqueType<Opts extends Options<t.OpaqueType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"OpaqueType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isQualifiedTypeIdentifier(\n node: t.Node | null | undefined,\n): node is t.QualifiedTypeIdentifier;\nexport function isQualifiedTypeIdentifier<\n Opts extends Options<t.QualifiedTypeIdentifier>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.QualifiedTypeIdentifier & Opts;\nexport function isQualifiedTypeIdentifier<\n Opts extends Options<t.QualifiedTypeIdentifier>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"QualifiedTypeIdentifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isStringLiteralTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.StringLiteralTypeAnnotation;\nexport function isStringLiteralTypeAnnotation<\n Opts extends Options<t.StringLiteralTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.StringLiteralTypeAnnotation & Opts;\nexport function isStringLiteralTypeAnnotation<\n Opts extends Options<t.StringLiteralTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"StringLiteralTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isStringTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.StringTypeAnnotation;\nexport function isStringTypeAnnotation<\n Opts extends Options<t.StringTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.StringTypeAnnotation & Opts;\nexport function isStringTypeAnnotation<\n Opts extends Options<t.StringTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"StringTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isSymbolTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.SymbolTypeAnnotation;\nexport function isSymbolTypeAnnotation<\n Opts extends Options<t.SymbolTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.SymbolTypeAnnotation & Opts;\nexport function isSymbolTypeAnnotation<\n Opts extends Options<t.SymbolTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"SymbolTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isThisTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.ThisTypeAnnotation;\nexport function isThisTypeAnnotation<\n Opts extends Options<t.ThisTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ThisTypeAnnotation & Opts;\nexport function isThisTypeAnnotation<\n Opts extends Options<t.ThisTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ThisTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTupleTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.TupleTypeAnnotation;\nexport function isTupleTypeAnnotation<\n Opts extends Options<t.TupleTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TupleTypeAnnotation & Opts;\nexport function isTupleTypeAnnotation<\n Opts extends Options<t.TupleTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TupleTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTypeofTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.TypeofTypeAnnotation;\nexport function isTypeofTypeAnnotation<\n Opts extends Options<t.TypeofTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TypeofTypeAnnotation & Opts;\nexport function isTypeofTypeAnnotation<\n Opts extends Options<t.TypeofTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TypeofTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTypeAlias(\n node: t.Node | null | undefined,\n): node is t.TypeAlias;\nexport function isTypeAlias<Opts extends Options<t.TypeAlias>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TypeAlias & Opts;\nexport function isTypeAlias<Opts extends Options<t.TypeAlias>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TypeAlias\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.TypeAnnotation;\nexport function isTypeAnnotation<Opts extends Options<t.TypeAnnotation>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TypeAnnotation & Opts;\nexport function isTypeAnnotation<Opts extends Options<t.TypeAnnotation>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTypeCastExpression(\n node: t.Node | null | undefined,\n): node is t.TypeCastExpression;\nexport function isTypeCastExpression<\n Opts extends Options<t.TypeCastExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TypeCastExpression & Opts;\nexport function isTypeCastExpression<\n Opts extends Options<t.TypeCastExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TypeCastExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTypeParameter(\n node: t.Node | null | undefined,\n): node is t.TypeParameter;\nexport function isTypeParameter<Opts extends Options<t.TypeParameter>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TypeParameter & Opts;\nexport function isTypeParameter<Opts extends Options<t.TypeParameter>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TypeParameter\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTypeParameterDeclaration(\n node: t.Node | null | undefined,\n): node is t.TypeParameterDeclaration;\nexport function isTypeParameterDeclaration<\n Opts extends Options<t.TypeParameterDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TypeParameterDeclaration & Opts;\nexport function isTypeParameterDeclaration<\n Opts extends Options<t.TypeParameterDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TypeParameterDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTypeParameterInstantiation(\n node: t.Node | null | undefined,\n): node is t.TypeParameterInstantiation;\nexport function isTypeParameterInstantiation<\n Opts extends Options<t.TypeParameterInstantiation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TypeParameterInstantiation & Opts;\nexport function isTypeParameterInstantiation<\n Opts extends Options<t.TypeParameterInstantiation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TypeParameterInstantiation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isUnionTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.UnionTypeAnnotation;\nexport function isUnionTypeAnnotation<\n Opts extends Options<t.UnionTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.UnionTypeAnnotation & Opts;\nexport function isUnionTypeAnnotation<\n Opts extends Options<t.UnionTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"UnionTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isVariance(node: t.Node | null | undefined): node is t.Variance;\nexport function isVariance<Opts extends Options<t.Variance>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Variance & Opts;\nexport function isVariance<Opts extends Options<t.Variance>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Variance\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isVoidTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.VoidTypeAnnotation;\nexport function isVoidTypeAnnotation<\n Opts extends Options<t.VoidTypeAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.VoidTypeAnnotation & Opts;\nexport function isVoidTypeAnnotation<\n Opts extends Options<t.VoidTypeAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"VoidTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumDeclaration(\n node: t.Node | null | undefined,\n): node is t.EnumDeclaration;\nexport function isEnumDeclaration<Opts extends Options<t.EnumDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumDeclaration & Opts;\nexport function isEnumDeclaration<Opts extends Options<t.EnumDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumBooleanBody(\n node: t.Node | null | undefined,\n): node is t.EnumBooleanBody;\nexport function isEnumBooleanBody<Opts extends Options<t.EnumBooleanBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumBooleanBody & Opts;\nexport function isEnumBooleanBody<Opts extends Options<t.EnumBooleanBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumBooleanBody\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumNumberBody(\n node: t.Node | null | undefined,\n): node is t.EnumNumberBody;\nexport function isEnumNumberBody<Opts extends Options<t.EnumNumberBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumNumberBody & Opts;\nexport function isEnumNumberBody<Opts extends Options<t.EnumNumberBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumNumberBody\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumStringBody(\n node: t.Node | null | undefined,\n): node is t.EnumStringBody;\nexport function isEnumStringBody<Opts extends Options<t.EnumStringBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumStringBody & Opts;\nexport function isEnumStringBody<Opts extends Options<t.EnumStringBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumStringBody\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumSymbolBody(\n node: t.Node | null | undefined,\n): node is t.EnumSymbolBody;\nexport function isEnumSymbolBody<Opts extends Options<t.EnumSymbolBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumSymbolBody & Opts;\nexport function isEnumSymbolBody<Opts extends Options<t.EnumSymbolBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumSymbolBody\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumBooleanMember(\n node: t.Node | null | undefined,\n): node is t.EnumBooleanMember;\nexport function isEnumBooleanMember<Opts extends Options<t.EnumBooleanMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumBooleanMember & Opts;\nexport function isEnumBooleanMember<Opts extends Options<t.EnumBooleanMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumBooleanMember\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumNumberMember(\n node: t.Node | null | undefined,\n): node is t.EnumNumberMember;\nexport function isEnumNumberMember<Opts extends Options<t.EnumNumberMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumNumberMember & Opts;\nexport function isEnumNumberMember<Opts extends Options<t.EnumNumberMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumNumberMember\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumStringMember(\n node: t.Node | null | undefined,\n): node is t.EnumStringMember;\nexport function isEnumStringMember<Opts extends Options<t.EnumStringMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumStringMember & Opts;\nexport function isEnumStringMember<Opts extends Options<t.EnumStringMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumStringMember\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumDefaultedMember(\n node: t.Node | null | undefined,\n): node is t.EnumDefaultedMember;\nexport function isEnumDefaultedMember<\n Opts extends Options<t.EnumDefaultedMember>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumDefaultedMember & Opts;\nexport function isEnumDefaultedMember<\n Opts extends Options<t.EnumDefaultedMember>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"EnumDefaultedMember\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isIndexedAccessType(\n node: t.Node | null | undefined,\n): node is t.IndexedAccessType;\nexport function isIndexedAccessType<Opts extends Options<t.IndexedAccessType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.IndexedAccessType & Opts;\nexport function isIndexedAccessType<Opts extends Options<t.IndexedAccessType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"IndexedAccessType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isOptionalIndexedAccessType(\n node: t.Node | null | undefined,\n): node is t.OptionalIndexedAccessType;\nexport function isOptionalIndexedAccessType<\n Opts extends Options<t.OptionalIndexedAccessType>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.OptionalIndexedAccessType & Opts;\nexport function isOptionalIndexedAccessType<\n Opts extends Options<t.OptionalIndexedAccessType>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"OptionalIndexedAccessType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXAttribute(\n node: t.Node | null | undefined,\n): node is t.JSXAttribute;\nexport function isJSXAttribute<Opts extends Options<t.JSXAttribute>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXAttribute & Opts;\nexport function isJSXAttribute<Opts extends Options<t.JSXAttribute>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXAttribute\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXClosingElement(\n node: t.Node | null | undefined,\n): node is t.JSXClosingElement;\nexport function isJSXClosingElement<Opts extends Options<t.JSXClosingElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXClosingElement & Opts;\nexport function isJSXClosingElement<Opts extends Options<t.JSXClosingElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXClosingElement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXElement(\n node: t.Node | null | undefined,\n): node is t.JSXElement;\nexport function isJSXElement<Opts extends Options<t.JSXElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXElement & Opts;\nexport function isJSXElement<Opts extends Options<t.JSXElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXElement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXEmptyExpression(\n node: t.Node | null | undefined,\n): node is t.JSXEmptyExpression;\nexport function isJSXEmptyExpression<\n Opts extends Options<t.JSXEmptyExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXEmptyExpression & Opts;\nexport function isJSXEmptyExpression<\n Opts extends Options<t.JSXEmptyExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXEmptyExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXExpressionContainer(\n node: t.Node | null | undefined,\n): node is t.JSXExpressionContainer;\nexport function isJSXExpressionContainer<\n Opts extends Options<t.JSXExpressionContainer>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXExpressionContainer & Opts;\nexport function isJSXExpressionContainer<\n Opts extends Options<t.JSXExpressionContainer>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXExpressionContainer\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXSpreadChild(\n node: t.Node | null | undefined,\n): node is t.JSXSpreadChild;\nexport function isJSXSpreadChild<Opts extends Options<t.JSXSpreadChild>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXSpreadChild & Opts;\nexport function isJSXSpreadChild<Opts extends Options<t.JSXSpreadChild>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXSpreadChild\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXIdentifier(\n node: t.Node | null | undefined,\n): node is t.JSXIdentifier;\nexport function isJSXIdentifier<Opts extends Options<t.JSXIdentifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXIdentifier & Opts;\nexport function isJSXIdentifier<Opts extends Options<t.JSXIdentifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXIdentifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXMemberExpression(\n node: t.Node | null | undefined,\n): node is t.JSXMemberExpression;\nexport function isJSXMemberExpression<\n Opts extends Options<t.JSXMemberExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXMemberExpression & Opts;\nexport function isJSXMemberExpression<\n Opts extends Options<t.JSXMemberExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXMemberExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXNamespacedName(\n node: t.Node | null | undefined,\n): node is t.JSXNamespacedName;\nexport function isJSXNamespacedName<Opts extends Options<t.JSXNamespacedName>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXNamespacedName & Opts;\nexport function isJSXNamespacedName<Opts extends Options<t.JSXNamespacedName>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXNamespacedName\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXOpeningElement(\n node: t.Node | null | undefined,\n): node is t.JSXOpeningElement;\nexport function isJSXOpeningElement<Opts extends Options<t.JSXOpeningElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXOpeningElement & Opts;\nexport function isJSXOpeningElement<Opts extends Options<t.JSXOpeningElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXOpeningElement\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXSpreadAttribute(\n node: t.Node | null | undefined,\n): node is t.JSXSpreadAttribute;\nexport function isJSXSpreadAttribute<\n Opts extends Options<t.JSXSpreadAttribute>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXSpreadAttribute & Opts;\nexport function isJSXSpreadAttribute<\n Opts extends Options<t.JSXSpreadAttribute>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXSpreadAttribute\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXText(node: t.Node | null | undefined): node is t.JSXText;\nexport function isJSXText<Opts extends Options<t.JSXText>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXText & Opts;\nexport function isJSXText<Opts extends Options<t.JSXText>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXText\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXFragment(\n node: t.Node | null | undefined,\n): node is t.JSXFragment;\nexport function isJSXFragment<Opts extends Options<t.JSXFragment>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXFragment & Opts;\nexport function isJSXFragment<Opts extends Options<t.JSXFragment>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXFragment\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXOpeningFragment(\n node: t.Node | null | undefined,\n): node is t.JSXOpeningFragment;\nexport function isJSXOpeningFragment<\n Opts extends Options<t.JSXOpeningFragment>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXOpeningFragment & Opts;\nexport function isJSXOpeningFragment<\n Opts extends Options<t.JSXOpeningFragment>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXOpeningFragment\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSXClosingFragment(\n node: t.Node | null | undefined,\n): node is t.JSXClosingFragment;\nexport function isJSXClosingFragment<\n Opts extends Options<t.JSXClosingFragment>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSXClosingFragment & Opts;\nexport function isJSXClosingFragment<\n Opts extends Options<t.JSXClosingFragment>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"JSXClosingFragment\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isNoop(node: t.Node | null | undefined): node is t.Noop;\nexport function isNoop<Opts extends Options<t.Noop>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Noop & Opts;\nexport function isNoop<Opts extends Options<t.Noop>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Noop\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPlaceholder(\n node: t.Node | null | undefined,\n): node is t.Placeholder;\nexport function isPlaceholder<Opts extends Options<t.Placeholder>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Placeholder & Opts;\nexport function isPlaceholder<Opts extends Options<t.Placeholder>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Placeholder\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isV8IntrinsicIdentifier(\n node: t.Node | null | undefined,\n): node is t.V8IntrinsicIdentifier;\nexport function isV8IntrinsicIdentifier<\n Opts extends Options<t.V8IntrinsicIdentifier>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.V8IntrinsicIdentifier & Opts;\nexport function isV8IntrinsicIdentifier<\n Opts extends Options<t.V8IntrinsicIdentifier>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"V8IntrinsicIdentifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isArgumentPlaceholder(\n node: t.Node | null | undefined,\n): node is t.ArgumentPlaceholder;\nexport function isArgumentPlaceholder<\n Opts extends Options<t.ArgumentPlaceholder>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ArgumentPlaceholder & Opts;\nexport function isArgumentPlaceholder<\n Opts extends Options<t.ArgumentPlaceholder>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ArgumentPlaceholder\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBindExpression(\n node: t.Node | null | undefined,\n): node is t.BindExpression;\nexport function isBindExpression<Opts extends Options<t.BindExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BindExpression & Opts;\nexport function isBindExpression<Opts extends Options<t.BindExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"BindExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDecorator(\n node: t.Node | null | undefined,\n): node is t.Decorator;\nexport function isDecorator<Opts extends Options<t.Decorator>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Decorator & Opts;\nexport function isDecorator<Opts extends Options<t.Decorator>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"Decorator\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDoExpression(\n node: t.Node | null | undefined,\n): node is t.DoExpression;\nexport function isDoExpression<Opts extends Options<t.DoExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DoExpression & Opts;\nexport function isDoExpression<Opts extends Options<t.DoExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DoExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExportDefaultSpecifier(\n node: t.Node | null | undefined,\n): node is t.ExportDefaultSpecifier;\nexport function isExportDefaultSpecifier<\n Opts extends Options<t.ExportDefaultSpecifier>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExportDefaultSpecifier & Opts;\nexport function isExportDefaultSpecifier<\n Opts extends Options<t.ExportDefaultSpecifier>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"ExportDefaultSpecifier\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isRecordExpression(\n node: t.Node | null | undefined,\n): node is t.RecordExpression;\nexport function isRecordExpression<Opts extends Options<t.RecordExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.RecordExpression & Opts;\nexport function isRecordExpression<Opts extends Options<t.RecordExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"RecordExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTupleExpression(\n node: t.Node | null | undefined,\n): node is t.TupleExpression;\nexport function isTupleExpression<Opts extends Options<t.TupleExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TupleExpression & Opts;\nexport function isTupleExpression<Opts extends Options<t.TupleExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TupleExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDecimalLiteral(\n node: t.Node | null | undefined,\n): node is t.DecimalLiteral;\nexport function isDecimalLiteral<Opts extends Options<t.DecimalLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.DecimalLiteral & Opts;\nexport function isDecimalLiteral<Opts extends Options<t.DecimalLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"DecimalLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isModuleExpression(\n node: t.Node | null | undefined,\n): node is t.ModuleExpression;\nexport function isModuleExpression<Opts extends Options<t.ModuleExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ModuleExpression & Opts;\nexport function isModuleExpression<Opts extends Options<t.ModuleExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"ModuleExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTopicReference(\n node: t.Node | null | undefined,\n): node is t.TopicReference;\nexport function isTopicReference<Opts extends Options<t.TopicReference>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TopicReference & Opts;\nexport function isTopicReference<Opts extends Options<t.TopicReference>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TopicReference\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPipelineTopicExpression(\n node: t.Node | null | undefined,\n): node is t.PipelineTopicExpression;\nexport function isPipelineTopicExpression<\n Opts extends Options<t.PipelineTopicExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.PipelineTopicExpression & Opts;\nexport function isPipelineTopicExpression<\n Opts extends Options<t.PipelineTopicExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"PipelineTopicExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPipelineBareFunction(\n node: t.Node | null | undefined,\n): node is t.PipelineBareFunction;\nexport function isPipelineBareFunction<\n Opts extends Options<t.PipelineBareFunction>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.PipelineBareFunction & Opts;\nexport function isPipelineBareFunction<\n Opts extends Options<t.PipelineBareFunction>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"PipelineBareFunction\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPipelinePrimaryTopicReference(\n node: t.Node | null | undefined,\n): node is t.PipelinePrimaryTopicReference;\nexport function isPipelinePrimaryTopicReference<\n Opts extends Options<t.PipelinePrimaryTopicReference>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.PipelinePrimaryTopicReference & Opts;\nexport function isPipelinePrimaryTopicReference<\n Opts extends Options<t.PipelinePrimaryTopicReference>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"PipelinePrimaryTopicReference\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isVoidPattern(\n node: t.Node | null | undefined,\n): node is t.VoidPattern;\nexport function isVoidPattern<Opts extends Options<t.VoidPattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.VoidPattern & Opts;\nexport function isVoidPattern<Opts extends Options<t.VoidPattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"VoidPattern\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSParameterProperty(\n node: t.Node | null | undefined,\n): node is t.TSParameterProperty;\nexport function isTSParameterProperty<\n Opts extends Options<t.TSParameterProperty>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSParameterProperty & Opts;\nexport function isTSParameterProperty<\n Opts extends Options<t.TSParameterProperty>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSParameterProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSDeclareFunction(\n node: t.Node | null | undefined,\n): node is t.TSDeclareFunction;\nexport function isTSDeclareFunction<Opts extends Options<t.TSDeclareFunction>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSDeclareFunction & Opts;\nexport function isTSDeclareFunction<Opts extends Options<t.TSDeclareFunction>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSDeclareFunction\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSDeclareMethod(\n node: t.Node | null | undefined,\n): node is t.TSDeclareMethod;\nexport function isTSDeclareMethod<Opts extends Options<t.TSDeclareMethod>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSDeclareMethod & Opts;\nexport function isTSDeclareMethod<Opts extends Options<t.TSDeclareMethod>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSDeclareMethod\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSQualifiedName(\n node: t.Node | null | undefined,\n): node is t.TSQualifiedName;\nexport function isTSQualifiedName<Opts extends Options<t.TSQualifiedName>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSQualifiedName & Opts;\nexport function isTSQualifiedName<Opts extends Options<t.TSQualifiedName>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSQualifiedName\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSCallSignatureDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSCallSignatureDeclaration;\nexport function isTSCallSignatureDeclaration<\n Opts extends Options<t.TSCallSignatureDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSCallSignatureDeclaration & Opts;\nexport function isTSCallSignatureDeclaration<\n Opts extends Options<t.TSCallSignatureDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSCallSignatureDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSConstructSignatureDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSConstructSignatureDeclaration;\nexport function isTSConstructSignatureDeclaration<\n Opts extends Options<t.TSConstructSignatureDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSConstructSignatureDeclaration & Opts;\nexport function isTSConstructSignatureDeclaration<\n Opts extends Options<t.TSConstructSignatureDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSConstructSignatureDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSPropertySignature(\n node: t.Node | null | undefined,\n): node is t.TSPropertySignature;\nexport function isTSPropertySignature<\n Opts extends Options<t.TSPropertySignature>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSPropertySignature & Opts;\nexport function isTSPropertySignature<\n Opts extends Options<t.TSPropertySignature>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSPropertySignature\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSMethodSignature(\n node: t.Node | null | undefined,\n): node is t.TSMethodSignature;\nexport function isTSMethodSignature<Opts extends Options<t.TSMethodSignature>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSMethodSignature & Opts;\nexport function isTSMethodSignature<Opts extends Options<t.TSMethodSignature>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSMethodSignature\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSIndexSignature(\n node: t.Node | null | undefined,\n): node is t.TSIndexSignature;\nexport function isTSIndexSignature<Opts extends Options<t.TSIndexSignature>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSIndexSignature & Opts;\nexport function isTSIndexSignature<Opts extends Options<t.TSIndexSignature>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSIndexSignature\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSAnyKeyword(\n node: t.Node | null | undefined,\n): node is t.TSAnyKeyword;\nexport function isTSAnyKeyword<Opts extends Options<t.TSAnyKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSAnyKeyword & Opts;\nexport function isTSAnyKeyword<Opts extends Options<t.TSAnyKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSAnyKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSBooleanKeyword(\n node: t.Node | null | undefined,\n): node is t.TSBooleanKeyword;\nexport function isTSBooleanKeyword<Opts extends Options<t.TSBooleanKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSBooleanKeyword & Opts;\nexport function isTSBooleanKeyword<Opts extends Options<t.TSBooleanKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSBooleanKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSBigIntKeyword(\n node: t.Node | null | undefined,\n): node is t.TSBigIntKeyword;\nexport function isTSBigIntKeyword<Opts extends Options<t.TSBigIntKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSBigIntKeyword & Opts;\nexport function isTSBigIntKeyword<Opts extends Options<t.TSBigIntKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSBigIntKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSIntrinsicKeyword(\n node: t.Node | null | undefined,\n): node is t.TSIntrinsicKeyword;\nexport function isTSIntrinsicKeyword<\n Opts extends Options<t.TSIntrinsicKeyword>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSIntrinsicKeyword & Opts;\nexport function isTSIntrinsicKeyword<\n Opts extends Options<t.TSIntrinsicKeyword>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSIntrinsicKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSNeverKeyword(\n node: t.Node | null | undefined,\n): node is t.TSNeverKeyword;\nexport function isTSNeverKeyword<Opts extends Options<t.TSNeverKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSNeverKeyword & Opts;\nexport function isTSNeverKeyword<Opts extends Options<t.TSNeverKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSNeverKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSNullKeyword(\n node: t.Node | null | undefined,\n): node is t.TSNullKeyword;\nexport function isTSNullKeyword<Opts extends Options<t.TSNullKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSNullKeyword & Opts;\nexport function isTSNullKeyword<Opts extends Options<t.TSNullKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSNullKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSNumberKeyword(\n node: t.Node | null | undefined,\n): node is t.TSNumberKeyword;\nexport function isTSNumberKeyword<Opts extends Options<t.TSNumberKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSNumberKeyword & Opts;\nexport function isTSNumberKeyword<Opts extends Options<t.TSNumberKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSNumberKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSObjectKeyword(\n node: t.Node | null | undefined,\n): node is t.TSObjectKeyword;\nexport function isTSObjectKeyword<Opts extends Options<t.TSObjectKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSObjectKeyword & Opts;\nexport function isTSObjectKeyword<Opts extends Options<t.TSObjectKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSObjectKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSStringKeyword(\n node: t.Node | null | undefined,\n): node is t.TSStringKeyword;\nexport function isTSStringKeyword<Opts extends Options<t.TSStringKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSStringKeyword & Opts;\nexport function isTSStringKeyword<Opts extends Options<t.TSStringKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSStringKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSSymbolKeyword(\n node: t.Node | null | undefined,\n): node is t.TSSymbolKeyword;\nexport function isTSSymbolKeyword<Opts extends Options<t.TSSymbolKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSSymbolKeyword & Opts;\nexport function isTSSymbolKeyword<Opts extends Options<t.TSSymbolKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSSymbolKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSUndefinedKeyword(\n node: t.Node | null | undefined,\n): node is t.TSUndefinedKeyword;\nexport function isTSUndefinedKeyword<\n Opts extends Options<t.TSUndefinedKeyword>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSUndefinedKeyword & Opts;\nexport function isTSUndefinedKeyword<\n Opts extends Options<t.TSUndefinedKeyword>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSUndefinedKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSUnknownKeyword(\n node: t.Node | null | undefined,\n): node is t.TSUnknownKeyword;\nexport function isTSUnknownKeyword<Opts extends Options<t.TSUnknownKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSUnknownKeyword & Opts;\nexport function isTSUnknownKeyword<Opts extends Options<t.TSUnknownKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSUnknownKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSVoidKeyword(\n node: t.Node | null | undefined,\n): node is t.TSVoidKeyword;\nexport function isTSVoidKeyword<Opts extends Options<t.TSVoidKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSVoidKeyword & Opts;\nexport function isTSVoidKeyword<Opts extends Options<t.TSVoidKeyword>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSVoidKeyword\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSThisType(\n node: t.Node | null | undefined,\n): node is t.TSThisType;\nexport function isTSThisType<Opts extends Options<t.TSThisType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSThisType & Opts;\nexport function isTSThisType<Opts extends Options<t.TSThisType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSThisType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSFunctionType(\n node: t.Node | null | undefined,\n): node is t.TSFunctionType;\nexport function isTSFunctionType<Opts extends Options<t.TSFunctionType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSFunctionType & Opts;\nexport function isTSFunctionType<Opts extends Options<t.TSFunctionType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSFunctionType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSConstructorType(\n node: t.Node | null | undefined,\n): node is t.TSConstructorType;\nexport function isTSConstructorType<Opts extends Options<t.TSConstructorType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSConstructorType & Opts;\nexport function isTSConstructorType<Opts extends Options<t.TSConstructorType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSConstructorType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeReference(\n node: t.Node | null | undefined,\n): node is t.TSTypeReference;\nexport function isTSTypeReference<Opts extends Options<t.TSTypeReference>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeReference & Opts;\nexport function isTSTypeReference<Opts extends Options<t.TSTypeReference>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeReference\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypePredicate(\n node: t.Node | null | undefined,\n): node is t.TSTypePredicate;\nexport function isTSTypePredicate<Opts extends Options<t.TSTypePredicate>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypePredicate & Opts;\nexport function isTSTypePredicate<Opts extends Options<t.TSTypePredicate>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypePredicate\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeQuery(\n node: t.Node | null | undefined,\n): node is t.TSTypeQuery;\nexport function isTSTypeQuery<Opts extends Options<t.TSTypeQuery>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeQuery & Opts;\nexport function isTSTypeQuery<Opts extends Options<t.TSTypeQuery>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeQuery\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeLiteral(\n node: t.Node | null | undefined,\n): node is t.TSTypeLiteral;\nexport function isTSTypeLiteral<Opts extends Options<t.TSTypeLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeLiteral & Opts;\nexport function isTSTypeLiteral<Opts extends Options<t.TSTypeLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSArrayType(\n node: t.Node | null | undefined,\n): node is t.TSArrayType;\nexport function isTSArrayType<Opts extends Options<t.TSArrayType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSArrayType & Opts;\nexport function isTSArrayType<Opts extends Options<t.TSArrayType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSArrayType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTupleType(\n node: t.Node | null | undefined,\n): node is t.TSTupleType;\nexport function isTSTupleType<Opts extends Options<t.TSTupleType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTupleType & Opts;\nexport function isTSTupleType<Opts extends Options<t.TSTupleType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTupleType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSOptionalType(\n node: t.Node | null | undefined,\n): node is t.TSOptionalType;\nexport function isTSOptionalType<Opts extends Options<t.TSOptionalType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSOptionalType & Opts;\nexport function isTSOptionalType<Opts extends Options<t.TSOptionalType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSOptionalType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSRestType(\n node: t.Node | null | undefined,\n): node is t.TSRestType;\nexport function isTSRestType<Opts extends Options<t.TSRestType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSRestType & Opts;\nexport function isTSRestType<Opts extends Options<t.TSRestType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSRestType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSNamedTupleMember(\n node: t.Node | null | undefined,\n): node is t.TSNamedTupleMember;\nexport function isTSNamedTupleMember<\n Opts extends Options<t.TSNamedTupleMember>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSNamedTupleMember & Opts;\nexport function isTSNamedTupleMember<\n Opts extends Options<t.TSNamedTupleMember>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSNamedTupleMember\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSUnionType(\n node: t.Node | null | undefined,\n): node is t.TSUnionType;\nexport function isTSUnionType<Opts extends Options<t.TSUnionType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSUnionType & Opts;\nexport function isTSUnionType<Opts extends Options<t.TSUnionType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSUnionType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSIntersectionType(\n node: t.Node | null | undefined,\n): node is t.TSIntersectionType;\nexport function isTSIntersectionType<\n Opts extends Options<t.TSIntersectionType>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSIntersectionType & Opts;\nexport function isTSIntersectionType<\n Opts extends Options<t.TSIntersectionType>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSIntersectionType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSConditionalType(\n node: t.Node | null | undefined,\n): node is t.TSConditionalType;\nexport function isTSConditionalType<Opts extends Options<t.TSConditionalType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSConditionalType & Opts;\nexport function isTSConditionalType<Opts extends Options<t.TSConditionalType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSConditionalType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSInferType(\n node: t.Node | null | undefined,\n): node is t.TSInferType;\nexport function isTSInferType<Opts extends Options<t.TSInferType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSInferType & Opts;\nexport function isTSInferType<Opts extends Options<t.TSInferType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSInferType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSParenthesizedType(\n node: t.Node | null | undefined,\n): node is t.TSParenthesizedType;\nexport function isTSParenthesizedType<\n Opts extends Options<t.TSParenthesizedType>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSParenthesizedType & Opts;\nexport function isTSParenthesizedType<\n Opts extends Options<t.TSParenthesizedType>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSParenthesizedType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeOperator(\n node: t.Node | null | undefined,\n): node is t.TSTypeOperator;\nexport function isTSTypeOperator<Opts extends Options<t.TSTypeOperator>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeOperator & Opts;\nexport function isTSTypeOperator<Opts extends Options<t.TSTypeOperator>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeOperator\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSIndexedAccessType(\n node: t.Node | null | undefined,\n): node is t.TSIndexedAccessType;\nexport function isTSIndexedAccessType<\n Opts extends Options<t.TSIndexedAccessType>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSIndexedAccessType & Opts;\nexport function isTSIndexedAccessType<\n Opts extends Options<t.TSIndexedAccessType>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSIndexedAccessType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSMappedType(\n node: t.Node | null | undefined,\n): node is t.TSMappedType;\nexport function isTSMappedType<Opts extends Options<t.TSMappedType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSMappedType & Opts;\nexport function isTSMappedType<Opts extends Options<t.TSMappedType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSMappedType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTemplateLiteralType(\n node: t.Node | null | undefined,\n): node is t.TSTemplateLiteralType;\nexport function isTSTemplateLiteralType<\n Opts extends Options<t.TSTemplateLiteralType>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTemplateLiteralType & Opts;\nexport function isTSTemplateLiteralType<\n Opts extends Options<t.TSTemplateLiteralType>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTemplateLiteralType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSLiteralType(\n node: t.Node | null | undefined,\n): node is t.TSLiteralType;\nexport function isTSLiteralType<Opts extends Options<t.TSLiteralType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSLiteralType & Opts;\nexport function isTSLiteralType<Opts extends Options<t.TSLiteralType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSLiteralType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSExpressionWithTypeArguments(\n node: t.Node | null | undefined,\n): node is t.TSExpressionWithTypeArguments;\nexport function isTSExpressionWithTypeArguments<\n Opts extends Options<t.TSExpressionWithTypeArguments>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSExpressionWithTypeArguments & Opts;\nexport function isTSExpressionWithTypeArguments<\n Opts extends Options<t.TSExpressionWithTypeArguments>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSExpressionWithTypeArguments\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSInterfaceDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSInterfaceDeclaration;\nexport function isTSInterfaceDeclaration<\n Opts extends Options<t.TSInterfaceDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSInterfaceDeclaration & Opts;\nexport function isTSInterfaceDeclaration<\n Opts extends Options<t.TSInterfaceDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSInterfaceDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSInterfaceBody(\n node: t.Node | null | undefined,\n): node is t.TSInterfaceBody;\nexport function isTSInterfaceBody<Opts extends Options<t.TSInterfaceBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSInterfaceBody & Opts;\nexport function isTSInterfaceBody<Opts extends Options<t.TSInterfaceBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSInterfaceBody\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeAliasDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSTypeAliasDeclaration;\nexport function isTSTypeAliasDeclaration<\n Opts extends Options<t.TSTypeAliasDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeAliasDeclaration & Opts;\nexport function isTSTypeAliasDeclaration<\n Opts extends Options<t.TSTypeAliasDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeAliasDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSInstantiationExpression(\n node: t.Node | null | undefined,\n): node is t.TSInstantiationExpression;\nexport function isTSInstantiationExpression<\n Opts extends Options<t.TSInstantiationExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSInstantiationExpression & Opts;\nexport function isTSInstantiationExpression<\n Opts extends Options<t.TSInstantiationExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSInstantiationExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSAsExpression(\n node: t.Node | null | undefined,\n): node is t.TSAsExpression;\nexport function isTSAsExpression<Opts extends Options<t.TSAsExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSAsExpression & Opts;\nexport function isTSAsExpression<Opts extends Options<t.TSAsExpression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSAsExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSSatisfiesExpression(\n node: t.Node | null | undefined,\n): node is t.TSSatisfiesExpression;\nexport function isTSSatisfiesExpression<\n Opts extends Options<t.TSSatisfiesExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSSatisfiesExpression & Opts;\nexport function isTSSatisfiesExpression<\n Opts extends Options<t.TSSatisfiesExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSSatisfiesExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeAssertion(\n node: t.Node | null | undefined,\n): node is t.TSTypeAssertion;\nexport function isTSTypeAssertion<Opts extends Options<t.TSTypeAssertion>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeAssertion & Opts;\nexport function isTSTypeAssertion<Opts extends Options<t.TSTypeAssertion>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeAssertion\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSEnumBody(\n node: t.Node | null | undefined,\n): node is t.TSEnumBody;\nexport function isTSEnumBody<Opts extends Options<t.TSEnumBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSEnumBody & Opts;\nexport function isTSEnumBody<Opts extends Options<t.TSEnumBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSEnumBody\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSEnumDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSEnumDeclaration;\nexport function isTSEnumDeclaration<Opts extends Options<t.TSEnumDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSEnumDeclaration & Opts;\nexport function isTSEnumDeclaration<Opts extends Options<t.TSEnumDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSEnumDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSEnumMember(\n node: t.Node | null | undefined,\n): node is t.TSEnumMember;\nexport function isTSEnumMember<Opts extends Options<t.TSEnumMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSEnumMember & Opts;\nexport function isTSEnumMember<Opts extends Options<t.TSEnumMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSEnumMember\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSModuleDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSModuleDeclaration;\nexport function isTSModuleDeclaration<\n Opts extends Options<t.TSModuleDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSModuleDeclaration & Opts;\nexport function isTSModuleDeclaration<\n Opts extends Options<t.TSModuleDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSModuleDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSModuleBlock(\n node: t.Node | null | undefined,\n): node is t.TSModuleBlock;\nexport function isTSModuleBlock<Opts extends Options<t.TSModuleBlock>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSModuleBlock & Opts;\nexport function isTSModuleBlock<Opts extends Options<t.TSModuleBlock>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSModuleBlock\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSImportType(\n node: t.Node | null | undefined,\n): node is t.TSImportType;\nexport function isTSImportType<Opts extends Options<t.TSImportType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSImportType & Opts;\nexport function isTSImportType<Opts extends Options<t.TSImportType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSImportType\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSImportEqualsDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSImportEqualsDeclaration;\nexport function isTSImportEqualsDeclaration<\n Opts extends Options<t.TSImportEqualsDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSImportEqualsDeclaration & Opts;\nexport function isTSImportEqualsDeclaration<\n Opts extends Options<t.TSImportEqualsDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSImportEqualsDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSExternalModuleReference(\n node: t.Node | null | undefined,\n): node is t.TSExternalModuleReference;\nexport function isTSExternalModuleReference<\n Opts extends Options<t.TSExternalModuleReference>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSExternalModuleReference & Opts;\nexport function isTSExternalModuleReference<\n Opts extends Options<t.TSExternalModuleReference>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSExternalModuleReference\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSNonNullExpression(\n node: t.Node | null | undefined,\n): node is t.TSNonNullExpression;\nexport function isTSNonNullExpression<\n Opts extends Options<t.TSNonNullExpression>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSNonNullExpression & Opts;\nexport function isTSNonNullExpression<\n Opts extends Options<t.TSNonNullExpression>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSNonNullExpression\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSExportAssignment(\n node: t.Node | null | undefined,\n): node is t.TSExportAssignment;\nexport function isTSExportAssignment<\n Opts extends Options<t.TSExportAssignment>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSExportAssignment & Opts;\nexport function isTSExportAssignment<\n Opts extends Options<t.TSExportAssignment>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSExportAssignment\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSNamespaceExportDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSNamespaceExportDeclaration;\nexport function isTSNamespaceExportDeclaration<\n Opts extends Options<t.TSNamespaceExportDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSNamespaceExportDeclaration & Opts;\nexport function isTSNamespaceExportDeclaration<\n Opts extends Options<t.TSNamespaceExportDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSNamespaceExportDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeAnnotation(\n node: t.Node | null | undefined,\n): node is t.TSTypeAnnotation;\nexport function isTSTypeAnnotation<Opts extends Options<t.TSTypeAnnotation>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeAnnotation & Opts;\nexport function isTSTypeAnnotation<Opts extends Options<t.TSTypeAnnotation>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeAnnotation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeParameterInstantiation(\n node: t.Node | null | undefined,\n): node is t.TSTypeParameterInstantiation;\nexport function isTSTypeParameterInstantiation<\n Opts extends Options<t.TSTypeParameterInstantiation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeParameterInstantiation & Opts;\nexport function isTSTypeParameterInstantiation<\n Opts extends Options<t.TSTypeParameterInstantiation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeParameterInstantiation\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeParameterDeclaration(\n node: t.Node | null | undefined,\n): node is t.TSTypeParameterDeclaration;\nexport function isTSTypeParameterDeclaration<\n Opts extends Options<t.TSTypeParameterDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeParameterDeclaration & Opts;\nexport function isTSTypeParameterDeclaration<\n Opts extends Options<t.TSTypeParameterDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeParameterDeclaration\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeParameter(\n node: t.Node | null | undefined,\n): node is t.TSTypeParameter;\nexport function isTSTypeParameter<Opts extends Options<t.TSTypeParameter>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeParameter & Opts;\nexport function isTSTypeParameter<Opts extends Options<t.TSTypeParameter>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n if (node.type !== \"TSTypeParameter\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isStandardized(\n node: t.Node | null | undefined,\n): node is t.Standardized;\nexport function isStandardized<Opts extends Options<t.Standardized>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Standardized & Opts;\nexport function isStandardized<Opts extends Options<t.Standardized>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ArrayExpression\":\n case \"AssignmentExpression\":\n case \"BinaryExpression\":\n case \"InterpreterDirective\":\n case \"Directive\":\n case \"DirectiveLiteral\":\n case \"BlockStatement\":\n case \"BreakStatement\":\n case \"CallExpression\":\n case \"CatchClause\":\n case \"ConditionalExpression\":\n case \"ContinueStatement\":\n case \"DebuggerStatement\":\n case \"DoWhileStatement\":\n case \"EmptyStatement\":\n case \"ExpressionStatement\":\n case \"File\":\n case \"ForInStatement\":\n case \"ForStatement\":\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"Identifier\":\n case \"IfStatement\":\n case \"LabeledStatement\":\n case \"StringLiteral\":\n case \"NumericLiteral\":\n case \"NullLiteral\":\n case \"BooleanLiteral\":\n case \"RegExpLiteral\":\n case \"LogicalExpression\":\n case \"MemberExpression\":\n case \"NewExpression\":\n case \"Program\":\n case \"ObjectExpression\":\n case \"ObjectMethod\":\n case \"ObjectProperty\":\n case \"RestElement\":\n case \"ReturnStatement\":\n case \"SequenceExpression\":\n case \"ParenthesizedExpression\":\n case \"SwitchCase\":\n case \"SwitchStatement\":\n case \"ThisExpression\":\n case \"ThrowStatement\":\n case \"TryStatement\":\n case \"UnaryExpression\":\n case \"UpdateExpression\":\n case \"VariableDeclaration\":\n case \"VariableDeclarator\":\n case \"WhileStatement\":\n case \"WithStatement\":\n case \"AssignmentPattern\":\n case \"ArrayPattern\":\n case \"ArrowFunctionExpression\":\n case \"ClassBody\":\n case \"ClassExpression\":\n case \"ClassDeclaration\":\n case \"ExportAllDeclaration\":\n case \"ExportDefaultDeclaration\":\n case \"ExportNamedDeclaration\":\n case \"ExportSpecifier\":\n case \"ForOfStatement\":\n case \"ImportDeclaration\":\n case \"ImportDefaultSpecifier\":\n case \"ImportNamespaceSpecifier\":\n case \"ImportSpecifier\":\n case \"ImportExpression\":\n case \"MetaProperty\":\n case \"ClassMethod\":\n case \"ObjectPattern\":\n case \"SpreadElement\":\n case \"Super\":\n case \"TaggedTemplateExpression\":\n case \"TemplateElement\":\n case \"TemplateLiteral\":\n case \"YieldExpression\":\n case \"AwaitExpression\":\n case \"Import\":\n case \"BigIntLiteral\":\n case \"ExportNamespaceSpecifier\":\n case \"OptionalMemberExpression\":\n case \"OptionalCallExpression\":\n case \"ClassProperty\":\n case \"ClassAccessorProperty\":\n case \"ClassPrivateProperty\":\n case \"ClassPrivateMethod\":\n case \"PrivateName\":\n case \"StaticBlock\":\n case \"ImportAttribute\":\n break;\n case \"Placeholder\":\n switch (node.expectedNode) {\n case \"Identifier\":\n case \"StringLiteral\":\n case \"BlockStatement\":\n case \"ClassBody\":\n break;\n default:\n return false;\n }\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExpression(\n node: t.Node | null | undefined,\n): node is t.Expression;\nexport function isExpression<Opts extends Options<t.Expression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Expression & Opts;\nexport function isExpression<Opts extends Options<t.Expression>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ArrayExpression\":\n case \"AssignmentExpression\":\n case \"BinaryExpression\":\n case \"CallExpression\":\n case \"ConditionalExpression\":\n case \"FunctionExpression\":\n case \"Identifier\":\n case \"StringLiteral\":\n case \"NumericLiteral\":\n case \"NullLiteral\":\n case \"BooleanLiteral\":\n case \"RegExpLiteral\":\n case \"LogicalExpression\":\n case \"MemberExpression\":\n case \"NewExpression\":\n case \"ObjectExpression\":\n case \"SequenceExpression\":\n case \"ParenthesizedExpression\":\n case \"ThisExpression\":\n case \"UnaryExpression\":\n case \"UpdateExpression\":\n case \"ArrowFunctionExpression\":\n case \"ClassExpression\":\n case \"ImportExpression\":\n case \"MetaProperty\":\n case \"Super\":\n case \"TaggedTemplateExpression\":\n case \"TemplateLiteral\":\n case \"YieldExpression\":\n case \"AwaitExpression\":\n case \"Import\":\n case \"BigIntLiteral\":\n case \"OptionalMemberExpression\":\n case \"OptionalCallExpression\":\n case \"TypeCastExpression\":\n case \"JSXElement\":\n case \"JSXFragment\":\n case \"BindExpression\":\n case \"DoExpression\":\n case \"RecordExpression\":\n case \"TupleExpression\":\n case \"DecimalLiteral\":\n case \"ModuleExpression\":\n case \"TopicReference\":\n case \"PipelineTopicExpression\":\n case \"PipelineBareFunction\":\n case \"PipelinePrimaryTopicReference\":\n case \"TSInstantiationExpression\":\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSTypeAssertion\":\n case \"TSNonNullExpression\":\n break;\n case \"Placeholder\":\n switch (node.expectedNode) {\n case \"Expression\":\n case \"Identifier\":\n case \"StringLiteral\":\n break;\n default:\n return false;\n }\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBinary(node: t.Node | null | undefined): node is t.Binary;\nexport function isBinary<Opts extends Options<t.Binary>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Binary & Opts;\nexport function isBinary<Opts extends Options<t.Binary>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"BinaryExpression\":\n case \"LogicalExpression\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isScopable(node: t.Node | null | undefined): node is t.Scopable;\nexport function isScopable<Opts extends Options<t.Scopable>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Scopable & Opts;\nexport function isScopable<Opts extends Options<t.Scopable>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"BlockStatement\":\n case \"CatchClause\":\n case \"DoWhileStatement\":\n case \"ForInStatement\":\n case \"ForStatement\":\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"Program\":\n case \"ObjectMethod\":\n case \"SwitchStatement\":\n case \"WhileStatement\":\n case \"ArrowFunctionExpression\":\n case \"ClassExpression\":\n case \"ClassDeclaration\":\n case \"ForOfStatement\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n case \"StaticBlock\":\n case \"TSModuleBlock\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"BlockStatement\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBlockParent(\n node: t.Node | null | undefined,\n): node is t.BlockParent;\nexport function isBlockParent<Opts extends Options<t.BlockParent>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.BlockParent & Opts;\nexport function isBlockParent<Opts extends Options<t.BlockParent>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"BlockStatement\":\n case \"CatchClause\":\n case \"DoWhileStatement\":\n case \"ForInStatement\":\n case \"ForStatement\":\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"Program\":\n case \"ObjectMethod\":\n case \"SwitchStatement\":\n case \"WhileStatement\":\n case \"ArrowFunctionExpression\":\n case \"ForOfStatement\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n case \"StaticBlock\":\n case \"TSModuleBlock\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"BlockStatement\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isBlock(node: t.Node | null | undefined): node is t.Block;\nexport function isBlock<Opts extends Options<t.Block>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Block & Opts;\nexport function isBlock<Opts extends Options<t.Block>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"BlockStatement\":\n case \"Program\":\n case \"TSModuleBlock\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"BlockStatement\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isStatement(\n node: t.Node | null | undefined,\n): node is t.Statement;\nexport function isStatement<Opts extends Options<t.Statement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Statement & Opts;\nexport function isStatement<Opts extends Options<t.Statement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"BlockStatement\":\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"DebuggerStatement\":\n case \"DoWhileStatement\":\n case \"EmptyStatement\":\n case \"ExpressionStatement\":\n case \"ForInStatement\":\n case \"ForStatement\":\n case \"FunctionDeclaration\":\n case \"IfStatement\":\n case \"LabeledStatement\":\n case \"ReturnStatement\":\n case \"SwitchStatement\":\n case \"ThrowStatement\":\n case \"TryStatement\":\n case \"VariableDeclaration\":\n case \"WhileStatement\":\n case \"WithStatement\":\n case \"ClassDeclaration\":\n case \"ExportAllDeclaration\":\n case \"ExportDefaultDeclaration\":\n case \"ExportNamedDeclaration\":\n case \"ForOfStatement\":\n case \"ImportDeclaration\":\n case \"DeclareClass\":\n case \"DeclareFunction\":\n case \"DeclareInterface\":\n case \"DeclareModule\":\n case \"DeclareModuleExports\":\n case \"DeclareTypeAlias\":\n case \"DeclareOpaqueType\":\n case \"DeclareVariable\":\n case \"DeclareExportDeclaration\":\n case \"DeclareExportAllDeclaration\":\n case \"InterfaceDeclaration\":\n case \"OpaqueType\":\n case \"TypeAlias\":\n case \"EnumDeclaration\":\n case \"TSDeclareFunction\":\n case \"TSInterfaceDeclaration\":\n case \"TSTypeAliasDeclaration\":\n case \"TSEnumDeclaration\":\n case \"TSModuleDeclaration\":\n case \"TSImportEqualsDeclaration\":\n case \"TSExportAssignment\":\n case \"TSNamespaceExportDeclaration\":\n break;\n case \"Placeholder\":\n switch (node.expectedNode) {\n case \"Statement\":\n case \"Declaration\":\n case \"BlockStatement\":\n break;\n default:\n return false;\n }\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTerminatorless(\n node: t.Node | null | undefined,\n): node is t.Terminatorless;\nexport function isTerminatorless<Opts extends Options<t.Terminatorless>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Terminatorless & Opts;\nexport function isTerminatorless<Opts extends Options<t.Terminatorless>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n case \"YieldExpression\":\n case \"AwaitExpression\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isCompletionStatement(\n node: t.Node | null | undefined,\n): node is t.CompletionStatement;\nexport function isCompletionStatement<\n Opts extends Options<t.CompletionStatement>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.CompletionStatement & Opts;\nexport function isCompletionStatement<\n Opts extends Options<t.CompletionStatement>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"BreakStatement\":\n case \"ContinueStatement\":\n case \"ReturnStatement\":\n case \"ThrowStatement\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isConditional(\n node: t.Node | null | undefined,\n): node is t.Conditional;\nexport function isConditional<Opts extends Options<t.Conditional>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Conditional & Opts;\nexport function isConditional<Opts extends Options<t.Conditional>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ConditionalExpression\":\n case \"IfStatement\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isLoop(node: t.Node | null | undefined): node is t.Loop;\nexport function isLoop<Opts extends Options<t.Loop>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Loop & Opts;\nexport function isLoop<Opts extends Options<t.Loop>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"DoWhileStatement\":\n case \"ForInStatement\":\n case \"ForStatement\":\n case \"WhileStatement\":\n case \"ForOfStatement\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isWhile(node: t.Node | null | undefined): node is t.While;\nexport function isWhile<Opts extends Options<t.While>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.While & Opts;\nexport function isWhile<Opts extends Options<t.While>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"DoWhileStatement\":\n case \"WhileStatement\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExpressionWrapper(\n node: t.Node | null | undefined,\n): node is t.ExpressionWrapper;\nexport function isExpressionWrapper<Opts extends Options<t.ExpressionWrapper>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExpressionWrapper & Opts;\nexport function isExpressionWrapper<Opts extends Options<t.ExpressionWrapper>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ExpressionStatement\":\n case \"ParenthesizedExpression\":\n case \"TypeCastExpression\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFor(node: t.Node | null | undefined): node is t.For;\nexport function isFor<Opts extends Options<t.For>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.For & Opts;\nexport function isFor<Opts extends Options<t.For>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ForInStatement\":\n case \"ForStatement\":\n case \"ForOfStatement\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isForXStatement(\n node: t.Node | null | undefined,\n): node is t.ForXStatement;\nexport function isForXStatement<Opts extends Options<t.ForXStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ForXStatement & Opts;\nexport function isForXStatement<Opts extends Options<t.ForXStatement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ForInStatement\":\n case \"ForOfStatement\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFunction(node: t.Node | null | undefined): node is t.Function;\nexport function isFunction<Opts extends Options<t.Function>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Function & Opts;\nexport function isFunction<Opts extends Options<t.Function>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"ObjectMethod\":\n case \"ArrowFunctionExpression\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFunctionParent(\n node: t.Node | null | undefined,\n): node is t.FunctionParent;\nexport function isFunctionParent<Opts extends Options<t.FunctionParent>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FunctionParent & Opts;\nexport function isFunctionParent<Opts extends Options<t.FunctionParent>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"ObjectMethod\":\n case \"ArrowFunctionExpression\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n case \"StaticBlock\":\n case \"TSModuleBlock\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPureish(node: t.Node | null | undefined): node is t.Pureish;\nexport function isPureish<Opts extends Options<t.Pureish>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Pureish & Opts;\nexport function isPureish<Opts extends Options<t.Pureish>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"StringLiteral\":\n case \"NumericLiteral\":\n case \"NullLiteral\":\n case \"BooleanLiteral\":\n case \"RegExpLiteral\":\n case \"ArrowFunctionExpression\":\n case \"BigIntLiteral\":\n case \"DecimalLiteral\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"StringLiteral\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isDeclaration(\n node: t.Node | null | undefined,\n): node is t.Declaration;\nexport function isDeclaration<Opts extends Options<t.Declaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Declaration & Opts;\nexport function isDeclaration<Opts extends Options<t.Declaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"FunctionDeclaration\":\n case \"VariableDeclaration\":\n case \"ClassDeclaration\":\n case \"ExportAllDeclaration\":\n case \"ExportDefaultDeclaration\":\n case \"ExportNamedDeclaration\":\n case \"ImportDeclaration\":\n case \"DeclareClass\":\n case \"DeclareFunction\":\n case \"DeclareInterface\":\n case \"DeclareModule\":\n case \"DeclareModuleExports\":\n case \"DeclareTypeAlias\":\n case \"DeclareOpaqueType\":\n case \"DeclareVariable\":\n case \"DeclareExportDeclaration\":\n case \"DeclareExportAllDeclaration\":\n case \"InterfaceDeclaration\":\n case \"OpaqueType\":\n case \"TypeAlias\":\n case \"EnumDeclaration\":\n case \"TSDeclareFunction\":\n case \"TSInterfaceDeclaration\":\n case \"TSTypeAliasDeclaration\":\n case \"TSEnumDeclaration\":\n case \"TSModuleDeclaration\":\n case \"TSImportEqualsDeclaration\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"Declaration\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFunctionParameter(\n node: t.Node | null | undefined,\n): node is t.FunctionParameter;\nexport function isFunctionParameter<Opts extends Options<t.FunctionParameter>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FunctionParameter & Opts;\nexport function isFunctionParameter<Opts extends Options<t.FunctionParameter>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"Identifier\":\n case \"RestElement\":\n case \"AssignmentPattern\":\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n case \"VoidPattern\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"Identifier\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPatternLike(\n node: t.Node | null | undefined,\n): node is t.PatternLike;\nexport function isPatternLike<Opts extends Options<t.PatternLike>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.PatternLike & Opts;\nexport function isPatternLike<Opts extends Options<t.PatternLike>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"Identifier\":\n case \"MemberExpression\":\n case \"RestElement\":\n case \"AssignmentPattern\":\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n case \"VoidPattern\":\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSTypeAssertion\":\n case \"TSNonNullExpression\":\n break;\n case \"Placeholder\":\n switch (node.expectedNode) {\n case \"Pattern\":\n case \"Identifier\":\n break;\n default:\n return false;\n }\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isLVal(node: t.Node | null | undefined): node is t.LVal;\nexport function isLVal<Opts extends Options<t.LVal>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.LVal & Opts;\nexport function isLVal<Opts extends Options<t.LVal>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"Identifier\":\n case \"MemberExpression\":\n case \"RestElement\":\n case \"AssignmentPattern\":\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n case \"TSParameterProperty\":\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSTypeAssertion\":\n case \"TSNonNullExpression\":\n break;\n case \"Placeholder\":\n switch (node.expectedNode) {\n case \"Pattern\":\n case \"Identifier\":\n break;\n default:\n return false;\n }\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSEntityName(\n node: t.Node | null | undefined,\n): node is t.TSEntityName;\nexport function isTSEntityName<Opts extends Options<t.TSEntityName>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSEntityName & Opts;\nexport function isTSEntityName<Opts extends Options<t.TSEntityName>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"Identifier\":\n case \"TSQualifiedName\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"Identifier\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isLiteral(node: t.Node | null | undefined): node is t.Literal;\nexport function isLiteral<Opts extends Options<t.Literal>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Literal & Opts;\nexport function isLiteral<Opts extends Options<t.Literal>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"StringLiteral\":\n case \"NumericLiteral\":\n case \"NullLiteral\":\n case \"BooleanLiteral\":\n case \"RegExpLiteral\":\n case \"TemplateLiteral\":\n case \"BigIntLiteral\":\n case \"DecimalLiteral\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"StringLiteral\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImmutable(\n node: t.Node | null | undefined,\n): node is t.Immutable;\nexport function isImmutable<Opts extends Options<t.Immutable>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Immutable & Opts;\nexport function isImmutable<Opts extends Options<t.Immutable>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"StringLiteral\":\n case \"NumericLiteral\":\n case \"NullLiteral\":\n case \"BooleanLiteral\":\n case \"BigIntLiteral\":\n case \"JSXAttribute\":\n case \"JSXClosingElement\":\n case \"JSXElement\":\n case \"JSXExpressionContainer\":\n case \"JSXSpreadChild\":\n case \"JSXOpeningElement\":\n case \"JSXText\":\n case \"JSXFragment\":\n case \"JSXOpeningFragment\":\n case \"JSXClosingFragment\":\n case \"DecimalLiteral\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"StringLiteral\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isUserWhitespacable(\n node: t.Node | null | undefined,\n): node is t.UserWhitespacable;\nexport function isUserWhitespacable<Opts extends Options<t.UserWhitespacable>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.UserWhitespacable & Opts;\nexport function isUserWhitespacable<Opts extends Options<t.UserWhitespacable>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ObjectMethod\":\n case \"ObjectProperty\":\n case \"ObjectTypeInternalSlot\":\n case \"ObjectTypeCallProperty\":\n case \"ObjectTypeIndexer\":\n case \"ObjectTypeProperty\":\n case \"ObjectTypeSpreadProperty\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isMethod(node: t.Node | null | undefined): node is t.Method;\nexport function isMethod<Opts extends Options<t.Method>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Method & Opts;\nexport function isMethod<Opts extends Options<t.Method>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ObjectMethod\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isObjectMember(\n node: t.Node | null | undefined,\n): node is t.ObjectMember;\nexport function isObjectMember<Opts extends Options<t.ObjectMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ObjectMember & Opts;\nexport function isObjectMember<Opts extends Options<t.ObjectMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ObjectMethod\":\n case \"ObjectProperty\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isProperty(node: t.Node | null | undefined): node is t.Property;\nexport function isProperty<Opts extends Options<t.Property>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Property & Opts;\nexport function isProperty<Opts extends Options<t.Property>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ObjectProperty\":\n case \"ClassProperty\":\n case \"ClassAccessorProperty\":\n case \"ClassPrivateProperty\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isUnaryLike(\n node: t.Node | null | undefined,\n): node is t.UnaryLike;\nexport function isUnaryLike<Opts extends Options<t.UnaryLike>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.UnaryLike & Opts;\nexport function isUnaryLike<Opts extends Options<t.UnaryLike>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"UnaryExpression\":\n case \"SpreadElement\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPattern(node: t.Node | null | undefined): node is t.Pattern;\nexport function isPattern<Opts extends Options<t.Pattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Pattern & Opts;\nexport function isPattern<Opts extends Options<t.Pattern>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"AssignmentPattern\":\n case \"ArrayPattern\":\n case \"ObjectPattern\":\n case \"VoidPattern\":\n break;\n case \"Placeholder\":\n if (node.expectedNode === \"Pattern\") break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isClass(node: t.Node | null | undefined): node is t.Class;\nexport function isClass<Opts extends Options<t.Class>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Class & Opts;\nexport function isClass<Opts extends Options<t.Class>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ClassExpression\":\n case \"ClassDeclaration\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isImportOrExportDeclaration(\n node: t.Node | null | undefined,\n): node is t.ImportOrExportDeclaration;\nexport function isImportOrExportDeclaration<\n Opts extends Options<t.ImportOrExportDeclaration>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ImportOrExportDeclaration & Opts;\nexport function isImportOrExportDeclaration<\n Opts extends Options<t.ImportOrExportDeclaration>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ExportAllDeclaration\":\n case \"ExportDefaultDeclaration\":\n case \"ExportNamedDeclaration\":\n case \"ImportDeclaration\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isExportDeclaration(\n node: t.Node | null | undefined,\n): node is t.ExportDeclaration;\nexport function isExportDeclaration<Opts extends Options<t.ExportDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ExportDeclaration & Opts;\nexport function isExportDeclaration<Opts extends Options<t.ExportDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ExportAllDeclaration\":\n case \"ExportDefaultDeclaration\":\n case \"ExportNamedDeclaration\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isModuleSpecifier(\n node: t.Node | null | undefined,\n): node is t.ModuleSpecifier;\nexport function isModuleSpecifier<Opts extends Options<t.ModuleSpecifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ModuleSpecifier & Opts;\nexport function isModuleSpecifier<Opts extends Options<t.ModuleSpecifier>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ExportSpecifier\":\n case \"ImportDefaultSpecifier\":\n case \"ImportNamespaceSpecifier\":\n case \"ImportSpecifier\":\n case \"ExportNamespaceSpecifier\":\n case \"ExportDefaultSpecifier\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isAccessor(node: t.Node | null | undefined): node is t.Accessor;\nexport function isAccessor<Opts extends Options<t.Accessor>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Accessor & Opts;\nexport function isAccessor<Opts extends Options<t.Accessor>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ClassAccessorProperty\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isPrivate(node: t.Node | null | undefined): node is t.Private;\nexport function isPrivate<Opts extends Options<t.Private>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Private & Opts;\nexport function isPrivate<Opts extends Options<t.Private>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"ClassPrivateProperty\":\n case \"ClassPrivateMethod\":\n case \"PrivateName\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFlow(node: t.Node | null | undefined): node is t.Flow;\nexport function isFlow<Opts extends Options<t.Flow>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Flow & Opts;\nexport function isFlow<Opts extends Options<t.Flow>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"AnyTypeAnnotation\":\n case \"ArrayTypeAnnotation\":\n case \"BooleanTypeAnnotation\":\n case \"BooleanLiteralTypeAnnotation\":\n case \"NullLiteralTypeAnnotation\":\n case \"ClassImplements\":\n case \"DeclareClass\":\n case \"DeclareFunction\":\n case \"DeclareInterface\":\n case \"DeclareModule\":\n case \"DeclareModuleExports\":\n case \"DeclareTypeAlias\":\n case \"DeclareOpaqueType\":\n case \"DeclareVariable\":\n case \"DeclareExportDeclaration\":\n case \"DeclareExportAllDeclaration\":\n case \"DeclaredPredicate\":\n case \"ExistsTypeAnnotation\":\n case \"FunctionTypeAnnotation\":\n case \"FunctionTypeParam\":\n case \"GenericTypeAnnotation\":\n case \"InferredPredicate\":\n case \"InterfaceExtends\":\n case \"InterfaceDeclaration\":\n case \"InterfaceTypeAnnotation\":\n case \"IntersectionTypeAnnotation\":\n case \"MixedTypeAnnotation\":\n case \"EmptyTypeAnnotation\":\n case \"NullableTypeAnnotation\":\n case \"NumberLiteralTypeAnnotation\":\n case \"NumberTypeAnnotation\":\n case \"ObjectTypeAnnotation\":\n case \"ObjectTypeInternalSlot\":\n case \"ObjectTypeCallProperty\":\n case \"ObjectTypeIndexer\":\n case \"ObjectTypeProperty\":\n case \"ObjectTypeSpreadProperty\":\n case \"OpaqueType\":\n case \"QualifiedTypeIdentifier\":\n case \"StringLiteralTypeAnnotation\":\n case \"StringTypeAnnotation\":\n case \"SymbolTypeAnnotation\":\n case \"ThisTypeAnnotation\":\n case \"TupleTypeAnnotation\":\n case \"TypeofTypeAnnotation\":\n case \"TypeAlias\":\n case \"TypeAnnotation\":\n case \"TypeCastExpression\":\n case \"TypeParameter\":\n case \"TypeParameterDeclaration\":\n case \"TypeParameterInstantiation\":\n case \"UnionTypeAnnotation\":\n case \"Variance\":\n case \"VoidTypeAnnotation\":\n case \"EnumDeclaration\":\n case \"EnumBooleanBody\":\n case \"EnumNumberBody\":\n case \"EnumStringBody\":\n case \"EnumSymbolBody\":\n case \"EnumBooleanMember\":\n case \"EnumNumberMember\":\n case \"EnumStringMember\":\n case \"EnumDefaultedMember\":\n case \"IndexedAccessType\":\n case \"OptionalIndexedAccessType\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFlowType(node: t.Node | null | undefined): node is t.FlowType;\nexport function isFlowType<Opts extends Options<t.FlowType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FlowType & Opts;\nexport function isFlowType<Opts extends Options<t.FlowType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"AnyTypeAnnotation\":\n case \"ArrayTypeAnnotation\":\n case \"BooleanTypeAnnotation\":\n case \"BooleanLiteralTypeAnnotation\":\n case \"NullLiteralTypeAnnotation\":\n case \"ExistsTypeAnnotation\":\n case \"FunctionTypeAnnotation\":\n case \"GenericTypeAnnotation\":\n case \"InterfaceTypeAnnotation\":\n case \"IntersectionTypeAnnotation\":\n case \"MixedTypeAnnotation\":\n case \"EmptyTypeAnnotation\":\n case \"NullableTypeAnnotation\":\n case \"NumberLiteralTypeAnnotation\":\n case \"NumberTypeAnnotation\":\n case \"ObjectTypeAnnotation\":\n case \"StringLiteralTypeAnnotation\":\n case \"StringTypeAnnotation\":\n case \"SymbolTypeAnnotation\":\n case \"ThisTypeAnnotation\":\n case \"TupleTypeAnnotation\":\n case \"TypeofTypeAnnotation\":\n case \"UnionTypeAnnotation\":\n case \"VoidTypeAnnotation\":\n case \"IndexedAccessType\":\n case \"OptionalIndexedAccessType\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFlowBaseAnnotation(\n node: t.Node | null | undefined,\n): node is t.FlowBaseAnnotation;\nexport function isFlowBaseAnnotation<\n Opts extends Options<t.FlowBaseAnnotation>,\n>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FlowBaseAnnotation & Opts;\nexport function isFlowBaseAnnotation<\n Opts extends Options<t.FlowBaseAnnotation>,\n>(node: t.Node | null | undefined, opts?: Opts | null): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"AnyTypeAnnotation\":\n case \"BooleanTypeAnnotation\":\n case \"NullLiteralTypeAnnotation\":\n case \"MixedTypeAnnotation\":\n case \"EmptyTypeAnnotation\":\n case \"NumberTypeAnnotation\":\n case \"StringTypeAnnotation\":\n case \"SymbolTypeAnnotation\":\n case \"ThisTypeAnnotation\":\n case \"VoidTypeAnnotation\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFlowDeclaration(\n node: t.Node | null | undefined,\n): node is t.FlowDeclaration;\nexport function isFlowDeclaration<Opts extends Options<t.FlowDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FlowDeclaration & Opts;\nexport function isFlowDeclaration<Opts extends Options<t.FlowDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"DeclareClass\":\n case \"DeclareFunction\":\n case \"DeclareInterface\":\n case \"DeclareModule\":\n case \"DeclareModuleExports\":\n case \"DeclareTypeAlias\":\n case \"DeclareOpaqueType\":\n case \"DeclareVariable\":\n case \"DeclareExportDeclaration\":\n case \"DeclareExportAllDeclaration\":\n case \"InterfaceDeclaration\":\n case \"OpaqueType\":\n case \"TypeAlias\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isFlowPredicate(\n node: t.Node | null | undefined,\n): node is t.FlowPredicate;\nexport function isFlowPredicate<Opts extends Options<t.FlowPredicate>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.FlowPredicate & Opts;\nexport function isFlowPredicate<Opts extends Options<t.FlowPredicate>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"DeclaredPredicate\":\n case \"InferredPredicate\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumBody(node: t.Node | null | undefined): node is t.EnumBody;\nexport function isEnumBody<Opts extends Options<t.EnumBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumBody & Opts;\nexport function isEnumBody<Opts extends Options<t.EnumBody>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"EnumBooleanBody\":\n case \"EnumNumberBody\":\n case \"EnumStringBody\":\n case \"EnumSymbolBody\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isEnumMember(\n node: t.Node | null | undefined,\n): node is t.EnumMember;\nexport function isEnumMember<Opts extends Options<t.EnumMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.EnumMember & Opts;\nexport function isEnumMember<Opts extends Options<t.EnumMember>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"EnumBooleanMember\":\n case \"EnumNumberMember\":\n case \"EnumStringMember\":\n case \"EnumDefaultedMember\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isJSX(node: t.Node | null | undefined): node is t.JSX;\nexport function isJSX<Opts extends Options<t.JSX>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.JSX & Opts;\nexport function isJSX<Opts extends Options<t.JSX>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"JSXAttribute\":\n case \"JSXClosingElement\":\n case \"JSXElement\":\n case \"JSXEmptyExpression\":\n case \"JSXExpressionContainer\":\n case \"JSXSpreadChild\":\n case \"JSXIdentifier\":\n case \"JSXMemberExpression\":\n case \"JSXNamespacedName\":\n case \"JSXOpeningElement\":\n case \"JSXSpreadAttribute\":\n case \"JSXText\":\n case \"JSXFragment\":\n case \"JSXOpeningFragment\":\n case \"JSXClosingFragment\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isMiscellaneous(\n node: t.Node | null | undefined,\n): node is t.Miscellaneous;\nexport function isMiscellaneous<Opts extends Options<t.Miscellaneous>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.Miscellaneous & Opts;\nexport function isMiscellaneous<Opts extends Options<t.Miscellaneous>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"Noop\":\n case \"Placeholder\":\n case \"V8IntrinsicIdentifier\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTypeScript(\n node: t.Node | null | undefined,\n): node is t.TypeScript;\nexport function isTypeScript<Opts extends Options<t.TypeScript>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TypeScript & Opts;\nexport function isTypeScript<Opts extends Options<t.TypeScript>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"TSParameterProperty\":\n case \"TSDeclareFunction\":\n case \"TSDeclareMethod\":\n case \"TSQualifiedName\":\n case \"TSCallSignatureDeclaration\":\n case \"TSConstructSignatureDeclaration\":\n case \"TSPropertySignature\":\n case \"TSMethodSignature\":\n case \"TSIndexSignature\":\n case \"TSAnyKeyword\":\n case \"TSBooleanKeyword\":\n case \"TSBigIntKeyword\":\n case \"TSIntrinsicKeyword\":\n case \"TSNeverKeyword\":\n case \"TSNullKeyword\":\n case \"TSNumberKeyword\":\n case \"TSObjectKeyword\":\n case \"TSStringKeyword\":\n case \"TSSymbolKeyword\":\n case \"TSUndefinedKeyword\":\n case \"TSUnknownKeyword\":\n case \"TSVoidKeyword\":\n case \"TSThisType\":\n case \"TSFunctionType\":\n case \"TSConstructorType\":\n case \"TSTypeReference\":\n case \"TSTypePredicate\":\n case \"TSTypeQuery\":\n case \"TSTypeLiteral\":\n case \"TSArrayType\":\n case \"TSTupleType\":\n case \"TSOptionalType\":\n case \"TSRestType\":\n case \"TSNamedTupleMember\":\n case \"TSUnionType\":\n case \"TSIntersectionType\":\n case \"TSConditionalType\":\n case \"TSInferType\":\n case \"TSParenthesizedType\":\n case \"TSTypeOperator\":\n case \"TSIndexedAccessType\":\n case \"TSMappedType\":\n case \"TSTemplateLiteralType\":\n case \"TSLiteralType\":\n case \"TSExpressionWithTypeArguments\":\n case \"TSInterfaceDeclaration\":\n case \"TSInterfaceBody\":\n case \"TSTypeAliasDeclaration\":\n case \"TSInstantiationExpression\":\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSTypeAssertion\":\n case \"TSEnumBody\":\n case \"TSEnumDeclaration\":\n case \"TSEnumMember\":\n case \"TSModuleDeclaration\":\n case \"TSModuleBlock\":\n case \"TSImportType\":\n case \"TSImportEqualsDeclaration\":\n case \"TSExternalModuleReference\":\n case \"TSNonNullExpression\":\n case \"TSExportAssignment\":\n case \"TSNamespaceExportDeclaration\":\n case \"TSTypeAnnotation\":\n case \"TSTypeParameterInstantiation\":\n case \"TSTypeParameterDeclaration\":\n case \"TSTypeParameter\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSTypeElement(\n node: t.Node | null | undefined,\n): node is t.TSTypeElement;\nexport function isTSTypeElement<Opts extends Options<t.TSTypeElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSTypeElement & Opts;\nexport function isTSTypeElement<Opts extends Options<t.TSTypeElement>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"TSCallSignatureDeclaration\":\n case \"TSConstructSignatureDeclaration\":\n case \"TSPropertySignature\":\n case \"TSMethodSignature\":\n case \"TSIndexSignature\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSType(node: t.Node | null | undefined): node is t.TSType;\nexport function isTSType<Opts extends Options<t.TSType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSType & Opts;\nexport function isTSType<Opts extends Options<t.TSType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"TSAnyKeyword\":\n case \"TSBooleanKeyword\":\n case \"TSBigIntKeyword\":\n case \"TSIntrinsicKeyword\":\n case \"TSNeverKeyword\":\n case \"TSNullKeyword\":\n case \"TSNumberKeyword\":\n case \"TSObjectKeyword\":\n case \"TSStringKeyword\":\n case \"TSSymbolKeyword\":\n case \"TSUndefinedKeyword\":\n case \"TSUnknownKeyword\":\n case \"TSVoidKeyword\":\n case \"TSThisType\":\n case \"TSFunctionType\":\n case \"TSConstructorType\":\n case \"TSTypeReference\":\n case \"TSTypePredicate\":\n case \"TSTypeQuery\":\n case \"TSTypeLiteral\":\n case \"TSArrayType\":\n case \"TSTupleType\":\n case \"TSOptionalType\":\n case \"TSRestType\":\n case \"TSUnionType\":\n case \"TSIntersectionType\":\n case \"TSConditionalType\":\n case \"TSInferType\":\n case \"TSParenthesizedType\":\n case \"TSTypeOperator\":\n case \"TSIndexedAccessType\":\n case \"TSMappedType\":\n case \"TSTemplateLiteralType\":\n case \"TSLiteralType\":\n case \"TSExpressionWithTypeArguments\":\n case \"TSImportType\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\nexport function isTSBaseType(\n node: t.Node | null | undefined,\n): node is t.TSBaseType;\nexport function isTSBaseType<Opts extends Options<t.TSBaseType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.TSBaseType & Opts;\nexport function isTSBaseType<Opts extends Options<t.TSBaseType>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n if (!node) return false;\n\n switch (node.type) {\n case \"TSAnyKeyword\":\n case \"TSBooleanKeyword\":\n case \"TSBigIntKeyword\":\n case \"TSIntrinsicKeyword\":\n case \"TSNeverKeyword\":\n case \"TSNullKeyword\":\n case \"TSNumberKeyword\":\n case \"TSObjectKeyword\":\n case \"TSStringKeyword\":\n case \"TSSymbolKeyword\":\n case \"TSUndefinedKeyword\":\n case \"TSUnknownKeyword\":\n case \"TSVoidKeyword\":\n case \"TSThisType\":\n case \"TSTemplateLiteralType\":\n case \"TSLiteralType\":\n break;\n default:\n return false;\n }\n\n return opts == null || shallowEqual(node, opts);\n}\n/**\n * @deprecated Use `isNumericLiteral`\n */\nexport function isNumberLiteral(node: t.Node | null | undefined): boolean;\nexport function isNumberLiteral<Opts extends Options<t.NumberLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean;\nexport function isNumberLiteral<Opts extends Options<t.NumberLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n deprecationWarning(\"isNumberLiteral\", \"isNumericLiteral\");\n if (!node) return false;\n\n if (node.type !== \"NumberLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\n/**\n * @deprecated Use `isRegExpLiteral`\n */\nexport function isRegexLiteral(node: t.Node | null | undefined): boolean;\nexport function isRegexLiteral<Opts extends Options<t.RegexLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean;\nexport function isRegexLiteral<Opts extends Options<t.RegexLiteral>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n deprecationWarning(\"isRegexLiteral\", \"isRegExpLiteral\");\n if (!node) return false;\n\n if (node.type !== \"RegexLiteral\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\n/**\n * @deprecated Use `isRestElement`\n */\nexport function isRestProperty(node: t.Node | null | undefined): boolean;\nexport function isRestProperty<Opts extends Options<t.RestProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean;\nexport function isRestProperty<Opts extends Options<t.RestProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n deprecationWarning(\"isRestProperty\", \"isRestElement\");\n if (!node) return false;\n\n if (node.type !== \"RestProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\n/**\n * @deprecated Use `isSpreadElement`\n */\nexport function isSpreadProperty(node: t.Node | null | undefined): boolean;\nexport function isSpreadProperty<Opts extends Options<t.SpreadProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean;\nexport function isSpreadProperty<Opts extends Options<t.SpreadProperty>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): boolean {\n deprecationWarning(\"isSpreadProperty\", \"isSpreadElement\");\n if (!node) return false;\n\n if (node.type !== \"SpreadProperty\") return false;\n\n return opts == null || shallowEqual(node, opts);\n}\n/**\n * @deprecated Use `isImportOrExportDeclaration`\n */\nexport function isModuleDeclaration<Opts extends Options<t.ModuleDeclaration>>(\n node: t.Node | null | undefined,\n opts?: Opts | null,\n): node is t.ImportOrExportDeclaration & Opts {\n deprecationWarning(\"isModuleDeclaration\", \"isImportOrExportDeclaration\");\n return isImportOrExportDeclaration(node, opts);\n}\n","import {\n isIdentifier,\n isMetaProperty,\n isMemberExpression,\n isPrivateName,\n isStringLiteral,\n isSuper,\n isThisExpression,\n} from \"./generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nfunction isMemberExpressionLike(\n node: t.Node,\n): node is t.MemberExpression | t.MetaProperty {\n return isMemberExpression(node) || isMetaProperty(node);\n}\n\n/**\n * Determines whether or not the input node `member` matches the\n * input `match`.\n *\n * For example, given the match `React.createClass` it would match the\n * parsed nodes of `React.createClass` and `React[\"createClass\"]`.\n */\nexport default function matchesPattern(\n member: t.Node | null | undefined,\n match: string | string[],\n allowPartial?: boolean,\n): boolean {\n // not a member expression\n if (!isMemberExpressionLike(member)) return false;\n\n const parts = Array.isArray(match) ? match : match.split(\".\");\n const nodes = [];\n\n let node;\n for (\n node = member;\n isMemberExpressionLike(node);\n node = (node as t.MemberExpression).object ?? (node as t.MetaProperty).meta\n ) {\n nodes.push(node.property);\n }\n nodes.push(node);\n\n if (nodes.length < parts.length) return false;\n if (!allowPartial && nodes.length > parts.length) return false;\n\n for (let i = 0, j = nodes.length - 1; i < parts.length; i++, j--) {\n const node = nodes[j];\n let value;\n if (isIdentifier(node)) {\n value = node.name;\n } else if (isStringLiteral(node)) {\n value = node.value;\n } else if (isThisExpression(node)) {\n value = \"this\";\n } else if (isSuper(node)) {\n value = \"super\";\n } else if (isPrivateName(node)) {\n value = \"#\" + node.id.name;\n } else {\n return false;\n }\n\n if (parts[i] !== value) return false;\n }\n\n return true;\n}\n","import matchesPattern from \"./matchesPattern.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Build a function that when called will return whether or not the\n * input `node` `MemberExpression` matches the input `match`.\n *\n * For example, given the match `React.createClass` it would match the\n * parsed nodes of `React.createClass` and `React[\"createClass\"]`.\n */\nexport default function buildMatchMemberExpression(\n match: string,\n allowPartial?: boolean,\n) {\n const parts = match.split(\".\");\n\n return (member: t.Node) => matchesPattern(member, parts, allowPartial);\n}\n","import buildMatchMemberExpression from \"../buildMatchMemberExpression.ts\";\n\nconst isReactComponent = buildMatchMemberExpression(\"React.Component\");\n\nexport default isReactComponent;\n","export default function isCompatTag(tagName?: string): boolean {\n // Must start with a lowercase ASCII letter\n return !!tagName && /^[a-z]/.test(tagName);\n}\n","import { FLIPPED_ALIAS_KEYS, ALIAS_KEYS } from \"../definitions/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function isType<T extends t.Node[\"type\"]>(\n nodeType: string,\n targetType: T,\n): nodeType is T;\n\nexport default function isType(\n nodeType: string | null | undefined,\n targetType: string,\n): boolean;\n\n/**\n * Test if a `nodeType` is a `targetType` or if `targetType` is an alias of `nodeType`.\n */\nexport default function isType(nodeType: string, targetType: string): boolean {\n if (nodeType === targetType) return true;\n\n // If nodeType is nullish, it can't be an alias of targetType.\n if (nodeType == null) return false;\n\n // This is a fast-path. If the test above failed, but an alias key is found, then the\n // targetType was a primary node type, so there's no need to check the aliases.\n // @ts-expect-error targetType may not index ALIAS_KEYS\n if (ALIAS_KEYS[targetType]) return false;\n\n const aliases: string[] | undefined = FLIPPED_ALIAS_KEYS[targetType];\n if (aliases?.includes(nodeType)) return true;\n\n return false;\n}\n","import { PLACEHOLDERS_ALIAS } from \"../definitions/index.ts\";\n\n/**\n * Test if a `placeholderType` is a `targetType` or if `targetType` is an alias of `placeholderType`.\n */\nexport default function isPlaceholderType(\n placeholderType: string,\n targetType: string,\n): boolean {\n if (placeholderType === targetType) return true;\n\n const aliases: string[] | undefined = PLACEHOLDERS_ALIAS[placeholderType];\n if (aliases?.includes(targetType)) return true;\n\n return false;\n}\n","import shallowEqual from \"../utils/shallowEqual.ts\";\nimport isType from \"./isType.ts\";\nimport isPlaceholderType from \"./isPlaceholderType.ts\";\nimport { FLIPPED_ALIAS_KEYS } from \"../definitions/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function is<T extends t.Node[\"type\"]>(\n type: T,\n node: t.Node | null | undefined,\n opts?: undefined,\n): node is Extract<t.Node, { type: T }>;\n\nexport default function is<\n T extends t.Node[\"type\"],\n P extends Extract<t.Node, { type: T }>,\n>(type: T, n: t.Node | null | undefined, required: Partial<P>): n is P;\n\nexport default function is<P extends t.Node>(\n type: string,\n node: t.Node | null | undefined,\n opts: Partial<P>,\n): node is P;\n\nexport default function is(\n type: string,\n node: t.Node | null | undefined,\n opts?: Partial<t.Node>,\n): node is t.Node;\n/**\n * Returns whether `node` is of given `type`.\n *\n * For better performance, use this instead of `is[Type]` when `type` is unknown.\n */\nexport default function is(\n type: string,\n node: t.Node | null | undefined,\n opts?: Partial<t.Node>,\n): node is t.Node {\n if (!node) return false;\n\n const matches = isType(node.type, type);\n if (!matches) {\n if (!opts && node.type === \"Placeholder\" && type in FLIPPED_ALIAS_KEYS) {\n // We can only return true if the placeholder doesn't replace a real node,\n // but it replaces a category of nodes (an alias).\n //\n // t.is(\"Identifier\", node) gives some guarantees about node's shape, so we\n // can't say that Placeholder(expectedNode: \"Identifier\") is an identifier\n // because it doesn't have the same properties.\n // On the other hand, t.is(\"Expression\", node) doesn't say anything about\n // the shape of node because Expression can be many different nodes: we can,\n // and should, safely report expression placeholders as Expressions.\n return isPlaceholderType(node.expectedNode, type);\n }\n return false;\n }\n\n if (opts === undefined) {\n return true;\n } else {\n return shallowEqual(node, opts);\n }\n}\n","// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.cjs`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088f\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5c\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdc-\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7dc\\ua7f1-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1add\\u1ae0-\\u1aeb\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.cjs`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,4,51,13,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,7,25,39,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,39,27,10,22,251,41,7,1,17,5,57,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,31,9,2,0,3,0,2,37,2,0,26,0,2,0,45,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,200,32,32,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,24,43,261,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,26,3994,6,582,6842,29,1763,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,433,44,212,63,33,24,3,24,45,74,6,0,67,12,65,1,2,0,15,4,10,7381,42,31,98,114,8702,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,229,29,3,0,208,30,2,2,2,1,2,6,3,4,10,1,225,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4381,3,5773,3,7472,16,621,2467,541,1507,4938,6,8489];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,7,9,32,4,318,1,78,5,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,68,8,2,0,3,0,2,3,2,4,2,0,15,1,83,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,7,19,58,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,199,7,137,9,54,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,55,9,266,3,10,1,2,0,49,6,4,4,14,10,5350,0,7,14,11465,27,2343,9,87,9,39,4,60,6,26,9,535,9,470,0,2,54,8,3,82,0,12,1,19628,1,4178,9,519,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,245,1,2,9,233,0,3,0,8,1,6,0,475,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n let pos = 0x10000;\n for (let i = 0, length = set.length; i < length; i += 2) {\n pos += set[i];\n if (pos > code) return false;\n\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return (\n code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n );\n }\n return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n if (code < charCodes.digit0) return code === charCodes.dollarSign;\n if (code < charCodes.colon) return true;\n if (code < charCodes.uppercaseA) return false;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n }\n return (\n isInAstralSet(code, astralIdentifierStartCodes) ||\n isInAstralSet(code, astralIdentifierCodes)\n );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n let isFirst = true;\n for (let i = 0; i < name.length; i++) {\n // The implementation is based on\n // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n let cp = name.charCodeAt(i);\n if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n const trail = name.charCodeAt(++i);\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n if (isFirst) {\n isFirst = false;\n if (!isIdentifierStart(cp)) {\n return false;\n }\n } else if (!isIdentifierChar(cp)) {\n return false;\n }\n }\n return !isFirst;\n}\n","const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n","export {\n isIdentifierName,\n isIdentifierChar,\n isIdentifierStart,\n} from \"./identifier.ts\";\nexport {\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"./keyword.ts\";\n","import {\n isIdentifierName,\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\n/**\n * Check if the input `name` is a valid identifier name\n * and isn't a reserved word.\n */\nexport default function isValidIdentifier(\n name: string,\n reserved: boolean = true,\n): boolean {\n if (typeof name !== \"string\") return false;\n\n if (reserved) {\n // \"await\" is invalid in module, valid in script; better be safe (see #4952)\n if (isKeyword(name) || isStrictReservedWord(name, true)) {\n return false;\n }\n }\n\n return isIdentifierName(name);\n}\n","// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n decBinOct: new Set<number>([\n charCodes.dot,\n charCodes.uppercaseB,\n charCodes.uppercaseE,\n charCodes.uppercaseO,\n charCodes.underscore, // multiple separators are not allowed\n charCodes.lowercaseB,\n charCodes.lowercaseE,\n charCodes.lowercaseO,\n ]),\n hex: new Set<number>([\n charCodes.dot,\n charCodes.uppercaseX,\n charCodes.underscore, // multiple separators are not allowed\n charCodes.lowercaseX,\n ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n // 0 - 1\n bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n // 0 - 7\n oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n // 0 - 9\n dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n // 0 - 9, A - F, a - f,\n hex: (ch: number) =>\n (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n unterminated(\n initialPos: number,\n initialLineStart: number,\n initialCurLine: number,\n ): void;\n};\n\nexport function readStringContents(\n type: \"single\" | \"double\" | \"template\",\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n errors: StringContentsErrorHandlers,\n) {\n const initialPos = pos;\n const initialLineStart = lineStart;\n const initialCurLine = curLine;\n\n let out = \"\";\n let firstInvalidLoc = null;\n let chunkStart = pos;\n const { length } = input;\n for (;;) {\n if (pos >= length) {\n errors.unterminated(initialPos, initialLineStart, initialCurLine);\n out += input.slice(chunkStart, pos);\n break;\n }\n const ch = input.charCodeAt(pos);\n if (isStringEnd(type, ch, input, pos)) {\n out += input.slice(chunkStart, pos);\n break;\n }\n if (ch === charCodes.backslash) {\n out += input.slice(chunkStart, pos);\n const res = readEscapedChar(\n input,\n pos,\n lineStart,\n curLine,\n type === \"template\",\n errors,\n );\n if (res.ch === null && !firstInvalidLoc) {\n firstInvalidLoc = { pos, lineStart, curLine };\n } else {\n out += res.ch;\n }\n ({ pos, lineStart, curLine } = res);\n chunkStart = pos;\n } else if (\n ch === charCodes.lineSeparator ||\n ch === charCodes.paragraphSeparator\n ) {\n ++pos;\n ++curLine;\n lineStart = pos;\n } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n if (type === \"template\") {\n out += input.slice(chunkStart, pos) + \"\\n\";\n ++pos;\n if (\n ch === charCodes.carriageReturn &&\n input.charCodeAt(pos) === charCodes.lineFeed\n ) {\n ++pos;\n }\n ++curLine;\n chunkStart = lineStart = pos;\n } else {\n errors.unterminated(initialPos, initialLineStart, initialCurLine);\n }\n } else {\n ++pos;\n }\n }\n return process.env.BABEL_8_BREAKING\n ? { pos, str: out, firstInvalidLoc, lineStart, curLine }\n : {\n pos,\n str: out,\n firstInvalidLoc,\n lineStart,\n curLine,\n containsInvalid: !!firstInvalidLoc,\n };\n}\n\nfunction isStringEnd(\n type: \"single\" | \"double\" | \"template\",\n ch: number,\n input: string,\n pos: number,\n) {\n if (type === \"template\") {\n return (\n ch === charCodes.graveAccent ||\n (ch === charCodes.dollarSign &&\n input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n );\n }\n return (\n ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n CodePointErrorHandlers & {\n strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n };\n\nfunction readEscapedChar(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n inTemplate: boolean,\n errors: EscapedCharErrorHandlers,\n) {\n const throwOnInvalid = !inTemplate;\n pos++; // skip '\\'\n\n const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n const ch = input.charCodeAt(pos++);\n switch (ch) {\n case charCodes.lowercaseN:\n return res(\"\\n\");\n case charCodes.lowercaseR:\n return res(\"\\r\");\n case charCodes.lowercaseX: {\n let code;\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n 2,\n false,\n throwOnInvalid,\n errors,\n ));\n return res(code === null ? null : String.fromCharCode(code));\n }\n case charCodes.lowercaseU: {\n let code;\n ({ code, pos } = readCodePoint(\n input,\n pos,\n lineStart,\n curLine,\n throwOnInvalid,\n errors,\n ));\n return res(code === null ? null : String.fromCodePoint(code));\n }\n case charCodes.lowercaseT:\n return res(\"\\t\");\n case charCodes.lowercaseB:\n return res(\"\\b\");\n case charCodes.lowercaseV:\n return res(\"\\u000b\");\n case charCodes.lowercaseF:\n return res(\"\\f\");\n case charCodes.carriageReturn:\n if (input.charCodeAt(pos) === charCodes.lineFeed) {\n ++pos;\n }\n // fall through\n case charCodes.lineFeed:\n lineStart = pos;\n ++curLine;\n // fall through\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n return res(\"\");\n case charCodes.digit8:\n case charCodes.digit9:\n if (inTemplate) {\n return res(null);\n } else {\n errors.strictNumericEscape(pos - 1, lineStart, curLine);\n }\n // fall through\n default:\n if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n const startPos = pos - 1;\n const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));\n\n let octalStr = match[0];\n\n let octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n pos += octalStr.length - 1;\n const next = input.charCodeAt(pos);\n if (\n octalStr !== \"0\" ||\n next === charCodes.digit8 ||\n next === charCodes.digit9\n ) {\n if (inTemplate) {\n return res(null);\n } else {\n errors.strictNumericEscape(startPos, lineStart, curLine);\n }\n }\n\n return res(String.fromCharCode(octal));\n }\n\n return res(String.fromCharCode(ch));\n }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n len: number,\n forceLen: boolean,\n throwOnInvalid: boolean,\n errors: HexCharErrorHandlers,\n) {\n const initialPos = pos;\n let n;\n ({ n, pos } = readInt(\n input,\n pos,\n lineStart,\n curLine,\n 16,\n len,\n forceLen,\n false,\n errors,\n /* bailOnError */ !throwOnInvalid,\n ));\n if (n === null) {\n if (throwOnInvalid) {\n errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n } else {\n pos = initialPos - 1;\n }\n }\n return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n numericSeparatorInEscapeSequence(\n pos: number,\n lineStart: number,\n curLine: number,\n ): void;\n unexpectedNumericSeparator(\n pos: number,\n lineStart: number,\n curLine: number,\n ): void;\n // It can return \"true\" to indicate that the error was handled\n // and the int parsing should continue.\n invalidDigit(\n pos: number,\n lineStart: number,\n curLine: number,\n radix: number,\n ): boolean;\n};\n\nexport function readInt(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n radix: number,\n len: number | undefined,\n forceLen: boolean,\n allowNumSeparator: boolean | \"bail\",\n errors: IntErrorHandlers,\n bailOnError: boolean,\n) {\n const start = pos;\n const forbiddenSiblings =\n radix === 16\n ? forbiddenNumericSeparatorSiblings.hex\n : forbiddenNumericSeparatorSiblings.decBinOct;\n const isAllowedSibling =\n radix === 16\n ? isAllowedNumericSeparatorSibling.hex\n : radix === 10\n ? isAllowedNumericSeparatorSibling.dec\n : radix === 8\n ? isAllowedNumericSeparatorSibling.oct\n : isAllowedNumericSeparatorSibling.bin;\n\n let invalid = false;\n let total = 0;\n\n for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n const code = input.charCodeAt(pos);\n let val;\n\n if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n const prev = input.charCodeAt(pos - 1);\n const next = input.charCodeAt(pos + 1);\n\n if (!allowNumSeparator) {\n if (bailOnError) return { n: null, pos };\n errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n } else if (\n Number.isNaN(next) ||\n !isAllowedSibling(next) ||\n forbiddenSiblings.has(prev) ||\n forbiddenSiblings.has(next)\n ) {\n if (bailOnError) return { n: null, pos };\n errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n }\n\n // Ignore this _ character\n ++pos;\n continue;\n }\n\n if (code >= charCodes.lowercaseA) {\n val = code - charCodes.lowercaseA + charCodes.lineFeed;\n } else if (code >= charCodes.uppercaseA) {\n val = code - charCodes.uppercaseA + charCodes.lineFeed;\n } else if (charCodes.isDigit(code)) {\n val = code - charCodes.digit0; // 0-9\n } else {\n val = Infinity;\n }\n if (val >= radix) {\n // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n // breaking the loop (this is used for error recovery).\n if (val <= 9 && bailOnError) {\n return { n: null, pos };\n } else if (\n val <= 9 &&\n errors.invalidDigit(pos, lineStart, curLine, radix)\n ) {\n val = 0;\n } else if (forceLen) {\n val = 0;\n invalid = true;\n } else {\n break;\n }\n }\n ++pos;\n total = total * radix + val;\n }\n if (pos === start || (len != null && pos - start !== len) || invalid) {\n return { n: null, pos };\n }\n\n return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n throwOnInvalid: boolean,\n errors: CodePointErrorHandlers,\n) {\n const ch = input.charCodeAt(pos);\n let code;\n\n if (ch === charCodes.leftCurlyBrace) {\n ++pos;\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n input.indexOf(\"}\", pos) - pos,\n true,\n throwOnInvalid,\n errors,\n ));\n ++pos;\n if (code !== null && code > 0x10ffff) {\n if (throwOnInvalid) {\n errors.invalidCodePoint(pos, lineStart, curLine);\n } else {\n return { code: null, pos };\n }\n }\n } else {\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n 4,\n false,\n throwOnInvalid,\n errors,\n ));\n }\n return { code, pos };\n}\n","export const STATEMENT_OR_BLOCK_KEYS = [\"consequent\", \"body\", \"alternate\"];\nexport const FLATTENABLE_KEYS = [\"body\", \"expressions\"];\nexport const FOR_INIT_KEYS = [\"left\", \"init\"];\nexport const COMMENT_KEYS = [\n \"leadingComments\",\n \"trailingComments\",\n \"innerComments\",\n] as const;\n\nexport const LOGICAL_OPERATORS = [\"||\", \"&&\", \"??\"];\nexport const UPDATE_OPERATORS = [\"++\", \"--\"];\n\nexport const BOOLEAN_NUMBER_BINARY_OPERATORS = [\">\", \"<\", \">=\", \"<=\"];\nexport const EQUALITY_BINARY_OPERATORS = [\"==\", \"===\", \"!=\", \"!==\"];\nexport const COMPARISON_BINARY_OPERATORS = [\n ...EQUALITY_BINARY_OPERATORS,\n \"in\",\n \"instanceof\",\n];\nexport const BOOLEAN_BINARY_OPERATORS = [\n ...COMPARISON_BINARY_OPERATORS,\n ...BOOLEAN_NUMBER_BINARY_OPERATORS,\n];\nexport const NUMBER_BINARY_OPERATORS = [\n \"-\",\n \"/\",\n \"%\",\n \"*\",\n \"**\",\n \"&\",\n \"|\",\n \">>\",\n \">>>\",\n \"<<\",\n \"^\",\n];\nexport const BINARY_OPERATORS = [\n \"+\",\n ...NUMBER_BINARY_OPERATORS,\n ...BOOLEAN_BINARY_OPERATORS,\n \"|>\",\n];\n\nexport const ASSIGNMENT_OPERATORS = [\n \"=\",\n \"+=\",\n ...NUMBER_BINARY_OPERATORS.map(op => op + \"=\"),\n ...LOGICAL_OPERATORS.map(op => op + \"=\"),\n];\n\nexport const BOOLEAN_UNARY_OPERATORS = [\"delete\", \"!\"];\nexport const NUMBER_UNARY_OPERATORS = [\"+\", \"-\", \"~\"];\nexport const STRING_UNARY_OPERATORS = [\"typeof\"];\nexport const UNARY_OPERATORS = [\n \"void\",\n \"throw\",\n ...BOOLEAN_UNARY_OPERATORS,\n ...NUMBER_UNARY_OPERATORS,\n ...STRING_UNARY_OPERATORS,\n];\n\nexport const INHERIT_KEYS = {\n optional: [\"typeAnnotation\", \"typeParameters\", \"returnType\"],\n force: [\"start\", \"loc\", \"end\"],\n} as const;\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n // eslint-disable-next-line no-restricted-globals\n exports.BLOCK_SCOPED_SYMBOL = Symbol.for(\"var used to be block scoped\");\n // eslint-disable-next-line no-restricted-globals\n exports.NOT_LOCAL_BINDING = Symbol.for(\n \"should not be considered a local binding\",\n );\n}\n","import is from \"../validators/is.ts\";\nimport { validateField, validateChild } from \"../validators/validate.ts\";\nimport type * as t from \"../index.ts\";\n\nexport const VISITOR_KEYS: Record<string, string[]> = {};\nexport const ALIAS_KEYS: Partial<Record<NodeTypesWithoutComment, string[]>> =\n {};\nexport const FLIPPED_ALIAS_KEYS: Record<string, NodeTypesWithoutComment[]> = {};\nexport const NODE_FIELDS: Record<string, FieldDefinitions> = {};\nexport const BUILDER_KEYS: Record<string, string[]> = {};\nexport const DEPRECATED_KEYS: Record<string, NodeTypesWithoutComment> = {};\nexport const NODE_PARENT_VALIDATIONS: Record<string, Validator> = {};\nexport const NODE_UNION_SHAPES__PRIVATE: Record<string, UnionShape> = {};\n\nfunction getType(val: any) {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (val === null) {\n return \"null\";\n } else {\n return typeof val;\n }\n}\n\ntype NodeTypesWithoutComment = t.Node[\"type\"] | keyof t.Aliases;\n\ntype NodeTypes = NodeTypesWithoutComment | t.Comment[\"type\"];\n\ntype PrimitiveTypes = ReturnType<typeof getType>;\n\ntype FieldDefinitions = Record<string, FieldOptions>;\n\ntype UnionShape = {\n discriminator: string;\n shapes: {\n name: string;\n value: any[];\n properties: Record<string, FieldOptions>;\n }[];\n};\n\ntype DefineTypeOpts = {\n fields?: FieldDefinitions;\n visitor?: string[];\n aliases?: string[];\n builder?: string[];\n inherits?: NodeTypes;\n deprecatedAlias?: string;\n validate?: Validator;\n unionShape?: UnionShape;\n};\n\nexport type ValidatorImpl = (\n node?: t.Node,\n key?: string | { toString(): string },\n val?: any,\n) => void;\n\nexport type ValidatorType = { type: PrimitiveTypes } & ValidatorImpl;\nexport type ValidatorEach = { each: Validator } & ValidatorImpl;\nexport type ValidatorChainOf = {\n chainOf: readonly Validator[];\n} & ValidatorImpl;\nexport type ValidatorOneOf = { oneOf: readonly any[] } & ValidatorImpl;\nexport type ValidatorOneOfNodeTypes = {\n oneOfNodeTypes: readonly NodeTypes[];\n} & ValidatorImpl;\nexport type ValidatorOneOfNodeOrValueTypes = {\n oneOfNodeOrValueTypes: readonly (NodeTypes | PrimitiveTypes)[];\n} & ValidatorImpl;\nexport type ValidatorShapeOf = {\n shapeOf: Record<string, FieldOptions>;\n} & ValidatorImpl;\n\nexport type Validator =\n | ValidatorType\n | ValidatorEach\n | ValidatorChainOf\n | ValidatorOneOf\n | ValidatorOneOfNodeTypes\n | ValidatorOneOfNodeOrValueTypes\n | ValidatorShapeOf\n | ValidatorImpl;\n\nexport type FieldOptions = {\n default?: string | number | boolean | [];\n optional?: boolean;\n deprecated?: boolean;\n validate?: Validator;\n};\n\nexport function validate(validate: Validator): FieldOptions {\n return { validate };\n}\n\nexport function validateType(...typeNames: NodeTypes[]) {\n return validate(assertNodeType(...typeNames));\n}\n\nexport function validateOptional(validate: Validator): FieldOptions {\n return { validate, optional: true };\n}\n\nexport function validateOptionalType(...typeNames: NodeTypes[]): FieldOptions {\n return { validate: assertNodeType(...typeNames), optional: true };\n}\n\nexport function arrayOf(elementType: Validator): Validator {\n return chain(assertValueType(\"array\"), assertEach(elementType));\n}\n\nexport function arrayOfType(...typeNames: NodeTypes[]) {\n return arrayOf(assertNodeType(...typeNames));\n}\n\nexport function validateArrayOfType(...typeNames: NodeTypes[]) {\n return validate(arrayOfType(...typeNames));\n}\n\nexport function assertEach(callback: Validator): Validator {\n const childValidator =\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? validateChild\n : () => {};\n\n function validator(node: t.Node, key: string, val: any) {\n if (!Array.isArray(val)) return;\n\n let i = 0;\n // We lazily concatenate strings here for performance reasons.\n // Concatenating the strings is expensive because we are actually concatenating a string and a number,\n // so V8 cannot just create a \"rope string\" but has to allocate memory for the string resulting from the number\n // This string is very rarely used, only in error paths, so we can skip the concatenation cost in most cases\n const subKey = {\n toString() {\n return `${key}[${i}]`;\n },\n };\n\n for (; i < val.length; i++) {\n const v = val[i];\n callback(node, subKey, v);\n childValidator(node, subKey, v);\n }\n }\n validator.each = callback;\n return validator;\n}\n\nexport function assertOneOf(...values: any[]): Validator {\n function validate(node: any, key: string, val: any) {\n if (!values.includes(val)) {\n throw new TypeError(\n `Property ${key} expected value to be one of ${JSON.stringify(\n values,\n )} but got ${JSON.stringify(val)}`,\n );\n }\n }\n\n validate.oneOf = values;\n\n return validate;\n}\n\nexport const allExpandedTypes: {\n types: NodeTypes[];\n set: Set<string>;\n}[] = [];\n\nexport function assertNodeType(...types: NodeTypes[]): Validator {\n const expandedTypes = new Set<string>();\n\n allExpandedTypes.push({ types, set: expandedTypes });\n\n function validate(node: t.Node, key: string, val: any) {\n const valType = val?.type;\n if (valType != null) {\n if (expandedTypes.has(valType)) {\n validateChild(node, key, val);\n return;\n }\n if (valType === \"Placeholder\") {\n for (const type of types) {\n if (is(type, val)) {\n validateChild(node, key, val);\n return;\n }\n }\n }\n }\n\n throw new TypeError(\n `Property ${key} of ${\n node.type\n } expected node to be of a type ${JSON.stringify(\n types,\n )} but instead got ${JSON.stringify(valType)}`,\n );\n }\n\n validate.oneOfNodeTypes = types;\n\n return validate;\n}\n\nexport function assertNodeOrValueType(\n ...types: (NodeTypes | PrimitiveTypes)[]\n): Validator {\n function validate(node: t.Node, key: string, val: any) {\n const primitiveType = getType(val);\n for (const type of types) {\n if (primitiveType === type || is(type, val)) {\n validateChild(node, key, val);\n return;\n }\n }\n\n throw new TypeError(\n `Property ${key} of ${\n node.type\n } expected node to be of a type ${JSON.stringify(\n types,\n )} but instead got ${JSON.stringify(val?.type)}`,\n );\n }\n\n validate.oneOfNodeOrValueTypes = types;\n\n return validate;\n}\n\nexport function assertValueType(type: PrimitiveTypes): Validator {\n function validate(node: t.Node, key: string, val: any) {\n if (getType(val) === type) {\n return;\n }\n\n throw new TypeError(\n `Property ${key} expected type of ${type} but got ${getType(val)}`,\n );\n }\n\n validate.type = type;\n\n return validate;\n}\n\nexport function assertShape(shape: Record<string, FieldOptions>): Validator {\n const keys = Object.keys(shape);\n function validate(node: t.Node, key: string, val: any) {\n const errors = [];\n for (const property of keys) {\n try {\n validateField(node, property, val[property], shape[property]);\n } catch (error) {\n if (error instanceof TypeError) {\n errors.push(error.message);\n continue;\n }\n throw error;\n }\n }\n if (errors.length) {\n throw new TypeError(\n `Property ${key} of ${\n node.type\n } expected to have the following:\\n${errors.join(\"\\n\")}`,\n );\n }\n }\n\n validate.shapeOf = shape;\n\n return validate;\n}\n\nexport function assertOptionalChainStart(): Validator {\n function validate(node: t.Node) {\n let current = node;\n while (node) {\n const { type } = current;\n if (type === \"OptionalCallExpression\") {\n if (current.optional) return;\n current = current.callee;\n continue;\n }\n\n if (type === \"OptionalMemberExpression\") {\n if (current.optional) return;\n current = current.object;\n continue;\n }\n\n break;\n }\n\n throw new TypeError(\n `Non-optional ${node.type} must chain from an optional OptionalMemberExpression or OptionalCallExpression. Found chain from ${current?.type}`,\n );\n }\n\n return validate;\n}\n\nexport function chain(...fns: Validator[]): Validator {\n function validate(...args: Parameters<Validator>) {\n for (const fn of fns) {\n fn(...args);\n }\n }\n validate.chainOf = fns;\n\n if (\n fns.length >= 2 &&\n \"type\" in fns[0] &&\n fns[0].type === \"array\" &&\n !(\"each\" in fns[1])\n ) {\n throw new Error(\n `An assertValueType(\"array\") validator can only be followed by an assertEach(...) validator.`,\n );\n }\n\n return validate;\n}\n\nconst validTypeOpts = new Set([\n \"aliases\",\n \"builder\",\n \"deprecatedAlias\",\n \"fields\",\n \"inherits\",\n \"visitor\",\n \"validate\",\n \"unionShape\",\n]);\nconst validFieldKeys = new Set([\n \"default\",\n \"optional\",\n \"deprecated\",\n \"validate\",\n]);\n\nconst store = {} as Record<string, DefineTypeOpts>;\n\n// Wraps defineType to ensure these aliases are included.\nexport function defineAliasedType(...aliases: string[]) {\n return (type: string, opts: DefineTypeOpts = {}) => {\n let defined = opts.aliases;\n if (!defined) {\n if (opts.inherits) defined = store[opts.inherits].aliases?.slice();\n defined ??= [];\n opts.aliases = defined;\n }\n const additional = aliases.filter(a => !defined.includes(a));\n defined.unshift(...additional);\n defineType(type, opts);\n };\n}\n\nexport default function defineType(type: string, opts: DefineTypeOpts = {}) {\n const inherits = (opts.inherits && store[opts.inherits]) || {};\n\n let fields = opts.fields;\n if (!fields) {\n fields = {};\n if (inherits.fields) {\n const keys = Object.getOwnPropertyNames(inherits.fields);\n for (const key of keys) {\n const field = inherits.fields[key];\n const def = field.default;\n if (\n Array.isArray(def) ? def.length > 0 : def && typeof def === \"object\"\n ) {\n throw new Error(\n \"field defaults can only be primitives or empty arrays currently\",\n );\n }\n fields[key] = {\n default: Array.isArray(def) ? [] : def,\n optional: field.optional,\n deprecated: field.deprecated,\n validate: field.validate,\n };\n }\n }\n }\n\n const visitor: string[] = opts.visitor || inherits.visitor || [];\n const aliases: string[] = opts.aliases || inherits.aliases || [];\n const builder: string[] =\n opts.builder || inherits.builder || opts.visitor || [];\n\n for (const k of Object.keys(opts)) {\n if (!validTypeOpts.has(k)) {\n throw new Error(`Unknown type option \"${k}\" on ${type}`);\n }\n }\n\n if (opts.deprecatedAlias) {\n DEPRECATED_KEYS[opts.deprecatedAlias] = type as NodeTypesWithoutComment;\n }\n\n // ensure all field keys are represented in `fields`\n for (const key of visitor.concat(builder)) {\n fields[key] = fields[key] || {};\n }\n\n for (const key of Object.keys(fields)) {\n const field = fields[key];\n\n if (field.default !== undefined && !builder.includes(key)) {\n field.optional = true;\n }\n if (field.default === undefined) {\n field.default = null;\n } else if (!field.validate && field.default != null) {\n field.validate = assertValueType(getType(field.default));\n }\n\n for (const k of Object.keys(field)) {\n if (!validFieldKeys.has(k)) {\n throw new Error(`Unknown field key \"${k}\" on ${type}.${key}`);\n }\n }\n }\n\n VISITOR_KEYS[type] = opts.visitor = visitor;\n BUILDER_KEYS[type] = opts.builder = builder;\n NODE_FIELDS[type] = opts.fields = fields;\n ALIAS_KEYS[type as NodeTypesWithoutComment] = opts.aliases = aliases;\n aliases.forEach(alias => {\n FLIPPED_ALIAS_KEYS[alias] = FLIPPED_ALIAS_KEYS[alias] || [];\n FLIPPED_ALIAS_KEYS[alias].push(type as NodeTypesWithoutComment);\n });\n\n if (opts.validate) {\n NODE_PARENT_VALIDATIONS[type] = opts.validate;\n }\n if (opts.unionShape) {\n NODE_UNION_SHAPES__PRIVATE[type] = opts.unionShape;\n }\n\n store[type] = opts;\n}\n","import is from \"../validators/is.ts\";\nimport isValidIdentifier from \"../validators/isValidIdentifier.ts\";\nimport { isKeyword, isReservedWord } from \"@babel/helper-validator-identifier\";\nimport type * as t from \"../index.ts\";\nimport { readStringContents } from \"@babel/helper-string-parser\";\n\nimport {\n BINARY_OPERATORS,\n LOGICAL_OPERATORS,\n ASSIGNMENT_OPERATORS,\n UNARY_OPERATORS,\n UPDATE_OPERATORS,\n} from \"../constants/index.ts\";\n\nimport {\n defineAliasedType,\n assertShape,\n assertOptionalChainStart,\n assertValueType,\n assertNodeType,\n assertNodeOrValueType,\n assertEach,\n chain,\n assertOneOf,\n validateOptional,\n arrayOf,\n arrayOfType,\n validateArrayOfType,\n validateType,\n type Validator,\n type ValidatorImpl,\n type ValidatorOneOfNodeTypes,\n type ValidatorType,\n} from \"./utils.ts\";\n\nexport const classMethodOrPropertyUnionShapeCommon = (\n allowPrivateName = false,\n) => ({\n unionShape: {\n discriminator: \"computed\",\n shapes: [\n {\n name: \"computed\",\n value: [true],\n properties: {\n key: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n },\n {\n name: \"nonComputed\",\n value: [false],\n properties: {\n key: {\n validate: allowPrivateName\n ? assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n \"PrivateName\",\n )\n : assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n ),\n },\n },\n },\n ],\n },\n});\n\nconst defineType = defineAliasedType(\"Standardized\");\n\ndefineType(\"ArrayExpression\", {\n fields: {\n elements: {\n validate: arrayOf(\n assertNodeOrValueType(\"null\", \"Expression\", \"SpreadElement\"),\n ),\n default:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? []\n : undefined,\n },\n },\n visitor: [\"elements\"],\n aliases: [\"Expression\"],\n});\n\ndefineType(\"AssignmentExpression\", {\n fields: {\n operator: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? assertValueType(\"string\")\n : Object.assign(\n (function () {\n const identifier = assertOneOf(...ASSIGNMENT_OPERATORS);\n const pattern = assertOneOf(\"=\");\n\n return function (node: t.AssignmentExpression, key, val) {\n const validator = is(\"Pattern\", node.left)\n ? pattern\n : identifier;\n validator(node, key, val);\n } satisfies ValidatorImpl;\n })(),\n { oneOf: ASSIGNMENT_OPERATORS },\n ),\n },\n left: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? assertNodeType(\"LVal\", \"OptionalMemberExpression\")\n : assertNodeType(\n \"Identifier\",\n \"MemberExpression\",\n \"OptionalMemberExpression\",\n \"ArrayPattern\",\n \"ObjectPattern\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n ),\n },\n right: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n builder: [\"operator\", \"left\", \"right\"],\n visitor: [\"left\", \"right\"],\n aliases: [\"Expression\"],\n});\n\ndefineType(\"BinaryExpression\", {\n builder: [\"operator\", \"left\", \"right\"],\n fields: {\n operator: {\n validate: assertOneOf(...BINARY_OPERATORS),\n },\n left: {\n validate: (function () {\n const expression = assertNodeType(\"Expression\");\n const inOp = assertNodeType(\"Expression\", \"PrivateName\");\n\n const validator: ValidatorOneOfNodeTypes = Object.assign(\n function (node: t.BinaryExpression, key, val) {\n const validator = node.operator === \"in\" ? inOp : expression;\n validator(node, key, val);\n } satisfies ValidatorImpl,\n // todo(ts): can be discriminated union by `operator` property\n { oneOfNodeTypes: [\"Expression\", \"PrivateName\"] as const },\n );\n return validator;\n })(),\n },\n right: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n visitor: [\"left\", \"right\"],\n aliases: [\"Binary\", \"Expression\"],\n});\n\ndefineType(\"InterpreterDirective\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: assertValueType(\"string\"),\n },\n },\n});\n\ndefineType(\"Directive\", {\n visitor: [\"value\"],\n fields: {\n value: {\n validate: assertNodeType(\"DirectiveLiteral\"),\n },\n },\n});\n\ndefineType(\"DirectiveLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: assertValueType(\"string\"),\n },\n },\n});\n\ndefineType(\"BlockStatement\", {\n builder: [\"body\", \"directives\"],\n visitor: [\"directives\", \"body\"],\n fields: {\n directives: {\n validate: arrayOfType(\"Directive\"),\n default: [],\n },\n body: validateArrayOfType(\"Statement\"),\n },\n aliases: [\"Scopable\", \"BlockParent\", \"Block\", \"Statement\"],\n});\n\ndefineType(\"BreakStatement\", {\n visitor: [\"label\"],\n fields: {\n label: {\n validate: assertNodeType(\"Identifier\"),\n optional: true,\n },\n },\n aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n});\n\ndefineType(\"CallExpression\", {\n visitor: process.env.BABEL_8_BREAKING\n ? [\"callee\", \"typeArguments\", \"arguments\"]\n : [\"callee\", \"typeParameters\", \"typeArguments\", \"arguments\"],\n builder: [\"callee\", \"arguments\"],\n aliases: [\"Expression\"],\n fields: {\n callee: {\n validate: assertNodeType(\"Expression\", \"Super\", \"V8IntrinsicIdentifier\"),\n },\n arguments: validateArrayOfType(\n \"Expression\",\n \"SpreadElement\",\n \"ArgumentPlaceholder\",\n ),\n typeArguments: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\n \"TypeParameterInstantiation\",\n \"TSTypeParameterInstantiation\",\n )\n : assertNodeType(\"TypeParameterInstantiation\"),\n optional: true,\n },\n ...(process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? {}\n : {\n optional: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n typeParameters: {\n validate: assertNodeType(\"TSTypeParameterInstantiation\"),\n optional: true,\n },\n }),\n },\n});\n\ndefineType(\"CatchClause\", {\n visitor: [\"param\", \"body\"],\n fields: {\n param: {\n validate: assertNodeType(\"Identifier\", \"ArrayPattern\", \"ObjectPattern\"),\n optional: true,\n },\n body: {\n validate: assertNodeType(\"BlockStatement\"),\n },\n },\n aliases: [\"Scopable\", \"BlockParent\"],\n});\n\ndefineType(\"ConditionalExpression\", {\n visitor: [\"test\", \"consequent\", \"alternate\"],\n fields: {\n test: {\n validate: assertNodeType(\"Expression\"),\n },\n consequent: {\n validate: assertNodeType(\"Expression\"),\n },\n alternate: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n aliases: [\"Expression\", \"Conditional\"],\n});\n\ndefineType(\"ContinueStatement\", {\n visitor: [\"label\"],\n fields: {\n label: {\n validate: assertNodeType(\"Identifier\"),\n optional: true,\n },\n },\n aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n});\n\ndefineType(\"DebuggerStatement\", {\n aliases: [\"Statement\"],\n});\n\ndefineType(\"DoWhileStatement\", {\n builder: [\"test\", \"body\"],\n visitor: [\"body\", \"test\"],\n fields: {\n test: {\n validate: assertNodeType(\"Expression\"),\n },\n body: {\n validate: assertNodeType(\"Statement\"),\n },\n },\n aliases: [\"Statement\", \"BlockParent\", \"Loop\", \"While\", \"Scopable\"],\n});\n\ndefineType(\"EmptyStatement\", {\n aliases: [\"Statement\"],\n});\n\ndefineType(\"ExpressionStatement\", {\n visitor: [\"expression\"],\n fields: {\n expression: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n aliases: [\"Statement\", \"ExpressionWrapper\"],\n});\n\ndefineType(\"File\", {\n builder: [\"program\", \"comments\", \"tokens\"],\n visitor: [\"program\"],\n fields: {\n program: {\n validate: assertNodeType(\"Program\"),\n },\n comments: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? Object.assign(() => {}, {\n each: { oneOfNodeTypes: [\"CommentBlock\", \"CommentLine\"] },\n })\n : assertEach(assertNodeType(\"CommentBlock\", \"CommentLine\")),\n optional: true,\n },\n tokens: {\n // todo(ts): add Token type\n validate: assertEach(Object.assign(() => {}, { type: \"any\" })),\n optional: true,\n },\n },\n});\n\ndefineType(\"ForInStatement\", {\n visitor: [\"left\", \"right\", \"body\"],\n aliases: [\n \"Scopable\",\n \"Statement\",\n \"For\",\n \"BlockParent\",\n \"Loop\",\n \"ForXStatement\",\n ],\n fields: {\n left: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? assertNodeType(\"VariableDeclaration\", \"LVal\")\n : assertNodeType(\n \"VariableDeclaration\",\n \"Identifier\",\n \"MemberExpression\",\n \"ArrayPattern\",\n \"ObjectPattern\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n ),\n },\n right: {\n validate: assertNodeType(\"Expression\"),\n },\n body: {\n validate: assertNodeType(\"Statement\"),\n },\n },\n});\n\ndefineType(\"ForStatement\", {\n visitor: [\"init\", \"test\", \"update\", \"body\"],\n aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\"],\n fields: {\n init: {\n validate: assertNodeType(\"VariableDeclaration\", \"Expression\"),\n optional: true,\n },\n test: {\n validate: assertNodeType(\"Expression\"),\n optional: true,\n },\n update: {\n validate: assertNodeType(\"Expression\"),\n optional: true,\n },\n body: {\n validate: assertNodeType(\"Statement\"),\n },\n },\n});\n\nexport const functionCommon = () => ({\n params: validateArrayOfType(\"FunctionParameter\"),\n generator: {\n default: false,\n },\n async: {\n default: false,\n },\n});\n\nexport const functionTypeAnnotationCommon = () => ({\n returnType: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\"TypeAnnotation\", \"TSTypeAnnotation\")\n : assertNodeType(\n \"TypeAnnotation\",\n \"TSTypeAnnotation\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"Noop\",\n ),\n optional: true,\n },\n typeParameters: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\")\n : assertNodeType(\n \"TypeParameterDeclaration\",\n \"TSTypeParameterDeclaration\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"Noop\",\n ),\n optional: true,\n },\n});\n\nexport const functionDeclarationCommon = () => ({\n ...functionCommon(),\n declare: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n id: {\n validate: assertNodeType(\"Identifier\"),\n optional: true, // May be null for `export default function`\n },\n});\n\ndefineType(\"FunctionDeclaration\", {\n builder: [\"id\", \"params\", \"body\", \"generator\", \"async\"],\n visitor: [\n \"id\",\n \"typeParameters\",\n \"params\",\n \"predicate\",\n \"returnType\",\n \"body\",\n ],\n fields: {\n ...functionDeclarationCommon(),\n ...functionTypeAnnotationCommon(),\n body: {\n validate: assertNodeType(\"BlockStatement\"),\n },\n predicate: {\n validate: assertNodeType(\"DeclaredPredicate\", \"InferredPredicate\"),\n optional: true,\n },\n },\n aliases: [\n \"Scopable\",\n \"Function\",\n \"BlockParent\",\n \"FunctionParent\",\n \"Statement\",\n \"Pureish\",\n \"Declaration\",\n ],\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? undefined\n : (function () {\n const identifier = assertNodeType(\"Identifier\");\n\n return function (parent, key, node) {\n if (!is(\"ExportDefaultDeclaration\", parent)) {\n identifier(node, \"id\", node.id);\n }\n };\n })(),\n});\n\ndefineType(\"FunctionExpression\", {\n inherits: \"FunctionDeclaration\",\n aliases: [\n \"Scopable\",\n \"Function\",\n \"BlockParent\",\n \"FunctionParent\",\n \"Expression\",\n \"Pureish\",\n ],\n fields: {\n ...functionCommon(),\n ...functionTypeAnnotationCommon(),\n id: {\n validate: assertNodeType(\"Identifier\"),\n optional: true,\n },\n body: {\n validate: assertNodeType(\"BlockStatement\"),\n },\n predicate: {\n validate: assertNodeType(\"DeclaredPredicate\", \"InferredPredicate\"),\n optional: true,\n },\n },\n});\n\nexport const patternLikeCommon = () => ({\n typeAnnotation: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\"TypeAnnotation\", \"TSTypeAnnotation\")\n : assertNodeType(\n \"TypeAnnotation\",\n \"TSTypeAnnotation\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"Noop\",\n ),\n optional: true,\n },\n optional: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n});\n\ndefineType(\"Identifier\", {\n builder: [\"name\"],\n visitor: [\"typeAnnotation\", \"decorators\" /* for legacy param decorators */],\n aliases: [\n \"Expression\",\n \"FunctionParameter\",\n \"PatternLike\",\n \"LVal\",\n \"TSEntityName\",\n ],\n fields: {\n ...patternLikeCommon(),\n name: {\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? chain(\n assertValueType(\"string\"),\n Object.assign(\n function (node, key, val) {\n if (!isValidIdentifier(val, false)) {\n throw new TypeError(\n `\"${val}\" is not a valid identifier name`,\n );\n }\n } satisfies ValidatorImpl,\n { type: \"string\" as const },\n ) satisfies ValidatorType,\n )\n : assertValueType(\"string\"),\n },\n },\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? function (parent, key, node) {\n const match = /\\.(\\w+)$/.exec(key.toString());\n if (!match) return;\n\n const [, parentKey] = match;\n const nonComp = { computed: false };\n\n // We can't check if `parent.property === node`, because nodes are validated\n // before replacing them in the AST.\n if (parentKey === \"property\") {\n if (is(\"MemberExpression\", parent, nonComp)) return;\n if (is(\"OptionalMemberExpression\", parent, nonComp)) return;\n } else if (parentKey === \"key\") {\n if (is(\"Property\", parent, nonComp)) return;\n if (is(\"Method\", parent, nonComp)) return;\n } else if (parentKey === \"exported\") {\n if (is(\"ExportSpecifier\", parent)) return;\n } else if (parentKey === \"imported\") {\n if (is(\"ImportSpecifier\", parent, { imported: node })) return;\n } else if (parentKey === \"meta\") {\n if (is(\"MetaProperty\", parent, { meta: node })) return;\n }\n\n if (\n // Ideally we should call isStrictReservedWord if this node is a descendant\n // of a block in strict mode. Also, we should pass the inModule option so\n // we can disable \"await\" in module.\n (isKeyword(node.name) || isReservedWord(node.name, false)) &&\n // Even if \"this\" is a keyword, we are using the Identifier\n // node to represent it.\n node.name !== \"this\"\n ) {\n throw new TypeError(`\"${node.name}\" is not a valid identifier`);\n }\n }\n : undefined,\n});\n\ndefineType(\"IfStatement\", {\n visitor: [\"test\", \"consequent\", \"alternate\"],\n aliases: [\"Statement\", \"Conditional\"],\n fields: {\n test: {\n validate: assertNodeType(\"Expression\"),\n },\n consequent: {\n validate: assertNodeType(\"Statement\"),\n },\n alternate: {\n optional: true,\n validate: assertNodeType(\"Statement\"),\n },\n },\n});\n\ndefineType(\"LabeledStatement\", {\n visitor: [\"label\", \"body\"],\n aliases: [\"Statement\"],\n fields: {\n label: {\n validate: assertNodeType(\"Identifier\"),\n },\n body: {\n validate: assertNodeType(\"Statement\"),\n },\n },\n});\n\ndefineType(\"StringLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: assertValueType(\"string\"),\n },\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"],\n});\n\ndefineType(\"NumericLiteral\", {\n builder: [\"value\"],\n deprecatedAlias: \"NumberLiteral\",\n fields: {\n value: {\n validate: chain(\n assertValueType(\"number\"),\n Object.assign(\n function (node, key, val) {\n if (1 / val < 0 || !Number.isFinite(val)) {\n const error = new Error(\n \"NumericLiterals must be non-negative finite numbers. \" +\n `You can use t.valueToNode(${val}) instead.`,\n );\n if (process.env.BABEL_8_BREAKING) {\n // TODO(@nicolo-ribaudo) Fix regenerator to not pass negative\n // numbers here.\n if (!IS_STANDALONE) {\n if (!new Error().stack.includes(\"regenerator\")) {\n throw error;\n }\n }\n } else {\n // TODO: Enable this warning once regenerator is fixed.\n // https://github.com/facebook/regenerator/pull/680\n // console.warn(error);\n }\n }\n } satisfies ValidatorImpl,\n { type: \"number\" as const },\n ) satisfies ValidatorType,\n ),\n },\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"],\n});\n\ndefineType(\"NullLiteral\", {\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"],\n});\n\ndefineType(\"BooleanLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: assertValueType(\"boolean\"),\n },\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"],\n});\n\ndefineType(\"RegExpLiteral\", {\n builder: [\"pattern\", \"flags\"],\n deprecatedAlias: \"RegexLiteral\",\n aliases: [\"Expression\", \"Pureish\", \"Literal\"],\n fields: {\n pattern: {\n validate: assertValueType(\"string\"),\n },\n flags: {\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? chain(\n assertValueType(\"string\"),\n Object.assign(\n function (node, key, val) {\n const invalid = /[^dgimsuvy]/.exec(val);\n if (invalid) {\n throw new TypeError(\n `\"${invalid[0]}\" is not a valid RegExp flag`,\n );\n }\n } satisfies ValidatorImpl,\n { type: \"string\" as const },\n ) satisfies ValidatorType,\n )\n : assertValueType(\"string\"),\n default: \"\",\n },\n },\n});\n\ndefineType(\"LogicalExpression\", {\n builder: [\"operator\", \"left\", \"right\"],\n visitor: [\"left\", \"right\"],\n aliases: [\"Binary\", \"Expression\"],\n fields: {\n operator: {\n validate: assertOneOf(...LOGICAL_OPERATORS),\n },\n left: {\n validate: assertNodeType(\"Expression\"),\n },\n right: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\"MemberExpression\", {\n builder: [\n \"object\",\n \"property\",\n \"computed\",\n ...(!process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? [\"optional\"]\n : []),\n ],\n visitor: [\"object\", \"property\"],\n aliases: [\"Expression\", \"LVal\", \"PatternLike\"],\n unionShape: {\n discriminator: \"computed\",\n shapes: [\n {\n name: \"computed\",\n value: [true],\n properties: {\n property: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n },\n {\n name: \"nonComputed\",\n value: [false],\n properties: {\n property: {\n validate: assertNodeType(\"Identifier\", \"PrivateName\"),\n },\n },\n },\n ],\n },\n fields: {\n object: {\n validate: assertNodeType(\"Expression\", \"Super\"),\n },\n property: {\n validate: (function () {\n const normal = assertNodeType(\"Identifier\", \"PrivateName\");\n const computed = assertNodeType(\"Expression\");\n\n const validator: ValidatorOneOfNodeTypes = function (\n node: t.MemberExpression,\n key,\n val,\n ) {\n const validator: Validator = node.computed ? computed : normal;\n validator(node, key, val);\n };\n // todo(ts): can be discriminated union by `computed` property\n validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"PrivateName\"];\n return validator;\n })(),\n },\n computed: {\n default: false,\n },\n ...(!process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? {\n optional: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n }\n : {}),\n },\n});\n\ndefineType(\"NewExpression\", { inherits: \"CallExpression\" });\n\ndefineType(\"Program\", {\n // Note: We explicitly leave 'interpreter' out here because it is\n // conceptually comment-like, and Babel does not traverse comments either.\n visitor: [\"directives\", \"body\"],\n builder: [\"body\", \"directives\", \"sourceType\", \"interpreter\"],\n fields: {\n sourceType: {\n validate: assertOneOf(\"script\", \"module\"),\n default: \"script\",\n },\n interpreter: {\n validate: assertNodeType(\"InterpreterDirective\"),\n default: null,\n optional: true,\n },\n directives: {\n validate: arrayOfType(\"Directive\"),\n default: [],\n },\n body: validateArrayOfType(\"Statement\"),\n },\n aliases: [\"Scopable\", \"BlockParent\", \"Block\"],\n});\n\ndefineType(\"ObjectExpression\", {\n visitor: [\"properties\"],\n aliases: [\"Expression\"],\n fields: {\n properties: validateArrayOfType(\n \"ObjectMethod\",\n \"ObjectProperty\",\n \"SpreadElement\",\n ),\n },\n});\n\ndefineType(\"ObjectMethod\", {\n builder: [\"kind\", \"key\", \"params\", \"body\", \"computed\", \"generator\", \"async\"],\n visitor: [\n \"decorators\",\n \"key\",\n \"typeParameters\",\n \"params\",\n \"returnType\",\n \"body\",\n ],\n ...classMethodOrPropertyUnionShapeCommon(),\n fields: {\n ...functionCommon(),\n ...functionTypeAnnotationCommon(),\n kind: {\n validate: assertOneOf(\"method\", \"get\", \"set\"),\n ...(!process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? { default: \"method\" }\n : {}),\n },\n computed: {\n default: false,\n },\n key: {\n validate: (function () {\n const normal = assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n );\n const computed = assertNodeType(\"Expression\");\n\n const validator: ValidatorOneOfNodeTypes = function (\n node: t.ObjectMethod,\n key,\n val,\n ) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n };\n // todo(ts): can be discriminated union by `computed` property\n validator.oneOfNodeTypes = [\n \"Expression\",\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n ];\n return validator;\n })(),\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n body: {\n validate: assertNodeType(\"BlockStatement\"),\n },\n },\n aliases: [\n \"UserWhitespacable\",\n \"Function\",\n \"Scopable\",\n \"BlockParent\",\n \"FunctionParent\",\n \"Method\",\n \"ObjectMember\",\n ],\n});\n\ndefineType(\"ObjectProperty\", {\n builder: [\n \"key\",\n \"value\",\n \"computed\",\n \"shorthand\",\n ...(!process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? [\"decorators\"]\n : []),\n ],\n unionShape: {\n discriminator: \"computed\",\n shapes: [\n {\n name: \"computed\",\n value: [true],\n properties: {\n key: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n },\n {\n name: \"nonComputed\",\n value: [false],\n properties: {\n key: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n \"PrivateName\",\n )\n : assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"DecimalLiteral\",\n \"PrivateName\",\n ),\n },\n },\n },\n ],\n },\n fields: {\n computed: {\n default: false,\n },\n key: {\n validate: (function () {\n const normal = process.env.BABEL_8_BREAKING\n ? assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n \"PrivateName\",\n )\n : assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"DecimalLiteral\",\n \"PrivateName\",\n );\n const computed = assertNodeType(\"Expression\");\n\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST allows DecimalLiteral\n const validator: ValidatorOneOfNodeTypes = Object.assign(\n function (node: t.ObjectProperty, key, val) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n } satisfies ValidatorImpl,\n {\n // todo(ts): can be discriminated union by `computed` property\n oneOfNodeTypes: process.env.BABEL_8_BREAKING\n ? ([\n \"Expression\",\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n \"PrivateName\",\n ] as const)\n : ([\n \"Expression\",\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n \"DecimalLiteral\",\n \"PrivateName\",\n ] as const),\n },\n );\n return validator;\n })(),\n },\n value: {\n // Value may be PatternLike if this is an AssignmentProperty\n // https://github.com/babel/babylon/issues/434\n validate: assertNodeType(\"Expression\", \"PatternLike\"),\n },\n shorthand: {\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? chain(\n assertValueType(\"boolean\"),\n Object.assign(\n function (node: t.ObjectProperty, key, shorthand) {\n if (!shorthand) return;\n\n if (node.computed) {\n throw new TypeError(\n \"Property shorthand of ObjectProperty cannot be true if computed is true\",\n );\n }\n\n if (!is(\"Identifier\", node.key)) {\n throw new TypeError(\n \"Property shorthand of ObjectProperty cannot be true if key is not an Identifier\",\n );\n }\n } satisfies ValidatorImpl,\n { type: \"boolean\" as const },\n ) satisfies ValidatorType,\n )\n : assertValueType(\"boolean\"),\n default: false,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n },\n visitor: [\"decorators\", \"key\", \"value\"],\n aliases: [\"UserWhitespacable\", \"Property\", \"ObjectMember\"],\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? undefined\n : (function () {\n const pattern = assertNodeType(\n \"Identifier\",\n \"Pattern\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSNonNullExpression\",\n \"TSTypeAssertion\",\n );\n const expression = assertNodeType(\"Expression\");\n\n return function (parent, key, node) {\n const validator = is(\"ObjectPattern\", parent)\n ? pattern\n : expression;\n validator(node, \"value\", node.value);\n };\n })(),\n});\n\ndefineType(\"RestElement\", {\n visitor: [\"argument\", \"typeAnnotation\"],\n builder: [\"argument\"],\n aliases: process.env.BABEL_8_BREAKING\n ? [\"FunctionParameter\", \"PatternLike\"]\n : [\"FunctionParameter\", \"PatternLike\", \"LVal\"],\n deprecatedAlias: \"RestProperty\",\n fields: {\n ...patternLikeCommon(),\n argument: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? assertNodeType(\n \"Identifier\",\n \"ArrayPattern\",\n \"ObjectPattern\",\n \"MemberExpression\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n // These are not valid in RestElement, but we allow them for backwards compatibility.\n \"RestElement\",\n \"AssignmentPattern\",\n )\n : assertNodeType(\n \"Identifier\",\n \"ArrayPattern\",\n \"ObjectPattern\",\n \"MemberExpression\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n ),\n },\n },\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? (function (parent: t.ArrayPattern | t.ObjectPattern, key) {\n const match = /(\\w+)\\[(\\d+)\\]/.exec(key.toString());\n if (!match) throw new Error(\"Internal Babel error: malformed key.\");\n\n const [, listKey, index] = match as unknown as [\n string,\n keyof typeof parent,\n string,\n ];\n if ((parent[listKey] as t.Node[]).length > +index + 1) {\n throw new TypeError(\n `RestElement must be last element of ${listKey}`,\n );\n }\n } satisfies ValidatorImpl)\n : undefined,\n});\n\ndefineType(\"ReturnStatement\", {\n visitor: [\"argument\"],\n aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n fields: {\n argument: {\n validate: assertNodeType(\"Expression\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"SequenceExpression\", {\n visitor: [\"expressions\"],\n fields: {\n expressions: validateArrayOfType(\"Expression\"),\n },\n aliases: [\"Expression\"],\n});\n\ndefineType(\"ParenthesizedExpression\", {\n visitor: [\"expression\"],\n aliases: [\"Expression\", \"ExpressionWrapper\"],\n fields: {\n expression: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\"SwitchCase\", {\n visitor: [\"test\", \"consequent\"],\n fields: {\n test: {\n validate: assertNodeType(\"Expression\"),\n optional: true,\n },\n consequent: validateArrayOfType(\"Statement\"),\n },\n});\n\ndefineType(\"SwitchStatement\", {\n visitor: [\"discriminant\", \"cases\"],\n aliases: [\"Statement\", \"BlockParent\", \"Scopable\"],\n fields: {\n discriminant: {\n validate: assertNodeType(\"Expression\"),\n },\n cases: validateArrayOfType(\"SwitchCase\"),\n },\n});\n\ndefineType(\"ThisExpression\", {\n aliases: process.env.BABEL_8_BREAKING\n ? [\"Expression\", \"TSEntityName\"]\n : [\"Expression\"],\n});\n\ndefineType(\"ThrowStatement\", {\n visitor: [\"argument\"],\n aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n fields: {\n argument: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\"TryStatement\", {\n visitor: [\"block\", \"handler\", \"finalizer\"],\n aliases: [\"Statement\"],\n fields: {\n block: {\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? chain(\n assertNodeType(\"BlockStatement\"),\n Object.assign(\n function (node: t.TryStatement) {\n // This validator isn't put at the top level because we can run it\n // even if this node doesn't have a parent.\n\n if (!node.handler && !node.finalizer) {\n throw new TypeError(\n \"TryStatement expects either a handler or finalizer, or both\",\n );\n }\n } satisfies ValidatorImpl,\n { oneOfNodeTypes: [\"BlockStatement\"] as const },\n ) satisfies ValidatorOneOfNodeTypes,\n )\n : assertNodeType(\"BlockStatement\"),\n },\n handler: {\n optional: true,\n validate: assertNodeType(\"CatchClause\"),\n },\n finalizer: {\n optional: true,\n validate: assertNodeType(\"BlockStatement\"),\n },\n },\n});\n\ndefineType(\"UnaryExpression\", {\n builder: [\"operator\", \"argument\", \"prefix\"],\n fields: {\n prefix: {\n default: true,\n },\n argument: {\n validate: assertNodeType(\"Expression\"),\n },\n operator: {\n validate: assertOneOf(...UNARY_OPERATORS),\n },\n },\n visitor: [\"argument\"],\n aliases: [\"UnaryLike\", \"Expression\"],\n});\n\ndefineType(\"UpdateExpression\", {\n builder: [\"operator\", \"argument\", \"prefix\"],\n fields: {\n prefix: {\n default: false,\n },\n argument: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? assertNodeType(\"Expression\")\n : assertNodeType(\"Identifier\", \"MemberExpression\"),\n },\n operator: {\n validate: assertOneOf(...UPDATE_OPERATORS),\n },\n },\n visitor: [\"argument\"],\n aliases: [\"Expression\"],\n});\n\ndefineType(\"VariableDeclaration\", {\n builder: [\"kind\", \"declarations\"],\n visitor: [\"declarations\"],\n aliases: [\"Statement\", \"Declaration\"],\n fields: {\n declare: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n kind: {\n validate: assertOneOf(\n \"var\",\n \"let\",\n \"const\",\n // https://github.com/tc39/proposal-explicit-resource-management\n \"using\",\n // https://github.com/tc39/proposal-async-explicit-resource-management\n \"await using\",\n ),\n },\n declarations: validateArrayOfType(\"VariableDeclarator\"),\n },\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? (() => {\n const withoutInit = assertNodeType(\"Identifier\", \"Placeholder\");\n const constOrLetOrVar = assertNodeType(\n \"Identifier\",\n \"ArrayPattern\",\n \"ObjectPattern\",\n \"Placeholder\",\n );\n const usingOrAwaitUsing = assertNodeType(\n \"Identifier\",\n \"VoidPattern\",\n \"Placeholder\",\n );\n\n return function (parent, key, node: t.VariableDeclaration) {\n const { kind, declarations } = node;\n const parentIsForX = is(\"ForXStatement\", parent, { left: node });\n if (parentIsForX) {\n if (declarations.length !== 1) {\n throw new TypeError(\n `Exactly one VariableDeclarator is required in the VariableDeclaration of a ${parent.type}`,\n );\n }\n }\n for (const decl of declarations) {\n if (kind === \"const\" || kind === \"let\" || kind === \"var\") {\n if (!parentIsForX && !decl.init) {\n withoutInit(decl, \"id\", decl.id);\n } else {\n constOrLetOrVar(decl, \"id\", decl.id);\n }\n } else {\n usingOrAwaitUsing(decl, \"id\", decl.id);\n }\n }\n };\n })()\n : undefined,\n});\n\ndefineType(\"VariableDeclarator\", {\n visitor: [\"id\", \"init\"],\n fields: {\n id: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? assertNodeType(\"LVal\", \"VoidPattern\")\n : assertNodeType(\n \"Identifier\",\n \"ArrayPattern\",\n \"ObjectPattern\",\n \"VoidPattern\",\n ),\n },\n definite: {\n optional: true,\n validate: assertValueType(\"boolean\"),\n },\n init: {\n optional: true,\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\"WhileStatement\", {\n visitor: [\"test\", \"body\"],\n aliases: [\"Statement\", \"BlockParent\", \"Loop\", \"While\", \"Scopable\"],\n fields: {\n test: {\n validate: assertNodeType(\"Expression\"),\n },\n body: {\n validate: assertNodeType(\"Statement\"),\n },\n },\n});\n\ndefineType(\"WithStatement\", {\n visitor: [\"object\", \"body\"],\n aliases: [\"Statement\"],\n fields: {\n object: {\n validate: assertNodeType(\"Expression\"),\n },\n body: {\n validate: assertNodeType(\"Statement\"),\n },\n },\n});\n\n// --- ES2015 ---\ndefineType(\"AssignmentPattern\", {\n visitor: [\"left\", \"right\", \"decorators\" /* for legacy param decorators */],\n builder: [\"left\", \"right\"],\n aliases: process.env.BABEL_8_BREAKING\n ? [\"FunctionParameter\", \"Pattern\", \"PatternLike\"]\n : [\"FunctionParameter\", \"Pattern\", \"PatternLike\", \"LVal\"],\n fields: {\n ...patternLikeCommon(),\n left: {\n validate: assertNodeType(\n \"Identifier\",\n \"ObjectPattern\",\n \"ArrayPattern\",\n \"MemberExpression\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n ),\n },\n right: {\n validate: assertNodeType(\"Expression\"),\n },\n // For TypeScript\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ArrayPattern\", {\n visitor: [\"elements\", \"typeAnnotation\"],\n builder: [\"elements\"],\n aliases: [\"FunctionParameter\", \"Pattern\", \"PatternLike\", \"LVal\"],\n fields: {\n ...patternLikeCommon(),\n elements: {\n validate: chain(\n assertValueType(\"array\"),\n assertEach(assertNodeOrValueType(\"null\", \"PatternLike\")),\n ),\n },\n },\n});\n\ndefineType(\"ArrowFunctionExpression\", {\n builder: [\"params\", \"body\", \"async\"],\n visitor: [\"typeParameters\", \"params\", \"predicate\", \"returnType\", \"body\"],\n aliases: [\n \"Scopable\",\n \"Function\",\n \"BlockParent\",\n \"FunctionParent\",\n \"Expression\",\n \"Pureish\",\n ],\n fields: {\n ...functionCommon(),\n ...functionTypeAnnotationCommon(),\n expression: {\n // https://github.com/babel/babylon/issues/505\n validate: assertValueType(\"boolean\"),\n },\n body: {\n validate: assertNodeType(\"BlockStatement\", \"Expression\"),\n },\n predicate: {\n validate: assertNodeType(\"DeclaredPredicate\", \"InferredPredicate\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ClassBody\", {\n visitor: [\"body\"],\n fields: {\n body: validateArrayOfType(\n \"ClassMethod\",\n \"ClassPrivateMethod\",\n \"ClassProperty\",\n \"ClassPrivateProperty\",\n \"ClassAccessorProperty\",\n \"TSDeclareMethod\",\n \"TSIndexSignature\",\n \"StaticBlock\",\n ),\n },\n});\n\ndefineType(\"ClassExpression\", {\n builder: [\"id\", \"superClass\", \"body\", \"decorators\"],\n visitor: [\n \"decorators\",\n \"id\",\n \"typeParameters\",\n \"superClass\",\n process.env.BABEL_8_BREAKING ? \"superTypeArguments\" : \"superTypeParameters\",\n \"mixins\",\n \"implements\",\n \"body\",\n ],\n aliases: [\"Scopable\", \"Class\", \"Expression\"],\n fields: {\n id: {\n validate: assertNodeType(\"Identifier\"),\n optional: true,\n },\n typeParameters: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\n \"TypeParameterDeclaration\",\n \"TSTypeParameterDeclaration\",\n )\n : assertNodeType(\n \"TypeParameterDeclaration\",\n \"TSTypeParameterDeclaration\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"Noop\",\n ),\n optional: true,\n },\n body: {\n validate: assertNodeType(\"ClassBody\"),\n },\n superClass: {\n optional: true,\n validate: assertNodeType(\"Expression\"),\n },\n [process.env.BABEL_8_BREAKING\n ? \"superTypeArguments\"\n : \"superTypeParameters\"]: {\n validate: assertNodeType(\n \"TypeParameterInstantiation\",\n \"TSTypeParameterInstantiation\",\n ),\n optional: true,\n },\n implements: {\n validate: arrayOfType(\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n process.env.BABEL_8_BREAKING\n ? \"TSClassImplements\"\n : \"TSExpressionWithTypeArguments\",\n \"ClassImplements\",\n ),\n optional: true,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n mixins: {\n validate: assertNodeType(\"InterfaceExtends\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ClassDeclaration\", {\n inherits: \"ClassExpression\",\n aliases: [\"Scopable\", \"Class\", \"Statement\", \"Declaration\"],\n fields: {\n id: {\n validate: assertNodeType(\"Identifier\"),\n // The id may be omitted if this is the child of an\n // ExportDefaultDeclaration.\n optional: true,\n },\n typeParameters: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\n \"TypeParameterDeclaration\",\n \"TSTypeParameterDeclaration\",\n )\n : assertNodeType(\n \"TypeParameterDeclaration\",\n \"TSTypeParameterDeclaration\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"Noop\",\n ),\n optional: true,\n },\n body: {\n validate: assertNodeType(\"ClassBody\"),\n },\n superClass: {\n optional: true,\n validate: assertNodeType(\"Expression\"),\n },\n [process.env.BABEL_8_BREAKING\n ? \"superTypeArguments\"\n : \"superTypeParameters\"]: {\n validate: assertNodeType(\n \"TypeParameterInstantiation\",\n \"TSTypeParameterInstantiation\",\n ),\n optional: true,\n },\n implements: {\n validate: arrayOfType(\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n process.env.BABEL_8_BREAKING\n ? \"TSClassImplements\"\n : \"TSExpressionWithTypeArguments\",\n \"ClassImplements\",\n ),\n optional: true,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n mixins: {\n validate: assertNodeType(\"InterfaceExtends\"),\n optional: true,\n },\n declare: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n abstract: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n },\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? undefined\n : (function () {\n const identifier = assertNodeType(\"Identifier\");\n return function (parent, key, node) {\n if (!is(\"ExportDefaultDeclaration\", parent)) {\n identifier(node, \"id\", node.id);\n }\n };\n })(),\n});\n\nexport const importAttributes = {\n attributes: {\n optional: true,\n validate: arrayOfType(\"ImportAttribute\"),\n },\n};\nif (!process.env.BABEL_8_BREAKING) {\n // @ts-expect-error (Babel 7 only)\n importAttributes.assertions = {\n deprecated: true,\n optional: true,\n validate: arrayOfType(\"ImportAttribute\"),\n };\n}\n\ndefineType(\"ExportAllDeclaration\", {\n builder: [\"source\", \"attributes\"],\n visitor: [\"source\", \"attributes\", \"assertions\"],\n aliases: [\n \"Statement\",\n \"Declaration\",\n \"ImportOrExportDeclaration\",\n \"ExportDeclaration\",\n ],\n fields: {\n source: {\n validate: assertNodeType(\"StringLiteral\"),\n },\n exportKind: validateOptional(assertOneOf(\"type\", \"value\")),\n ...importAttributes,\n },\n});\n\ndefineType(\"ExportDefaultDeclaration\", {\n visitor: [\"declaration\"],\n aliases: [\n \"Statement\",\n \"Declaration\",\n \"ImportOrExportDeclaration\",\n \"ExportDeclaration\",\n ],\n fields: {\n declaration: validateType(\n \"TSDeclareFunction\",\n \"FunctionDeclaration\",\n \"ClassDeclaration\",\n \"Expression\",\n ),\n exportKind: validateOptional(assertOneOf(\"value\")),\n },\n});\n\ndefineType(\"ExportNamedDeclaration\", {\n builder: [\"declaration\", \"specifiers\", \"source\", \"attributes\"],\n visitor: process.env.BABEL_8_BREAKING\n ? [\"declaration\", \"specifiers\", \"source\", \"attributes\"]\n : [\"declaration\", \"specifiers\", \"source\", \"attributes\", \"assertions\"],\n aliases: [\n \"Statement\",\n \"Declaration\",\n \"ImportOrExportDeclaration\",\n \"ExportDeclaration\",\n ],\n fields: {\n declaration: {\n optional: true,\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? chain(\n assertNodeType(\"Declaration\"),\n Object.assign(\n function (node: t.ExportNamedDeclaration, key, val) {\n // This validator isn't put at the top level because we can run it\n // even if this node doesn't have a parent.\n\n if (val && node.specifiers.length) {\n throw new TypeError(\n \"Only declaration or specifiers is allowed on ExportNamedDeclaration\",\n );\n }\n\n // This validator isn't put at the top level because we can run it\n // even if this node doesn't have a parent.\n\n if (val && node.source) {\n throw new TypeError(\n \"Cannot export a declaration from a source\",\n );\n }\n } satisfies ValidatorImpl,\n { oneOfNodeTypes: [\"Declaration\"] as const },\n ) satisfies ValidatorOneOfNodeTypes,\n )\n : assertNodeType(\"Declaration\"),\n },\n ...importAttributes,\n specifiers: {\n default: [],\n validate: arrayOf(\n (function () {\n const sourced = assertNodeType(\n \"ExportSpecifier\",\n \"ExportDefaultSpecifier\",\n \"ExportNamespaceSpecifier\",\n );\n const sourceless = assertNodeType(\"ExportSpecifier\");\n\n if (\n !process.env.BABEL_8_BREAKING &&\n !process.env.BABEL_TYPES_8_BREAKING\n )\n return sourced;\n\n return Object.assign(\n function (node: t.ExportNamedDeclaration, key, val) {\n const validator = node.source ? sourced : sourceless;\n validator(node, key, val);\n } satisfies ValidatorImpl,\n {\n oneOfNodeTypes: [\n \"ExportSpecifier\",\n \"ExportDefaultSpecifier\",\n \"ExportNamespaceSpecifier\",\n ] as const,\n },\n ) satisfies ValidatorOneOfNodeTypes;\n })(),\n ),\n },\n source: {\n validate: assertNodeType(\"StringLiteral\"),\n optional: true,\n },\n exportKind: validateOptional(assertOneOf(\"type\", \"value\")),\n },\n});\n\ndefineType(\"ExportSpecifier\", {\n visitor: [\"local\", \"exported\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n local: {\n validate: assertNodeType(\"Identifier\"),\n },\n exported: {\n validate: assertNodeType(\"Identifier\", \"StringLiteral\"),\n },\n exportKind: {\n // And TypeScript's \"export { type foo } from\"\n validate: assertOneOf(\"type\", \"value\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ForOfStatement\", {\n visitor: [\"left\", \"right\", \"body\"],\n builder: [\"left\", \"right\", \"body\", \"await\"],\n aliases: [\n \"Scopable\",\n \"Statement\",\n \"For\",\n \"BlockParent\",\n \"Loop\",\n \"ForXStatement\",\n ],\n fields: {\n left: {\n validate: (function () {\n if (\n !process.env.BABEL_8_BREAKING &&\n !process.env.BABEL_TYPES_8_BREAKING\n ) {\n return assertNodeType(\"VariableDeclaration\", \"LVal\");\n }\n\n const declaration = assertNodeType(\"VariableDeclaration\");\n const lval = assertNodeType(\n \"Identifier\",\n \"MemberExpression\",\n \"ArrayPattern\",\n \"ObjectPattern\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n );\n\n return Object.assign(\n function (node, key, val) {\n if (is(\"VariableDeclaration\", val)) {\n declaration(node, key, val);\n } else {\n lval(node, key, val);\n }\n } satisfies ValidatorImpl,\n {\n oneOfNodeTypes: [\n \"VariableDeclaration\",\n \"Identifier\",\n \"MemberExpression\",\n \"ArrayPattern\",\n \"ObjectPattern\",\n \"TSAsExpression\",\n \"TSSatisfiesExpression\",\n \"TSTypeAssertion\",\n \"TSNonNullExpression\",\n ] as const,\n },\n ) satisfies ValidatorOneOfNodeTypes;\n })(),\n },\n right: {\n validate: assertNodeType(\"Expression\"),\n },\n body: {\n validate: assertNodeType(\"Statement\"),\n },\n await: {\n default: false,\n },\n },\n});\n\ndefineType(\"ImportDeclaration\", {\n builder: [\"specifiers\", \"source\", \"attributes\"],\n visitor: process.env.BABEL_8_BREAKING\n ? [\"specifiers\", \"source\", \"attributes\"]\n : [\"specifiers\", \"source\", \"attributes\", \"assertions\"],\n aliases: [\"Statement\", \"Declaration\", \"ImportOrExportDeclaration\"],\n fields: {\n ...importAttributes,\n module: {\n optional: true,\n validate: assertValueType(\"boolean\"),\n },\n phase: {\n default: null,\n validate: assertOneOf(\"source\", \"defer\"),\n },\n specifiers: validateArrayOfType(\n \"ImportSpecifier\",\n \"ImportDefaultSpecifier\",\n \"ImportNamespaceSpecifier\",\n ),\n source: {\n validate: assertNodeType(\"StringLiteral\"),\n },\n importKind: {\n // Handle TypeScript/Flowtype's extension \"import type foo from\"\n // TypeScript doesn't support typeof\n validate: assertOneOf(\"type\", \"typeof\", \"value\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ImportDefaultSpecifier\", {\n visitor: [\"local\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n local: {\n validate: assertNodeType(\"Identifier\"),\n },\n },\n});\n\ndefineType(\"ImportNamespaceSpecifier\", {\n visitor: [\"local\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n local: {\n validate: assertNodeType(\"Identifier\"),\n },\n },\n});\n\ndefineType(\"ImportSpecifier\", {\n visitor: [\"imported\", \"local\"],\n builder: [\"local\", \"imported\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n local: {\n validate: assertNodeType(\"Identifier\"),\n },\n imported: {\n validate: assertNodeType(\"Identifier\", \"StringLiteral\"),\n },\n importKind: {\n // Handle Flowtype's extension \"import {typeof foo} from\"\n // And TypeScript's \"import { type foo } from\"\n validate: assertOneOf(\"type\", \"typeof\", \"value\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ImportExpression\", {\n visitor: [\"source\", \"options\"],\n aliases: [\"Expression\"],\n fields: {\n phase: {\n default: null,\n validate: assertOneOf(\"source\", \"defer\"),\n },\n source: {\n validate: assertNodeType(\"Expression\"),\n },\n options: {\n validate: assertNodeType(\"Expression\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"MetaProperty\", {\n visitor: [\"meta\", \"property\"],\n aliases: [\"Expression\"],\n fields: {\n meta: {\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? chain(\n assertNodeType(\"Identifier\"),\n Object.assign(\n function (node: t.MetaProperty, key, val) {\n let property;\n switch (val.name) {\n case \"function\":\n property = \"sent\";\n break;\n case \"new\":\n property = \"target\";\n break;\n case \"import\":\n property = \"meta\";\n break;\n }\n if (!is(\"Identifier\", node.property, { name: property })) {\n throw new TypeError(\"Unrecognised MetaProperty\");\n }\n } satisfies ValidatorImpl,\n { oneOfNodeTypes: [\"Identifier\"] as const },\n ) satisfies ValidatorOneOfNodeTypes,\n )\n : assertNodeType(\"Identifier\"),\n },\n property: {\n validate: assertNodeType(\"Identifier\"),\n },\n },\n});\n\nexport const classMethodOrPropertyCommon = () => ({\n abstract: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n accessibility: {\n validate: assertOneOf(\"public\", \"private\", \"protected\"),\n optional: true,\n },\n static: {\n default: false,\n },\n override: {\n default: false,\n },\n computed: {\n default: false,\n },\n optional: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n key: {\n validate: chain(\n (function () {\n const normal = assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n );\n const computed = assertNodeType(\"Expression\");\n\n return function (\n node: Extract<t.Node, { computed: boolean }>,\n key,\n val,\n ) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n } satisfies ValidatorImpl;\n })(),\n assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n \"Expression\",\n ),\n ),\n },\n});\n\nexport const classMethodOrDeclareMethodCommon = () => ({\n ...functionCommon(),\n ...classMethodOrPropertyCommon(),\n params: validateArrayOfType(\"FunctionParameter\", \"TSParameterProperty\"),\n kind: {\n validate: assertOneOf(\"get\", \"set\", \"method\", \"constructor\"),\n default: \"method\",\n },\n access: {\n validate: chain(\n assertValueType(\"string\"),\n assertOneOf(\"public\", \"private\", \"protected\"),\n ),\n optional: true,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n});\n\ndefineType(\"ClassMethod\", {\n aliases: [\"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\"],\n builder: [\n \"kind\",\n \"key\",\n \"params\",\n \"body\",\n \"computed\",\n \"static\",\n \"generator\",\n \"async\",\n ],\n visitor: [\n \"decorators\",\n \"key\",\n \"typeParameters\",\n \"params\",\n \"returnType\",\n \"body\",\n ],\n ...classMethodOrPropertyUnionShapeCommon(),\n fields: {\n ...classMethodOrDeclareMethodCommon(),\n ...functionTypeAnnotationCommon(),\n body: {\n validate: assertNodeType(\"BlockStatement\"),\n },\n },\n});\n\ndefineType(\"ObjectPattern\", {\n visitor: [\n \"decorators\" /* for legacy param decorators */,\n \"properties\",\n \"typeAnnotation\",\n ],\n builder: [\"properties\"],\n aliases: [\"FunctionParameter\", \"Pattern\", \"PatternLike\", \"LVal\"],\n fields: {\n ...patternLikeCommon(),\n properties: validateArrayOfType(\"RestElement\", \"ObjectProperty\"),\n },\n});\n\ndefineType(\"SpreadElement\", {\n visitor: [\"argument\"],\n aliases: [\"UnaryLike\"],\n deprecatedAlias: \"SpreadProperty\",\n fields: {\n argument: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\n \"Super\",\n process.env.BABEL_8_BREAKING\n ? undefined\n : {\n aliases: [\"Expression\"],\n },\n);\n\ndefineType(\"TaggedTemplateExpression\", {\n visitor: process.env.BABEL_8_BREAKING\n ? [\"tag\", \"typeArguments\", \"quasi\"]\n : [\"tag\", \"typeParameters\", \"quasi\"],\n builder: [\"tag\", \"quasi\"],\n aliases: [\"Expression\"],\n fields: {\n tag: {\n validate: assertNodeType(\"Expression\"),\n },\n quasi: {\n validate: assertNodeType(\"TemplateLiteral\"),\n },\n [process.env.BABEL_8_BREAKING ? \"typeArguments\" : \"typeParameters\"]: {\n validate: assertNodeType(\n \"TypeParameterInstantiation\",\n \"TSTypeParameterInstantiation\",\n ),\n optional: true,\n },\n },\n});\n\ndefineType(\"TemplateElement\", {\n builder: [\"value\", \"tail\"],\n fields: {\n value: {\n validate: chain(\n assertShape({\n raw: {\n validate: assertValueType(\"string\"),\n },\n cooked: {\n validate: assertValueType(\"string\"),\n optional: true,\n },\n }),\n function templateElementCookedValidator(node: t.TemplateElement) {\n const raw = node.value.raw;\n\n let unterminatedCalled = false;\n\n const error = () => {\n // unreachable\n throw new Error(\"Internal @babel/types error.\");\n };\n const { str, firstInvalidLoc } = readStringContents(\n \"template\",\n raw,\n 0,\n 0,\n 0,\n {\n unterminated() {\n unterminatedCalled = true;\n },\n strictNumericEscape: error,\n invalidEscapeSequence: error,\n numericSeparatorInEscapeSequence: error,\n unexpectedNumericSeparator: error,\n invalidDigit: error,\n invalidCodePoint: error,\n },\n );\n if (!unterminatedCalled) throw new Error(\"Invalid raw\");\n\n node.value.cooked = firstInvalidLoc ? null : str;\n },\n ),\n },\n tail: {\n default: false,\n },\n },\n});\n\ndefineType(\"TemplateLiteral\", {\n visitor: [\"quasis\", \"expressions\"],\n aliases: [\"Expression\", \"Literal\"],\n fields: {\n quasis: validateArrayOfType(\"TemplateElement\"),\n expressions: {\n validate: chain(\n assertValueType(\"array\"),\n assertEach(\n assertNodeType(\n \"Expression\",\n // For TypeScript template literal types\n \"TSType\",\n ),\n ),\n function (node: t.TemplateLiteral, key, val) {\n if (node.quasis.length !== val.length + 1) {\n throw new TypeError(\n `Number of ${\n node.type\n } quasis should be exactly one more than the number of expressions.\\nExpected ${\n val.length + 1\n } quasis but got ${node.quasis.length}`,\n );\n }\n } satisfies ValidatorImpl,\n ),\n },\n },\n});\n\ndefineType(\"YieldExpression\", {\n builder: [\"argument\", \"delegate\"],\n visitor: [\"argument\"],\n aliases: [\"Expression\", \"Terminatorless\"],\n fields: {\n delegate: {\n validate:\n process.env.BABEL_8_BREAKING || process.env.BABEL_TYPES_8_BREAKING\n ? chain(\n assertValueType(\"boolean\"),\n Object.assign(\n function (node: t.YieldExpression, key, val) {\n if (val && !node.argument) {\n throw new TypeError(\n \"Property delegate of YieldExpression cannot be true if there is no argument\",\n );\n }\n } satisfies ValidatorImpl,\n { type: \"boolean\" as const },\n ) satisfies ValidatorType,\n )\n : assertValueType(\"boolean\"),\n default: false,\n },\n argument: {\n optional: true,\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\n// --- ES2017 ---\ndefineType(\"AwaitExpression\", {\n builder: [\"argument\"],\n visitor: [\"argument\"],\n aliases: [\"Expression\", \"Terminatorless\"],\n fields: {\n argument: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\n// --- ES2019 ---\ndefineType(\"Import\", {\n aliases: [\"Expression\"],\n});\n\n// --- ES2020 ---\ndefineType(\"BigIntLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: process.env.BABEL_8_BREAKING\n ? assertValueType(\"bigint\")\n : assertValueType(\"string\"),\n },\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"],\n});\n\ndefineType(\"ExportNamespaceSpecifier\", {\n visitor: [\"exported\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n exported: {\n validate: assertNodeType(\"Identifier\"),\n },\n },\n});\n\ndefineType(\"OptionalMemberExpression\", {\n builder: [\"object\", \"property\", \"computed\", \"optional\"],\n visitor: [\"object\", \"property\"],\n // todo: Add OptionalMemberExpression to LVal when optional-chaining-assign reaches stage 4\n aliases: [\"Expression\"],\n fields: {\n object: {\n validate: assertNodeType(\"Expression\"),\n },\n property: {\n validate: (function () {\n const normal = assertNodeType(\"Identifier\");\n const computed = assertNodeType(\"Expression\");\n\n const validator: ValidatorOneOfNodeTypes = Object.assign(\n function (node: t.OptionalMemberExpression, key, val) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n } satisfies ValidatorImpl,\n // todo(ts): can be discriminated union by `computed` property\n { oneOfNodeTypes: [\"Expression\", \"Identifier\"] as const },\n );\n return validator;\n })(),\n },\n computed: {\n default: false,\n },\n optional: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? assertValueType(\"boolean\")\n : chain(assertValueType(\"boolean\"), assertOptionalChainStart()),\n },\n },\n});\n\ndefineType(\"OptionalCallExpression\", {\n visitor: process.env.BABEL_8_BREAKING\n ? [\"callee\", \"typeArguments\", \"arguments\"]\n : [\"callee\", \"typeParameters\", \"typeArguments\", \"arguments\"],\n builder: [\"callee\", \"arguments\", \"optional\"],\n aliases: [\"Expression\"],\n fields: {\n callee: {\n validate: assertNodeType(\"Expression\"),\n },\n arguments: validateArrayOfType(\n \"Expression\",\n \"SpreadElement\",\n \"ArgumentPlaceholder\",\n ),\n optional: {\n validate:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? assertValueType(\"boolean\")\n : chain(assertValueType(\"boolean\"), assertOptionalChainStart()),\n },\n typeArguments: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\n \"TypeParameterInstantiation\",\n \"TSTypeParameterInstantiation\",\n )\n : assertNodeType(\"TypeParameterInstantiation\"),\n optional: true,\n },\n ...(process.env.BABEL_8_BREAKING\n ? {}\n : {\n typeParameters: {\n validate: assertNodeType(\"TSTypeParameterInstantiation\"),\n optional: true,\n },\n }),\n },\n});\n\n// --- ES2022 ---\ndefineType(\"ClassProperty\", {\n visitor: [\"decorators\", \"variance\", \"key\", \"typeAnnotation\", \"value\"],\n builder: [\n \"key\",\n \"value\",\n \"typeAnnotation\",\n \"decorators\",\n \"computed\",\n \"static\",\n ],\n aliases: [\"Property\"],\n ...classMethodOrPropertyUnionShapeCommon(),\n fields: {\n ...classMethodOrPropertyCommon(),\n value: {\n validate: assertNodeType(\"Expression\"),\n optional: true,\n },\n definite: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n typeAnnotation: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\"TypeAnnotation\", \"TSTypeAnnotation\")\n : assertNodeType(\n \"TypeAnnotation\",\n \"TSTypeAnnotation\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"Noop\",\n ),\n optional: true,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n readonly: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n declare: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n variance: {\n validate: assertNodeType(\"Variance\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ClassAccessorProperty\", {\n visitor: [\"decorators\", \"key\", \"typeAnnotation\", \"value\"],\n builder: [\n \"key\",\n \"value\",\n \"typeAnnotation\",\n \"decorators\",\n \"computed\",\n \"static\",\n ],\n aliases: [\"Property\", \"Accessor\"],\n ...classMethodOrPropertyUnionShapeCommon(true),\n fields: {\n ...classMethodOrPropertyCommon(),\n key: {\n validate: chain(\n (function () {\n const normal = assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n \"PrivateName\",\n );\n const computed = assertNodeType(\"Expression\");\n\n return function (\n node: t.ClassAccessorProperty,\n key: string,\n val: any,\n ) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n } satisfies ValidatorImpl;\n })(),\n assertNodeType(\n \"Identifier\",\n \"StringLiteral\",\n \"NumericLiteral\",\n \"BigIntLiteral\",\n \"Expression\",\n \"PrivateName\",\n ),\n ),\n },\n value: {\n validate: assertNodeType(\"Expression\"),\n optional: true,\n },\n definite: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n typeAnnotation: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\"TypeAnnotation\", \"TSTypeAnnotation\")\n : assertNodeType(\n \"TypeAnnotation\",\n \"TSTypeAnnotation\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"Noop\",\n ),\n optional: true,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n readonly: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n declare: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n variance: {\n validate: assertNodeType(\"Variance\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ClassPrivateProperty\", {\n visitor: [\"decorators\", \"variance\", \"key\", \"typeAnnotation\", \"value\"],\n builder: [\"key\", \"value\", \"decorators\", \"static\"],\n aliases: [\"Property\", \"Private\"],\n fields: {\n key: {\n validate: assertNodeType(\"PrivateName\"),\n },\n value: {\n validate: assertNodeType(\"Expression\"),\n optional: true,\n },\n typeAnnotation: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\"TypeAnnotation\", \"TSTypeAnnotation\")\n : assertNodeType(\n \"TypeAnnotation\",\n \"TSTypeAnnotation\",\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n \"Noop\",\n ),\n optional: true,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n static: {\n validate: assertValueType(\"boolean\"),\n default: false,\n },\n readonly: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n optional: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n definite: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n variance: {\n validate: assertNodeType(\"Variance\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"ClassPrivateMethod\", {\n builder: [\"kind\", \"key\", \"params\", \"body\", \"static\"],\n visitor: [\n \"decorators\",\n \"key\",\n \"typeParameters\",\n \"params\",\n \"returnType\",\n \"body\",\n ],\n aliases: [\n \"Function\",\n \"Scopable\",\n \"BlockParent\",\n \"FunctionParent\",\n \"Method\",\n \"Private\",\n ],\n // `computed` is not included in the `builder`\n // ...classMethodOrPropertyUnionShapeCommon(),\n fields: {\n ...classMethodOrDeclareMethodCommon(),\n ...functionTypeAnnotationCommon(),\n kind: {\n validate: assertOneOf(\"get\", \"set\", \"method\"),\n default: \"method\",\n },\n key: {\n validate: assertNodeType(\"PrivateName\"),\n },\n body: {\n validate: assertNodeType(\"BlockStatement\"),\n },\n },\n});\n\ndefineType(\"PrivateName\", {\n visitor: [\"id\"],\n aliases: [\"Private\"],\n fields: {\n id: {\n validate: assertNodeType(\"Identifier\"),\n },\n },\n});\n\ndefineType(\"StaticBlock\", {\n visitor: [\"body\"],\n fields: {\n body: validateArrayOfType(\"Statement\"),\n },\n aliases: [\"Scopable\", \"BlockParent\", \"FunctionParent\"],\n});\n\n// --- ES2025 ---\ndefineType(\"ImportAttribute\", {\n visitor: [\"key\", \"value\"],\n fields: {\n key: {\n validate: assertNodeType(\"Identifier\", \"StringLiteral\"),\n },\n value: {\n validate: assertNodeType(\"StringLiteral\"),\n },\n },\n});\n","import { importAttributes } from \"./core.ts\";\nimport {\n defineAliasedType,\n arrayOfType,\n assertOneOf,\n assertValueType,\n validate,\n validateArrayOfType,\n validateOptional,\n validateOptionalType,\n validateType,\n} from \"./utils.ts\";\n\nconst defineType = defineAliasedType(\"Flow\");\n\nconst defineInterfaceishType = (\n name: \"DeclareClass\" | \"DeclareInterface\" | \"InterfaceDeclaration\",\n) => {\n const isDeclareClass = name === \"DeclareClass\";\n\n defineType(name, {\n builder: [\"id\", \"typeParameters\", \"extends\", \"body\"],\n visitor: [\n \"id\",\n \"typeParameters\",\n \"extends\",\n ...(isDeclareClass ? [\"mixins\", \"implements\"] : []),\n \"body\",\n ],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n id: validateType(\"Identifier\"),\n typeParameters: validateOptionalType(\"TypeParameterDeclaration\"),\n extends: validateOptional(arrayOfType(\"InterfaceExtends\")),\n ...(isDeclareClass\n ? {\n mixins: validateOptional(arrayOfType(\"InterfaceExtends\")),\n implements: validateOptional(arrayOfType(\"ClassImplements\")),\n }\n : {}),\n body: validateType(\"ObjectTypeAnnotation\"),\n },\n });\n};\n\ndefineType(\"AnyTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"ArrayTypeAnnotation\", {\n visitor: [\"elementType\"],\n aliases: [\"FlowType\"],\n fields: {\n elementType: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"BooleanTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"BooleanLiteralTypeAnnotation\", {\n builder: [\"value\"],\n aliases: [\"FlowType\"],\n fields: {\n value: validate(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"NullLiteralTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"ClassImplements\", {\n visitor: [\"id\", \"typeParameters\"],\n fields: {\n id: validateType(\"Identifier\"),\n typeParameters: validateOptionalType(\"TypeParameterInstantiation\"),\n },\n});\n\ndefineInterfaceishType(\"DeclareClass\");\n\ndefineType(\"DeclareFunction\", {\n builder: [\"id\"],\n visitor: [\"id\", \"predicate\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n id: validateType(\"Identifier\"),\n predicate: validateOptionalType(\"DeclaredPredicate\"),\n },\n});\n\ndefineInterfaceishType(\"DeclareInterface\");\n\ndefineType(\"DeclareModule\", {\n builder: [\"id\", \"body\", \"kind\"],\n visitor: [\"id\", \"body\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n id: validateType(\"Identifier\", \"StringLiteral\"),\n body: validateType(\"BlockStatement\"),\n kind: validateOptional(assertOneOf(\"CommonJS\", \"ES\")),\n },\n});\n\ndefineType(\"DeclareModuleExports\", {\n visitor: [\"typeAnnotation\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n typeAnnotation: validateType(\"TypeAnnotation\"),\n },\n});\n\ndefineType(\"DeclareTypeAlias\", {\n visitor: [\"id\", \"typeParameters\", \"right\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n id: validateType(\"Identifier\"),\n typeParameters: validateOptionalType(\"TypeParameterDeclaration\"),\n right: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"DeclareOpaqueType\", {\n visitor: [\"id\", \"typeParameters\", \"supertype\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n id: validateType(\"Identifier\"),\n typeParameters: validateOptionalType(\"TypeParameterDeclaration\"),\n supertype: validateOptionalType(\"FlowType\"),\n impltype: validateOptionalType(\"FlowType\"),\n },\n});\n\ndefineType(\"DeclareVariable\", {\n visitor: [\"id\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n id: validateType(\"Identifier\"),\n },\n});\n\ndefineType(\"DeclareExportDeclaration\", {\n visitor: [\"declaration\", \"specifiers\", \"source\", \"attributes\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n declaration: validateOptionalType(\"Flow\"),\n specifiers: validateOptional(\n arrayOfType(\"ExportSpecifier\", \"ExportNamespaceSpecifier\"),\n ),\n source: validateOptionalType(\"StringLiteral\"),\n default: validateOptional(assertValueType(\"boolean\")),\n ...importAttributes,\n },\n});\n\ndefineType(\"DeclareExportAllDeclaration\", {\n visitor: [\"source\", \"attributes\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n source: validateType(\"StringLiteral\"),\n exportKind: validateOptional(assertOneOf(\"type\", \"value\")),\n ...importAttributes,\n },\n});\n\ndefineType(\"DeclaredPredicate\", {\n visitor: [\"value\"],\n aliases: [\"FlowPredicate\"],\n fields: {\n value: validateType(\"Flow\"),\n },\n});\n\ndefineType(\"ExistsTypeAnnotation\", {\n aliases: [\"FlowType\"],\n});\n\ndefineType(\"FunctionTypeAnnotation\", {\n builder: [\"typeParameters\", \"params\", \"rest\", \"returnType\"],\n visitor: [\"typeParameters\", \"this\", \"params\", \"rest\", \"returnType\"],\n aliases: [\"FlowType\"],\n fields: {\n typeParameters: validateOptionalType(\"TypeParameterDeclaration\"),\n params: validateArrayOfType(\"FunctionTypeParam\"),\n rest: validateOptionalType(\"FunctionTypeParam\"),\n this: validateOptionalType(\"FunctionTypeParam\"),\n returnType: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"FunctionTypeParam\", {\n visitor: [\"name\", \"typeAnnotation\"],\n fields: {\n name: validateOptionalType(\"Identifier\"),\n typeAnnotation: validateType(\"FlowType\"),\n optional: validateOptional(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"GenericTypeAnnotation\", {\n visitor: [\"id\", \"typeParameters\"],\n aliases: [\"FlowType\"],\n fields: {\n id: validateType(\"Identifier\", \"QualifiedTypeIdentifier\"),\n typeParameters: validateOptionalType(\"TypeParameterInstantiation\"),\n },\n});\n\ndefineType(\"InferredPredicate\", {\n aliases: [\"FlowPredicate\"],\n});\n\ndefineType(\"InterfaceExtends\", {\n visitor: [\"id\", \"typeParameters\"],\n fields: {\n id: validateType(\"Identifier\", \"QualifiedTypeIdentifier\"),\n typeParameters: validateOptionalType(\"TypeParameterInstantiation\"),\n },\n});\n\ndefineInterfaceishType(\"InterfaceDeclaration\");\n\ndefineType(\"InterfaceTypeAnnotation\", {\n visitor: [\"extends\", \"body\"],\n aliases: [\"FlowType\"],\n fields: {\n extends: validateOptional(arrayOfType(\"InterfaceExtends\")),\n body: validateType(\"ObjectTypeAnnotation\"),\n },\n});\n\ndefineType(\"IntersectionTypeAnnotation\", {\n visitor: [\"types\"],\n aliases: [\"FlowType\"],\n fields: {\n types: validate(arrayOfType(\"FlowType\")),\n },\n});\n\ndefineType(\"MixedTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"EmptyTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"NullableTypeAnnotation\", {\n visitor: [\"typeAnnotation\"],\n aliases: [\"FlowType\"],\n fields: {\n typeAnnotation: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"NumberLiteralTypeAnnotation\", {\n builder: [\"value\"],\n aliases: [\"FlowType\"],\n fields: {\n value: validate(assertValueType(\"number\")),\n },\n});\n\ndefineType(\"NumberTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"ObjectTypeAnnotation\", {\n visitor: [\"properties\", \"indexers\", \"callProperties\", \"internalSlots\"],\n aliases: [\"FlowType\"],\n builder: [\n \"properties\",\n \"indexers\",\n \"callProperties\",\n \"internalSlots\",\n \"exact\",\n ],\n fields: {\n properties: validate(\n arrayOfType(\"ObjectTypeProperty\", \"ObjectTypeSpreadProperty\"),\n ),\n indexers: {\n validate: arrayOfType(\"ObjectTypeIndexer\"),\n optional: process.env.BABEL_8_BREAKING ? false : true,\n default: [],\n },\n callProperties: {\n validate: arrayOfType(\"ObjectTypeCallProperty\"),\n optional: process.env.BABEL_8_BREAKING ? false : true,\n default: [],\n },\n internalSlots: {\n validate: arrayOfType(\"ObjectTypeInternalSlot\"),\n optional: process.env.BABEL_8_BREAKING ? false : true,\n default: [],\n },\n exact: {\n validate: assertValueType(\"boolean\"),\n default: false,\n },\n // If the inexact flag is present then this is an object type, and not a\n // declare class, declare interface, or interface. If it is true, the\n // object uses ... to express that it is inexact.\n inexact: validateOptional(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"ObjectTypeInternalSlot\", {\n visitor: [\"id\", \"value\"],\n builder: [\"id\", \"value\", \"optional\", \"static\", \"method\"],\n aliases: [\"UserWhitespacable\"],\n fields: {\n id: validateType(\"Identifier\"),\n value: validateType(\"FlowType\"),\n optional: validate(assertValueType(\"boolean\")),\n static: validate(assertValueType(\"boolean\")),\n method: validate(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"ObjectTypeCallProperty\", {\n visitor: [\"value\"],\n aliases: [\"UserWhitespacable\"],\n fields: {\n value: validateType(\"FlowType\"),\n static: validate(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"ObjectTypeIndexer\", {\n visitor: [\"variance\", \"id\", \"key\", \"value\"],\n builder: [\"id\", \"key\", \"value\", \"variance\"],\n aliases: [\"UserWhitespacable\"],\n fields: {\n id: validateOptionalType(\"Identifier\"),\n key: validateType(\"FlowType\"),\n value: validateType(\"FlowType\"),\n static: validate(assertValueType(\"boolean\")),\n variance: validateOptionalType(\"Variance\"),\n },\n});\n\ndefineType(\"ObjectTypeProperty\", {\n visitor: [\"key\", \"value\", \"variance\"],\n aliases: [\"UserWhitespacable\"],\n fields: {\n key: validateType(\"Identifier\", \"StringLiteral\"),\n value: validateType(\"FlowType\"),\n kind: validate(assertOneOf(\"init\", \"get\", \"set\")),\n static: validate(assertValueType(\"boolean\")),\n proto: validate(assertValueType(\"boolean\")),\n optional: validate(assertValueType(\"boolean\")),\n variance: validateOptionalType(\"Variance\"),\n method: validate(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"ObjectTypeSpreadProperty\", {\n visitor: [\"argument\"],\n aliases: [\"UserWhitespacable\"],\n fields: {\n argument: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"OpaqueType\", {\n visitor: [\"id\", \"typeParameters\", \"supertype\", \"impltype\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n id: validateType(\"Identifier\"),\n typeParameters: validateOptionalType(\"TypeParameterDeclaration\"),\n supertype: validateOptionalType(\"FlowType\"),\n impltype: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"QualifiedTypeIdentifier\", {\n visitor: [\"qualification\", \"id\"],\n builder: [\"id\", \"qualification\"],\n fields: {\n id: validateType(\"Identifier\"),\n qualification: validateType(\"Identifier\", \"QualifiedTypeIdentifier\"),\n },\n});\n\ndefineType(\"StringLiteralTypeAnnotation\", {\n builder: [\"value\"],\n aliases: [\"FlowType\"],\n fields: {\n value: validate(assertValueType(\"string\")),\n },\n});\n\ndefineType(\"StringTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"SymbolTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"ThisTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\ndefineType(\"TupleTypeAnnotation\", {\n visitor: [\"types\"],\n aliases: [\"FlowType\"],\n fields: {\n types: validate(arrayOfType(\"FlowType\")),\n },\n});\n\ndefineType(\"TypeofTypeAnnotation\", {\n visitor: [\"argument\"],\n aliases: [\"FlowType\"],\n fields: {\n argument: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"TypeAlias\", {\n visitor: [\"id\", \"typeParameters\", \"right\"],\n aliases: [\"FlowDeclaration\", \"Statement\", \"Declaration\"],\n fields: {\n id: validateType(\"Identifier\"),\n typeParameters: validateOptionalType(\"TypeParameterDeclaration\"),\n right: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"TypeAnnotation\", {\n visitor: [\"typeAnnotation\"],\n fields: {\n typeAnnotation: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"TypeCastExpression\", {\n visitor: [\"expression\", \"typeAnnotation\"],\n aliases: [\"ExpressionWrapper\", \"Expression\"],\n fields: {\n expression: validateType(\"Expression\"),\n typeAnnotation: validateType(\"TypeAnnotation\"),\n },\n});\n\ndefineType(\"TypeParameter\", {\n visitor: [\"bound\", \"default\", \"variance\"],\n fields: {\n name: validate(assertValueType(\"string\")),\n bound: validateOptionalType(\"TypeAnnotation\"),\n default: validateOptionalType(\"FlowType\"),\n variance: validateOptionalType(\"Variance\"),\n },\n});\n\ndefineType(\"TypeParameterDeclaration\", {\n visitor: [\"params\"],\n fields: {\n params: validate(arrayOfType(\"TypeParameter\")),\n },\n});\n\ndefineType(\"TypeParameterInstantiation\", {\n visitor: [\"params\"],\n fields: {\n params: validate(arrayOfType(\"FlowType\")),\n },\n});\n\ndefineType(\"UnionTypeAnnotation\", {\n visitor: [\"types\"],\n aliases: [\"FlowType\"],\n fields: {\n types: validate(arrayOfType(\"FlowType\")),\n },\n});\n\ndefineType(\"Variance\", {\n builder: [\"kind\"],\n fields: {\n kind: validate(assertOneOf(\"minus\", \"plus\")),\n },\n});\n\ndefineType(\"VoidTypeAnnotation\", {\n aliases: [\"FlowType\", \"FlowBaseAnnotation\"],\n});\n\n// Enums\ndefineType(\"EnumDeclaration\", {\n aliases: [\"Statement\", \"Declaration\"],\n visitor: [\"id\", \"body\"],\n fields: {\n id: validateType(\"Identifier\"),\n body: validateType(\n \"EnumBooleanBody\",\n \"EnumNumberBody\",\n \"EnumStringBody\",\n \"EnumSymbolBody\",\n ),\n },\n});\n\ndefineType(\"EnumBooleanBody\", {\n aliases: [\"EnumBody\"],\n visitor: [\"members\"],\n fields: {\n explicitType: validate(assertValueType(\"boolean\")),\n members: validateArrayOfType(\"EnumBooleanMember\"),\n hasUnknownMembers: validate(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"EnumNumberBody\", {\n aliases: [\"EnumBody\"],\n visitor: [\"members\"],\n fields: {\n explicitType: validate(assertValueType(\"boolean\")),\n members: validateArrayOfType(\"EnumNumberMember\"),\n hasUnknownMembers: validate(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"EnumStringBody\", {\n aliases: [\"EnumBody\"],\n visitor: [\"members\"],\n fields: {\n explicitType: validate(assertValueType(\"boolean\")),\n members: validateArrayOfType(\"EnumStringMember\", \"EnumDefaultedMember\"),\n hasUnknownMembers: validate(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"EnumSymbolBody\", {\n aliases: [\"EnumBody\"],\n visitor: [\"members\"],\n fields: {\n members: validateArrayOfType(\"EnumDefaultedMember\"),\n hasUnknownMembers: validate(assertValueType(\"boolean\")),\n },\n});\n\ndefineType(\"EnumBooleanMember\", {\n aliases: [\"EnumMember\"],\n builder: [\"id\"],\n visitor: [\"id\", \"init\"],\n fields: {\n id: validateType(\"Identifier\"),\n init: validateType(\"BooleanLiteral\"),\n },\n});\n\ndefineType(\"EnumNumberMember\", {\n aliases: [\"EnumMember\"],\n visitor: [\"id\", \"init\"],\n fields: {\n id: validateType(\"Identifier\"),\n init: validateType(\"NumericLiteral\"),\n },\n});\n\ndefineType(\"EnumStringMember\", {\n aliases: [\"EnumMember\"],\n visitor: [\"id\", \"init\"],\n fields: {\n id: validateType(\"Identifier\"),\n init: validateType(\"StringLiteral\"),\n },\n});\n\ndefineType(\"EnumDefaultedMember\", {\n aliases: [\"EnumMember\"],\n visitor: [\"id\"],\n fields: {\n id: validateType(\"Identifier\"),\n },\n});\n\ndefineType(\"IndexedAccessType\", {\n visitor: [\"objectType\", \"indexType\"],\n aliases: [\"FlowType\"],\n fields: {\n objectType: validateType(\"FlowType\"),\n indexType: validateType(\"FlowType\"),\n },\n});\n\ndefineType(\"OptionalIndexedAccessType\", {\n visitor: [\"objectType\", \"indexType\"],\n aliases: [\"FlowType\"],\n fields: {\n objectType: validateType(\"FlowType\"),\n indexType: validateType(\"FlowType\"),\n optional: validate(assertValueType(\"boolean\")),\n },\n});\n","import {\n defineAliasedType,\n assertNodeType,\n assertValueType,\n validateArrayOfType,\n} from \"./utils.ts\";\n\nconst defineType = defineAliasedType(\"JSX\");\n\ndefineType(\"JSXAttribute\", {\n visitor: [\"name\", \"value\"],\n aliases: [\"Immutable\"],\n fields: {\n name: {\n validate: assertNodeType(\"JSXIdentifier\", \"JSXNamespacedName\"),\n },\n value: {\n optional: true,\n validate: assertNodeType(\n \"JSXElement\",\n \"JSXFragment\",\n \"StringLiteral\",\n \"JSXExpressionContainer\",\n ),\n },\n },\n});\n\ndefineType(\"JSXClosingElement\", {\n visitor: [\"name\"],\n aliases: [\"Immutable\"],\n fields: {\n name: {\n validate: assertNodeType(\n \"JSXIdentifier\",\n \"JSXMemberExpression\",\n \"JSXNamespacedName\",\n ),\n },\n },\n});\n\ndefineType(\"JSXElement\", {\n builder: process.env.BABEL_8_BREAKING\n ? [\"openingElement\", \"closingElement\", \"children\"]\n : [\"openingElement\", \"closingElement\", \"children\", \"selfClosing\"],\n visitor: [\"openingElement\", \"children\", \"closingElement\"],\n aliases: [\"Immutable\", \"Expression\"],\n fields: {\n openingElement: {\n validate: assertNodeType(\"JSXOpeningElement\"),\n },\n closingElement: {\n optional: true,\n validate: assertNodeType(\"JSXClosingElement\"),\n },\n children: validateArrayOfType(\n \"JSXText\",\n \"JSXExpressionContainer\",\n \"JSXSpreadChild\",\n \"JSXElement\",\n \"JSXFragment\",\n ),\n ...(process.env.BABEL_8_BREAKING\n ? {}\n : {\n selfClosing: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n }),\n },\n});\n\ndefineType(\"JSXEmptyExpression\", {});\n\ndefineType(\"JSXExpressionContainer\", {\n visitor: [\"expression\"],\n aliases: [\"Immutable\"],\n fields: {\n expression: {\n validate: assertNodeType(\"Expression\", \"JSXEmptyExpression\"),\n },\n },\n});\n\ndefineType(\"JSXSpreadChild\", {\n visitor: [\"expression\"],\n aliases: [\"Immutable\"],\n fields: {\n expression: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\"JSXIdentifier\", {\n builder: [\"name\"],\n fields: {\n name: {\n validate: assertValueType(\"string\"),\n },\n },\n});\n\ndefineType(\"JSXMemberExpression\", {\n visitor: [\"object\", \"property\"],\n fields: {\n object: {\n validate: assertNodeType(\"JSXMemberExpression\", \"JSXIdentifier\"),\n },\n property: {\n validate: assertNodeType(\"JSXIdentifier\"),\n },\n },\n});\n\ndefineType(\"JSXNamespacedName\", {\n visitor: [\"namespace\", \"name\"],\n fields: {\n namespace: {\n validate: assertNodeType(\"JSXIdentifier\"),\n },\n name: {\n validate: assertNodeType(\"JSXIdentifier\"),\n },\n },\n});\n\ndefineType(\"JSXOpeningElement\", {\n builder: [\"name\", \"attributes\", \"selfClosing\"],\n visitor: process.env.BABEL_8_BREAKING\n ? [\"name\", \"typeArguments\", \"attributes\"]\n : [\"name\", \"typeParameters\", \"typeArguments\", \"attributes\"],\n aliases: [\"Immutable\"],\n fields: {\n name: {\n validate: assertNodeType(\n \"JSXIdentifier\",\n \"JSXMemberExpression\",\n \"JSXNamespacedName\",\n ),\n },\n selfClosing: {\n default: false,\n },\n attributes: validateArrayOfType(\"JSXAttribute\", \"JSXSpreadAttribute\"),\n typeArguments: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\n \"TypeParameterInstantiation\",\n \"TSTypeParameterInstantiation\",\n )\n : assertNodeType(\"TypeParameterInstantiation\"),\n optional: true,\n },\n ...(process.env.BABEL_8_BREAKING\n ? {}\n : {\n typeParameters: {\n validate: assertNodeType(\"TSTypeParameterInstantiation\"),\n optional: true,\n },\n }),\n },\n});\n\ndefineType(\"JSXSpreadAttribute\", {\n visitor: [\"argument\"],\n fields: {\n argument: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\"JSXText\", {\n aliases: [\"Immutable\"],\n builder: [\"value\"],\n fields: {\n value: {\n validate: assertValueType(\"string\"),\n },\n },\n});\n\ndefineType(\"JSXFragment\", {\n builder: [\"openingFragment\", \"closingFragment\", \"children\"],\n visitor: [\"openingFragment\", \"children\", \"closingFragment\"],\n aliases: [\"Immutable\", \"Expression\"],\n fields: {\n openingFragment: {\n validate: assertNodeType(\"JSXOpeningFragment\"),\n },\n closingFragment: {\n validate: assertNodeType(\"JSXClosingFragment\"),\n },\n children: validateArrayOfType(\n \"JSXText\",\n \"JSXExpressionContainer\",\n \"JSXSpreadChild\",\n \"JSXElement\",\n \"JSXFragment\",\n ),\n },\n});\n\ndefineType(\"JSXOpeningFragment\", {\n aliases: [\"Immutable\"],\n});\n\ndefineType(\"JSXClosingFragment\", {\n aliases: [\"Immutable\"],\n});\n","import { ALIAS_KEYS } from \"./utils.ts\";\n\nexport const PLACEHOLDERS = [\n \"Identifier\",\n \"StringLiteral\",\n \"Expression\",\n \"Statement\",\n \"Declaration\",\n \"BlockStatement\",\n \"ClassBody\",\n \"Pattern\",\n] as const;\n\nexport const PLACEHOLDERS_ALIAS: Record<string, string[]> = {\n Declaration: [\"Statement\"],\n Pattern: [\"PatternLike\", \"LVal\"],\n};\n\nfor (const type of PLACEHOLDERS) {\n const alias = ALIAS_KEYS[type];\n if (alias?.length) PLACEHOLDERS_ALIAS[type] = alias;\n}\n\nexport const PLACEHOLDERS_FLIPPED_ALIAS: Record<string, string[]> = {};\n\nObject.keys(PLACEHOLDERS_ALIAS).forEach(type => {\n PLACEHOLDERS_ALIAS[type].forEach(alias => {\n if (!Object.hasOwn(PLACEHOLDERS_FLIPPED_ALIAS, alias)) {\n PLACEHOLDERS_FLIPPED_ALIAS[alias] = [];\n }\n PLACEHOLDERS_FLIPPED_ALIAS[alias].push(type);\n });\n});\n","import {\n defineAliasedType,\n assertNodeType,\n assertOneOf,\n assertValueType,\n} from \"./utils.ts\";\nimport { PLACEHOLDERS } from \"./placeholders.ts\";\nimport { patternLikeCommon } from \"./core.ts\";\n\nconst defineType = defineAliasedType(\"Miscellaneous\");\n\nif (!process.env.BABEL_8_BREAKING) {\n defineType(\"Noop\", {\n visitor: [],\n });\n}\n\ndefineType(\"Placeholder\", {\n visitor: [],\n builder: [\"expectedNode\", \"name\"],\n // aliases: [], defined in placeholders.js\n fields: {\n name: {\n validate: assertNodeType(\"Identifier\"),\n },\n expectedNode: {\n validate: assertOneOf(...PLACEHOLDERS),\n },\n ...patternLikeCommon(),\n },\n});\n\ndefineType(\"V8IntrinsicIdentifier\", {\n builder: [\"name\"],\n fields: {\n name: {\n validate: assertValueType(\"string\"),\n },\n },\n});\n","import defineType, {\n arrayOfType,\n assertNodeType,\n assertValueType,\n validateArrayOfType,\n type ValidatorOneOfNodeTypes,\n} from \"./utils.ts\";\n\ndefineType(\"ArgumentPlaceholder\", {});\n\ndefineType(\"BindExpression\", {\n visitor: [\"object\", \"callee\"],\n aliases: [\"Expression\"],\n fields:\n !process.env.BABEL_8_BREAKING && !process.env.BABEL_TYPES_8_BREAKING\n ? {\n object: {\n validate: Object.assign(() => {}, {\n oneOfNodeTypes: [\"Expression\"] as const,\n }) satisfies ValidatorOneOfNodeTypes,\n },\n callee: {\n validate: Object.assign(() => {}, {\n oneOfNodeTypes: [\"Expression\"] as const,\n }) satisfies ValidatorOneOfNodeTypes,\n },\n }\n : {\n object: {\n validate: assertNodeType(\"Expression\"),\n },\n callee: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\"Decorator\", {\n visitor: [\"expression\"],\n fields: {\n expression: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n});\n\ndefineType(\"DoExpression\", {\n visitor: [\"body\"],\n builder: [\"body\", \"async\"],\n aliases: [\"Expression\"],\n fields: {\n body: {\n validate: assertNodeType(\"BlockStatement\"),\n },\n async: {\n validate: assertValueType(\"boolean\"),\n default: false,\n },\n },\n});\n\ndefineType(\"ExportDefaultSpecifier\", {\n visitor: [\"exported\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n exported: {\n validate: assertNodeType(\"Identifier\"),\n },\n },\n});\n\nif (!process.env.BABEL_8_BREAKING) {\n defineType(\"RecordExpression\", {\n visitor: [\"properties\"],\n aliases: [\"Expression\"],\n fields: {\n properties: validateArrayOfType(\"ObjectProperty\", \"SpreadElement\"),\n },\n });\n\n defineType(\"TupleExpression\", {\n fields: {\n elements: {\n validate: arrayOfType(\"Expression\", \"SpreadElement\"),\n default: [],\n },\n },\n visitor: [\"elements\"],\n aliases: [\"Expression\"],\n });\n\n defineType(\"DecimalLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: assertValueType(\"string\"),\n },\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"],\n });\n}\n\n// https://github.com/tc39/proposal-js-module-blocks\ndefineType(\"ModuleExpression\", {\n visitor: [\"body\"],\n fields: {\n body: {\n validate: assertNodeType(\"Program\"),\n },\n },\n aliases: [\"Expression\"],\n});\n\n// https://github.com/tc39/proposal-pipeline-operator\n// https://github.com/js-choi/proposal-hack-pipes\ndefineType(\"TopicReference\", {\n aliases: [\"Expression\"],\n});\n\n// https://github.com/tc39/proposal-pipeline-operator\n// https://github.com/js-choi/proposal-smart-pipes\ndefineType(\"PipelineTopicExpression\", {\n builder: [\"expression\"],\n visitor: [\"expression\"],\n fields: {\n expression: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n aliases: [\"Expression\"],\n});\n\ndefineType(\"PipelineBareFunction\", {\n builder: [\"callee\"],\n visitor: [\"callee\"],\n fields: {\n callee: {\n validate: assertNodeType(\"Expression\"),\n },\n },\n aliases: [\"Expression\"],\n});\n\ndefineType(\"PipelinePrimaryTopicReference\", {\n aliases: [\"Expression\"],\n});\n\n// https://github.com/tc39/proposal-discard-binding\ndefineType(\"VoidPattern\", {\n aliases: [\"Pattern\", \"PatternLike\", \"FunctionParameter\"],\n});\n","import type * as t from \"../index.ts\";\nimport {\n defineAliasedType,\n arrayOfType,\n assertEach,\n assertNodeType,\n assertOneOf,\n assertValueType,\n chain,\n validate,\n validateArrayOfType,\n validateOptional,\n validateOptionalType,\n validateType,\n type ValidatorImpl,\n type ValidatorOneOfNodeTypes,\n} from \"./utils.ts\";\nimport {\n functionDeclarationCommon,\n classMethodOrDeclareMethodCommon,\n classMethodOrPropertyUnionShapeCommon,\n} from \"./core.ts\";\nimport is from \"../validators/is.ts\";\n\nconst defineType = defineAliasedType(\"TypeScript\");\n\nconst bool = assertValueType(\"boolean\");\n\nconst tSFunctionTypeAnnotationCommon = () => ({\n returnType: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\"TSTypeAnnotation\")\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n assertNodeType(\"TSTypeAnnotation\", \"Noop\"),\n optional: true,\n },\n typeParameters: {\n validate: process.env.BABEL_8_BREAKING\n ? assertNodeType(\"TSTypeParameterDeclaration\")\n : // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n assertNodeType(\"TSTypeParameterDeclaration\", \"Noop\"),\n optional: true,\n },\n});\n\ndefineType(\"TSParameterProperty\", {\n aliases: process.env.BABEL_8_BREAKING ? [] : [\"LVal\"],\n visitor: [\"parameter\"],\n fields: {\n accessibility: {\n validate: assertOneOf(\"public\", \"private\", \"protected\"),\n optional: true,\n },\n readonly: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n parameter: {\n validate: assertNodeType(\"Identifier\", \"AssignmentPattern\"),\n },\n override: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n decorators: {\n validate: arrayOfType(\"Decorator\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"TSDeclareFunction\", {\n aliases: [\"Statement\", \"Declaration\"],\n visitor: [\"id\", \"typeParameters\", \"params\", \"returnType\"],\n fields: {\n ...functionDeclarationCommon(),\n ...tSFunctionTypeAnnotationCommon(),\n },\n});\n\ndefineType(\"TSDeclareMethod\", {\n visitor: [\"decorators\", \"key\", \"typeParameters\", \"params\", \"returnType\"],\n ...classMethodOrPropertyUnionShapeCommon(),\n fields: {\n ...classMethodOrDeclareMethodCommon(),\n ...tSFunctionTypeAnnotationCommon(),\n },\n});\n\ndefineType(\"TSQualifiedName\", {\n aliases: [\"TSEntityName\"],\n visitor: [\"left\", \"right\"],\n fields: {\n left: validateType(\"TSEntityName\"),\n right: validateType(\"Identifier\"),\n },\n});\n\nconst signatureDeclarationCommon = () => ({\n typeParameters: validateOptionalType(\"TSTypeParameterDeclaration\"),\n [process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\"]: validateArrayOfType(\n \"ArrayPattern\",\n \"Identifier\",\n \"ObjectPattern\",\n \"RestElement\",\n ),\n [process.env.BABEL_8_BREAKING ? \"returnType\" : \"typeAnnotation\"]:\n validateOptionalType(\"TSTypeAnnotation\"),\n});\n\nconst callConstructSignatureDeclaration = {\n aliases: [\"TSTypeElement\"],\n visitor: [\n \"typeParameters\",\n process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\",\n process.env.BABEL_8_BREAKING ? \"returnType\" : \"typeAnnotation\",\n ],\n fields: signatureDeclarationCommon(),\n};\n\ndefineType(\"TSCallSignatureDeclaration\", callConstructSignatureDeclaration);\ndefineType(\n \"TSConstructSignatureDeclaration\",\n callConstructSignatureDeclaration,\n);\n\nconst namedTypeElementCommon = () => ({\n key: validateType(\"Expression\"),\n computed: { default: false },\n optional: validateOptional(bool),\n});\n\ndefineType(\"TSPropertySignature\", {\n aliases: [\"TSTypeElement\"],\n visitor: [\"key\", \"typeAnnotation\"],\n fields: {\n ...namedTypeElementCommon(),\n readonly: validateOptional(bool),\n typeAnnotation: validateOptionalType(\"TSTypeAnnotation\"),\n kind: {\n optional: true,\n validate: assertOneOf(\"get\", \"set\"),\n },\n },\n});\n\ndefineType(\"TSMethodSignature\", {\n aliases: [\"TSTypeElement\"],\n visitor: [\n \"key\",\n \"typeParameters\",\n process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\",\n process.env.BABEL_8_BREAKING ? \"returnType\" : \"typeAnnotation\",\n ],\n fields: {\n ...signatureDeclarationCommon(),\n ...namedTypeElementCommon(),\n kind: {\n validate: assertOneOf(\"method\", \"get\", \"set\"),\n },\n },\n});\n\ndefineType(\"TSIndexSignature\", {\n aliases: [\"TSTypeElement\"],\n visitor: [\"parameters\", \"typeAnnotation\"],\n fields: {\n readonly: validateOptional(bool),\n static: validateOptional(bool),\n parameters: validateArrayOfType(\"Identifier\"), // Length must be 1\n typeAnnotation: validateOptionalType(\"TSTypeAnnotation\"),\n },\n});\n\nconst tsKeywordTypes = [\n \"TSAnyKeyword\",\n \"TSBooleanKeyword\",\n \"TSBigIntKeyword\",\n \"TSIntrinsicKeyword\",\n \"TSNeverKeyword\",\n \"TSNullKeyword\",\n \"TSNumberKeyword\",\n \"TSObjectKeyword\",\n \"TSStringKeyword\",\n \"TSSymbolKeyword\",\n \"TSUndefinedKeyword\",\n \"TSUnknownKeyword\",\n \"TSVoidKeyword\",\n] as const;\n\nfor (const type of tsKeywordTypes) {\n defineType(type, {\n aliases: [\"TSType\", \"TSBaseType\"],\n visitor: [],\n fields: {},\n });\n}\n\ndefineType(\"TSThisType\", {\n aliases: [\"TSType\", \"TSBaseType\"],\n visitor: [],\n fields: {},\n});\n\nconst fnOrCtrBase = {\n aliases: [\"TSType\"],\n visitor: [\n \"typeParameters\",\n process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\",\n process.env.BABEL_8_BREAKING ? \"returnType\" : \"typeAnnotation\",\n ],\n};\n\ndefineType(\"TSFunctionType\", {\n ...fnOrCtrBase,\n fields: signatureDeclarationCommon(),\n});\ndefineType(\"TSConstructorType\", {\n ...fnOrCtrBase,\n fields: {\n ...signatureDeclarationCommon(),\n abstract: validateOptional(bool),\n },\n});\n\ndefineType(\"TSTypeReference\", {\n aliases: [\"TSType\"],\n visitor: [\n \"typeName\",\n process.env.BABEL_8_BREAKING ? \"typeArguments\" : \"typeParameters\",\n ],\n fields: {\n typeName: validateType(\"TSEntityName\"),\n [process.env.BABEL_8_BREAKING ? \"typeArguments\" : \"typeParameters\"]:\n validateOptionalType(\"TSTypeParameterInstantiation\"),\n },\n});\n\ndefineType(\"TSTypePredicate\", {\n aliases: [\"TSType\"],\n visitor: [\"parameterName\", \"typeAnnotation\"],\n builder: [\"parameterName\", \"typeAnnotation\", \"asserts\"],\n fields: {\n parameterName: validateType(\"Identifier\", \"TSThisType\"),\n typeAnnotation: validateOptionalType(\"TSTypeAnnotation\"),\n asserts: validateOptional(bool),\n },\n});\n\ndefineType(\"TSTypeQuery\", {\n aliases: [\"TSType\"],\n visitor: [\n \"exprName\",\n process.env.BABEL_8_BREAKING ? \"typeArguments\" : \"typeParameters\",\n ],\n fields: {\n exprName: validateType(\"TSEntityName\", \"TSImportType\"),\n [process.env.BABEL_8_BREAKING ? \"typeArguments\" : \"typeParameters\"]:\n validateOptionalType(\"TSTypeParameterInstantiation\"),\n },\n});\n\ndefineType(\"TSTypeLiteral\", {\n aliases: [\"TSType\"],\n visitor: [\"members\"],\n fields: {\n members: validateArrayOfType(\"TSTypeElement\"),\n },\n});\n\ndefineType(\"TSArrayType\", {\n aliases: [\"TSType\"],\n visitor: [\"elementType\"],\n fields: {\n elementType: validateType(\"TSType\"),\n },\n});\n\ndefineType(\"TSTupleType\", {\n aliases: [\"TSType\"],\n visitor: [\"elementTypes\"],\n fields: {\n elementTypes: validateArrayOfType(\"TSType\", \"TSNamedTupleMember\"),\n },\n});\n\ndefineType(\"TSOptionalType\", {\n aliases: [\"TSType\"],\n visitor: [\"typeAnnotation\"],\n fields: {\n typeAnnotation: validateType(\"TSType\"),\n },\n});\n\ndefineType(\"TSRestType\", {\n aliases: [\"TSType\"],\n visitor: [\"typeAnnotation\"],\n fields: {\n typeAnnotation: validateType(\"TSType\"),\n },\n});\n\ndefineType(\"TSNamedTupleMember\", {\n visitor: [\"label\", \"elementType\"],\n builder: [\"label\", \"elementType\", \"optional\"],\n fields: {\n label: validateType(\"Identifier\"),\n optional: {\n validate: bool,\n default: false,\n },\n elementType: validateType(\"TSType\"),\n },\n});\n\nconst unionOrIntersection = {\n aliases: [\"TSType\"],\n visitor: [\"types\"],\n fields: {\n types: validateArrayOfType(\"TSType\"),\n },\n};\n\ndefineType(\"TSUnionType\", unionOrIntersection);\ndefineType(\"TSIntersectionType\", unionOrIntersection);\n\ndefineType(\"TSConditionalType\", {\n aliases: [\"TSType\"],\n visitor: [\"checkType\", \"extendsType\", \"trueType\", \"falseType\"],\n fields: {\n checkType: validateType(\"TSType\"),\n extendsType: validateType(\"TSType\"),\n trueType: validateType(\"TSType\"),\n falseType: validateType(\"TSType\"),\n },\n});\n\ndefineType(\"TSInferType\", {\n aliases: [\"TSType\"],\n visitor: [\"typeParameter\"],\n fields: {\n typeParameter: validateType(\"TSTypeParameter\"),\n },\n});\n\ndefineType(\"TSParenthesizedType\", {\n aliases: [\"TSType\"],\n visitor: [\"typeAnnotation\"],\n fields: {\n typeAnnotation: validateType(\"TSType\"),\n },\n});\n\ndefineType(\"TSTypeOperator\", {\n aliases: [\"TSType\"],\n visitor: [\"typeAnnotation\"],\n builder: [\"typeAnnotation\", \"operator\"],\n fields: {\n operator: {\n validate: process.env.BABEL_8_BREAKING\n ? assertOneOf(\"keyof\", \"readonly\", \"unique\")\n : assertValueType(\"string\"),\n // \"keyof\" is not a good default, but as this field is required better\n // pick one. We need it for backwards compatibility with older versions\n // of Babel 7.\n default: process.env.BABEL_8_BREAKING ? undefined : \"keyof\",\n },\n typeAnnotation: validateType(\"TSType\"),\n },\n});\n\ndefineType(\"TSIndexedAccessType\", {\n aliases: [\"TSType\"],\n visitor: [\"objectType\", \"indexType\"],\n fields: {\n objectType: validateType(\"TSType\"),\n indexType: validateType(\"TSType\"),\n },\n});\n\ndefineType(\"TSMappedType\", {\n aliases: [\"TSType\"],\n visitor: process.env.BABEL_8_BREAKING\n ? [\"key\", \"constraint\", \"nameType\", \"typeAnnotation\"]\n : [\"typeParameter\", \"nameType\", \"typeAnnotation\"],\n builder: process.env.BABEL_8_BREAKING\n ? [\"key\", \"constraint\", \"nameType\", \"typeAnnotation\"]\n : [\"typeParameter\", \"typeAnnotation\", \"nameType\"],\n fields: {\n ...(process.env.BABEL_8_BREAKING\n ? {\n key: validateType(\"Identifier\"),\n constraint: validateType(\"TSType\"),\n }\n : {\n typeParameter: validateType(\"TSTypeParameter\"),\n }),\n readonly: validateOptional(assertOneOf(true, false, \"+\", \"-\")),\n optional: validateOptional(assertOneOf(true, false, \"+\", \"-\")),\n typeAnnotation: validateOptionalType(\"TSType\"),\n nameType: validateOptionalType(\"TSType\"),\n },\n});\n\ndefineType(\"TSTemplateLiteralType\", {\n aliases: [\"TSType\", \"TSBaseType\"],\n visitor: [\"quasis\", \"types\"],\n fields: {\n quasis: validateArrayOfType(\"TemplateElement\"),\n types: {\n validate: chain(\n assertValueType(\"array\"),\n assertEach(assertNodeType(\"TSType\")),\n function (node: t.TSTemplateLiteralType, key, val) {\n if (node.quasis.length !== val.length + 1) {\n throw new TypeError(\n `Number of ${\n node.type\n } quasis should be exactly one more than the number of types.\\nExpected ${\n val.length + 1\n } quasis but got ${node.quasis.length}`,\n );\n }\n } satisfies ValidatorImpl,\n ),\n },\n },\n});\n\ndefineType(\"TSLiteralType\", {\n aliases: [\"TSType\", \"TSBaseType\"],\n visitor: [\"literal\"],\n fields: {\n literal: {\n validate: (function () {\n const unaryExpression = assertNodeType(\n \"NumericLiteral\",\n \"BigIntLiteral\",\n );\n const unaryOperator = assertOneOf(\"-\");\n\n const literal = assertNodeType(\n \"NumericLiteral\",\n \"StringLiteral\",\n \"BooleanLiteral\",\n \"BigIntLiteral\",\n \"TemplateLiteral\",\n );\n const validator: ValidatorOneOfNodeTypes = function validator(\n parent: t.Node,\n key: string,\n node: t.Node,\n ) {\n // type A = -1 | 1;\n if (is(\"UnaryExpression\", node)) {\n // check operator first\n unaryOperator(node, \"operator\", node.operator);\n unaryExpression(node, \"argument\", node.argument);\n } else {\n // type A = 'foo' | 'bar' | false | 1;\n literal(parent, key, node);\n }\n };\n\n validator.oneOfNodeTypes = [\n \"NumericLiteral\",\n \"StringLiteral\",\n \"BooleanLiteral\",\n \"BigIntLiteral\",\n \"TemplateLiteral\",\n \"UnaryExpression\",\n ];\n\n return validator;\n })(),\n },\n },\n});\n\nif (process.env.BABEL_8_BREAKING) {\n defineType(\"TSClassImplements\", {\n aliases: [\"TSType\"],\n visitor: [\"expression\", \"typeArguments\"],\n fields: {\n expression: validateType(\"Expression\"),\n typeArguments: validateOptionalType(\"TSTypeParameterInstantiation\"),\n },\n });\n defineType(\"TSInterfaceHeritage\", {\n aliases: [\"TSType\"],\n visitor: [\"expression\", \"typeArguments\"],\n fields: {\n expression: validateType(\"Expression\"),\n typeArguments: validateOptionalType(\"TSTypeParameterInstantiation\"),\n },\n });\n} else {\n defineType(\"TSExpressionWithTypeArguments\", {\n aliases: [\"TSType\"],\n visitor: [\"expression\", \"typeParameters\"],\n fields: {\n expression: validateType(\"TSEntityName\"),\n typeParameters: validateOptionalType(\"TSTypeParameterInstantiation\"),\n },\n });\n}\n\ndefineType(\"TSInterfaceDeclaration\", {\n // \"Statement\" alias prevents a semicolon from appearing after it in an export declaration.\n aliases: [\"Statement\", \"Declaration\"],\n visitor: [\"id\", \"typeParameters\", \"extends\", \"body\"],\n fields: {\n declare: validateOptional(bool),\n id: validateType(\"Identifier\"),\n typeParameters: validateOptionalType(\"TSTypeParameterDeclaration\"),\n extends: validateOptional(\n arrayOfType(\n // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n process.env.BABEL_8_BREAKING\n ? \"TSClassImplements\"\n : \"TSExpressionWithTypeArguments\",\n ),\n ),\n body: validateType(\"TSInterfaceBody\"),\n },\n});\n\ndefineType(\"TSInterfaceBody\", {\n visitor: [\"body\"],\n fields: {\n body: validateArrayOfType(\"TSTypeElement\"),\n },\n});\n\ndefineType(\"TSTypeAliasDeclaration\", {\n aliases: [\"Statement\", \"Declaration\"],\n visitor: [\"id\", \"typeParameters\", \"typeAnnotation\"],\n fields: {\n declare: validateOptional(bool),\n id: validateType(\"Identifier\"),\n typeParameters: validateOptionalType(\"TSTypeParameterDeclaration\"),\n typeAnnotation: validateType(\"TSType\"),\n },\n});\n\ndefineType(\"TSInstantiationExpression\", {\n aliases: [\"Expression\"],\n visitor: process.env.BABEL_8_BREAKING\n ? [\"expression\", \"typeArguments\"]\n : [\"expression\", \"typeParameters\"],\n fields: {\n expression: validateType(\"Expression\"),\n [process.env.BABEL_8_BREAKING ? \"typeArguments\" : \"typeParameters\"]:\n validateOptionalType(\"TSTypeParameterInstantiation\"),\n },\n});\n\nconst TSTypeExpression = {\n aliases: [\"Expression\", \"LVal\", \"PatternLike\"],\n visitor: [\"expression\", \"typeAnnotation\"],\n fields: {\n expression: validateType(\"Expression\"),\n typeAnnotation: validateType(\"TSType\"),\n },\n};\n\ndefineType(\"TSAsExpression\", TSTypeExpression);\ndefineType(\"TSSatisfiesExpression\", TSTypeExpression);\n\ndefineType(\"TSTypeAssertion\", {\n aliases: [\"Expression\", \"LVal\", \"PatternLike\"],\n visitor: [\"typeAnnotation\", \"expression\"],\n fields: {\n typeAnnotation: validateType(\"TSType\"),\n expression: validateType(\"Expression\"),\n },\n});\n\ndefineType(\"TSEnumBody\", {\n visitor: [\"members\"],\n fields: {\n members: validateArrayOfType(\"TSEnumMember\"),\n },\n});\n\nif (process.env.BABEL_8_BREAKING) {\n defineType(\"TSEnumDeclaration\", {\n // \"Statement\" alias prevents a semicolon from appearing after it in an export declaration.\n aliases: [\"Statement\", \"Declaration\"],\n visitor: [\"id\", \"body\"],\n fields: {\n declare: validateOptional(bool),\n const: validateOptional(bool),\n id: validateType(\"Identifier\"),\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n body: validateType(\"TSEnumBody\"),\n },\n });\n} else {\n defineType(\"TSEnumDeclaration\", {\n // \"Statement\" alias prevents a semicolon from appearing after it in an export declaration.\n aliases: [\"Statement\", \"Declaration\"],\n visitor: [\"id\", \"members\"],\n fields: {\n declare: validateOptional(bool),\n const: validateOptional(bool),\n id: validateType(\"Identifier\"),\n members: validateArrayOfType(\"TSEnumMember\"),\n initializer: validateOptionalType(\"Expression\"),\n body: validateOptionalType(\"TSEnumBody\"),\n },\n });\n}\n\ndefineType(\"TSEnumMember\", {\n visitor: [\"id\", \"initializer\"],\n fields: {\n id: validateType(\"Identifier\", \"StringLiteral\"),\n initializer: validateOptionalType(\"Expression\"),\n },\n});\n\ndefineType(\"TSModuleDeclaration\", {\n aliases: [\"Statement\", \"Declaration\"],\n visitor: [\"id\", \"body\"],\n fields: {\n kind: {\n validate: assertOneOf(\"global\", \"module\", \"namespace\"),\n },\n declare: validateOptional(bool),\n ...(!process.env.BABEL_8_BREAKING && { global: validateOptional(bool) }),\n id: process.env.BABEL_8_BREAKING\n ? validateType(\"TSEntityName\", \"StringLiteral\")\n : validateType(\"Identifier\", \"StringLiteral\"),\n body: process.env.BABEL_8_BREAKING\n ? validateType(\"TSModuleBlock\")\n : validateType(\"TSModuleBlock\", \"TSModuleDeclaration\"),\n },\n});\n\ndefineType(\"TSModuleBlock\", {\n aliases: [\"Scopable\", \"Block\", \"BlockParent\", \"FunctionParent\"],\n visitor: [\"body\"],\n fields: {\n body: validateArrayOfType(\"Statement\"),\n },\n});\n\ndefineType(\"TSImportType\", {\n aliases: [\"TSType\"],\n builder: [\n process.env.BABEL_8_BREAKING ? \"source\" : \"argument\",\n \"qualifier\",\n process.env.BABEL_8_BREAKING ? \"typeArguments\" : \"typeParameters\",\n ],\n visitor: [\n process.env.BABEL_8_BREAKING ? \"source\" : \"argument\",\n \"options\",\n \"qualifier\",\n process.env.BABEL_8_BREAKING ? \"typeArguments\" : \"typeParameters\",\n ],\n fields: {\n ...(process.env.BABEL_8_BREAKING\n ? { source: validateType(\"StringLiteral\") }\n : { argument: validateType(\"StringLiteral\") }),\n qualifier: validateOptionalType(\"TSEntityName\"),\n ...(process.env.BABEL_8_BREAKING\n ? {\n typeArguments: validateOptionalType(\"TSTypeParameterInstantiation\"),\n }\n : {\n typeParameters: validateOptionalType(\"TSTypeParameterInstantiation\"),\n }),\n options: {\n validate: assertNodeType(\"ObjectExpression\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"TSImportEqualsDeclaration\", {\n aliases: [\"Statement\", \"Declaration\"],\n visitor: [\"id\", \"moduleReference\"],\n fields: {\n ...(process.env.BABEL_8_BREAKING ? {} : { isExport: validate(bool) }),\n id: validateType(\"Identifier\"),\n moduleReference: validateType(\"TSEntityName\", \"TSExternalModuleReference\"),\n importKind: {\n validate: assertOneOf(\"type\", \"value\"),\n optional: true,\n },\n },\n});\n\ndefineType(\"TSExternalModuleReference\", {\n visitor: [\"expression\"],\n fields: {\n expression: validateType(\"StringLiteral\"),\n },\n});\n\ndefineType(\"TSNonNullExpression\", {\n aliases: [\"Expression\", \"LVal\", \"PatternLike\"],\n visitor: [\"expression\"],\n fields: {\n expression: validateType(\"Expression\"),\n },\n});\n\ndefineType(\"TSExportAssignment\", {\n aliases: [\"Statement\"],\n visitor: [\"expression\"],\n fields: {\n expression: validateType(\"Expression\"),\n },\n});\n\ndefineType(\"TSNamespaceExportDeclaration\", {\n aliases: [\"Statement\"],\n visitor: [\"id\"],\n fields: {\n id: validateType(\"Identifier\"),\n },\n});\n\ndefineType(\"TSTypeAnnotation\", {\n visitor: [\"typeAnnotation\"],\n fields: {\n typeAnnotation: {\n validate: assertNodeType(\"TSType\"),\n },\n },\n});\n\ndefineType(\"TSTypeParameterInstantiation\", {\n visitor: [\"params\"],\n fields: {\n params: validateArrayOfType(\"TSType\"),\n },\n});\n\ndefineType(\"TSTypeParameterDeclaration\", {\n visitor: [\"params\"],\n fields: {\n params: validateArrayOfType(\"TSTypeParameter\"),\n },\n});\n\ndefineType(\"TSTypeParameter\", {\n builder: [\"constraint\", \"default\", \"name\"],\n visitor: process.env.BABEL_8_BREAKING\n ? [\"name\", \"constraint\", \"default\"]\n : [\"constraint\", \"default\"],\n fields: {\n name: {\n validate: !process.env.BABEL_8_BREAKING\n ? assertValueType(\"string\")\n : assertNodeType(\"Identifier\"),\n },\n in: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n out: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n const: {\n validate: assertValueType(\"boolean\"),\n optional: true,\n },\n constraint: {\n validate: assertNodeType(\"TSType\"),\n optional: true,\n },\n default: {\n validate: assertNodeType(\"TSType\"),\n optional: true,\n },\n },\n});\n","export const DEPRECATED_ALIASES = {\n ModuleDeclaration: \"ImportOrExportDeclaration\",\n};\n","import \"./core.ts\";\nimport \"./flow.ts\";\nimport \"./jsx.ts\";\nimport \"./misc.ts\";\nimport \"./experimental.ts\";\nimport \"./typescript.ts\";\nimport {\n VISITOR_KEYS,\n ALIAS_KEYS,\n FLIPPED_ALIAS_KEYS,\n NODE_FIELDS,\n BUILDER_KEYS,\n DEPRECATED_KEYS,\n NODE_PARENT_VALIDATIONS,\n NODE_UNION_SHAPES__PRIVATE,\n allExpandedTypes,\n} from \"./utils.ts\";\nimport {\n PLACEHOLDERS,\n PLACEHOLDERS_ALIAS,\n PLACEHOLDERS_FLIPPED_ALIAS,\n} from \"./placeholders.ts\";\nimport { DEPRECATED_ALIASES } from \"./deprecated-aliases.ts\";\n\n(\n Object.keys(DEPRECATED_ALIASES) as (keyof typeof DEPRECATED_ALIASES)[]\n).forEach(deprecatedAlias => {\n FLIPPED_ALIAS_KEYS[deprecatedAlias] =\n FLIPPED_ALIAS_KEYS[DEPRECATED_ALIASES[deprecatedAlias]];\n});\n\nfor (const { types, set } of allExpandedTypes) {\n for (const type of types) {\n const aliases = FLIPPED_ALIAS_KEYS[type];\n if (aliases) {\n aliases.forEach(set.add, set);\n } else {\n set.add(type);\n }\n }\n}\n\nconst TYPES: string[] = [].concat(\n Object.keys(VISITOR_KEYS),\n Object.keys(FLIPPED_ALIAS_KEYS),\n Object.keys(DEPRECATED_KEYS),\n);\n\n/**\n * @internal\n */\nexport { NODE_UNION_SHAPES__PRIVATE };\n\nexport {\n VISITOR_KEYS,\n ALIAS_KEYS,\n FLIPPED_ALIAS_KEYS,\n NODE_FIELDS,\n BUILDER_KEYS,\n DEPRECATED_ALIASES,\n DEPRECATED_KEYS,\n NODE_PARENT_VALIDATIONS,\n PLACEHOLDERS,\n PLACEHOLDERS_ALIAS,\n PLACEHOLDERS_FLIPPED_ALIAS,\n TYPES,\n};\n\nexport type { FieldOptions } from \"./utils.ts\";\n","import {\n NODE_FIELDS,\n NODE_PARENT_VALIDATIONS,\n type FieldOptions,\n} from \"../definitions/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function validate(\n node: t.Node | undefined | null,\n key: string,\n val: unknown,\n): void {\n if (!node) return;\n\n const fields = NODE_FIELDS[node.type];\n if (!fields) return;\n\n const field = fields[key];\n validateField(node, key, val, field);\n validateChild(node, key, val);\n}\n\nexport function validateInternal(\n field: FieldOptions,\n node: t.Node | undefined | null,\n key: string,\n val: unknown,\n maybeNode?: 1,\n): void {\n if (!field?.validate) return;\n if (field.optional && val == null) return;\n\n field.validate(node, key, val);\n\n if (maybeNode) {\n const type = (val as t.Node).type;\n if (type == null) return;\n NODE_PARENT_VALIDATIONS[type]?.(node, key, val);\n }\n}\n\nexport function validateField(\n node: t.Node | undefined | null,\n key: string,\n val: unknown,\n field: FieldOptions | undefined | null,\n): void {\n if (!field?.validate) return;\n if (field.optional && val == null) return;\n\n field.validate(node, key, val);\n}\n\nexport function validateChild(\n node: t.Node | undefined | null,\n key: string | { toString(): string },\n val?: unknown,\n) {\n const type = (val as t.Node)?.type;\n if (type == null) return;\n NODE_PARENT_VALIDATIONS[type]?.(node, key, val);\n}\n","/*\n * This file is auto-generated! Do not modify it directly.\n * To re-generate run 'make build'\n */\nimport * as _validate from \"../../validators/validate.ts\";\nimport type * as t from \"../../ast-types/generated/index.ts\";\nimport deprecationWarning from \"../../utils/deprecationWarning.ts\";\nimport * as utils from \"../../definitions/utils.ts\";\n\nconst { validateInternal: validate } = _validate;\nconst { NODE_FIELDS } = utils;\n\n/** @deprecated */ export function bigIntLiteral(\n value: string,\n): t.BigIntLiteral;\nexport function bigIntLiteral(value: bigint): t.BigIntLiteral;\nexport function bigIntLiteral(value: bigint | string): t.BigIntLiteral {\n if (typeof value === \"bigint\") {\n value = value.toString();\n }\n const node: t.BigIntLiteral = {\n type: \"BigIntLiteral\",\n value,\n };\n const defs = NODE_FIELDS.BigIntLiteral;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function arrayExpression(\n elements: (null | t.Expression | t.SpreadElement)[] = [],\n): t.ArrayExpression {\n const node: t.ArrayExpression = {\n type: \"ArrayExpression\",\n elements,\n };\n const defs = NODE_FIELDS.ArrayExpression;\n validate(defs.elements, node, \"elements\", elements, 1);\n return node;\n}\nexport function assignmentExpression(\n operator: string,\n left: t.LVal | t.OptionalMemberExpression,\n right: t.Expression,\n): t.AssignmentExpression {\n const node: t.AssignmentExpression = {\n type: \"AssignmentExpression\",\n operator,\n left,\n right,\n };\n const defs = NODE_FIELDS.AssignmentExpression;\n validate(defs.operator, node, \"operator\", operator);\n validate(defs.left, node, \"left\", left, 1);\n validate(defs.right, node, \"right\", right, 1);\n return node;\n}\nexport function binaryExpression(\n operator:\n | \"+\"\n | \"-\"\n | \"/\"\n | \"%\"\n | \"*\"\n | \"**\"\n | \"&\"\n | \"|\"\n | \">>\"\n | \">>>\"\n | \"<<\"\n | \"^\"\n | \"==\"\n | \"===\"\n | \"!=\"\n | \"!==\"\n | \"in\"\n | \"instanceof\"\n | \">\"\n | \"<\"\n | \">=\"\n | \"<=\"\n | \"|>\",\n left: t.Expression | t.PrivateName,\n right: t.Expression,\n): t.BinaryExpression {\n const node: t.BinaryExpression = {\n type: \"BinaryExpression\",\n operator,\n left,\n right,\n };\n const defs = NODE_FIELDS.BinaryExpression;\n validate(defs.operator, node, \"operator\", operator);\n validate(defs.left, node, \"left\", left, 1);\n validate(defs.right, node, \"right\", right, 1);\n return node;\n}\nexport function interpreterDirective(value: string): t.InterpreterDirective {\n const node: t.InterpreterDirective = {\n type: \"InterpreterDirective\",\n value,\n };\n const defs = NODE_FIELDS.InterpreterDirective;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function directive(value: t.DirectiveLiteral): t.Directive {\n const node: t.Directive = {\n type: \"Directive\",\n value,\n };\n const defs = NODE_FIELDS.Directive;\n validate(defs.value, node, \"value\", value, 1);\n return node;\n}\nexport function directiveLiteral(value: string): t.DirectiveLiteral {\n const node: t.DirectiveLiteral = {\n type: \"DirectiveLiteral\",\n value,\n };\n const defs = NODE_FIELDS.DirectiveLiteral;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function blockStatement(\n body: t.Statement[],\n directives: t.Directive[] = [],\n): t.BlockStatement {\n const node: t.BlockStatement = {\n type: \"BlockStatement\",\n body,\n directives,\n };\n const defs = NODE_FIELDS.BlockStatement;\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.directives, node, \"directives\", directives, 1);\n return node;\n}\nexport function breakStatement(\n label: t.Identifier | null = null,\n): t.BreakStatement {\n const node: t.BreakStatement = {\n type: \"BreakStatement\",\n label,\n };\n const defs = NODE_FIELDS.BreakStatement;\n validate(defs.label, node, \"label\", label, 1);\n return node;\n}\nexport function callExpression(\n callee: t.Expression | t.Super | t.V8IntrinsicIdentifier,\n _arguments: (t.Expression | t.SpreadElement | t.ArgumentPlaceholder)[],\n): t.CallExpression {\n const node: t.CallExpression = {\n type: \"CallExpression\",\n callee,\n arguments: _arguments,\n };\n const defs = NODE_FIELDS.CallExpression;\n validate(defs.callee, node, \"callee\", callee, 1);\n validate(defs.arguments, node, \"arguments\", _arguments, 1);\n return node;\n}\nexport function catchClause(\n param:\n | t.Identifier\n | t.ArrayPattern\n | t.ObjectPattern\n | null\n | undefined = null,\n body: t.BlockStatement,\n): t.CatchClause {\n const node: t.CatchClause = {\n type: \"CatchClause\",\n param,\n body,\n };\n const defs = NODE_FIELDS.CatchClause;\n validate(defs.param, node, \"param\", param, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function conditionalExpression(\n test: t.Expression,\n consequent: t.Expression,\n alternate: t.Expression,\n): t.ConditionalExpression {\n const node: t.ConditionalExpression = {\n type: \"ConditionalExpression\",\n test,\n consequent,\n alternate,\n };\n const defs = NODE_FIELDS.ConditionalExpression;\n validate(defs.test, node, \"test\", test, 1);\n validate(defs.consequent, node, \"consequent\", consequent, 1);\n validate(defs.alternate, node, \"alternate\", alternate, 1);\n return node;\n}\nexport function continueStatement(\n label: t.Identifier | null = null,\n): t.ContinueStatement {\n const node: t.ContinueStatement = {\n type: \"ContinueStatement\",\n label,\n };\n const defs = NODE_FIELDS.ContinueStatement;\n validate(defs.label, node, \"label\", label, 1);\n return node;\n}\nexport function debuggerStatement(): t.DebuggerStatement {\n return {\n type: \"DebuggerStatement\",\n };\n}\nexport function doWhileStatement(\n test: t.Expression,\n body: t.Statement,\n): t.DoWhileStatement {\n const node: t.DoWhileStatement = {\n type: \"DoWhileStatement\",\n test,\n body,\n };\n const defs = NODE_FIELDS.DoWhileStatement;\n validate(defs.test, node, \"test\", test, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function emptyStatement(): t.EmptyStatement {\n return {\n type: \"EmptyStatement\",\n };\n}\nexport function expressionStatement(\n expression: t.Expression,\n): t.ExpressionStatement {\n const node: t.ExpressionStatement = {\n type: \"ExpressionStatement\",\n expression,\n };\n const defs = NODE_FIELDS.ExpressionStatement;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport function file(\n program: t.Program,\n comments: (t.CommentBlock | t.CommentLine)[] | null = null,\n tokens: any[] | null = null,\n): t.File {\n const node: t.File = {\n type: \"File\",\n program,\n comments,\n tokens,\n };\n const defs = NODE_FIELDS.File;\n validate(defs.program, node, \"program\", program, 1);\n validate(defs.comments, node, \"comments\", comments, 1);\n validate(defs.tokens, node, \"tokens\", tokens);\n return node;\n}\nexport function forInStatement(\n left: t.VariableDeclaration | t.LVal,\n right: t.Expression,\n body: t.Statement,\n): t.ForInStatement {\n const node: t.ForInStatement = {\n type: \"ForInStatement\",\n left,\n right,\n body,\n };\n const defs = NODE_FIELDS.ForInStatement;\n validate(defs.left, node, \"left\", left, 1);\n validate(defs.right, node, \"right\", right, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function forStatement(\n init: t.VariableDeclaration | t.Expression | null | undefined = null,\n test: t.Expression | null | undefined = null,\n update: t.Expression | null | undefined = null,\n body: t.Statement,\n): t.ForStatement {\n const node: t.ForStatement = {\n type: \"ForStatement\",\n init,\n test,\n update,\n body,\n };\n const defs = NODE_FIELDS.ForStatement;\n validate(defs.init, node, \"init\", init, 1);\n validate(defs.test, node, \"test\", test, 1);\n validate(defs.update, node, \"update\", update, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function functionDeclaration(\n id: t.Identifier | null | undefined = null,\n params: t.FunctionParameter[],\n body: t.BlockStatement,\n generator: boolean = false,\n async: boolean = false,\n): t.FunctionDeclaration {\n const node: t.FunctionDeclaration = {\n type: \"FunctionDeclaration\",\n id,\n params,\n body,\n generator,\n async,\n };\n const defs = NODE_FIELDS.FunctionDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.generator, node, \"generator\", generator);\n validate(defs.async, node, \"async\", async);\n return node;\n}\nexport function functionExpression(\n id: t.Identifier | null | undefined = null,\n params: t.FunctionParameter[],\n body: t.BlockStatement,\n generator: boolean = false,\n async: boolean = false,\n): t.FunctionExpression {\n const node: t.FunctionExpression = {\n type: \"FunctionExpression\",\n id,\n params,\n body,\n generator,\n async,\n };\n const defs = NODE_FIELDS.FunctionExpression;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.generator, node, \"generator\", generator);\n validate(defs.async, node, \"async\", async);\n return node;\n}\nexport function identifier(name: string): t.Identifier {\n const node: t.Identifier = {\n type: \"Identifier\",\n name,\n };\n const defs = NODE_FIELDS.Identifier;\n validate(defs.name, node, \"name\", name);\n return node;\n}\nexport function ifStatement(\n test: t.Expression,\n consequent: t.Statement,\n alternate: t.Statement | null = null,\n): t.IfStatement {\n const node: t.IfStatement = {\n type: \"IfStatement\",\n test,\n consequent,\n alternate,\n };\n const defs = NODE_FIELDS.IfStatement;\n validate(defs.test, node, \"test\", test, 1);\n validate(defs.consequent, node, \"consequent\", consequent, 1);\n validate(defs.alternate, node, \"alternate\", alternate, 1);\n return node;\n}\nexport function labeledStatement(\n label: t.Identifier,\n body: t.Statement,\n): t.LabeledStatement {\n const node: t.LabeledStatement = {\n type: \"LabeledStatement\",\n label,\n body,\n };\n const defs = NODE_FIELDS.LabeledStatement;\n validate(defs.label, node, \"label\", label, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function stringLiteral(value: string): t.StringLiteral {\n const node: t.StringLiteral = {\n type: \"StringLiteral\",\n value,\n };\n const defs = NODE_FIELDS.StringLiteral;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function numericLiteral(value: number): t.NumericLiteral {\n const node: t.NumericLiteral = {\n type: \"NumericLiteral\",\n value,\n };\n const defs = NODE_FIELDS.NumericLiteral;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function nullLiteral(): t.NullLiteral {\n return {\n type: \"NullLiteral\",\n };\n}\nexport function booleanLiteral(value: boolean): t.BooleanLiteral {\n const node: t.BooleanLiteral = {\n type: \"BooleanLiteral\",\n value,\n };\n const defs = NODE_FIELDS.BooleanLiteral;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function regExpLiteral(\n pattern: string,\n flags: string = \"\",\n): t.RegExpLiteral {\n const node: t.RegExpLiteral = {\n type: \"RegExpLiteral\",\n pattern,\n flags,\n };\n const defs = NODE_FIELDS.RegExpLiteral;\n validate(defs.pattern, node, \"pattern\", pattern);\n validate(defs.flags, node, \"flags\", flags);\n return node;\n}\nexport function logicalExpression(\n operator: \"||\" | \"&&\" | \"??\",\n left: t.Expression,\n right: t.Expression,\n): t.LogicalExpression {\n const node: t.LogicalExpression = {\n type: \"LogicalExpression\",\n operator,\n left,\n right,\n };\n const defs = NODE_FIELDS.LogicalExpression;\n validate(defs.operator, node, \"operator\", operator);\n validate(defs.left, node, \"left\", left, 1);\n validate(defs.right, node, \"right\", right, 1);\n return node;\n}\nexport function memberExpression(\n object: t.Expression | t.Super,\n property: t.Expression | t.Identifier | t.PrivateName,\n computed: boolean = false,\n optional: boolean | null = null,\n): t.MemberExpression {\n const node: t.MemberExpression = {\n type: \"MemberExpression\",\n object,\n property,\n computed,\n optional,\n };\n const defs = NODE_FIELDS.MemberExpression;\n validate(defs.object, node, \"object\", object, 1);\n validate(defs.property, node, \"property\", property, 1);\n validate(defs.computed, node, \"computed\", computed);\n validate(defs.optional, node, \"optional\", optional);\n return node;\n}\nexport function newExpression(\n callee: t.Expression | t.Super | t.V8IntrinsicIdentifier,\n _arguments: (t.Expression | t.SpreadElement | t.ArgumentPlaceholder)[],\n): t.NewExpression {\n const node: t.NewExpression = {\n type: \"NewExpression\",\n callee,\n arguments: _arguments,\n };\n const defs = NODE_FIELDS.NewExpression;\n validate(defs.callee, node, \"callee\", callee, 1);\n validate(defs.arguments, node, \"arguments\", _arguments, 1);\n return node;\n}\nexport function program(\n body: t.Statement[],\n directives: t.Directive[] = [],\n sourceType: \"script\" | \"module\" = \"script\",\n interpreter: t.InterpreterDirective | null = null,\n): t.Program {\n const node: t.Program = {\n type: \"Program\",\n body,\n directives,\n sourceType,\n interpreter,\n };\n const defs = NODE_FIELDS.Program;\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.directives, node, \"directives\", directives, 1);\n validate(defs.sourceType, node, \"sourceType\", sourceType);\n validate(defs.interpreter, node, \"interpreter\", interpreter, 1);\n return node;\n}\nexport function objectExpression(\n properties: (t.ObjectMethod | t.ObjectProperty | t.SpreadElement)[],\n): t.ObjectExpression {\n const node: t.ObjectExpression = {\n type: \"ObjectExpression\",\n properties,\n };\n const defs = NODE_FIELDS.ObjectExpression;\n validate(defs.properties, node, \"properties\", properties, 1);\n return node;\n}\nexport function objectMethod(\n kind: \"method\" | \"get\" | \"set\" | undefined = \"method\",\n key:\n | t.Expression\n | t.Identifier\n | t.StringLiteral\n | t.NumericLiteral\n | t.BigIntLiteral,\n params: t.FunctionParameter[],\n body: t.BlockStatement,\n computed: boolean = false,\n generator: boolean = false,\n async: boolean = false,\n): t.ObjectMethod {\n const node: t.ObjectMethod = {\n type: \"ObjectMethod\",\n kind,\n key,\n params,\n body,\n computed,\n generator,\n async,\n };\n const defs = NODE_FIELDS.ObjectMethod;\n validate(defs.kind, node, \"kind\", kind);\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.computed, node, \"computed\", computed);\n validate(defs.generator, node, \"generator\", generator);\n validate(defs.async, node, \"async\", async);\n return node;\n}\nexport function objectProperty(\n key:\n | t.Expression\n | t.Identifier\n | t.StringLiteral\n | t.NumericLiteral\n | t.BigIntLiteral\n | t.DecimalLiteral\n | t.PrivateName,\n value: t.Expression | t.PatternLike,\n computed: boolean = false,\n shorthand: boolean = false,\n decorators: t.Decorator[] | null = null,\n): t.ObjectProperty {\n const node: t.ObjectProperty = {\n type: \"ObjectProperty\",\n key,\n value,\n computed,\n shorthand,\n decorators,\n };\n const defs = NODE_FIELDS.ObjectProperty;\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.value, node, \"value\", value, 1);\n validate(defs.computed, node, \"computed\", computed);\n validate(defs.shorthand, node, \"shorthand\", shorthand);\n validate(defs.decorators, node, \"decorators\", decorators, 1);\n return node;\n}\nexport function restElement(\n argument:\n | t.Identifier\n | t.ArrayPattern\n | t.ObjectPattern\n | t.MemberExpression\n | t.TSAsExpression\n | t.TSSatisfiesExpression\n | t.TSTypeAssertion\n | t.TSNonNullExpression\n | t.RestElement\n | t.AssignmentPattern,\n): t.RestElement {\n const node: t.RestElement = {\n type: \"RestElement\",\n argument,\n };\n const defs = NODE_FIELDS.RestElement;\n validate(defs.argument, node, \"argument\", argument, 1);\n return node;\n}\nexport function returnStatement(\n argument: t.Expression | null = null,\n): t.ReturnStatement {\n const node: t.ReturnStatement = {\n type: \"ReturnStatement\",\n argument,\n };\n const defs = NODE_FIELDS.ReturnStatement;\n validate(defs.argument, node, \"argument\", argument, 1);\n return node;\n}\nexport function sequenceExpression(\n expressions: t.Expression[],\n): t.SequenceExpression {\n const node: t.SequenceExpression = {\n type: \"SequenceExpression\",\n expressions,\n };\n const defs = NODE_FIELDS.SequenceExpression;\n validate(defs.expressions, node, \"expressions\", expressions, 1);\n return node;\n}\nexport function parenthesizedExpression(\n expression: t.Expression,\n): t.ParenthesizedExpression {\n const node: t.ParenthesizedExpression = {\n type: \"ParenthesizedExpression\",\n expression,\n };\n const defs = NODE_FIELDS.ParenthesizedExpression;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport function switchCase(\n test: t.Expression | null | undefined = null,\n consequent: t.Statement[],\n): t.SwitchCase {\n const node: t.SwitchCase = {\n type: \"SwitchCase\",\n test,\n consequent,\n };\n const defs = NODE_FIELDS.SwitchCase;\n validate(defs.test, node, \"test\", test, 1);\n validate(defs.consequent, node, \"consequent\", consequent, 1);\n return node;\n}\nexport function switchStatement(\n discriminant: t.Expression,\n cases: t.SwitchCase[],\n): t.SwitchStatement {\n const node: t.SwitchStatement = {\n type: \"SwitchStatement\",\n discriminant,\n cases,\n };\n const defs = NODE_FIELDS.SwitchStatement;\n validate(defs.discriminant, node, \"discriminant\", discriminant, 1);\n validate(defs.cases, node, \"cases\", cases, 1);\n return node;\n}\nexport function thisExpression(): t.ThisExpression {\n return {\n type: \"ThisExpression\",\n };\n}\nexport function throwStatement(argument: t.Expression): t.ThrowStatement {\n const node: t.ThrowStatement = {\n type: \"ThrowStatement\",\n argument,\n };\n const defs = NODE_FIELDS.ThrowStatement;\n validate(defs.argument, node, \"argument\", argument, 1);\n return node;\n}\nexport function tryStatement(\n block: t.BlockStatement,\n handler: t.CatchClause | null = null,\n finalizer: t.BlockStatement | null = null,\n): t.TryStatement {\n const node: t.TryStatement = {\n type: \"TryStatement\",\n block,\n handler,\n finalizer,\n };\n const defs = NODE_FIELDS.TryStatement;\n validate(defs.block, node, \"block\", block, 1);\n validate(defs.handler, node, \"handler\", handler, 1);\n validate(defs.finalizer, node, \"finalizer\", finalizer, 1);\n return node;\n}\nexport function unaryExpression(\n operator: \"void\" | \"throw\" | \"delete\" | \"!\" | \"+\" | \"-\" | \"~\" | \"typeof\",\n argument: t.Expression,\n prefix: boolean = true,\n): t.UnaryExpression {\n const node: t.UnaryExpression = {\n type: \"UnaryExpression\",\n operator,\n argument,\n prefix,\n };\n const defs = NODE_FIELDS.UnaryExpression;\n validate(defs.operator, node, \"operator\", operator);\n validate(defs.argument, node, \"argument\", argument, 1);\n validate(defs.prefix, node, \"prefix\", prefix);\n return node;\n}\nexport function updateExpression(\n operator: \"++\" | \"--\",\n argument: t.Expression,\n prefix: boolean = false,\n): t.UpdateExpression {\n const node: t.UpdateExpression = {\n type: \"UpdateExpression\",\n operator,\n argument,\n prefix,\n };\n const defs = NODE_FIELDS.UpdateExpression;\n validate(defs.operator, node, \"operator\", operator);\n validate(defs.argument, node, \"argument\", argument, 1);\n validate(defs.prefix, node, \"prefix\", prefix);\n return node;\n}\nexport function variableDeclaration(\n kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n declarations: t.VariableDeclarator[],\n): t.VariableDeclaration {\n const node: t.VariableDeclaration = {\n type: \"VariableDeclaration\",\n kind,\n declarations,\n };\n const defs = NODE_FIELDS.VariableDeclaration;\n validate(defs.kind, node, \"kind\", kind);\n validate(defs.declarations, node, \"declarations\", declarations, 1);\n return node;\n}\nexport function variableDeclarator(\n id: t.LVal | t.VoidPattern,\n init: t.Expression | null = null,\n): t.VariableDeclarator {\n const node: t.VariableDeclarator = {\n type: \"VariableDeclarator\",\n id,\n init,\n };\n const defs = NODE_FIELDS.VariableDeclarator;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.init, node, \"init\", init, 1);\n return node;\n}\nexport function whileStatement(\n test: t.Expression,\n body: t.Statement,\n): t.WhileStatement {\n const node: t.WhileStatement = {\n type: \"WhileStatement\",\n test,\n body,\n };\n const defs = NODE_FIELDS.WhileStatement;\n validate(defs.test, node, \"test\", test, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function withStatement(\n object: t.Expression,\n body: t.Statement,\n): t.WithStatement {\n const node: t.WithStatement = {\n type: \"WithStatement\",\n object,\n body,\n };\n const defs = NODE_FIELDS.WithStatement;\n validate(defs.object, node, \"object\", object, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function assignmentPattern(\n left:\n | t.Identifier\n | t.ObjectPattern\n | t.ArrayPattern\n | t.MemberExpression\n | t.TSAsExpression\n | t.TSSatisfiesExpression\n | t.TSTypeAssertion\n | t.TSNonNullExpression,\n right: t.Expression,\n): t.AssignmentPattern {\n const node: t.AssignmentPattern = {\n type: \"AssignmentPattern\",\n left,\n right,\n };\n const defs = NODE_FIELDS.AssignmentPattern;\n validate(defs.left, node, \"left\", left, 1);\n validate(defs.right, node, \"right\", right, 1);\n return node;\n}\nexport function arrayPattern(\n elements: (null | t.PatternLike)[],\n): t.ArrayPattern {\n const node: t.ArrayPattern = {\n type: \"ArrayPattern\",\n elements,\n };\n const defs = NODE_FIELDS.ArrayPattern;\n validate(defs.elements, node, \"elements\", elements, 1);\n return node;\n}\nexport function arrowFunctionExpression(\n params: t.FunctionParameter[],\n body: t.BlockStatement | t.Expression,\n async: boolean = false,\n): t.ArrowFunctionExpression {\n const node: t.ArrowFunctionExpression = {\n type: \"ArrowFunctionExpression\",\n params,\n body,\n async,\n expression: null,\n };\n const defs = NODE_FIELDS.ArrowFunctionExpression;\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.async, node, \"async\", async);\n return node;\n}\nexport function classBody(\n body: (\n | t.ClassMethod\n | t.ClassPrivateMethod\n | t.ClassProperty\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty\n | t.TSDeclareMethod\n | t.TSIndexSignature\n | t.StaticBlock\n )[],\n): t.ClassBody {\n const node: t.ClassBody = {\n type: \"ClassBody\",\n body,\n };\n const defs = NODE_FIELDS.ClassBody;\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function classExpression(\n id: t.Identifier | null | undefined = null,\n superClass: t.Expression | null | undefined = null,\n body: t.ClassBody,\n decorators: t.Decorator[] | null = null,\n): t.ClassExpression {\n const node: t.ClassExpression = {\n type: \"ClassExpression\",\n id,\n superClass,\n body,\n decorators,\n };\n const defs = NODE_FIELDS.ClassExpression;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.superClass, node, \"superClass\", superClass, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.decorators, node, \"decorators\", decorators, 1);\n return node;\n}\nexport function classDeclaration(\n id: t.Identifier | null | undefined = null,\n superClass: t.Expression | null | undefined = null,\n body: t.ClassBody,\n decorators: t.Decorator[] | null = null,\n): t.ClassDeclaration {\n const node: t.ClassDeclaration = {\n type: \"ClassDeclaration\",\n id,\n superClass,\n body,\n decorators,\n };\n const defs = NODE_FIELDS.ClassDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.superClass, node, \"superClass\", superClass, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.decorators, node, \"decorators\", decorators, 1);\n return node;\n}\nexport function exportAllDeclaration(\n source: t.StringLiteral,\n attributes: t.ImportAttribute[] | null = null,\n): t.ExportAllDeclaration {\n const node: t.ExportAllDeclaration = {\n type: \"ExportAllDeclaration\",\n source,\n attributes,\n };\n const defs = NODE_FIELDS.ExportAllDeclaration;\n validate(defs.source, node, \"source\", source, 1);\n validate(defs.attributes, node, \"attributes\", attributes, 1);\n return node;\n}\nexport function exportDefaultDeclaration(\n declaration:\n | t.TSDeclareFunction\n | t.FunctionDeclaration\n | t.ClassDeclaration\n | t.Expression,\n): t.ExportDefaultDeclaration {\n const node: t.ExportDefaultDeclaration = {\n type: \"ExportDefaultDeclaration\",\n declaration,\n };\n const defs = NODE_FIELDS.ExportDefaultDeclaration;\n validate(defs.declaration, node, \"declaration\", declaration, 1);\n return node;\n}\nexport function exportNamedDeclaration(\n declaration: t.Declaration | null = null,\n specifiers: (\n | t.ExportSpecifier\n | t.ExportDefaultSpecifier\n | t.ExportNamespaceSpecifier\n )[] = [],\n source: t.StringLiteral | null = null,\n attributes: t.ImportAttribute[] | null = null,\n): t.ExportNamedDeclaration {\n const node: t.ExportNamedDeclaration = {\n type: \"ExportNamedDeclaration\",\n declaration,\n specifiers,\n source,\n attributes,\n };\n const defs = NODE_FIELDS.ExportNamedDeclaration;\n validate(defs.declaration, node, \"declaration\", declaration, 1);\n validate(defs.specifiers, node, \"specifiers\", specifiers, 1);\n validate(defs.source, node, \"source\", source, 1);\n validate(defs.attributes, node, \"attributes\", attributes, 1);\n return node;\n}\nexport function exportSpecifier(\n local: t.Identifier,\n exported: t.Identifier | t.StringLiteral,\n): t.ExportSpecifier {\n const node: t.ExportSpecifier = {\n type: \"ExportSpecifier\",\n local,\n exported,\n };\n const defs = NODE_FIELDS.ExportSpecifier;\n validate(defs.local, node, \"local\", local, 1);\n validate(defs.exported, node, \"exported\", exported, 1);\n return node;\n}\nexport function forOfStatement(\n left: t.VariableDeclaration | t.LVal,\n right: t.Expression,\n body: t.Statement,\n _await: boolean = false,\n): t.ForOfStatement {\n const node: t.ForOfStatement = {\n type: \"ForOfStatement\",\n left,\n right,\n body,\n await: _await,\n };\n const defs = NODE_FIELDS.ForOfStatement;\n validate(defs.left, node, \"left\", left, 1);\n validate(defs.right, node, \"right\", right, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.await, node, \"await\", _await);\n return node;\n}\nexport function importDeclaration(\n specifiers: (\n | t.ImportSpecifier\n | t.ImportDefaultSpecifier\n | t.ImportNamespaceSpecifier\n )[],\n source: t.StringLiteral,\n attributes: t.ImportAttribute[] | null = null,\n): t.ImportDeclaration {\n const node: t.ImportDeclaration = {\n type: \"ImportDeclaration\",\n specifiers,\n source,\n attributes,\n };\n const defs = NODE_FIELDS.ImportDeclaration;\n validate(defs.specifiers, node, \"specifiers\", specifiers, 1);\n validate(defs.source, node, \"source\", source, 1);\n validate(defs.attributes, node, \"attributes\", attributes, 1);\n return node;\n}\nexport function importDefaultSpecifier(\n local: t.Identifier,\n): t.ImportDefaultSpecifier {\n const node: t.ImportDefaultSpecifier = {\n type: \"ImportDefaultSpecifier\",\n local,\n };\n const defs = NODE_FIELDS.ImportDefaultSpecifier;\n validate(defs.local, node, \"local\", local, 1);\n return node;\n}\nexport function importNamespaceSpecifier(\n local: t.Identifier,\n): t.ImportNamespaceSpecifier {\n const node: t.ImportNamespaceSpecifier = {\n type: \"ImportNamespaceSpecifier\",\n local,\n };\n const defs = NODE_FIELDS.ImportNamespaceSpecifier;\n validate(defs.local, node, \"local\", local, 1);\n return node;\n}\nexport function importSpecifier(\n local: t.Identifier,\n imported: t.Identifier | t.StringLiteral,\n): t.ImportSpecifier {\n const node: t.ImportSpecifier = {\n type: \"ImportSpecifier\",\n local,\n imported,\n };\n const defs = NODE_FIELDS.ImportSpecifier;\n validate(defs.local, node, \"local\", local, 1);\n validate(defs.imported, node, \"imported\", imported, 1);\n return node;\n}\nexport function importExpression(\n source: t.Expression,\n options: t.Expression | null = null,\n): t.ImportExpression {\n const node: t.ImportExpression = {\n type: \"ImportExpression\",\n source,\n options,\n };\n const defs = NODE_FIELDS.ImportExpression;\n validate(defs.source, node, \"source\", source, 1);\n validate(defs.options, node, \"options\", options, 1);\n return node;\n}\nexport function metaProperty(\n meta: t.Identifier,\n property: t.Identifier,\n): t.MetaProperty {\n const node: t.MetaProperty = {\n type: \"MetaProperty\",\n meta,\n property,\n };\n const defs = NODE_FIELDS.MetaProperty;\n validate(defs.meta, node, \"meta\", meta, 1);\n validate(defs.property, node, \"property\", property, 1);\n return node;\n}\nexport function classMethod(\n kind: \"get\" | \"set\" | \"method\" | \"constructor\" | undefined = \"method\",\n key:\n | t.Identifier\n | t.StringLiteral\n | t.NumericLiteral\n | t.BigIntLiteral\n | t.Expression,\n params: (t.FunctionParameter | t.TSParameterProperty)[],\n body: t.BlockStatement,\n computed: boolean = false,\n _static: boolean = false,\n generator: boolean = false,\n async: boolean = false,\n): t.ClassMethod {\n const node: t.ClassMethod = {\n type: \"ClassMethod\",\n kind,\n key,\n params,\n body,\n computed,\n static: _static,\n generator,\n async,\n };\n const defs = NODE_FIELDS.ClassMethod;\n validate(defs.kind, node, \"kind\", kind);\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.computed, node, \"computed\", computed);\n validate(defs.static, node, \"static\", _static);\n validate(defs.generator, node, \"generator\", generator);\n validate(defs.async, node, \"async\", async);\n return node;\n}\nexport function objectPattern(\n properties: (t.RestElement | t.ObjectProperty)[],\n): t.ObjectPattern {\n const node: t.ObjectPattern = {\n type: \"ObjectPattern\",\n properties,\n };\n const defs = NODE_FIELDS.ObjectPattern;\n validate(defs.properties, node, \"properties\", properties, 1);\n return node;\n}\nexport function spreadElement(argument: t.Expression): t.SpreadElement {\n const node: t.SpreadElement = {\n type: \"SpreadElement\",\n argument,\n };\n const defs = NODE_FIELDS.SpreadElement;\n validate(defs.argument, node, \"argument\", argument, 1);\n return node;\n}\nfunction _super(): t.Super {\n return {\n type: \"Super\",\n };\n}\nexport { _super as super };\nexport function taggedTemplateExpression(\n tag: t.Expression,\n quasi: t.TemplateLiteral,\n): t.TaggedTemplateExpression {\n const node: t.TaggedTemplateExpression = {\n type: \"TaggedTemplateExpression\",\n tag,\n quasi,\n };\n const defs = NODE_FIELDS.TaggedTemplateExpression;\n validate(defs.tag, node, \"tag\", tag, 1);\n validate(defs.quasi, node, \"quasi\", quasi, 1);\n return node;\n}\nexport function templateElement(\n value: { raw: string; cooked?: string },\n tail: boolean = false,\n): t.TemplateElement {\n const node: t.TemplateElement = {\n type: \"TemplateElement\",\n value,\n tail,\n };\n const defs = NODE_FIELDS.TemplateElement;\n validate(defs.value, node, \"value\", value);\n validate(defs.tail, node, \"tail\", tail);\n return node;\n}\nexport function templateLiteral(\n quasis: t.TemplateElement[],\n expressions: (t.Expression | t.TSType)[],\n): t.TemplateLiteral {\n const node: t.TemplateLiteral = {\n type: \"TemplateLiteral\",\n quasis,\n expressions,\n };\n const defs = NODE_FIELDS.TemplateLiteral;\n validate(defs.quasis, node, \"quasis\", quasis, 1);\n validate(defs.expressions, node, \"expressions\", expressions, 1);\n return node;\n}\nexport function yieldExpression(\n argument: t.Expression | null = null,\n delegate: boolean = false,\n): t.YieldExpression {\n const node: t.YieldExpression = {\n type: \"YieldExpression\",\n argument,\n delegate,\n };\n const defs = NODE_FIELDS.YieldExpression;\n validate(defs.argument, node, \"argument\", argument, 1);\n validate(defs.delegate, node, \"delegate\", delegate);\n return node;\n}\nexport function awaitExpression(argument: t.Expression): t.AwaitExpression {\n const node: t.AwaitExpression = {\n type: \"AwaitExpression\",\n argument,\n };\n const defs = NODE_FIELDS.AwaitExpression;\n validate(defs.argument, node, \"argument\", argument, 1);\n return node;\n}\nfunction _import(): t.Import {\n return {\n type: \"Import\",\n };\n}\nexport { _import as import };\nexport function exportNamespaceSpecifier(\n exported: t.Identifier,\n): t.ExportNamespaceSpecifier {\n const node: t.ExportNamespaceSpecifier = {\n type: \"ExportNamespaceSpecifier\",\n exported,\n };\n const defs = NODE_FIELDS.ExportNamespaceSpecifier;\n validate(defs.exported, node, \"exported\", exported, 1);\n return node;\n}\nexport function optionalMemberExpression(\n object: t.Expression,\n property: t.Expression | t.Identifier,\n computed: boolean | undefined = false,\n optional: boolean,\n): t.OptionalMemberExpression {\n const node: t.OptionalMemberExpression = {\n type: \"OptionalMemberExpression\",\n object,\n property,\n computed,\n optional,\n };\n const defs = NODE_FIELDS.OptionalMemberExpression;\n validate(defs.object, node, \"object\", object, 1);\n validate(defs.property, node, \"property\", property, 1);\n validate(defs.computed, node, \"computed\", computed);\n validate(defs.optional, node, \"optional\", optional);\n return node;\n}\nexport function optionalCallExpression(\n callee: t.Expression,\n _arguments: (t.Expression | t.SpreadElement | t.ArgumentPlaceholder)[],\n optional: boolean,\n): t.OptionalCallExpression {\n const node: t.OptionalCallExpression = {\n type: \"OptionalCallExpression\",\n callee,\n arguments: _arguments,\n optional,\n };\n const defs = NODE_FIELDS.OptionalCallExpression;\n validate(defs.callee, node, \"callee\", callee, 1);\n validate(defs.arguments, node, \"arguments\", _arguments, 1);\n validate(defs.optional, node, \"optional\", optional);\n return node;\n}\nexport function classProperty(\n key:\n | t.Identifier\n | t.StringLiteral\n | t.NumericLiteral\n | t.BigIntLiteral\n | t.Expression,\n value: t.Expression | null = null,\n typeAnnotation: t.TypeAnnotation | t.TSTypeAnnotation | t.Noop | null = null,\n decorators: t.Decorator[] | null = null,\n computed: boolean = false,\n _static: boolean = false,\n): t.ClassProperty {\n const node: t.ClassProperty = {\n type: \"ClassProperty\",\n key,\n value,\n typeAnnotation,\n decorators,\n computed,\n static: _static,\n };\n const defs = NODE_FIELDS.ClassProperty;\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.value, node, \"value\", value, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n validate(defs.decorators, node, \"decorators\", decorators, 1);\n validate(defs.computed, node, \"computed\", computed);\n validate(defs.static, node, \"static\", _static);\n return node;\n}\nexport function classAccessorProperty(\n key:\n | t.Identifier\n | t.StringLiteral\n | t.NumericLiteral\n | t.BigIntLiteral\n | t.Expression\n | t.PrivateName,\n value: t.Expression | null = null,\n typeAnnotation: t.TypeAnnotation | t.TSTypeAnnotation | t.Noop | null = null,\n decorators: t.Decorator[] | null = null,\n computed: boolean = false,\n _static: boolean = false,\n): t.ClassAccessorProperty {\n const node: t.ClassAccessorProperty = {\n type: \"ClassAccessorProperty\",\n key,\n value,\n typeAnnotation,\n decorators,\n computed,\n static: _static,\n };\n const defs = NODE_FIELDS.ClassAccessorProperty;\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.value, node, \"value\", value, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n validate(defs.decorators, node, \"decorators\", decorators, 1);\n validate(defs.computed, node, \"computed\", computed);\n validate(defs.static, node, \"static\", _static);\n return node;\n}\nexport function classPrivateProperty(\n key: t.PrivateName,\n value: t.Expression | null = null,\n decorators: t.Decorator[] | null = null,\n _static: boolean = false,\n): t.ClassPrivateProperty {\n const node: t.ClassPrivateProperty = {\n type: \"ClassPrivateProperty\",\n key,\n value,\n decorators,\n static: _static,\n };\n const defs = NODE_FIELDS.ClassPrivateProperty;\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.value, node, \"value\", value, 1);\n validate(defs.decorators, node, \"decorators\", decorators, 1);\n validate(defs.static, node, \"static\", _static);\n return node;\n}\nexport function classPrivateMethod(\n kind: \"get\" | \"set\" | \"method\" | undefined = \"method\",\n key: t.PrivateName,\n params: (t.FunctionParameter | t.TSParameterProperty)[],\n body: t.BlockStatement,\n _static: boolean = false,\n): t.ClassPrivateMethod {\n const node: t.ClassPrivateMethod = {\n type: \"ClassPrivateMethod\",\n kind,\n key,\n params,\n body,\n static: _static,\n };\n const defs = NODE_FIELDS.ClassPrivateMethod;\n validate(defs.kind, node, \"kind\", kind);\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.static, node, \"static\", _static);\n return node;\n}\nexport function privateName(id: t.Identifier): t.PrivateName {\n const node: t.PrivateName = {\n type: \"PrivateName\",\n id,\n };\n const defs = NODE_FIELDS.PrivateName;\n validate(defs.id, node, \"id\", id, 1);\n return node;\n}\nexport function staticBlock(body: t.Statement[]): t.StaticBlock {\n const node: t.StaticBlock = {\n type: \"StaticBlock\",\n body,\n };\n const defs = NODE_FIELDS.StaticBlock;\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function importAttribute(\n key: t.Identifier | t.StringLiteral,\n value: t.StringLiteral,\n): t.ImportAttribute {\n const node: t.ImportAttribute = {\n type: \"ImportAttribute\",\n key,\n value,\n };\n const defs = NODE_FIELDS.ImportAttribute;\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.value, node, \"value\", value, 1);\n return node;\n}\nexport function anyTypeAnnotation(): t.AnyTypeAnnotation {\n return {\n type: \"AnyTypeAnnotation\",\n };\n}\nexport function arrayTypeAnnotation(\n elementType: t.FlowType,\n): t.ArrayTypeAnnotation {\n const node: t.ArrayTypeAnnotation = {\n type: \"ArrayTypeAnnotation\",\n elementType,\n };\n const defs = NODE_FIELDS.ArrayTypeAnnotation;\n validate(defs.elementType, node, \"elementType\", elementType, 1);\n return node;\n}\nexport function booleanTypeAnnotation(): t.BooleanTypeAnnotation {\n return {\n type: \"BooleanTypeAnnotation\",\n };\n}\nexport function booleanLiteralTypeAnnotation(\n value: boolean,\n): t.BooleanLiteralTypeAnnotation {\n const node: t.BooleanLiteralTypeAnnotation = {\n type: \"BooleanLiteralTypeAnnotation\",\n value,\n };\n const defs = NODE_FIELDS.BooleanLiteralTypeAnnotation;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function nullLiteralTypeAnnotation(): t.NullLiteralTypeAnnotation {\n return {\n type: \"NullLiteralTypeAnnotation\",\n };\n}\nexport function classImplements(\n id: t.Identifier,\n typeParameters: t.TypeParameterInstantiation | null = null,\n): t.ClassImplements {\n const node: t.ClassImplements = {\n type: \"ClassImplements\",\n id,\n typeParameters,\n };\n const defs = NODE_FIELDS.ClassImplements;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n return node;\n}\nexport function declareClass(\n id: t.Identifier,\n typeParameters: t.TypeParameterDeclaration | null | undefined = null,\n _extends: t.InterfaceExtends[] | null | undefined = null,\n body: t.ObjectTypeAnnotation,\n): t.DeclareClass {\n const node: t.DeclareClass = {\n type: \"DeclareClass\",\n id,\n typeParameters,\n extends: _extends,\n body,\n };\n const defs = NODE_FIELDS.DeclareClass;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.extends, node, \"extends\", _extends, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function declareFunction(id: t.Identifier): t.DeclareFunction {\n const node: t.DeclareFunction = {\n type: \"DeclareFunction\",\n id,\n };\n const defs = NODE_FIELDS.DeclareFunction;\n validate(defs.id, node, \"id\", id, 1);\n return node;\n}\nexport function declareInterface(\n id: t.Identifier,\n typeParameters: t.TypeParameterDeclaration | null | undefined = null,\n _extends: t.InterfaceExtends[] | null | undefined = null,\n body: t.ObjectTypeAnnotation,\n): t.DeclareInterface {\n const node: t.DeclareInterface = {\n type: \"DeclareInterface\",\n id,\n typeParameters,\n extends: _extends,\n body,\n };\n const defs = NODE_FIELDS.DeclareInterface;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.extends, node, \"extends\", _extends, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function declareModule(\n id: t.Identifier | t.StringLiteral,\n body: t.BlockStatement,\n kind: \"CommonJS\" | \"ES\" | null = null,\n): t.DeclareModule {\n const node: t.DeclareModule = {\n type: \"DeclareModule\",\n id,\n body,\n kind,\n };\n const defs = NODE_FIELDS.DeclareModule;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.kind, node, \"kind\", kind);\n return node;\n}\nexport function declareModuleExports(\n typeAnnotation: t.TypeAnnotation,\n): t.DeclareModuleExports {\n const node: t.DeclareModuleExports = {\n type: \"DeclareModuleExports\",\n typeAnnotation,\n };\n const defs = NODE_FIELDS.DeclareModuleExports;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport function declareTypeAlias(\n id: t.Identifier,\n typeParameters: t.TypeParameterDeclaration | null | undefined = null,\n right: t.FlowType,\n): t.DeclareTypeAlias {\n const node: t.DeclareTypeAlias = {\n type: \"DeclareTypeAlias\",\n id,\n typeParameters,\n right,\n };\n const defs = NODE_FIELDS.DeclareTypeAlias;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.right, node, \"right\", right, 1);\n return node;\n}\nexport function declareOpaqueType(\n id: t.Identifier,\n typeParameters: t.TypeParameterDeclaration | null = null,\n supertype: t.FlowType | null = null,\n): t.DeclareOpaqueType {\n const node: t.DeclareOpaqueType = {\n type: \"DeclareOpaqueType\",\n id,\n typeParameters,\n supertype,\n };\n const defs = NODE_FIELDS.DeclareOpaqueType;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.supertype, node, \"supertype\", supertype, 1);\n return node;\n}\nexport function declareVariable(id: t.Identifier): t.DeclareVariable {\n const node: t.DeclareVariable = {\n type: \"DeclareVariable\",\n id,\n };\n const defs = NODE_FIELDS.DeclareVariable;\n validate(defs.id, node, \"id\", id, 1);\n return node;\n}\nexport function declareExportDeclaration(\n declaration: t.Flow | null = null,\n specifiers: (t.ExportSpecifier | t.ExportNamespaceSpecifier)[] | null = null,\n source: t.StringLiteral | null = null,\n attributes: t.ImportAttribute[] | null = null,\n): t.DeclareExportDeclaration {\n const node: t.DeclareExportDeclaration = {\n type: \"DeclareExportDeclaration\",\n declaration,\n specifiers,\n source,\n attributes,\n };\n const defs = NODE_FIELDS.DeclareExportDeclaration;\n validate(defs.declaration, node, \"declaration\", declaration, 1);\n validate(defs.specifiers, node, \"specifiers\", specifiers, 1);\n validate(defs.source, node, \"source\", source, 1);\n validate(defs.attributes, node, \"attributes\", attributes, 1);\n return node;\n}\nexport function declareExportAllDeclaration(\n source: t.StringLiteral,\n attributes: t.ImportAttribute[] | null = null,\n): t.DeclareExportAllDeclaration {\n const node: t.DeclareExportAllDeclaration = {\n type: \"DeclareExportAllDeclaration\",\n source,\n attributes,\n };\n const defs = NODE_FIELDS.DeclareExportAllDeclaration;\n validate(defs.source, node, \"source\", source, 1);\n validate(defs.attributes, node, \"attributes\", attributes, 1);\n return node;\n}\nexport function declaredPredicate(value: t.Flow): t.DeclaredPredicate {\n const node: t.DeclaredPredicate = {\n type: \"DeclaredPredicate\",\n value,\n };\n const defs = NODE_FIELDS.DeclaredPredicate;\n validate(defs.value, node, \"value\", value, 1);\n return node;\n}\nexport function existsTypeAnnotation(): t.ExistsTypeAnnotation {\n return {\n type: \"ExistsTypeAnnotation\",\n };\n}\nexport function functionTypeAnnotation(\n typeParameters: t.TypeParameterDeclaration | null | undefined = null,\n params: t.FunctionTypeParam[],\n rest: t.FunctionTypeParam | null | undefined = null,\n returnType: t.FlowType,\n): t.FunctionTypeAnnotation {\n const node: t.FunctionTypeAnnotation = {\n type: \"FunctionTypeAnnotation\",\n typeParameters,\n params,\n rest,\n returnType,\n };\n const defs = NODE_FIELDS.FunctionTypeAnnotation;\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.rest, node, \"rest\", rest, 1);\n validate(defs.returnType, node, \"returnType\", returnType, 1);\n return node;\n}\nexport function functionTypeParam(\n name: t.Identifier | null | undefined = null,\n typeAnnotation: t.FlowType,\n): t.FunctionTypeParam {\n const node: t.FunctionTypeParam = {\n type: \"FunctionTypeParam\",\n name,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.FunctionTypeParam;\n validate(defs.name, node, \"name\", name, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport function genericTypeAnnotation(\n id: t.Identifier | t.QualifiedTypeIdentifier,\n typeParameters: t.TypeParameterInstantiation | null = null,\n): t.GenericTypeAnnotation {\n const node: t.GenericTypeAnnotation = {\n type: \"GenericTypeAnnotation\",\n id,\n typeParameters,\n };\n const defs = NODE_FIELDS.GenericTypeAnnotation;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n return node;\n}\nexport function inferredPredicate(): t.InferredPredicate {\n return {\n type: \"InferredPredicate\",\n };\n}\nexport function interfaceExtends(\n id: t.Identifier | t.QualifiedTypeIdentifier,\n typeParameters: t.TypeParameterInstantiation | null = null,\n): t.InterfaceExtends {\n const node: t.InterfaceExtends = {\n type: \"InterfaceExtends\",\n id,\n typeParameters,\n };\n const defs = NODE_FIELDS.InterfaceExtends;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n return node;\n}\nexport function interfaceDeclaration(\n id: t.Identifier,\n typeParameters: t.TypeParameterDeclaration | null | undefined = null,\n _extends: t.InterfaceExtends[] | null | undefined = null,\n body: t.ObjectTypeAnnotation,\n): t.InterfaceDeclaration {\n const node: t.InterfaceDeclaration = {\n type: \"InterfaceDeclaration\",\n id,\n typeParameters,\n extends: _extends,\n body,\n };\n const defs = NODE_FIELDS.InterfaceDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.extends, node, \"extends\", _extends, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function interfaceTypeAnnotation(\n _extends: t.InterfaceExtends[] | null | undefined = null,\n body: t.ObjectTypeAnnotation,\n): t.InterfaceTypeAnnotation {\n const node: t.InterfaceTypeAnnotation = {\n type: \"InterfaceTypeAnnotation\",\n extends: _extends,\n body,\n };\n const defs = NODE_FIELDS.InterfaceTypeAnnotation;\n validate(defs.extends, node, \"extends\", _extends, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function intersectionTypeAnnotation(\n types: t.FlowType[],\n): t.IntersectionTypeAnnotation {\n const node: t.IntersectionTypeAnnotation = {\n type: \"IntersectionTypeAnnotation\",\n types,\n };\n const defs = NODE_FIELDS.IntersectionTypeAnnotation;\n validate(defs.types, node, \"types\", types, 1);\n return node;\n}\nexport function mixedTypeAnnotation(): t.MixedTypeAnnotation {\n return {\n type: \"MixedTypeAnnotation\",\n };\n}\nexport function emptyTypeAnnotation(): t.EmptyTypeAnnotation {\n return {\n type: \"EmptyTypeAnnotation\",\n };\n}\nexport function nullableTypeAnnotation(\n typeAnnotation: t.FlowType,\n): t.NullableTypeAnnotation {\n const node: t.NullableTypeAnnotation = {\n type: \"NullableTypeAnnotation\",\n typeAnnotation,\n };\n const defs = NODE_FIELDS.NullableTypeAnnotation;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport function numberLiteralTypeAnnotation(\n value: number,\n): t.NumberLiteralTypeAnnotation {\n const node: t.NumberLiteralTypeAnnotation = {\n type: \"NumberLiteralTypeAnnotation\",\n value,\n };\n const defs = NODE_FIELDS.NumberLiteralTypeAnnotation;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function numberTypeAnnotation(): t.NumberTypeAnnotation {\n return {\n type: \"NumberTypeAnnotation\",\n };\n}\nexport function objectTypeAnnotation(\n properties: (t.ObjectTypeProperty | t.ObjectTypeSpreadProperty)[],\n indexers: t.ObjectTypeIndexer[] = [],\n callProperties: t.ObjectTypeCallProperty[] = [],\n internalSlots: t.ObjectTypeInternalSlot[] = [],\n exact: boolean = false,\n): t.ObjectTypeAnnotation {\n const node: t.ObjectTypeAnnotation = {\n type: \"ObjectTypeAnnotation\",\n properties,\n indexers,\n callProperties,\n internalSlots,\n exact,\n };\n const defs = NODE_FIELDS.ObjectTypeAnnotation;\n validate(defs.properties, node, \"properties\", properties, 1);\n validate(defs.indexers, node, \"indexers\", indexers, 1);\n validate(defs.callProperties, node, \"callProperties\", callProperties, 1);\n validate(defs.internalSlots, node, \"internalSlots\", internalSlots, 1);\n validate(defs.exact, node, \"exact\", exact);\n return node;\n}\nexport function objectTypeInternalSlot(\n id: t.Identifier,\n value: t.FlowType,\n optional: boolean,\n _static: boolean,\n method: boolean,\n): t.ObjectTypeInternalSlot {\n const node: t.ObjectTypeInternalSlot = {\n type: \"ObjectTypeInternalSlot\",\n id,\n value,\n optional,\n static: _static,\n method,\n };\n const defs = NODE_FIELDS.ObjectTypeInternalSlot;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.value, node, \"value\", value, 1);\n validate(defs.optional, node, \"optional\", optional);\n validate(defs.static, node, \"static\", _static);\n validate(defs.method, node, \"method\", method);\n return node;\n}\nexport function objectTypeCallProperty(\n value: t.FlowType,\n): t.ObjectTypeCallProperty {\n const node: t.ObjectTypeCallProperty = {\n type: \"ObjectTypeCallProperty\",\n value,\n static: null,\n };\n const defs = NODE_FIELDS.ObjectTypeCallProperty;\n validate(defs.value, node, \"value\", value, 1);\n return node;\n}\nexport function objectTypeIndexer(\n id: t.Identifier | null | undefined = null,\n key: t.FlowType,\n value: t.FlowType,\n variance: t.Variance | null = null,\n): t.ObjectTypeIndexer {\n const node: t.ObjectTypeIndexer = {\n type: \"ObjectTypeIndexer\",\n id,\n key,\n value,\n variance,\n static: null,\n };\n const defs = NODE_FIELDS.ObjectTypeIndexer;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.value, node, \"value\", value, 1);\n validate(defs.variance, node, \"variance\", variance, 1);\n return node;\n}\nexport function objectTypeProperty(\n key: t.Identifier | t.StringLiteral,\n value: t.FlowType,\n variance: t.Variance | null = null,\n): t.ObjectTypeProperty {\n const node: t.ObjectTypeProperty = {\n type: \"ObjectTypeProperty\",\n key,\n value,\n variance,\n kind: null,\n method: null,\n optional: null,\n proto: null,\n static: null,\n };\n const defs = NODE_FIELDS.ObjectTypeProperty;\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.value, node, \"value\", value, 1);\n validate(defs.variance, node, \"variance\", variance, 1);\n return node;\n}\nexport function objectTypeSpreadProperty(\n argument: t.FlowType,\n): t.ObjectTypeSpreadProperty {\n const node: t.ObjectTypeSpreadProperty = {\n type: \"ObjectTypeSpreadProperty\",\n argument,\n };\n const defs = NODE_FIELDS.ObjectTypeSpreadProperty;\n validate(defs.argument, node, \"argument\", argument, 1);\n return node;\n}\nexport function opaqueType(\n id: t.Identifier,\n typeParameters: t.TypeParameterDeclaration | null | undefined = null,\n supertype: t.FlowType | null | undefined = null,\n impltype: t.FlowType,\n): t.OpaqueType {\n const node: t.OpaqueType = {\n type: \"OpaqueType\",\n id,\n typeParameters,\n supertype,\n impltype,\n };\n const defs = NODE_FIELDS.OpaqueType;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.supertype, node, \"supertype\", supertype, 1);\n validate(defs.impltype, node, \"impltype\", impltype, 1);\n return node;\n}\nexport function qualifiedTypeIdentifier(\n id: t.Identifier,\n qualification: t.Identifier | t.QualifiedTypeIdentifier,\n): t.QualifiedTypeIdentifier {\n const node: t.QualifiedTypeIdentifier = {\n type: \"QualifiedTypeIdentifier\",\n id,\n qualification,\n };\n const defs = NODE_FIELDS.QualifiedTypeIdentifier;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.qualification, node, \"qualification\", qualification, 1);\n return node;\n}\nexport function stringLiteralTypeAnnotation(\n value: string,\n): t.StringLiteralTypeAnnotation {\n const node: t.StringLiteralTypeAnnotation = {\n type: \"StringLiteralTypeAnnotation\",\n value,\n };\n const defs = NODE_FIELDS.StringLiteralTypeAnnotation;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function stringTypeAnnotation(): t.StringTypeAnnotation {\n return {\n type: \"StringTypeAnnotation\",\n };\n}\nexport function symbolTypeAnnotation(): t.SymbolTypeAnnotation {\n return {\n type: \"SymbolTypeAnnotation\",\n };\n}\nexport function thisTypeAnnotation(): t.ThisTypeAnnotation {\n return {\n type: \"ThisTypeAnnotation\",\n };\n}\nexport function tupleTypeAnnotation(\n types: t.FlowType[],\n): t.TupleTypeAnnotation {\n const node: t.TupleTypeAnnotation = {\n type: \"TupleTypeAnnotation\",\n types,\n };\n const defs = NODE_FIELDS.TupleTypeAnnotation;\n validate(defs.types, node, \"types\", types, 1);\n return node;\n}\nexport function typeofTypeAnnotation(\n argument: t.FlowType,\n): t.TypeofTypeAnnotation {\n const node: t.TypeofTypeAnnotation = {\n type: \"TypeofTypeAnnotation\",\n argument,\n };\n const defs = NODE_FIELDS.TypeofTypeAnnotation;\n validate(defs.argument, node, \"argument\", argument, 1);\n return node;\n}\nexport function typeAlias(\n id: t.Identifier,\n typeParameters: t.TypeParameterDeclaration | null | undefined = null,\n right: t.FlowType,\n): t.TypeAlias {\n const node: t.TypeAlias = {\n type: \"TypeAlias\",\n id,\n typeParameters,\n right,\n };\n const defs = NODE_FIELDS.TypeAlias;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.right, node, \"right\", right, 1);\n return node;\n}\nexport function typeAnnotation(typeAnnotation: t.FlowType): t.TypeAnnotation {\n const node: t.TypeAnnotation = {\n type: \"TypeAnnotation\",\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TypeAnnotation;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport function typeCastExpression(\n expression: t.Expression,\n typeAnnotation: t.TypeAnnotation,\n): t.TypeCastExpression {\n const node: t.TypeCastExpression = {\n type: \"TypeCastExpression\",\n expression,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TypeCastExpression;\n validate(defs.expression, node, \"expression\", expression, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport function typeParameter(\n bound: t.TypeAnnotation | null = null,\n _default: t.FlowType | null = null,\n variance: t.Variance | null = null,\n): t.TypeParameter {\n const node: t.TypeParameter = {\n type: \"TypeParameter\",\n bound,\n default: _default,\n variance,\n name: null,\n };\n const defs = NODE_FIELDS.TypeParameter;\n validate(defs.bound, node, \"bound\", bound, 1);\n validate(defs.default, node, \"default\", _default, 1);\n validate(defs.variance, node, \"variance\", variance, 1);\n return node;\n}\nexport function typeParameterDeclaration(\n params: t.TypeParameter[],\n): t.TypeParameterDeclaration {\n const node: t.TypeParameterDeclaration = {\n type: \"TypeParameterDeclaration\",\n params,\n };\n const defs = NODE_FIELDS.TypeParameterDeclaration;\n validate(defs.params, node, \"params\", params, 1);\n return node;\n}\nexport function typeParameterInstantiation(\n params: t.FlowType[],\n): t.TypeParameterInstantiation {\n const node: t.TypeParameterInstantiation = {\n type: \"TypeParameterInstantiation\",\n params,\n };\n const defs = NODE_FIELDS.TypeParameterInstantiation;\n validate(defs.params, node, \"params\", params, 1);\n return node;\n}\nexport function unionTypeAnnotation(\n types: t.FlowType[],\n): t.UnionTypeAnnotation {\n const node: t.UnionTypeAnnotation = {\n type: \"UnionTypeAnnotation\",\n types,\n };\n const defs = NODE_FIELDS.UnionTypeAnnotation;\n validate(defs.types, node, \"types\", types, 1);\n return node;\n}\nexport function variance(kind: \"minus\" | \"plus\"): t.Variance {\n const node: t.Variance = {\n type: \"Variance\",\n kind,\n };\n const defs = NODE_FIELDS.Variance;\n validate(defs.kind, node, \"kind\", kind);\n return node;\n}\nexport function voidTypeAnnotation(): t.VoidTypeAnnotation {\n return {\n type: \"VoidTypeAnnotation\",\n };\n}\nexport function enumDeclaration(\n id: t.Identifier,\n body:\n | t.EnumBooleanBody\n | t.EnumNumberBody\n | t.EnumStringBody\n | t.EnumSymbolBody,\n): t.EnumDeclaration {\n const node: t.EnumDeclaration = {\n type: \"EnumDeclaration\",\n id,\n body,\n };\n const defs = NODE_FIELDS.EnumDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function enumBooleanBody(\n members: t.EnumBooleanMember[],\n): t.EnumBooleanBody {\n const node: t.EnumBooleanBody = {\n type: \"EnumBooleanBody\",\n members,\n explicitType: null,\n hasUnknownMembers: null,\n };\n const defs = NODE_FIELDS.EnumBooleanBody;\n validate(defs.members, node, \"members\", members, 1);\n return node;\n}\nexport function enumNumberBody(\n members: t.EnumNumberMember[],\n): t.EnumNumberBody {\n const node: t.EnumNumberBody = {\n type: \"EnumNumberBody\",\n members,\n explicitType: null,\n hasUnknownMembers: null,\n };\n const defs = NODE_FIELDS.EnumNumberBody;\n validate(defs.members, node, \"members\", members, 1);\n return node;\n}\nexport function enumStringBody(\n members: (t.EnumStringMember | t.EnumDefaultedMember)[],\n): t.EnumStringBody {\n const node: t.EnumStringBody = {\n type: \"EnumStringBody\",\n members,\n explicitType: null,\n hasUnknownMembers: null,\n };\n const defs = NODE_FIELDS.EnumStringBody;\n validate(defs.members, node, \"members\", members, 1);\n return node;\n}\nexport function enumSymbolBody(\n members: t.EnumDefaultedMember[],\n): t.EnumSymbolBody {\n const node: t.EnumSymbolBody = {\n type: \"EnumSymbolBody\",\n members,\n hasUnknownMembers: null,\n };\n const defs = NODE_FIELDS.EnumSymbolBody;\n validate(defs.members, node, \"members\", members, 1);\n return node;\n}\nexport function enumBooleanMember(id: t.Identifier): t.EnumBooleanMember {\n const node: t.EnumBooleanMember = {\n type: \"EnumBooleanMember\",\n id,\n init: null,\n };\n const defs = NODE_FIELDS.EnumBooleanMember;\n validate(defs.id, node, \"id\", id, 1);\n return node;\n}\nexport function enumNumberMember(\n id: t.Identifier,\n init: t.NumericLiteral,\n): t.EnumNumberMember {\n const node: t.EnumNumberMember = {\n type: \"EnumNumberMember\",\n id,\n init,\n };\n const defs = NODE_FIELDS.EnumNumberMember;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.init, node, \"init\", init, 1);\n return node;\n}\nexport function enumStringMember(\n id: t.Identifier,\n init: t.StringLiteral,\n): t.EnumStringMember {\n const node: t.EnumStringMember = {\n type: \"EnumStringMember\",\n id,\n init,\n };\n const defs = NODE_FIELDS.EnumStringMember;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.init, node, \"init\", init, 1);\n return node;\n}\nexport function enumDefaultedMember(id: t.Identifier): t.EnumDefaultedMember {\n const node: t.EnumDefaultedMember = {\n type: \"EnumDefaultedMember\",\n id,\n };\n const defs = NODE_FIELDS.EnumDefaultedMember;\n validate(defs.id, node, \"id\", id, 1);\n return node;\n}\nexport function indexedAccessType(\n objectType: t.FlowType,\n indexType: t.FlowType,\n): t.IndexedAccessType {\n const node: t.IndexedAccessType = {\n type: \"IndexedAccessType\",\n objectType,\n indexType,\n };\n const defs = NODE_FIELDS.IndexedAccessType;\n validate(defs.objectType, node, \"objectType\", objectType, 1);\n validate(defs.indexType, node, \"indexType\", indexType, 1);\n return node;\n}\nexport function optionalIndexedAccessType(\n objectType: t.FlowType,\n indexType: t.FlowType,\n): t.OptionalIndexedAccessType {\n const node: t.OptionalIndexedAccessType = {\n type: \"OptionalIndexedAccessType\",\n objectType,\n indexType,\n optional: null,\n };\n const defs = NODE_FIELDS.OptionalIndexedAccessType;\n validate(defs.objectType, node, \"objectType\", objectType, 1);\n validate(defs.indexType, node, \"indexType\", indexType, 1);\n return node;\n}\nexport function jsxAttribute(\n name: t.JSXIdentifier | t.JSXNamespacedName,\n value:\n | t.JSXElement\n | t.JSXFragment\n | t.StringLiteral\n | t.JSXExpressionContainer\n | null = null,\n): t.JSXAttribute {\n const node: t.JSXAttribute = {\n type: \"JSXAttribute\",\n name,\n value,\n };\n const defs = NODE_FIELDS.JSXAttribute;\n validate(defs.name, node, \"name\", name, 1);\n validate(defs.value, node, \"value\", value, 1);\n return node;\n}\nexport { jsxAttribute as jSXAttribute };\nexport function jsxClosingElement(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n): t.JSXClosingElement {\n const node: t.JSXClosingElement = {\n type: \"JSXClosingElement\",\n name,\n };\n const defs = NODE_FIELDS.JSXClosingElement;\n validate(defs.name, node, \"name\", name, 1);\n return node;\n}\nexport { jsxClosingElement as jSXClosingElement };\nexport function jsxElement(\n openingElement: t.JSXOpeningElement,\n closingElement: t.JSXClosingElement | null | undefined = null,\n children: (\n | t.JSXText\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXElement\n | t.JSXFragment\n )[],\n selfClosing: boolean | null = null,\n): t.JSXElement {\n const node: t.JSXElement = {\n type: \"JSXElement\",\n openingElement,\n closingElement,\n children,\n selfClosing,\n };\n const defs = NODE_FIELDS.JSXElement;\n validate(defs.openingElement, node, \"openingElement\", openingElement, 1);\n validate(defs.closingElement, node, \"closingElement\", closingElement, 1);\n validate(defs.children, node, \"children\", children, 1);\n validate(defs.selfClosing, node, \"selfClosing\", selfClosing);\n return node;\n}\nexport { jsxElement as jSXElement };\nexport function jsxEmptyExpression(): t.JSXEmptyExpression {\n return {\n type: \"JSXEmptyExpression\",\n };\n}\nexport { jsxEmptyExpression as jSXEmptyExpression };\nexport function jsxExpressionContainer(\n expression: t.Expression | t.JSXEmptyExpression,\n): t.JSXExpressionContainer {\n const node: t.JSXExpressionContainer = {\n type: \"JSXExpressionContainer\",\n expression,\n };\n const defs = NODE_FIELDS.JSXExpressionContainer;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport { jsxExpressionContainer as jSXExpressionContainer };\nexport function jsxSpreadChild(expression: t.Expression): t.JSXSpreadChild {\n const node: t.JSXSpreadChild = {\n type: \"JSXSpreadChild\",\n expression,\n };\n const defs = NODE_FIELDS.JSXSpreadChild;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport { jsxSpreadChild as jSXSpreadChild };\nexport function jsxIdentifier(name: string): t.JSXIdentifier {\n const node: t.JSXIdentifier = {\n type: \"JSXIdentifier\",\n name,\n };\n const defs = NODE_FIELDS.JSXIdentifier;\n validate(defs.name, node, \"name\", name);\n return node;\n}\nexport { jsxIdentifier as jSXIdentifier };\nexport function jsxMemberExpression(\n object: t.JSXMemberExpression | t.JSXIdentifier,\n property: t.JSXIdentifier,\n): t.JSXMemberExpression {\n const node: t.JSXMemberExpression = {\n type: \"JSXMemberExpression\",\n object,\n property,\n };\n const defs = NODE_FIELDS.JSXMemberExpression;\n validate(defs.object, node, \"object\", object, 1);\n validate(defs.property, node, \"property\", property, 1);\n return node;\n}\nexport { jsxMemberExpression as jSXMemberExpression };\nexport function jsxNamespacedName(\n namespace: t.JSXIdentifier,\n name: t.JSXIdentifier,\n): t.JSXNamespacedName {\n const node: t.JSXNamespacedName = {\n type: \"JSXNamespacedName\",\n namespace,\n name,\n };\n const defs = NODE_FIELDS.JSXNamespacedName;\n validate(defs.namespace, node, \"namespace\", namespace, 1);\n validate(defs.name, node, \"name\", name, 1);\n return node;\n}\nexport { jsxNamespacedName as jSXNamespacedName };\nexport function jsxOpeningElement(\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\n attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[],\n selfClosing: boolean = false,\n): t.JSXOpeningElement {\n const node: t.JSXOpeningElement = {\n type: \"JSXOpeningElement\",\n name,\n attributes,\n selfClosing,\n };\n const defs = NODE_FIELDS.JSXOpeningElement;\n validate(defs.name, node, \"name\", name, 1);\n validate(defs.attributes, node, \"attributes\", attributes, 1);\n validate(defs.selfClosing, node, \"selfClosing\", selfClosing);\n return node;\n}\nexport { jsxOpeningElement as jSXOpeningElement };\nexport function jsxSpreadAttribute(\n argument: t.Expression,\n): t.JSXSpreadAttribute {\n const node: t.JSXSpreadAttribute = {\n type: \"JSXSpreadAttribute\",\n argument,\n };\n const defs = NODE_FIELDS.JSXSpreadAttribute;\n validate(defs.argument, node, \"argument\", argument, 1);\n return node;\n}\nexport { jsxSpreadAttribute as jSXSpreadAttribute };\nexport function jsxText(value: string): t.JSXText {\n const node: t.JSXText = {\n type: \"JSXText\",\n value,\n };\n const defs = NODE_FIELDS.JSXText;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport { jsxText as jSXText };\nexport function jsxFragment(\n openingFragment: t.JSXOpeningFragment,\n closingFragment: t.JSXClosingFragment,\n children: (\n | t.JSXText\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXElement\n | t.JSXFragment\n )[],\n): t.JSXFragment {\n const node: t.JSXFragment = {\n type: \"JSXFragment\",\n openingFragment,\n closingFragment,\n children,\n };\n const defs = NODE_FIELDS.JSXFragment;\n validate(defs.openingFragment, node, \"openingFragment\", openingFragment, 1);\n validate(defs.closingFragment, node, \"closingFragment\", closingFragment, 1);\n validate(defs.children, node, \"children\", children, 1);\n return node;\n}\nexport { jsxFragment as jSXFragment };\nexport function jsxOpeningFragment(): t.JSXOpeningFragment {\n return {\n type: \"JSXOpeningFragment\",\n };\n}\nexport { jsxOpeningFragment as jSXOpeningFragment };\nexport function jsxClosingFragment(): t.JSXClosingFragment {\n return {\n type: \"JSXClosingFragment\",\n };\n}\nexport { jsxClosingFragment as jSXClosingFragment };\nexport function noop(): t.Noop {\n return {\n type: \"Noop\",\n };\n}\nexport function placeholder(\n expectedNode:\n | \"Identifier\"\n | \"StringLiteral\"\n | \"Expression\"\n | \"Statement\"\n | \"Declaration\"\n | \"BlockStatement\"\n | \"ClassBody\"\n | \"Pattern\",\n name: t.Identifier,\n): t.Placeholder {\n const node: t.Placeholder = {\n type: \"Placeholder\",\n expectedNode,\n name,\n };\n const defs = NODE_FIELDS.Placeholder;\n validate(defs.expectedNode, node, \"expectedNode\", expectedNode);\n validate(defs.name, node, \"name\", name, 1);\n return node;\n}\nexport function v8IntrinsicIdentifier(name: string): t.V8IntrinsicIdentifier {\n const node: t.V8IntrinsicIdentifier = {\n type: \"V8IntrinsicIdentifier\",\n name,\n };\n const defs = NODE_FIELDS.V8IntrinsicIdentifier;\n validate(defs.name, node, \"name\", name);\n return node;\n}\nexport function argumentPlaceholder(): t.ArgumentPlaceholder {\n return {\n type: \"ArgumentPlaceholder\",\n };\n}\nexport function bindExpression(\n object: t.Expression,\n callee: t.Expression,\n): t.BindExpression {\n const node: t.BindExpression = {\n type: \"BindExpression\",\n object,\n callee,\n };\n const defs = NODE_FIELDS.BindExpression;\n validate(defs.object, node, \"object\", object, 1);\n validate(defs.callee, node, \"callee\", callee, 1);\n return node;\n}\nexport function decorator(expression: t.Expression): t.Decorator {\n const node: t.Decorator = {\n type: \"Decorator\",\n expression,\n };\n const defs = NODE_FIELDS.Decorator;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport function doExpression(\n body: t.BlockStatement,\n async: boolean = false,\n): t.DoExpression {\n const node: t.DoExpression = {\n type: \"DoExpression\",\n body,\n async,\n };\n const defs = NODE_FIELDS.DoExpression;\n validate(defs.body, node, \"body\", body, 1);\n validate(defs.async, node, \"async\", async);\n return node;\n}\nexport function exportDefaultSpecifier(\n exported: t.Identifier,\n): t.ExportDefaultSpecifier {\n const node: t.ExportDefaultSpecifier = {\n type: \"ExportDefaultSpecifier\",\n exported,\n };\n const defs = NODE_FIELDS.ExportDefaultSpecifier;\n validate(defs.exported, node, \"exported\", exported, 1);\n return node;\n}\nexport function recordExpression(\n properties: (t.ObjectProperty | t.SpreadElement)[],\n): t.RecordExpression {\n const node: t.RecordExpression = {\n type: \"RecordExpression\",\n properties,\n };\n const defs = NODE_FIELDS.RecordExpression;\n validate(defs.properties, node, \"properties\", properties, 1);\n return node;\n}\nexport function tupleExpression(\n elements: (t.Expression | t.SpreadElement)[] = [],\n): t.TupleExpression {\n const node: t.TupleExpression = {\n type: \"TupleExpression\",\n elements,\n };\n const defs = NODE_FIELDS.TupleExpression;\n validate(defs.elements, node, \"elements\", elements, 1);\n return node;\n}\nexport function decimalLiteral(value: string): t.DecimalLiteral {\n const node: t.DecimalLiteral = {\n type: \"DecimalLiteral\",\n value,\n };\n const defs = NODE_FIELDS.DecimalLiteral;\n validate(defs.value, node, \"value\", value);\n return node;\n}\nexport function moduleExpression(body: t.Program): t.ModuleExpression {\n const node: t.ModuleExpression = {\n type: \"ModuleExpression\",\n body,\n };\n const defs = NODE_FIELDS.ModuleExpression;\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport function topicReference(): t.TopicReference {\n return {\n type: \"TopicReference\",\n };\n}\nexport function pipelineTopicExpression(\n expression: t.Expression,\n): t.PipelineTopicExpression {\n const node: t.PipelineTopicExpression = {\n type: \"PipelineTopicExpression\",\n expression,\n };\n const defs = NODE_FIELDS.PipelineTopicExpression;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport function pipelineBareFunction(\n callee: t.Expression,\n): t.PipelineBareFunction {\n const node: t.PipelineBareFunction = {\n type: \"PipelineBareFunction\",\n callee,\n };\n const defs = NODE_FIELDS.PipelineBareFunction;\n validate(defs.callee, node, \"callee\", callee, 1);\n return node;\n}\nexport function pipelinePrimaryTopicReference(): t.PipelinePrimaryTopicReference {\n return {\n type: \"PipelinePrimaryTopicReference\",\n };\n}\nexport function voidPattern(): t.VoidPattern {\n return {\n type: \"VoidPattern\",\n };\n}\nexport function tsParameterProperty(\n parameter: t.Identifier | t.AssignmentPattern,\n): t.TSParameterProperty {\n const node: t.TSParameterProperty = {\n type: \"TSParameterProperty\",\n parameter,\n };\n const defs = NODE_FIELDS.TSParameterProperty;\n validate(defs.parameter, node, \"parameter\", parameter, 1);\n return node;\n}\nexport { tsParameterProperty as tSParameterProperty };\nexport function tsDeclareFunction(\n id: t.Identifier | null | undefined = null,\n typeParameters:\n | t.TSTypeParameterDeclaration\n | t.Noop\n | null\n | undefined = null,\n params: t.FunctionParameter[],\n returnType: t.TSTypeAnnotation | t.Noop | null = null,\n): t.TSDeclareFunction {\n const node: t.TSDeclareFunction = {\n type: \"TSDeclareFunction\",\n id,\n typeParameters,\n params,\n returnType,\n };\n const defs = NODE_FIELDS.TSDeclareFunction;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.returnType, node, \"returnType\", returnType, 1);\n return node;\n}\nexport { tsDeclareFunction as tSDeclareFunction };\nexport function tsDeclareMethod(\n decorators: t.Decorator[] | null | undefined = null,\n key:\n | t.Identifier\n | t.StringLiteral\n | t.NumericLiteral\n | t.BigIntLiteral\n | t.Expression,\n typeParameters:\n | t.TSTypeParameterDeclaration\n | t.Noop\n | null\n | undefined = null,\n params: (t.FunctionParameter | t.TSParameterProperty)[],\n returnType: t.TSTypeAnnotation | t.Noop | null = null,\n): t.TSDeclareMethod {\n const node: t.TSDeclareMethod = {\n type: \"TSDeclareMethod\",\n decorators,\n key,\n typeParameters,\n params,\n returnType,\n };\n const defs = NODE_FIELDS.TSDeclareMethod;\n validate(defs.decorators, node, \"decorators\", decorators, 1);\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.params, node, \"params\", params, 1);\n validate(defs.returnType, node, \"returnType\", returnType, 1);\n return node;\n}\nexport { tsDeclareMethod as tSDeclareMethod };\nexport function tsQualifiedName(\n left: t.TSEntityName,\n right: t.Identifier,\n): t.TSQualifiedName {\n const node: t.TSQualifiedName = {\n type: \"TSQualifiedName\",\n left,\n right,\n };\n const defs = NODE_FIELDS.TSQualifiedName;\n validate(defs.left, node, \"left\", left, 1);\n validate(defs.right, node, \"right\", right, 1);\n return node;\n}\nexport { tsQualifiedName as tSQualifiedName };\nexport function tsCallSignatureDeclaration(\n typeParameters: t.TSTypeParameterDeclaration | null | undefined = null,\n parameters: (\n | t.ArrayPattern\n | t.Identifier\n | t.ObjectPattern\n | t.RestElement\n )[],\n typeAnnotation: t.TSTypeAnnotation | null = null,\n): t.TSCallSignatureDeclaration {\n const node: t.TSCallSignatureDeclaration = {\n type: \"TSCallSignatureDeclaration\",\n typeParameters,\n parameters,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSCallSignatureDeclaration;\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.parameters, node, \"parameters\", parameters, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsCallSignatureDeclaration as tSCallSignatureDeclaration };\nexport function tsConstructSignatureDeclaration(\n typeParameters: t.TSTypeParameterDeclaration | null | undefined = null,\n parameters: (\n | t.ArrayPattern\n | t.Identifier\n | t.ObjectPattern\n | t.RestElement\n )[],\n typeAnnotation: t.TSTypeAnnotation | null = null,\n): t.TSConstructSignatureDeclaration {\n const node: t.TSConstructSignatureDeclaration = {\n type: \"TSConstructSignatureDeclaration\",\n typeParameters,\n parameters,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSConstructSignatureDeclaration;\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.parameters, node, \"parameters\", parameters, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsConstructSignatureDeclaration as tSConstructSignatureDeclaration };\nexport function tsPropertySignature(\n key: t.Expression,\n typeAnnotation: t.TSTypeAnnotation | null = null,\n): t.TSPropertySignature {\n const node: t.TSPropertySignature = {\n type: \"TSPropertySignature\",\n key,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSPropertySignature;\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsPropertySignature as tSPropertySignature };\nexport function tsMethodSignature(\n key: t.Expression,\n typeParameters: t.TSTypeParameterDeclaration | null | undefined = null,\n parameters: (\n | t.ArrayPattern\n | t.Identifier\n | t.ObjectPattern\n | t.RestElement\n )[],\n typeAnnotation: t.TSTypeAnnotation | null = null,\n): t.TSMethodSignature {\n const node: t.TSMethodSignature = {\n type: \"TSMethodSignature\",\n key,\n typeParameters,\n parameters,\n typeAnnotation,\n kind: null,\n };\n const defs = NODE_FIELDS.TSMethodSignature;\n validate(defs.key, node, \"key\", key, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.parameters, node, \"parameters\", parameters, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsMethodSignature as tSMethodSignature };\nexport function tsIndexSignature(\n parameters: t.Identifier[],\n typeAnnotation: t.TSTypeAnnotation | null = null,\n): t.TSIndexSignature {\n const node: t.TSIndexSignature = {\n type: \"TSIndexSignature\",\n parameters,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSIndexSignature;\n validate(defs.parameters, node, \"parameters\", parameters, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsIndexSignature as tSIndexSignature };\nexport function tsAnyKeyword(): t.TSAnyKeyword {\n return {\n type: \"TSAnyKeyword\",\n };\n}\nexport { tsAnyKeyword as tSAnyKeyword };\nexport function tsBooleanKeyword(): t.TSBooleanKeyword {\n return {\n type: \"TSBooleanKeyword\",\n };\n}\nexport { tsBooleanKeyword as tSBooleanKeyword };\nexport function tsBigIntKeyword(): t.TSBigIntKeyword {\n return {\n type: \"TSBigIntKeyword\",\n };\n}\nexport { tsBigIntKeyword as tSBigIntKeyword };\nexport function tsIntrinsicKeyword(): t.TSIntrinsicKeyword {\n return {\n type: \"TSIntrinsicKeyword\",\n };\n}\nexport { tsIntrinsicKeyword as tSIntrinsicKeyword };\nexport function tsNeverKeyword(): t.TSNeverKeyword {\n return {\n type: \"TSNeverKeyword\",\n };\n}\nexport { tsNeverKeyword as tSNeverKeyword };\nexport function tsNullKeyword(): t.TSNullKeyword {\n return {\n type: \"TSNullKeyword\",\n };\n}\nexport { tsNullKeyword as tSNullKeyword };\nexport function tsNumberKeyword(): t.TSNumberKeyword {\n return {\n type: \"TSNumberKeyword\",\n };\n}\nexport { tsNumberKeyword as tSNumberKeyword };\nexport function tsObjectKeyword(): t.TSObjectKeyword {\n return {\n type: \"TSObjectKeyword\",\n };\n}\nexport { tsObjectKeyword as tSObjectKeyword };\nexport function tsStringKeyword(): t.TSStringKeyword {\n return {\n type: \"TSStringKeyword\",\n };\n}\nexport { tsStringKeyword as tSStringKeyword };\nexport function tsSymbolKeyword(): t.TSSymbolKeyword {\n return {\n type: \"TSSymbolKeyword\",\n };\n}\nexport { tsSymbolKeyword as tSSymbolKeyword };\nexport function tsUndefinedKeyword(): t.TSUndefinedKeyword {\n return {\n type: \"TSUndefinedKeyword\",\n };\n}\nexport { tsUndefinedKeyword as tSUndefinedKeyword };\nexport function tsUnknownKeyword(): t.TSUnknownKeyword {\n return {\n type: \"TSUnknownKeyword\",\n };\n}\nexport { tsUnknownKeyword as tSUnknownKeyword };\nexport function tsVoidKeyword(): t.TSVoidKeyword {\n return {\n type: \"TSVoidKeyword\",\n };\n}\nexport { tsVoidKeyword as tSVoidKeyword };\nexport function tsThisType(): t.TSThisType {\n return {\n type: \"TSThisType\",\n };\n}\nexport { tsThisType as tSThisType };\nexport function tsFunctionType(\n typeParameters: t.TSTypeParameterDeclaration | null | undefined = null,\n parameters: (\n | t.ArrayPattern\n | t.Identifier\n | t.ObjectPattern\n | t.RestElement\n )[],\n typeAnnotation: t.TSTypeAnnotation | null = null,\n): t.TSFunctionType {\n const node: t.TSFunctionType = {\n type: \"TSFunctionType\",\n typeParameters,\n parameters,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSFunctionType;\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.parameters, node, \"parameters\", parameters, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsFunctionType as tSFunctionType };\nexport function tsConstructorType(\n typeParameters: t.TSTypeParameterDeclaration | null | undefined = null,\n parameters: (\n | t.ArrayPattern\n | t.Identifier\n | t.ObjectPattern\n | t.RestElement\n )[],\n typeAnnotation: t.TSTypeAnnotation | null = null,\n): t.TSConstructorType {\n const node: t.TSConstructorType = {\n type: \"TSConstructorType\",\n typeParameters,\n parameters,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSConstructorType;\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.parameters, node, \"parameters\", parameters, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsConstructorType as tSConstructorType };\nexport function tsTypeReference(\n typeName: t.TSEntityName,\n typeParameters: t.TSTypeParameterInstantiation | null = null,\n): t.TSTypeReference {\n const node: t.TSTypeReference = {\n type: \"TSTypeReference\",\n typeName,\n typeParameters,\n };\n const defs = NODE_FIELDS.TSTypeReference;\n validate(defs.typeName, node, \"typeName\", typeName, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n return node;\n}\nexport { tsTypeReference as tSTypeReference };\nexport function tsTypePredicate(\n parameterName: t.Identifier | t.TSThisType,\n typeAnnotation: t.TSTypeAnnotation | null = null,\n asserts: boolean | null = null,\n): t.TSTypePredicate {\n const node: t.TSTypePredicate = {\n type: \"TSTypePredicate\",\n parameterName,\n typeAnnotation,\n asserts,\n };\n const defs = NODE_FIELDS.TSTypePredicate;\n validate(defs.parameterName, node, \"parameterName\", parameterName, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n validate(defs.asserts, node, \"asserts\", asserts);\n return node;\n}\nexport { tsTypePredicate as tSTypePredicate };\nexport function tsTypeQuery(\n exprName: t.TSEntityName | t.TSImportType,\n typeParameters: t.TSTypeParameterInstantiation | null = null,\n): t.TSTypeQuery {\n const node: t.TSTypeQuery = {\n type: \"TSTypeQuery\",\n exprName,\n typeParameters,\n };\n const defs = NODE_FIELDS.TSTypeQuery;\n validate(defs.exprName, node, \"exprName\", exprName, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n return node;\n}\nexport { tsTypeQuery as tSTypeQuery };\nexport function tsTypeLiteral(members: t.TSTypeElement[]): t.TSTypeLiteral {\n const node: t.TSTypeLiteral = {\n type: \"TSTypeLiteral\",\n members,\n };\n const defs = NODE_FIELDS.TSTypeLiteral;\n validate(defs.members, node, \"members\", members, 1);\n return node;\n}\nexport { tsTypeLiteral as tSTypeLiteral };\nexport function tsArrayType(elementType: t.TSType): t.TSArrayType {\n const node: t.TSArrayType = {\n type: \"TSArrayType\",\n elementType,\n };\n const defs = NODE_FIELDS.TSArrayType;\n validate(defs.elementType, node, \"elementType\", elementType, 1);\n return node;\n}\nexport { tsArrayType as tSArrayType };\nexport function tsTupleType(\n elementTypes: (t.TSType | t.TSNamedTupleMember)[],\n): t.TSTupleType {\n const node: t.TSTupleType = {\n type: \"TSTupleType\",\n elementTypes,\n };\n const defs = NODE_FIELDS.TSTupleType;\n validate(defs.elementTypes, node, \"elementTypes\", elementTypes, 1);\n return node;\n}\nexport { tsTupleType as tSTupleType };\nexport function tsOptionalType(typeAnnotation: t.TSType): t.TSOptionalType {\n const node: t.TSOptionalType = {\n type: \"TSOptionalType\",\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSOptionalType;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsOptionalType as tSOptionalType };\nexport function tsRestType(typeAnnotation: t.TSType): t.TSRestType {\n const node: t.TSRestType = {\n type: \"TSRestType\",\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSRestType;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsRestType as tSRestType };\nexport function tsNamedTupleMember(\n label: t.Identifier,\n elementType: t.TSType,\n optional: boolean = false,\n): t.TSNamedTupleMember {\n const node: t.TSNamedTupleMember = {\n type: \"TSNamedTupleMember\",\n label,\n elementType,\n optional,\n };\n const defs = NODE_FIELDS.TSNamedTupleMember;\n validate(defs.label, node, \"label\", label, 1);\n validate(defs.elementType, node, \"elementType\", elementType, 1);\n validate(defs.optional, node, \"optional\", optional);\n return node;\n}\nexport { tsNamedTupleMember as tSNamedTupleMember };\nexport function tsUnionType(types: t.TSType[]): t.TSUnionType {\n const node: t.TSUnionType = {\n type: \"TSUnionType\",\n types,\n };\n const defs = NODE_FIELDS.TSUnionType;\n validate(defs.types, node, \"types\", types, 1);\n return node;\n}\nexport { tsUnionType as tSUnionType };\nexport function tsIntersectionType(types: t.TSType[]): t.TSIntersectionType {\n const node: t.TSIntersectionType = {\n type: \"TSIntersectionType\",\n types,\n };\n const defs = NODE_FIELDS.TSIntersectionType;\n validate(defs.types, node, \"types\", types, 1);\n return node;\n}\nexport { tsIntersectionType as tSIntersectionType };\nexport function tsConditionalType(\n checkType: t.TSType,\n extendsType: t.TSType,\n trueType: t.TSType,\n falseType: t.TSType,\n): t.TSConditionalType {\n const node: t.TSConditionalType = {\n type: \"TSConditionalType\",\n checkType,\n extendsType,\n trueType,\n falseType,\n };\n const defs = NODE_FIELDS.TSConditionalType;\n validate(defs.checkType, node, \"checkType\", checkType, 1);\n validate(defs.extendsType, node, \"extendsType\", extendsType, 1);\n validate(defs.trueType, node, \"trueType\", trueType, 1);\n validate(defs.falseType, node, \"falseType\", falseType, 1);\n return node;\n}\nexport { tsConditionalType as tSConditionalType };\nexport function tsInferType(typeParameter: t.TSTypeParameter): t.TSInferType {\n const node: t.TSInferType = {\n type: \"TSInferType\",\n typeParameter,\n };\n const defs = NODE_FIELDS.TSInferType;\n validate(defs.typeParameter, node, \"typeParameter\", typeParameter, 1);\n return node;\n}\nexport { tsInferType as tSInferType };\nexport function tsParenthesizedType(\n typeAnnotation: t.TSType,\n): t.TSParenthesizedType {\n const node: t.TSParenthesizedType = {\n type: \"TSParenthesizedType\",\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSParenthesizedType;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsParenthesizedType as tSParenthesizedType };\nexport function tsTypeOperator(\n typeAnnotation: t.TSType,\n operator: string = \"keyof\",\n): t.TSTypeOperator {\n const node: t.TSTypeOperator = {\n type: \"TSTypeOperator\",\n typeAnnotation,\n operator,\n };\n const defs = NODE_FIELDS.TSTypeOperator;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n validate(defs.operator, node, \"operator\", operator);\n return node;\n}\nexport { tsTypeOperator as tSTypeOperator };\nexport function tsIndexedAccessType(\n objectType: t.TSType,\n indexType: t.TSType,\n): t.TSIndexedAccessType {\n const node: t.TSIndexedAccessType = {\n type: \"TSIndexedAccessType\",\n objectType,\n indexType,\n };\n const defs = NODE_FIELDS.TSIndexedAccessType;\n validate(defs.objectType, node, \"objectType\", objectType, 1);\n validate(defs.indexType, node, \"indexType\", indexType, 1);\n return node;\n}\nexport { tsIndexedAccessType as tSIndexedAccessType };\nexport function tsMappedType(\n typeParameter: t.TSTypeParameter,\n typeAnnotation: t.TSType | null = null,\n nameType: t.TSType | null = null,\n): t.TSMappedType {\n const node: t.TSMappedType = {\n type: \"TSMappedType\",\n typeParameter,\n typeAnnotation,\n nameType,\n };\n const defs = NODE_FIELDS.TSMappedType;\n validate(defs.typeParameter, node, \"typeParameter\", typeParameter, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n validate(defs.nameType, node, \"nameType\", nameType, 1);\n return node;\n}\nexport { tsMappedType as tSMappedType };\nexport function tsTemplateLiteralType(\n quasis: t.TemplateElement[],\n types: t.TSType[],\n): t.TSTemplateLiteralType {\n const node: t.TSTemplateLiteralType = {\n type: \"TSTemplateLiteralType\",\n quasis,\n types,\n };\n const defs = NODE_FIELDS.TSTemplateLiteralType;\n validate(defs.quasis, node, \"quasis\", quasis, 1);\n validate(defs.types, node, \"types\", types, 1);\n return node;\n}\nexport { tsTemplateLiteralType as tSTemplateLiteralType };\nexport function tsLiteralType(\n literal:\n | t.NumericLiteral\n | t.StringLiteral\n | t.BooleanLiteral\n | t.BigIntLiteral\n | t.TemplateLiteral\n | t.UnaryExpression,\n): t.TSLiteralType {\n const node: t.TSLiteralType = {\n type: \"TSLiteralType\",\n literal,\n };\n const defs = NODE_FIELDS.TSLiteralType;\n validate(defs.literal, node, \"literal\", literal, 1);\n return node;\n}\nexport { tsLiteralType as tSLiteralType };\nexport function tsExpressionWithTypeArguments(\n expression: t.TSEntityName,\n typeParameters: t.TSTypeParameterInstantiation | null = null,\n): t.TSExpressionWithTypeArguments {\n const node: t.TSExpressionWithTypeArguments = {\n type: \"TSExpressionWithTypeArguments\",\n expression,\n typeParameters,\n };\n const defs = NODE_FIELDS.TSExpressionWithTypeArguments;\n validate(defs.expression, node, \"expression\", expression, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n return node;\n}\nexport { tsExpressionWithTypeArguments as tSExpressionWithTypeArguments };\nexport function tsInterfaceDeclaration(\n id: t.Identifier,\n typeParameters: t.TSTypeParameterDeclaration | null | undefined = null,\n _extends: t.TSExpressionWithTypeArguments[] | null | undefined = null,\n body: t.TSInterfaceBody,\n): t.TSInterfaceDeclaration {\n const node: t.TSInterfaceDeclaration = {\n type: \"TSInterfaceDeclaration\",\n id,\n typeParameters,\n extends: _extends,\n body,\n };\n const defs = NODE_FIELDS.TSInterfaceDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.extends, node, \"extends\", _extends, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport { tsInterfaceDeclaration as tSInterfaceDeclaration };\nexport function tsInterfaceBody(body: t.TSTypeElement[]): t.TSInterfaceBody {\n const node: t.TSInterfaceBody = {\n type: \"TSInterfaceBody\",\n body,\n };\n const defs = NODE_FIELDS.TSInterfaceBody;\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport { tsInterfaceBody as tSInterfaceBody };\nexport function tsTypeAliasDeclaration(\n id: t.Identifier,\n typeParameters: t.TSTypeParameterDeclaration | null | undefined = null,\n typeAnnotation: t.TSType,\n): t.TSTypeAliasDeclaration {\n const node: t.TSTypeAliasDeclaration = {\n type: \"TSTypeAliasDeclaration\",\n id,\n typeParameters,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSTypeAliasDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsTypeAliasDeclaration as tSTypeAliasDeclaration };\nexport function tsInstantiationExpression(\n expression: t.Expression,\n typeParameters: t.TSTypeParameterInstantiation | null = null,\n): t.TSInstantiationExpression {\n const node: t.TSInstantiationExpression = {\n type: \"TSInstantiationExpression\",\n expression,\n typeParameters,\n };\n const defs = NODE_FIELDS.TSInstantiationExpression;\n validate(defs.expression, node, \"expression\", expression, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n return node;\n}\nexport { tsInstantiationExpression as tSInstantiationExpression };\nexport function tsAsExpression(\n expression: t.Expression,\n typeAnnotation: t.TSType,\n): t.TSAsExpression {\n const node: t.TSAsExpression = {\n type: \"TSAsExpression\",\n expression,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSAsExpression;\n validate(defs.expression, node, \"expression\", expression, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsAsExpression as tSAsExpression };\nexport function tsSatisfiesExpression(\n expression: t.Expression,\n typeAnnotation: t.TSType,\n): t.TSSatisfiesExpression {\n const node: t.TSSatisfiesExpression = {\n type: \"TSSatisfiesExpression\",\n expression,\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSSatisfiesExpression;\n validate(defs.expression, node, \"expression\", expression, 1);\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsSatisfiesExpression as tSSatisfiesExpression };\nexport function tsTypeAssertion(\n typeAnnotation: t.TSType,\n expression: t.Expression,\n): t.TSTypeAssertion {\n const node: t.TSTypeAssertion = {\n type: \"TSTypeAssertion\",\n typeAnnotation,\n expression,\n };\n const defs = NODE_FIELDS.TSTypeAssertion;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport { tsTypeAssertion as tSTypeAssertion };\nexport function tsEnumBody(members: t.TSEnumMember[]): t.TSEnumBody {\n const node: t.TSEnumBody = {\n type: \"TSEnumBody\",\n members,\n };\n const defs = NODE_FIELDS.TSEnumBody;\n validate(defs.members, node, \"members\", members, 1);\n return node;\n}\nexport { tsEnumBody as tSEnumBody };\nexport function tsEnumDeclaration(\n id: t.Identifier,\n members: t.TSEnumMember[],\n): t.TSEnumDeclaration {\n const node: t.TSEnumDeclaration = {\n type: \"TSEnumDeclaration\",\n id,\n members,\n };\n const defs = NODE_FIELDS.TSEnumDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.members, node, \"members\", members, 1);\n return node;\n}\nexport { tsEnumDeclaration as tSEnumDeclaration };\nexport function tsEnumMember(\n id: t.Identifier | t.StringLiteral,\n initializer: t.Expression | null = null,\n): t.TSEnumMember {\n const node: t.TSEnumMember = {\n type: \"TSEnumMember\",\n id,\n initializer,\n };\n const defs = NODE_FIELDS.TSEnumMember;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.initializer, node, \"initializer\", initializer, 1);\n return node;\n}\nexport { tsEnumMember as tSEnumMember };\nexport function tsModuleDeclaration(\n id: t.Identifier | t.StringLiteral,\n body: t.TSModuleBlock | t.TSModuleDeclaration,\n): t.TSModuleDeclaration {\n const node: t.TSModuleDeclaration = {\n type: \"TSModuleDeclaration\",\n id,\n body,\n kind: null,\n };\n const defs = NODE_FIELDS.TSModuleDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport { tsModuleDeclaration as tSModuleDeclaration };\nexport function tsModuleBlock(body: t.Statement[]): t.TSModuleBlock {\n const node: t.TSModuleBlock = {\n type: \"TSModuleBlock\",\n body,\n };\n const defs = NODE_FIELDS.TSModuleBlock;\n validate(defs.body, node, \"body\", body, 1);\n return node;\n}\nexport { tsModuleBlock as tSModuleBlock };\nexport function tsImportType(\n argument: t.StringLiteral,\n qualifier: t.TSEntityName | null = null,\n typeParameters: t.TSTypeParameterInstantiation | null = null,\n): t.TSImportType {\n const node: t.TSImportType = {\n type: \"TSImportType\",\n argument,\n qualifier,\n typeParameters,\n };\n const defs = NODE_FIELDS.TSImportType;\n validate(defs.argument, node, \"argument\", argument, 1);\n validate(defs.qualifier, node, \"qualifier\", qualifier, 1);\n validate(defs.typeParameters, node, \"typeParameters\", typeParameters, 1);\n return node;\n}\nexport { tsImportType as tSImportType };\nexport function tsImportEqualsDeclaration(\n id: t.Identifier,\n moduleReference: t.TSEntityName | t.TSExternalModuleReference,\n): t.TSImportEqualsDeclaration {\n const node: t.TSImportEqualsDeclaration = {\n type: \"TSImportEqualsDeclaration\",\n id,\n moduleReference,\n isExport: null,\n };\n const defs = NODE_FIELDS.TSImportEqualsDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n validate(defs.moduleReference, node, \"moduleReference\", moduleReference, 1);\n return node;\n}\nexport { tsImportEqualsDeclaration as tSImportEqualsDeclaration };\nexport function tsExternalModuleReference(\n expression: t.StringLiteral,\n): t.TSExternalModuleReference {\n const node: t.TSExternalModuleReference = {\n type: \"TSExternalModuleReference\",\n expression,\n };\n const defs = NODE_FIELDS.TSExternalModuleReference;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport { tsExternalModuleReference as tSExternalModuleReference };\nexport function tsNonNullExpression(\n expression: t.Expression,\n): t.TSNonNullExpression {\n const node: t.TSNonNullExpression = {\n type: \"TSNonNullExpression\",\n expression,\n };\n const defs = NODE_FIELDS.TSNonNullExpression;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport { tsNonNullExpression as tSNonNullExpression };\nexport function tsExportAssignment(\n expression: t.Expression,\n): t.TSExportAssignment {\n const node: t.TSExportAssignment = {\n type: \"TSExportAssignment\",\n expression,\n };\n const defs = NODE_FIELDS.TSExportAssignment;\n validate(defs.expression, node, \"expression\", expression, 1);\n return node;\n}\nexport { tsExportAssignment as tSExportAssignment };\nexport function tsNamespaceExportDeclaration(\n id: t.Identifier,\n): t.TSNamespaceExportDeclaration {\n const node: t.TSNamespaceExportDeclaration = {\n type: \"TSNamespaceExportDeclaration\",\n id,\n };\n const defs = NODE_FIELDS.TSNamespaceExportDeclaration;\n validate(defs.id, node, \"id\", id, 1);\n return node;\n}\nexport { tsNamespaceExportDeclaration as tSNamespaceExportDeclaration };\nexport function tsTypeAnnotation(typeAnnotation: t.TSType): t.TSTypeAnnotation {\n const node: t.TSTypeAnnotation = {\n type: \"TSTypeAnnotation\",\n typeAnnotation,\n };\n const defs = NODE_FIELDS.TSTypeAnnotation;\n validate(defs.typeAnnotation, node, \"typeAnnotation\", typeAnnotation, 1);\n return node;\n}\nexport { tsTypeAnnotation as tSTypeAnnotation };\nexport function tsTypeParameterInstantiation(\n params: t.TSType[],\n): t.TSTypeParameterInstantiation {\n const node: t.TSTypeParameterInstantiation = {\n type: \"TSTypeParameterInstantiation\",\n params,\n };\n const defs = NODE_FIELDS.TSTypeParameterInstantiation;\n validate(defs.params, node, \"params\", params, 1);\n return node;\n}\nexport { tsTypeParameterInstantiation as tSTypeParameterInstantiation };\nexport function tsTypeParameterDeclaration(\n params: t.TSTypeParameter[],\n): t.TSTypeParameterDeclaration {\n const node: t.TSTypeParameterDeclaration = {\n type: \"TSTypeParameterDeclaration\",\n params,\n };\n const defs = NODE_FIELDS.TSTypeParameterDeclaration;\n validate(defs.params, node, \"params\", params, 1);\n return node;\n}\nexport { tsTypeParameterDeclaration as tSTypeParameterDeclaration };\nexport function tsTypeParameter(\n constraint: t.TSType | null | undefined = null,\n _default: t.TSType | null | undefined = null,\n name: string,\n): t.TSTypeParameter {\n const node: t.TSTypeParameter = {\n type: \"TSTypeParameter\",\n constraint,\n default: _default,\n name,\n };\n const defs = NODE_FIELDS.TSTypeParameter;\n validate(defs.constraint, node, \"constraint\", constraint, 1);\n validate(defs.default, node, \"default\", _default, 1);\n validate(defs.name, node, \"name\", name);\n return node;\n}\nexport { tsTypeParameter as tSTypeParameter };\n/** @deprecated */\nfunction NumberLiteral(value: number) {\n deprecationWarning(\"NumberLiteral\", \"NumericLiteral\", \"The node type \");\n return numericLiteral(value);\n}\nexport { NumberLiteral as numberLiteral };\n/** @deprecated */\nfunction RegexLiteral(pattern: string, flags: string = \"\") {\n deprecationWarning(\"RegexLiteral\", \"RegExpLiteral\", \"The node type \");\n return regExpLiteral(pattern, flags);\n}\nexport { RegexLiteral as regexLiteral };\n/** @deprecated */\nfunction RestProperty(\n argument:\n | t.Identifier\n | t.ArrayPattern\n | t.ObjectPattern\n | t.MemberExpression\n | t.TSAsExpression\n | t.TSSatisfiesExpression\n | t.TSTypeAssertion\n | t.TSNonNullExpression\n | t.RestElement\n | t.AssignmentPattern,\n) {\n deprecationWarning(\"RestProperty\", \"RestElement\", \"The node type \");\n return restElement(argument);\n}\nexport { RestProperty as restProperty };\n/** @deprecated */\nfunction SpreadProperty(argument: t.Expression) {\n deprecationWarning(\"SpreadProperty\", \"SpreadElement\", \"The node type \");\n return spreadElement(argument);\n}\nexport { SpreadProperty as spreadProperty };\n","/*\n * This file is auto-generated! Do not modify it directly.\n * To re-generate run 'make build'\n */\n\nimport * as b from \"./lowercase.ts\";\nimport deprecationWarning from \"../../utils/deprecationWarning.ts\";\n\nfunction alias<const N extends keyof typeof b>(lowercase: N): (typeof b)[N] {\n if (process.env.BABEL_8_BREAKING) {\n return function () {\n deprecationWarning(\n lowercase.replace(/^(?:ts|jsx|[a-z])/, x => x.toUpperCase()),\n lowercase,\n \"Usage of builders starting with an uppercase letter such as \",\n \"uppercase builders\",\n );\n return (b[lowercase] as any)(...arguments);\n } as any;\n } else {\n return b[lowercase];\n }\n}\n\nexport const ArrayExpression = alias(\"arrayExpression\"),\n AssignmentExpression = alias(\"assignmentExpression\"),\n BinaryExpression = alias(\"binaryExpression\"),\n InterpreterDirective = alias(\"interpreterDirective\"),\n Directive = alias(\"directive\"),\n DirectiveLiteral = alias(\"directiveLiteral\"),\n BlockStatement = alias(\"blockStatement\"),\n BreakStatement = alias(\"breakStatement\"),\n CallExpression = alias(\"callExpression\"),\n CatchClause = alias(\"catchClause\"),\n ConditionalExpression = alias(\"conditionalExpression\"),\n ContinueStatement = alias(\"continueStatement\"),\n DebuggerStatement = alias(\"debuggerStatement\"),\n DoWhileStatement = alias(\"doWhileStatement\"),\n EmptyStatement = alias(\"emptyStatement\"),\n ExpressionStatement = alias(\"expressionStatement\"),\n File = alias(\"file\"),\n ForInStatement = alias(\"forInStatement\"),\n ForStatement = alias(\"forStatement\"),\n FunctionDeclaration = alias(\"functionDeclaration\"),\n FunctionExpression = alias(\"functionExpression\"),\n Identifier = alias(\"identifier\"),\n IfStatement = alias(\"ifStatement\"),\n LabeledStatement = alias(\"labeledStatement\"),\n StringLiteral = alias(\"stringLiteral\"),\n NumericLiteral = alias(\"numericLiteral\"),\n NullLiteral = alias(\"nullLiteral\"),\n BooleanLiteral = alias(\"booleanLiteral\"),\n RegExpLiteral = alias(\"regExpLiteral\"),\n LogicalExpression = alias(\"logicalExpression\"),\n MemberExpression = alias(\"memberExpression\"),\n NewExpression = alias(\"newExpression\"),\n Program = alias(\"program\"),\n ObjectExpression = alias(\"objectExpression\"),\n ObjectMethod = alias(\"objectMethod\"),\n ObjectProperty = alias(\"objectProperty\"),\n RestElement = alias(\"restElement\"),\n ReturnStatement = alias(\"returnStatement\"),\n SequenceExpression = alias(\"sequenceExpression\"),\n ParenthesizedExpression = alias(\"parenthesizedExpression\"),\n SwitchCase = alias(\"switchCase\"),\n SwitchStatement = alias(\"switchStatement\"),\n ThisExpression = alias(\"thisExpression\"),\n ThrowStatement = alias(\"throwStatement\"),\n TryStatement = alias(\"tryStatement\"),\n UnaryExpression = alias(\"unaryExpression\"),\n UpdateExpression = alias(\"updateExpression\"),\n VariableDeclaration = alias(\"variableDeclaration\"),\n VariableDeclarator = alias(\"variableDeclarator\"),\n WhileStatement = alias(\"whileStatement\"),\n WithStatement = alias(\"withStatement\"),\n AssignmentPattern = alias(\"assignmentPattern\"),\n ArrayPattern = alias(\"arrayPattern\"),\n ArrowFunctionExpression = alias(\"arrowFunctionExpression\"),\n ClassBody = alias(\"classBody\"),\n ClassExpression = alias(\"classExpression\"),\n ClassDeclaration = alias(\"classDeclaration\"),\n ExportAllDeclaration = alias(\"exportAllDeclaration\"),\n ExportDefaultDeclaration = alias(\"exportDefaultDeclaration\"),\n ExportNamedDeclaration = alias(\"exportNamedDeclaration\"),\n ExportSpecifier = alias(\"exportSpecifier\"),\n ForOfStatement = alias(\"forOfStatement\"),\n ImportDeclaration = alias(\"importDeclaration\"),\n ImportDefaultSpecifier = alias(\"importDefaultSpecifier\"),\n ImportNamespaceSpecifier = alias(\"importNamespaceSpecifier\"),\n ImportSpecifier = alias(\"importSpecifier\"),\n ImportExpression = alias(\"importExpression\"),\n MetaProperty = alias(\"metaProperty\"),\n ClassMethod = alias(\"classMethod\"),\n ObjectPattern = alias(\"objectPattern\"),\n SpreadElement = alias(\"spreadElement\"),\n Super = alias(\"super\"),\n TaggedTemplateExpression = alias(\"taggedTemplateExpression\"),\n TemplateElement = alias(\"templateElement\"),\n TemplateLiteral = alias(\"templateLiteral\"),\n YieldExpression = alias(\"yieldExpression\"),\n AwaitExpression = alias(\"awaitExpression\"),\n Import = alias(\"import\"),\n BigIntLiteral = alias(\"bigIntLiteral\"),\n ExportNamespaceSpecifier = alias(\"exportNamespaceSpecifier\"),\n OptionalMemberExpression = alias(\"optionalMemberExpression\"),\n OptionalCallExpression = alias(\"optionalCallExpression\"),\n ClassProperty = alias(\"classProperty\"),\n ClassAccessorProperty = alias(\"classAccessorProperty\"),\n ClassPrivateProperty = alias(\"classPrivateProperty\"),\n ClassPrivateMethod = alias(\"classPrivateMethod\"),\n PrivateName = alias(\"privateName\"),\n StaticBlock = alias(\"staticBlock\"),\n ImportAttribute = alias(\"importAttribute\"),\n AnyTypeAnnotation = alias(\"anyTypeAnnotation\"),\n ArrayTypeAnnotation = alias(\"arrayTypeAnnotation\"),\n BooleanTypeAnnotation = alias(\"booleanTypeAnnotation\"),\n BooleanLiteralTypeAnnotation = alias(\"booleanLiteralTypeAnnotation\"),\n NullLiteralTypeAnnotation = alias(\"nullLiteralTypeAnnotation\"),\n ClassImplements = alias(\"classImplements\"),\n DeclareClass = alias(\"declareClass\"),\n DeclareFunction = alias(\"declareFunction\"),\n DeclareInterface = alias(\"declareInterface\"),\n DeclareModule = alias(\"declareModule\"),\n DeclareModuleExports = alias(\"declareModuleExports\"),\n DeclareTypeAlias = alias(\"declareTypeAlias\"),\n DeclareOpaqueType = alias(\"declareOpaqueType\"),\n DeclareVariable = alias(\"declareVariable\"),\n DeclareExportDeclaration = alias(\"declareExportDeclaration\"),\n DeclareExportAllDeclaration = alias(\"declareExportAllDeclaration\"),\n DeclaredPredicate = alias(\"declaredPredicate\"),\n ExistsTypeAnnotation = alias(\"existsTypeAnnotation\"),\n FunctionTypeAnnotation = alias(\"functionTypeAnnotation\"),\n FunctionTypeParam = alias(\"functionTypeParam\"),\n GenericTypeAnnotation = alias(\"genericTypeAnnotation\"),\n InferredPredicate = alias(\"inferredPredicate\"),\n InterfaceExtends = alias(\"interfaceExtends\"),\n InterfaceDeclaration = alias(\"interfaceDeclaration\"),\n InterfaceTypeAnnotation = alias(\"interfaceTypeAnnotation\"),\n IntersectionTypeAnnotation = alias(\"intersectionTypeAnnotation\"),\n MixedTypeAnnotation = alias(\"mixedTypeAnnotation\"),\n EmptyTypeAnnotation = alias(\"emptyTypeAnnotation\"),\n NullableTypeAnnotation = alias(\"nullableTypeAnnotation\"),\n NumberLiteralTypeAnnotation = alias(\"numberLiteralTypeAnnotation\"),\n NumberTypeAnnotation = alias(\"numberTypeAnnotation\"),\n ObjectTypeAnnotation = alias(\"objectTypeAnnotation\"),\n ObjectTypeInternalSlot = alias(\"objectTypeInternalSlot\"),\n ObjectTypeCallProperty = alias(\"objectTypeCallProperty\"),\n ObjectTypeIndexer = alias(\"objectTypeIndexer\"),\n ObjectTypeProperty = alias(\"objectTypeProperty\"),\n ObjectTypeSpreadProperty = alias(\"objectTypeSpreadProperty\"),\n OpaqueType = alias(\"opaqueType\"),\n QualifiedTypeIdentifier = alias(\"qualifiedTypeIdentifier\"),\n StringLiteralTypeAnnotation = alias(\"stringLiteralTypeAnnotation\"),\n StringTypeAnnotation = alias(\"stringTypeAnnotation\"),\n SymbolTypeAnnotation = alias(\"symbolTypeAnnotation\"),\n ThisTypeAnnotation = alias(\"thisTypeAnnotation\"),\n TupleTypeAnnotation = alias(\"tupleTypeAnnotation\"),\n TypeofTypeAnnotation = alias(\"typeofTypeAnnotation\"),\n TypeAlias = alias(\"typeAlias\"),\n TypeAnnotation = alias(\"typeAnnotation\"),\n TypeCastExpression = alias(\"typeCastExpression\"),\n TypeParameter = alias(\"typeParameter\"),\n TypeParameterDeclaration = alias(\"typeParameterDeclaration\"),\n TypeParameterInstantiation = alias(\"typeParameterInstantiation\"),\n UnionTypeAnnotation = alias(\"unionTypeAnnotation\"),\n Variance = alias(\"variance\"),\n VoidTypeAnnotation = alias(\"voidTypeAnnotation\"),\n EnumDeclaration = alias(\"enumDeclaration\"),\n EnumBooleanBody = alias(\"enumBooleanBody\"),\n EnumNumberBody = alias(\"enumNumberBody\"),\n EnumStringBody = alias(\"enumStringBody\"),\n EnumSymbolBody = alias(\"enumSymbolBody\"),\n EnumBooleanMember = alias(\"enumBooleanMember\"),\n EnumNumberMember = alias(\"enumNumberMember\"),\n EnumStringMember = alias(\"enumStringMember\"),\n EnumDefaultedMember = alias(\"enumDefaultedMember\"),\n IndexedAccessType = alias(\"indexedAccessType\"),\n OptionalIndexedAccessType = alias(\"optionalIndexedAccessType\"),\n JSXAttribute = alias(\"jsxAttribute\"),\n JSXClosingElement = alias(\"jsxClosingElement\"),\n JSXElement = alias(\"jsxElement\"),\n JSXEmptyExpression = alias(\"jsxEmptyExpression\"),\n JSXExpressionContainer = alias(\"jsxExpressionContainer\"),\n JSXSpreadChild = alias(\"jsxSpreadChild\"),\n JSXIdentifier = alias(\"jsxIdentifier\"),\n JSXMemberExpression = alias(\"jsxMemberExpression\"),\n JSXNamespacedName = alias(\"jsxNamespacedName\"),\n JSXOpeningElement = alias(\"jsxOpeningElement\"),\n JSXSpreadAttribute = alias(\"jsxSpreadAttribute\"),\n JSXText = alias(\"jsxText\"),\n JSXFragment = alias(\"jsxFragment\"),\n JSXOpeningFragment = alias(\"jsxOpeningFragment\"),\n JSXClosingFragment = alias(\"jsxClosingFragment\"),\n Noop = alias(\"noop\"),\n Placeholder = alias(\"placeholder\"),\n V8IntrinsicIdentifier = alias(\"v8IntrinsicIdentifier\"),\n ArgumentPlaceholder = alias(\"argumentPlaceholder\"),\n BindExpression = alias(\"bindExpression\"),\n Decorator = alias(\"decorator\"),\n DoExpression = alias(\"doExpression\"),\n ExportDefaultSpecifier = alias(\"exportDefaultSpecifier\"),\n RecordExpression = alias(\"recordExpression\"),\n TupleExpression = alias(\"tupleExpression\"),\n DecimalLiteral = alias(\"decimalLiteral\"),\n ModuleExpression = alias(\"moduleExpression\"),\n TopicReference = alias(\"topicReference\"),\n PipelineTopicExpression = alias(\"pipelineTopicExpression\"),\n PipelineBareFunction = alias(\"pipelineBareFunction\"),\n PipelinePrimaryTopicReference = alias(\"pipelinePrimaryTopicReference\"),\n VoidPattern = alias(\"voidPattern\"),\n TSParameterProperty = alias(\"tsParameterProperty\"),\n TSDeclareFunction = alias(\"tsDeclareFunction\"),\n TSDeclareMethod = alias(\"tsDeclareMethod\"),\n TSQualifiedName = alias(\"tsQualifiedName\"),\n TSCallSignatureDeclaration = alias(\"tsCallSignatureDeclaration\"),\n TSConstructSignatureDeclaration = alias(\"tsConstructSignatureDeclaration\"),\n TSPropertySignature = alias(\"tsPropertySignature\"),\n TSMethodSignature = alias(\"tsMethodSignature\"),\n TSIndexSignature = alias(\"tsIndexSignature\"),\n TSAnyKeyword = alias(\"tsAnyKeyword\"),\n TSBooleanKeyword = alias(\"tsBooleanKeyword\"),\n TSBigIntKeyword = alias(\"tsBigIntKeyword\"),\n TSIntrinsicKeyword = alias(\"tsIntrinsicKeyword\"),\n TSNeverKeyword = alias(\"tsNeverKeyword\"),\n TSNullKeyword = alias(\"tsNullKeyword\"),\n TSNumberKeyword = alias(\"tsNumberKeyword\"),\n TSObjectKeyword = alias(\"tsObjectKeyword\"),\n TSStringKeyword = alias(\"tsStringKeyword\"),\n TSSymbolKeyword = alias(\"tsSymbolKeyword\"),\n TSUndefinedKeyword = alias(\"tsUndefinedKeyword\"),\n TSUnknownKeyword = alias(\"tsUnknownKeyword\"),\n TSVoidKeyword = alias(\"tsVoidKeyword\"),\n TSThisType = alias(\"tsThisType\"),\n TSFunctionType = alias(\"tsFunctionType\"),\n TSConstructorType = alias(\"tsConstructorType\"),\n TSTypeReference = alias(\"tsTypeReference\"),\n TSTypePredicate = alias(\"tsTypePredicate\"),\n TSTypeQuery = alias(\"tsTypeQuery\"),\n TSTypeLiteral = alias(\"tsTypeLiteral\"),\n TSArrayType = alias(\"tsArrayType\"),\n TSTupleType = alias(\"tsTupleType\"),\n TSOptionalType = alias(\"tsOptionalType\"),\n TSRestType = alias(\"tsRestType\"),\n TSNamedTupleMember = alias(\"tsNamedTupleMember\"),\n TSUnionType = alias(\"tsUnionType\"),\n TSIntersectionType = alias(\"tsIntersectionType\"),\n TSConditionalType = alias(\"tsConditionalType\"),\n TSInferType = alias(\"tsInferType\"),\n TSParenthesizedType = alias(\"tsParenthesizedType\"),\n TSTypeOperator = alias(\"tsTypeOperator\"),\n TSIndexedAccessType = alias(\"tsIndexedAccessType\"),\n TSMappedType = alias(\"tsMappedType\"),\n TSTemplateLiteralType = alias(\"tsTemplateLiteralType\"),\n TSLiteralType = alias(\"tsLiteralType\"),\n TSExpressionWithTypeArguments = alias(\"tsExpressionWithTypeArguments\"),\n TSInterfaceDeclaration = alias(\"tsInterfaceDeclaration\"),\n TSInterfaceBody = alias(\"tsInterfaceBody\"),\n TSTypeAliasDeclaration = alias(\"tsTypeAliasDeclaration\"),\n TSInstantiationExpression = alias(\"tsInstantiationExpression\"),\n TSAsExpression = alias(\"tsAsExpression\"),\n TSSatisfiesExpression = alias(\"tsSatisfiesExpression\"),\n TSTypeAssertion = alias(\"tsTypeAssertion\"),\n TSEnumBody = alias(\"tsEnumBody\"),\n TSEnumDeclaration = alias(\"tsEnumDeclaration\"),\n TSEnumMember = alias(\"tsEnumMember\"),\n TSModuleDeclaration = alias(\"tsModuleDeclaration\"),\n TSModuleBlock = alias(\"tsModuleBlock\"),\n TSImportType = alias(\"tsImportType\"),\n TSImportEqualsDeclaration = alias(\"tsImportEqualsDeclaration\"),\n TSExternalModuleReference = alias(\"tsExternalModuleReference\"),\n TSNonNullExpression = alias(\"tsNonNullExpression\"),\n TSExportAssignment = alias(\"tsExportAssignment\"),\n TSNamespaceExportDeclaration = alias(\"tsNamespaceExportDeclaration\"),\n TSTypeAnnotation = alias(\"tsTypeAnnotation\"),\n TSTypeParameterInstantiation = alias(\"tsTypeParameterInstantiation\"),\n TSTypeParameterDeclaration = alias(\"tsTypeParameterDeclaration\"),\n TSTypeParameter = alias(\"tsTypeParameter\");\nexport const NumberLiteral = b.numberLiteral,\n RegexLiteral = b.regexLiteral,\n RestProperty = b.restProperty,\n SpreadProperty = b.spreadProperty;\n","/*\n * This file is auto-generated! Do not modify it directly.\n * To re-generate run 'make build'\n */\n\nexport * from \"./lowercase.ts\";\nexport * from \"./uppercase.ts\";\n\n// Uppercase builders and AST types conflict with each other, which is\n// not allowed by TypeScript when using `export * from ...`\n// We instead explicity list the AST types here, so that:\n// - From a TypeScript perspective, the AST types win over the uppercase\n// builders (which is the standard behavior for JS when a named\n// re-export conflicts with a * re-export.)\n// - At runtime, this `export type` is removed, leaving only the uppercase\n// builders behind (which are thus visible to JavaScript code).\n// This ensures compatibility with legacy code that uses the uppercase\n// builders, while allowing TypeScript users to use the lowercase builders\n// together with the AST types.\n\n// prettier-ignore\nexport type {\n ArrayExpression, AssignmentExpression, BinaryExpression, InterpreterDirective, Directive, DirectiveLiteral, BlockStatement, BreakStatement, CallExpression, CatchClause, ConditionalExpression, ContinueStatement, DebuggerStatement, DoWhileStatement, EmptyStatement, ExpressionStatement, File, ForInStatement, ForStatement, FunctionDeclaration, FunctionExpression, Identifier, IfStatement, LabeledStatement, StringLiteral, NumericLiteral, NullLiteral, BooleanLiteral, RegExpLiteral, LogicalExpression, MemberExpression, NewExpression, Program, ObjectExpression, ObjectMethod, ObjectProperty, RestElement, ReturnStatement, SequenceExpression, ParenthesizedExpression, SwitchCase, SwitchStatement, ThisExpression, ThrowStatement, TryStatement, UnaryExpression, UpdateExpression, VariableDeclaration, VariableDeclarator, WhileStatement, WithStatement, AssignmentPattern, ArrayPattern, ArrowFunctionExpression, ClassBody, ClassExpression, ClassDeclaration, ExportAllDeclaration, ExportDefaultDeclaration, ExportNamedDeclaration, ExportSpecifier, ForOfStatement, ImportDeclaration, ImportDefaultSpecifier, ImportNamespaceSpecifier, ImportSpecifier, ImportExpression, MetaProperty, ClassMethod, ObjectPattern, SpreadElement, Super, TaggedTemplateExpression, TemplateElement, TemplateLiteral, YieldExpression, AwaitExpression, Import, BigIntLiteral, ExportNamespaceSpecifier, OptionalMemberExpression, OptionalCallExpression, ClassProperty, ClassAccessorProperty, ClassPrivateProperty, ClassPrivateMethod, PrivateName, StaticBlock, ImportAttribute, AnyTypeAnnotation, ArrayTypeAnnotation, BooleanTypeAnnotation, BooleanLiteralTypeAnnotation, NullLiteralTypeAnnotation, ClassImplements, DeclareClass, DeclareFunction, DeclareInterface, DeclareModule, DeclareModuleExports, DeclareTypeAlias, DeclareOpaqueType, DeclareVariable, DeclareExportDeclaration, DeclareExportAllDeclaration, DeclaredPredicate, ExistsTypeAnnotation, FunctionTypeAnnotation, FunctionTypeParam, GenericTypeAnnotation, InferredPredicate, InterfaceExtends, InterfaceDeclaration, InterfaceTypeAnnotation, IntersectionTypeAnnotation, MixedTypeAnnotation, EmptyTypeAnnotation, NullableTypeAnnotation, NumberLiteralTypeAnnotation, NumberTypeAnnotation, ObjectTypeAnnotation, ObjectTypeInternalSlot, ObjectTypeCallProperty, ObjectTypeIndexer, ObjectTypeProperty, ObjectTypeSpreadProperty, OpaqueType, QualifiedTypeIdentifier, StringLiteralTypeAnnotation, StringTypeAnnotation, SymbolTypeAnnotation, ThisTypeAnnotation, TupleTypeAnnotation, TypeofTypeAnnotation, TypeAlias, TypeAnnotation, TypeCastExpression, TypeParameter, TypeParameterDeclaration, TypeParameterInstantiation, UnionTypeAnnotation, Variance, VoidTypeAnnotation, EnumDeclaration, EnumBooleanBody, EnumNumberBody, EnumStringBody, EnumSymbolBody, EnumBooleanMember, EnumNumberMember, EnumStringMember, EnumDefaultedMember, IndexedAccessType, OptionalIndexedAccessType, JSXAttribute, JSXClosingElement, JSXElement, JSXEmptyExpression, JSXExpressionContainer, JSXSpreadChild, JSXIdentifier, JSXMemberExpression, JSXNamespacedName, JSXOpeningElement, JSXSpreadAttribute, JSXText, JSXFragment, JSXOpeningFragment, JSXClosingFragment, Noop, Placeholder, V8IntrinsicIdentifier, ArgumentPlaceholder, BindExpression, Decorator, DoExpression, ExportDefaultSpecifier, RecordExpression, TupleExpression, DecimalLiteral, ModuleExpression, TopicReference, PipelineTopicExpression, PipelineBareFunction, PipelinePrimaryTopicReference, VoidPattern, TSParameterProperty, TSDeclareFunction, TSDeclareMethod, TSQualifiedName, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSPropertySignature, TSMethodSignature, TSIndexSignature, TSAnyKeyword, TSBooleanKeyword, TSBigIntKeyword, TSIntrinsicKeyword, TSNeverKeyword, TSNullKeyword, TSNumberKeyword, TSObjectKeyword, TSStringKeyword, TSSymbolKeyword, TSUndefinedKeyword, TSUnknownKeyword, TSVoidKeyword, TSThisType, TSFunctionType, TSConstructorType, TSTypeReference, TSTypePredicate, TSTypeQuery, TSTypeLiteral, TSArrayType, TSTupleType, TSOptionalType, TSRestType, TSNamedTupleMember, TSUnionType, TSIntersectionType, TSConditionalType, TSInferType, TSParenthesizedType, TSTypeOperator, TSIndexedAccessType, TSMappedType, TSTemplateLiteralType, TSLiteralType, TSExpressionWithTypeArguments, TSInterfaceDeclaration, TSInterfaceBody, TSTypeAliasDeclaration, TSInstantiationExpression, TSAsExpression, TSSatisfiesExpression, TSTypeAssertion, TSEnumBody, TSEnumDeclaration, TSEnumMember, TSModuleDeclaration, TSModuleBlock, TSImportType, TSImportEqualsDeclaration, TSExternalModuleReference, TSNonNullExpression, TSExportAssignment, TSNamespaceExportDeclaration, TSTypeAnnotation, TSTypeParameterInstantiation, TSTypeParameterDeclaration, TSTypeParameter,\n NumberLiteral, RegexLiteral, RestProperty, SpreadProperty\n} from \"../../ast-types/generated/index.ts\";\n\n// This will re-export all the type definitions that do not conflict with\n// uppercase builders, such as aliases.\nexport type * from \"../../ast-types/generated/index.ts\";\n","import { stringLiteral } from \"../../builders/generated/index.ts\";\nimport type * as t from \"../../index.ts\";\nimport { inherits } from \"../../index.ts\";\n\nexport default function cleanJSXElementLiteralChild(\n child: t.JSXText,\n args: t.Node[],\n) {\n const lines = child.value.split(/\\r\\n|\\n|\\r/);\n\n let lastNonEmptyLine = 0;\n\n for (let i = 0; i < lines.length; i++) {\n if (/[^ \\t]/.exec(lines[i])) {\n lastNonEmptyLine = i;\n }\n }\n\n let str = \"\";\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n const isFirstLine = i === 0;\n const isLastLine = i === lines.length - 1;\n const isLastNonEmptyLine = i === lastNonEmptyLine;\n\n // replace rendered whitespace tabs with spaces\n let trimmedLine = line.replace(/\\t/g, \" \");\n\n // trim whitespace touching a newline\n if (!isFirstLine) {\n trimmedLine = trimmedLine.replace(/^ +/, \"\");\n }\n\n // trim whitespace touching an endline\n if (!isLastLine) {\n trimmedLine = trimmedLine.replace(/ +$/, \"\");\n }\n\n if (trimmedLine) {\n if (!isLastNonEmptyLine) {\n trimmedLine += \" \";\n }\n\n str += trimmedLine;\n }\n }\n\n if (str) args.push(inherits(stringLiteral(str), child));\n}\n","import {\n isJSXText,\n isJSXExpressionContainer,\n isJSXEmptyExpression,\n} from \"../../validators/generated/index.ts\";\nimport cleanJSXElementLiteralChild from \"../../utils/react/cleanJSXElementLiteralChild.ts\";\nimport type * as t from \"../../index.ts\";\n\ntype ReturnedChild =\n | t.JSXSpreadChild\n | t.JSXElement\n | t.JSXFragment\n | t.Expression;\n\nexport default function buildChildren(\n node: t.JSXElement | t.JSXFragment,\n): ReturnedChild[] {\n const elements = [];\n\n for (let i = 0; i < node.children.length; i++) {\n let child: any = node.children[i];\n\n if (isJSXText(child)) {\n cleanJSXElementLiteralChild(child, elements);\n continue;\n }\n\n if (isJSXExpressionContainer(child)) child = child.expression;\n if (isJSXEmptyExpression(child)) continue;\n\n elements.push(child);\n }\n\n return elements;\n}\n","import { VISITOR_KEYS } from \"../definitions/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function isNode(node: any): node is t.Node {\n return !!(node && VISITOR_KEYS[node.type]);\n}\n","import isNode from \"../validators/isNode.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function assertNode(node?: any): asserts node is t.Node {\n if (!isNode(node)) {\n const type = node?.type ?? JSON.stringify(node);\n throw new TypeError(`Not a valid node of type \"${type}\"`);\n }\n}\n","/*\n * This file is auto-generated! Do not modify it directly.\n * To re-generate run 'make build'\n */\nimport is from \"../../validators/is.ts\";\nimport type * as t from \"../../index.ts\";\nimport deprecationWarning from \"../../utils/deprecationWarning.ts\";\n\nfunction assert(type: string, node: any, opts?: any): void {\n if (!is(type, node, opts)) {\n throw new Error(\n `Expected type \"${type}\" with option ${JSON.stringify(opts)}, ` +\n `but instead got \"${node.type}\".`,\n );\n }\n}\n\nexport function assertArrayExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ArrayExpression {\n assert(\"ArrayExpression\", node, opts);\n}\nexport function assertAssignmentExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.AssignmentExpression {\n assert(\"AssignmentExpression\", node, opts);\n}\nexport function assertBinaryExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BinaryExpression {\n assert(\"BinaryExpression\", node, opts);\n}\nexport function assertInterpreterDirective(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.InterpreterDirective {\n assert(\"InterpreterDirective\", node, opts);\n}\nexport function assertDirective(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Directive {\n assert(\"Directive\", node, opts);\n}\nexport function assertDirectiveLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DirectiveLiteral {\n assert(\"DirectiveLiteral\", node, opts);\n}\nexport function assertBlockStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BlockStatement {\n assert(\"BlockStatement\", node, opts);\n}\nexport function assertBreakStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BreakStatement {\n assert(\"BreakStatement\", node, opts);\n}\nexport function assertCallExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.CallExpression {\n assert(\"CallExpression\", node, opts);\n}\nexport function assertCatchClause(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.CatchClause {\n assert(\"CatchClause\", node, opts);\n}\nexport function assertConditionalExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ConditionalExpression {\n assert(\"ConditionalExpression\", node, opts);\n}\nexport function assertContinueStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ContinueStatement {\n assert(\"ContinueStatement\", node, opts);\n}\nexport function assertDebuggerStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DebuggerStatement {\n assert(\"DebuggerStatement\", node, opts);\n}\nexport function assertDoWhileStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DoWhileStatement {\n assert(\"DoWhileStatement\", node, opts);\n}\nexport function assertEmptyStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EmptyStatement {\n assert(\"EmptyStatement\", node, opts);\n}\nexport function assertExpressionStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExpressionStatement {\n assert(\"ExpressionStatement\", node, opts);\n}\nexport function assertFile(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.File {\n assert(\"File\", node, opts);\n}\nexport function assertForInStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ForInStatement {\n assert(\"ForInStatement\", node, opts);\n}\nexport function assertForStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ForStatement {\n assert(\"ForStatement\", node, opts);\n}\nexport function assertFunctionDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FunctionDeclaration {\n assert(\"FunctionDeclaration\", node, opts);\n}\nexport function assertFunctionExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FunctionExpression {\n assert(\"FunctionExpression\", node, opts);\n}\nexport function assertIdentifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Identifier {\n assert(\"Identifier\", node, opts);\n}\nexport function assertIfStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.IfStatement {\n assert(\"IfStatement\", node, opts);\n}\nexport function assertLabeledStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.LabeledStatement {\n assert(\"LabeledStatement\", node, opts);\n}\nexport function assertStringLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.StringLiteral {\n assert(\"StringLiteral\", node, opts);\n}\nexport function assertNumericLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.NumericLiteral {\n assert(\"NumericLiteral\", node, opts);\n}\nexport function assertNullLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.NullLiteral {\n assert(\"NullLiteral\", node, opts);\n}\nexport function assertBooleanLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BooleanLiteral {\n assert(\"BooleanLiteral\", node, opts);\n}\nexport function assertRegExpLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.RegExpLiteral {\n assert(\"RegExpLiteral\", node, opts);\n}\nexport function assertLogicalExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.LogicalExpression {\n assert(\"LogicalExpression\", node, opts);\n}\nexport function assertMemberExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.MemberExpression {\n assert(\"MemberExpression\", node, opts);\n}\nexport function assertNewExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.NewExpression {\n assert(\"NewExpression\", node, opts);\n}\nexport function assertProgram(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Program {\n assert(\"Program\", node, opts);\n}\nexport function assertObjectExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectExpression {\n assert(\"ObjectExpression\", node, opts);\n}\nexport function assertObjectMethod(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectMethod {\n assert(\"ObjectMethod\", node, opts);\n}\nexport function assertObjectProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectProperty {\n assert(\"ObjectProperty\", node, opts);\n}\nexport function assertRestElement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.RestElement {\n assert(\"RestElement\", node, opts);\n}\nexport function assertReturnStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ReturnStatement {\n assert(\"ReturnStatement\", node, opts);\n}\nexport function assertSequenceExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.SequenceExpression {\n assert(\"SequenceExpression\", node, opts);\n}\nexport function assertParenthesizedExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ParenthesizedExpression {\n assert(\"ParenthesizedExpression\", node, opts);\n}\nexport function assertSwitchCase(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.SwitchCase {\n assert(\"SwitchCase\", node, opts);\n}\nexport function assertSwitchStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.SwitchStatement {\n assert(\"SwitchStatement\", node, opts);\n}\nexport function assertThisExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ThisExpression {\n assert(\"ThisExpression\", node, opts);\n}\nexport function assertThrowStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ThrowStatement {\n assert(\"ThrowStatement\", node, opts);\n}\nexport function assertTryStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TryStatement {\n assert(\"TryStatement\", node, opts);\n}\nexport function assertUnaryExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.UnaryExpression {\n assert(\"UnaryExpression\", node, opts);\n}\nexport function assertUpdateExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.UpdateExpression {\n assert(\"UpdateExpression\", node, opts);\n}\nexport function assertVariableDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.VariableDeclaration {\n assert(\"VariableDeclaration\", node, opts);\n}\nexport function assertVariableDeclarator(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.VariableDeclarator {\n assert(\"VariableDeclarator\", node, opts);\n}\nexport function assertWhileStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.WhileStatement {\n assert(\"WhileStatement\", node, opts);\n}\nexport function assertWithStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.WithStatement {\n assert(\"WithStatement\", node, opts);\n}\nexport function assertAssignmentPattern(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.AssignmentPattern {\n assert(\"AssignmentPattern\", node, opts);\n}\nexport function assertArrayPattern(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ArrayPattern {\n assert(\"ArrayPattern\", node, opts);\n}\nexport function assertArrowFunctionExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ArrowFunctionExpression {\n assert(\"ArrowFunctionExpression\", node, opts);\n}\nexport function assertClassBody(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassBody {\n assert(\"ClassBody\", node, opts);\n}\nexport function assertClassExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassExpression {\n assert(\"ClassExpression\", node, opts);\n}\nexport function assertClassDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassDeclaration {\n assert(\"ClassDeclaration\", node, opts);\n}\nexport function assertExportAllDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExportAllDeclaration {\n assert(\"ExportAllDeclaration\", node, opts);\n}\nexport function assertExportDefaultDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExportDefaultDeclaration {\n assert(\"ExportDefaultDeclaration\", node, opts);\n}\nexport function assertExportNamedDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExportNamedDeclaration {\n assert(\"ExportNamedDeclaration\", node, opts);\n}\nexport function assertExportSpecifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExportSpecifier {\n assert(\"ExportSpecifier\", node, opts);\n}\nexport function assertForOfStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ForOfStatement {\n assert(\"ForOfStatement\", node, opts);\n}\nexport function assertImportDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ImportDeclaration {\n assert(\"ImportDeclaration\", node, opts);\n}\nexport function assertImportDefaultSpecifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ImportDefaultSpecifier {\n assert(\"ImportDefaultSpecifier\", node, opts);\n}\nexport function assertImportNamespaceSpecifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ImportNamespaceSpecifier {\n assert(\"ImportNamespaceSpecifier\", node, opts);\n}\nexport function assertImportSpecifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ImportSpecifier {\n assert(\"ImportSpecifier\", node, opts);\n}\nexport function assertImportExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ImportExpression {\n assert(\"ImportExpression\", node, opts);\n}\nexport function assertMetaProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.MetaProperty {\n assert(\"MetaProperty\", node, opts);\n}\nexport function assertClassMethod(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassMethod {\n assert(\"ClassMethod\", node, opts);\n}\nexport function assertObjectPattern(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectPattern {\n assert(\"ObjectPattern\", node, opts);\n}\nexport function assertSpreadElement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.SpreadElement {\n assert(\"SpreadElement\", node, opts);\n}\nexport function assertSuper(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Super {\n assert(\"Super\", node, opts);\n}\nexport function assertTaggedTemplateExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TaggedTemplateExpression {\n assert(\"TaggedTemplateExpression\", node, opts);\n}\nexport function assertTemplateElement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TemplateElement {\n assert(\"TemplateElement\", node, opts);\n}\nexport function assertTemplateLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TemplateLiteral {\n assert(\"TemplateLiteral\", node, opts);\n}\nexport function assertYieldExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.YieldExpression {\n assert(\"YieldExpression\", node, opts);\n}\nexport function assertAwaitExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.AwaitExpression {\n assert(\"AwaitExpression\", node, opts);\n}\nexport function assertImport(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Import {\n assert(\"Import\", node, opts);\n}\nexport function assertBigIntLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BigIntLiteral {\n assert(\"BigIntLiteral\", node, opts);\n}\nexport function assertExportNamespaceSpecifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExportNamespaceSpecifier {\n assert(\"ExportNamespaceSpecifier\", node, opts);\n}\nexport function assertOptionalMemberExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.OptionalMemberExpression {\n assert(\"OptionalMemberExpression\", node, opts);\n}\nexport function assertOptionalCallExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.OptionalCallExpression {\n assert(\"OptionalCallExpression\", node, opts);\n}\nexport function assertClassProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassProperty {\n assert(\"ClassProperty\", node, opts);\n}\nexport function assertClassAccessorProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassAccessorProperty {\n assert(\"ClassAccessorProperty\", node, opts);\n}\nexport function assertClassPrivateProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassPrivateProperty {\n assert(\"ClassPrivateProperty\", node, opts);\n}\nexport function assertClassPrivateMethod(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassPrivateMethod {\n assert(\"ClassPrivateMethod\", node, opts);\n}\nexport function assertPrivateName(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.PrivateName {\n assert(\"PrivateName\", node, opts);\n}\nexport function assertStaticBlock(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.StaticBlock {\n assert(\"StaticBlock\", node, opts);\n}\nexport function assertImportAttribute(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ImportAttribute {\n assert(\"ImportAttribute\", node, opts);\n}\nexport function assertAnyTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.AnyTypeAnnotation {\n assert(\"AnyTypeAnnotation\", node, opts);\n}\nexport function assertArrayTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ArrayTypeAnnotation {\n assert(\"ArrayTypeAnnotation\", node, opts);\n}\nexport function assertBooleanTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BooleanTypeAnnotation {\n assert(\"BooleanTypeAnnotation\", node, opts);\n}\nexport function assertBooleanLiteralTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BooleanLiteralTypeAnnotation {\n assert(\"BooleanLiteralTypeAnnotation\", node, opts);\n}\nexport function assertNullLiteralTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.NullLiteralTypeAnnotation {\n assert(\"NullLiteralTypeAnnotation\", node, opts);\n}\nexport function assertClassImplements(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ClassImplements {\n assert(\"ClassImplements\", node, opts);\n}\nexport function assertDeclareClass(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareClass {\n assert(\"DeclareClass\", node, opts);\n}\nexport function assertDeclareFunction(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareFunction {\n assert(\"DeclareFunction\", node, opts);\n}\nexport function assertDeclareInterface(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareInterface {\n assert(\"DeclareInterface\", node, opts);\n}\nexport function assertDeclareModule(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareModule {\n assert(\"DeclareModule\", node, opts);\n}\nexport function assertDeclareModuleExports(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareModuleExports {\n assert(\"DeclareModuleExports\", node, opts);\n}\nexport function assertDeclareTypeAlias(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareTypeAlias {\n assert(\"DeclareTypeAlias\", node, opts);\n}\nexport function assertDeclareOpaqueType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareOpaqueType {\n assert(\"DeclareOpaqueType\", node, opts);\n}\nexport function assertDeclareVariable(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareVariable {\n assert(\"DeclareVariable\", node, opts);\n}\nexport function assertDeclareExportDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareExportDeclaration {\n assert(\"DeclareExportDeclaration\", node, opts);\n}\nexport function assertDeclareExportAllDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclareExportAllDeclaration {\n assert(\"DeclareExportAllDeclaration\", node, opts);\n}\nexport function assertDeclaredPredicate(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DeclaredPredicate {\n assert(\"DeclaredPredicate\", node, opts);\n}\nexport function assertExistsTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExistsTypeAnnotation {\n assert(\"ExistsTypeAnnotation\", node, opts);\n}\nexport function assertFunctionTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FunctionTypeAnnotation {\n assert(\"FunctionTypeAnnotation\", node, opts);\n}\nexport function assertFunctionTypeParam(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FunctionTypeParam {\n assert(\"FunctionTypeParam\", node, opts);\n}\nexport function assertGenericTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.GenericTypeAnnotation {\n assert(\"GenericTypeAnnotation\", node, opts);\n}\nexport function assertInferredPredicate(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.InferredPredicate {\n assert(\"InferredPredicate\", node, opts);\n}\nexport function assertInterfaceExtends(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.InterfaceExtends {\n assert(\"InterfaceExtends\", node, opts);\n}\nexport function assertInterfaceDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.InterfaceDeclaration {\n assert(\"InterfaceDeclaration\", node, opts);\n}\nexport function assertInterfaceTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.InterfaceTypeAnnotation {\n assert(\"InterfaceTypeAnnotation\", node, opts);\n}\nexport function assertIntersectionTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.IntersectionTypeAnnotation {\n assert(\"IntersectionTypeAnnotation\", node, opts);\n}\nexport function assertMixedTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.MixedTypeAnnotation {\n assert(\"MixedTypeAnnotation\", node, opts);\n}\nexport function assertEmptyTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EmptyTypeAnnotation {\n assert(\"EmptyTypeAnnotation\", node, opts);\n}\nexport function assertNullableTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.NullableTypeAnnotation {\n assert(\"NullableTypeAnnotation\", node, opts);\n}\nexport function assertNumberLiteralTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.NumberLiteralTypeAnnotation {\n assert(\"NumberLiteralTypeAnnotation\", node, opts);\n}\nexport function assertNumberTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.NumberTypeAnnotation {\n assert(\"NumberTypeAnnotation\", node, opts);\n}\nexport function assertObjectTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectTypeAnnotation {\n assert(\"ObjectTypeAnnotation\", node, opts);\n}\nexport function assertObjectTypeInternalSlot(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectTypeInternalSlot {\n assert(\"ObjectTypeInternalSlot\", node, opts);\n}\nexport function assertObjectTypeCallProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectTypeCallProperty {\n assert(\"ObjectTypeCallProperty\", node, opts);\n}\nexport function assertObjectTypeIndexer(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectTypeIndexer {\n assert(\"ObjectTypeIndexer\", node, opts);\n}\nexport function assertObjectTypeProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectTypeProperty {\n assert(\"ObjectTypeProperty\", node, opts);\n}\nexport function assertObjectTypeSpreadProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectTypeSpreadProperty {\n assert(\"ObjectTypeSpreadProperty\", node, opts);\n}\nexport function assertOpaqueType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.OpaqueType {\n assert(\"OpaqueType\", node, opts);\n}\nexport function assertQualifiedTypeIdentifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.QualifiedTypeIdentifier {\n assert(\"QualifiedTypeIdentifier\", node, opts);\n}\nexport function assertStringLiteralTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.StringLiteralTypeAnnotation {\n assert(\"StringLiteralTypeAnnotation\", node, opts);\n}\nexport function assertStringTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.StringTypeAnnotation {\n assert(\"StringTypeAnnotation\", node, opts);\n}\nexport function assertSymbolTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.SymbolTypeAnnotation {\n assert(\"SymbolTypeAnnotation\", node, opts);\n}\nexport function assertThisTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ThisTypeAnnotation {\n assert(\"ThisTypeAnnotation\", node, opts);\n}\nexport function assertTupleTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TupleTypeAnnotation {\n assert(\"TupleTypeAnnotation\", node, opts);\n}\nexport function assertTypeofTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TypeofTypeAnnotation {\n assert(\"TypeofTypeAnnotation\", node, opts);\n}\nexport function assertTypeAlias(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TypeAlias {\n assert(\"TypeAlias\", node, opts);\n}\nexport function assertTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TypeAnnotation {\n assert(\"TypeAnnotation\", node, opts);\n}\nexport function assertTypeCastExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TypeCastExpression {\n assert(\"TypeCastExpression\", node, opts);\n}\nexport function assertTypeParameter(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TypeParameter {\n assert(\"TypeParameter\", node, opts);\n}\nexport function assertTypeParameterDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TypeParameterDeclaration {\n assert(\"TypeParameterDeclaration\", node, opts);\n}\nexport function assertTypeParameterInstantiation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TypeParameterInstantiation {\n assert(\"TypeParameterInstantiation\", node, opts);\n}\nexport function assertUnionTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.UnionTypeAnnotation {\n assert(\"UnionTypeAnnotation\", node, opts);\n}\nexport function assertVariance(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Variance {\n assert(\"Variance\", node, opts);\n}\nexport function assertVoidTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.VoidTypeAnnotation {\n assert(\"VoidTypeAnnotation\", node, opts);\n}\nexport function assertEnumDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumDeclaration {\n assert(\"EnumDeclaration\", node, opts);\n}\nexport function assertEnumBooleanBody(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumBooleanBody {\n assert(\"EnumBooleanBody\", node, opts);\n}\nexport function assertEnumNumberBody(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumNumberBody {\n assert(\"EnumNumberBody\", node, opts);\n}\nexport function assertEnumStringBody(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumStringBody {\n assert(\"EnumStringBody\", node, opts);\n}\nexport function assertEnumSymbolBody(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumSymbolBody {\n assert(\"EnumSymbolBody\", node, opts);\n}\nexport function assertEnumBooleanMember(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumBooleanMember {\n assert(\"EnumBooleanMember\", node, opts);\n}\nexport function assertEnumNumberMember(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumNumberMember {\n assert(\"EnumNumberMember\", node, opts);\n}\nexport function assertEnumStringMember(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumStringMember {\n assert(\"EnumStringMember\", node, opts);\n}\nexport function assertEnumDefaultedMember(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumDefaultedMember {\n assert(\"EnumDefaultedMember\", node, opts);\n}\nexport function assertIndexedAccessType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.IndexedAccessType {\n assert(\"IndexedAccessType\", node, opts);\n}\nexport function assertOptionalIndexedAccessType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.OptionalIndexedAccessType {\n assert(\"OptionalIndexedAccessType\", node, opts);\n}\nexport function assertJSXAttribute(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXAttribute {\n assert(\"JSXAttribute\", node, opts);\n}\nexport function assertJSXClosingElement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXClosingElement {\n assert(\"JSXClosingElement\", node, opts);\n}\nexport function assertJSXElement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXElement {\n assert(\"JSXElement\", node, opts);\n}\nexport function assertJSXEmptyExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXEmptyExpression {\n assert(\"JSXEmptyExpression\", node, opts);\n}\nexport function assertJSXExpressionContainer(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXExpressionContainer {\n assert(\"JSXExpressionContainer\", node, opts);\n}\nexport function assertJSXSpreadChild(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXSpreadChild {\n assert(\"JSXSpreadChild\", node, opts);\n}\nexport function assertJSXIdentifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXIdentifier {\n assert(\"JSXIdentifier\", node, opts);\n}\nexport function assertJSXMemberExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXMemberExpression {\n assert(\"JSXMemberExpression\", node, opts);\n}\nexport function assertJSXNamespacedName(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXNamespacedName {\n assert(\"JSXNamespacedName\", node, opts);\n}\nexport function assertJSXOpeningElement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXOpeningElement {\n assert(\"JSXOpeningElement\", node, opts);\n}\nexport function assertJSXSpreadAttribute(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXSpreadAttribute {\n assert(\"JSXSpreadAttribute\", node, opts);\n}\nexport function assertJSXText(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXText {\n assert(\"JSXText\", node, opts);\n}\nexport function assertJSXFragment(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXFragment {\n assert(\"JSXFragment\", node, opts);\n}\nexport function assertJSXOpeningFragment(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXOpeningFragment {\n assert(\"JSXOpeningFragment\", node, opts);\n}\nexport function assertJSXClosingFragment(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSXClosingFragment {\n assert(\"JSXClosingFragment\", node, opts);\n}\nexport function assertNoop(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Noop {\n assert(\"Noop\", node, opts);\n}\nexport function assertPlaceholder(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Placeholder {\n assert(\"Placeholder\", node, opts);\n}\nexport function assertV8IntrinsicIdentifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.V8IntrinsicIdentifier {\n assert(\"V8IntrinsicIdentifier\", node, opts);\n}\nexport function assertArgumentPlaceholder(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ArgumentPlaceholder {\n assert(\"ArgumentPlaceholder\", node, opts);\n}\nexport function assertBindExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BindExpression {\n assert(\"BindExpression\", node, opts);\n}\nexport function assertDecorator(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Decorator {\n assert(\"Decorator\", node, opts);\n}\nexport function assertDoExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DoExpression {\n assert(\"DoExpression\", node, opts);\n}\nexport function assertExportDefaultSpecifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExportDefaultSpecifier {\n assert(\"ExportDefaultSpecifier\", node, opts);\n}\nexport function assertRecordExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.RecordExpression {\n assert(\"RecordExpression\", node, opts);\n}\nexport function assertTupleExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TupleExpression {\n assert(\"TupleExpression\", node, opts);\n}\nexport function assertDecimalLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.DecimalLiteral {\n assert(\"DecimalLiteral\", node, opts);\n}\nexport function assertModuleExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ModuleExpression {\n assert(\"ModuleExpression\", node, opts);\n}\nexport function assertTopicReference(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TopicReference {\n assert(\"TopicReference\", node, opts);\n}\nexport function assertPipelineTopicExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.PipelineTopicExpression {\n assert(\"PipelineTopicExpression\", node, opts);\n}\nexport function assertPipelineBareFunction(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.PipelineBareFunction {\n assert(\"PipelineBareFunction\", node, opts);\n}\nexport function assertPipelinePrimaryTopicReference(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.PipelinePrimaryTopicReference {\n assert(\"PipelinePrimaryTopicReference\", node, opts);\n}\nexport function assertVoidPattern(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.VoidPattern {\n assert(\"VoidPattern\", node, opts);\n}\nexport function assertTSParameterProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSParameterProperty {\n assert(\"TSParameterProperty\", node, opts);\n}\nexport function assertTSDeclareFunction(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSDeclareFunction {\n assert(\"TSDeclareFunction\", node, opts);\n}\nexport function assertTSDeclareMethod(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSDeclareMethod {\n assert(\"TSDeclareMethod\", node, opts);\n}\nexport function assertTSQualifiedName(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSQualifiedName {\n assert(\"TSQualifiedName\", node, opts);\n}\nexport function assertTSCallSignatureDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSCallSignatureDeclaration {\n assert(\"TSCallSignatureDeclaration\", node, opts);\n}\nexport function assertTSConstructSignatureDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSConstructSignatureDeclaration {\n assert(\"TSConstructSignatureDeclaration\", node, opts);\n}\nexport function assertTSPropertySignature(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSPropertySignature {\n assert(\"TSPropertySignature\", node, opts);\n}\nexport function assertTSMethodSignature(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSMethodSignature {\n assert(\"TSMethodSignature\", node, opts);\n}\nexport function assertTSIndexSignature(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSIndexSignature {\n assert(\"TSIndexSignature\", node, opts);\n}\nexport function assertTSAnyKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSAnyKeyword {\n assert(\"TSAnyKeyword\", node, opts);\n}\nexport function assertTSBooleanKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSBooleanKeyword {\n assert(\"TSBooleanKeyword\", node, opts);\n}\nexport function assertTSBigIntKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSBigIntKeyword {\n assert(\"TSBigIntKeyword\", node, opts);\n}\nexport function assertTSIntrinsicKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSIntrinsicKeyword {\n assert(\"TSIntrinsicKeyword\", node, opts);\n}\nexport function assertTSNeverKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSNeverKeyword {\n assert(\"TSNeverKeyword\", node, opts);\n}\nexport function assertTSNullKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSNullKeyword {\n assert(\"TSNullKeyword\", node, opts);\n}\nexport function assertTSNumberKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSNumberKeyword {\n assert(\"TSNumberKeyword\", node, opts);\n}\nexport function assertTSObjectKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSObjectKeyword {\n assert(\"TSObjectKeyword\", node, opts);\n}\nexport function assertTSStringKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSStringKeyword {\n assert(\"TSStringKeyword\", node, opts);\n}\nexport function assertTSSymbolKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSSymbolKeyword {\n assert(\"TSSymbolKeyword\", node, opts);\n}\nexport function assertTSUndefinedKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSUndefinedKeyword {\n assert(\"TSUndefinedKeyword\", node, opts);\n}\nexport function assertTSUnknownKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSUnknownKeyword {\n assert(\"TSUnknownKeyword\", node, opts);\n}\nexport function assertTSVoidKeyword(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSVoidKeyword {\n assert(\"TSVoidKeyword\", node, opts);\n}\nexport function assertTSThisType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSThisType {\n assert(\"TSThisType\", node, opts);\n}\nexport function assertTSFunctionType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSFunctionType {\n assert(\"TSFunctionType\", node, opts);\n}\nexport function assertTSConstructorType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSConstructorType {\n assert(\"TSConstructorType\", node, opts);\n}\nexport function assertTSTypeReference(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeReference {\n assert(\"TSTypeReference\", node, opts);\n}\nexport function assertTSTypePredicate(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypePredicate {\n assert(\"TSTypePredicate\", node, opts);\n}\nexport function assertTSTypeQuery(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeQuery {\n assert(\"TSTypeQuery\", node, opts);\n}\nexport function assertTSTypeLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeLiteral {\n assert(\"TSTypeLiteral\", node, opts);\n}\nexport function assertTSArrayType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSArrayType {\n assert(\"TSArrayType\", node, opts);\n}\nexport function assertTSTupleType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTupleType {\n assert(\"TSTupleType\", node, opts);\n}\nexport function assertTSOptionalType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSOptionalType {\n assert(\"TSOptionalType\", node, opts);\n}\nexport function assertTSRestType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSRestType {\n assert(\"TSRestType\", node, opts);\n}\nexport function assertTSNamedTupleMember(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSNamedTupleMember {\n assert(\"TSNamedTupleMember\", node, opts);\n}\nexport function assertTSUnionType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSUnionType {\n assert(\"TSUnionType\", node, opts);\n}\nexport function assertTSIntersectionType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSIntersectionType {\n assert(\"TSIntersectionType\", node, opts);\n}\nexport function assertTSConditionalType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSConditionalType {\n assert(\"TSConditionalType\", node, opts);\n}\nexport function assertTSInferType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSInferType {\n assert(\"TSInferType\", node, opts);\n}\nexport function assertTSParenthesizedType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSParenthesizedType {\n assert(\"TSParenthesizedType\", node, opts);\n}\nexport function assertTSTypeOperator(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeOperator {\n assert(\"TSTypeOperator\", node, opts);\n}\nexport function assertTSIndexedAccessType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSIndexedAccessType {\n assert(\"TSIndexedAccessType\", node, opts);\n}\nexport function assertTSMappedType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSMappedType {\n assert(\"TSMappedType\", node, opts);\n}\nexport function assertTSTemplateLiteralType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTemplateLiteralType {\n assert(\"TSTemplateLiteralType\", node, opts);\n}\nexport function assertTSLiteralType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSLiteralType {\n assert(\"TSLiteralType\", node, opts);\n}\nexport function assertTSExpressionWithTypeArguments(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSExpressionWithTypeArguments {\n assert(\"TSExpressionWithTypeArguments\", node, opts);\n}\nexport function assertTSInterfaceDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSInterfaceDeclaration {\n assert(\"TSInterfaceDeclaration\", node, opts);\n}\nexport function assertTSInterfaceBody(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSInterfaceBody {\n assert(\"TSInterfaceBody\", node, opts);\n}\nexport function assertTSTypeAliasDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeAliasDeclaration {\n assert(\"TSTypeAliasDeclaration\", node, opts);\n}\nexport function assertTSInstantiationExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSInstantiationExpression {\n assert(\"TSInstantiationExpression\", node, opts);\n}\nexport function assertTSAsExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSAsExpression {\n assert(\"TSAsExpression\", node, opts);\n}\nexport function assertTSSatisfiesExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSSatisfiesExpression {\n assert(\"TSSatisfiesExpression\", node, opts);\n}\nexport function assertTSTypeAssertion(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeAssertion {\n assert(\"TSTypeAssertion\", node, opts);\n}\nexport function assertTSEnumBody(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSEnumBody {\n assert(\"TSEnumBody\", node, opts);\n}\nexport function assertTSEnumDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSEnumDeclaration {\n assert(\"TSEnumDeclaration\", node, opts);\n}\nexport function assertTSEnumMember(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSEnumMember {\n assert(\"TSEnumMember\", node, opts);\n}\nexport function assertTSModuleDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSModuleDeclaration {\n assert(\"TSModuleDeclaration\", node, opts);\n}\nexport function assertTSModuleBlock(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSModuleBlock {\n assert(\"TSModuleBlock\", node, opts);\n}\nexport function assertTSImportType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSImportType {\n assert(\"TSImportType\", node, opts);\n}\nexport function assertTSImportEqualsDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSImportEqualsDeclaration {\n assert(\"TSImportEqualsDeclaration\", node, opts);\n}\nexport function assertTSExternalModuleReference(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSExternalModuleReference {\n assert(\"TSExternalModuleReference\", node, opts);\n}\nexport function assertTSNonNullExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSNonNullExpression {\n assert(\"TSNonNullExpression\", node, opts);\n}\nexport function assertTSExportAssignment(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSExportAssignment {\n assert(\"TSExportAssignment\", node, opts);\n}\nexport function assertTSNamespaceExportDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSNamespaceExportDeclaration {\n assert(\"TSNamespaceExportDeclaration\", node, opts);\n}\nexport function assertTSTypeAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeAnnotation {\n assert(\"TSTypeAnnotation\", node, opts);\n}\nexport function assertTSTypeParameterInstantiation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeParameterInstantiation {\n assert(\"TSTypeParameterInstantiation\", node, opts);\n}\nexport function assertTSTypeParameterDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeParameterDeclaration {\n assert(\"TSTypeParameterDeclaration\", node, opts);\n}\nexport function assertTSTypeParameter(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeParameter {\n assert(\"TSTypeParameter\", node, opts);\n}\nexport function assertStandardized(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Standardized {\n assert(\"Standardized\", node, opts);\n}\nexport function assertExpression(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Expression {\n assert(\"Expression\", node, opts);\n}\nexport function assertBinary(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Binary {\n assert(\"Binary\", node, opts);\n}\nexport function assertScopable(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Scopable {\n assert(\"Scopable\", node, opts);\n}\nexport function assertBlockParent(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.BlockParent {\n assert(\"BlockParent\", node, opts);\n}\nexport function assertBlock(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Block {\n assert(\"Block\", node, opts);\n}\nexport function assertStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Statement {\n assert(\"Statement\", node, opts);\n}\nexport function assertTerminatorless(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Terminatorless {\n assert(\"Terminatorless\", node, opts);\n}\nexport function assertCompletionStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.CompletionStatement {\n assert(\"CompletionStatement\", node, opts);\n}\nexport function assertConditional(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Conditional {\n assert(\"Conditional\", node, opts);\n}\nexport function assertLoop(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Loop {\n assert(\"Loop\", node, opts);\n}\nexport function assertWhile(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.While {\n assert(\"While\", node, opts);\n}\nexport function assertExpressionWrapper(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExpressionWrapper {\n assert(\"ExpressionWrapper\", node, opts);\n}\nexport function assertFor(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.For {\n assert(\"For\", node, opts);\n}\nexport function assertForXStatement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ForXStatement {\n assert(\"ForXStatement\", node, opts);\n}\nexport function assertFunction(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Function {\n assert(\"Function\", node, opts);\n}\nexport function assertFunctionParent(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FunctionParent {\n assert(\"FunctionParent\", node, opts);\n}\nexport function assertPureish(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Pureish {\n assert(\"Pureish\", node, opts);\n}\nexport function assertDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Declaration {\n assert(\"Declaration\", node, opts);\n}\nexport function assertFunctionParameter(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FunctionParameter {\n assert(\"FunctionParameter\", node, opts);\n}\nexport function assertPatternLike(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.PatternLike {\n assert(\"PatternLike\", node, opts);\n}\nexport function assertLVal(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.LVal {\n assert(\"LVal\", node, opts);\n}\nexport function assertTSEntityName(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSEntityName {\n assert(\"TSEntityName\", node, opts);\n}\nexport function assertLiteral(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Literal {\n assert(\"Literal\", node, opts);\n}\nexport function assertImmutable(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Immutable {\n assert(\"Immutable\", node, opts);\n}\nexport function assertUserWhitespacable(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.UserWhitespacable {\n assert(\"UserWhitespacable\", node, opts);\n}\nexport function assertMethod(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Method {\n assert(\"Method\", node, opts);\n}\nexport function assertObjectMember(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ObjectMember {\n assert(\"ObjectMember\", node, opts);\n}\nexport function assertProperty(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Property {\n assert(\"Property\", node, opts);\n}\nexport function assertUnaryLike(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.UnaryLike {\n assert(\"UnaryLike\", node, opts);\n}\nexport function assertPattern(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Pattern {\n assert(\"Pattern\", node, opts);\n}\nexport function assertClass(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Class {\n assert(\"Class\", node, opts);\n}\nexport function assertImportOrExportDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ImportOrExportDeclaration {\n assert(\"ImportOrExportDeclaration\", node, opts);\n}\nexport function assertExportDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ExportDeclaration {\n assert(\"ExportDeclaration\", node, opts);\n}\nexport function assertModuleSpecifier(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.ModuleSpecifier {\n assert(\"ModuleSpecifier\", node, opts);\n}\nexport function assertAccessor(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Accessor {\n assert(\"Accessor\", node, opts);\n}\nexport function assertPrivate(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Private {\n assert(\"Private\", node, opts);\n}\nexport function assertFlow(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Flow {\n assert(\"Flow\", node, opts);\n}\nexport function assertFlowType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FlowType {\n assert(\"FlowType\", node, opts);\n}\nexport function assertFlowBaseAnnotation(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FlowBaseAnnotation {\n assert(\"FlowBaseAnnotation\", node, opts);\n}\nexport function assertFlowDeclaration(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FlowDeclaration {\n assert(\"FlowDeclaration\", node, opts);\n}\nexport function assertFlowPredicate(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.FlowPredicate {\n assert(\"FlowPredicate\", node, opts);\n}\nexport function assertEnumBody(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumBody {\n assert(\"EnumBody\", node, opts);\n}\nexport function assertEnumMember(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.EnumMember {\n assert(\"EnumMember\", node, opts);\n}\nexport function assertJSX(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.JSX {\n assert(\"JSX\", node, opts);\n}\nexport function assertMiscellaneous(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.Miscellaneous {\n assert(\"Miscellaneous\", node, opts);\n}\nexport function assertTypeScript(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TypeScript {\n assert(\"TypeScript\", node, opts);\n}\nexport function assertTSTypeElement(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSTypeElement {\n assert(\"TSTypeElement\", node, opts);\n}\nexport function assertTSType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSType {\n assert(\"TSType\", node, opts);\n}\nexport function assertTSBaseType(\n node: object | null | undefined,\n opts?: object | null,\n): asserts node is t.TSBaseType {\n assert(\"TSBaseType\", node, opts);\n}\nexport function assertNumberLiteral(node: any, opts: any): void {\n deprecationWarning(\"assertNumberLiteral\", \"assertNumericLiteral\");\n assert(\"NumberLiteral\", node, opts);\n}\nexport function assertRegexLiteral(node: any, opts: any): void {\n deprecationWarning(\"assertRegexLiteral\", \"assertRegExpLiteral\");\n assert(\"RegexLiteral\", node, opts);\n}\nexport function assertRestProperty(node: any, opts: any): void {\n deprecationWarning(\"assertRestProperty\", \"assertRestElement\");\n assert(\"RestProperty\", node, opts);\n}\nexport function assertSpreadProperty(node: any, opts: any): void {\n deprecationWarning(\"assertSpreadProperty\", \"assertSpreadElement\");\n assert(\"SpreadProperty\", node, opts);\n}\nexport function assertModuleDeclaration(node: any, opts: any): void {\n deprecationWarning(\n \"assertModuleDeclaration\",\n \"assertImportOrExportDeclaration\",\n );\n assert(\"ModuleDeclaration\", node, opts);\n}\n","import {\n anyTypeAnnotation,\n stringTypeAnnotation,\n numberTypeAnnotation,\n voidTypeAnnotation,\n booleanTypeAnnotation,\n genericTypeAnnotation,\n identifier,\n} from \"../generated/index.ts\";\nimport type * as t from \"../../index.ts\";\n\nexport default createTypeAnnotationBasedOnTypeof as {\n (type: \"string\"): t.StringTypeAnnotation;\n (type: \"number\"): t.NumberTypeAnnotation;\n (type: \"undefined\"): t.VoidTypeAnnotation;\n (type: \"boolean\"): t.BooleanTypeAnnotation;\n (type: \"function\"): t.GenericTypeAnnotation;\n (type: \"object\"): t.GenericTypeAnnotation;\n (type: \"symbol\"): t.GenericTypeAnnotation;\n (type: \"bigint\"): t.AnyTypeAnnotation;\n};\n\n/**\n * Create a type annotation based on typeof expression.\n */\nfunction createTypeAnnotationBasedOnTypeof(type: string): t.FlowType {\n switch (type) {\n case \"string\":\n return stringTypeAnnotation();\n case \"number\":\n return numberTypeAnnotation();\n case \"undefined\":\n return voidTypeAnnotation();\n case \"boolean\":\n return booleanTypeAnnotation();\n case \"function\":\n return genericTypeAnnotation(identifier(\"Function\"));\n case \"object\":\n return genericTypeAnnotation(identifier(\"Object\"));\n case \"symbol\":\n return genericTypeAnnotation(identifier(\"Symbol\"));\n case \"bigint\":\n // todo: use BigInt annotation when Flow supports BigInt\n // https://github.com/facebook/flow/issues/6639\n return anyTypeAnnotation();\n }\n throw new Error(\"Invalid typeof value: \" + type);\n}\n","import {\n isAnyTypeAnnotation,\n isGenericTypeAnnotation,\n isUnionTypeAnnotation,\n isFlowBaseAnnotation,\n isIdentifier,\n} from \"../../validators/generated/index.ts\";\nimport type * as t from \"../../index.ts\";\n\nfunction getQualifiedName(node: t.GenericTypeAnnotation[\"id\"]): string {\n return isIdentifier(node)\n ? node.name\n : `${node.id.name}.${getQualifiedName(node.qualification)}`;\n}\n\n/**\n * Dedupe type annotations.\n */\nexport default function removeTypeDuplicates(\n nodesIn: readonly (t.FlowType | false | null | undefined)[],\n): t.FlowType[] {\n const nodes = Array.from(nodesIn);\n\n const generics = new Map<string, t.GenericTypeAnnotation>();\n const bases = new Map<t.FlowBaseAnnotation[\"type\"], t.FlowBaseAnnotation>();\n\n // store union type groups to circular references\n const typeGroups = new Set<t.FlowType[]>();\n\n const types: t.FlowType[] = [];\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (!node) continue;\n\n // detect duplicates\n if (types.includes(node)) {\n continue;\n }\n\n // this type matches anything\n if (isAnyTypeAnnotation(node)) {\n return [node];\n }\n\n if (isFlowBaseAnnotation(node)) {\n bases.set(node.type, node);\n continue;\n }\n\n if (isUnionTypeAnnotation(node)) {\n if (!typeGroups.has(node.types)) {\n nodes.push(...node.types);\n typeGroups.add(node.types);\n }\n continue;\n }\n\n // find a matching generic type and merge and deduplicate the type parameters\n if (isGenericTypeAnnotation(node)) {\n const name = getQualifiedName(node.id);\n\n if (generics.has(name)) {\n let existing: t.Flow = generics.get(name);\n if (existing.typeParameters) {\n if (node.typeParameters) {\n existing.typeParameters.params.push(...node.typeParameters.params);\n existing.typeParameters.params = removeTypeDuplicates(\n existing.typeParameters.params,\n );\n }\n } else {\n existing = node.typeParameters;\n }\n } else {\n generics.set(name, node);\n }\n\n continue;\n }\n\n types.push(node);\n }\n\n // add back in bases\n for (const [, baseType] of bases) {\n types.push(baseType);\n }\n\n // add back in generics\n for (const [, genericName] of generics) {\n types.push(genericName);\n }\n\n return types;\n}\n","import { unionTypeAnnotation } from \"../generated/index.ts\";\nimport removeTypeDuplicates from \"../../modifications/flow/removeTypeDuplicates.ts\";\nimport type * as t from \"../../index.ts\";\n\n/**\n * Takes an array of `types` and flattens them, removing duplicates and\n * returns a `UnionTypeAnnotation` node containing them.\n */\nexport default function createFlowUnionType<T extends t.FlowType>(\n types: [T] | T[],\n): T | t.UnionTypeAnnotation {\n const flattened = removeTypeDuplicates(types);\n\n if (flattened.length === 1) {\n return flattened[0] as T;\n } else {\n return unionTypeAnnotation(flattened);\n }\n}\n","import {\n isIdentifier,\n isThisExpression,\n isTSAnyKeyword,\n isTSTypeReference,\n isTSUnionType,\n isTSBaseType,\n} from \"../../validators/generated/index.ts\";\nimport type * as t from \"../../index.ts\";\n\nfunction getQualifiedName(node: t.TSTypeReference[\"typeName\"]): string {\n return isIdentifier(node)\n ? node.name\n : isThisExpression(node)\n ? \"this\"\n : `${node.right.name}.${getQualifiedName(node.left)}`;\n}\n\n/**\n * Dedupe type annotations.\n */\nexport default function removeTypeDuplicates(\n nodesIn: readonly t.TSType[],\n): t.TSType[] {\n const nodes = Array.from(nodesIn);\n\n const generics = new Map<string, t.TSTypeReference>();\n const bases = new Map<t.TSBaseType[\"type\"], t.TSBaseType>();\n\n // store union type groups to circular references\n const typeGroups = new Set<t.TSType[]>();\n\n const types: t.TSType[] = [];\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (!node) continue;\n\n // detect duplicates\n if (types.includes(node)) {\n continue;\n }\n\n // this type matches anything\n if (isTSAnyKeyword(node)) {\n return [node];\n }\n\n // Analogue of FlowBaseAnnotation\n if (isTSBaseType(node)) {\n bases.set(node.type, node);\n continue;\n }\n\n if (isTSUnionType(node)) {\n if (!typeGroups.has(node.types)) {\n nodes.push(...node.types);\n typeGroups.add(node.types);\n }\n continue;\n }\n\n // todo: support merging tuples: number[]\n const typeArgumentsKey = process.env.BABEL_8_BREAKING\n ? \"typeArguments\"\n : \"typeParameters\";\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n if (isTSTypeReference(node) && node[typeArgumentsKey]) {\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n const typeArguments = node[typeArgumentsKey];\n const name = getQualifiedName(node.typeName);\n\n if (generics.has(name)) {\n let existing: t.TypeScript = generics.get(name);\n // @ts-ignore(Babel 7 vs Babel 8) Babel 8 AST\n const existingTypeArguments = existing[typeArgumentsKey];\n if (existingTypeArguments) {\n existingTypeArguments.params.push(...typeArguments.params);\n existingTypeArguments.params = removeTypeDuplicates(\n existingTypeArguments.params,\n );\n } else {\n existing = typeArguments;\n }\n } else {\n generics.set(name, node);\n }\n\n continue;\n }\n\n types.push(node);\n }\n\n // add back in bases\n for (const [, baseType] of bases) {\n types.push(baseType);\n }\n\n // add back in generics\n for (const [, genericName] of generics) {\n types.push(genericName);\n }\n\n return types;\n}\n","import { tsUnionType } from \"../generated/index.ts\";\nimport removeTypeDuplicates from \"../../modifications/typescript/removeTypeDuplicates.ts\";\nimport { isTSTypeAnnotation } from \"../../validators/generated/index.ts\";\nimport type * as t from \"../../index.ts\";\n\n/**\n * Takes an array of `types` and flattens them, removing duplicates and\n * returns a `UnionTypeAnnotation` node containing them.\n */\nexport default function createTSUnionType(\n typeAnnotations: (t.TSTypeAnnotation | t.TSType)[],\n): t.TSType {\n const types = typeAnnotations.map(type => {\n return isTSTypeAnnotation(type) ? type.typeAnnotation : type;\n });\n const flattened = removeTypeDuplicates(types);\n\n if (flattened.length === 1) {\n return flattened[0];\n } else {\n return tsUnionType(flattened);\n }\n}\n","import { numericLiteral, unaryExpression } from \"./generated/index.ts\";\n\nexport function buildUndefinedNode() {\n return unaryExpression(\"void\", numericLiteral(0), true);\n}\n","import { NODE_FIELDS } from \"../definitions/index.ts\";\nimport type * as t from \"../index.ts\";\nimport { isFile, isIdentifier } from \"../validators/generated/index.ts\";\n\nconst { hasOwn } = process.env.BABEL_8_BREAKING\n ? Object\n : { hasOwn: Function.call.bind(Object.prototype.hasOwnProperty) };\n\ntype CommentCache = Map<t.Comment, t.Comment>;\n\n// This function will never be called for comments, only for real nodes.\nfunction cloneIfNode(\n obj: t.Node | undefined | null,\n deep: boolean,\n withoutLoc: boolean,\n commentsCache: CommentCache,\n) {\n if (obj && typeof obj.type === \"string\") {\n return cloneNodeInternal(obj, deep, withoutLoc, commentsCache);\n }\n\n return obj;\n}\n\nfunction cloneIfNodeOrArray(\n obj: t.Node | undefined | null | (t.Node | undefined | null)[],\n deep: boolean,\n withoutLoc: boolean,\n commentsCache: CommentCache,\n) {\n if (Array.isArray(obj)) {\n return obj.map(node => cloneIfNode(node, deep, withoutLoc, commentsCache));\n }\n return cloneIfNode(obj, deep, withoutLoc, commentsCache);\n}\n\n/**\n * Create a clone of a `node` including only properties belonging to the node.\n * If the second parameter is `false`, cloneNode performs a shallow clone.\n * If the third parameter is true, the cloned nodes exclude location properties.\n */\nexport default function cloneNode<T extends t.Node>(\n node: T,\n deep: boolean = true,\n withoutLoc: boolean = false,\n): T {\n return cloneNodeInternal(node, deep, withoutLoc, new Map());\n}\n\nfunction cloneNodeInternal<T extends t.Node>(\n node: T,\n deep: boolean = true,\n withoutLoc: boolean = false,\n commentsCache: CommentCache,\n): T {\n if (!node) return node;\n\n const { type } = node;\n const newNode: any = { type: node.type };\n\n // Special-case identifiers since they are the most cloned nodes.\n if (isIdentifier(node)) {\n newNode.name = node.name;\n\n if (hasOwn(node, \"optional\") && typeof node.optional === \"boolean\") {\n newNode.optional = node.optional;\n }\n\n if (hasOwn(node, \"typeAnnotation\")) {\n newNode.typeAnnotation = deep\n ? cloneIfNodeOrArray(\n node.typeAnnotation,\n true,\n withoutLoc,\n commentsCache,\n )\n : node.typeAnnotation;\n }\n\n if (hasOwn(node, \"decorators\")) {\n newNode.decorators = deep\n ? cloneIfNodeOrArray(node.decorators, true, withoutLoc, commentsCache)\n : node.decorators;\n }\n } else if (!hasOwn(NODE_FIELDS, type)) {\n throw new Error(`Unknown node type: \"${type}\"`);\n } else {\n for (const field of Object.keys(NODE_FIELDS[type])) {\n if (hasOwn(node, field)) {\n if (deep) {\n newNode[field] =\n isFile(node) && field === \"comments\"\n ? maybeCloneComments(\n node.comments,\n deep,\n withoutLoc,\n commentsCache,\n )\n : cloneIfNodeOrArray(\n // @ts-expect-error node[field] has been guarded by has check\n node[field],\n true,\n withoutLoc,\n commentsCache,\n );\n } else {\n newNode[field] =\n // @ts-expect-error node[field] has been guarded by has check\n node[field];\n }\n }\n }\n }\n\n if (hasOwn(node, \"loc\")) {\n if (withoutLoc) {\n newNode.loc = null;\n } else {\n newNode.loc = node.loc;\n }\n }\n if (hasOwn(node, \"leadingComments\")) {\n newNode.leadingComments = maybeCloneComments(\n node.leadingComments,\n deep,\n withoutLoc,\n commentsCache,\n );\n }\n if (hasOwn(node, \"innerComments\")) {\n newNode.innerComments = maybeCloneComments(\n node.innerComments,\n deep,\n withoutLoc,\n commentsCache,\n );\n }\n if (hasOwn(node, \"trailingComments\")) {\n newNode.trailingComments = maybeCloneComments(\n node.trailingComments,\n deep,\n withoutLoc,\n commentsCache,\n );\n }\n if (hasOwn(node, \"extra\")) {\n newNode.extra = {\n ...node.extra,\n };\n }\n\n return newNode;\n}\n\nfunction maybeCloneComments<T extends t.Comment>(\n comments: readonly T[] | null,\n deep: boolean,\n withoutLoc: boolean,\n commentsCache: Map<T, T>,\n): readonly T[] | null {\n if (!comments || !deep) {\n return comments;\n }\n return comments.map(comment => {\n const cache = commentsCache.get(comment);\n if (cache) return cache;\n\n const { type, value, loc } = comment;\n\n const ret = { type, value, loc } as T;\n if (withoutLoc) {\n ret.loc = null;\n }\n\n commentsCache.set(comment, ret);\n\n return ret;\n });\n}\n","import cloneNode from \"./cloneNode.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Create a shallow clone of a `node`, including only\n * properties belonging to the node.\n * @deprecated Use t.cloneNode instead.\n */\nexport default function clone<T extends t.Node>(node: T): T {\n return cloneNode(node, /* deep */ false);\n}\n","import cloneNode from \"./cloneNode.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Create a deep clone of a `node` and all of it's child nodes\n * including only properties belonging to the node.\n * @deprecated Use t.cloneNode instead.\n */\nexport default function cloneDeep<T extends t.Node>(node: T): T {\n return cloneNode(node);\n}\n","import cloneNode from \"./cloneNode.ts\";\nimport type * as t from \"../index.ts\";\n/**\n * Create a deep clone of a `node` and all of it's child nodes\n * including only properties belonging to the node.\n * excluding `_private` and location properties.\n */\nexport default function cloneDeepWithoutLoc<T extends t.Node>(node: T): T {\n return cloneNode(node, /* deep */ true, /* withoutLoc */ true);\n}\n","import cloneNode from \"./cloneNode.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Create a shallow clone of a `node` excluding `_private` and location properties.\n */\nexport default function cloneWithoutLoc<T extends t.Node>(node: T): T {\n return cloneNode(node, /* deep */ false, /* withoutLoc */ true);\n}\n","import type * as t from \"../index.ts\";\n\n/**\n * Add comments of certain type to a node.\n */\nexport default function addComments<T extends t.Node>(\n node: T,\n type: t.CommentTypeShorthand,\n comments: t.Comment[],\n): T {\n if (!comments || !node) return node;\n\n const key = `${type}Comments` as const;\n\n if (node[key]) {\n if (type === \"leading\") {\n node[key] = comments.concat(node[key]);\n } else {\n node[key].push(...comments);\n }\n } else {\n node[key] = comments;\n }\n\n return node;\n}\n","import addComments from \"./addComments.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Add comment of certain type to a node.\n */\nexport default function addComment<T extends t.Node>(\n node: T,\n type: t.CommentTypeShorthand,\n content: string,\n line?: boolean,\n): T {\n return addComments(node, type, [\n {\n type: line ? \"CommentLine\" : \"CommentBlock\",\n value: content,\n } as t.Comment,\n ]);\n}\n","import type * as t from \"../index.ts\";\n\nexport default function inherit<\n C extends t.Node | undefined,\n P extends t.Node | undefined,\n>(key: keyof C & keyof P, child: C, parent: P): void {\n if (child && parent) {\n // @ts-expect-error Could further refine key definitions\n child[key] = Array.from(\n new Set([].concat(child[key], parent[key]).filter(Boolean)),\n );\n }\n}\n","import inherit from \"../utils/inherit.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function inheritInnerComments(\n child: t.Node,\n parent: t.Node,\n): void {\n inherit(\"innerComments\", child, parent);\n}\n","import inherit from \"../utils/inherit.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function inheritLeadingComments(\n child: t.Node,\n parent: t.Node,\n): void {\n inherit(\"leadingComments\", child, parent);\n}\n","import inherit from \"../utils/inherit.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function inheritTrailingComments(\n child: t.Node,\n parent: t.Node,\n): void {\n inherit(\"trailingComments\", child, parent);\n}\n","import inheritTrailingComments from \"./inheritTrailingComments.ts\";\nimport inheritLeadingComments from \"./inheritLeadingComments.ts\";\nimport inheritInnerComments from \"./inheritInnerComments.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Inherit all unique comments from `parent` node to `child` node.\n */\nexport default function inheritsComments<T extends t.Node>(\n child: T,\n parent: t.Node,\n): T {\n inheritTrailingComments(child, parent);\n inheritLeadingComments(child, parent);\n inheritInnerComments(child, parent);\n\n return child;\n}\n","import { COMMENT_KEYS } from \"../constants/index.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Remove comment properties from a node.\n */\nexport default function removeComments<T extends t.Node>(node: T): T {\n COMMENT_KEYS.forEach(key => {\n node[key] = null;\n });\n\n return node;\n}\n","/*\n * This file is auto-generated! Do not modify it directly.\n * To re-generate run 'make build'\n */\nimport { FLIPPED_ALIAS_KEYS } from \"../../definitions/index.ts\";\n\nexport const STANDARDIZED_TYPES = FLIPPED_ALIAS_KEYS[\"Standardized\"];\nexport const EXPRESSION_TYPES = FLIPPED_ALIAS_KEYS[\"Expression\"];\nexport const BINARY_TYPES = FLIPPED_ALIAS_KEYS[\"Binary\"];\nexport const SCOPABLE_TYPES = FLIPPED_ALIAS_KEYS[\"Scopable\"];\nexport const BLOCKPARENT_TYPES = FLIPPED_ALIAS_KEYS[\"BlockParent\"];\nexport const BLOCK_TYPES = FLIPPED_ALIAS_KEYS[\"Block\"];\nexport const STATEMENT_TYPES = FLIPPED_ALIAS_KEYS[\"Statement\"];\nexport const TERMINATORLESS_TYPES = FLIPPED_ALIAS_KEYS[\"Terminatorless\"];\nexport const COMPLETIONSTATEMENT_TYPES =\n FLIPPED_ALIAS_KEYS[\"CompletionStatement\"];\nexport const CONDITIONAL_TYPES = FLIPPED_ALIAS_KEYS[\"Conditional\"];\nexport const LOOP_TYPES = FLIPPED_ALIAS_KEYS[\"Loop\"];\nexport const WHILE_TYPES = FLIPPED_ALIAS_KEYS[\"While\"];\nexport const EXPRESSIONWRAPPER_TYPES = FLIPPED_ALIAS_KEYS[\"ExpressionWrapper\"];\nexport const FOR_TYPES = FLIPPED_ALIAS_KEYS[\"For\"];\nexport const FORXSTATEMENT_TYPES = FLIPPED_ALIAS_KEYS[\"ForXStatement\"];\nexport const FUNCTION_TYPES = FLIPPED_ALIAS_KEYS[\"Function\"];\nexport const FUNCTIONPARENT_TYPES = FLIPPED_ALIAS_KEYS[\"FunctionParent\"];\nexport const PUREISH_TYPES = FLIPPED_ALIAS_KEYS[\"Pureish\"];\nexport const DECLARATION_TYPES = FLIPPED_ALIAS_KEYS[\"Declaration\"];\nexport const FUNCTIONPARAMETER_TYPES = FLIPPED_ALIAS_KEYS[\"FunctionParameter\"];\nexport const PATTERNLIKE_TYPES = FLIPPED_ALIAS_KEYS[\"PatternLike\"];\nexport const LVAL_TYPES = FLIPPED_ALIAS_KEYS[\"LVal\"];\nexport const TSENTITYNAME_TYPES = FLIPPED_ALIAS_KEYS[\"TSEntityName\"];\nexport const LITERAL_TYPES = FLIPPED_ALIAS_KEYS[\"Literal\"];\nexport const IMMUTABLE_TYPES = FLIPPED_ALIAS_KEYS[\"Immutable\"];\nexport const USERWHITESPACABLE_TYPES = FLIPPED_ALIAS_KEYS[\"UserWhitespacable\"];\nexport const METHOD_TYPES = FLIPPED_ALIAS_KEYS[\"Method\"];\nexport const OBJECTMEMBER_TYPES = FLIPPED_ALIAS_KEYS[\"ObjectMember\"];\nexport const PROPERTY_TYPES = FLIPPED_ALIAS_KEYS[\"Property\"];\nexport const UNARYLIKE_TYPES = FLIPPED_ALIAS_KEYS[\"UnaryLike\"];\nexport const PATTERN_TYPES = FLIPPED_ALIAS_KEYS[\"Pattern\"];\nexport const CLASS_TYPES = FLIPPED_ALIAS_KEYS[\"Class\"];\nexport const IMPORTOREXPORTDECLARATION_TYPES =\n FLIPPED_ALIAS_KEYS[\"ImportOrExportDeclaration\"];\nexport const EXPORTDECLARATION_TYPES = FLIPPED_ALIAS_KEYS[\"ExportDeclaration\"];\nexport const MODULESPECIFIER_TYPES = FLIPPED_ALIAS_KEYS[\"ModuleSpecifier\"];\nexport const ACCESSOR_TYPES = FLIPPED_ALIAS_KEYS[\"Accessor\"];\nexport const PRIVATE_TYPES = FLIPPED_ALIAS_KEYS[\"Private\"];\nexport const FLOW_TYPES = FLIPPED_ALIAS_KEYS[\"Flow\"];\nexport const FLOWTYPE_TYPES = FLIPPED_ALIAS_KEYS[\"FlowType\"];\nexport const FLOWBASEANNOTATION_TYPES =\n FLIPPED_ALIAS_KEYS[\"FlowBaseAnnotation\"];\nexport const FLOWDECLARATION_TYPES = FLIPPED_ALIAS_KEYS[\"FlowDeclaration\"];\nexport const FLOWPREDICATE_TYPES = FLIPPED_ALIAS_KEYS[\"FlowPredicate\"];\nexport const ENUMBODY_TYPES = FLIPPED_ALIAS_KEYS[\"EnumBody\"];\nexport const ENUMMEMBER_TYPES = FLIPPED_ALIAS_KEYS[\"EnumMember\"];\nexport const JSX_TYPES = FLIPPED_ALIAS_KEYS[\"JSX\"];\nexport const MISCELLANEOUS_TYPES = FLIPPED_ALIAS_KEYS[\"Miscellaneous\"];\nexport const TYPESCRIPT_TYPES = FLIPPED_ALIAS_KEYS[\"TypeScript\"];\nexport const TSTYPEELEMENT_TYPES = FLIPPED_ALIAS_KEYS[\"TSTypeElement\"];\nexport const TSTYPE_TYPES = FLIPPED_ALIAS_KEYS[\"TSType\"];\nexport const TSBASETYPE_TYPES = FLIPPED_ALIAS_KEYS[\"TSBaseType\"];\n/**\n * @deprecated migrate to IMPORTOREXPORTDECLARATION_TYPES.\n */\nexport const MODULEDECLARATION_TYPES = IMPORTOREXPORTDECLARATION_TYPES;\n","import {\n isBlockStatement,\n isFunction,\n isEmptyStatement,\n isStatement,\n} from \"../validators/generated/index.ts\";\nimport {\n returnStatement,\n expressionStatement,\n blockStatement,\n} from \"../builders/generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function toBlock(\n node: t.Statement | t.Expression,\n parent?: t.Node,\n): t.BlockStatement {\n if (isBlockStatement(node)) {\n return node;\n }\n\n let blockNodes: t.Statement[] = [];\n\n if (isEmptyStatement(node)) {\n blockNodes = [];\n } else {\n if (!isStatement(node)) {\n if (isFunction(parent)) {\n node = returnStatement(node);\n } else {\n node = expressionStatement(node);\n }\n }\n\n blockNodes = [node];\n }\n\n return blockStatement(blockNodes);\n}\n","import toBlock from \"./toBlock.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Ensure the `key` (defaults to \"body\") of a `node` is a block.\n * Casting it to a block if it is not.\n *\n * Returns the BlockStatement\n */\nexport default function ensureBlock(\n node: t.Node,\n key: string = \"body\",\n): t.BlockStatement {\n // @ts-expect-error Fixme: key may not exist in node, consider remove key = \"body\"\n const result = toBlock(node[key], node);\n // @ts-expect-error Fixme: key may not exist in node, consider remove key = \"body\"\n node[key] = result;\n return result;\n}\n","import isValidIdentifier from \"../validators/isValidIdentifier.ts\";\nimport { isIdentifierChar } from \"@babel/helper-validator-identifier\";\n\nexport default function toIdentifier(input: string): string {\n input = input + \"\";\n\n // replace all non-valid identifiers with dashes\n let name = \"\";\n for (const c of input) {\n name += isIdentifierChar(c.codePointAt(0)) ? c : \"-\";\n }\n\n // remove all dashes and numbers from start of name\n name = name.replace(/^[-0-9]+/, \"\");\n\n // camel case\n name = name.replace(/[-\\s]+(.)?/g, function (match, c) {\n return c ? c.toUpperCase() : \"\";\n });\n\n if (!isValidIdentifier(name)) {\n name = `_${name}`;\n }\n\n return name || \"_\";\n}\n","import toIdentifier from \"./toIdentifier.ts\";\n\nexport default function toBindingIdentifierName(name: string): string {\n name = toIdentifier(name);\n if (name === \"eval\" || name === \"arguments\") name = \"_\" + name;\n\n return name;\n}\n","import { isIdentifier } from \"../validators/generated/index.ts\";\nimport { stringLiteral } from \"../builders/generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function toComputedKey(\n node:\n | t.ObjectMember\n | t.ObjectProperty\n | t.ClassMethod\n | t.ClassProperty\n | t.ClassAccessorProperty\n | t.MemberExpression\n | t.OptionalMemberExpression,\n // @ts-expect-error todo(flow->ts): maybe check the type of node before accessing .key and .property\n key: t.Expression | t.PrivateName = node.key || node.property,\n) {\n if (!node.computed && isIdentifier(key)) key = stringLiteral(key.name);\n\n return key;\n}\n","import {\n isExpression,\n isFunction,\n isClass,\n isExpressionStatement,\n} from \"../validators/generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default toExpression as {\n (node: t.Function): t.FunctionExpression;\n (node: t.Class): t.ClassExpression;\n (\n node: t.ExpressionStatement | t.Expression | t.Class | t.Function,\n ): t.Expression;\n};\n\nfunction toExpression(\n node: t.ExpressionStatement | t.Expression | t.Class | t.Function,\n): t.Expression {\n if (isExpressionStatement(node)) {\n node = node.expression;\n }\n\n // return unmodified node\n // important for things like ArrowFunctions where\n // type change from ArrowFunction to FunctionExpression\n // produces bugs like -> `()=>a` to `function () a`\n // without generating a BlockStatement for it\n // ref: https://github.com/babel/babili/issues/130\n if (isExpression(node)) {\n return node;\n }\n\n // convert all classes and functions\n // ClassDeclaration -> ClassExpression\n // FunctionDeclaration, ObjectMethod, ClassMethod -> FunctionExpression\n if (isClass(node)) {\n // @ts-expect-error todo(flow->ts): avoid type unsafe mutations\n node.type = \"ClassExpression\";\n // abstract modifiers are only allowed on class declarations\n node.abstract = false;\n } else if (isFunction(node)) {\n // @ts-expect-error todo(flow->ts): avoid type unsafe mutations\n node.type = \"FunctionExpression\";\n }\n\n // if it's still not an expression\n if (!isExpression(node)) {\n throw new Error(`cannot turn ${node.type} to an expression`);\n }\n\n return node;\n}\n","import { VISITOR_KEYS } from \"../definitions/index.ts\";\nimport type * as t from \"../index.ts\";\n\nconst _skip = Symbol();\nconst _stop = Symbol();\n\n/**\n * A prefix AST traversal implementation meant for simple searching and processing.\n * @param enter The callback can return `traverseFast.skip` to skip the subtree of the current node, or `traverseFast.stop` to stop the traversal.\n * @returns `true` if the traversal was stopped by callback, `false` otherwise.\n */\nexport default function traverseFast<Options = object>(\n node: t.Node | null | undefined,\n enter: (\n node: t.Node,\n opts?: Options,\n ) => void | typeof traverseFast.skip | typeof traverseFast.stop,\n opts?: Options,\n): boolean {\n if (!node) return false;\n\n const keys = VISITOR_KEYS[node.type];\n if (!keys) return false;\n\n opts = opts || ({} as Options);\n const ret = enter(node, opts);\n if (ret !== undefined) {\n switch (ret) {\n case _skip:\n return false;\n case _stop:\n return true;\n }\n }\n\n for (const key of keys) {\n const subNode: t.Node | undefined | null =\n // @ts-expect-error key must present in node\n node[key];\n\n if (!subNode) continue;\n\n if (Array.isArray(subNode)) {\n for (const node of subNode) {\n if (traverseFast(node, enter, opts)) return true;\n }\n } else {\n if (traverseFast(subNode, enter, opts)) return true;\n }\n }\n return false;\n}\n\ntraverseFast.skip = _skip;\ntraverseFast.stop = _stop;\n","import { COMMENT_KEYS } from \"../constants/index.ts\";\nimport type * as t from \"../index.ts\";\n\nconst CLEAR_KEYS = [\n \"tokens\", // only exist in t.File\n \"start\",\n \"end\",\n \"loc\",\n // Fixme: should be extra.raw / extra.rawValue?\n \"raw\",\n \"rawValue\",\n] as const;\n\nconst CLEAR_KEYS_PLUS_COMMENTS = [\n ...COMMENT_KEYS,\n \"comments\",\n ...CLEAR_KEYS,\n] as const;\n\nexport type Options = { preserveComments?: boolean };\n/**\n * Remove all of the _* properties from a node along with the additional metadata\n * properties like location data and raw token data.\n */\nexport default function removeProperties(\n node: t.Node,\n opts: Options = {},\n): void {\n const map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS;\n for (const key of map) {\n // @ts-expect-error tokens only exist in t.File\n if (node[key] != null) node[key] = undefined;\n }\n\n for (const key of Object.keys(node)) {\n // @ts-expect-error string can not index node\n if (key.startsWith(\"_\") && node[key] != null) node[key] = undefined;\n }\n\n const symbols: symbol[] = Object.getOwnPropertySymbols(node);\n for (const sym of symbols) {\n // @ts-expect-error Fixme: document symbol properties\n node[sym] = null;\n }\n}\n","import traverseFast from \"../traverse/traverseFast.ts\";\nimport removeProperties from \"./removeProperties.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function removePropertiesDeep<T extends t.Node>(\n tree: T,\n opts?: { preserveComments: boolean } | null,\n): T {\n traverseFast(tree, removeProperties, opts);\n\n return tree;\n}\n","import {\n isIdentifier,\n isStringLiteral,\n} from \"../validators/generated/index.ts\";\nimport cloneNode from \"../clone/cloneNode.ts\";\nimport removePropertiesDeep from \"../modifications/removePropertiesDeep.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function toKeyAlias(\n node: t.Method | t.Property,\n key: t.Node = node.key,\n): string {\n let alias;\n\n // @ts-expect-error todo(flow->ts): maybe add node type check before checking `.kind`\n if (node.kind === \"method\") {\n return toKeyAlias.increment() + \"\";\n } else if (isIdentifier(key)) {\n alias = key.name;\n } else if (isStringLiteral(key)) {\n alias = JSON.stringify(key.value);\n } else {\n alias = JSON.stringify(removePropertiesDeep(cloneNode(key)));\n }\n\n // @ts-expect-error todo(flow->ts): maybe add node type check before checking `.computed`\n if (node.computed) {\n alias = `[${alias}]`;\n }\n\n // @ts-expect-error todo(flow->ts): maybe add node type check before checking `.static`\n if (node.static) {\n alias = `static:${alias}`;\n }\n\n return alias;\n}\n\ntoKeyAlias.uid = 0;\n\ntoKeyAlias.increment = function () {\n if (toKeyAlias.uid >= Number.MAX_SAFE_INTEGER) {\n return (toKeyAlias.uid = 0);\n } else {\n return toKeyAlias.uid++;\n }\n};\n","import {\n isStatement,\n isFunction,\n isClass,\n isAssignmentExpression,\n} from \"../validators/generated/index.ts\";\nimport { expressionStatement } from \"../builders/generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default toStatement as {\n (node: t.AssignmentExpression, ignore?: boolean): t.ExpressionStatement;\n\n <T extends t.Statement>(node: T, ignore: false): T;\n <T extends t.Statement>(node: T, ignore?: boolean): T | false;\n\n (node: t.Class, ignore: false): t.ClassDeclaration;\n (node: t.Class, ignore?: boolean): t.ClassDeclaration | false;\n\n (node: t.Function, ignore: false): t.FunctionDeclaration;\n (node: t.Function, ignore?: boolean): t.FunctionDeclaration | false;\n\n (node: t.Node, ignore: false): t.Statement;\n (node: t.Node, ignore?: boolean): t.Statement | false;\n};\n\nfunction toStatement(node: t.Node, ignore?: boolean): t.Statement | false {\n if (isStatement(node)) {\n return node;\n }\n\n let mustHaveId = false;\n let newType;\n\n if (isClass(node)) {\n mustHaveId = true;\n newType = \"ClassDeclaration\" as const;\n } else if (isFunction(node)) {\n mustHaveId = true;\n newType = \"FunctionDeclaration\" as const;\n } else if (isAssignmentExpression(node)) {\n return expressionStatement(node);\n }\n\n // @ts-expect-error todo(flow->ts): node.id might be missing\n if (mustHaveId && !node.id) {\n newType = false;\n }\n\n if (!newType) {\n if (ignore) {\n return false;\n } else {\n throw new Error(`cannot turn ${node.type} to a statement`);\n }\n }\n\n // @ts-expect-error manipulating node.type\n node.type = newType;\n\n // @ts-expect-error todo(flow->ts) refactor to avoid type unsafe mutations like reassigning node type above\n return node;\n}\n","import isValidIdentifier from \"../validators/isValidIdentifier.ts\";\nimport {\n identifier,\n booleanLiteral,\n nullLiteral,\n stringLiteral,\n numericLiteral,\n bigIntLiteral,\n regExpLiteral,\n arrayExpression,\n objectProperty,\n objectExpression,\n unaryExpression,\n binaryExpression,\n} from \"../builders/generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default valueToNode as {\n (value: undefined): t.Identifier; // TODO: This should return \"void 0\"\n (value: boolean): t.BooleanLiteral;\n (value: null): t.NullLiteral;\n (value: string): t.StringLiteral;\n // Infinities and NaN need to use a BinaryExpression; negative values must be wrapped in UnaryExpression\n (value: number): t.NumericLiteral | t.BinaryExpression | t.UnaryExpression;\n (value: bigint): t.BigIntLiteral;\n (value: RegExp): t.RegExpLiteral;\n (value: readonly unknown[]): t.ArrayExpression;\n\n // this throws with objects that are not plain objects,\n // or if there are non-valueToNode-able values\n (value: object): t.ObjectExpression;\n\n (value: unknown): t.Expression;\n};\n\n// @ts-expect-error: Object.prototype.toString must return a string\nconst objectToString: (value: unknown) => string = Function.call.bind(\n Object.prototype.toString,\n);\n\nfunction isRegExp(value: unknown): value is RegExp {\n return objectToString(value) === \"[object RegExp]\";\n}\n\nfunction isPlainObject(value: unknown): value is object {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Object.prototype.toString.call(value) !== \"[object Object]\"\n ) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n // Object.prototype's __proto__ is null. Every other class's __proto__.__proto__ is\n // not null by default. We cannot check if proto === Object.prototype because it\n // could come from another realm.\n return proto === null || Object.getPrototypeOf(proto) === null;\n}\n\nfunction valueToNode(value: unknown): t.Expression {\n // undefined\n if (value === undefined) {\n return identifier(\"undefined\");\n }\n\n // boolean\n if (value === true || value === false) {\n return booleanLiteral(value);\n }\n\n // null\n if (value === null) {\n return nullLiteral();\n }\n\n // strings\n if (typeof value === \"string\") {\n return stringLiteral(value);\n }\n\n // numbers\n if (typeof value === \"number\") {\n let result;\n if (Number.isFinite(value)) {\n result = numericLiteral(Math.abs(value));\n } else {\n let numerator;\n if (Number.isNaN(value)) {\n // NaN\n numerator = numericLiteral(0);\n } else {\n // Infinity / -Infinity\n numerator = numericLiteral(1);\n }\n\n result = binaryExpression(\"/\", numerator, numericLiteral(0));\n }\n\n if (value < 0 || Object.is(value, -0)) {\n result = unaryExpression(\"-\", result);\n }\n\n return result;\n }\n\n // bigints\n if (typeof value === \"bigint\") {\n if (value < 0) {\n return unaryExpression(\"-\", bigIntLiteral(-value));\n } else {\n return bigIntLiteral(value);\n }\n }\n\n // regexes\n if (isRegExp(value)) {\n const pattern = value.source;\n const flags = /\\/([a-z]*)$/.exec(value.toString())[1];\n return regExpLiteral(pattern, flags);\n }\n\n // array\n if (Array.isArray(value)) {\n return arrayExpression(value.map(valueToNode));\n }\n\n // object\n if (isPlainObject(value)) {\n const props = [];\n for (const key of Object.keys(value)) {\n let nodeKey,\n computed = false;\n if (isValidIdentifier(key)) {\n if (key === \"__proto__\") {\n computed = true;\n nodeKey = stringLiteral(key);\n } else {\n nodeKey = identifier(key);\n }\n } else {\n nodeKey = stringLiteral(key);\n }\n props.push(\n objectProperty(\n nodeKey,\n valueToNode(\n // @ts-expect-error key must present in value\n value[key],\n ),\n computed,\n ),\n );\n }\n return objectExpression(props);\n }\n\n throw new Error(\"don't know how to turn this value into a node\");\n}\n","import { memberExpression } from \"../builders/generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Append a node to a member expression.\n */\nexport default function appendToMemberExpression(\n member: t.MemberExpression,\n append: t.MemberExpression[\"property\"],\n computed: boolean = false,\n): t.MemberExpression {\n member.object = memberExpression(\n member.object,\n member.property,\n member.computed,\n );\n member.property = append;\n member.computed = !!computed;\n\n return member;\n}\n","import { INHERIT_KEYS } from \"../constants/index.ts\";\nimport inheritsComments from \"../comments/inheritsComments.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Inherit all contextual properties from `parent` node to `child` node.\n */\nexport default function inherits<T extends t.Node | null | undefined>(\n child: T,\n parent: t.Node | null | undefined,\n): T {\n if (!child || !parent) return child;\n\n // optionally inherit specific properties if not null\n for (const key of INHERIT_KEYS.optional) {\n // @ts-expect-error Fixme: refine parent types\n if (child[key] == null) {\n // @ts-expect-error Fixme: refine parent types\n child[key] = parent[key];\n }\n }\n\n // force inherit \"private\" properties\n for (const key of Object.keys(parent)) {\n if (key.startsWith(\"_\") && key !== \"__clone\") {\n // @ts-expect-error Fixme: refine parent types\n child[key] = parent[key];\n }\n }\n\n // force inherit select properties\n for (const key of INHERIT_KEYS.force) {\n // @ts-expect-error Fixme: refine parent types\n child[key] = parent[key];\n }\n\n inheritsComments(child, parent);\n\n return child;\n}\n","import { memberExpression } from \"../builders/generated/index.ts\";\nimport { isSuper } from \"../index.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Prepend a node to a member expression.\n */\nexport default function prependToMemberExpression<\n T extends Pick<t.MemberExpression, \"object\" | \"property\">,\n>(member: T, prepend: t.MemberExpression[\"object\"]): T {\n if (isSuper(member.object)) {\n throw new Error(\n \"Cannot prepend node to super property access (`super.foo`).\",\n );\n }\n member.object = memberExpression(prepend, member.object);\n\n return member;\n}\n","import type * as t from \"../index.ts\";\n\n/**\n * For the given node, generate a map from assignment id names to the identifier node.\n * Unlike getBindingIdentifiers, this function does not handle declarations and imports.\n * @param node the assignment expression or forXstatement\n * @returns an object map\n * @see getBindingIdentifiers\n */\nexport default function getAssignmentIdentifiers(\n node: t.Node | t.Node[],\n): Record<string, t.Identifier> {\n // null represents holes in an array pattern\n const search: (t.Node | null)[] = [].concat(node);\n const ids = Object.create(null);\n\n while (search.length) {\n const id = search.pop();\n if (!id) continue;\n\n switch (id.type) {\n case \"ArrayPattern\":\n search.push(...id.elements);\n break;\n\n case \"AssignmentExpression\":\n case \"AssignmentPattern\":\n case \"ForInStatement\":\n case \"ForOfStatement\":\n search.push(id.left);\n break;\n\n case \"ObjectPattern\":\n search.push(...id.properties);\n break;\n\n case \"ObjectProperty\":\n search.push(id.value);\n break;\n\n case \"RestElement\":\n case \"UpdateExpression\":\n search.push(id.argument);\n break;\n\n case \"UnaryExpression\":\n if (id.operator === \"delete\") {\n search.push(id.argument);\n }\n break;\n\n case \"Identifier\":\n ids[id.name] = id;\n break;\n\n default:\n break;\n }\n }\n\n return ids;\n}\n","import {\n isExportDeclaration,\n isIdentifier,\n isClassExpression,\n isDeclaration,\n isFunctionDeclaration,\n isFunctionExpression,\n isExportAllDeclaration,\n isAssignmentExpression,\n isUnaryExpression,\n isUpdateExpression,\n} from \"../validators/generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport { getBindingIdentifiers as default };\n\nfunction getBindingIdentifiers(\n node: t.Node,\n duplicates: true,\n outerOnly?: boolean,\n newBindingsOnly?: boolean,\n): Record<string, t.Identifier[]>;\n\nfunction getBindingIdentifiers(\n node: t.Node,\n duplicates?: false,\n outerOnly?: boolean,\n newBindingsOnly?: boolean,\n): Record<string, t.Identifier>;\n\nfunction getBindingIdentifiers(\n node: t.Node,\n duplicates?: boolean,\n outerOnly?: boolean,\n newBindingsOnly?: boolean,\n): Record<string, t.Identifier> | Record<string, t.Identifier[]>;\n\n/**\n * Return a list of binding identifiers associated with the input `node`.\n */\nfunction getBindingIdentifiers(\n node: t.Node,\n duplicates?: boolean,\n outerOnly?: boolean,\n newBindingsOnly?: boolean,\n): Record<string, t.Identifier> | Record<string, t.Identifier[]> {\n const search: t.Node[] = [].concat(node);\n const ids = Object.create(null);\n\n while (search.length) {\n const id = search.shift();\n if (!id) continue;\n\n if (\n newBindingsOnly &&\n // These nodes do not introduce _new_ bindings, but they are included\n // in getBindingIdentifiers.keys for backwards compatibility.\n // TODO(@nicolo-ribaudo): Check if we can remove them from .keys in a\n // backward-compatible way, and if not what we need to do to remove them\n // in Babel 8.\n (isAssignmentExpression(id) ||\n isUnaryExpression(id) ||\n isUpdateExpression(id))\n ) {\n continue;\n }\n\n if (isIdentifier(id)) {\n if (duplicates) {\n const _ids = (ids[id.name] = ids[id.name] || []);\n _ids.push(id);\n } else {\n ids[id.name] = id;\n }\n continue;\n }\n\n if (isExportDeclaration(id) && !isExportAllDeclaration(id)) {\n if (isDeclaration(id.declaration)) {\n search.push(id.declaration);\n }\n continue;\n }\n\n if (outerOnly) {\n if (isFunctionDeclaration(id)) {\n search.push(id.id);\n continue;\n }\n\n if (\n isFunctionExpression(id) ||\n (process.env.BABEL_8_BREAKING && isClassExpression(id))\n ) {\n continue;\n }\n }\n\n const keys = getBindingIdentifiers.keys[id.type];\n\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const nodes =\n // @ts-expect-error key must present in id\n id[key] as t.Node[] | t.Node | undefined | null;\n if (nodes) {\n if (Array.isArray(nodes)) {\n search.push(...nodes);\n } else {\n search.push(nodes);\n }\n }\n }\n }\n }\n return ids;\n}\n\n/**\n * Mapping of types to their identifier keys.\n */\ntype KeysMap = {\n [N in t.Node as N[\"type\"]]?: (keyof N)[];\n};\n\nconst keys: KeysMap = {\n DeclareClass: [\"id\"],\n DeclareFunction: [\"id\"],\n DeclareModule: [\"id\"],\n DeclareVariable: [\"id\"],\n DeclareInterface: [\"id\"],\n DeclareTypeAlias: [\"id\"],\n DeclareOpaqueType: [\"id\"],\n InterfaceDeclaration: [\"id\"],\n TypeAlias: [\"id\"],\n OpaqueType: [\"id\"],\n\n CatchClause: [\"param\"],\n LabeledStatement: [\"label\"],\n UnaryExpression: [\"argument\"],\n AssignmentExpression: [\"left\"],\n\n ImportSpecifier: [\"local\"],\n ImportNamespaceSpecifier: [\"local\"],\n ImportDefaultSpecifier: [\"local\"],\n ImportDeclaration: [\"specifiers\"],\n TSImportEqualsDeclaration: [\"id\"],\n\n ExportSpecifier: [\"exported\"],\n ExportNamespaceSpecifier: [\"exported\"],\n ExportDefaultSpecifier: [\"exported\"],\n\n FunctionDeclaration: [\"id\", \"params\"],\n FunctionExpression: [\"id\", \"params\"],\n ArrowFunctionExpression: [\"params\"],\n ObjectMethod: [\"params\"],\n ClassMethod: [\"params\"],\n ClassPrivateMethod: [\"params\"],\n\n ForInStatement: [\"left\"],\n ForOfStatement: [\"left\"],\n\n ClassDeclaration: [\"id\"],\n ClassExpression: [\"id\"],\n\n RestElement: [\"argument\"],\n UpdateExpression: [\"argument\"],\n\n ObjectProperty: [\"value\"],\n\n AssignmentPattern: [\"left\"],\n ArrayPattern: [\"elements\"],\n ObjectPattern: [\"properties\"],\n\n VariableDeclaration: [\"declarations\"],\n VariableDeclarator: [\"id\"],\n};\n\ngetBindingIdentifiers.keys = keys;\n","import getBindingIdentifiers from \"./getBindingIdentifiers.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default getOuterBindingIdentifiers as {\n (node: t.Node, duplicates: true): Record<string, t.Identifier[]>;\n (node: t.Node, duplicates?: false): Record<string, t.Identifier>;\n (\n node: t.Node,\n duplicates?: boolean,\n ): Record<string, t.Identifier> | Record<string, t.Identifier[]>;\n};\n\nfunction getOuterBindingIdentifiers(\n node: t.Node,\n duplicates: boolean,\n): Record<string, t.Identifier> | Record<string, t.Identifier[]> {\n return getBindingIdentifiers(node, duplicates, true);\n}\n","import type * as t from \"../index.ts\";\n\nimport {\n isAssignmentExpression,\n isClassMethod,\n isIdentifier,\n isLiteral,\n isNullLiteral,\n isObjectMethod,\n isObjectProperty,\n isPrivateName,\n isRegExpLiteral,\n isTemplateLiteral,\n isVariableDeclarator,\n} from \"../validators/generated/index.ts\";\n\nfunction getNameFromLiteralId(id: t.Literal): string {\n if (isNullLiteral(id)) {\n return \"null\";\n }\n\n if (isRegExpLiteral(id)) {\n return `/${id.pattern}/${id.flags}`;\n }\n\n if (isTemplateLiteral(id)) {\n return id.quasis.map(quasi => quasi.value.raw).join(\"\");\n }\n\n if (id.value !== undefined) {\n return String(id.value);\n }\n\n return null;\n}\n\nfunction getObjectMemberKey(\n node: t.ObjectProperty | t.ObjectMethod | t.ClassProperty | t.ClassMethod,\n): t.Expression | t.PrivateName {\n if (!node.computed || isLiteral(node.key)) {\n return node.key;\n }\n}\n\ntype GetFunctionNameResult = {\n name: string;\n originalNode: t.Node;\n} | null;\n\nexport default function getFunctionName(\n node: t.ObjectMethod | t.ClassMethod,\n): GetFunctionNameResult;\nexport default function getFunctionName(\n node: t.Function | t.Class,\n parent: t.Node,\n): GetFunctionNameResult;\nexport default function getFunctionName(\n node: t.Function | t.Class,\n parent?: t.Node,\n): GetFunctionNameResult {\n if (\"id\" in node && node.id) {\n return {\n name: node.id.name,\n originalNode: node.id,\n };\n }\n\n let prefix = \"\";\n\n let id;\n if (isObjectProperty(parent, { value: node })) {\n // { foo: () => {} };\n id = getObjectMemberKey(parent);\n } else if (isObjectMethod(node) || isClassMethod(node)) {\n // { foo() {} };\n id = getObjectMemberKey(node);\n if (node.kind === \"get\") prefix = \"get \";\n else if (node.kind === \"set\") prefix = \"set \";\n } else if (isVariableDeclarator(parent, { init: node })) {\n // let foo = function () {};\n id = parent.id;\n } else if (isAssignmentExpression(parent, { operator: \"=\", right: node })) {\n // foo = function () {};\n id = parent.left;\n }\n\n if (!id) return null;\n\n const name = isLiteral(id)\n ? getNameFromLiteralId(id)\n : isIdentifier(id)\n ? id.name\n : isPrivateName(id)\n ? id.id.name\n : null;\n if (name == null) return null;\n\n return { name: prefix + name, originalNode: id };\n}\n","import { VISITOR_KEYS } from \"../definitions/index.ts\";\nimport type * as t from \"../index.ts\";\n\nexport type TraversalAncestors = {\n node: t.Node;\n key: string;\n index?: number;\n}[];\n\nexport type TraversalHandler<T> = (\n this: undefined,\n node: t.Node,\n parent: TraversalAncestors,\n state: T,\n) => void;\n\nexport type TraversalHandlers<T> = {\n enter?: TraversalHandler<T>;\n exit?: TraversalHandler<T>;\n};\n\n/**\n * A general AST traversal with both prefix and postfix handlers, and a\n * state object. Exposes ancestry data to each handler so that more complex\n * AST data can be taken into account.\n */\nexport default function traverse<T>(\n node: t.Node,\n handlers: TraversalHandler<T> | TraversalHandlers<T>,\n state?: T,\n): void {\n if (typeof handlers === \"function\") {\n handlers = { enter: handlers };\n }\n\n const { enter, exit } = handlers;\n\n traverseSimpleImpl(node, enter, exit, state, []);\n}\n\nfunction traverseSimpleImpl<T>(\n node: any,\n enter: Function | undefined,\n exit: Function | undefined,\n state: T | undefined,\n ancestors: TraversalAncestors,\n) {\n const keys = VISITOR_KEYS[node.type];\n if (!keys) return;\n\n if (enter) enter(node, ancestors, state);\n\n for (const key of keys) {\n const subNode = node[key];\n\n if (Array.isArray(subNode)) {\n for (let i = 0; i < subNode.length; i++) {\n const child = subNode[i];\n if (!child) continue;\n\n ancestors.push({\n node,\n key,\n index: i,\n });\n\n traverseSimpleImpl(child, enter, exit, state, ancestors);\n\n ancestors.pop();\n }\n } else if (subNode) {\n ancestors.push({\n node,\n key,\n });\n\n traverseSimpleImpl(subNode, enter, exit, state, ancestors);\n\n ancestors.pop();\n }\n }\n\n if (exit) exit(node, ancestors, state);\n}\n","import getBindingIdentifiers from \"../retrievers/getBindingIdentifiers.ts\";\nimport type * as t from \"../index.ts\";\n/**\n * Check if the input `node` is a binding identifier.\n */\nexport default function isBinding(\n node: t.Node,\n parent: t.Node,\n grandparent?: t.Node,\n): boolean {\n if (\n grandparent &&\n node.type === \"Identifier\" &&\n parent.type === \"ObjectProperty\" &&\n grandparent.type === \"ObjectExpression\"\n ) {\n // We need to special-case this, because getBindingIdentifiers\n // has an ObjectProperty->value entry for destructuring patterns.\n return false;\n }\n\n const keys = getBindingIdentifiers.keys[parent.type];\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const val =\n // @ts-expect-error key must present in parent\n parent[key];\n if (Array.isArray(val)) {\n if (val.includes(node)) return true;\n } else {\n if (val === node) return true;\n }\n }\n }\n\n return false;\n}\n","import { isVariableDeclaration } from \"./generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nif (!process.env.BABEL_8_BREAKING) {\n // eslint-disable-next-line no-var\n var BLOCK_SCOPED_SYMBOL = Symbol.for(\"var used to be block scoped\");\n}\n\n/**\n * Check if the input `node` is a `let` variable declaration.\n */\nexport default function isLet(node: t.Node): boolean {\n if (process.env.BABEL_8_BREAKING) {\n return isVariableDeclaration(node) && node.kind !== \"var\";\n } else {\n return (\n isVariableDeclaration(node) &&\n (node.kind !== \"var\" ||\n // @ts-expect-error Fixme: document private properties\n node[BLOCK_SCOPED_SYMBOL])\n );\n }\n}\n","import {\n isClassDeclaration,\n isFunctionDeclaration,\n} from \"./generated/index.ts\";\nimport isLet from \"./isLet.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Check if the input `node` is block scoped.\n */\nexport default function isBlockScoped(\n node: t.Node | null | undefined,\n): boolean {\n return isFunctionDeclaration(node) || isClassDeclaration(node) || isLet(node);\n}\n","import isType from \"./isType.ts\";\nimport { isIdentifier } from \"./generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Check if the input `node` is definitely immutable.\n */\nexport default function isImmutable(node: t.Node): boolean {\n if (isType(node.type, \"Immutable\")) return true;\n\n if (isIdentifier(node)) {\n if (node.name === \"undefined\") {\n // immutable!\n return true;\n } else {\n // no idea...\n return false;\n }\n }\n\n return false;\n}\n","import { NODE_FIELDS, VISITOR_KEYS } from \"../definitions/index.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Check if two nodes are equivalent\n */\nexport default function isNodesEquivalent<T extends Partial<t.Node>>(\n a: T,\n b: any,\n): b is T {\n if (\n typeof a !== \"object\" ||\n typeof b !== \"object\" ||\n a == null ||\n b == null\n ) {\n return a === b;\n }\n\n if (a.type !== b.type) {\n return false;\n }\n\n const fields = Object.keys(NODE_FIELDS[a.type] || a.type);\n const visitorKeys = VISITOR_KEYS[a.type];\n\n for (const field of fields) {\n const val_a =\n // @ts-expect-error field must present in a\n a[field];\n const val_b = b[field];\n if (typeof val_a !== typeof val_b) {\n return false;\n }\n if (val_a == null && val_b == null) {\n continue;\n } else if (val_a == null || val_b == null) {\n return false;\n }\n\n if (Array.isArray(val_a)) {\n if (!Array.isArray(val_b)) {\n return false;\n }\n if (val_a.length !== val_b.length) {\n return false;\n }\n\n for (let i = 0; i < val_a.length; i++) {\n if (!isNodesEquivalent(val_a[i], val_b[i])) {\n return false;\n }\n }\n continue;\n }\n\n if (typeof val_a === \"object\" && !visitorKeys?.includes(field)) {\n for (const key of Object.keys(val_a)) {\n if (val_a[key] !== val_b[key]) {\n return false;\n }\n }\n continue;\n }\n\n if (!isNodesEquivalent(val_a, val_b)) {\n return false;\n }\n }\n\n return true;\n}\n","import type * as t from \"../index.ts\";\n\n/**\n * Check if the input `node` is a reference to a bound variable.\n */\nexport default function isReferenced(\n node: t.Node | null | undefined,\n parent: t.Node,\n grandparent?: t.Node,\n): boolean {\n switch (parent.type) {\n // yes: PARENT[NODE]\n // yes: NODE.child\n // no: parent.NODE\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n if (parent.property === node) {\n return !!parent.computed;\n }\n return parent.object === node;\n\n case \"JSXMemberExpression\":\n return parent.object === node;\n // no: let NODE = init;\n // yes: let id = NODE;\n case \"VariableDeclarator\":\n return parent.init === node;\n\n // yes: () => NODE\n // no: (NODE) => {}\n case \"ArrowFunctionExpression\":\n return parent.body === node;\n\n // no: class { #NODE; }\n // no: class { get #NODE() {} }\n // no: class { #NODE() {} }\n // no: class { fn() { return this.#NODE; } }\n case \"PrivateName\":\n return false;\n\n // no: class { NODE() {} }\n // yes: class { [NODE]() {} }\n // no: class { foo(NODE) {} }\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n case \"ObjectMethod\":\n if (parent.key === node) {\n return !!parent.computed;\n }\n return false;\n\n // yes: { [NODE]: \"\" }\n // no: { NODE: \"\" }\n // depends: { NODE }\n // depends: { key: NODE }\n case \"ObjectProperty\":\n if (parent.key === node) {\n return !!parent.computed;\n }\n // parent.value === node\n return grandparent?.type !== \"ObjectPattern\";\n // no: class { NODE = value; }\n // yes: class { [NODE] = value; }\n // yes: class { key = NODE; }\n case \"ClassProperty\":\n case \"ClassAccessorProperty\":\n if (parent.key === node) {\n return !!parent.computed;\n }\n return true;\n case \"ClassPrivateProperty\":\n return parent.key !== node;\n\n // no: class NODE {}\n // yes: class Foo extends NODE {}\n case \"ClassDeclaration\":\n case \"ClassExpression\":\n return parent.superClass === node;\n\n // yes: left = NODE;\n // no: NODE = right;\n case \"AssignmentExpression\":\n return parent.right === node;\n\n // no: [NODE = foo] = [];\n // yes: [foo = NODE] = [];\n case \"AssignmentPattern\":\n return parent.right === node;\n\n // no: NODE: for (;;) {}\n case \"LabeledStatement\":\n return false;\n\n // no: try {} catch (NODE) {}\n case \"CatchClause\":\n return false;\n\n // no: function foo(...NODE) {}\n case \"RestElement\":\n return false;\n\n case \"BreakStatement\":\n case \"ContinueStatement\":\n return false;\n\n // no: function NODE() {}\n // no: function foo(NODE) {}\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n return false;\n\n // no: export NODE from \"foo\";\n // no: export * as NODE from \"foo\";\n case \"ExportNamespaceSpecifier\":\n case \"ExportDefaultSpecifier\":\n return false;\n\n // no: export { foo as NODE };\n // yes: export { NODE as foo };\n // no: export { NODE as foo } from \"foo\";\n case \"ExportSpecifier\":\n // @ts-expect-error todo(flow->ts): Property 'source' does not exist on type 'AnyTypeAnnotation'.\n if (grandparent?.source) {\n return false;\n }\n return parent.local === node;\n\n // no: import NODE from \"foo\";\n // no: import * as NODE from \"foo\";\n // no: import { NODE as foo } from \"foo\";\n // no: import { foo as NODE } from \"foo\";\n // no: import NODE from \"bar\";\n case \"ImportDefaultSpecifier\":\n case \"ImportNamespaceSpecifier\":\n case \"ImportSpecifier\":\n return false;\n\n // no: import \"foo\" assert { NODE: \"json\" }\n case \"ImportAttribute\":\n return false;\n\n // no: <div NODE=\"foo\" />\n case \"JSXAttribute\":\n return false;\n\n // no: [NODE] = [];\n // no: ({ NODE }) = [];\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n return false;\n\n // no: new.NODE\n // no: NODE.target\n case \"MetaProperty\":\n return false;\n\n // yes: type X = { someProperty: NODE }\n // no: type X = { NODE: OtherType }\n case \"ObjectTypeProperty\":\n return parent.key !== node;\n\n // yes: enum X { Foo = NODE }\n // no: enum X { NODE }\n case \"TSEnumMember\":\n return parent.id !== node;\n\n // yes: { [NODE]: value }\n // no: { NODE: value }\n case \"TSPropertySignature\":\n if (parent.key === node) {\n return !!parent.computed;\n }\n\n return true;\n }\n\n return true;\n}\n","import {\n isFunction,\n isCatchClause,\n isBlockStatement,\n isScopable,\n isPattern,\n} from \"./generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Check if the input `node` is a scope.\n */\nexport default function isScope(\n node: t.Node | null | undefined,\n parent: t.Node,\n): boolean {\n // If a BlockStatement is an immediate descendent of a Function/CatchClause, it must be in the body.\n // Hence we skipped the parentKey === \"params\" check\n if (isBlockStatement(node) && (isFunction(parent) || isCatchClause(parent))) {\n return false;\n }\n\n // If a Pattern is an immediate descendent of a Function/CatchClause, it must be in the params.\n // Hence we skipped the parentKey === \"params\" check\n if (isPattern(node) && (isFunction(parent) || isCatchClause(parent))) {\n return true;\n }\n\n return isScopable(node);\n}\n","import { isIdentifier, isImportDefaultSpecifier } from \"./generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\n/**\n * Check if the input `specifier` is a `default` import or export.\n */\nexport default function isSpecifierDefault(\n specifier: t.ModuleSpecifier,\n): boolean {\n return (\n isImportDefaultSpecifier(specifier) ||\n // @ts-expect-error todo(flow->ts): stricter type for specifier\n isIdentifier(specifier.imported || specifier.exported, {\n name: \"default\",\n })\n );\n}\n","import isValidIdentifier from \"./isValidIdentifier.ts\";\n\nconst RESERVED_WORDS_ES3_ONLY = new Set<string>([\n \"abstract\",\n \"boolean\",\n \"byte\",\n \"char\",\n \"double\",\n \"enum\",\n \"final\",\n \"float\",\n \"goto\",\n \"implements\",\n \"int\",\n \"interface\",\n \"long\",\n \"native\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"short\",\n \"static\",\n \"synchronized\",\n \"throws\",\n \"transient\",\n \"volatile\",\n]);\n\n/**\n * Check if the input `name` is a valid identifier name according to the ES3 specification.\n *\n * Additional ES3 reserved words are\n */\nexport default function isValidES3Identifier(name: string): boolean {\n return isValidIdentifier(name) && !RESERVED_WORDS_ES3_ONLY.has(name);\n}\n","import { isVariableDeclaration } from \"./generated/index.ts\";\nimport type * as t from \"../index.ts\";\n\nif (!process.env.BABEL_8_BREAKING) {\n // eslint-disable-next-line no-var\n var BLOCK_SCOPED_SYMBOL = Symbol.for(\"var used to be block scoped\");\n}\n\n/**\n * Check if the input `node` is a variable declaration.\n */\nexport default function isVar(node: t.Node | null | undefined): boolean {\n if (process.env.BABEL_8_BREAKING) {\n return isVariableDeclaration(node) && node.kind === \"var\";\n } else {\n return (\n isVariableDeclaration(node, { kind: \"var\" }) &&\n !(\n // @ts-expect-error document private properties\n node[BLOCK_SCOPED_SYMBOL]\n )\n );\n }\n}\n","// TODO(Babel 8) Remove this file\nif (process.env.BABEL_8_BREAKING && process.env.IS_PUBLISH) {\n throw new Error(\n \"Internal Babel error: This file should only be loaded in Babel 7\",\n );\n}\n\nimport getBindingIdentifiers from \"../retrievers/getBindingIdentifiers.ts\";\nimport {\n isExpression,\n isExpressionStatement,\n isVariableDeclaration,\n isIfStatement,\n isBlockStatement,\n isEmptyStatement,\n} from \"../validators/generated/index.ts\";\nimport {\n sequenceExpression,\n assignmentExpression,\n conditionalExpression,\n} from \"../builders/generated/index.ts\";\nimport { buildUndefinedNode } from \"../builders/productions.ts\";\nimport cloneNode from \"../clone/cloneNode.ts\";\nimport type * as t from \"../index.ts\";\n\nexport type DeclarationInfo = {\n kind: t.VariableDeclaration[\"kind\"];\n id: t.Identifier;\n};\n\nexport default function gatherSequenceExpressions(\n nodes: readonly t.Node[],\n declars: DeclarationInfo[],\n) {\n const exprs: t.Expression[] = [];\n let ensureLastUndefined = true;\n\n for (const node of nodes) {\n // if we encounter emptyStatement before a non-emptyStatement\n // we want to disregard that\n if (!isEmptyStatement(node)) {\n ensureLastUndefined = false;\n }\n\n if (isExpression(node)) {\n exprs.push(node);\n } else if (isExpressionStatement(node)) {\n exprs.push(node.expression);\n } else if (isVariableDeclaration(node)) {\n if (node.kind !== \"var\") return; // bailed\n\n for (const declar of node.declarations) {\n const bindings = getBindingIdentifiers(declar);\n for (const key of Object.keys(bindings)) {\n declars.push({\n kind: node.kind,\n id: cloneNode(bindings[key]),\n });\n }\n\n if (declar.init) {\n exprs.push(\n assignmentExpression(\n \"=\",\n // var declarator must not be a void pattern\n declar.id as Exclude<t.VariableDeclarator[\"id\"], t.VoidPattern>,\n declar.init,\n ),\n );\n }\n }\n\n ensureLastUndefined = true;\n } else if (isIfStatement(node)) {\n const consequent = node.consequent\n ? gatherSequenceExpressions([node.consequent], declars)\n : buildUndefinedNode();\n const alternate = node.alternate\n ? gatherSequenceExpressions([node.alternate], declars)\n : buildUndefinedNode();\n if (!consequent || !alternate) return; // bailed\n\n exprs.push(conditionalExpression(node.test, consequent, alternate));\n } else if (isBlockStatement(node)) {\n const body = gatherSequenceExpressions(node.body, declars);\n if (!body) return; // bailed\n\n exprs.push(body);\n } else if (isEmptyStatement(node)) {\n // empty statement so ensure the last item is undefined if we're last\n // checks if emptyStatement is first\n if (nodes.indexOf(node) === 0) {\n ensureLastUndefined = true;\n }\n } else {\n // bailed, we can't turn this statement into an expression\n return;\n }\n }\n\n if (ensureLastUndefined) {\n exprs.push(buildUndefinedNode());\n }\n\n if (exprs.length === 1) {\n return exprs[0];\n } else {\n return sequenceExpression(exprs);\n }\n}\n","// TODO(Babel 8) Remove this file\nif (process.env.BABEL_8_BREAKING && process.env.IS_PUBLISH) {\n throw new Error(\n \"Internal Babel error: This file should only be loaded in Babel 7\",\n );\n}\n\nimport gatherSequenceExpressions from \"./gatherSequenceExpressions.ts\";\nimport type * as t from \"../index.ts\";\nimport type { DeclarationInfo } from \"./gatherSequenceExpressions.ts\";\n\n/**\n * Turn an array of statement `nodes` into a `SequenceExpression`.\n *\n * Variable declarations are turned into simple assignments and their\n * declarations hoisted to the top of the current scope.\n *\n * Expression statements are just resolved to their expression.\n */\nexport default function toSequenceExpression(\n nodes: readonly t.Node[],\n scope: any,\n): t.SequenceExpression | undefined {\n if (!nodes?.length) return;\n\n const declars: DeclarationInfo[] = [];\n const result = gatherSequenceExpressions(nodes, declars);\n if (!result) return;\n\n for (const declar of declars) {\n scope.push(declar);\n }\n\n // @ts-expect-error fixme: gatherSequenceExpressions will return an Expression when there are only one element\n return result;\n}\n","import isReactComponent from \"./validators/react/isReactComponent.ts\";\nimport isCompatTag from \"./validators/react/isCompatTag.ts\";\nimport buildChildren from \"./builders/react/buildChildren.ts\";\n\n// asserts\nexport { default as assertNode } from \"./asserts/assertNode.ts\";\nexport * from \"./asserts/generated/index.ts\";\n\n// builders\nexport { default as createTypeAnnotationBasedOnTypeof } from \"./builders/flow/createTypeAnnotationBasedOnTypeof.ts\";\n/** @deprecated use createFlowUnionType instead */\nexport { default as createUnionTypeAnnotation } from \"./builders/flow/createFlowUnionType.ts\";\nexport { default as createFlowUnionType } from \"./builders/flow/createFlowUnionType.ts\";\nexport { default as createTSUnionType } from \"./builders/typescript/createTSUnionType.ts\";\nexport * from \"./builders/productions.ts\";\nexport * from \"./builders/generated/index.ts\"; // includes AST types\n\n// clone\nexport { default as cloneNode } from \"./clone/cloneNode.ts\";\nexport { default as clone } from \"./clone/clone.ts\";\nexport { default as cloneDeep } from \"./clone/cloneDeep.ts\";\nexport { default as cloneDeepWithoutLoc } from \"./clone/cloneDeepWithoutLoc.ts\";\nexport { default as cloneWithoutLoc } from \"./clone/cloneWithoutLoc.ts\";\n\n// comments\nexport { default as addComment } from \"./comments/addComment.ts\";\nexport { default as addComments } from \"./comments/addComments.ts\";\nexport { default as inheritInnerComments } from \"./comments/inheritInnerComments.ts\";\nexport { default as inheritLeadingComments } from \"./comments/inheritLeadingComments.ts\";\nexport { default as inheritsComments } from \"./comments/inheritsComments.ts\";\nexport { default as inheritTrailingComments } from \"./comments/inheritTrailingComments.ts\";\nexport { default as removeComments } from \"./comments/removeComments.ts\";\n\n// constants\nexport * from \"./constants/generated/index.ts\";\nexport * from \"./constants/index.ts\";\n\n// converters\nexport { default as ensureBlock } from \"./converters/ensureBlock.ts\";\nexport { default as toBindingIdentifierName } from \"./converters/toBindingIdentifierName.ts\";\nexport { default as toBlock } from \"./converters/toBlock.ts\";\nexport { default as toComputedKey } from \"./converters/toComputedKey.ts\";\nexport { default as toExpression } from \"./converters/toExpression.ts\";\nexport { default as toIdentifier } from \"./converters/toIdentifier.ts\";\nexport { default as toKeyAlias } from \"./converters/toKeyAlias.ts\";\nexport { default as toStatement } from \"./converters/toStatement.ts\";\nexport { default as valueToNode } from \"./converters/valueToNode.ts\";\n\n// definitions\nexport * from \"./definitions/index.ts\";\n\n// modifications\nexport { default as appendToMemberExpression } from \"./modifications/appendToMemberExpression.ts\";\nexport { default as inherits } from \"./modifications/inherits.ts\";\nexport { default as prependToMemberExpression } from \"./modifications/prependToMemberExpression.ts\";\nexport {\n default as removeProperties,\n type Options as RemovePropertiesOptions,\n} from \"./modifications/removeProperties.ts\";\nexport { default as removePropertiesDeep } from \"./modifications/removePropertiesDeep.ts\";\nexport { default as removeTypeDuplicates } from \"./modifications/flow/removeTypeDuplicates.ts\";\n\n// retrievers\nexport { default as getAssignmentIdentifiers } from \"./retrievers/getAssignmentIdentifiers.ts\";\nexport { default as getBindingIdentifiers } from \"./retrievers/getBindingIdentifiers.ts\";\nexport { default as getOuterBindingIdentifiers } from \"./retrievers/getOuterBindingIdentifiers.ts\";\nexport { default as getFunctionName } from \"./retrievers/getFunctionName.ts\";\n\n// traverse\nexport { default as traverse } from \"./traverse/traverse.ts\";\nexport * from \"./traverse/traverse.ts\";\nexport { default as traverseFast } from \"./traverse/traverseFast.ts\";\n\n// utils\nexport { default as shallowEqual } from \"./utils/shallowEqual.ts\";\n\n// validators\nexport { default as is } from \"./validators/is.ts\";\nexport { default as isBinding } from \"./validators/isBinding.ts\";\nexport { default as isBlockScoped } from \"./validators/isBlockScoped.ts\";\nexport { default as isImmutable } from \"./validators/isImmutable.ts\";\nexport { default as isLet } from \"./validators/isLet.ts\";\nexport { default as isNode } from \"./validators/isNode.ts\";\nexport { default as isNodesEquivalent } from \"./validators/isNodesEquivalent.ts\";\nexport { default as isPlaceholderType } from \"./validators/isPlaceholderType.ts\";\nexport { default as isReferenced } from \"./validators/isReferenced.ts\";\nexport { default as isScope } from \"./validators/isScope.ts\";\nexport { default as isSpecifierDefault } from \"./validators/isSpecifierDefault.ts\";\nexport { default as isType } from \"./validators/isType.ts\";\nexport { default as isValidES3Identifier } from \"./validators/isValidES3Identifier.ts\";\nexport { default as isValidIdentifier } from \"./validators/isValidIdentifier.ts\";\nexport { default as isVar } from \"./validators/isVar.ts\";\nexport { default as matchesPattern } from \"./validators/matchesPattern.ts\";\nexport { default as validate } from \"./validators/validate.ts\";\nexport { default as buildMatchMemberExpression } from \"./validators/buildMatchMemberExpression.ts\";\nexport * from \"./validators/generated/index.ts\";\n\n// react\nexport const react = {\n isReactComponent,\n isCompatTag,\n buildChildren,\n};\n\n// this is used by @babel/traverse to warn about deprecated visitors\nexport { default as __internal__deprecationWarning } from \"./utils/deprecationWarning.ts\";\n\nimport toSequenceExpression from \"./converters/toSequenceExpression.ts\" with { if: \"!process.env.BABEL_8_BREAKING && !USE_ESM && !IS_STANDALONE\" };\nif (!process.env.BABEL_8_BREAKING && !USE_ESM && !IS_STANDALONE) {\n // eslint-disable-next-line no-restricted-globals\n exports.toSequenceExpression = toSequenceExpression;\n}\n\nif (!process.env.BABEL_8_BREAKING && process.env.BABEL_TYPES_8_BREAKING) {\n console.warn(\n \"BABEL_TYPES_8_BREAKING is not supported anymore. Use the latest Babel 8.0.0 pre-release instead!\",\n );\n}\n","import { randomUUID } from 'crypto';\nimport type {\n GenerateSbomInput,\n GenerateSbomResult,\n} from './core/types.js';\nimport {\n DEFAULT_PROJECT_VERSION,\n VERIMU_TOOL_DESCRIPTION,\n VERIMU_TOOL_NAME,\n VERIMU_TOOL_WEBSITE,\n buildPurl,\n normalizeDependencies,\n} from './sbom/shared.js';\n\n/**\n * Generates an NTIA-compliant CycloneDX 1.7 SBOM from structured dependency data.\n *\n * This is a **pure function** — no filesystem access, no network calls, no side effects.\n * It takes a project name, version, and list of dependencies, and returns a complete\n * CycloneDX 1.7 JSON SBOM that passes NTIA minimum-element validation.\n *\n * @example\n * ```ts\n * import { generateSbom } from 'verimu';\n *\n * const result = generateSbom({\n * projectName: 'my-app',\n * projectVersion: '1.0.0',\n * dependencies: [\n * { name: 'express', version: '4.18.2', ecosystem: 'npm' },\n * { name: '@types/node', version: '20.11.5', ecosystem: 'npm', direct: false },\n * ],\n * });\n *\n * console.log(result.componentCount); // 2\n * console.log(result.content); // formatted JSON string\n * ```\n */\nexport function generateSbom(input: GenerateSbomInput): GenerateSbomResult {\n const {\n projectName,\n projectVersion = DEFAULT_PROJECT_VERSION,\n dependencies,\n } = input;\n\n const timestamp = new Date().toISOString();\n const resolvedDeps = normalizeDependencies(dependencies);\n\n const rootPurl = buildPurl(projectName, projectVersion, 'npm');\n\n const sbom = {\n $schema: 'http://cyclonedx.org/schema/bom-1.7.schema.json',\n bomFormat: 'CycloneDX',\n specVersion: '1.7',\n serialNumber: `urn:uuid:${randomUUID()}`,\n version: 1,\n metadata: {\n timestamp,\n tools: {\n components: [\n {\n type: 'application',\n name: VERIMU_TOOL_NAME,\n version: '0.0.1',\n description: VERIMU_TOOL_DESCRIPTION,\n supplier: { name: 'Verimu' },\n externalReferences: [\n { type: 'website', url: VERIMU_TOOL_WEBSITE },\n ],\n },\n ],\n },\n supplier: { name: projectName },\n component: {\n type: 'application',\n name: projectName,\n version: projectVersion,\n 'bom-ref': rootPurl,\n supplier: { name: projectName },\n },\n },\n components: resolvedDeps.map((dep) => ({\n type: 'library',\n name: dep.name,\n version: dep.version,\n purl: dep.purl,\n 'bom-ref': dep.purl,\n scope: dep.direct ? 'required' : 'optional',\n supplier: { name: dep.supplierName },\n })),\n dependencies: [\n {\n ref: rootPurl,\n dependsOn: resolvedDeps.map((d) => d.purl),\n },\n ],\n };\n\n const content = JSON.stringify(sbom, null, 2);\n\n return {\n sbom,\n content,\n componentCount: resolvedDeps.length,\n specVersion: '1.7',\n generatedAt: timestamp,\n };\n}\n","import type { Ecosystem } from '../core/types.js';\n\nexport const VERIMU_TOOL_NAME = 'verimu';\nexport const VERIMU_TOOL_WEBSITE = 'https://verimu.com';\nexport const VERIMU_TOOL_DESCRIPTION = 'Verimu CRA Compliance Scanner';\nexport const DEFAULT_TOOL_VERSION = '0.1.0';\nexport const DEFAULT_PROJECT_VERSION = '0.0.0';\nexport const DEFAULT_SWID_VERSION = '0.0.0';\n\ntype DependencyLike = {\n name: string;\n version: string;\n ecosystem: Ecosystem;\n direct?: boolean;\n purl?: string;\n};\n\nexport interface NormalizedDependency {\n name: string;\n version: string;\n ecosystem: Ecosystem;\n direct: boolean;\n purl: string;\n supplierName: string;\n}\n\nconst PURL_TYPE_MAP: Record<Ecosystem, string> = {\n npm: 'npm',\n nuget: 'nuget',\n cargo: 'cargo',\n maven: 'maven',\n pip: 'pypi',\n poetry: 'pypi',\n uv: 'pypi',\n go: 'golang',\n ruby: 'gem',\n composer: 'composer',\n deno: 'deno',\n};\n\n/**\n * Builds a Package URL (purl) per the purl spec.\n *\n * For npm scoped packages, the @ prefix is percent-encoded as %40:\n * @types/node@20.11.5 → pkg:npm/%40types/node@20.11.5\n */\nexport function buildPurl(name: string, version: string, ecosystem: Ecosystem): string {\n const type = PURL_TYPE_MAP[ecosystem] || ecosystem;\n\n if (ecosystem === 'npm' && name.startsWith('@')) {\n return `pkg:${type}/%40${name.slice(1)}@${version}`;\n }\n\n return `pkg:${type}/${name}@${version}`;\n}\n\n/**\n * Derives supplier name from a package name.\n * Scoped packages: \"@vue/reactivity\" → \"@vue\"\n * Unscoped packages: \"express\" → \"express\"\n */\nexport function deriveSupplierName(packageName: string): string {\n if (packageName.startsWith('@')) {\n return packageName.split('/')[0];\n }\n return packageName;\n}\n\n/** Extracts project name from a file system path */\nexport function extractProjectName(projectPath: string): string {\n const parts = projectPath.replace(/\\\\/g, '/').split('/');\n return parts[parts.length - 1] || 'unknown-project';\n}\n\n/** Normalizes dependencies so all generators work from the same shape */\nexport function normalizeDependencies(dependencies: DependencyLike[]): NormalizedDependency[] {\n return dependencies.map((dep) => ({\n name: dep.name,\n version: dep.version,\n ecosystem: dep.ecosystem,\n direct: dep.direct ?? true,\n purl: dep.purl ?? buildPurl(dep.name, dep.version, dep.ecosystem),\n supplierName: deriveSupplierName(dep.name),\n }));\n}\n\n","import { randomUUID } from 'crypto';\nimport type {\n GenerateSbomInput,\n GenerateSpdxSbomResult,\n} from './core/types.js';\nimport {\n DEFAULT_PROJECT_VERSION,\n VERIMU_TOOL_NAME,\n normalizeDependencies,\n} from './sbom/shared.js';\n\nconst SPDX_VERSION = '2.3';\n\n/**\n * Generates an SPDX 2.3 JSON document from structured dependency data.\n *\n * This is a pure function with no filesystem or network access.\n */\nexport function generateSpdxSbom(input: GenerateSbomInput): GenerateSpdxSbomResult {\n const {\n projectName,\n projectVersion = DEFAULT_PROJECT_VERSION,\n dependencies,\n } = input;\n\n const timestamp = new Date().toISOString();\n const resolvedDeps = normalizeDependencies(dependencies);\n const rootPackageId = 'SPDXRef-Package-root';\n\n const spdx = {\n spdxVersion: `SPDX-${SPDX_VERSION}`,\n dataLicense: 'CC0-1.0',\n SPDXID: 'SPDXRef-DOCUMENT',\n name: `${projectName}-sbom`,\n documentNamespace: `https://verimu.com/spdxdocs/${projectName}-${randomUUID()}`,\n creationInfo: {\n created: timestamp,\n creators: [`Tool: ${VERIMU_TOOL_NAME}`],\n },\n documentDescribes: [rootPackageId],\n packages: [\n {\n name: projectName,\n SPDXID: rootPackageId,\n versionInfo: projectVersion,\n supplier: `Organization: ${projectName}`,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n licenseConcluded: 'NOASSERTION',\n licenseDeclared: 'NOASSERTION',\n primaryPackagePurpose: 'APPLICATION',\n },\n ...resolvedDeps.map((dep, index) => ({\n name: dep.name,\n SPDXID: `SPDXRef-Package-${index + 1}`,\n versionInfo: dep.version,\n supplier: `Organization: ${dep.supplierName}`,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n licenseConcluded: 'NOASSERTION',\n licenseDeclared: 'NOASSERTION',\n primaryPackagePurpose: 'LIBRARY',\n externalRefs: [\n {\n referenceCategory: 'PACKAGE-MANAGER',\n referenceType: 'purl',\n referenceLocator: dep.purl,\n },\n ],\n })),\n ],\n relationships: [\n {\n spdxElementId: 'SPDXRef-DOCUMENT',\n relationshipType: 'DESCRIBES',\n relatedSpdxElement: rootPackageId,\n },\n ...resolvedDeps.map((_dep, index) => ({\n spdxElementId: rootPackageId,\n relationshipType: 'DEPENDS_ON',\n relatedSpdxElement: `SPDXRef-Package-${index + 1}`,\n })),\n ],\n };\n\n const content = JSON.stringify(spdx, null, 2);\n\n return {\n sbom: spdx,\n content,\n componentCount: resolvedDeps.length,\n specVersion: SPDX_VERSION,\n generatedAt: timestamp,\n };\n}\n\n","import { randomUUID } from 'crypto';\nimport type {\n GenerateSbomInput,\n GenerateSwidTagResult,\n} from './core/types.js';\nimport {\n DEFAULT_PROJECT_VERSION,\n DEFAULT_SWID_VERSION,\n VERIMU_TOOL_NAME,\n} from './sbom/shared.js';\n\nconst SWID_SPEC_VERSION = 'ISO/IEC 19770-2:2015';\n\n/**\n * Generates a minimal SWID XML tag for the root software product.\n *\n * This is intentionally minimal for v1. The current tag describes the root\n * product identity and generator metadata only.\n */\nexport function generateSwidTag(input: GenerateSbomInput): GenerateSwidTagResult {\n const {\n projectName,\n projectVersion = DEFAULT_PROJECT_VERSION,\n } = input;\n\n const timestamp = new Date().toISOString();\n const tagVersion = 1;\n const normalizedVersion = projectVersion || DEFAULT_SWID_VERSION;\n const tagId = `com.verimu:${sanitizeTagId(projectName)}:${normalizedVersion}:${randomUUID()}`;\n\n const tag = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<SoftwareIdentity',\n ' xmlns=\"http://standards.iso.org/iso/19770/-2/2015/schema.xsd\"',\n ` name=\"${escapeXml(projectName)}\"`,\n ` tagId=\"${escapeXml(tagId)}\"`,\n ` tagVersion=\"${tagVersion}\"`,\n ` version=\"${escapeXml(normalizedVersion)}\"`,\n ' versionScheme=\"semver\">',\n ` <Entity name=\"${escapeXml(projectName)}\" role=\"softwareCreator\" />`,\n ' <Entity name=\"Verimu\" role=\"tagCreator\" />',\n ` <Meta product=\"${escapeXml(projectName)}\" generator=\"${VERIMU_TOOL_NAME}\" generated=\"${timestamp}\" />`,\n ' <!-- TODO: Consider adding dependency/package evidence if we need richer SWID coverage. -->',\n ' <Link rel=\"describedby\" href=\"https://verimu.com\" />',\n '</SoftwareIdentity>',\n ].join('\\n');\n\n return {\n tag,\n content: tag,\n componentCount: 1,\n specVersion: SWID_SPEC_VERSION,\n generatedAt: timestamp,\n };\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&apos;');\n}\n\nfunction sanitizeTagId(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n","import { writeFile } from 'fs/promises';\nimport { basename, join, parse } from 'path';\nimport { ScannerRegistry } from './scanners/registry.js';\nimport { generateSbomArtifacts } from './sbom/artifacts.js';\nimport { CveAggregator } from './cve/aggregator.js';\nimport { ConsoleReporter } from './reporters/console.js';\nimport { VerimuApiClient } from './api/client.js';\nimport { UsageContextEngine } from './context/usage-context-engine.js';\nimport { normalizeNumContextLines } from './context/snippet-extractor.js';\nimport type { ScanResponse } from './api/client.js';\nimport type { UsageContextResult, VerimuConfig, VerimuReport, Severity } from './core/types.js';\n\n/** Result of uploading scan results to the Verimu platform */\nexport interface UploadResult {\n projectId: string;\n projectCreated: boolean;\n totalDependencies: number;\n vulnerableDependencies: number;\n dashboardUrl: string;\n scanResponse: ScanResponse;\n}\n\n/**\n * Main scan pipeline — orchestrates the full Verimu workflow:\n * 1. Detect ecosystem & parse lockfile\n * 2. Generate software inventory artifacts (CycloneDX + SPDX + SWID)\n * 3. Check dependencies for CVEs (via OSV)\n * 4. Produce report\n * 5. Upload to Verimu platform (if API key provided)\n */\nexport async function scan(config: VerimuConfig): Promise<VerimuReport> {\n const {\n projectPath,\n sbomOutput = './sbom.cdx.json',\n skipCveCheck = false,\n cyclonedxVersion = '1.7',\n } = config;\n\n // 1. Scan dependencies\n const registry = new ScannerRegistry();\n const scanResult = await registry.detectAndScan(projectPath);\n\n // 2. Generate all supported artifacts\n const artifacts = generateSbomArtifacts(scanResult, undefined, cyclonedxVersion);\n const sbom = artifacts.cyclonedx;\n\n // 3. Write artifacts to disk\n const outputPaths = deriveArtifactOutputPaths(sbomOutput);\n await Promise.all([\n writeFile(outputPaths.cyclonedx, artifacts.cyclonedx.content, 'utf-8'),\n writeFile(outputPaths.spdx, artifacts.spdx.content, 'utf-8'),\n writeFile(outputPaths.swid, artifacts.swid.content, 'utf-8'),\n ]);\n\n // 4. Check CVEs (unless skipped)\n let cveCheck;\n if (skipCveCheck) {\n cveCheck = {\n vulnerabilities: [],\n sourcesQueried: [],\n sourceErrors: [],\n checkDurationMs: 0,\n };\n } else {\n const aggregator = new CveAggregator();\n cveCheck = await aggregator.check(scanResult.dependencies);\n }\n\n // 4.5. Analyze vulnerable package usage context (only when CVEs are present)\n let usageContext: VerimuReport['usageContext'];\n if (cveCheck.vulnerabilities.length > 0) {\n const engine = new UsageContextEngine();\n\n try {\n usageContext = await engine.analyze({\n projectPath,\n dependencies: scanResult.dependencies,\n vulnerabilities: cveCheck.vulnerabilities,\n numContextLines: config.numContextLines,\n });\n } catch (err: unknown) {\n usageContext = {\n triggered: true,\n durationMs: 0,\n numContextLines: normalizeNumContextLines(config.numContextLines),\n maxSnippetsPerPackage: 20,\n maxSnippetsTotal: 500,\n totalSnippets: 0,\n packageFindings: [],\n ecosystemStatus: [],\n errors: [{\n analyzer: 'usage-context-engine',\n error: err instanceof Error ? err.message : String(err),\n }],\n llmPayload: [],\n };\n }\n\n usageContext.artifactPath = outputPaths.usageContext;\n await writeFile(outputPaths.usageContext, JSON.stringify(usageContext, null, 2), 'utf-8');\n }\n\n // 5. Build report\n const summary = {\n totalDependencies: scanResult.dependencies.length,\n totalVulnerabilities: cveCheck.vulnerabilities.length,\n critical: cveCheck.vulnerabilities.filter((v) => v.severity === 'CRITICAL').length,\n high: cveCheck.vulnerabilities.filter((v) => v.severity === 'HIGH').length,\n medium: cveCheck.vulnerabilities.filter((v) => v.severity === 'MEDIUM').length,\n low: cveCheck.vulnerabilities.filter((v) => v.severity === 'LOW').length,\n exploitedInWild: cveCheck.vulnerabilities.filter((v) => v.exploitedInWild).length,\n };\n\n const report: VerimuReport = {\n project: {\n path: projectPath,\n ecosystem: scanResult.ecosystem,\n dependencyCount: scanResult.dependencies.length,\n },\n sbom,\n artifacts,\n cveCheck,\n usageContext,\n summary,\n generatedAt: new Date().toISOString(),\n };\n\n // 6. Upload to Verimu platform (if API key provided)\n if (config.apiKey) {\n try {\n const uploadResult = await uploadToVerimu(report, config);\n (report as VerimuReport & { upload?: UploadResult }).upload = uploadResult;\n } catch {\n // Upload failure should not break the scan — log but continue\n // The CLI will handle displaying the error\n }\n }\n\n return report;\n}\n\n/**\n * Uploads scan results to the Verimu platform.\n *\n * 1. Upserts the project (create-if-not-exists by name)\n * 2. POSTs the artifact bundle for dependency tracking + CVE scanning\n */\nexport async function uploadToVerimu(\n report: VerimuReport,\n config: VerimuConfig\n): Promise<UploadResult> {\n if (!config.apiKey) {\n throw new Error('API key required for upload');\n }\n\n const client = new VerimuApiClient(config.apiKey, config.apiBaseUrl);\n\n // Derive project name from the directory\n const projectName = basename(config.projectPath);\n\n // 1. Upsert project\n const upsertRes = await client.upsertProject({\n name: projectName,\n ecosystem: report.project.ecosystem,\n });\n\n const projectId = upsertRes.project.id;\n\n // 2. Upload software inventory artifacts\n const scanRes = await client.uploadSbom(projectId, buildUploadPayload(report));\n\n return {\n projectId,\n projectCreated: upsertRes.created,\n totalDependencies: scanRes.summary.total_dependencies,\n vulnerableDependencies: scanRes.summary.vulnerable_dependencies,\n dashboardUrl: `https://app.verimu.com/dashboard/projects/${projectId}`,\n scanResponse: scanRes,\n };\n}\n\n/**\n * Determines if the scan should fail CI based on severity threshold.\n */\nexport function shouldFailCi(report: VerimuReport, threshold: Severity): boolean {\n const severityOrder: Record<Severity, number> = {\n CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3, UNKNOWN: 4,\n };\n const thresholdLevel = severityOrder[threshold] ?? 4;\n\n return report.cveCheck.vulnerabilities.some(\n (v) => severityOrder[v.severity] <= thresholdLevel\n );\n}\n\n/**\n * Prints a console report to stdout.\n */\nexport function printReport(report: VerimuReport): void {\n const reporter = new ConsoleReporter();\n console.log(reporter.report(report));\n}\n\nfunction deriveArtifactOutputPaths(cycloneDxOutput: string): {\n cyclonedx: string;\n spdx: string;\n swid: string;\n usageContext: string;\n} {\n const parsed = parse(cycloneDxOutput);\n let baseName = parsed.name;\n\n if (parsed.ext === '.json' && baseName.endsWith('.cdx')) {\n baseName = baseName.slice(0, -4);\n }\n\n return {\n cyclonedx: cycloneDxOutput,\n spdx: join(parsed.dir, `${baseName}.spdx.json`),\n swid: join(parsed.dir, `${baseName}.swid.xml`),\n usageContext: join(parsed.dir, `${baseName}.usage-context.json`),\n };\n}\n\nfunction buildUploadPayload(report: VerimuReport): string | {\n cyclonedx: Record<string, unknown>;\n spdx: Record<string, unknown>;\n swid: string;\n usage_context?: Omit<UsageContextResult, 'artifactPath'>;\n} {\n if (!report.artifacts) {\n return report.sbom.content;\n }\n\n const usageContext = sanitizeUsageContextForUpload(report.usageContext);\n\n return {\n cyclonedx: JSON.parse(report.artifacts.cyclonedx.content) as Record<string, unknown>,\n spdx: JSON.parse(report.artifacts.spdx.content) as Record<string, unknown>,\n swid: report.artifacts.swid.content,\n usage_context: usageContext,\n };\n}\n\nfunction sanitizeUsageContextForUpload(\n usageContext: VerimuReport['usageContext'],\n): Omit<UsageContextResult, 'artifactPath'> | undefined {\n if (!usageContext) {\n return undefined;\n }\n\n const { artifactPath: _artifactPath, ...rest } = usageContext;\n return rest;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * npm / Node.js dependency scanner.\n *\n * Parses package-lock.json (v2/v3 format) to extract the full\n * resolved dependency tree. Also reads package.json to determine\n * which dependencies are direct vs transitive.\n */\nexport class NpmScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'npm';\n readonly lockfileNames = ['package-lock.json'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'package-lock.json');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, packageJsonRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'package.json'), 'utf-8').catch(() => null),\n ]);\n\n let lockfile: NpmLockfile;\n try {\n lockfile = JSON.parse(lockfileRaw);\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON');\n }\n\n // Determine direct dependency names from package.json\n const directNames = new Set<string>();\n if (packageJsonRaw) {\n try {\n const pkg = JSON.parse(packageJsonRaw);\n for (const name of Object.keys(pkg.dependencies ?? {})) {\n directNames.add(name);\n }\n for (const name of Object.keys(pkg.devDependencies ?? {})) {\n directNames.add(name);\n }\n } catch {\n // If package.json can't be parsed, all deps are \"unknown\" direct status\n }\n }\n\n const dependencies = this.parseLockfile(lockfile, directNames);\n\n return {\n projectPath,\n ecosystem: 'npm',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses package-lock.json and extracts dependencies.\n * Supports lockfile v2 and v3 (uses the `packages` field).\n * Falls back to `dependencies` field for lockfile v1.\n */\n private parseLockfile(lockfile: NpmLockfile, directNames: Set<string>): Dependency[] {\n const deps: Dependency[] = [];\n\n if (lockfile.packages) {\n // Lockfile v2/v3: `packages` is a flat map of \"node_modules/name\" → info\n for (const [pkgPath, pkgInfo] of Object.entries(lockfile.packages)) {\n // Skip the root package (empty string key)\n if (pkgPath === '') continue;\n\n // Extract package name from the path\n // e.g., \"node_modules/express\" → \"express\"\n // e.g., \"node_modules/@types/node\" → \"@types/node\"\n const name = this.extractPackageName(pkgPath);\n if (!name || !pkgInfo.version) continue;\n\n // Skip link: true entries (workspace references)\n if (pkgInfo.link) continue;\n\n deps.push({\n name,\n version: pkgInfo.version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, pkgInfo.version),\n });\n }\n } else if (lockfile.dependencies) {\n // Lockfile v1 fallback: `dependencies` is a nested tree\n this.parseDependenciesV1(lockfile.dependencies, directNames, deps);\n }\n\n return deps;\n }\n\n /**\n * Builds a purl (Package URL) for an npm package.\n *\n * Per the purl spec (https://github.com/package-url/purl-spec/blob/main/types-doc/npm-definition.md):\n * \"The npm scope @ sign prefix is always percent encoded.\"\n *\n * So @types/node@20.11.5 → pkg:npm/%40types/node@20.11.5\n * And express@4.18.2 → pkg:npm/express@4.18.2\n */\n private buildPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n // Scoped: encode the @ as %40 per purl spec\n return `pkg:npm/%40${name.slice(1)}@${version}`;\n }\n return `pkg:npm/${name}@${version}`;\n }\n\n /** Extracts the package name from a node_modules path */\n private extractPackageName(pkgPath: string): string | null {\n // \"node_modules/@scope/name\" → \"@scope/name\"\n // \"node_modules/name\" → \"name\"\n // \"node_modules/a/node_modules/b\" → \"b\" (nested)\n const parts = pkgPath.split('node_modules/');\n const last = parts[parts.length - 1];\n return last || null;\n }\n\n /** Recursively parses lockfile v1 `dependencies` tree */\n private parseDependenciesV1(\n depsObj: Record<string, NpmLockfileV1Dep>,\n directNames: Set<string>,\n result: Dependency[]\n ): void {\n for (const [name, info] of Object.entries(depsObj)) {\n if (info.version) {\n result.push({\n name,\n version: info.version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, info.version),\n });\n }\n // Recurse into nested dependencies\n if (info.dependencies) {\n this.parseDependenciesV1(info.dependencies, directNames, result);\n }\n }\n }\n}\n\n// ─── Types for package-lock.json parsing ─────────────────────────\n\ninterface NpmLockfile {\n name?: string;\n version?: string;\n lockfileVersion?: number;\n packages?: Record<string, NpmLockfilePackage>;\n dependencies?: Record<string, NpmLockfileV1Dep>;\n}\n\ninterface NpmLockfilePackage {\n version?: string;\n resolved?: string;\n integrity?: string;\n dev?: boolean;\n optional?: boolean;\n link?: boolean;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\ninterface NpmLockfileV1Dep {\n version?: string;\n resolved?: string;\n integrity?: string;\n requires?: Record<string, string>;\n dependencies?: Record<string, NpmLockfileV1Dep>;\n}\n","/** Base error for all Verimu errors */\nexport class VerimuError extends Error {\n constructor(message: string, public readonly code: string) {\n super(message);\n this.name = 'VerimuError';\n }\n}\n\n/** Thrown when no supported lockfile is found */\nexport class NoLockfileError extends VerimuError {\n constructor(projectPath: string) {\n super(\n `No supported lockfile found in ${projectPath}. ` +\n `Supported: package-lock.json (npm), packages.lock.json (NuGet), ` +\n `Cargo.lock (Rust), requirements.txt / Pipfile.lock (pip), poetry.lock (Poetry), uv.lock (uv), pom.xml (Maven), go.sum (Go), Gemfile.lock (Ruby), composer.lock (Composer), yarn.lock (Yarn), pnpm-lock.yaml (pnpm)`,\n 'NO_LOCKFILE'\n );\n this.name = 'NoLockfileError';\n }\n}\n\n/** Thrown when lockfile parsing fails */\nexport class LockfileParseError extends VerimuError {\n constructor(lockfilePath: string, reason: string) {\n super(`Failed to parse ${lockfilePath}: ${reason}`, 'LOCKFILE_PARSE_ERROR');\n this.name = 'LockfileParseError';\n }\n}\n\n/** Thrown when a CVE source query fails */\nexport class CveSourceError extends VerimuError {\n constructor(source: string, reason: string) {\n super(`CVE source \"${source}\" failed: ${reason}`, 'CVE_SOURCE_ERROR');\n this.name = 'CveSourceError';\n }\n}\n\n/** Thrown when API key is required but missing */\nexport class ApiKeyRequiredError extends VerimuError {\n constructor(feature: string) {\n super(\n `API key required for \"${feature}\". Get one at https://verimu.com/dashboard`,\n 'API_KEY_REQUIRED'\n );\n this.name = 'ApiKeyRequiredError';\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * C# / NuGet dependency scanner.\n *\n * Parses `packages.lock.json` (NuGet lock file, generated by\n * `dotnet restore --use-lock-file`) to extract the full resolved\n * dependency tree. The lock file itself tracks Direct vs Transitive.\n *\n * Lock file format (NuGet v1):\n * ```json\n * {\n * \"version\": 1,\n * \"dependencies\": {\n * \"net8.0\": {\n * \"PackageName\": {\n * \"type\": \"Direct\" | \"Transitive\",\n * \"resolved\": \"13.0.3\",\n * \"contentHash\": \"...\"\n * }\n * }\n * }\n * }\n * ```\n */\nexport class NugetScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'nuget';\n readonly lockfileNames = ['packages.lock.json'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'packages.lock.json');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const lockfileRaw = await readFile(lockfilePath, 'utf-8');\n\n let lockfile: NugetLockfile;\n try {\n lockfile = JSON.parse(lockfileRaw);\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON');\n }\n\n if (!lockfile.dependencies) {\n throw new LockfileParseError(lockfilePath, 'Missing \"dependencies\" field');\n }\n\n const dependencies = this.parseLockfile(lockfile);\n\n return {\n projectPath,\n ecosystem: 'nuget',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses packages.lock.json and extracts dependencies across all\n * target frameworks. Deduplicates by package name (keeps highest version\n * if the same package appears under multiple frameworks).\n */\n private parseLockfile(lockfile: NugetLockfile): Dependency[] {\n const depMap = new Map<string, Dependency>();\n\n for (const [_framework, packages] of Object.entries(lockfile.dependencies)) {\n for (const [name, info] of Object.entries(packages)) {\n if (!info.resolved) continue;\n\n // \"Direct\" in the lock file means it's a PackageReference in .csproj\n const isDirect = info.type === 'Direct';\n\n const existing = depMap.get(name);\n if (!existing) {\n depMap.set(name, {\n name,\n version: info.resolved,\n direct: isDirect,\n ecosystem: 'nuget',\n purl: this.buildPurl(name, info.resolved),\n });\n }\n // If already seen, keep the direct flag if either occurrence is direct\n else if (isDirect && !existing.direct) {\n existing.direct = true;\n }\n }\n }\n\n return Array.from(depMap.values());\n }\n\n /**\n * Builds a purl for a NuGet package.\n * NuGet purls are straightforward: pkg:nuget/Name@Version\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:nuget/${name}@${version}`;\n }\n}\n\n// ─── Types for packages.lock.json parsing ────────────────────────\n\ninterface NugetLockfile {\n version?: number;\n dependencies: Record<string, Record<string, NugetLockfileEntry>>;\n}\n\ninterface NugetLockfileEntry {\n type?: 'Direct' | 'Transitive';\n resolved?: string;\n contentHash?: string;\n dependencies?: Record<string, string>;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Rust / Cargo dependency scanner.\n *\n * Parses `Cargo.lock` (TOML format) to extract the full resolved\n * dependency tree. Reads `Cargo.toml` to determine which packages\n * are direct dependencies vs transitive.\n *\n * Cargo.lock format (v3):\n * ```toml\n * [[package]]\n * name = \"serde\"\n * version = \"1.0.195\"\n * source = \"registry+https://github.com/rust-lang/crates.io-index\"\n * checksum = \"abc123...\"\n * dependencies = [\n * \"serde_derive\",\n * ]\n * ```\n *\n * Note: We use a simple TOML parser since Cargo.lock has a very\n * regular structure (just [[package]] entries). No need for a full\n * TOML library.\n */\nexport class CargoScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'cargo';\n readonly lockfileNames = ['Cargo.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'Cargo.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, cargoTomlRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'Cargo.toml'), 'utf-8').catch(() => null),\n ]);\n\n const packages = this.parseLockfile(lockfileRaw, lockfilePath);\n const directNames = cargoTomlRaw ? this.parseCargoToml(cargoTomlRaw) : new Set<string>();\n\n // The first [[package]] is typically the root project — skip it\n const rootName = packages.length > 0 ? packages[0].name : null;\n\n const dependencies: Dependency[] = [];\n for (const pkg of packages) {\n // Skip the root project itself\n if (pkg.name === rootName && pkg.source === undefined) continue;\n\n dependencies.push({\n name: pkg.name,\n version: pkg.version,\n direct: directNames.has(pkg.name),\n ecosystem: 'cargo',\n purl: this.buildPurl(pkg.name, pkg.version),\n });\n }\n\n return {\n projectPath,\n ecosystem: 'cargo',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses Cargo.lock by splitting on [[package]] blocks.\n * This is a lightweight parser that handles the regular structure\n * of Cargo.lock without needing a full TOML parser.\n */\n private parseLockfile(content: string, lockfilePath: string): CargoPackage[] {\n const packages: CargoPackage[] = [];\n const blocks = content.split(/^\\[\\[package\\]\\]$/m);\n\n for (const block of blocks) {\n if (!block.trim()) continue;\n\n const name = this.extractField(block, 'name');\n const version = this.extractField(block, 'version');\n const source = this.extractField(block, 'source');\n\n if (name && version) {\n packages.push({ name, version, source: source || undefined });\n }\n }\n\n if (packages.length === 0 && content.includes('[[package]]')) {\n throw new LockfileParseError(lockfilePath, 'Failed to parse any packages from Cargo.lock');\n }\n\n return packages;\n }\n\n /**\n * Extracts a string field value from a TOML block.\n * Handles: `name = \"value\"` format.\n */\n private extractField(block: string, fieldName: string): string | null {\n const regex = new RegExp(`^${fieldName}\\\\s*=\\\\s*\"([^\"]*)\"`, 'm');\n const match = block.match(regex);\n return match ? match[1] : null;\n }\n\n /**\n * Parses Cargo.toml to extract direct dependency names.\n * Looks for [dependencies] and [dev-dependencies] sections.\n */\n private parseCargoToml(content: string): Set<string> {\n const directNames = new Set<string>();\n let inDepsSection = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n // Detect section headers\n if (line.startsWith('[')) {\n inDepsSection =\n line === '[dependencies]' ||\n line === '[dev-dependencies]' ||\n line === '[build-dependencies]';\n continue;\n }\n\n if (inDepsSection && line && !line.startsWith('#')) {\n // Extract package name from \"name = ...\" or \"name = { version = ... }\"\n const match = line.match(/^([a-zA-Z0-9_-]+)\\s*=/);\n if (match) {\n directNames.add(match[1]);\n }\n }\n }\n\n return directNames;\n }\n\n /**\n * Builds a purl for a Cargo (crates.io) package.\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:cargo/${name}@${version}`;\n }\n}\n\n// ─── Internal types ──────────────────────────────────────────────\n\ninterface CargoPackage {\n name: string;\n version: string;\n source?: string;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Python / pip dependency scanner.\n *\n * Supports multiple Python dependency file formats (in priority order):\n * 1. `requirements.txt` — flat list of pinned dependencies\n * 2. `Pipfile.lock` — Pipenv lock file with exact versions\n *\n * For `requirements.txt`, all listed packages are treated as direct\n * dependencies (the file doesn't distinguish direct vs transitive).\n * For `Pipfile.lock`, `default` packages are direct and `develop`\n * packages are dev dependencies.\n *\n * Limitation: `requirements.txt` doesn't capture transitive deps unless\n * generated with `pip freeze`. If using `pip freeze` output, all deps\n * are listed but we can't distinguish direct vs transitive.\n */\nexport class PipScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'pip';\n readonly lockfileNames = ['Pipfile.lock', 'requirements.txt'];\n\n async detect(projectPath: string): Promise<string | null> {\n // Check in priority order\n for (const lockfile of this.lockfileNames) {\n const fullPath = path.join(projectPath, lockfile);\n if (existsSync(fullPath)) return fullPath;\n }\n return null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const raw = await readFile(lockfilePath, 'utf-8');\n const filename = path.basename(lockfilePath);\n\n let dependencies: Dependency[];\n\n if (filename === 'Pipfile.lock') {\n dependencies = this.parsePipfileLock(raw, lockfilePath);\n } else {\n dependencies = await this.parseRequirementsTxt(raw, lockfilePath);\n }\n\n return {\n projectPath,\n ecosystem: 'pip',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses `requirements.txt` format.\n *\n * Supports:\n * - `package==1.2.3` (pinned) — REQUIRED\n * - Comments (`#`) and blank lines are skipped\n * - `-r other-file.txt` (include directive) — recursively parsed\n * - `--index-url` and other pip flags — skipped\n *\n * Throws if any dependency is not strictly pinned with ==.\n * Use `pip freeze` to generate a properly pinned requirements.txt.\n */\n private async parseRequirementsTxt(\n content: string,\n lockfilePath: string,\n visited: Set<string> = new Set()\n ): Promise<Dependency[]> {\n const deps: Dependency[] = [];\n const currentDir = path.dirname(lockfilePath);\n const normalizedPath = path.resolve(lockfilePath);\n\n // Prevent circular includes\n if (visited.has(normalizedPath)) {\n return deps;\n }\n visited.add(normalizedPath);\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n // Skip comments and blank lines\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n // Handle -r / --requirement includes\n const includeMatch = line.match(/^-r\\s+(.+)$/) || line.match(/^--requirement\\s+(.+)$/);\n if (includeMatch) {\n const includePath = path.resolve(currentDir, includeMatch[1].trim());\n if (existsSync(includePath)) {\n const includeContent = await readFile(includePath, 'utf-8');\n const includedDeps = await this.parseRequirementsTxt(includeContent, includePath, visited);\n deps.push(...includedDeps);\n }\n continue;\n }\n\n // Skip other pip flags (--index-url, -e, etc.)\n if (line.startsWith('-') || line.startsWith('--')) {\n continue;\n }\n\n // Parse strictly pinned \"package==version\" only\n const pinnedMatch = line.match(/^([a-zA-Z0-9_][a-zA-Z0-9._-]*)\\s*==\\s*([^,\\s]+)$/);\n if (pinnedMatch) {\n const [, name, version] = pinnedMatch;\n if (name && version) {\n deps.push({\n name: this.normalizePipName(name),\n version,\n direct: true, // requirements.txt doesn't distinguish\n ecosystem: 'pip',\n purl: this.buildPurl(name, version),\n });\n }\n continue;\n }\n\n // Check if it's a dependency line with non-pinned version specifier\n const depMatch = line.match(/^([a-zA-Z0-9_][a-zA-Z0-9._-]*)\\s*([~=!<>].*)$/);\n if (depMatch) {\n throw new LockfileParseError(\n lockfilePath,\n `Non-pinned dependency detected: \"${line}\". Use pip freeze or Pipfile.lock.`\n );\n }\n }\n\n return deps;\n }\n\n /**\n * Parses `Pipfile.lock` (JSON format from Pipenv).\n *\n * Structure:\n * ```json\n * {\n * \"_meta\": { ... },\n * \"default\": {\n * \"requests\": { \"version\": \"==2.31.0\", ... }\n * },\n * \"develop\": {\n * \"pytest\": { \"version\": \"==7.4.0\", ... }\n * }\n * }\n * ```\n */\n private parsePipfileLock(content: string, lockfilePath: string): Dependency[] {\n let lockfile: PipfileLock;\n try {\n lockfile = JSON.parse(content);\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON in Pipfile.lock');\n }\n\n const deps: Dependency[] = [];\n\n // Parse \"default\" (production) dependencies\n if (lockfile.default) {\n for (const [name, info] of Object.entries(lockfile.default)) {\n const version = info.version?.replace(/^==/, '') ?? '';\n if (version) {\n deps.push({\n name: this.normalizePipName(name),\n version,\n direct: true,\n ecosystem: 'pip',\n purl: this.buildPurl(name, version),\n });\n }\n }\n }\n\n // Parse \"develop\" dependencies\n if (lockfile.develop) {\n for (const [name, info] of Object.entries(lockfile.develop)) {\n const version = info.version?.replace(/^==/, '') ?? '';\n if (version) {\n deps.push({\n name: this.normalizePipName(name),\n version,\n direct: true,\n ecosystem: 'pip',\n purl: this.buildPurl(name, version),\n });\n }\n }\n }\n\n return deps;\n }\n\n /**\n * Normalizes a pip package name per PEP 503.\n * Converts to lowercase and replaces any run of [-_.] with a single hyphen.\n */\n private normalizePipName(name: string): string {\n return name.toLowerCase().replace(/[-_.]+/g, '-');\n }\n\n /**\n * Builds a purl for a PyPI package.\n * Per purl spec, the type is \"pypi\" (not \"pip\").\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:pypi/${this.normalizePipName(name)}@${version}`;\n }\n}\n\n// ─── Types for Pipfile.lock parsing ──────────────────────────────\n\ninterface PipfileLock {\n _meta?: Record<string, unknown>;\n default?: Record<string, PipfileLockEntry>;\n develop?: Record<string, PipfileLockEntry>;\n}\n\ninterface PipfileLockEntry {\n version?: string;\n hashes?: string[];\n markers?: string;\n index?: string;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { execSync } from 'child_process';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Java / Maven dependency scanner.\n *\n * Maven doesn't have a lockfile. This scanner uses two strategies:\n *\n * 1. **Primary (auto)**: If `mvn` is on `$PATH`, runs\n * `mvn dependency:list -DoutputType=text` to get the resolved\n * dependency tree including transitive dependencies.\n *\n * 2. **Fallback (pre-generated)**: Looks for a `dependency-tree.txt`\n * file in the project root. Users can generate this with:\n * ```\n * mvn dependency:list -DoutputFile=dependency-tree.txt -DoutputType=text\n * ```\n *\n * The scanner detects a Maven project by the presence of `pom.xml`.\n *\n * Maven dependency:list output format (one per line):\n * ```\n * com.google.guava:guava:jar:32.1.3-jre:compile\n * org.slf4j:slf4j-api:jar:2.0.9:compile\n * junit:junit:jar:4.13.2:test\n * ```\n * Fields: groupId:artifactId:type:version:scope\n * With classifier: groupId:artifactId:type:classifier:version:scope\n */\nexport class MavenScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'maven';\n readonly lockfileNames = ['pom.xml'];\n\n /** Allow injection for testing */\n private execSyncFn: typeof execSync;\n\n constructor(execSyncImpl?: typeof execSync) {\n this.execSyncFn = execSyncImpl ?? execSync;\n }\n\n async detect(projectPath: string): Promise<string | null> {\n const pomPath = path.join(projectPath, 'pom.xml');\n return existsSync(pomPath) ? pomPath : null;\n }\n\n async scan(projectPath: string, _lockfilePath: string): Promise<ScanResult> {\n // Read pom.xml to determine direct dependencies\n const pomPath = path.join(projectPath, 'pom.xml');\n const pomContent = await readFile(pomPath, 'utf-8').catch(() => null);\n const directDeps = pomContent ? this.parsePomDependencies(pomContent) : new Set<string>();\n\n // Strategy 1: Try pre-generated dependency-tree.txt\n const depTreePath = path.join(projectPath, 'dependency-tree.txt');\n if (existsSync(depTreePath)) {\n const content = await readFile(depTreePath, 'utf-8');\n const dependencies = this.parseDependencyList(content, directDeps);\n return this.buildResult(projectPath, depTreePath, dependencies);\n }\n\n // Strategy 2: Try running `mvn dependency:list`\n if (this.isMavenAvailable()) {\n const output = this.runMavenDependencyList(projectPath);\n const dependencies = this.parseDependencyList(output, directDeps);\n return this.buildResult(projectPath, pomPath, dependencies);\n }\n\n throw new LockfileParseError(\n pomPath,\n 'Maven project detected (pom.xml found) but could not resolve dependencies. ' +\n 'Either install Maven (`mvn` must be on $PATH) or pre-generate a dependency list:\\n' +\n ' mvn dependency:list -DoutputFile=dependency-tree.txt -DappendOutput=true'\n );\n }\n\n /**\n * Parses pom.xml to extract direct dependency coordinates (groupId:artifactId).\n * This is a simple regex-based parser that handles standard dependency declarations.\n */\n private parsePomDependencies(pomContent: string): Set<string> {\n const directDeps = new Set<string>();\n\n // Match <dependency> blocks and extract groupId + artifactId\n // This regex handles multi-line dependency declarations\n const depBlockRegex = /<dependency>\\s*([\\s\\S]*?)<\\/dependency>/g;\n const groupIdRegex = /<groupId>\\s*([^<]+)\\s*<\\/groupId>/;\n const artifactIdRegex = /<artifactId>\\s*([^<]+)\\s*<\\/artifactId>/;\n\n let match;\n while ((match = depBlockRegex.exec(pomContent)) !== null) {\n const block = match[1];\n const groupMatch = block.match(groupIdRegex);\n const artifactMatch = block.match(artifactIdRegex);\n\n if (groupMatch && artifactMatch) {\n const groupId = groupMatch[1].trim();\n const artifactId = artifactMatch[1].trim();\n directDeps.add(`${groupId}:${artifactId}`);\n }\n }\n\n return directDeps;\n }\n\n /**\n * Parses Maven `dependency:list` output.\n *\n * Each dependency line has the format:\n * groupId:artifactId:type:version:scope (5 parts)\n * groupId:artifactId:type:classifier:version:scope (6 parts)\n *\n * Lines are typically indented with leading whitespace.\n */\n private parseDependencyList(content: string, directDeps: Set<string>): Dependency[] {\n const deps: Dependency[] = [];\n const seen = new Set<string>();\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n if (!line) continue;\n\n // Split by colon - Maven coords use : as separator\n const parts = line.split(':');\n\n // Need at least 5 parts: groupId:artifactId:type:version:scope\n if (parts.length < 5) continue;\n\n const groupId = parts[0];\n const artifactId = parts[1];\n // parts[2] = type (jar, war, pom, etc.)\n\n // Handle optional classifier (6 parts) vs no classifier (5 parts)\n let version: string;\n let scope: string;\n\n if (parts.length >= 6) {\n // With classifier: groupId:artifactId:type:classifier:version:scope\n version = parts[4];\n scope = parts[5];\n } else {\n // Without classifier: groupId:artifactId:type:version:scope\n version = parts[3];\n scope = parts[4];\n }\n\n // Skip invalid entries\n if (!groupId || !artifactId || !version) continue;\n\n // Skip test-scoped dependencies\n if (scope === 'test') continue;\n\n const name = `${groupId}:${artifactId}`;\n\n // Deduplicate (same dep might appear multiple times)\n if (seen.has(name)) continue;\n seen.add(name);\n\n // Determine if direct by checking against pom.xml dependencies\n const isDirect = directDeps.has(name);\n\n deps.push({\n name,\n version,\n direct: isDirect,\n ecosystem: 'maven',\n purl: this.buildPurl(groupId, artifactId, version),\n });\n }\n\n return deps;\n }\n\n /** Checks if `mvn` is available on PATH */\n private isMavenAvailable(): boolean {\n try {\n this.execSyncFn('mvn --version', { stdio: 'pipe', timeout: 10_000 });\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Runs `mvn dependency:list` and returns the output.\n */\n private runMavenDependencyList(projectPath: string): string {\n try {\n const output = this.execSyncFn(\n 'mvn dependency:list -DoutputType=text -DincludeScope=compile',\n {\n cwd: projectPath,\n stdio: 'pipe',\n timeout: 120_000, // 2 minute timeout\n encoding: 'utf-8',\n }\n );\n return output.toString();\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n throw new LockfileParseError(\n path.join(projectPath, 'pom.xml'),\n `Failed to run 'mvn dependency:list': ${message}`\n );\n }\n }\n\n /**\n * Builds a purl for a Maven package.\n * Format: pkg:maven/groupId/artifactId@version\n */\n private buildPurl(groupId: string, artifactId: string, version: string): string {\n return `pkg:maven/${groupId}/${artifactId}@${version}`;\n }\n\n private buildResult(\n projectPath: string,\n lockfilePath: string,\n dependencies: Dependency[]\n ): ScanResult {\n return {\n projectPath,\n ecosystem: 'maven',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Go module dependency scanner.\n *\n * Parses `go.sum` to extract the full resolved dependency list, and\n * cross-references `go.mod` to distinguish direct vs indirect (transitive)\n * dependencies.\n *\n * go.sum format (one or two lines per module):\n * ```\n * github.com/gin-gonic/gin v1.9.1 h1:abc123...=\n * github.com/gin-gonic/gin v1.9.1/go.mod h1:def456...=\n * ```\n *\n * Lines ending in `/go.mod` are checksums of the module's go.mod file —\n * we skip those and only keep the `h1:` lines (source archive checksums).\n *\n * go.mod `require` block format:\n * ```\n * require (\n * github.com/gin-gonic/gin v1.9.1\n * golang.org/x/text v0.14.0 // indirect\n * )\n * ```\n *\n * Dependencies marked `// indirect` are transitive.\n */\nexport class GoScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'go';\n readonly lockfileNames = ['go.sum'];\n\n async detect(projectPath: string): Promise<string | null> {\n const goSumPath = path.join(projectPath, 'go.sum');\n return existsSync(goSumPath) ? goSumPath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [goSumRaw, goModRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'go.mod'), 'utf-8').catch(() => null),\n ]);\n\n const { directNames, indirectNames } = goModRaw\n ? this.parseGoMod(goModRaw)\n : { directNames: new Set<string>(), indirectNames: new Set<string>() };\n\n const dependencies = this.parseGoSum(goSumRaw, lockfilePath, directNames, indirectNames);\n\n return {\n projectPath,\n ecosystem: 'go',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses go.sum and extracts unique module dependencies.\n *\n * Each module may appear twice in go.sum (once for the source archive,\n * once for go.mod). We deduplicate by module path + version, keeping\n * only the `h1:` entry (not the `/go.mod` entry).\n */\n private parseGoSum(\n content: string,\n lockfilePath: string,\n directNames: Set<string>,\n indirectNames: Set<string>,\n ): Dependency[] {\n const depMap = new Map<string, Dependency>();\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n if (!line) continue;\n\n // Format: \"module version hash\"\n const parts = line.split(/\\s+/);\n if (parts.length < 3) continue;\n\n const modulePath = parts[0];\n let version = parts[1];\n\n // Skip /go.mod checksum lines\n if (version.endsWith('/go.mod')) continue;\n\n // Strip any +incompatible suffix for cleaner versions\n version = version.replace(/\\+incompatible$/, '');\n\n const key = `${modulePath}@${version}`;\n if (depMap.has(key)) continue;\n\n // Determine direct/indirect from go.mod data\n // If go.mod is available: explicit direct or not marked indirect = direct\n // If go.mod is not available: default to direct (conservative)\n const isDirect = directNames.size > 0 || indirectNames.size > 0\n ? directNames.has(modulePath) || (!indirectNames.has(modulePath) && !directNames.has(modulePath) ? false : directNames.has(modulePath))\n : true;\n\n depMap.set(key, {\n name: modulePath,\n version,\n direct: isDirect,\n ecosystem: 'go',\n purl: this.buildPurl(modulePath, version),\n });\n }\n\n return Array.from(depMap.values());\n }\n\n /**\n * Parses go.mod to extract direct and indirect dependency names.\n *\n * Handles both single-line and block `require` directives:\n * ```\n * require github.com/pkg/errors v0.9.1\n *\n * require (\n * github.com/gin-gonic/gin v1.9.1\n * golang.org/x/text v0.14.0 // indirect\n * )\n * ```\n */\n private parseGoMod(content: string): { directNames: Set<string>; indirectNames: Set<string> } {\n const directNames = new Set<string>();\n const indirectNames = new Set<string>();\n\n let inRequireBlock = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n // Single-line require: `require github.com/pkg/errors v0.9.1`\n if (line.startsWith('require ') && !line.includes('(')) {\n const match = line.match(/^require\\s+(\\S+)\\s+\\S+(.*)$/);\n if (match) {\n const modulePath = match[1];\n const rest = match[2];\n if (rest.includes('// indirect')) {\n indirectNames.add(modulePath);\n } else {\n directNames.add(modulePath);\n }\n }\n continue;\n }\n\n // Start of require block\n if (line === 'require (' || line.startsWith('require (')) {\n inRequireBlock = true;\n continue;\n }\n\n // End of require block\n if (inRequireBlock && line === ')') {\n inRequireBlock = false;\n continue;\n }\n\n // Inside require block\n if (inRequireBlock && line && !line.startsWith('//')) {\n const match = line.match(/^(\\S+)\\s+\\S+(.*)$/);\n if (match) {\n const modulePath = match[1];\n const rest = match[2];\n if (rest.includes('// indirect')) {\n indirectNames.add(modulePath);\n } else {\n directNames.add(modulePath);\n }\n }\n }\n }\n\n return { directNames, indirectNames };\n }\n\n /**\n * Builds a purl for a Go module.\n *\n * Per purl spec, the type is \"golang\" and the module path\n * uses `/` separators (no encoding needed for path segments).\n *\n * Example: `pkg:golang/github.com/gin-gonic/gin@v1.9.1`\n */\n private buildPurl(modulePath: string, version: string): string {\n return `pkg:golang/${modulePath}@${version}`;\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Ruby dependency scanner (Bundler).\n *\n * Parses `Gemfile.lock` to extract the full resolved dependency list,\n * and cross-references the `DEPENDENCIES` section to distinguish\n * direct vs transitive gems.\n *\n * Gemfile.lock format:\n * ```\n * GEM\n * remote: https://rubygems.org/\n * specs:\n * actioncable (7.1.2)\n * actionpack (= 7.1.2)\n * activesupport (= 7.1.2)\n * rack (3.0.8)\n *\n * PLATFORMS\n * ruby\n *\n * DEPENDENCIES\n * puma (>= 5.0)\n * rails (~> 7.1.2)\n *\n * BUNDLED WITH\n * 2.5.3\n * ```\n *\n * The `GEM > specs:` section lists all resolved gems with exact versions.\n * The `DEPENDENCIES` section lists direct gems (from the Gemfile).\n */\nexport class RubyScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'ruby';\n readonly lockfileNames = ['Gemfile.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'Gemfile.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const content = await readFile(lockfilePath, 'utf-8');\n\n const specs = this.parseSpecs(content, lockfilePath);\n const directNames = this.parseDependencies(content);\n\n const dependencies: Dependency[] = specs.map(({ name, version }) => ({\n name,\n version,\n direct: directNames.has(name),\n ecosystem: 'ruby' as Ecosystem,\n purl: `pkg:gem/${name}@${version}`,\n }));\n\n return {\n projectPath,\n ecosystem: 'ruby',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses the GEM > specs section to extract all resolved gems.\n *\n * Gems at the top level of the specs section (indented 4 spaces) are\n * resolved packages. Their sub-dependencies (indented 6+ spaces) are\n * constraints, not separate entries — those sub-deps appear as their\n * own top-level spec entries elsewhere.\n *\n * Format: ` gem-name (1.2.3)`\n */\n private parseSpecs(\n content: string,\n lockfilePath: string,\n ): Array<{ name: string; version: string }> {\n const gems: Array<{ name: string; version: string }> = [];\n\n let inGemSection = false;\n let inSpecs = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine;\n\n // Detect section boundaries (lines with no leading whitespace)\n if (line.length > 0 && line[0] !== ' ') {\n if (line.startsWith('GEM')) {\n inGemSection = true;\n inSpecs = false;\n continue;\n }\n // Any other top-level section ends GEM\n inGemSection = false;\n inSpecs = false;\n continue;\n }\n\n if (inGemSection && line.trimStart().startsWith('specs:')) {\n inSpecs = true;\n continue;\n }\n\n if (!inSpecs) continue;\n\n // Top-level gems are indented exactly 4 spaces: \" gem-name (1.2.3)\"\n // Sub-dependencies are indented 6+ spaces: \" dep-name (>= 1.0)\"\n // We only want the 4-space entries (actual resolved packages)\n const match = line.match(/^ {4}(\\S+)\\s+\\(([^)]+)\\)$/);\n if (match) {\n const [, name, version] = match;\n gems.push({ name, version });\n }\n }\n\n if (gems.length === 0) {\n throw new LockfileParseError(\n lockfilePath,\n 'No gems found in GEM specs section',\n );\n }\n\n return gems;\n }\n\n /**\n * Parses the DEPENDENCIES section to get direct dependency names.\n *\n * Format: ` gem-name (>= 1.0)` or ` gem-name`\n * The version constraint is optional and we only need the name.\n */\n private parseDependencies(content: string): Set<string> {\n const directNames = new Set<string>();\n let inDependencies = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine;\n\n // Section header (no leading space)\n if (line.length > 0 && line[0] !== ' ') {\n if (line.startsWith('DEPENDENCIES')) {\n inDependencies = true;\n continue;\n }\n if (inDependencies) break; // Next section → stop\n continue;\n }\n\n if (!inDependencies) continue;\n\n // Dependencies are indented 2 spaces: \" gem-name\" or \" gem-name (>= 1.0)\"\n // The ! suffix indicates a gem loaded from a specific source/path\n const match = line.match(/^ {2}(\\S+?)!?\\s*(?:\\(|$)/);\n if (match) {\n directNames.add(match[1]);\n }\n }\n\n return directNames;\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * PHP / Composer dependency scanner.\n *\n * Parses `composer.lock` for resolved packages and uses `composer.json`\n * (if present) to identify direct dependencies.\n */\nexport class ComposerScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'composer';\n readonly lockfileNames = ['composer.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'composer.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockRaw, manifestRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'composer.json'), 'utf-8').catch(() => null),\n ]);\n\n const directNames = manifestRaw ? this.parseComposerManifest(manifestRaw) : null;\n const dependencies = this.parseComposerLock(lockRaw, lockfilePath, directNames);\n\n return {\n projectPath,\n ecosystem: 'composer',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n private parseComposerLock(\n content: string,\n lockfilePath: string,\n directNames: Set<string> | null\n ): Dependency[] {\n let lock: ComposerLock;\n try {\n lock = JSON.parse(content) as ComposerLock;\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON in composer.lock');\n }\n\n const allPackages = [...(lock.packages ?? []), ...(lock['packages-dev'] ?? [])];\n if (allPackages.length === 0) {\n throw new LockfileParseError(lockfilePath, 'No packages found in composer.lock');\n }\n\n return allPackages\n .filter((pkg) => pkg.name && pkg.version)\n .map((pkg) => ({\n name: pkg.name,\n version: this.normalizeVersion(pkg.version),\n direct: directNames ? directNames.has(pkg.name) : true,\n ecosystem: 'composer' as Ecosystem,\n purl: this.buildPurl(pkg.name, this.normalizeVersion(pkg.version)),\n }));\n }\n\n private parseComposerManifest(content: string): Set<string> {\n let manifest: ComposerManifest;\n try {\n manifest = JSON.parse(content) as ComposerManifest;\n } catch {\n return new Set<string>();\n }\n\n const names = new Set<string>();\n for (const section of [manifest.require ?? {}, manifest['require-dev'] ?? {}]) {\n for (const name of Object.keys(section)) {\n // Exclude platform constraints.\n if (name === 'php' || name.startsWith('ext-') || name.startsWith('lib-')) continue;\n names.add(name);\n }\n }\n\n return names;\n }\n\n private normalizeVersion(version: string): string {\n return version.trim();\n }\n\n private buildPurl(name: string, version: string): string {\n return `pkg:composer/${name}@${version}`;\n }\n}\n\ninterface ComposerLock {\n packages?: ComposerPackage[];\n 'packages-dev'?: ComposerPackage[];\n}\n\ninterface ComposerPackage {\n name: string;\n version: string;\n}\n\ninterface ComposerManifest {\n require?: Record<string, string>;\n 'require-dev'?: Record<string, string>;\n}\n\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport { parse as parseYaml } from 'yaml';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Yarn dependency scanner.\n *\n * Supports Yarn v1 (Classic) and Yarn v2/v3/v4 (Berry) lockfile formats.\n * \n * - Yarn v1: Plain text format with indentation\n * - Yarn v2+: YAML-based format with __metadata section\n *\n * Parses yarn.lock to extract the full resolved dependency tree.\n * Also reads package.json to determine which dependencies are direct vs transitive.\n *\n * Note: Yarn uses the npm ecosystem since it's an alternative\n * package manager for the npm registry.\n */\nexport class YarnScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'npm';\n readonly lockfileNames = ['yarn.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'yarn.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, packageJsonRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'package.json'), 'utf-8').catch(() => null),\n ]);\n\n // Determine direct dependency names from package.json\n const directNames = new Set<string>();\n if (packageJsonRaw) {\n try {\n const pkg = JSON.parse(packageJsonRaw);\n for (const name of Object.keys(pkg.dependencies ?? {})) {\n directNames.add(name);\n }\n for (const name of Object.keys(pkg.devDependencies ?? {})) {\n directNames.add(name);\n }\n } catch {\n // If package.json can't be parsed, all deps are \"unknown\" direct status\n }\n }\n\n const dependencies = this.parseLockfile(lockfileRaw, lockfilePath, directNames);\n\n return {\n projectPath,\n ecosystem: 'npm',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses yarn.lock file and extracts dependencies.\n * Automatically detects and handles both v1 (Classic) and v2+ (Berry) formats.\n */\n private parseLockfile(\n content: string,\n lockfilePath: string,\n directNames: Set<string>\n ): Dependency[] {\n try {\n // Detect Yarn version by checking for v2+ indicators\n const isV2Plus = this.isYarnV2Plus(content);\n\n if (isV2Plus) {\n return this.parseLockfileV2Plus(content, lockfilePath, directNames);\n } else {\n return this.parseLockfileV1(content, lockfilePath, directNames);\n }\n } catch (err) {\n throw new LockfileParseError(\n lockfilePath,\n `Failed to parse yarn.lock: ${err instanceof Error ? err.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Detects if the lockfile is Yarn v2+ (Berry) format.\n * v2+ uses YAML format and contains __metadata section.\n */\n private isYarnV2Plus(content: string): boolean {\n return content.startsWith('__metadata:') ||\n content.includes('\\n__metadata:');\n }\n\n /**\n * Parses Yarn v2+ (Berry) lockfile format.\n * \n * Yarn v2+ format (YAML):\n * ```yaml\n * __metadata:\n * version: 6\n * \n * \"package-name@npm:^1.0.0\":\n * version: 1.2.3\n * resolution: \"package-name@npm:1.2.3\"\n * dependencies:\n * dep1: ^2.0.0\n * checksum: ...\n * languageName: node\n * linkType: hard\n * ```\n */\n private parseLockfileV2Plus(\n content: string,\n lockfilePath: string,\n directNames: Set<string>\n ): Dependency[] {\n const deps: Dependency[] = [];\n const seen = new Map<string, boolean>();\n\n try {\n const parsed = parseYaml(content);\n\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Invalid YAML format');\n }\n\n for (const [key, value] of Object.entries(parsed)) {\n // Skip metadata and workspace entries\n if (key === '__metadata' || key.includes('@workspace:')) {\n continue;\n }\n\n if (typeof value !== 'object' || value === null) {\n continue;\n }\n\n const entry = value as Record<string, any>;\n\n // Extract package name - prefer resolution field as it contains the real package\n let name: string | null = null;\n if (entry.resolution && typeof entry.resolution === 'string') {\n name = this.extractPackageNameFromResolution(entry.resolution);\n }\n // Fall back to extracting from key if resolution is not available\n if (!name) {\n name = this.extractPackageNameV2Plus(key);\n }\n\n const version = entry.version;\n\n if (!name || !version || typeof version !== 'string') {\n continue;\n }\n\n // Deduplicate by name@version\n const depKey = `${name}@${version}`;\n if (seen.has(depKey)) {\n continue;\n }\n seen.set(depKey, true);\n\n deps.push({\n name,\n version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, version),\n });\n }\n } catch (err) {\n throw new Error(`Failed to parse Yarn v2+ lockfile: ${err instanceof Error ? err.message : 'Unknown error'}`);\n }\n\n return deps;\n }\n\n /**\n * Extracts package name from Yarn v2+ resolution field.\n * The resolution field contains the real package name.\n * Examples:\n * \"express@npm:4.18.2\" → \"express\"\n * \"@types/node@npm:20.11.5\" → \"@types/node\"\n * \"lodash@npm:4.17.21\" → \"lodash\"\n */\n private extractPackageNameFromResolution(resolution: string): string | null {\n // Resolution format: \"package-name@npm:version\"\n\n // Handle scoped packages: \"@scope/name@npm:version\"\n if (resolution.startsWith('@')) {\n const match = resolution.match(/^(@[^@]+\\/[^@]+)@/);\n if (match) {\n return match[1];\n }\n }\n\n // Handle regular packages: \"package@npm:version\"\n const match = resolution.match(/^([^@]+)@/);\n if (match) {\n return match[1];\n }\n\n return null;\n }\n\n /**\n * Extracts package name from Yarn v2+ package key.\n * Examples:\n * \"express@npm:^4.18.0\" → \"express\"\n * \"@types/node@npm:^20.0.0\" → \"@types/node\"\n * \"pkg@npm:other@npm:^1.0.0\" → \"pkg\" (aliased packages)\n */\n private extractPackageNameV2Plus(key: string): string | null {\n // Remove the @npm: protocol prefix and version specifier\n // Format: \"package-name@npm:^version\" or \"@scope/name@npm:^version\"\n\n // Handle scoped packages: \"@scope/name@npm:^version\"\n if (key.startsWith('@')) {\n const match = key.match(/^(@[^@]+\\/[^@]+)@/);\n if (match) {\n return match[1];\n }\n }\n\n // Handle regular packages: \"package@npm:^version\"\n const match = key.match(/^([^@]+)@/);\n if (match) {\n return match[1];\n }\n\n return null;\n }\n\n /**\n * Parses Yarn v1 (Classic) lockfile format.\n *\n * Yarn v1 format:\n * ```\n * \"package-name@^1.0.0\":\n * version \"1.2.3\"\n * resolved \"https://...\"\n * integrity sha512-...\n * dependencies:\n * dep1 \"^2.0.0\"\n * ```\n */\n private parseLockfileV1(\n content: string,\n lockfilePath: string,\n directNames: Set<string>\n ): Dependency[] {\n const deps: Dependency[] = [];\n const seen = new Map<string, boolean>(); // Track unique name@version pairs\n\n const lines = content.split('\\n');\n let currentPackage: { names: string[]; version?: string } | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Skip comments and empty lines\n if (line.trim().startsWith('#') || line.trim() === '') {\n continue;\n }\n\n // Package declaration: \"name@version\", name@version (with or without quotes)\n // Can be multiple aliases separated by comma: \"pkg@^1.0.0\", pkg@1.2.3:\n if (line.match(/^[\"\\w@]/) && line.includes(':') && !line.startsWith(' ')) {\n // Save previous package\n if (currentPackage?.version) {\n this.addDependency(currentPackage, directNames, seen, deps);\n }\n\n // Parse package name(s)\n const pkgLine = line.substring(0, line.lastIndexOf(':'));\n const names = pkgLine\n .split(',')\n .map((s) => s.trim().replace(/^[\"']|[\"']$/g, ''))\n .map((s) => this.extractPackageName(s))\n .filter((s): s is string => !!s);\n\n currentPackage = { names, version: undefined };\n }\n // Version field\n else if (line.trim().startsWith('version ') && currentPackage) {\n const match = line.match(/version\\s+\"([^\"]+)\"/);\n if (match) {\n currentPackage.version = match[1];\n }\n }\n }\n\n // Don't forget the last package\n if (currentPackage?.version) {\n this.addDependency(currentPackage, directNames, seen, deps);\n }\n\n return deps;\n }\n\n /**\n * Adds a dependency to the result list (deduplicates by name@version)\n */\n private addDependency(\n pkg: { names: string[]; version?: string },\n directNames: Set<string>,\n seen: Map<string, boolean>,\n deps: Dependency[]\n ): void {\n if (!pkg.version) return;\n\n // Use the first name as the canonical package name\n const name = pkg.names[0];\n if (!name) return;\n\n // Deduplicate: only add once per name@version\n const key = `${name}@${pkg.version}`;\n if (seen.has(key)) return;\n seen.set(key, true);\n\n deps.push({\n name,\n version: pkg.version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, pkg.version),\n });\n }\n\n /**\n * Extracts package name from yarn.lock package declaration.\n * Examples:\n * \"express@^4.18.0\" → \"express\"\n * \"@types/node@^20.0.0\" → \"@types/node\"\n * \"pkg@npm:other@^1.0.0\" → \"pkg\" (aliased packages)\n */\n private extractPackageName(pkgDeclaration: string): string | null {\n // Handle npm: aliases (e.g., \"pkg@npm:other@^1.0.0\")\n if (pkgDeclaration.includes('@npm:')) {\n const beforeAlias = pkgDeclaration.split('@npm:')[0];\n return beforeAlias || null;\n }\n\n // Standard format: name@version\n // For scoped packages: @scope/name@version\n if (pkgDeclaration.startsWith('@')) {\n // Scoped package: @scope/name@version\n const parts = pkgDeclaration.split('@');\n // parts = ['', 'scope/name', 'version']\n if (parts.length >= 3) {\n return `@${parts[1]}`;\n }\n } else {\n // Regular package: name@version\n const atIndex = pkgDeclaration.indexOf('@');\n if (atIndex > 0) {\n return pkgDeclaration.substring(0, atIndex);\n }\n }\n\n return null;\n }\n\n /**\n * Builds a purl (Package URL) for an npm package.\n *\n * Per the purl spec:\n * \"The npm scope @ sign prefix is always percent encoded.\"\n *\n * So @types/node@20.11.5 → pkg:npm/%40types/node@20.11.5\n * And express@4.18.2 → pkg:npm/express@4.18.2\n */\n private buildPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n // Scoped: encode the @ as %40 per purl spec\n return `pkg:npm/%40${name.slice(1)}@${version}`;\n }\n return `pkg:npm/${name}@${version}`;\n }\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport { parse as parseYaml } from 'yaml';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * pnpm dependency scanner.\n *\n * Parses pnpm-lock.yaml to extract the full resolved dependency tree\n * and determine which dependencies are direct vs transitive.\n *\n * Note: pnpm uses the npm ecosystem since it's an alternative\n * package manager for the npm registry.\n */\nexport class PnpmScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'npm';\n readonly lockfileNames = ['pnpm-lock.yaml'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'pnpm-lock.yaml');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const lockfileRaw = await readFile(lockfilePath, 'utf-8');\n\n const dependencies = this.parseLockfile(lockfileRaw, lockfilePath);\n\n return {\n projectPath,\n ecosystem: 'npm',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses pnpm-lock.yaml file and extracts dependencies.\n * \n * pnpm-lock.yaml format (v5.4+):\n * ```yaml\n * lockfileVersion: 5.4\n * \n * dependencies:\n * express: 4.18.2\n * \n * devDependencies:\n * typescript: 5.0.0\n * \n * packages:\n * /express/4.18.2:\n * resolution: {integrity: sha512-...}\n * dependencies:\n * accepts: 1.3.8\n * /@types/node/20.11.5:\n * resolution: {integrity: sha512-...}\n * dev: true\n * ```\n * \n * pnpm-lock.yaml format (v6.0+):\n * ```yaml\n * lockfileVersion: '6.0'\n * \n * dependencies:\n * express:\n * specifier: ^4.18.0\n * version: 4.18.2\n * \n * packages:\n * /express@4.18.2:\n * resolution: {integrity: sha512-...}\n * ```\n */\n private parseLockfile(\n content: string,\n lockfilePath: string\n ): Dependency[] {\n try {\n const parsed = parseYaml(content);\n\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Invalid YAML format');\n }\n\n const lockfile = parsed as PnpmLockfile;\n\n // Determine lockfile version format\n const lockfileVersion = this.parseLockfileVersion(lockfile.lockfileVersion);\n\n // Extract direct dependency names from lockfile\n const directNames = this.extractDirectDependencies(lockfile);\n\n return this.extractDependencies(lockfile, lockfileVersion, directNames);\n } catch (err) {\n throw new LockfileParseError(\n lockfilePath,\n `Failed to parse pnpm-lock.yaml: ${err instanceof Error ? err.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Extracts direct dependency names from pnpm lockfile.\n * \n * Supports both formats:\n * - pnpm v5.x: root-level dependencies/devDependencies\n * - pnpm v6+: importers['.'].dependencies/devDependencies\n */\n private extractDirectDependencies(lockfile: PnpmLockfile): Set<string> {\n const directNames = new Set<string>();\n\n // Try modern format first (v6+): importers section\n if (lockfile.importers && typeof lockfile.importers === 'object') {\n const rootImporter = lockfile.importers['.'];\n if (rootImporter && typeof rootImporter === 'object') {\n // Extract from importers['.'].dependencies\n if (rootImporter.dependencies && typeof rootImporter.dependencies === 'object') {\n for (const name of Object.keys(rootImporter.dependencies)) {\n directNames.add(name);\n }\n }\n\n // Extract from importers['.'].devDependencies\n if (rootImporter.devDependencies && typeof rootImporter.devDependencies === 'object') {\n for (const name of Object.keys(rootImporter.devDependencies)) {\n directNames.add(name);\n }\n }\n }\n }\n\n // Fallback to legacy format (v5.x): root-level dependencies\n if (directNames.size === 0) {\n // Extract from root-level dependencies section\n if (lockfile.dependencies && typeof lockfile.dependencies === 'object') {\n for (const name of Object.keys(lockfile.dependencies)) {\n directNames.add(name);\n }\n }\n\n // Extract from root-level devDependencies section\n if (lockfile.devDependencies && typeof lockfile.devDependencies === 'object') {\n for (const name of Object.keys(lockfile.devDependencies)) {\n directNames.add(name);\n }\n }\n }\n\n return directNames;\n }\n\n /**\n * Parses lockfile version (can be string or number)\n */\n private parseLockfileVersion(version: string | number | undefined): number {\n if (typeof version === 'number') {\n return version;\n }\n if (typeof version === 'string') {\n const parsed = parseFloat(version);\n return isNaN(parsed) ? 5.4 : parsed;\n }\n return 5.4; // Default to 5.4 if not specified\n }\n\n /**\n * Extracts dependencies from the lockfile packages section\n */\n private extractDependencies(\n lockfile: PnpmLockfile,\n lockfileVersion: number,\n directNames: Set<string>\n ): Dependency[] {\n const deps: Dependency[] = [];\n const seen = new Map<string, boolean>();\n\n if (!lockfile.packages || typeof lockfile.packages !== 'object') {\n return deps;\n }\n\n for (const [pkgPath, pkgInfo] of Object.entries(lockfile.packages)) {\n if (!pkgInfo || typeof pkgInfo !== 'object') {\n continue;\n }\n\n // Skip workspace packages (e.g., \"/project@workspace:*\")\n if (pkgPath.includes('@workspace:')) {\n continue;\n }\n\n // Extract package name and version from path\n // v5.x format: \"/express/4.18.2\", \"/@types/node/20.11.5\"\n // v6+ format: \"/express@4.18.2\", \"/@types/node@20.11.5\"\n const { name, version } = this.parsePackagePath(pkgPath, lockfileVersion);\n\n if (!name || !version) {\n continue;\n }\n\n // Deduplicate by name@version\n const depKey = `${name}@${version}`;\n if (seen.has(depKey)) {\n continue;\n }\n seen.set(depKey, true);\n\n deps.push({\n name,\n version,\n direct: directNames.has(name),\n ecosystem: 'npm',\n purl: this.buildPurl(name, version),\n });\n }\n\n return deps;\n }\n\n /**\n * Parses package path to extract name and version.\n * \n * pnpm v5.x format:\n * \"/express/4.18.2\" → name: \"express\", version: \"4.18.2\"\n * \"/@types/node/20.11.5\" → name: \"@types/node\", version: \"20.11.5\"\n * \"/accepts/1.3.8\" → name: \"accepts\", version: \"1.3.8\"\n * \n * pnpm v6+ format:\n * \"/express@4.18.2\" → name: \"express\", version: \"4.18.2\"\n * \"/@types/node@20.11.5\" → name: \"@types/node\", version: \"20.11.5\"\n * \"/accepts@1.3.8\" → name: \"accepts\", version: \"1.3.8\"\n * \n * Also handles peer dependency suffixes:\n * \"/pkg@1.0.0_dep@2.0.0\" → name: \"pkg\", version: \"1.0.0\"\n * \"/pkg@1.0.0(dep@2.0.0)\" → name: \"pkg\", version: \"1.0.0\"\n */\n private parsePackagePath(pkgPath: string, lockfileVersion: number): { name: string | null; version: string | null } {\n // Remove leading slash\n const path = pkgPath.startsWith('/') ? pkgPath.slice(1) : pkgPath;\n\n // Remove peer dependency suffixes (anything after _ or opening parenthesis)\n const cleanPath = path.split('_')[0].split('(')[0];\n\n if (!cleanPath) {\n return { name: null, version: null };\n }\n\n // v6+ format uses @ separator between name and version\n if (lockfileVersion >= 6) {\n return this.parseV6Format(cleanPath);\n }\n\n // v5.x format uses / separator between name and version\n return this.parseV5Format(cleanPath);\n }\n\n /**\n * Parses v6+ format: \"express@4.18.2\" or \"@types/node@20.11.5\"\n */\n private parseV6Format(path: string): { name: string | null; version: string | null } {\n // Handle scoped packages: \"@scope/name@version\"\n if (path.startsWith('@')) {\n // Find the last @ which separates the version\n const lastAtIndex = path.lastIndexOf('@');\n if (lastAtIndex <= 0) {\n return { name: null, version: null };\n }\n\n const name = path.substring(0, lastAtIndex);\n const version = path.substring(lastAtIndex + 1);\n\n return { name, version };\n }\n\n // Regular packages: \"name@version\"\n const atIndex = path.indexOf('@');\n if (atIndex < 0) {\n return { name: null, version: null };\n }\n\n const name = path.substring(0, atIndex);\n const version = path.substring(atIndex + 1);\n\n return { name, version };\n }\n\n /**\n * Parses v5.x format: \"express/4.18.2\" or \"@types/node/20.11.5\"\n */\n private parseV5Format(path: string): { name: string | null; version: string | null } {\n // Handle scoped packages: \"@scope/name/version\"\n if (path.startsWith('@')) {\n const parts = path.split('/');\n // parts = ['@scope', 'name', 'version']\n if (parts.length < 3) {\n return { name: null, version: null };\n }\n\n const name = `${parts[0]}/${parts[1]}`;\n const version = parts[2];\n\n return { name, version };\n }\n\n // Regular packages: \"name/version\"\n const slashIndex = path.indexOf('/');\n if (slashIndex < 0) {\n return { name: null, version: null };\n }\n\n const name = path.substring(0, slashIndex);\n const version = path.substring(slashIndex + 1);\n\n return { name, version };\n }\n\n /**\n * Builds a purl (Package URL) for an npm package.\n *\n * Per the purl spec:\n * \"The npm scope @ sign prefix is always percent encoded.\"\n *\n * So @types/node@20.11.5 → pkg:npm/%40types/node@20.11.5\n * And express@4.18.2 → pkg:npm/express@4.18.2\n */\n private buildPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n // Scoped: encode the @ as %40 per purl spec\n return `pkg:npm/%40${name.slice(1)}@${version}`;\n }\n return `pkg:npm/${name}@${version}`;\n }\n}\n\n// ─── Types for pnpm-lock.yaml parsing ─────────────────────────\n\ninterface PnpmLockfile {\n lockfileVersion?: string | number;\n // Legacy format (v5.x): root-level dependencies\n dependencies?: Record<string, string | PnpmDependencyEntry>;\n devDependencies?: Record<string, string | PnpmDependencyEntry>;\n // Modern format (v6+): importers section\n importers?: Record<string, PnpmImporter>;\n packages?: Record<string, PnpmPackageInfo>;\n}\n\ninterface PnpmImporter {\n dependencies?: Record<string, PnpmDependencyEntry>;\n devDependencies?: Record<string, PnpmDependencyEntry>;\n specifiers?: Record<string, string>;\n}\n\ninterface PnpmDependencyEntry {\n specifier?: string;\n version?: string;\n}\n\ninterface PnpmPackageInfo {\n resolution?: {\n integrity?: string;\n tarball?: string;\n };\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n dev?: boolean;\n optional?: boolean;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Deno dependency scanner.\n *\n * Limitations:\n * - HTTPS/remote imports (deno.lock `remote` section) are not scanned.\n * - JSR packages are not directly supported by OSV so vulnerability scan will fail\n *\n * deno.lock v4/v5 format:\n * ```json\n * {\n * \"version\": \"4\",\n * \"specifiers\": {\n * \"jsr:@std/assert@^1.0.0\": \"1.0.10\",\n * \"npm:express@^4.18.0\": \"4.21.2\"\n * },\n * \"jsr\": {\n * \"@std/assert@1.0.10\": { \"integrity\": \"...\" },\n * \"@std/internal@1.0.6\": { \"integrity\": \"...\" }\n * },\n * \"npm\": {\n * \"express@4.21.2\": { \"integrity\": \"...\", \"dependencies\": {...} }\n * }\n * }\n * ```\n *\n * deno.lock v3 format:\n * ```json\n * {\n * \"version\": \"3\",\n * \"packages\": {\n * \"specifiers\": {\n * \"jsr:@std/path@^1.0.0\": \"jsr:@std/path@1.0.8\",\n * \"npm:hono@^4.0.0\": \"npm:hono@4.6.20\"\n * },\n * \"jsr\": {\n * \"@std/path@1.0.8\": { \"integrity\": \"...\" },\n * \"@std/internal@1.0.6\": { \"integrity\": \"...\" }\n * },\n * \"npm\": {\n * \"hono@4.6.20\": { \"integrity\": \"...\", \"dependencies\": {...} }\n * }\n * }\n * }\n * ```\n */\nexport class DenoScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'deno';\n readonly lockfileNames = ['deno.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n for (const name of this.lockfileNames) {\n const lockfilePath = path.join(projectPath, name);\n if (existsSync(lockfilePath)) return lockfilePath;\n }\n return null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const lockfileRaw = await readFile(lockfilePath, 'utf-8');\n\n let lockfile: DenoLockfile;\n try {\n lockfile = JSON.parse(lockfileRaw);\n } catch {\n throw new LockfileParseError(lockfilePath, 'Invalid JSON');\n }\n\n const dependencies = this.parseLockfile(lockfile);\n\n return {\n projectPath,\n ecosystem: 'deno',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n\n\n /**\n * Parses the lockfile and extracts dependencies from both\n * npm and jsr package registries.\n *\n * Supports v3 (packages nested under `packages`), v4, and v5 (top-level jsr/npm sections).\n * Uses lockfile specifiers to determine direct vs transitive dependencies.\n */\n private parseLockfile(lockfile: DenoLockfile): Dependency[] {\n const deps: Dependency[] = [];\n\n // Extract direct dependencies from lockfile specifiers\n const directNames = this.extractDirectDependencies(lockfile);\n\n // Normalize v3 vs v4/v5 structure (prefer top-level, fall back to nested)\n const jsrPackages = lockfile.jsr ?? lockfile.packages?.jsr ?? {};\n const npmPackages = lockfile.npm ?? lockfile.packages?.npm ?? {};\n\n // Parse JSR packages: keys are like \"@std/assert@1.0.10\"\n for (const key of Object.keys(jsrPackages)) {\n const parsed = this.parsePackageKey(key);\n if (!parsed) continue;\n\n deps.push({\n name: parsed.name,\n version: parsed.version,\n direct: directNames.has(`jsr:${parsed.name}`),\n ecosystem: 'deno', // JSR packages belong to Deno ecosystem\n purl: this.buildJsrPurl(parsed.name, parsed.version),\n });\n }\n\n // Parse npm packages: keys are like \"express@4.21.2\"\n for (const key of Object.keys(npmPackages)) {\n const parsed = this.parsePackageKey(key);\n if (!parsed) continue;\n\n deps.push({\n name: parsed.name,\n version: parsed.version,\n direct: directNames.has(`npm:${parsed.name}`),\n ecosystem: 'npm', // npm packages belong to npm ecosystem (for CVE tracking)\n purl: this.buildNpmPurl(parsed.name, parsed.version),\n });\n }\n\n return deps;\n }\n\n /**\n * Extracts direct dependency names from lockfile specifiers.\n *\n * Returns a set of ecosystem-qualified package names like \"jsr:@std/assert\" or \"npm:express\".\n * The ecosystem prefix prevents collisions if the same package name exists in both registries.\n */\n private extractDirectDependencies(lockfile: DenoLockfile): Set<string> {\n const directNames = new Set<string>();\n\n // Get specifiers from v3 (packages.specifiers) or v4/v5 (top-level specifiers)\n const specifiers = lockfile.specifiers ?? lockfile.packages?.specifiers ?? {};\n\n for (const [constraint, resolved] of Object.entries(specifiers)) {\n // Skip non-package URL schemes (file:, https:, data:, etc.)\n if (resolved.startsWith('file:') || resolved.startsWith('https:') || resolved.startsWith('http:') || resolved.startsWith('data:')) {\n continue;\n }\n\n // Determine ecosystem from constraint\n let ecosystem: 'jsr' | 'npm' | null = null;\n if (constraint.startsWith('jsr:')) {\n ecosystem = 'jsr';\n } else if (constraint.startsWith('npm:')) {\n ecosystem = 'npm';\n }\n\n if (!ecosystem) continue; // Skip if we can't determine ecosystem\n\n let resolvedKey = resolved;\n\n if (resolved.startsWith('jsr:') || resolved.startsWith('npm:')) {\n // v3 or some v4 formats: resolved is like \"jsr:@std/path@1.0.8\" or \"npm:express@4.21.2\"\n resolvedKey = resolved.replace(/^(jsr:|npm:)/, '');\n const parsed = this.parsePackageKey(resolvedKey);\n if (parsed) {\n directNames.add(`${ecosystem}:${parsed.name}`);\n }\n } else {\n // v4/v5 format: resolved is just the version like \"1.0.10\"\n // Extract name from constraint key and use directly\n const name = this.extractNameFromSpecifier(constraint);\n if (name) {\n directNames.add(`${ecosystem}:${name}`);\n }\n }\n }\n\n return directNames;\n }\n\n /**\n * Parses a package key like \"@std/assert@1.0.10\" or \"express@4.21.2\"\n * into { name, version }.\n *\n * Handles scoped packages where the name starts with @ (e.g., @std/assert).\n * In that case the version separator is the LAST @ sign.\n */\n private parsePackageKey(key: string): { name: string; version: string } | null {\n // Find the last @ which separates name from version\n const lastAtIndex = key.lastIndexOf('@');\n if (lastAtIndex <= 0) return null;\n\n const name = key.slice(0, lastAtIndex);\n const version = key.slice(lastAtIndex + 1);\n\n if (!name || !version) return null;\n return { name, version };\n }\n\n\n\n /**\n * Extracts the package name from a Deno import specifier.\n *\n * Examples:\n * \"jsr:@std/assert@^1.0.0\" → \"@std/assert\"\n * \"npm:express@^4.18.0\" → \"express\"\n * \"npm:@hono/hono@^4.0.0\" → \"@hono/hono\"\n * \"lodash\" (bare) → \"lodash\"\n */\n private extractNameFromSpecifier(specifier: string): string | null {\n // Strip jsr: or npm: prefix\n const withoutPrefix = specifier.replace(/^(jsr:|npm:)/, '');\n if (!withoutPrefix) return null;\n\n // For scoped packages (@scope/name@version), find the version @\n if (withoutPrefix.startsWith('@')) {\n // Find the @ after the scoped name portion\n const slashIndex = withoutPrefix.indexOf('/');\n if (slashIndex === -1) return null;\n const afterSlash = withoutPrefix.indexOf('@', slashIndex);\n if (afterSlash === -1) return withoutPrefix; // No version constraint\n return withoutPrefix.slice(0, afterSlash);\n }\n\n // Unscoped: \"express@^4.18.0\" → \"express\" or bare \"lodash\" → \"lodash\"\n const atIndex = withoutPrefix.indexOf('@');\n if (atIndex === -1) return withoutPrefix;\n return withoutPrefix.slice(0, atIndex);\n }\n\n /**\n * Builds a purl for a JSR package.\n *\n * JSR packages use the \"jsr\" purl type (non-standard but descriptive).\n * For scoped packages, both @ and all / characters are percent-encoded.\n * Example: `pkg:jsr/%40std%2Fassert@1.0.10`\n */\n private buildJsrPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n // Encode @ and all / characters: @scope/sub/name -> %40scope%2Fsub%2Fname\n const encoded = '%40' + name.slice(1).replace(/\\//g, '%2F');\n return `pkg:jsr/${encoded}@${version}`;\n }\n return `pkg:jsr/${name}@${version}`;\n }\n\n /**\n * Builds a purl for an npm package used via Deno.\n *\n * Uses the standard npm purl type since these are npm packages.\n * Per npm purl spec, only @ is encoded, / remains as namespace separator.\n * Example: `pkg:npm/%40std/assert@1.0.10` or `pkg:npm/express@4.21.2`\n */\n private buildNpmPurl(name: string, version: string): string {\n if (name.startsWith('@')) {\n return `pkg:npm/%40${name.slice(1)}@${version}`;\n }\n return `pkg:npm/${name}@${version}`;\n }\n}\n\n// ─── Types for deno.lock parsing ─────────────────────────────────\n\n/** Represents the deno.lock file structure (supports v3, v4, and v5) */\ninterface DenoLockfile {\n version?: string;\n /** v4/v5: top-level specifiers mapping (constraint -> resolved version) */\n specifiers?: Record<string, string>;\n /** v4/v5: top-level jsr packages */\n jsr?: Record<string, DenoLockfilePackage>;\n /** v4/v5: top-level npm packages */\n npm?: Record<string, DenoLockfilePackage>;\n /** v3: all packages nested under this key */\n packages?: {\n specifiers?: Record<string, string>;\n jsr?: Record<string, DenoLockfilePackage>;\n npm?: Record<string, DenoLockfilePackage>;\n };\n}\n\ninterface DenoLockfilePackage {\n integrity?: string;\n /** Dependencies: npm uses Record<string, string> (name -> version), JSR uses string[] (specifier list) */\n dependencies?: Record<string, string> | string[];\n}","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Python / Poetry dependency scanner.\n *\n * Parses `poetry.lock` (TOML format) to extract the full resolved\n * dependency tree. Reads `pyproject.toml` to determine which packages\n * are direct dependencies vs transitive.\n *\n * poetry.lock format:\n * ```toml\n * [[package]]\n * name = \"requests\"\n * version = \"2.31.0\"\n * description = \"Python HTTP for Humans.\"\n * optional = false\n * python-versions = \">=3.8\"\n * ```\n *\n * Direct dependencies are identified by parsing the `[tool.poetry.dependencies]`\n * and `[tool.poetry.group.*.dependencies]` sections of `pyproject.toml`.\n *\n * Note: Uses a simple TOML parser since poetry.lock has a very\n * regular structure (just [[package]] entries). No need for a full\n * TOML library.\n */\nexport class PoetryScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'poetry';\n readonly lockfileNames = ['poetry.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'poetry.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, pyprojectRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'pyproject.toml'), 'utf-8').catch(() => null),\n ]);\n\n const packages = this.parseLockfile(lockfileRaw, lockfilePath);\n const directNames = pyprojectRaw ? this.parsePyprojectToml(pyprojectRaw) : new Set<string>();\n\n const dependencies: Dependency[] = [];\n for (const pkg of packages) {\n dependencies.push({\n name: this.normalizePipName(pkg.name),\n version: pkg.version,\n direct: directNames.size > 0 ? directNames.has(this.normalizePipName(pkg.name)) : true,\n ecosystem: 'poetry',\n purl: this.buildPurl(pkg.name, pkg.version),\n });\n }\n\n return {\n projectPath,\n ecosystem: 'poetry',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses poetry.lock by splitting on [[package]] blocks.\n * Lightweight parser that handles the regular structure\n * without needing a full TOML library.\n */\n private parseLockfile(content: string, lockfilePath: string): PoetryPackage[] {\n const packages: PoetryPackage[] = [];\n const blocks = content.split(/^\\[\\[package\\]\\]$/m);\n\n for (const block of blocks) {\n if (!block.trim()) continue;\n\n const name = this.extractField(block, 'name');\n const version = this.extractField(block, 'version');\n\n if (name && version) {\n packages.push({ name, version });\n }\n }\n\n if (packages.length === 0 && content.includes('[[package]]')) {\n throw new LockfileParseError(lockfilePath, 'Failed to parse any packages from poetry.lock');\n }\n\n return packages;\n }\n\n /**\n * Extracts a string field value from a TOML block.\n * Handles: `name = \"value\"` format.\n */\n private extractField(block: string, fieldName: string): string | null {\n const regex = new RegExp(`^${fieldName}\\\\s*=\\\\s*\"([^\"]*)\"`, 'm');\n const match = block.match(regex);\n return match ? match[1] : null;\n }\n\n /**\n * Parses `pyproject.toml` to extract direct dependency names.\n *\n * Looks for:\n * - `[tool.poetry.dependencies]` — main dependencies\n * - `[tool.poetry.group.dev.dependencies]` — dev dependencies\n * - `[tool.poetry.group.*.dependencies]` — other groups\n *\n * Supports formats:\n * - `requests = \"^2.31.0\"`\n * - `requests = { version = \"^2.31.0\", optional = true }`\n * - `python = \"^3.12\"` — skipped (the Python interpreter itself)\n */\n private parsePyprojectToml(content: string): Set<string> {\n const directNames = new Set<string>();\n let inDepsSection = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n // Detect section headers\n if (line.startsWith('[')) {\n inDepsSection =\n line === '[tool.poetry.dependencies]' ||\n /^\\[tool\\.poetry\\.group\\.[^\\]]+\\.dependencies\\]$/.test(line);\n continue;\n }\n\n if (inDepsSection && line && !line.startsWith('#')) {\n // Extract package name from \"name = ...\" lines\n const match = line.match(/^([a-zA-Z0-9_][a-zA-Z0-9._-]*)\\s*=/);\n if (match && match[1]) {\n const name = this.normalizePipName(match[1]);\n // Skip the python version constraint\n if (name !== 'python') {\n directNames.add(name);\n }\n }\n }\n }\n\n return directNames;\n }\n\n /**\n * Normalizes a pip package name per PEP 503.\n * Converts to lowercase and replaces any run of [-_.] with a single hyphen.\n */\n private normalizePipName(name: string): string {\n return name.toLowerCase().replace(/[-_.]+/g, '-');\n }\n\n /**\n * Builds a purl for a PyPI package.\n * Per purl spec, the type is \"pypi\" (not \"poetry\").\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:pypi/${this.normalizePipName(name)}@${version}`;\n }\n}\n\n// ─── Internal types ──────────────────────────────────────────────\n\ninterface PoetryPackage {\n name: string;\n version: string;\n}\n","import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport path from 'path';\nimport type { DependencyScanner } from '../scanner.interface.js';\nimport type { Dependency, Ecosystem, ScanResult } from '../../core/types.js';\nimport { LockfileParseError } from '../../core/errors.js';\n\n/**\n * Python / UV dependency scanner.\n *\n * Parses `uv.lock` to extract the full resolved dependency tree.\n * Reads `pyproject.toml` to determine which packages are direct\n * dependencies vs transitive.\n *\n * uv.lock format:\n * ```toml\n * version = 1\n * requires-python = \">=3.12\"\n *\n * [[package]]\n * name = \"requests\"\n * version = \"2.31.0\"\n * source = { registry = \"https://pypi.org/simple\" }\n * dependencies = [\n * { name = \"certifi\" },\n * { name = \"charset-normalizer\" },\n * ]\n * ```\n *\n * The root project is typically included as a `[[package]]` entry\n * without a `source` field (or with `source = { editable = \".\" }`).\n * It is excluded from the dependency list.\n *\n * Note: Uses a simple TOML parser since uv.lock has a very\n * regular structure. No need for a full TOML library.\n */\nexport class UvScanner implements DependencyScanner {\n readonly ecosystem: Ecosystem = 'uv';\n readonly lockfileNames = ['uv.lock'];\n\n async detect(projectPath: string): Promise<string | null> {\n const lockfilePath = path.join(projectPath, 'uv.lock');\n return existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n async scan(projectPath: string, lockfilePath: string): Promise<ScanResult> {\n const [lockfileRaw, pyprojectRaw] = await Promise.all([\n readFile(lockfilePath, 'utf-8'),\n readFile(path.join(projectPath, 'pyproject.toml'), 'utf-8').catch(() => null),\n ]);\n\n const packages = this.parseLockfile(lockfileRaw, lockfilePath);\n const projectName = pyprojectRaw ? this.extractProjectName(pyprojectRaw) : null;\n const directNames = pyprojectRaw ? this.parsePyprojectDeps(pyprojectRaw) : new Set<string>();\n\n const dependencies: Dependency[] = [];\n for (const pkg of packages) {\n // Skip the root project itself\n if (pkg.isEditable) continue;\n if (projectName && this.normalizePipName(pkg.name) === this.normalizePipName(projectName)) {\n continue;\n }\n\n dependencies.push({\n name: this.normalizePipName(pkg.name),\n version: pkg.version,\n direct: directNames.size > 0 ? directNames.has(this.normalizePipName(pkg.name)) : true,\n ecosystem: 'uv',\n purl: this.buildPurl(pkg.name, pkg.version),\n });\n }\n\n return {\n projectPath,\n ecosystem: 'uv',\n dependencies,\n lockfilePath,\n scannedAt: new Date().toISOString(),\n };\n }\n\n /**\n * Parses uv.lock by splitting on [[package]] blocks.\n * Lightweight parser that handles the regular structure\n * without needing a full TOML library.\n */\n private parseLockfile(content: string, lockfilePath: string): UvPackage[] {\n const packages: UvPackage[] = [];\n const blocks = content.split(/^\\[\\[package\\]\\]$/m);\n\n for (const block of blocks) {\n if (!block.trim()) continue;\n\n const name = this.extractField(block, 'name');\n const version = this.extractField(block, 'version');\n\n if (name && version) {\n // Detect editable/virtual packages (root project)\n const isEditable = /source\\s*=\\s*\\{[^}]*editable\\s*=/.test(block) ||\n /source\\s*=\\s*\\{[^}]*virtual\\s*=/.test(block);\n packages.push({ name, version, isEditable });\n }\n }\n\n if (packages.length === 0 && content.includes('[[package]]')) {\n throw new LockfileParseError(lockfilePath, 'Failed to parse any packages from uv.lock');\n }\n\n return packages;\n }\n\n /**\n * Extracts a string field value from a TOML block.\n * Handles: `name = \"value\"` format.\n */\n private extractField(block: string, fieldName: string): string | null {\n const regex = new RegExp(`^${fieldName}\\\\s*=\\\\s*\"([^\"]*)\"`, 'm');\n const match = block.match(regex);\n return match ? match[1] : null;\n }\n\n /**\n * Extracts the project name from `pyproject.toml`.\n * Looks for `name = \"...\"` under `[project]`.\n */\n private extractProjectName(content: string): string | null {\n let inProjectSection = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n if (line.startsWith('[')) {\n inProjectSection = line === '[project]';\n continue;\n }\n\n if (inProjectSection) {\n const match = line.match(/^name\\s*=\\s*\"([^\"]*)\"/);\n if (match) return match[1];\n }\n }\n\n return null;\n }\n\n /**\n * Parses `pyproject.toml` to extract direct dependency names.\n *\n * Looks for:\n * - `[project]` → `dependencies = [...]` (PEP 621)\n * - `[project.optional-dependencies]` (extras)\n * - `[dependency-groups]` (PEP 735, used by uv for dev deps)\n *\n * Dependency strings follow PEP 508:\n * - `\"requests>=2.31.0\"`\n * - `\"flask[dotenv]>=3.0\"`\n * - `\"black\"` (bare name)\n */\n private parsePyprojectDeps(content: string): Set<string> {\n const directNames = new Set<string>();\n\n // Extract dependencies from PEP 621 [project] dependencies array\n this.extractInlineArray(content, directNames);\n\n // Extract from [dependency-groups] sections (PEP 735)\n this.extractDependencyGroups(content, directNames);\n\n return directNames;\n }\n\n /**\n * Extracts dependency names from PEP 621 `dependencies = [...]` arrays\n * and `[project.optional-dependencies]` sections.\n */\n private extractInlineArray(content: string, directNames: Set<string>): void {\n // Match multi-line array patterns like:\n // dependencies = [\n // \"requests>=2.31.0\",\n // \"flask\",\n // ]\n const arrayRegex = /(?:^dependencies|^[a-zA-Z0-9_-]+)\\s*=\\s*\\[([^\\]]*)\\]/gm;\n let match;\n while ((match = arrayRegex.exec(content)) !== null) {\n const arrayContent = match[1];\n this.extractPepNames(arrayContent, directNames);\n }\n }\n\n /**\n * Extracts dependency names from [dependency-groups] sections.\n * Format:\n * ```toml\n * [dependency-groups]\n * dev = [\"pytest>=7.0\", \"black\"]\n * ```\n */\n private extractDependencyGroups(content: string, directNames: Set<string>): void {\n let inDepGroups = false;\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n\n if (line.startsWith('[')) {\n inDepGroups = line === '[dependency-groups]';\n continue;\n }\n\n if (inDepGroups && line && !line.startsWith('#')) {\n // Match: dev = [\"pytest>=7.0\", \"black\"]\n const arrayMatch = line.match(/^[a-zA-Z0-9_-]+\\s*=\\s*\\[([^\\]]*)\\]/);\n if (arrayMatch) {\n this.extractPepNames(arrayMatch[1], directNames);\n }\n }\n }\n }\n\n /**\n * Extracts PEP 508 package names from a comma-separated\n * list of quoted dependency strings.\n */\n private extractPepNames(content: string, directNames: Set<string>): void {\n const depStrings = content.match(/\"([^\"]*)\"/g);\n if (!depStrings) return;\n\n for (const quoted of depStrings) {\n const depStr = quoted.replace(/\"/g, '').trim();\n if (!depStr) continue;\n\n // PEP 508: name is everything before the first specifier char\n const nameMatch = depStr.match(/^([a-zA-Z0-9_][a-zA-Z0-9._-]*)/);\n if (nameMatch && nameMatch[1]) {\n directNames.add(this.normalizePipName(nameMatch[1]));\n }\n }\n }\n\n /**\n * Normalizes a pip package name per PEP 503.\n * Converts to lowercase and replaces any run of [-_.] with a single hyphen.\n */\n private normalizePipName(name: string): string {\n return name.toLowerCase().replace(/[-_.]+/g, '-');\n }\n\n /**\n * Builds a purl for a PyPI package.\n * Per purl spec, the type is \"pypi\" (not \"uv\").\n */\n private buildPurl(name: string, version: string): string {\n return `pkg:pypi/${this.normalizePipName(name)}@${version}`;\n }\n}\n\n// ─── Internal types ──────────────────────────────────────────────\n\ninterface UvPackage {\n name: string;\n version: string;\n isEditable: boolean;\n}\n","import type { DependencyScanner } from './scanner.interface.js';\nimport type { ScanResult } from '../core/types.js';\nimport { NpmScanner } from './npm/npm-scanner.js';\nimport { NugetScanner } from './nuget/nuget-scanner.js';\nimport { CargoScanner } from './cargo/cargo-scanner.js';\nimport { PipScanner } from './pip/pip-scanner.js';\nimport { MavenScanner } from './maven/maven-scanner.js';\nimport { GoScanner } from './go/go-scanner.js';\nimport { RubyScanner } from './ruby/ruby-scanner.js';\nimport { ComposerScanner } from './composer/composer-scanner.js';\nimport { NoLockfileError } from '../core/errors.js';\nimport { YarnScanner } from './yarn/yarn-scanner.js';\nimport { PnpmScanner } from './pnpm/pnpm-scanner.js';\nimport { DenoScanner } from './deno/deno-scanner.js';\nimport { PoetryScanner } from './poetry/poetry-scanner.js';\nimport { UvScanner } from './uv/uv-scanner.js';\n\n/**\n * Registry of all available dependency scanners.\n * Auto-detects the correct scanner for a given project.\n */\nexport class ScannerRegistry {\n private scanners: DependencyScanner[];\n\n constructor() {\n this.scanners = [\n new NpmScanner(),\n new NugetScanner(),\n new CargoScanner(),\n new PipScanner(),\n new PoetryScanner(),\n new UvScanner(),\n new MavenScanner(),\n new GoScanner(),\n new RubyScanner(),\n new ComposerScanner(),\n new YarnScanner(),\n new PnpmScanner(),\n new DenoScanner(),\n ];\n }\n\n /**\n * Auto-detects the project's ecosystem and scans dependencies.\n * Tries each registered scanner in order until one matches.\n */\n async detectAndScan(projectPath: string): Promise<ScanResult> {\n for (const scanner of this.scanners) {\n const lockfilePath = await scanner.detect(projectPath);\n if (lockfilePath) {\n return scanner.scan(projectPath, lockfilePath);\n }\n }\n throw new NoLockfileError(projectPath);\n }\n\n /** Returns a specific scanner by ecosystem name */\n getScanner(ecosystem: string): DependencyScanner | undefined {\n return this.scanners.find((s) => s.ecosystem === ecosystem);\n }\n\n /** Lists all registered ecosystems */\n listEcosystems(): string[] {\n return this.scanners.map((s) => s.ecosystem);\n }\n}\n","import { randomUUID } from 'crypto';\nimport type { SbomGenerator } from './generator.interface.js';\nimport type { ScanResult, Sbom, SbomFormat, Dependency } from '../core/types.js';\nimport {\n DEFAULT_TOOL_VERSION,\n VERIMU_TOOL_DESCRIPTION,\n VERIMU_TOOL_NAME,\n VERIMU_TOOL_WEBSITE,\n deriveSupplierName,\n extractProjectName,\n} from './shared.js';\n\n/** Supported CycloneDX spec versions */\nexport type CycloneDxSpecVersion = '1.4' | '1.5' | '1.6' | '1.7';\n\nconst SCHEMA_URLS: Record<CycloneDxSpecVersion, string> = {\n '1.4': 'http://cyclonedx.org/schema/bom-1.4.schema.json',\n '1.5': 'http://cyclonedx.org/schema/bom-1.5.schema.json',\n '1.6': 'http://cyclonedx.org/schema/bom-1.6.schema.json',\n '1.7': 'http://cyclonedx.org/schema/bom-1.7.schema.json',\n};\n\n/**\n * Generates CycloneDX JSON SBOMs (versions 1.4 – 1.7).\n *\n * CycloneDX is the preferred SBOM format for CRA compliance.\n * Spec: https://cyclonedx.org/specification/overview/\n *\n * NTIA minimum elements are satisfied:\n * - metadata.supplier (supplier of the root software)\n * - components[].supplier (supplier of each dependency)\n * - components[].name, version, purl, bom-ref\n * - dependencies[] graph\n *\n * Schema differences handled per version:\n * - 1.4: metadata.tools is a flat array of { vendor, name, version, ... }\n * - 1.5+: metadata.tools is { components: [...] }\n */\nexport class CycloneDxGenerator implements SbomGenerator {\n readonly format: SbomFormat = 'cyclonedx-json';\n\n constructor(private readonly specVersion: CycloneDxSpecVersion = '1.7') { }\n\n generate(scanResult: ScanResult, toolVersion: string = DEFAULT_TOOL_VERSION): Sbom {\n const bom = this.buildBom(scanResult, toolVersion);\n const content = JSON.stringify(bom, null, 2);\n\n return {\n format: 'cyclonedx-json',\n specVersion: this.specVersion,\n content,\n componentCount: scanResult.dependencies.length,\n generatedAt: new Date().toISOString(),\n };\n }\n\n private buildBom(scanResult: ScanResult, toolVersion: string): CycloneDxBom {\n const projectName = extractProjectName(scanResult.projectPath);\n\n return {\n $schema: SCHEMA_URLS[this.specVersion],\n bomFormat: 'CycloneDX',\n specVersion: this.specVersion,\n serialNumber: `urn:uuid:${randomUUID()}`,\n version: 1,\n metadata: {\n timestamp: new Date().toISOString(),\n tools: this.buildTools(toolVersion),\n // NTIA: metadata.supplier — the org supplying the root software\n supplier: {\n name: projectName,\n },\n component: {\n type: 'application',\n name: projectName,\n 'bom-ref': 'root-component',\n supplier: { name: projectName },\n },\n },\n components: scanResult.dependencies.map((dep) => this.toComponent(dep)),\n dependencies: this.buildDependencyGraph(scanResult),\n };\n }\n\n /** Converts a Verimu Dependency to a CycloneDX component */\n private toComponent(dep: Dependency): CycloneDxComponent {\n return {\n type: 'library',\n name: dep.name,\n version: dep.version,\n purl: dep.purl,\n 'bom-ref': dep.purl,\n scope: dep.direct ? 'required' : 'optional',\n // NTIA: component.supplier — derived from npm scope or package name\n supplier: {\n name: deriveSupplierName(dep.name),\n },\n };\n }\n\n /**\n * Builds the dependency graph section of the SBOM.\n *\n * The root component depends on all dependencies (direct + transitive).\n * This ensures a single root node in the graph, which NTIA validators expect.\n *\n * We include ALL deps under root (not just direct) because from a flat lockfile\n * we can't reliably reconstruct which transitive dep belongs to which direct dep.\n * This is still valid per the CycloneDX spec — it represents a complete but flat\n * dependency relationship.\n */\n private buildDependencyGraph(scanResult: ScanResult): CycloneDxDependencyEntry[] {\n const allDepPurls = scanResult.dependencies.map((d) => d.purl);\n\n return [\n {\n ref: 'root-component',\n dependsOn: allDepPurls,\n },\n ];\n }\n\n /**\n * Builds the tools metadata section.\n *\n * CycloneDX 1.4: tools is a flat array of { vendor, name, version, ... }\n * CycloneDX 1.5+: tools is an object { components: [...] }\n */\n private buildTools(toolVersion: string): CycloneDxTools {\n if (this.specVersion === '1.4') {\n return [\n {\n vendor: 'Verimu',\n name: VERIMU_TOOL_NAME,\n version: toolVersion,\n externalReferences: [{ type: 'website', url: VERIMU_TOOL_WEBSITE }],\n },\n ];\n }\n\n return {\n components: [\n {\n type: 'application',\n name: VERIMU_TOOL_NAME,\n version: toolVersion,\n description: VERIMU_TOOL_DESCRIPTION,\n supplier: { name: 'Verimu' },\n externalReferences: [{ type: 'website', url: VERIMU_TOOL_WEBSITE }],\n },\n ],\n };\n }\n}\n\n// ─── CycloneDX JSON Types ─────────────────────────────────────\n\ninterface OrganizationalEntity {\n name: string;\n url?: string[];\n contact?: Array<{ name?: string; email?: string; phone?: string }>;\n}\n\n/** tools format for CycloneDX 1.4 — a flat array of tool objects */\ntype CycloneDxToolsV14 = Array<{\n vendor?: string;\n name: string;\n version: string;\n externalReferences?: Array<{ type: string; url: string }>;\n}>;\n\n/** tools format for CycloneDX 1.5+ — object with a components array */\ntype CycloneDxToolsV15Plus = {\n components: Array<{\n type: string;\n name: string;\n version: string;\n description?: string;\n supplier?: OrganizationalEntity;\n externalReferences?: Array<{ type: string; url: string }>;\n }>;\n};\n\ntype CycloneDxTools = CycloneDxToolsV14 | CycloneDxToolsV15Plus;\n\ninterface CycloneDxBom {\n $schema: string;\n bomFormat: string;\n specVersion: string;\n serialNumber: string;\n version: number;\n metadata: {\n timestamp: string;\n tools: CycloneDxTools;\n supplier: OrganizationalEntity;\n component: {\n type: string;\n name: string;\n 'bom-ref': string;\n supplier: OrganizationalEntity;\n };\n };\n components: CycloneDxComponent[];\n dependencies: CycloneDxDependencyEntry[];\n}\n\ninterface CycloneDxComponent {\n type: string;\n name: string;\n version: string;\n purl: string;\n 'bom-ref': string;\n scope?: string;\n supplier: OrganizationalEntity;\n}\n\ninterface CycloneDxDependencyEntry {\n ref: string;\n dependsOn: string[];\n}\n","import { randomUUID } from 'crypto';\nimport type { SbomGenerator } from './generator.interface.js';\nimport type { ScanResult, Sbom, SbomFormat } from '../core/types.js';\nimport {\n DEFAULT_TOOL_VERSION,\n VERIMU_TOOL_NAME,\n extractProjectName,\n normalizeDependencies,\n} from './shared.js';\n\nconst SPDX_VERSION = '2.3';\n\n/** Generates SPDX 2.3 JSON SBOMs. */\nexport class SpdxJsonGenerator implements SbomGenerator {\n readonly format: SbomFormat = 'spdx-json';\n\n generate(scanResult: ScanResult, toolVersion: string = DEFAULT_TOOL_VERSION): Sbom {\n const timestamp = new Date().toISOString();\n const projectName = extractProjectName(scanResult.projectPath);\n const rootPackageId = 'SPDXRef-Package-root';\n const dependencies = normalizeDependencies(scanResult.dependencies);\n\n const document = {\n spdxVersion: `SPDX-${SPDX_VERSION}`,\n dataLicense: 'CC0-1.0',\n SPDXID: 'SPDXRef-DOCUMENT',\n name: `${projectName}-sbom`,\n documentNamespace: `https://verimu.com/spdxdocs/${projectName}-${randomUUID()}`,\n creationInfo: {\n created: timestamp,\n creators: [`Tool: ${VERIMU_TOOL_NAME}@${toolVersion}`],\n },\n documentDescribes: [rootPackageId],\n packages: [\n {\n name: projectName,\n SPDXID: rootPackageId,\n versionInfo: 'NOASSERTION',\n supplier: `Organization: ${projectName}`,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n licenseConcluded: 'NOASSERTION',\n licenseDeclared: 'NOASSERTION',\n primaryPackagePurpose: 'APPLICATION',\n },\n ...dependencies.map((dep, index) => ({\n name: dep.name,\n SPDXID: `SPDXRef-Package-${index + 1}`,\n versionInfo: dep.version,\n supplier: `Organization: ${dep.supplierName}`,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n licenseConcluded: 'NOASSERTION',\n licenseDeclared: 'NOASSERTION',\n primaryPackagePurpose: 'LIBRARY',\n externalRefs: [\n {\n referenceCategory: 'PACKAGE-MANAGER',\n referenceType: 'purl',\n referenceLocator: dep.purl,\n },\n ],\n })),\n ],\n relationships: [\n {\n spdxElementId: 'SPDXRef-DOCUMENT',\n relationshipType: 'DESCRIBES',\n relatedSpdxElement: rootPackageId,\n },\n ...dependencies.map((_dep, index) => ({\n spdxElementId: rootPackageId,\n relationshipType: 'DEPENDS_ON',\n relatedSpdxElement: `SPDXRef-Package-${index + 1}`,\n })),\n ],\n };\n\n return {\n format: 'spdx-json',\n specVersion: SPDX_VERSION,\n content: JSON.stringify(document, null, 2),\n componentCount: scanResult.dependencies.length,\n generatedAt: timestamp,\n };\n }\n}\n\n","import { randomUUID } from 'crypto';\nimport type { SbomGenerator } from './generator.interface.js';\nimport type { ScanResult, Sbom, SbomFormat } from '../core/types.js';\nimport {\n DEFAULT_SWID_VERSION,\n DEFAULT_TOOL_VERSION,\n VERIMU_TOOL_NAME,\n extractProjectName,\n} from './shared.js';\n\nconst SWID_SPEC_VERSION = 'ISO/IEC 19770-2:2015';\n\n/** Generates a minimal SWID XML tag for the root software product. */\nexport class SwidTagGenerator implements SbomGenerator {\n readonly format: SbomFormat = 'swid-xml';\n\n generate(scanResult: ScanResult, toolVersion: string = DEFAULT_TOOL_VERSION): Sbom {\n const timestamp = new Date().toISOString();\n const projectName = extractProjectName(scanResult.projectPath);\n const tagId = `com.verimu:${sanitizeTagId(projectName)}:${DEFAULT_SWID_VERSION}:${randomUUID()}`;\n\n const content = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<SoftwareIdentity',\n ' xmlns=\"http://standards.iso.org/iso/19770/-2/2015/schema.xsd\"',\n ` name=\"${escapeXml(projectName)}\"`,\n ` tagId=\"${escapeXml(tagId)}\"`,\n ' tagVersion=\"1\"',\n ` version=\"${DEFAULT_SWID_VERSION}\"`,\n ' versionScheme=\"semver\">',\n ` <Entity name=\"${escapeXml(projectName)}\" role=\"softwareCreator\" />`,\n ' <Entity name=\"Verimu\" role=\"tagCreator\" />',\n ` <Meta product=\"${escapeXml(projectName)}\" generator=\"${VERIMU_TOOL_NAME}\" toolVersion=\"${toolVersion}\" generated=\"${timestamp}\" />`,\n ' <!-- TODO: Consider adding dependency/package evidence if we need richer SWID coverage. -->',\n ' <Link rel=\"describedby\" href=\"https://verimu.com\" />',\n '</SoftwareIdentity>',\n ].join('\\n');\n\n return {\n format: 'swid-xml',\n specVersion: SWID_SPEC_VERSION,\n content,\n componentCount: 1,\n generatedAt: timestamp,\n };\n }\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&apos;');\n}\n\nfunction sanitizeTagId(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n","import type { ScanResult, SbomArtifacts } from '../core/types.js';\nimport { DEFAULT_TOOL_VERSION } from './shared.js';\nimport { CycloneDxGenerator } from './cyclonedx.js';\nimport type { CycloneDxSpecVersion } from './cyclonedx.js';\nimport { SpdxJsonGenerator } from './spdx.js';\nimport { SwidTagGenerator } from './swid.js';\n\n/** Generates every supported software inventory artifact for a scan. */\nexport function generateSbomArtifacts(\n scanResult: ScanResult,\n toolVersion: string = DEFAULT_TOOL_VERSION,\n cyclonedxVersion: CycloneDxSpecVersion = '1.7'\n): SbomArtifacts {\n // TODO: Make artifact selection configurable instead of always generating all supported formats.\n return {\n cyclonedx: new CycloneDxGenerator(cyclonedxVersion).generate(scanResult, toolVersion),\n spdx: new SpdxJsonGenerator().generate(scanResult, toolVersion),\n swid: new SwidTagGenerator().generate(scanResult, toolVersion),\n };\n}\n\n","import type { CveSource } from './source.interface.js';\nimport type { Dependency, Vulnerability, VulnerabilitySource, Severity } from '../core/types.js';\n\nconst OSV_API_BASE = 'https://api.osv.dev/v1';\nconst BATCH_SIZE = 1000; // OSV querybatch supports up to 1000\n\n/**\n * OSV.dev (Google Open Source Vulnerabilities) CVE source.\n *\n * Primary CVE source for Verimu because:\n * - Supports direct package name + ecosystem + version queries\n * - Has batch query endpoint for efficiency\n * - No authentication required\n * - Covers npm, PyPI, Go, Rust, Maven, NuGet, etc.\n * - Aggregates data from GitHub Advisory, NVD, and others\n *\n * API docs: https://google.github.io/osv.dev/api/\n *\n * Note: /v1/querybatch only returns minimal data (id, modified).\n * Full vulnerability details must be fetched via /v1/vulns/{id}.\n */\nexport class OsvSource implements CveSource {\n readonly sourceId: VulnerabilitySource = 'osv';\n readonly name = 'OSV.dev (Google Open Source Vulnerabilities)';\n\n private fetchFn: typeof fetch;\n\n constructor(fetchImpl?: typeof fetch) {\n // Allow injecting fetch for testing\n this.fetchFn = fetchImpl ?? globalThis.fetch;\n }\n\n async checkDependencies(dependencies: Dependency[]): Promise<Vulnerability[]> {\n if (dependencies.length === 0) return [];\n\n const allVulns: Vulnerability[] = [];\n\n // Process in batches of BATCH_SIZE\n for (let i = 0; i < dependencies.length; i += BATCH_SIZE) {\n const batch = dependencies.slice(i, i + BATCH_SIZE);\n const batchVulns = await this.queryBatch(batch);\n allVulns.push(...batchVulns);\n }\n\n return allVulns;\n }\n\n /**\n * Uses OSV's /querybatch endpoint to get vulnerability IDs,\n * then fetches full details for each unique vulnerability.\n */\n private async queryBatch(dependencies: Dependency[]): Promise<Vulnerability[]> {\n const queries = dependencies.map((dep) => ({\n version: dep.version,\n package: {\n name: dep.name,\n ecosystem: this.mapEcosystem(dep.ecosystem),\n },\n }));\n\n const response = await this.fetchFn(`${OSV_API_BASE}/querybatch`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ queries }),\n });\n\n if (!response.ok) {\n throw new Error(`OSV API error: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as OsvBatchResponse;\n\n // Collect unique vuln IDs and track which dependencies they affect\n const vulnIdToDeps = new Map<string, Dependency[]>();\n\n for (let i = 0; i < data.results.length; i++) {\n const result = data.results[i];\n const dep = dependencies[i];\n\n if (result.vulns && result.vulns.length > 0) {\n for (const vuln of result.vulns) {\n const existing = vulnIdToDeps.get(vuln.id);\n if (existing) {\n existing.push(dep);\n } else {\n vulnIdToDeps.set(vuln.id, [dep]);\n }\n }\n }\n }\n\n if (vulnIdToDeps.size === 0) {\n return [];\n }\n\n // Fetch full details for each unique vulnerability\n const vulnIds = Array.from(vulnIdToDeps.keys());\n const fullVulns = await this.fetchVulnerabilityDetails(vulnIds);\n\n // Map full vulnerability data to our format, linking to affected deps\n const vulnerabilities: Vulnerability[] = [];\n\n for (const osvVuln of fullVulns) {\n const affectedDeps = vulnIdToDeps.get(osvVuln.id) ?? [];\n for (const dep of affectedDeps) {\n vulnerabilities.push(this.mapVulnerability(osvVuln, dep));\n }\n }\n\n return vulnerabilities;\n }\n\n /**\n * Fetches full vulnerability details from /v1/vulns/{id} for each ID.\n * Makes parallel requests for efficiency.\n */\n private async fetchVulnerabilityDetails(vulnIds: string[]): Promise<OsvVulnerability[]> {\n const results: OsvVulnerability[] = [];\n\n // Fetch in parallel with a reasonable concurrency limit\n const CONCURRENCY = 10;\n for (let i = 0; i < vulnIds.length; i += CONCURRENCY) {\n const batch = vulnIds.slice(i, i + CONCURRENCY);\n const promises = batch.map(async (id) => {\n try {\n const response = await this.fetchFn(`${OSV_API_BASE}/vulns/${encodeURIComponent(id)}`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n // Log but don't fail the entire scan for individual vuln fetch errors\n console.warn(`Failed to fetch vulnerability ${id}: ${response.status}`);\n return null;\n }\n\n return (await response.json()) as OsvVulnerability;\n } catch (err) {\n console.warn(`Error fetching vulnerability ${id}:`, err);\n return null;\n }\n });\n\n const batchResults = await Promise.all(promises);\n results.push(...batchResults.filter((v): v is OsvVulnerability => v !== null));\n }\n\n return results;\n }\n\n /** Maps an OSV vulnerability record to our Vulnerability type */\n private mapVulnerability(osvVuln: OsvVulnerability, dep: Dependency): Vulnerability {\n const cveId = this.extractCveId(osvVuln);\n const severity = this.extractSeverity(osvVuln);\n\n return {\n id: cveId || osvVuln.id,\n aliases: Array.from(new Set([osvVuln.id, ...(osvVuln.aliases ?? [])])),\n summary: osvVuln.summary ?? osvVuln.details?.slice(0, 200) ?? 'No description available',\n severity: severity.level,\n cvssScore: severity.score,\n packageName: dep.name,\n ecosystem: dep.ecosystem,\n affectedVersionRange: this.extractAffectedRange(osvVuln, dep.name),\n fixedVersion: this.extractFixedVersion(osvVuln, dep.name),\n exploitedInWild: false, // OSV doesn't track this — CISA KEV does\n source: 'osv',\n referenceUrl: `https://osv.dev/vulnerability/${osvVuln.id}`,\n publishedAt: osvVuln.published,\n };\n }\n\n /** Extracts CVE ID from aliases (prefers CVE-xxxx over GHSA-xxxx) */\n private extractCveId(vuln: OsvVulnerability): string | null {\n // Check the main ID first\n if (vuln.id.startsWith('CVE-')) return vuln.id;\n\n // Check aliases\n if (vuln.aliases) {\n const cve = vuln.aliases.find((a) => a.startsWith('CVE-'));\n if (cve) return cve;\n }\n\n return null;\n }\n\n /** Extracts severity from CVSS scores in the OSV record */\n private extractSeverity(vuln: OsvVulnerability): { level: Severity; score?: number } {\n // Try database_specific first (often has CVSS)\n if (vuln.severity && vuln.severity.length > 0) {\n for (const sev of vuln.severity) {\n if (sev.type === 'CVSS_V3') {\n const score = this.parseCvssScore(sev.score);\n if (score !== null) {\n return { level: this.scoreToSeverity(score), score };\n }\n }\n }\n }\n\n // Try to extract from database_specific\n if (vuln.database_specific?.severity) {\n const s = vuln.database_specific.severity.toUpperCase();\n if (['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'].includes(s)) {\n return { level: s as Severity };\n }\n }\n\n return { level: 'UNKNOWN' };\n }\n\n /** Parses CVSS v3 vector string to extract/calculate the base score */\n private parseCvssScore(vectorOrScore: string): number | null {\n // Could be a raw score like \"7.5\"\n const num = parseFloat(vectorOrScore);\n if (!isNaN(num) && num >= 0 && num <= 10) return num;\n\n // Parse CVSS v3.x vector string like \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H\"\n if (vectorOrScore.startsWith('CVSS:3')) {\n return this.calculateCvss3Score(vectorOrScore);\n }\n\n return null;\n }\n\n /** Calculate CVSS v3.x base score from vector string */\n private calculateCvss3Score(vector: string): number | null {\n // CVSS v3 metric values\n const metricValues: Record<string, Record<string, number>> = {\n AV: { N: 0.85, A: 0.62, L: 0.55, P: 0.2 }, // Attack Vector\n AC: { L: 0.77, H: 0.44 }, // Attack Complexity\n PR: { // Privileges Required (varies by Scope)\n N_U: 0.85, L_U: 0.62, H_U: 0.27,\n N_C: 0.85, L_C: 0.68, H_C: 0.5,\n },\n UI: { N: 0.85, R: 0.62 }, // User Interaction\n C: { H: 0.56, L: 0.22, N: 0 }, // Confidentiality Impact\n I: { H: 0.56, L: 0.22, N: 0 }, // Integrity Impact\n A: { H: 0.56, L: 0.22, N: 0 }, // Availability Impact\n };\n\n // Parse vector string\n const parts = vector.split('/');\n const metrics: Record<string, string> = {};\n for (const part of parts) {\n const [key, value] = part.split(':');\n if (key && value) metrics[key] = value;\n }\n\n // Extract required metrics\n const av = metricValues.AV[metrics.AV];\n const ac = metricValues.AC[metrics.AC];\n const ui = metricValues.UI[metrics.UI];\n const scope = metrics.S; // 'U' = Unchanged, 'C' = Changed\n const c = metricValues.C[metrics.C];\n const i = metricValues.I[metrics.I];\n const a = metricValues.A[metrics.A];\n\n // PR depends on Scope\n const prKey = `${metrics.PR}_${scope}`;\n const pr = metricValues.PR[prKey];\n\n if ([av, ac, pr, ui, c, i, a].some((v) => v === undefined)) {\n return null; // Missing required metrics\n }\n\n // Calculate Impact Sub Score (ISS)\n const iss = 1 - (1 - c) * (1 - i) * (1 - a);\n\n // Calculate Impact\n let impact: number;\n if (scope === 'U') {\n impact = 6.42 * iss;\n } else {\n impact = 7.52 * (iss - 0.029) - 3.25 * Math.pow(iss - 0.02, 15);\n }\n\n // Calculate Exploitability\n const exploitability = 8.22 * av * ac * pr * ui;\n\n // Calculate Base Score\n if (impact <= 0) return 0;\n\n let baseScore: number;\n if (scope === 'U') {\n baseScore = Math.min(impact + exploitability, 10);\n } else {\n baseScore = Math.min(1.08 * (impact + exploitability), 10);\n }\n\n // Round up to 1 decimal place (CVSS spec)\n return Math.ceil(baseScore * 10) / 10;\n }\n\n /** Converts a CVSS score (0-10) to a severity level */\n private scoreToSeverity(score: number): Severity {\n if (score >= 9.0) return 'CRITICAL';\n if (score >= 7.0) return 'HIGH';\n if (score >= 4.0) return 'MEDIUM';\n if (score > 0.0) return 'LOW';\n return 'UNKNOWN';\n }\n\n /** Extracts affected version range for a specific package */\n private extractAffectedRange(vuln: OsvVulnerability, packageName: string): string | undefined {\n if (!vuln.affected) return undefined;\n\n for (const affected of vuln.affected) {\n if (affected.package?.name === packageName && affected.ranges) {\n for (const range of affected.ranges) {\n if (range.events) {\n const introduced = range.events.find((e) => e.introduced)?.introduced;\n const fixed = range.events.find((e) => e.fixed)?.fixed;\n if (introduced && fixed) return `>=${introduced}, <${fixed}`;\n if (introduced) return `>=${introduced}`;\n }\n }\n }\n }\n return undefined;\n }\n\n /** Extracts the fixed version for a specific package */\n private extractFixedVersion(vuln: OsvVulnerability, packageName: string): string | undefined {\n if (!vuln.affected) return undefined;\n\n for (const affected of vuln.affected) {\n if (affected.package?.name === packageName && affected.ranges) {\n for (const range of affected.ranges) {\n if (range.events) {\n const fixed = range.events.find((e) => e.fixed)?.fixed;\n if (fixed) return fixed;\n }\n }\n }\n }\n return undefined;\n }\n\n /** Maps our ecosystem names to OSV ecosystem names */\n private mapEcosystem(ecosystem: string): string {\n const map: Record<string, string> = {\n npm: 'npm',\n nuget: 'NuGet',\n cargo: 'crates.io',\n maven: 'Maven',\n pip: 'PyPI',\n poetry: 'PyPI',\n uv: 'PyPI',\n go: 'Go',\n ruby: 'RubyGems',\n composer: 'Packagist',\n deno: 'JSR', // JSR packages (Deno registry)\n };\n return map[ecosystem] ?? ecosystem;\n }\n}\n\n// ─── OSV API Response Types ─────────────────────────────────────\n\n/** Response from /v1/querybatch - returns minimal vuln info (just id and modified) */\ninterface OsvBatchResponse {\n results: Array<{\n vulns?: OsvBatchVuln[];\n }>;\n}\n\n/** Minimal vulnerability info returned by /v1/querybatch */\ninterface OsvBatchVuln {\n id: string;\n modified?: string;\n}\n\n/** Full vulnerability details from /v1/vulns/{id} */\ninterface OsvVulnerability {\n id: string;\n summary?: string;\n details?: string;\n aliases?: string[];\n published?: string;\n modified?: string;\n severity?: Array<{\n type: string;\n score: string;\n }>;\n affected?: Array<{\n package?: {\n name: string;\n ecosystem: string;\n };\n ranges?: Array<{\n type: string;\n events: Array<{\n introduced?: string;\n fixed?: string;\n last_affected?: string;\n }>;\n }>;\n versions?: string[];\n }>;\n database_specific?: {\n severity?: string;\n [key: string]: unknown;\n };\n references?: Array<{\n type: string;\n url: string;\n }>;\n}\n","import type { CveSource } from './source.interface.js';\nimport type { Dependency, CveCheckResult, Vulnerability, VulnerabilitySource } from '../core/types.js';\nimport { OsvSource } from './osv.js';\n\n/**\n * Aggregates vulnerability data from multiple CVE sources.\n * Deduplicates results by CVE ID across sources.\n */\nexport class CveAggregator {\n private sources: CveSource[];\n\n constructor(sources?: CveSource[]) {\n this.sources = sources ?? [\n new OsvSource(),\n // Future: new NvdSource(), new EuvdSource(), new CisaKevSource()\n ];\n }\n\n /**\n * Checks dependencies against all registered CVE sources.\n * Runs sources in parallel and merges/deduplicates results.\n */\n async check(dependencies: Dependency[]): Promise<CveCheckResult> {\n const startTime = Date.now();\n const sourcesQueried: VulnerabilitySource[] = [];\n const sourceErrors: { source: VulnerabilitySource; error: string }[] = [];\n const allVulns: Vulnerability[] = [];\n\n // Run all sources in parallel\n const results = await Promise.allSettled(\n this.sources.map(async (source) => {\n const vulns = await source.checkDependencies(dependencies);\n return { sourceId: source.sourceId, vulns };\n })\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n sourcesQueried.push(result.value.sourceId);\n allVulns.push(...result.value.vulns);\n } else {\n // Extract the source ID from the error context\n const sourceIndex = results.indexOf(result);\n const sourceId = this.sources[sourceIndex].sourceId;\n sourceErrors.push({\n source: sourceId,\n error: result.reason instanceof Error ? result.reason.message : String(result.reason),\n });\n }\n }\n\n // Deduplicate by CVE ID (prefer the entry with more data)\n const deduplicated = this.deduplicateVulnerabilities(allVulns);\n\n return {\n vulnerabilities: deduplicated,\n sourcesQueried,\n sourceErrors,\n checkDurationMs: Date.now() - startTime,\n };\n }\n\n /**\n * Deduplicates vulnerabilities by ID.\n * When the same CVE appears from multiple sources,\n * keeps the one with more complete data (has CVSS score, has fix version, etc.)\n */\n private deduplicateVulnerabilities(vulns: Vulnerability[]): Vulnerability[] {\n const byKey = new Map<string, Vulnerability>();\n\n for (const vuln of vulns) {\n // Key by (vulnerability ID + package name) to handle the same CVE\n // affecting multiple packages\n const key = `${vuln.id}::${vuln.packageName}`;\n const existing = byKey.get(key);\n\n if (!existing) {\n byKey.set(key, vuln);\n } else {\n // Keep the one with more data\n byKey.set(key, this.pickBetterEntry(existing, vuln));\n }\n }\n\n return Array.from(byKey.values());\n }\n\n /** Picks the vulnerability entry with more complete data */\n private pickBetterEntry(a: Vulnerability, b: Vulnerability): Vulnerability {\n let scoreA = 0;\n let scoreB = 0;\n\n if (a.cvssScore !== undefined) scoreA++;\n if (b.cvssScore !== undefined) scoreB++;\n if (a.fixedVersion) scoreA++;\n if (b.fixedVersion) scoreB++;\n if (a.affectedVersionRange) scoreA++;\n if (b.affectedVersionRange) scoreB++;\n if (a.severity !== 'UNKNOWN') scoreA++;\n if (b.severity !== 'UNKNOWN') scoreB++;\n\n // Merge: start with the lesser entry, overlay with the better one.\n // Strip undefined/null values so they don't overwrite real data.\n const strip = (obj: Record<string, unknown>) =>\n Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined && v !== null));\n\n const winner = scoreB > scoreA\n ? { ...strip(a as unknown as Record<string, unknown>), ...strip(b as unknown as Record<string, unknown>) } as unknown as Vulnerability\n : { ...strip(b as unknown as Record<string, unknown>), ...strip(a as unknown as Record<string, unknown>) } as unknown as Vulnerability;\n\n // Merge aliases\n const allAliases = new Set([...a.aliases, ...b.aliases]);\n winner.aliases = Array.from(allAliases);\n\n // If either says exploited, it's exploited\n winner.exploitedInWild = a.exploitedInWild || b.exploitedInWild;\n\n return winner;\n }\n}\n","import type { Reporter } from './reporter.interface.js';\nimport type { VerimuReport, Vulnerability, Severity } from '../core/types.js';\n\n/** Outputs a human-readable console report */\nexport class ConsoleReporter implements Reporter {\n readonly name = 'console';\n\n report(result: VerimuReport): string {\n const lines: string[] = [];\n\n lines.push('');\n lines.push('┌─────────────────────────────────────────────┐');\n lines.push('│ VERIMU CRA COMPLIANCE SCAN │');\n lines.push('└─────────────────────────────────────────────┘');\n lines.push('');\n\n // Project info\n lines.push(` Project: ${result.project.path}`);\n lines.push(` Ecosystem: ${result.project.ecosystem}`);\n lines.push(` Dependencies: ${result.project.dependencyCount}`);\n lines.push(` Scanned at: ${result.generatedAt}`);\n lines.push('');\n\n // SBOM info\n lines.push(` ✓ SBOM generated (${result.sbom.format}, ${result.sbom.specVersion})`);\n lines.push(` Components: ${result.sbom.componentCount}`);\n if (result.artifacts) {\n lines.push(` Also wrote: ${result.artifacts.spdx.format}, ${result.artifacts.swid.format}`);\n }\n lines.push('');\n\n // CVE results\n const vulns = result.cveCheck.vulnerabilities;\n if (vulns.length === 0) {\n lines.push(' ✓ No known vulnerabilities found');\n } else {\n lines.push(` ⚠ ${vulns.length} vulnerabilit${vulns.length === 1 ? 'y' : 'ies'} found:`);\n lines.push('');\n\n // Sort by severity: CRITICAL → HIGH → MEDIUM → LOW → UNKNOWN\n const sorted = [...vulns].sort((a, b) => severityOrder(a.severity) - severityOrder(b.severity));\n\n for (const vuln of sorted) {\n const badge = severityBadge(vuln.severity);\n const fix = vuln.fixedVersion ? ` → fix: ${vuln.fixedVersion}` : '';\n lines.push(` ${badge} ${vuln.id}`);\n lines.push(` ${vuln.packageName}@${vuln.affectedVersionRange ?? '?'}${fix}`);\n lines.push(` ${vuln.summary.slice(0, 100)}`);\n if (vuln.exploitedInWild) {\n lines.push(` 🔴 ACTIVELY EXPLOITED — 24h CRA reporting required`);\n }\n lines.push('');\n }\n }\n\n // Usage-context results (only when CVEs were found and context stage ran)\n if (result.usageContext?.triggered) {\n const findings = result.usageContext.packageFindings;\n const directEvidence = findings.filter((f) => f.status === 'direct_evidence').length;\n const indirectNoEvidence = findings.filter((f) => f.status === 'indirect_no_evidence').length;\n const unsupported = findings.filter((f) => f.status === 'unsupported').length;\n const analysisErrors = findings.filter((f) => f.status === 'analysis_error').length;\n\n lines.push('');\n lines.push(` ✓ Usage context analyzed (${result.usageContext.durationMs}ms)`);\n lines.push(` Snippets: ${result.usageContext.totalSnippets} (±${result.usageContext.numContextLines} lines)`);\n lines.push(\n ` Findings: direct_evidence=${directEvidence}, ` +\n `indirect_no_evidence=${indirectNoEvidence}, ` +\n `unsupported=${unsupported}, analysis_error=${analysisErrors}`\n );\n if (result.usageContext.artifactPath) {\n lines.push(` Artifact: ${result.usageContext.artifactPath}`);\n }\n if (result.usageContext.errors.length > 0) {\n lines.push(` Non-fatal analyzer errors: ${result.usageContext.errors.length}`);\n }\n }\n\n // Sources\n const sources = result.cveCheck.sourcesQueried.join(', ');\n lines.push(` Sources queried: ${sources} (${result.cveCheck.checkDurationMs}ms)`);\n\n if (result.cveCheck.sourceErrors.length > 0) {\n for (const err of result.cveCheck.sourceErrors) {\n lines.push(` ⚠ ${err.source}: ${err.error}`);\n }\n }\n\n // Summary\n lines.push('');\n lines.push(' ─── Summary ───');\n lines.push(` Total: ${result.summary.totalVulnerabilities} | ` +\n `Critical: ${result.summary.critical} | ` +\n `High: ${result.summary.high} | ` +\n `Medium: ${result.summary.medium} | ` +\n `Low: ${result.summary.low}`);\n\n if (result.summary.exploitedInWild > 0) {\n lines.push(` 🔴 ${result.summary.exploitedInWild} actively exploited — immediate action required`);\n }\n\n lines.push('');\n return lines.join('\\n');\n }\n}\n\nfunction severityOrder(s: Severity): number {\n const order: Record<Severity, number> = {\n CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3, UNKNOWN: 4,\n };\n return order[s] ?? 5;\n}\n\nfunction severityBadge(s: Severity): string {\n const badges: Record<Severity, string> = {\n CRITICAL: '[CRIT]',\n HIGH: '[HIGH]',\n MEDIUM: '[MED] ',\n LOW: '[LOW] ',\n UNKNOWN: '[???] ',\n };\n return badges[s] ?? '[???] ';\n}\n","/**\n * Verimu API client — communicates with the Verimu backend.\n *\n * Used by the CLI and scan pipeline to:\n * 1. Upsert a project (create-if-not-exists)\n * 2. Upload SBOM + trigger CVE scan\n */\n\nimport type { Ecosystem, UsageContextResult } from '../core/types.js';\n\nconst DEFAULT_API_BASE = 'https://api.verimu.com';\n\nexport interface UpsertProjectResponse {\n project: {\n id: string;\n name: string;\n ecosystem: string;\n repository_url: string | null;\n platform: string | null;\n };\n created: boolean;\n}\n\nexport interface ScanResponse {\n project: {\n id: string;\n name: string;\n };\n scan_results: Array<{\n dependency_id: string;\n dependency_name: string;\n version: string;\n vulnerabilities: Array<{\n cve_id: string;\n severity?: string | null;\n summary?: string | null;\n description?: string | null;\n fixed_version?: string | null;\n sources?: Array<{\n name?: string;\n url?: string;\n data?: {\n fixed_version?: string | null;\n } | null;\n }> | null;\n }> | null;\n }>;\n summary: {\n total_dependencies: number;\n vulnerable_dependencies: number;\n };\n}\n\nexport interface SbomUploadBundle {\n cyclonedx: Record<string, unknown>;\n spdx?: Record<string, unknown>;\n swid?: string;\n usage_context?: Omit<UsageContextResult, 'artifactPath'>;\n}\n\nexport class VerimuApiClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(apiKey: string, baseUrl?: string) {\n this.apiKey = apiKey;\n this.baseUrl = (baseUrl ?? DEFAULT_API_BASE).replace(/\\/+$/, '');\n }\n\n /**\n * Upsert a project — finds by name or creates it.\n * Used so `npx verimu` auto-registers projects without manual dashboard setup.\n */\n async upsertProject(opts: {\n name: string;\n ecosystem: Ecosystem;\n repositoryUrl?: string;\n platform?: string;\n }): Promise<UpsertProjectResponse> {\n const res = await fetch(`${this.baseUrl}/api/projects/upsert`, {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify({\n name: opts.name,\n ecosystem: this.mapEcosystem(opts.ecosystem),\n repository_url: opts.repositoryUrl ?? null,\n platform: opts.platform ?? null,\n }),\n });\n\n if (!res.ok) {\n const body = await res.text();\n throw new Error(`Verimu API: upsert project failed (${res.status}): ${body}`);\n }\n\n return res.json() as Promise<UpsertProjectResponse>;\n }\n\n /**\n * Upload a software inventory artifact payload to a project and trigger CVE scanning.\n *\n * Backward-compatible:\n * - string payloads are treated as legacy raw CycloneDX JSON\n * - object payloads can include CycloneDX + SPDX + SWID together\n */\n async uploadSbom(projectId: string, payload: string | SbomUploadBundle): Promise<ScanResponse> {\n const body = typeof payload === 'string'\n ? JSON.stringify(JSON.parse(payload))\n : JSON.stringify(payload);\n\n const res = await fetch(`${this.baseUrl}/api/projects/${projectId}/scan`, {\n method: 'POST',\n headers: this.headers(),\n body,\n });\n\n if (!res.ok) {\n const body = await res.text();\n throw new Error(`Verimu API: upload SBOM failed (${res.status}): ${body}`);\n }\n\n return res.json() as Promise<ScanResponse>;\n }\n\n private headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n };\n }\n\n /**\n * Maps internal ecosystem names to what the backend expects.\n * Currently 1:1, but keeps the mapping explicit.\n */\n private mapEcosystem(eco: Ecosystem): string {\n const map: Record<Ecosystem, string> = {\n npm: 'npm',\n pip: 'pip',\n poetry: 'poetry',\n uv: 'uv',\n maven: 'maven',\n nuget: 'nuget',\n go: 'gomod',\n cargo: 'cargo',\n ruby: 'bundler',\n composer: 'composer',\n deno: 'deno',\n };\n return map[eco] ?? eco;\n }\n}\n","import { relative } from 'path';\nimport type { UsageSnippet, UsageSnippetMatchKind } from '../core/types.js';\n\nexport const DEFAULT_NUM_CONTEXT_LINES = 4;\nexport const MIN_CONTEXT_LINES = 0;\nexport const MAX_CONTEXT_LINES = 20;\n\nexport function normalizeNumContextLines(value: number | undefined): number {\n if (!Number.isFinite(value)) {\n return DEFAULT_NUM_CONTEXT_LINES;\n }\n\n const rounded = Math.floor(value as number);\n if (rounded < MIN_CONTEXT_LINES) return MIN_CONTEXT_LINES;\n if (rounded > MAX_CONTEXT_LINES) return MAX_CONTEXT_LINES;\n return rounded;\n}\n\nexport function buildSnippet(params: {\n projectPath: string;\n filePath: string;\n sourceText: string;\n line: number;\n numContextLines: number;\n matchKind: UsageSnippetMatchKind;\n calledSymbol?: string;\n confidence?: number;\n}): UsageSnippet {\n const {\n projectPath,\n filePath,\n sourceText,\n line,\n numContextLines,\n matchKind,\n calledSymbol,\n confidence = 0.8,\n } = params;\n\n const lines = sourceText.split(/\\r?\\n/);\n const centerLine = Math.max(1, Math.min(line, Math.max(lines.length, 1)));\n const startLine = Math.max(1, centerLine - numContextLines);\n const endLine = Math.min(lines.length || 1, centerLine + numContextLines);\n const code = lines.slice(startLine - 1, endLine).join('\\n');\n\n return {\n filePath: relative(projectPath, filePath),\n startLine,\n endLine,\n code,\n matchKind,\n calledSymbol,\n confidence,\n };\n}\n\nexport function dedupeSnippets(snippets: UsageSnippet[]): UsageSnippet[] {\n const seen = new Set<string>();\n const result: UsageSnippet[] = [];\n\n for (const snippet of snippets) {\n const key = [\n snippet.filePath,\n snippet.startLine,\n snippet.endLine,\n snippet.matchKind,\n snippet.calledSymbol ?? '',\n ].join(':');\n\n if (seen.has(key)) continue;\n seen.add(key);\n result.push(snippet);\n }\n\n return result;\n}\n","import { readdir, readFile } from 'fs/promises';\nimport { join } from 'path';\nimport { parse } from '@babel/parser';\nimport traverse from '@babel/traverse';\nimport {\n isIdentifier,\n isImportSpecifier,\n isImportDefaultSpecifier,\n isImportNamespaceSpecifier,\n isStringLiteral,\n isCallExpression,\n isImport,\n isMemberExpression,\n isOptionalMemberExpression,\n isVariableDeclarator,\n isObjectPattern,\n isArrayPattern,\n isRestElement,\n isAssignmentPattern,\n isTSAsExpression,\n isTSSatisfiesExpression,\n isTSTypeAssertion,\n isParenthesizedExpression,\n} from '@babel/types';\nimport type {\n Expression,\n OptionalMemberExpression,\n} from '@babel/types';\nimport type { Ecosystem, UsageContextError, UsageSnippetMatchKind } from '../../core/types.js';\nimport { buildSnippet, dedupeSnippets } from '../snippet-extractor.js';\nimport type {\n AnalyzerRunContext,\n AnalyzerRunResult,\n PackageAnalysisResult,\n UsageContextAnalyzer,\n VulnerablePackageInput,\n} from './analyzer.interface.js';\n\nconst JS_EXTENSIONS = new Set([\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n]);\n\nconst IGNORED_DIRS = new Set([\n '.git',\n '.hg',\n '.svn',\n 'node_modules',\n 'dist',\n 'build',\n 'coverage',\n '.next',\n '.nuxt',\n '.turbo',\n]);\n\ninterface ImportTarget {\n packageName: string;\n ecosystemHint: Ecosystem | null;\n}\n\ninterface MatchCandidate {\n packageKey: string;\n line: number;\n matchKind: UsageSnippetMatchKind;\n calledSymbol?: string;\n confidence: number;\n}\n\nexport class JsAstAnalyzer implements UsageContextAnalyzer {\n readonly name = 'js-ast-analyzer';\n private readonly ecosystems = new Set<Ecosystem>(['npm', 'deno']);\n\n supports(ecosystem: Ecosystem): boolean {\n return this.ecosystems.has(ecosystem);\n }\n\n async analyze(context: AnalyzerRunContext): Promise<AnalyzerRunResult> {\n const packageMap = this.buildPackageMaps(context.packages);\n const resultMap = new Map<string, PackageAnalysisResult>();\n const snippetKeyMap = new Map<string, Set<string>>();\n const errors: UsageContextError[] = [];\n\n for (const pkg of context.packages) {\n const key = this.packageKey(pkg.ecosystem, pkg.packageName);\n resultMap.set(key, {\n packageName: pkg.packageName,\n ecosystem: pkg.ecosystem,\n status: 'indirect_no_evidence',\n snippets: [],\n });\n snippetKeyMap.set(key, new Set<string>());\n }\n\n let snippetsProduced = 0;\n let files: string[];\n\n try {\n files = await collectSourceFiles(context.projectPath);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n return {\n packages: context.packages.map((pkg) => ({\n packageName: pkg.packageName,\n ecosystem: pkg.ecosystem,\n status: 'analysis_error',\n snippets: [],\n notes: 'Failed to enumerate JS/TS source files',\n })),\n errors: [{ analyzer: this.name, ecosystem: context.ecosystem, error: message }],\n snippetsProduced: 0,\n };\n }\n\n for (const filePath of files) {\n if (snippetsProduced >= context.maxSnippetsTotal) break;\n\n let sourceText: string;\n try {\n sourceText = await readFile(filePath, 'utf-8');\n } catch (err: unknown) {\n errors.push({\n analyzer: this.name,\n ecosystem: context.ecosystem,\n error: `Failed to read ${filePath}: ${err instanceof Error ? err.message : String(err)}`,\n });\n continue;\n }\n\n let ast;\n try {\n ast = parse(sourceText, {\n sourceType: 'unambiguous',\n plugins: ['typescript', 'jsx'],\n allowReturnOutsideFunction: true,\n });\n } catch (err: unknown) {\n errors.push({\n analyzer: this.name,\n ecosystem: context.ecosystem,\n error: `Failed to parse ${filePath}: ${err instanceof Error ? err.message : String(err)}`,\n });\n continue;\n }\n\n const matchCandidates: MatchCandidate[] = [];\n const matchSeen = new Set<string>();\n const symbolToPackage = new Map<string, string>();\n\n const addMatch = (\n packageKey: string,\n line: number,\n matchKind: UsageSnippetMatchKind,\n calledSymbol?: string,\n confidence = 0.8,\n ) => {\n const candidateKey = `${packageKey}:${line}:${matchKind}:${calledSymbol ?? ''}`;\n if (matchSeen.has(candidateKey)) return;\n matchSeen.add(candidateKey);\n matchCandidates.push({ packageKey, line, matchKind, calledSymbol, confidence });\n };\n\n (traverse as unknown as (node: unknown, visitor: Record<string, unknown>) => void)(ast, {\n ImportDeclaration: (path: any) => {\n const source = path.node.source;\n if (!isStringLiteral(source)) return;\n\n const pkgKey = findPackageKey(resolveImportTarget(source.value), packageMap.byName);\n if (!pkgKey) return;\n\n addMatch(pkgKey, path.node.loc?.start.line ?? 1, 'import', undefined, 0.95);\n\n for (const specifier of path.node.specifiers) {\n if (\n isImportDefaultSpecifier(specifier) ||\n isImportNamespaceSpecifier(specifier) ||\n isImportSpecifier(specifier)\n ) {\n symbolToPackage.set(specifier.local.name, pkgKey);\n }\n }\n },\n\n ExportNamedDeclaration: (path: any) => {\n const source = path.node.source;\n if (!source || !isStringLiteral(source)) return;\n\n const pkgKey = findPackageKey(resolveImportTarget(source.value), packageMap.byName);\n if (!pkgKey) return;\n\n addMatch(pkgKey, path.node.loc?.start.line ?? 1, 'export_from', undefined, 0.85);\n },\n\n ExportAllDeclaration: (path: any) => {\n const source = path.node.source;\n if (!isStringLiteral(source)) return;\n\n const pkgKey = findPackageKey(resolveImportTarget(source.value), packageMap.byName);\n if (!pkgKey) return;\n\n addMatch(pkgKey, path.node.loc?.start.line ?? 1, 'export_from', undefined, 0.85);\n },\n\n VariableDeclarator: (path: any) => {\n const node = path.node;\n if (!isVariableDeclarator(node)) return;\n if (!node.init || !isCallExpression(node.init)) return;\n if (!isIdentifier(node.init.callee, { name: 'require' })) return;\n\n const firstArg = node.init.arguments[0];\n if (!firstArg || !isStringLiteral(firstArg)) return;\n\n const pkgKey = findPackageKey(resolveImportTarget(firstArg.value), packageMap.byName);\n if (!pkgKey) return;\n\n addMatch(pkgKey, node.loc?.start.line ?? 1, 'require', undefined, 0.95);\n\n for (const identifier of collectIdentifiers(node.id)) {\n symbolToPackage.set(identifier, pkgKey);\n }\n },\n\n CallExpression: (path: any) => {\n const node = path.node;\n\n if (isIdentifier(node.callee, { name: 'require' })) {\n const firstArg = node.arguments[0];\n if (firstArg && isStringLiteral(firstArg)) {\n const pkgKey = findPackageKey(resolveImportTarget(firstArg.value), packageMap.byName);\n if (pkgKey) {\n addMatch(pkgKey, node.loc?.start.line ?? 1, 'require', undefined, 0.9);\n }\n }\n }\n\n if (isImport(node.callee)) return;\n\n const callMatch = resolveCallMatch(node.callee as Expression, symbolToPackage);\n if (!callMatch) return;\n\n addMatch(\n callMatch.packageKey,\n node.loc?.start.line ?? 1,\n 'call',\n callMatch.calledSymbol,\n 0.75,\n );\n },\n\n ImportExpression: (path: any) => {\n const source = path.node.source;\n if (!isStringLiteral(source)) return;\n\n const pkgKey = findPackageKey(resolveImportTarget(source.value), packageMap.byName);\n if (!pkgKey) return;\n\n addMatch(pkgKey, path.node.loc?.start.line ?? 1, 'dynamic_import', undefined, 0.9);\n },\n });\n\n for (const candidate of matchCandidates) {\n if (snippetsProduced >= context.maxSnippetsTotal) break;\n\n const packageResult = resultMap.get(candidate.packageKey);\n if (!packageResult) continue;\n if (packageResult.snippets.length >= context.maxSnippetsPerPackage) continue;\n\n const snippet = buildSnippet({\n projectPath: context.projectPath,\n filePath,\n sourceText,\n line: candidate.line,\n numContextLines: context.numContextLines,\n matchKind: candidate.matchKind,\n calledSymbol: candidate.calledSymbol,\n confidence: candidate.confidence,\n });\n\n const dedupeKey = `${snippet.filePath}:${snippet.startLine}:${snippet.endLine}:${snippet.matchKind}:${snippet.calledSymbol ?? ''}`;\n const packageSnippetKeys = snippetKeyMap.get(candidate.packageKey);\n if (!packageSnippetKeys || packageSnippetKeys.has(dedupeKey)) continue;\n\n packageSnippetKeys.add(dedupeKey);\n packageResult.snippets.push(snippet);\n snippetsProduced++;\n }\n }\n\n for (const result of resultMap.values()) {\n result.snippets = dedupeSnippets(result.snippets);\n if (result.snippets.length > 0) {\n result.status = 'direct_evidence';\n } else if (files.length === 0) {\n result.notes = 'No JS/TS source files found for analysis';\n }\n }\n\n return {\n packages: Array.from(resultMap.values()),\n errors,\n snippetsProduced,\n };\n }\n\n private buildPackageMaps(packages: VulnerablePackageInput[]): {\n byName: Map<string, Array<{ key: string; ecosystem: Ecosystem }>>;\n } {\n const byName = new Map<string, Array<{ key: string; ecosystem: Ecosystem }>>();\n\n for (const pkg of packages) {\n const key = this.packageKey(pkg.ecosystem, pkg.packageName);\n const existing = byName.get(pkg.packageName) ?? [];\n existing.push({ key, ecosystem: pkg.ecosystem });\n byName.set(pkg.packageName, existing);\n }\n\n return { byName };\n }\n\n private packageKey(ecosystem: Ecosystem, packageName: string): string {\n return `${ecosystem}::${packageName}`;\n }\n}\n\nasync function collectSourceFiles(rootPath: string): Promise<string[]> {\n const files: string[] = [];\n\n async function walk(dirPath: string): Promise<void> {\n const entries = await readdir(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dirPath, entry.name);\n\n if (entry.isDirectory()) {\n if (IGNORED_DIRS.has(entry.name)) continue;\n await walk(fullPath);\n continue;\n }\n\n if (!entry.isFile()) continue;\n\n const ext = extensionOf(entry.name);\n if (!JS_EXTENSIONS.has(ext)) continue;\n\n files.push(fullPath);\n }\n }\n\n await walk(rootPath);\n return files;\n}\n\nfunction extensionOf(fileName: string): string {\n const index = fileName.lastIndexOf('.');\n return index === -1 ? '' : fileName.slice(index);\n}\n\nfunction resolveImportTarget(specifier: string): ImportTarget | null {\n if (\n specifier.startsWith('./') ||\n specifier.startsWith('../') ||\n specifier.startsWith('/') ||\n specifier.startsWith('file:') ||\n specifier.startsWith('http:') ||\n specifier.startsWith('https:') ||\n specifier.startsWith('data:')\n ) {\n return null;\n }\n\n if (specifier.startsWith('npm:')) {\n const packageName = parsePackageNameFromSpecifier(specifier.slice(4));\n return packageName ? { packageName, ecosystemHint: 'npm' } : null;\n }\n\n if (specifier.startsWith('jsr:')) {\n const packageName = parsePackageNameFromSpecifier(specifier.slice(4));\n return packageName ? { packageName, ecosystemHint: 'deno' } : null;\n }\n\n const packageName = parsePackageNameFromSpecifier(specifier);\n return packageName ? { packageName, ecosystemHint: 'npm' } : null;\n}\n\nfunction parsePackageNameFromSpecifier(rawSpecifier: string): string | null {\n const input = rawSpecifier.trim();\n if (!input) return null;\n\n if (input.startsWith('@')) {\n const scopedMatch = input.match(/^(@[^/]+\\/[^/@]+)(?:@[^/]+)?(?:\\/.*)?$/);\n return scopedMatch ? scopedMatch[1] : null;\n }\n\n const unscopedMatch = input.match(/^([^/@]+)(?:@[^/]+)?(?:\\/.*)?$/);\n return unscopedMatch ? unscopedMatch[1] : null;\n}\n\nfunction findPackageKey(\n target: ImportTarget | null,\n packagesByName: Map<string, Array<{ key: string; ecosystem: Ecosystem }>>,\n): string | null {\n if (!target) return null;\n\n const candidates = packagesByName.get(target.packageName);\n if (!candidates || candidates.length === 0) return null;\n\n if (target.ecosystemHint) {\n const exact = candidates.find((candidate) => candidate.ecosystem === target.ecosystemHint);\n if (exact) return exact.key;\n }\n\n return candidates[0].key;\n}\n\nfunction collectIdentifiers(pattern: unknown): string[] {\n if (isIdentifier(pattern as any)) return [(pattern as any).name as string];\n\n if (isObjectPattern(pattern as any)) {\n const objectPattern = pattern as any;\n const names: string[] = [];\n for (const prop of objectPattern.properties) {\n if (isRestElement(prop)) {\n names.push(...collectIdentifiers(prop.argument));\n continue;\n }\n\n if ('value' in prop) {\n names.push(...collectIdentifiers(prop.value));\n }\n }\n return names;\n }\n\n if (isArrayPattern(pattern as any)) {\n const arrayPattern = pattern as any;\n const names: string[] = [];\n for (const elem of arrayPattern.elements) {\n if (!elem) continue;\n names.push(...collectIdentifiers(elem));\n }\n return names;\n }\n\n if (isAssignmentPattern(pattern as any)) {\n return collectIdentifiers((pattern as any).left);\n }\n\n if (isRestElement(pattern as any)) {\n return collectIdentifiers((pattern as any).argument);\n }\n\n return [];\n}\n\nfunction resolveCallMatch(\n callee: Expression,\n symbolToPackage: Map<string, string>,\n): { packageKey: string; calledSymbol: string } | null {\n const normalized = unwrapExpression(callee);\n\n if (isIdentifier(normalized)) {\n const packageKey = symbolToPackage.get(normalized.name);\n if (!packageKey) return null;\n return { packageKey, calledSymbol: normalized.name };\n }\n\n if (isMemberExpression(normalized) || isOptionalMemberExpression(normalized)) {\n return resolveMemberCallMatch(normalized, symbolToPackage);\n }\n\n return null;\n}\n\nfunction unwrapExpression(expression: Expression): Expression {\n if (isTSAsExpression(expression)) return unwrapExpression(expression.expression);\n if (isTSTypeAssertion(expression)) return unwrapExpression(expression.expression);\n if (isTSSatisfiesExpression(expression)) return unwrapExpression(expression.expression);\n if (isParenthesizedExpression(expression)) return unwrapExpression(expression.expression);\n return expression;\n}\n\nfunction resolveMemberCallMatch(\n memberExpression: import('@babel/types').MemberExpression | OptionalMemberExpression,\n symbolToPackage: Map<string, string>,\n): { packageKey: string; calledSymbol: string } | null {\n const objectExpr = unwrapExpression(memberExpression.object as Expression);\n if (!isIdentifier(objectExpr)) return null;\n\n const packageKey = symbolToPackage.get(objectExpr.name);\n if (!packageKey) return null;\n\n const propertyName = propertyNameOf(memberExpression);\n if (!propertyName) {\n return { packageKey, calledSymbol: objectExpr.name };\n }\n\n return { packageKey, calledSymbol: `${objectExpr.name}.${propertyName}` };\n}\n\nfunction propertyNameOf(\n memberExpression: import('@babel/types').MemberExpression | OptionalMemberExpression,\n): string | null {\n if (memberExpression.computed) {\n const prop = memberExpression.property;\n if (isStringLiteral(prop)) return prop.value;\n return null;\n }\n\n if (isIdentifier(memberExpression.property)) {\n return memberExpression.property.name;\n }\n\n if (isStringLiteral(memberExpression.property)) {\n return memberExpression.property.value;\n }\n\n return null;\n}\n","import type {\n AnalyzerRunContext,\n AnalyzerRunResult,\n PackageAnalysisResult,\n UsageContextAnalyzer,\n} from './analyzer.interface.js';\nimport type { Ecosystem } from '../../core/types.js';\n\nexport class UnsupportedAnalyzer implements UsageContextAnalyzer {\n readonly name: string;\n private readonly ecosystems: Set<Ecosystem>;\n private readonly note: string;\n\n constructor(name: string, ecosystems: Ecosystem[], note: string) {\n this.name = name;\n this.ecosystems = new Set(ecosystems);\n this.note = note;\n }\n\n supports(ecosystem: Ecosystem): boolean {\n return this.ecosystems.has(ecosystem);\n }\n\n async analyze(context: AnalyzerRunContext): Promise<AnalyzerRunResult> {\n const packages: PackageAnalysisResult[] = context.packages.map((pkg) => ({\n packageName: pkg.packageName,\n ecosystem: pkg.ecosystem,\n status: 'unsupported',\n snippets: [],\n notes: this.note,\n }));\n\n return {\n packages,\n errors: [],\n snippetsProduced: 0,\n };\n }\n}\n","import type {\n Dependency,\n Ecosystem,\n UsageContextEcosystemStatus,\n UsageContextError,\n UsageContextLlmPayload,\n UsageContextResult,\n UsageContextVulnerabilityFinding,\n Vulnerability,\n} from '../core/types.js';\nimport { normalizeNumContextLines } from './snippet-extractor.js';\nimport type {\n AnalyzerRunContext,\n PackageAnalysisResult,\n UsageContextAnalyzer,\n VulnerablePackageInput,\n} from './analyzers/analyzer.interface.js';\nimport { JsAstAnalyzer } from './analyzers/js-ast-analyzer.js';\nimport { UnsupportedAnalyzer } from './analyzers/unsupported-analyzer.js';\n\nconst DEFAULT_MAX_SNIPPETS_PER_PACKAGE = 20;\nconst DEFAULT_MAX_SNIPPETS_TOTAL = 500;\n\nexport interface UsageContextEngineInput {\n projectPath: string;\n dependencies: Dependency[];\n vulnerabilities: Vulnerability[];\n numContextLines?: number;\n maxSnippetsPerPackage?: number;\n maxSnippetsTotal?: number;\n}\n\nexport class UsageContextEngine {\n private readonly analyzers: UsageContextAnalyzer[];\n\n constructor(analyzers?: UsageContextAnalyzer[]) {\n this.analyzers = analyzers ?? [\n new JsAstAnalyzer(),\n new UnsupportedAnalyzer(\n 'python-ast-analyzer',\n ['pip', 'poetry', 'uv'],\n 'Python AST analyzer is not yet implemented in this release',\n ),\n new UnsupportedAnalyzer(\n 'java-ast-analyzer',\n ['maven'],\n 'Java AST analyzer is not yet implemented in this release',\n ),\n new UnsupportedAnalyzer(\n 'dotnet-ast-analyzer',\n ['nuget'],\n 'NuGet/C# AST analyzer is not yet implemented in this release',\n ),\n new UnsupportedAnalyzer(\n 'rust-ast-analyzer',\n ['cargo'],\n 'Rust AST analyzer is not yet implemented in this release',\n ),\n new UnsupportedAnalyzer(\n 'go-ast-analyzer',\n ['go'],\n 'Go AST analyzer is not yet implemented in this release',\n ),\n new UnsupportedAnalyzer(\n 'ruby-ast-analyzer',\n ['ruby'],\n 'Ruby AST analyzer is not yet implemented in this release',\n ),\n new UnsupportedAnalyzer(\n 'php-ast-analyzer',\n ['composer'],\n 'PHP AST analyzer is not yet implemented in this release',\n ),\n ];\n }\n\n async analyze(input: UsageContextEngineInput): Promise<UsageContextResult> {\n const startTime = Date.now();\n const numContextLines = normalizeNumContextLines(input.numContextLines);\n const maxSnippetsPerPackage = this.normalizePositiveInt(\n input.maxSnippetsPerPackage,\n DEFAULT_MAX_SNIPPETS_PER_PACKAGE,\n );\n const maxSnippetsTotal = this.normalizePositiveInt(\n input.maxSnippetsTotal,\n DEFAULT_MAX_SNIPPETS_TOTAL,\n );\n\n const packageInputs = this.buildVulnerablePackages(input.vulnerabilities, input.dependencies);\n const findings: UsageContextVulnerabilityFinding[] = [];\n const llmPayload: UsageContextLlmPayload[] = [];\n const ecosystemStatus: UsageContextEcosystemStatus[] = [];\n const errors: UsageContextError[] = [];\n\n let remainingSnippets = maxSnippetsTotal;\n\n for (const [ecosystem, packages] of groupByEcosystem(packageInputs)) {\n const analyzer = this.pickAnalyzer(ecosystem);\n if (!analyzer) {\n const note = `No analyzer configured for ecosystem ${ecosystem}`;\n ecosystemStatus.push({\n ecosystem,\n analyzer: 'none',\n status: 'error',\n vulnerablePackages: packages.length,\n snippetsFound: 0,\n note,\n });\n\n errors.push({ analyzer: 'none', ecosystem, error: note });\n\n for (const pkg of packages) {\n this.addFindingsForPackage({\n packageInput: pkg,\n packageResult: {\n packageName: pkg.packageName,\n ecosystem: pkg.ecosystem,\n status: 'analysis_error',\n snippets: [],\n notes: note,\n },\n findings,\n llmPayload,\n });\n }\n continue;\n }\n\n const runContext: AnalyzerRunContext = {\n projectPath: input.projectPath,\n ecosystem,\n packages,\n numContextLines,\n maxSnippetsPerPackage,\n maxSnippetsTotal: remainingSnippets,\n };\n\n try {\n const result = await analyzer.analyze(runContext);\n const resultByKey = new Map(\n result.packages.map((pkg) => [packageKey(pkg.ecosystem, pkg.packageName), pkg]),\n );\n\n errors.push(...result.errors);\n remainingSnippets = Math.max(0, remainingSnippets - result.snippetsProduced);\n\n let snippetsFound = 0;\n let unsupportedCount = 0;\n let analysisErrorCount = 0;\n\n for (const pkg of packages) {\n const analyzed = resultByKey.get(packageKey(pkg.ecosystem, pkg.packageName)) ?? {\n packageName: pkg.packageName,\n ecosystem: pkg.ecosystem,\n status: 'analysis_error',\n snippets: [],\n notes: 'Analyzer returned no package result',\n };\n\n if (analyzed.status === 'unsupported') unsupportedCount += 1;\n if (analyzed.status === 'analysis_error') analysisErrorCount += 1;\n snippetsFound += analyzed.snippets.length;\n\n this.addFindingsForPackage({\n packageInput: pkg,\n packageResult: analyzed,\n findings,\n llmPayload,\n });\n }\n\n ecosystemStatus.push({\n ecosystem,\n analyzer: analyzer.name,\n status:\n analysisErrorCount === packages.length\n ? 'error'\n : unsupportedCount === packages.length\n ? 'unsupported'\n : 'analyzed',\n vulnerablePackages: packages.length,\n snippetsFound,\n note: result.errors.length > 0 ? `${result.errors.length} non-fatal analyzer errors` : undefined,\n });\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n\n errors.push({ analyzer: analyzer.name, ecosystem, error: message });\n ecosystemStatus.push({\n ecosystem,\n analyzer: analyzer.name,\n status: 'error',\n vulnerablePackages: packages.length,\n snippetsFound: 0,\n note: message,\n });\n\n for (const pkg of packages) {\n this.addFindingsForPackage({\n packageInput: pkg,\n packageResult: {\n packageName: pkg.packageName,\n ecosystem: pkg.ecosystem,\n status: 'analysis_error',\n snippets: [],\n notes: 'Analyzer execution failed',\n },\n findings,\n llmPayload,\n });\n }\n }\n }\n\n const totalSnippets = findings.reduce((sum, finding) => sum + finding.evidenceCount, 0);\n\n return {\n triggered: true,\n durationMs: Date.now() - startTime,\n numContextLines,\n maxSnippetsPerPackage,\n maxSnippetsTotal,\n totalSnippets,\n packageFindings: findings,\n ecosystemStatus,\n errors,\n llmPayload,\n };\n }\n\n private addFindingsForPackage(params: {\n packageInput: VulnerablePackageInput;\n packageResult: PackageAnalysisResult;\n findings: UsageContextVulnerabilityFinding[];\n llmPayload: UsageContextLlmPayload[];\n }): void {\n const { packageInput, packageResult, findings, llmPayload } = params;\n\n for (const vulnerability of packageInput.vulnerabilities) {\n const finding: UsageContextVulnerabilityFinding = {\n vulnerabilityId: vulnerability.id,\n packageName: packageInput.packageName,\n ecosystem: packageInput.ecosystem,\n directDependency: packageInput.directDependency,\n status: packageResult.status,\n snippets: packageResult.snippets,\n evidenceCount: packageResult.snippets.length,\n notes: packageResult.notes,\n };\n\n findings.push(finding);\n llmPayload.push({\n vulnerability: {\n id: vulnerability.id,\n aliases: vulnerability.aliases,\n severity: vulnerability.severity,\n summary: vulnerability.summary,\n affectedVersionRange: vulnerability.affectedVersionRange,\n fixedVersion: vulnerability.fixedVersion,\n referenceUrl: vulnerability.referenceUrl,\n },\n package: {\n name: packageInput.packageName,\n ecosystem: packageInput.ecosystem,\n directDependency: packageInput.directDependency,\n },\n status: finding.status,\n evidenceCount: finding.evidenceCount,\n snippets: finding.snippets,\n notes: finding.notes,\n });\n }\n }\n\n private buildVulnerablePackages(\n vulnerabilities: Vulnerability[],\n dependencies: Dependency[],\n ): VulnerablePackageInput[] {\n const directMap = new Map<string, boolean>();\n\n for (const dependency of dependencies) {\n const key = packageKey(dependency.ecosystem, dependency.name);\n const existing = directMap.get(key) ?? false;\n directMap.set(key, existing || dependency.direct);\n }\n\n const grouped = new Map<string, VulnerablePackageInput>();\n\n for (const vulnerability of vulnerabilities) {\n const key = packageKey(vulnerability.ecosystem, vulnerability.packageName);\n const existing = grouped.get(key);\n\n if (existing) {\n existing.vulnerabilities.push(vulnerability);\n } else {\n grouped.set(key, {\n packageName: vulnerability.packageName,\n ecosystem: vulnerability.ecosystem,\n directDependency: directMap.has(key) ? directMap.get(key) ?? false : null,\n vulnerabilities: [vulnerability],\n });\n }\n }\n\n return Array.from(grouped.values());\n }\n\n private pickAnalyzer(ecosystem: Ecosystem): UsageContextAnalyzer | null {\n return this.analyzers.find((analyzer) => analyzer.supports(ecosystem)) ?? null;\n }\n\n private normalizePositiveInt(value: number | undefined, fallback: number): number {\n if (!Number.isFinite(value)) return fallback;\n const n = Math.floor(value as number);\n return n > 0 ? n : fallback;\n }\n}\n\nfunction packageKey(ecosystem: Ecosystem, packageName: string): string {\n return `${ecosystem}::${packageName}`;\n}\n\nfunction groupByEcosystem(\n packages: VulnerablePackageInput[],\n): Array<[Ecosystem, VulnerablePackageInput[]]> {\n const grouped = new Map<Ecosystem, VulnerablePackageInput[]>();\n\n for (const pkg of packages) {\n const existing = grouped.get(pkg.ecosystem) ?? [];\n existing.push(pkg);\n grouped.set(pkg.ecosystem, existing);\n }\n\n return Array.from(grouped.entries());\n}\n"],"mappings":"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GAAE,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,KAAI,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,KAAI,GAAE,IAAG,KAAI,KAAI,KAAI,IAAG,KAAI,MAAK,IAAG,IAAG,MAAK,IAAG,GAAE,IAAG,MAAK,GAAE,KAAI,MAAK,IAAG,MAAK,KAAI,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,MAAK,IAAG,IAAG,IAAG,KAAI,MAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,KAAI,MAAK,KAAI,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,MAAK,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,MAAK,IAAG,GAAE,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,MAAK,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,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","names":["shallowEqual","actual","expected","keys","Object","key","warnings","Set","deprecationWarning","oldName","newName","prefix","cacheKey","has","add","internal","trace","captureShortStackTrace","console","warn","skip","length","stackTraceLimit","prepareStackTrace","Error","stackTrace","err","stack","shortStackTrace","slice","test","getFileName","map","frame","join","_shallowEqual","require","_deprecationWarning","isArrayExpression","node","opts","type","shallowEqual","isAssignmentExpression","isBinaryExpression","isInterpreterDirective","isDirective","isDirectiveLiteral","isBlockStatement","isBreakStatement","isCallExpression","isCatchClause","isConditionalExpression","isContinueStatement","isDebuggerStatement","isDoWhileStatement","isEmptyStatement","isExpressionStatement","isFile","isForInStatement","isForStatement","isFunctionDeclaration","isFunctionExpression","isIdentifier","isIfStatement","isLabeledStatement","isStringLiteral","isNumericLiteral","isNullLiteral","isBooleanLiteral","isRegExpLiteral","isLogicalExpression","isMemberExpression","isNewExpression","isProgram","isObjectExpression","isObjectMethod","isObjectProperty","isRestElement","isReturnStatement","isSequenceExpression","isParenthesizedExpression","isSwitchCase","isSwitchStatement","isThisExpression","isThrowStatement","isTryStatement","isUnaryExpression","isUpdateExpression","isVariableDeclaration","isVariableDeclarator","isWhileStatement","isWithStatement","isAssignmentPattern","isArrayPattern","isArrowFunctionExpression","isClassBody","isClassExpression","isClassDeclaration","isExportAllDeclaration","isExportDefaultDeclaration","isExportNamedDeclaration","isExportSpecifier","isForOfStatement","isImportDeclaration","isImportDefaultSpecifier","isImportNamespaceSpecifier","isImportSpecifier","isImportExpression","isMetaProperty","isClassMethod","isObjectPattern","isSpreadElement","isSuper","isTaggedTemplateExpression","isTemplateElement","isTemplateLiteral","isYieldExpression","isAwaitExpression","isImport","isBigIntLiteral","isExportNamespaceSpecifier","isOptionalMemberExpression","isOptionalCallExpression","isClassProperty","isClassAccessorProperty","isClassPrivateProperty","isClassPrivateMethod","isPrivateName","isStaticBlock","isImportAttribute","isAnyTypeAnnotation","isArrayTypeAnnotation","isBooleanTypeAnnotation","isBooleanLiteralTypeAnnotation","isNullLiteralTypeAnnotation","isClassImplements","isDeclareClass","isDeclareFunction","isDeclareInterface","isDeclareModule","isDeclareModuleExports","isDeclareTypeAlias","isDeclareOpaqueType","isDeclareVariable","isDeclareExportDeclaration","isDeclareExportAllDeclaration","isDeclaredPredicate","isExistsTypeAnnotation","isFunctionTypeAnnotation","isFunctionTypeParam","isGenericTypeAnnotation","isInferredPredicate","isInterfaceExtends","isInterfaceDeclaration","isInterfaceTypeAnnotation","isIntersectionTypeAnnotation","isMixedTypeAnnotation","isEmptyTypeAnnotation","isNullableTypeAnnotation","isNumberLiteralTypeAnnotation","isNumberTypeAnnotation","isObjectTypeAnnotation","isObjectTypeInternalSlot","isObjectTypeCallProperty","isObjectTypeIndexer","isObjectTypeProperty","isObjectTypeSpreadProperty","isOpaqueType","isQualifiedTypeIdentifier","isStringLiteralTypeAnnotation","isStringTypeAnnotation","isSymbolTypeAnnotation","isThisTypeAnnotation","isTupleTypeAnnotation","isTypeofTypeAnnotation","isTypeAlias","isTypeAnnotation","isTypeCastExpression","isTypeParameter","isTypeParameterDeclaration","isTypeParameterInstantiation","isUnionTypeAnnotation","isVariance","isVoidTypeAnnotation","isEnumDeclaration","isEnumBooleanBody","isEnumNumberBody","isEnumStringBody","isEnumSymbolBody","isEnumBooleanMember","isEnumNumberMember","isEnumStringMember","isEnumDefaultedMember","isIndexedAccessType","isOptionalIndexedAccessType","isJSXAttribute","isJSXClosingElement","isJSXElement","isJSXEmptyExpression","isJSXExpressionContainer","isJSXSpreadChild","isJSXIdentifier","isJSXMemberExpression","isJSXNamespacedName","isJSXOpeningElement","isJSXSpreadAttribute","isJSXText","isJSXFragment","isJSXOpeningFragment","isJSXClosingFragment","isNoop","isPlaceholder","isV8IntrinsicIdentifier","isArgumentPlaceholder","isBindExpression","isDecorator","isDoExpression","isExportDefaultSpecifier","isRecordExpression","isTupleExpression","isDecimalLiteral","isModuleExpression","isTopicReference","isPipelineTopicExpression","isPipelineBareFunction","isPipelinePrimaryTopicReference","isVoidPattern","isTSParameterProperty","isTSDeclareFunction","isTSDeclareMethod","isTSQualifiedName","isTSCallSignatureDeclaration","isTSConstructSignatureDeclaration","isTSPropertySignature","isTSMethodSignature","isTSIndexSignature","isTSAnyKeyword","isTSBooleanKeyword","isTSBigIntKeyword","isTSIntrinsicKeyword","isTSNeverKeyword","isTSNullKeyword","isTSNumberKeyword","isTSObjectKeyword","isTSStringKeyword","isTSSymbolKeyword","isTSUndefinedKeyword","isTSUnknownKeyword","isTSVoidKeyword","isTSThisType","isTSFunctionType","isTSConstructorType","isTSTypeReference","isTSTypePredicate","isTSTypeQuery","isTSTypeLiteral","isTSArrayType","isTSTupleType","isTSOptionalType","isTSRestType","isTSNamedTupleMember","isTSUnionType","isTSIntersectionType","isTSConditionalType","isTSInferType","isTSParenthesizedType","isTSTypeOperator","isTSIndexedAccessType","isTSMappedType","isTSTemplateLiteralType","isTSLiteralType","isTSExpressionWithTypeArguments","isTSInterfaceDeclaration","isTSInterfaceBody","isTSTypeAliasDeclaration","isTSInstantiationExpression","isTSAsExpression","isTSSatisfiesExpression","isTSTypeAssertion","isTSEnumBody","isTSEnumDeclaration","isTSEnumMember","isTSModuleDeclaration","isTSModuleBlock","isTSImportType","isTSImportEqualsDeclaration","isTSExternalModuleReference","isTSNonNullExpression","isTSExportAssignment","isTSNamespaceExportDeclaration","isTSTypeAnnotation","isTSTypeParameterInstantiation","isTSTypeParameterDeclaration","isTSTypeParameter","isStandardized","expectedNode","isExpression","isBinary","isScopable","isBlockParent","isBlock","isStatement","isTerminatorless","isCompletionStatement","isConditional","isLoop","isWhile","isExpressionWrapper","isFor","isForXStatement","isFunction","isFunctionParent","isPureish","isDeclaration","isFunctionParameter","isPatternLike","isLVal","isTSEntityName","isLiteral","isImmutable","isUserWhitespacable","isMethod","isObjectMember","isProperty","isUnaryLike","isPattern","isClass","isImportOrExportDeclaration","isExportDeclaration","isModuleSpecifier","isAccessor","isPrivate","isFlow","isFlowType","isFlowBaseAnnotation","isFlowDeclaration","isFlowPredicate","isEnumBody","isEnumMember","isJSX","isMiscellaneous","isTypeScript","isTSTypeElement","isTSType","isTSBaseType","isNumberLiteral","deprecationWarning","isRegexLiteral","isRestProperty","isSpreadProperty","isModuleDeclaration","_index","require","isMemberExpressionLike","node","isMemberExpression","isMetaProperty","matchesPattern","member","match","allowPartial","parts","Array","isArray","split","nodes","_object","object","meta","push","property","length","i","j","value","isIdentifier","name","isStringLiteral","isThisExpression","isSuper","isPrivateName","id","_matchesPattern","require","buildMatchMemberExpression","match","allowPartial","parts","split","member","matchesPattern","_buildMatchMemberExpression","require","isReactComponent","buildMatchMemberExpression","_default","exports","default","isCompatTag","tagName","test","_index","require","isType","nodeType","targetType","ALIAS_KEYS","aliases","FLIPPED_ALIAS_KEYS","includes","_index","require","isPlaceholderType","placeholderType","targetType","aliases","PLACEHOLDERS_ALIAS","includes","_shallowEqual","require","_isType","_isPlaceholderType","_index","is","type","node","opts","matches","isType","FLIPPED_ALIAS_KEYS","isPlaceholderType","expectedNode","undefined","shallowEqual","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","code","set","pos","i","length","isIdentifierStart","test","String","fromCharCode","isIdentifierChar","isIdentifierName","name","isFirst","cp","charCodeAt","trail","reservedWords","keyword","strict","strictBind","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword","_identifier","require","_keyword","_helperValidatorIdentifier","require","isValidIdentifier","name","reserved","isKeyword","isStrictReservedWord","isIdentifierName","isDigit","code","forbiddenNumericSeparatorSiblings","decBinOct","Set","hex","isAllowedNumericSeparatorSibling","bin","ch","oct","dec","readStringContents","type","input","pos","lineStart","curLine","errors","initialPos","initialLineStart","initialCurLine","out","firstInvalidLoc","chunkStart","length","unterminated","slice","charCodeAt","isStringEnd","res","readEscapedChar","str","containsInvalid","inTemplate","throwOnInvalid","readHexChar","String","fromCharCode","readCodePoint","fromCodePoint","strictNumericEscape","startPos","match","exec","octalStr","octal","parseInt","next","len","forceLen","n","readInt","invalidEscapeSequence","radix","allowNumSeparator","bailOnError","start","forbiddenSiblings","isAllowedSibling","invalid","total","i","e","Infinity","val","prev","numericSeparatorInEscapeSequence","Number","isNaN","has","unexpectedNumericSeparator","_isDigit","invalidDigit","indexOf","invalidCodePoint","STATEMENT_OR_BLOCK_KEYS","exports","FLATTENABLE_KEYS","FOR_INIT_KEYS","COMMENT_KEYS","LOGICAL_OPERATORS","UPDATE_OPERATORS","BOOLEAN_NUMBER_BINARY_OPERATORS","EQUALITY_BINARY_OPERATORS","COMPARISON_BINARY_OPERATORS","BOOLEAN_BINARY_OPERATORS","NUMBER_BINARY_OPERATORS","BINARY_OPERATORS","ASSIGNMENT_OPERATORS","map","op","BOOLEAN_UNARY_OPERATORS","NUMBER_UNARY_OPERATORS","STRING_UNARY_OPERATORS","UNARY_OPERATORS","INHERIT_KEYS","optional","force","BLOCK_SCOPED_SYMBOL","Symbol","for","NOT_LOCAL_BINDING","_is","require","_validate","VISITOR_KEYS","exports","ALIAS_KEYS","FLIPPED_ALIAS_KEYS","NODE_FIELDS","BUILDER_KEYS","DEPRECATED_KEYS","NODE_PARENT_VALIDATIONS","NODE_UNION_SHAPES__PRIVATE","getType","val","Array","isArray","validate","validateType","typeNames","assertNodeType","validateOptional","optional","validateOptionalType","arrayOf","elementType","chain","assertValueType","assertEach","arrayOfType","validateArrayOfType","callback","childValidator","process","env","BABEL_TYPES_8_BREAKING","validateChild","validator","node","key","i","subKey","toString","length","v","each","assertOneOf","values","includes","TypeError","JSON","stringify","oneOf","allExpandedTypes","types","expandedTypes","Set","push","set","valType","type","has","is","oneOfNodeTypes","assertNodeOrValueType","primitiveType","oneOfNodeOrValueTypes","assertShape","shape","keys","Object","errors","property","validateField","error","message","join","shapeOf","assertOptionalChainStart","_current","current","callee","object","fns","args","fn","chainOf","Error","validTypeOpts","validFieldKeys","store","defineAliasedType","aliases","opts","defined","_store$opts$inherits$","inherits","slice","additional","filter","a","unshift","defineType","fields","getOwnPropertyNames","field","def","default","deprecated","visitor","builder","k","deprecatedAlias","concat","undefined","forEach","alias","unionShape","_is","require","_isValidIdentifier","_helperValidatorIdentifier","_helperStringParser","_index","_utils","classMethodOrPropertyUnionShapeCommon","allowPrivateName","unionShape","discriminator","shapes","name","value","properties","key","validate","assertNodeType","exports","defineType","defineAliasedType","fields","elements","arrayOf","assertNodeOrValueType","default","process","env","BABEL_TYPES_8_BREAKING","undefined","visitor","aliases","operator","assertValueType","Object","assign","identifier","assertOneOf","ASSIGNMENT_OPERATORS","pattern","node","val","validator","is","left","oneOf","right","builder","BINARY_OPERATORS","expression","inOp","oneOfNodeTypes","directives","arrayOfType","body","validateArrayOfType","label","optional","callee","arguments","typeArguments","typeParameters","param","test","consequent","alternate","program","comments","each","assertEach","tokens","type","init","update","functionCommon","params","generator","async","functionTypeAnnotationCommon","returnType","functionDeclarationCommon","declare","id","predicate","parent","inherits","patternLikeCommon","typeAnnotation","decorators","chain","isValidIdentifier","TypeError","match","exec","toString","parentKey","nonComp","computed","imported","meta","isKeyword","isReservedWord","deprecatedAlias","Number","isFinite","error","Error","flags","invalid","LOGICAL_OPERATORS","property","object","normal","sourceType","interpreter","kind","shorthand","argument","listKey","index","length","expressions","discriminant","cases","block","handler","finalizer","prefix","UNARY_OPERATORS","UPDATE_OPERATORS","declarations","withoutInit","constOrLetOrVar","usingOrAwaitUsing","parentIsForX","decl","definite","superClass","implements","mixins","abstract","importAttributes","attributes","assertions","deprecated","source","exportKind","validateOptional","declaration","validateType","specifiers","sourced","sourceless","local","exported","lval","await","module","phase","importKind","options","classMethodOrPropertyCommon","accessibility","static","override","classMethodOrDeclareMethodCommon","access","tag","quasi","assertShape","raw","cooked","templateElementCookedValidator","unterminatedCalled","str","firstInvalidLoc","readStringContents","unterminated","strictNumericEscape","invalidEscapeSequence","numericSeparatorInEscapeSequence","unexpectedNumericSeparator","invalidDigit","invalidCodePoint","tail","quasis","delegate","assertOptionalChainStart","readonly","variance","_core","require","_utils","defineType","defineAliasedType","defineInterfaceishType","name","isDeclareClass","builder","visitor","aliases","fields","Object","assign","id","validateType","typeParameters","validateOptionalType","extends","validateOptional","arrayOfType","mixins","implements","body","elementType","value","validate","assertValueType","predicate","kind","assertOneOf","typeAnnotation","right","supertype","impltype","declaration","specifiers","source","default","importAttributes","exportKind","params","validateArrayOfType","rest","this","returnType","optional","types","properties","indexers","callProperties","internalSlots","exact","inexact","static","method","key","variance","proto","argument","qualification","expression","bound","explicitType","members","hasUnknownMembers","init","objectType","indexType","_utils","require","defineType","defineAliasedType","visitor","aliases","fields","name","validate","assertNodeType","value","optional","builder","Object","assign","openingElement","closingElement","children","validateArrayOfType","selfClosing","assertValueType","expression","object","property","namespace","default","attributes","typeArguments","typeParameters","argument","openingFragment","closingFragment","_utils","require","PLACEHOLDERS","exports","PLACEHOLDERS_ALIAS","Declaration","Pattern","type","alias","ALIAS_KEYS","length","PLACEHOLDERS_FLIPPED_ALIAS","Object","keys","forEach","hasOwnProperty","call","push","_utils","require","_placeholders","_core","defineType","defineAliasedType","visitor","builder","fields","Object","assign","name","validate","assertNodeType","expectedNode","assertOneOf","PLACEHOLDERS","patternLikeCommon","assertValueType","_utils","require","defineType","visitor","aliases","fields","process","env","BABEL_TYPES_8_BREAKING","object","validate","Object","assign","oneOfNodeTypes","callee","assertNodeType","expression","builder","body","async","assertValueType","default","exported","properties","validateArrayOfType","elements","arrayOfType","value","_utils","require","_core","_is","defineType","defineAliasedType","bool","assertValueType","tSFunctionTypeAnnotationCommon","returnType","validate","assertNodeType","optional","typeParameters","aliases","visitor","fields","accessibility","assertOneOf","readonly","parameter","override","decorators","arrayOfType","Object","assign","functionDeclarationCommon","classMethodOrPropertyUnionShapeCommon","classMethodOrDeclareMethodCommon","left","validateType","right","signatureDeclarationCommon","validateOptionalType","validateArrayOfType","callConstructSignatureDeclaration","namedTypeElementCommon","key","computed","default","validateOptional","typeAnnotation","kind","static","parameters","tsKeywordTypes","type","fnOrCtrBase","abstract","typeName","builder","parameterName","asserts","exprName","members","elementType","elementTypes","label","unionOrIntersection","types","checkType","extendsType","trueType","falseType","typeParameter","operator","objectType","indexType","nameType","quasis","chain","assertEach","node","val","length","TypeError","literal","unaryExpression","unaryOperator","validator","parent","is","argument","oneOfNodeTypes","expression","declare","id","extends","body","TSTypeExpression","const","initializer","global","qualifier","options","isExport","moduleReference","importKind","params","name","in","out","constraint","DEPRECATED_ALIASES","exports","ModuleDeclaration","require","_utils","_placeholders","_deprecatedAliases","Object","keys","DEPRECATED_ALIASES","forEach","deprecatedAlias","FLIPPED_ALIAS_KEYS","types","set","allExpandedTypes","type","aliases","add","TYPES","exports","concat","VISITOR_KEYS","DEPRECATED_KEYS","_index","require","validate","node","key","val","fields","NODE_FIELDS","type","field","validateField","validateChild","validateInternal","maybeNode","optional","_NODE_PARENT_VALIDATI","NODE_PARENT_VALIDATIONS","call","_NODE_PARENT_VALIDATI2","_validate","require","_deprecationWarning","utils","validateInternal","validate","NODE_FIELDS","bigIntLiteral","value","toString","node","type","defs","BigIntLiteral","arrayExpression","elements","ArrayExpression","assignmentExpression","operator","left","right","AssignmentExpression","binaryExpression","BinaryExpression","interpreterDirective","InterpreterDirective","directive","Directive","directiveLiteral","DirectiveLiteral","blockStatement","body","directives","BlockStatement","breakStatement","label","BreakStatement","callExpression","callee","_arguments","arguments","CallExpression","catchClause","param","CatchClause","conditionalExpression","test","consequent","alternate","ConditionalExpression","continueStatement","ContinueStatement","debuggerStatement","doWhileStatement","DoWhileStatement","emptyStatement","expressionStatement","expression","ExpressionStatement","file","program","comments","tokens","File","forInStatement","ForInStatement","forStatement","init","update","ForStatement","functionDeclaration","id","params","generator","async","FunctionDeclaration","functionExpression","FunctionExpression","identifier","name","Identifier","ifStatement","IfStatement","labeledStatement","LabeledStatement","stringLiteral","StringLiteral","numericLiteral","NumericLiteral","nullLiteral","booleanLiteral","BooleanLiteral","regExpLiteral","pattern","flags","RegExpLiteral","logicalExpression","LogicalExpression","memberExpression","object","property","computed","optional","MemberExpression","newExpression","NewExpression","sourceType","interpreter","Program","objectExpression","properties","ObjectExpression","objectMethod","kind","key","ObjectMethod","objectProperty","shorthand","decorators","ObjectProperty","restElement","argument","RestElement","returnStatement","ReturnStatement","sequenceExpression","expressions","SequenceExpression","parenthesizedExpression","ParenthesizedExpression","switchCase","SwitchCase","switchStatement","discriminant","cases","SwitchStatement","thisExpression","throwStatement","ThrowStatement","tryStatement","block","handler","finalizer","TryStatement","unaryExpression","prefix","UnaryExpression","updateExpression","UpdateExpression","variableDeclaration","declarations","VariableDeclaration","variableDeclarator","VariableDeclarator","whileStatement","WhileStatement","withStatement","WithStatement","assignmentPattern","AssignmentPattern","arrayPattern","ArrayPattern","arrowFunctionExpression","ArrowFunctionExpression","classBody","ClassBody","classExpression","superClass","ClassExpression","classDeclaration","ClassDeclaration","exportAllDeclaration","source","attributes","ExportAllDeclaration","exportDefaultDeclaration","declaration","ExportDefaultDeclaration","exportNamedDeclaration","specifiers","ExportNamedDeclaration","exportSpecifier","local","exported","ExportSpecifier","forOfStatement","_await","await","ForOfStatement","importDeclaration","ImportDeclaration","importDefaultSpecifier","ImportDefaultSpecifier","importNamespaceSpecifier","ImportNamespaceSpecifier","importSpecifier","imported","ImportSpecifier","importExpression","options","ImportExpression","metaProperty","meta","MetaProperty","classMethod","_static","static","ClassMethod","objectPattern","ObjectPattern","spreadElement","SpreadElement","_super","taggedTemplateExpression","tag","quasi","TaggedTemplateExpression","templateElement","tail","TemplateElement","templateLiteral","quasis","TemplateLiteral","yieldExpression","delegate","YieldExpression","awaitExpression","AwaitExpression","_import","exportNamespaceSpecifier","ExportNamespaceSpecifier","optionalMemberExpression","OptionalMemberExpression","optionalCallExpression","OptionalCallExpression","classProperty","typeAnnotation","ClassProperty","classAccessorProperty","ClassAccessorProperty","classPrivateProperty","ClassPrivateProperty","classPrivateMethod","ClassPrivateMethod","privateName","PrivateName","staticBlock","StaticBlock","importAttribute","ImportAttribute","anyTypeAnnotation","arrayTypeAnnotation","elementType","ArrayTypeAnnotation","booleanTypeAnnotation","booleanLiteralTypeAnnotation","BooleanLiteralTypeAnnotation","nullLiteralTypeAnnotation","classImplements","typeParameters","ClassImplements","declareClass","_extends","extends","DeclareClass","declareFunction","DeclareFunction","declareInterface","DeclareInterface","declareModule","DeclareModule","declareModuleExports","DeclareModuleExports","declareTypeAlias","DeclareTypeAlias","declareOpaqueType","supertype","DeclareOpaqueType","declareVariable","DeclareVariable","declareExportDeclaration","DeclareExportDeclaration","declareExportAllDeclaration","DeclareExportAllDeclaration","declaredPredicate","DeclaredPredicate","existsTypeAnnotation","functionTypeAnnotation","rest","returnType","FunctionTypeAnnotation","functionTypeParam","FunctionTypeParam","genericTypeAnnotation","GenericTypeAnnotation","inferredPredicate","interfaceExtends","InterfaceExtends","interfaceDeclaration","InterfaceDeclaration","interfaceTypeAnnotation","InterfaceTypeAnnotation","intersectionTypeAnnotation","types","IntersectionTypeAnnotation","mixedTypeAnnotation","emptyTypeAnnotation","nullableTypeAnnotation","NullableTypeAnnotation","numberLiteralTypeAnnotation","NumberLiteralTypeAnnotation","numberTypeAnnotation","objectTypeAnnotation","indexers","callProperties","internalSlots","exact","ObjectTypeAnnotation","objectTypeInternalSlot","method","ObjectTypeInternalSlot","objectTypeCallProperty","ObjectTypeCallProperty","objectTypeIndexer","variance","ObjectTypeIndexer","objectTypeProperty","proto","ObjectTypeProperty","objectTypeSpreadProperty","ObjectTypeSpreadProperty","opaqueType","impltype","OpaqueType","qualifiedTypeIdentifier","qualification","QualifiedTypeIdentifier","stringLiteralTypeAnnotation","StringLiteralTypeAnnotation","stringTypeAnnotation","symbolTypeAnnotation","thisTypeAnnotation","tupleTypeAnnotation","TupleTypeAnnotation","typeofTypeAnnotation","TypeofTypeAnnotation","typeAlias","TypeAlias","TypeAnnotation","typeCastExpression","TypeCastExpression","typeParameter","bound","_default","default","TypeParameter","typeParameterDeclaration","TypeParameterDeclaration","typeParameterInstantiation","TypeParameterInstantiation","unionTypeAnnotation","UnionTypeAnnotation","Variance","voidTypeAnnotation","enumDeclaration","EnumDeclaration","enumBooleanBody","members","explicitType","hasUnknownMembers","EnumBooleanBody","enumNumberBody","EnumNumberBody","enumStringBody","EnumStringBody","enumSymbolBody","EnumSymbolBody","enumBooleanMember","EnumBooleanMember","enumNumberMember","EnumNumberMember","enumStringMember","EnumStringMember","enumDefaultedMember","EnumDefaultedMember","indexedAccessType","objectType","indexType","IndexedAccessType","optionalIndexedAccessType","OptionalIndexedAccessType","jsxAttribute","JSXAttribute","jsxClosingElement","JSXClosingElement","jsxElement","openingElement","closingElement","children","selfClosing","JSXElement","jsxEmptyExpression","jsxExpressionContainer","JSXExpressionContainer","jsxSpreadChild","JSXSpreadChild","jsxIdentifier","JSXIdentifier","jsxMemberExpression","JSXMemberExpression","jsxNamespacedName","namespace","JSXNamespacedName","jsxOpeningElement","JSXOpeningElement","jsxSpreadAttribute","JSXSpreadAttribute","jsxText","JSXText","jsxFragment","openingFragment","closingFragment","JSXFragment","jsxOpeningFragment","jsxClosingFragment","noop","placeholder","expectedNode","Placeholder","v8IntrinsicIdentifier","V8IntrinsicIdentifier","argumentPlaceholder","bindExpression","BindExpression","decorator","Decorator","doExpression","DoExpression","exportDefaultSpecifier","ExportDefaultSpecifier","recordExpression","RecordExpression","tupleExpression","TupleExpression","decimalLiteral","DecimalLiteral","moduleExpression","ModuleExpression","topicReference","pipelineTopicExpression","PipelineTopicExpression","pipelineBareFunction","PipelineBareFunction","pipelinePrimaryTopicReference","voidPattern","tsParameterProperty","parameter","TSParameterProperty","tsDeclareFunction","TSDeclareFunction","tsDeclareMethod","TSDeclareMethod","tsQualifiedName","TSQualifiedName","tsCallSignatureDeclaration","parameters","TSCallSignatureDeclaration","tsConstructSignatureDeclaration","TSConstructSignatureDeclaration","tsPropertySignature","TSPropertySignature","tsMethodSignature","TSMethodSignature","tsIndexSignature","TSIndexSignature","tsAnyKeyword","tsBooleanKeyword","tsBigIntKeyword","tsIntrinsicKeyword","tsNeverKeyword","tsNullKeyword","tsNumberKeyword","tsObjectKeyword","tsStringKeyword","tsSymbolKeyword","tsUndefinedKeyword","tsUnknownKeyword","tsVoidKeyword","tsThisType","tsFunctionType","TSFunctionType","tsConstructorType","TSConstructorType","tsTypeReference","typeName","TSTypeReference","tsTypePredicate","parameterName","asserts","TSTypePredicate","tsTypeQuery","exprName","TSTypeQuery","tsTypeLiteral","TSTypeLiteral","tsArrayType","TSArrayType","tsTupleType","elementTypes","TSTupleType","tsOptionalType","TSOptionalType","tsRestType","TSRestType","tsNamedTupleMember","TSNamedTupleMember","tsUnionType","TSUnionType","tsIntersectionType","TSIntersectionType","tsConditionalType","checkType","extendsType","trueType","falseType","TSConditionalType","tsInferType","TSInferType","tsParenthesizedType","TSParenthesizedType","tsTypeOperator","TSTypeOperator","tsIndexedAccessType","TSIndexedAccessType","tsMappedType","nameType","TSMappedType","tsTemplateLiteralType","TSTemplateLiteralType","tsLiteralType","literal","TSLiteralType","tsExpressionWithTypeArguments","TSExpressionWithTypeArguments","tsInterfaceDeclaration","TSInterfaceDeclaration","tsInterfaceBody","TSInterfaceBody","tsTypeAliasDeclaration","TSTypeAliasDeclaration","tsInstantiationExpression","TSInstantiationExpression","tsAsExpression","TSAsExpression","tsSatisfiesExpression","TSSatisfiesExpression","tsTypeAssertion","TSTypeAssertion","tsEnumBody","TSEnumBody","tsEnumDeclaration","TSEnumDeclaration","tsEnumMember","initializer","TSEnumMember","tsModuleDeclaration","TSModuleDeclaration","tsModuleBlock","TSModuleBlock","tsImportType","qualifier","TSImportType","tsImportEqualsDeclaration","moduleReference","isExport","TSImportEqualsDeclaration","tsExternalModuleReference","TSExternalModuleReference","tsNonNullExpression","TSNonNullExpression","tsExportAssignment","TSExportAssignment","tsNamespaceExportDeclaration","TSNamespaceExportDeclaration","tsTypeAnnotation","TSTypeAnnotation","tsTypeParameterInstantiation","TSTypeParameterInstantiation","tsTypeParameterDeclaration","TSTypeParameterDeclaration","tsTypeParameter","constraint","TSTypeParameter","NumberLiteral","deprecationWarning","RegexLiteral","RestProperty","SpreadProperty","b","require","_deprecationWarning","alias","lowercase","ArrayExpression","exports","AssignmentExpression","BinaryExpression","InterpreterDirective","Directive","DirectiveLiteral","BlockStatement","BreakStatement","CallExpression","CatchClause","ConditionalExpression","ContinueStatement","DebuggerStatement","DoWhileStatement","EmptyStatement","ExpressionStatement","File","ForInStatement","ForStatement","FunctionDeclaration","FunctionExpression","Identifier","IfStatement","LabeledStatement","StringLiteral","NumericLiteral","NullLiteral","BooleanLiteral","RegExpLiteral","LogicalExpression","MemberExpression","NewExpression","Program","ObjectExpression","ObjectMethod","ObjectProperty","RestElement","ReturnStatement","SequenceExpression","ParenthesizedExpression","SwitchCase","SwitchStatement","ThisExpression","ThrowStatement","TryStatement","UnaryExpression","UpdateExpression","VariableDeclaration","VariableDeclarator","WhileStatement","WithStatement","AssignmentPattern","ArrayPattern","ArrowFunctionExpression","ClassBody","ClassExpression","ClassDeclaration","ExportAllDeclaration","ExportDefaultDeclaration","ExportNamedDeclaration","ExportSpecifier","ForOfStatement","ImportDeclaration","ImportDefaultSpecifier","ImportNamespaceSpecifier","ImportSpecifier","ImportExpression","MetaProperty","ClassMethod","ObjectPattern","SpreadElement","Super","TaggedTemplateExpression","TemplateElement","TemplateLiteral","YieldExpression","AwaitExpression","Import","BigIntLiteral","ExportNamespaceSpecifier","OptionalMemberExpression","OptionalCallExpression","ClassProperty","ClassAccessorProperty","ClassPrivateProperty","ClassPrivateMethod","PrivateName","StaticBlock","ImportAttribute","AnyTypeAnnotation","ArrayTypeAnnotation","BooleanTypeAnnotation","BooleanLiteralTypeAnnotation","NullLiteralTypeAnnotation","ClassImplements","DeclareClass","DeclareFunction","DeclareInterface","DeclareModule","DeclareModuleExports","DeclareTypeAlias","DeclareOpaqueType","DeclareVariable","DeclareExportDeclaration","DeclareExportAllDeclaration","DeclaredPredicate","ExistsTypeAnnotation","FunctionTypeAnnotation","FunctionTypeParam","GenericTypeAnnotation","InferredPredicate","InterfaceExtends","InterfaceDeclaration","InterfaceTypeAnnotation","IntersectionTypeAnnotation","MixedTypeAnnotation","EmptyTypeAnnotation","NullableTypeAnnotation","NumberLiteralTypeAnnotation","NumberTypeAnnotation","ObjectTypeAnnotation","ObjectTypeInternalSlot","ObjectTypeCallProperty","ObjectTypeIndexer","ObjectTypeProperty","ObjectTypeSpreadProperty","OpaqueType","QualifiedTypeIdentifier","StringLiteralTypeAnnotation","StringTypeAnnotation","SymbolTypeAnnotation","ThisTypeAnnotation","TupleTypeAnnotation","TypeofTypeAnnotation","TypeAlias","TypeAnnotation","TypeCastExpression","TypeParameter","TypeParameterDeclaration","TypeParameterInstantiation","UnionTypeAnnotation","Variance","VoidTypeAnnotation","EnumDeclaration","EnumBooleanBody","EnumNumberBody","EnumStringBody","EnumSymbolBody","EnumBooleanMember","EnumNumberMember","EnumStringMember","EnumDefaultedMember","IndexedAccessType","OptionalIndexedAccessType","JSXAttribute","JSXClosingElement","JSXElement","JSXEmptyExpression","JSXExpressionContainer","JSXSpreadChild","JSXIdentifier","JSXMemberExpression","JSXNamespacedName","JSXOpeningElement","JSXSpreadAttribute","JSXText","JSXFragment","JSXOpeningFragment","JSXClosingFragment","Noop","Placeholder","V8IntrinsicIdentifier","ArgumentPlaceholder","BindExpression","Decorator","DoExpression","ExportDefaultSpecifier","RecordExpression","TupleExpression","DecimalLiteral","ModuleExpression","TopicReference","PipelineTopicExpression","PipelineBareFunction","PipelinePrimaryTopicReference","VoidPattern","TSParameterProperty","TSDeclareFunction","TSDeclareMethod","TSQualifiedName","TSCallSignatureDeclaration","TSConstructSignatureDeclaration","TSPropertySignature","TSMethodSignature","TSIndexSignature","TSAnyKeyword","TSBooleanKeyword","TSBigIntKeyword","TSIntrinsicKeyword","TSNeverKeyword","TSNullKeyword","TSNumberKeyword","TSObjectKeyword","TSStringKeyword","TSSymbolKeyword","TSUndefinedKeyword","TSUnknownKeyword","TSVoidKeyword","TSThisType","TSFunctionType","TSConstructorType","TSTypeReference","TSTypePredicate","TSTypeQuery","TSTypeLiteral","TSArrayType","TSTupleType","TSOptionalType","TSRestType","TSNamedTupleMember","TSUnionType","TSIntersectionType","TSConditionalType","TSInferType","TSParenthesizedType","TSTypeOperator","TSIndexedAccessType","TSMappedType","TSTemplateLiteralType","TSLiteralType","TSExpressionWithTypeArguments","TSInterfaceDeclaration","TSInterfaceBody","TSTypeAliasDeclaration","TSInstantiationExpression","TSAsExpression","TSSatisfiesExpression","TSTypeAssertion","TSEnumBody","TSEnumDeclaration","TSEnumMember","TSModuleDeclaration","TSModuleBlock","TSImportType","TSImportEqualsDeclaration","TSExternalModuleReference","TSNonNullExpression","TSExportAssignment","TSNamespaceExportDeclaration","TSTypeAnnotation","TSTypeParameterInstantiation","TSTypeParameterDeclaration","TSTypeParameter","NumberLiteral","numberLiteral","RegexLiteral","regexLiteral","RestProperty","restProperty","SpreadProperty","spreadProperty","_lowercase","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_uppercase","_index","require","_index2","cleanJSXElementLiteralChild","child","args","lines","value","split","lastNonEmptyLine","i","length","exec","str","line","isFirstLine","isLastLine","isLastNonEmptyLine","trimmedLine","replace","push","inherits","stringLiteral","_index","require","_cleanJSXElementLiteralChild","buildChildren","node","elements","i","children","length","child","isJSXText","cleanJSXElementLiteralChild","isJSXExpressionContainer","expression","isJSXEmptyExpression","push","_index","require","isNode","node","VISITOR_KEYS","type","_isNode","require","assertNode","node","isNode","_node$type","type","JSON","stringify","TypeError","_is","require","_deprecationWarning","assert","type","node","opts","is","Error","JSON","stringify","assertArrayExpression","assertAssignmentExpression","assertBinaryExpression","assertInterpreterDirective","assertDirective","assertDirectiveLiteral","assertBlockStatement","assertBreakStatement","assertCallExpression","assertCatchClause","assertConditionalExpression","assertContinueStatement","assertDebuggerStatement","assertDoWhileStatement","assertEmptyStatement","assertExpressionStatement","assertFile","assertForInStatement","assertForStatement","assertFunctionDeclaration","assertFunctionExpression","assertIdentifier","assertIfStatement","assertLabeledStatement","assertStringLiteral","assertNumericLiteral","assertNullLiteral","assertBooleanLiteral","assertRegExpLiteral","assertLogicalExpression","assertMemberExpression","assertNewExpression","assertProgram","assertObjectExpression","assertObjectMethod","assertObjectProperty","assertRestElement","assertReturnStatement","assertSequenceExpression","assertParenthesizedExpression","assertSwitchCase","assertSwitchStatement","assertThisExpression","assertThrowStatement","assertTryStatement","assertUnaryExpression","assertUpdateExpression","assertVariableDeclaration","assertVariableDeclarator","assertWhileStatement","assertWithStatement","assertAssignmentPattern","assertArrayPattern","assertArrowFunctionExpression","assertClassBody","assertClassExpression","assertClassDeclaration","assertExportAllDeclaration","assertExportDefaultDeclaration","assertExportNamedDeclaration","assertExportSpecifier","assertForOfStatement","assertImportDeclaration","assertImportDefaultSpecifier","assertImportNamespaceSpecifier","assertImportSpecifier","assertImportExpression","assertMetaProperty","assertClassMethod","assertObjectPattern","assertSpreadElement","assertSuper","assertTaggedTemplateExpression","assertTemplateElement","assertTemplateLiteral","assertYieldExpression","assertAwaitExpression","assertImport","assertBigIntLiteral","assertExportNamespaceSpecifier","assertOptionalMemberExpression","assertOptionalCallExpression","assertClassProperty","assertClassAccessorProperty","assertClassPrivateProperty","assertClassPrivateMethod","assertPrivateName","assertStaticBlock","assertImportAttribute","assertAnyTypeAnnotation","assertArrayTypeAnnotation","assertBooleanTypeAnnotation","assertBooleanLiteralTypeAnnotation","assertNullLiteralTypeAnnotation","assertClassImplements","assertDeclareClass","assertDeclareFunction","assertDeclareInterface","assertDeclareModule","assertDeclareModuleExports","assertDeclareTypeAlias","assertDeclareOpaqueType","assertDeclareVariable","assertDeclareExportDeclaration","assertDeclareExportAllDeclaration","assertDeclaredPredicate","assertExistsTypeAnnotation","assertFunctionTypeAnnotation","assertFunctionTypeParam","assertGenericTypeAnnotation","assertInferredPredicate","assertInterfaceExtends","assertInterfaceDeclaration","assertInterfaceTypeAnnotation","assertIntersectionTypeAnnotation","assertMixedTypeAnnotation","assertEmptyTypeAnnotation","assertNullableTypeAnnotation","assertNumberLiteralTypeAnnotation","assertNumberTypeAnnotation","assertObjectTypeAnnotation","assertObjectTypeInternalSlot","assertObjectTypeCallProperty","assertObjectTypeIndexer","assertObjectTypeProperty","assertObjectTypeSpreadProperty","assertOpaqueType","assertQualifiedTypeIdentifier","assertStringLiteralTypeAnnotation","assertStringTypeAnnotation","assertSymbolTypeAnnotation","assertThisTypeAnnotation","assertTupleTypeAnnotation","assertTypeofTypeAnnotation","assertTypeAlias","assertTypeAnnotation","assertTypeCastExpression","assertTypeParameter","assertTypeParameterDeclaration","assertTypeParameterInstantiation","assertUnionTypeAnnotation","assertVariance","assertVoidTypeAnnotation","assertEnumDeclaration","assertEnumBooleanBody","assertEnumNumberBody","assertEnumStringBody","assertEnumSymbolBody","assertEnumBooleanMember","assertEnumNumberMember","assertEnumStringMember","assertEnumDefaultedMember","assertIndexedAccessType","assertOptionalIndexedAccessType","assertJSXAttribute","assertJSXClosingElement","assertJSXElement","assertJSXEmptyExpression","assertJSXExpressionContainer","assertJSXSpreadChild","assertJSXIdentifier","assertJSXMemberExpression","assertJSXNamespacedName","assertJSXOpeningElement","assertJSXSpreadAttribute","assertJSXText","assertJSXFragment","assertJSXOpeningFragment","assertJSXClosingFragment","assertNoop","assertPlaceholder","assertV8IntrinsicIdentifier","assertArgumentPlaceholder","assertBindExpression","assertDecorator","assertDoExpression","assertExportDefaultSpecifier","assertRecordExpression","assertTupleExpression","assertDecimalLiteral","assertModuleExpression","assertTopicReference","assertPipelineTopicExpression","assertPipelineBareFunction","assertPipelinePrimaryTopicReference","assertVoidPattern","assertTSParameterProperty","assertTSDeclareFunction","assertTSDeclareMethod","assertTSQualifiedName","assertTSCallSignatureDeclaration","assertTSConstructSignatureDeclaration","assertTSPropertySignature","assertTSMethodSignature","assertTSIndexSignature","assertTSAnyKeyword","assertTSBooleanKeyword","assertTSBigIntKeyword","assertTSIntrinsicKeyword","assertTSNeverKeyword","assertTSNullKeyword","assertTSNumberKeyword","assertTSObjectKeyword","assertTSStringKeyword","assertTSSymbolKeyword","assertTSUndefinedKeyword","assertTSUnknownKeyword","assertTSVoidKeyword","assertTSThisType","assertTSFunctionType","assertTSConstructorType","assertTSTypeReference","assertTSTypePredicate","assertTSTypeQuery","assertTSTypeLiteral","assertTSArrayType","assertTSTupleType","assertTSOptionalType","assertTSRestType","assertTSNamedTupleMember","assertTSUnionType","assertTSIntersectionType","assertTSConditionalType","assertTSInferType","assertTSParenthesizedType","assertTSTypeOperator","assertTSIndexedAccessType","assertTSMappedType","assertTSTemplateLiteralType","assertTSLiteralType","assertTSExpressionWithTypeArguments","assertTSInterfaceDeclaration","assertTSInterfaceBody","assertTSTypeAliasDeclaration","assertTSInstantiationExpression","assertTSAsExpression","assertTSSatisfiesExpression","assertTSTypeAssertion","assertTSEnumBody","assertTSEnumDeclaration","assertTSEnumMember","assertTSModuleDeclaration","assertTSModuleBlock","assertTSImportType","assertTSImportEqualsDeclaration","assertTSExternalModuleReference","assertTSNonNullExpression","assertTSExportAssignment","assertTSNamespaceExportDeclaration","assertTSTypeAnnotation","assertTSTypeParameterInstantiation","assertTSTypeParameterDeclaration","assertTSTypeParameter","assertStandardized","assertExpression","assertBinary","assertScopable","assertBlockParent","assertBlock","assertStatement","assertTerminatorless","assertCompletionStatement","assertConditional","assertLoop","assertWhile","assertExpressionWrapper","assertFor","assertForXStatement","assertFunction","assertFunctionParent","assertPureish","assertDeclaration","assertFunctionParameter","assertPatternLike","assertLVal","assertTSEntityName","assertLiteral","assertImmutable","assertUserWhitespacable","assertMethod","assertObjectMember","assertProperty","assertUnaryLike","assertPattern","assertClass","assertImportOrExportDeclaration","assertExportDeclaration","assertModuleSpecifier","assertAccessor","assertPrivate","assertFlow","assertFlowType","assertFlowBaseAnnotation","assertFlowDeclaration","assertFlowPredicate","assertEnumBody","assertEnumMember","assertJSX","assertMiscellaneous","assertTypeScript","assertTSTypeElement","assertTSType","assertTSBaseType","assertNumberLiteral","deprecationWarning","assertRegexLiteral","assertRestProperty","assertSpreadProperty","assertModuleDeclaration","_index","require","_default","exports","default","createTypeAnnotationBasedOnTypeof","type","stringTypeAnnotation","numberTypeAnnotation","voidTypeAnnotation","booleanTypeAnnotation","genericTypeAnnotation","identifier","anyTypeAnnotation","Error","_index","require","getQualifiedName","node","isIdentifier","name","id","qualification","removeTypeDuplicates","nodesIn","nodes","Array","from","generics","Map","bases","typeGroups","Set","types","i","length","includes","isAnyTypeAnnotation","isFlowBaseAnnotation","set","type","isUnionTypeAnnotation","has","push","add","isGenericTypeAnnotation","existing","get","typeParameters","params","baseType","genericName","_index","require","_removeTypeDuplicates","createFlowUnionType","types","flattened","removeTypeDuplicates","length","unionTypeAnnotation","_index","require","getQualifiedName","node","isIdentifier","name","isThisExpression","right","left","removeTypeDuplicates","nodesIn","nodes","Array","from","generics","Map","bases","typeGroups","Set","types","i","length","includes","isTSAnyKeyword","isTSBaseType","set","type","isTSUnionType","has","push","add","typeArgumentsKey","isTSTypeReference","typeArguments","typeName","existing","get","existingTypeArguments","params","baseType","genericName","_index","require","_removeTypeDuplicates","_index2","createTSUnionType","typeAnnotations","types","map","type","isTSTypeAnnotation","typeAnnotation","flattened","removeTypeDuplicates","length","tsUnionType","_index","require","buildUndefinedNode","unaryExpression","numericLiteral","_index","require","_index2","hasOwn","Function","call","bind","Object","prototype","hasOwnProperty","cloneIfNode","obj","deep","withoutLoc","commentsCache","type","cloneNodeInternal","cloneIfNodeOrArray","Array","isArray","map","node","cloneNode","Map","newNode","isIdentifier","name","optional","typeAnnotation","decorators","NODE_FIELDS","Error","field","keys","isFile","maybeCloneComments","comments","loc","leadingComments","innerComments","trailingComments","extra","assign","comment","cache","get","value","ret","set","_cloneNode","require","clone","node","cloneNode","_cloneNode","require","cloneDeep","node","cloneNode","_cloneNode","require","cloneDeepWithoutLoc","node","cloneNode","_cloneNode","require","cloneWithoutLoc","node","cloneNode","addComments","node","type","comments","key","concat","push","_addComments","require","addComment","node","type","content","line","addComments","value","inherit","key","child","parent","Array","from","Set","concat","filter","Boolean","_inherit","require","inheritInnerComments","child","parent","inherit","_inherit","require","inheritLeadingComments","child","parent","inherit","_inherit","require","inheritTrailingComments","child","parent","inherit","_inheritTrailingComments","require","_inheritLeadingComments","_inheritInnerComments","inheritsComments","child","parent","inheritTrailingComments","inheritLeadingComments","inheritInnerComments","_index","require","removeComments","node","COMMENT_KEYS","forEach","key","_index","require","STANDARDIZED_TYPES","exports","FLIPPED_ALIAS_KEYS","EXPRESSION_TYPES","BINARY_TYPES","SCOPABLE_TYPES","BLOCKPARENT_TYPES","BLOCK_TYPES","STATEMENT_TYPES","TERMINATORLESS_TYPES","COMPLETIONSTATEMENT_TYPES","CONDITIONAL_TYPES","LOOP_TYPES","WHILE_TYPES","EXPRESSIONWRAPPER_TYPES","FOR_TYPES","FORXSTATEMENT_TYPES","FUNCTION_TYPES","FUNCTIONPARENT_TYPES","PUREISH_TYPES","DECLARATION_TYPES","FUNCTIONPARAMETER_TYPES","PATTERNLIKE_TYPES","LVAL_TYPES","TSENTITYNAME_TYPES","LITERAL_TYPES","IMMUTABLE_TYPES","USERWHITESPACABLE_TYPES","METHOD_TYPES","OBJECTMEMBER_TYPES","PROPERTY_TYPES","UNARYLIKE_TYPES","PATTERN_TYPES","CLASS_TYPES","IMPORTOREXPORTDECLARATION_TYPES","EXPORTDECLARATION_TYPES","MODULESPECIFIER_TYPES","ACCESSOR_TYPES","PRIVATE_TYPES","FLOW_TYPES","FLOWTYPE_TYPES","FLOWBASEANNOTATION_TYPES","FLOWDECLARATION_TYPES","FLOWPREDICATE_TYPES","ENUMBODY_TYPES","ENUMMEMBER_TYPES","JSX_TYPES","MISCELLANEOUS_TYPES","TYPESCRIPT_TYPES","TSTYPEELEMENT_TYPES","TSTYPE_TYPES","TSBASETYPE_TYPES","MODULEDECLARATION_TYPES","_index","require","_index2","toBlock","node","parent","isBlockStatement","blockNodes","isEmptyStatement","isStatement","isFunction","returnStatement","expressionStatement","blockStatement","_toBlock","require","ensureBlock","node","key","result","toBlock","_isValidIdentifier","require","_helperValidatorIdentifier","toIdentifier","input","name","c","isIdentifierChar","codePointAt","replace","match","toUpperCase","isValidIdentifier","_toIdentifier","require","toBindingIdentifierName","name","toIdentifier","_index","require","_index2","toComputedKey","node","key","property","computed","isIdentifier","stringLiteral","name","_index","require","_default","exports","default","toExpression","node","isExpressionStatement","expression","isExpression","isClass","type","abstract","isFunction","Error","_index","require","_skip","Symbol","_stop","traverseFast","node","enter","opts","keys","VISITOR_KEYS","type","ret","undefined","key","subNode","Array","isArray","skip","stop","_index","require","CLEAR_KEYS","CLEAR_KEYS_PLUS_COMMENTS","COMMENT_KEYS","removeProperties","node","opts","map","preserveComments","key","undefined","Object","keys","startsWith","symbols","getOwnPropertySymbols","sym","_traverseFast","require","_removeProperties","removePropertiesDeep","tree","opts","traverseFast","removeProperties","_index","require","_cloneNode","_removePropertiesDeep","toKeyAlias","node","key","alias","kind","increment","isIdentifier","name","isStringLiteral","JSON","stringify","value","removePropertiesDeep","cloneNode","computed","static","uid","Number","MAX_SAFE_INTEGER","_index","require","_index2","_default","exports","default","toStatement","node","ignore","isStatement","mustHaveId","newType","isClass","isFunction","isAssignmentExpression","expressionStatement","id","Error","type","_isValidIdentifier","require","_index","_default","exports","default","valueToNode","objectToString","Function","call","bind","Object","prototype","toString","isRegExp","value","isPlainObject","proto","getPrototypeOf","undefined","identifier","booleanLiteral","nullLiteral","stringLiteral","result","Number","isFinite","numericLiteral","Math","abs","numerator","isNaN","binaryExpression","is","unaryExpression","bigIntLiteral","pattern","source","flags","exec","regExpLiteral","Array","isArray","arrayExpression","map","props","key","keys","nodeKey","computed","isValidIdentifier","push","objectProperty","objectExpression","Error","_index","require","appendToMemberExpression","member","append","computed","object","memberExpression","property","_index","require","_inheritsComments","inherits","child","parent","key","INHERIT_KEYS","optional","Object","keys","startsWith","force","inheritsComments","_index","require","_index2","prependToMemberExpression","member","prepend","isSuper","object","Error","memberExpression","getAssignmentIdentifiers","node","search","concat","ids","Object","create","length","id","pop","type","push","elements","left","properties","value","argument","operator","name","_index","require","getBindingIdentifiers","node","duplicates","outerOnly","newBindingsOnly","search","concat","ids","Object","create","length","id","shift","isAssignmentExpression","isUnaryExpression","isUpdateExpression","isIdentifier","_ids","name","push","isExportDeclaration","isExportAllDeclaration","isDeclaration","declaration","isFunctionDeclaration","isFunctionExpression","keys","type","i","key","nodes","Array","isArray","DeclareClass","DeclareFunction","DeclareModule","DeclareVariable","DeclareInterface","DeclareTypeAlias","DeclareOpaqueType","InterfaceDeclaration","TypeAlias","OpaqueType","CatchClause","LabeledStatement","UnaryExpression","AssignmentExpression","ImportSpecifier","ImportNamespaceSpecifier","ImportDefaultSpecifier","ImportDeclaration","TSImportEqualsDeclaration","ExportSpecifier","ExportNamespaceSpecifier","ExportDefaultSpecifier","FunctionDeclaration","FunctionExpression","ArrowFunctionExpression","ObjectMethod","ClassMethod","ClassPrivateMethod","ForInStatement","ForOfStatement","ClassDeclaration","ClassExpression","RestElement","UpdateExpression","ObjectProperty","AssignmentPattern","ArrayPattern","ObjectPattern","VariableDeclaration","VariableDeclarator","_getBindingIdentifiers","require","_default","exports","default","getOuterBindingIdentifiers","node","duplicates","getBindingIdentifiers","_index","require","getNameFromLiteralId","id","isNullLiteral","isRegExpLiteral","pattern","flags","isTemplateLiteral","quasis","map","quasi","value","raw","join","undefined","String","getObjectMemberKey","node","computed","isLiteral","key","getFunctionName","parent","name","originalNode","prefix","isObjectProperty","isObjectMethod","isClassMethod","kind","isVariableDeclarator","init","isAssignmentExpression","operator","right","left","isIdentifier","isPrivateName","_index","require","traverse","node","handlers","state","enter","exit","traverseSimpleImpl","ancestors","keys","VISITOR_KEYS","type","key","subNode","Array","isArray","i","length","child","push","index","pop","_getBindingIdentifiers","require","isBinding","node","parent","grandparent","type","keys","getBindingIdentifiers","i","length","key","val","Array","isArray","includes","_index","require","BLOCK_SCOPED_SYMBOL","Symbol","for","isLet","node","isVariableDeclaration","kind","_index","require","_isLet","isBlockScoped","node","isFunctionDeclaration","isClassDeclaration","isLet","_isType","require","_index","isImmutable","node","isType","type","isIdentifier","name","_index","require","isNodesEquivalent","a","b","type","fields","Object","keys","NODE_FIELDS","visitorKeys","VISITOR_KEYS","field","val_a","val_b","Array","isArray","length","i","includes","key","isReferenced","node","parent","grandparent","type","property","computed","object","init","body","key","superClass","right","source","local","id","_index","require","isScope","node","parent","isBlockStatement","isFunction","isCatchClause","isPattern","isScopable","_index","require","isSpecifierDefault","specifier","isImportDefaultSpecifier","isIdentifier","imported","exported","name","_isValidIdentifier","require","RESERVED_WORDS_ES3_ONLY","Set","isValidES3Identifier","name","isValidIdentifier","has","_index","require","BLOCK_SCOPED_SYMBOL","Symbol","for","isVar","node","isVariableDeclaration","kind","_getBindingIdentifiers","require","_index","_index2","_productions","_cloneNode","gatherSequenceExpressions","nodes","declars","exprs","ensureLastUndefined","node","isEmptyStatement","isExpression","push","isExpressionStatement","expression","isVariableDeclaration","kind","declar","declarations","bindings","getBindingIdentifiers","key","Object","keys","id","cloneNode","init","assignmentExpression","isIfStatement","consequent","buildUndefinedNode","alternate","conditionalExpression","test","isBlockStatement","body","indexOf","length","sequenceExpression","_gatherSequenceExpressions","require","toSequenceExpression","nodes","scope","length","declars","result","gatherSequenceExpressions","declar","push","_isReactComponent","require","_isCompatTag","_buildChildren","_assertNode","_index","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_createTypeAnnotationBasedOnTypeof","_createFlowUnionType","_createTSUnionType","_productions","_index2","_cloneNode","_clone","_cloneDeep","_cloneDeepWithoutLoc","_cloneWithoutLoc","_addComment","_addComments","_inheritInnerComments","_inheritLeadingComments","_inheritsComments","_inheritTrailingComments","_removeComments","_index3","_index4","_ensureBlock","_toBindingIdentifierName","_toBlock","_toComputedKey","_toExpression","_toIdentifier","_toKeyAlias","_toStatement","_valueToNode","_index5","_appendToMemberExpression","_inherits","_prependToMemberExpression","_removeProperties","_removePropertiesDeep","_removeTypeDuplicates","_getAssignmentIdentifiers","_getBindingIdentifiers","_getOuterBindingIdentifiers","_getFunctionName","_traverse","_traverseFast","_shallowEqual","_is","_isBinding","_isBlockScoped","_isImmutable","_isLet","_isNode","_isNodesEquivalent","_isPlaceholderType","_isReferenced","_isScope","_isSpecifierDefault","_isType","_isValidES3Identifier","_isValidIdentifier","_isVar","_matchesPattern","_validate","_buildMatchMemberExpression","_index6","_deprecationWarning","_toSequenceExpression","react","isReactComponent","isCompatTag","buildChildren","toSequenceExpression","process","env","BABEL_TYPES_8_BREAKING","console","warn","randomUUID","randomUUID","randomUUID","randomUUID","join","parse","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","match","readFile","existsSync","path","parseYaml","path","existsSync","readFile","parseYaml","name","version","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","readFile","existsSync","path","path","existsSync","readFile","randomUUID","randomUUID","randomUUID","SPDX_VERSION","randomUUID","randomUUID","SWID_SPEC_VERSION","sanitizeTagId","randomUUID","escapeXml","body","readFile","readFile","packageKey","path","packageName","severityOrder","parse","join"]}