Compare commits

..

1 Commits

Author SHA1 Message Date
2fab6cb0ac feat(arch): implement Phase 2 base vertical slices and shared UI
- Scaffold shared UI fragments and styles in src/shared/ui/
- Implement full Auth vertical slice in src/features/auth/ with WebAuthn ceremonies and recovery endpoints
- Implement full Admin vertical slice in src/features/admin/ with responsive tables and mobile decks
- Add public client-side JS utilities and pure JS BIP-39 module
- Mount routes in src/main.ts and keep legacy server/ and ui/ quarantined
- Add pure JSX and API tests for Auth and Admin slices
2026-08-27 19:27:45 -07:00
282 changed files with 2721 additions and 68814 deletions

View File

@ -1,13 +0,0 @@
#!/usr/bin/env bash
# If we are inside an internal detached worktree (.forum/worktree_meta), we must skip post-checkout
# to prevent vector sync cascades when managing Git internal states.
if [[ "$PWD" == *".forum/worktree_meta"* ]] || [[ "$GIT_DIR" == *".forum/worktree_meta"* ]]; then
exit 0
fi
# Fetch the meta-state branch silently in the background
git fetch origin meta-state:meta-state --quiet 2>/dev/null || true
# Synchronize the vector databases using the delta replay engine
deno run -A .forum/src/core/replay_engine.ts --sync

View File

@ -1,14 +0,0 @@
#!/usr/bin/env bash
# Agent Forum v4 - Post-Commit Hook
# Automatically executes Bounded Model Checking rules on the newly minted commit
# and attaches Cryptographic Git Notes (evaluator_state) to HEAD.
REPO_ROOT=$(git rev-parse --show-toplevel)
RUNNER="$REPO_ROOT/.forum/src/run.ts"
if [ -f "$RUNNER" ] && command -v deno &> /dev/null; then
echo "-> Agent Forum: Flushing pending deferred notes..."
deno eval "import { flushPendingNotes } from 'file://$REPO_ROOT/.forum/src/core/git_storage.ts'; await flushPendingNotes('HEAD');" || true
fi
exit 0

View File

@ -1,7 +0,0 @@
#!/usr/bin/env bash
# Fetch the meta-state branch silently in the background
git fetch origin meta-state:meta-state --quiet 2>/dev/null || true
# Synchronize the vector databases using the delta replay engine
deno run -A .forum/src/core/replay_engine.ts --sync

View File

@ -1,86 +0,0 @@
#!/usr/bin/env bash
# Agent Forum v4 - Pre-Commit Hook
#
# This hook executes Git-Native Agent Collaboration Ecosystem tasks before every commit:
# 1. Generates Semantic Code Intelligence Protocol (SCIP) & AST graphs.
# 2. Runs fast Static Analysis (Semgrep) if available.
# 3. Validates Bounded Model Checking rules via transitions.json.
# 4. Writes telemetry/reasoning payloads to Git Notes.
export FORUM_DEFER_NOTES=1
# Clear any stale pending notes from aborted commits
PENDING_FILE=$(git rev-parse --git-path forum_pending_notes.jsonl 2>/dev/null || echo ".git/forum_pending_notes.jsonl")
rm -f "$PENDING_FILE"
echo "=================================================="
echo " Agent Forum v4 - Pre-Commit Validation "
echo "=================================================="
# Exit on any failure
set -e
REPO_ROOT=$(git rev-parse --show-toplevel)
CLI="$REPO_ROOT/.forum/src/cli.ts"
if [ -f "$CLI" ] && command -v deno &> /dev/null; then
echo "Running Agent Forum meta-state checks..."
# Run the meta-state manager to extract structural diffs and enforce rules.
# Note: Using run -A for Deno as it requires fs and run permissions to inspect git
if ! deno run -A "$CLI" sync --pre-commit; then
echo "❌ Agent Forum Bounded Model Checking failed. Commit aborted."
exit 1
fi
# Optional: AST Extraction using tree-sitter
if command -v tree-sitter &> /dev/null; then
echo "-> Generating local AST structures..."
START_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
find "$REPO_ROOT/src" \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \) 2>/dev/null | while read -r file; do
rel_path="${file#"$REPO_ROOT/"}"
mkdir -p "$REPO_ROOT/.forum/ast/$(dirname "$rel_path")"
tree-sitter parse "$file" > "$REPO_ROOT/.forum/ast/$rel_path.ast" 2>/dev/null || true
done
END_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
DURATION=$((END_TS - START_TS))
TRACE_FILE=$(git rev-parse --git-path forum_trace.jsonl)
echo "{\"cmd\":\"tree-sitter (batch ast extraction)\",\"duration_ms\":$DURATION,\"timestamp\":$START_TS,\"exit_code\":0}" >> "$TRACE_FILE"
echo " AST structures saved to .forum/ast/"
fi
if command -v deno &> /dev/null; then
echo "-> Generating Deno dependency graph..."
START_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
mkdir -p "$REPO_ROOT/.forum/ast"
deno info --json src/run.ts > "$REPO_ROOT/.forum/ast/deno_graph.json" 2>/dev/null || true
END_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
DURATION=$((END_TS - START_TS))
TRACE_FILE=$(git rev-parse --git-path forum_trace.jsonl)
echo "{\"cmd\":\"deno info --json src/run.ts\",\"duration_ms\":$DURATION,\"timestamp\":$START_TS,\"exit_code\":0}" >> "$TRACE_FILE"
echo " Deno dependency graph saved to .forum/ast/deno_graph.json"
fi
# Optional: Fast Security Scan
if command -v semgrep &> /dev/null; then
echo "-> Running Semgrep baseline scan..."
START_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
mkdir -p "$REPO_ROOT/.forum/security"
semgrep scan --config=auto --json -o "$REPO_ROOT/.forum/security/semgrep_baseline.json" || true
END_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
DURATION=$((END_TS - START_TS))
TRACE_FILE=$(git rev-parse --git-path forum_trace.jsonl)
echo "{\"cmd\":\"semgrep\",\"duration_ms\":$DURATION,\"timestamp\":$START_TS,\"exit_code\":0}" >> "$TRACE_FILE"
echo " Semgrep scan results saved to .forum/security/semgrep_baseline.json"
fi
echo "-> Agent Forum: Evaluating BMC rules & certifying commit..."
deno run -A "$CLI" run || { echo "❌ Agent Forum BMC pipeline rejected the commit."; exit 1; }
else
echo "⚠️ Agent Forum meta-state manager (Deno script) not found or Deno not installed. Skipping."
fi
echo "✅ Pre-commit validation passed."
exit 0

View File

@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Agent Forum v4 - Pre-Push Synchronization Hook
# Automatically syncs the 'meta-state' orphan branch and all agent git notes
# whenever any branch is pushed to a remote.
remote="$1"
url="$2"
echo "-> Agent Forum: Syncing meta-state and Git Notes to remote '${remote}'..."
# Run pipeline rules evaluation (e.g., Gatekeeper, Adversary)
REPO_ROOT=$(git rev-parse --show-toplevel)
CLI="$REPO_ROOT/.forum/src/cli.ts"
if [ -f "$CLI" ] && command -v deno &> /dev/null; then
echo "-> Agent Forum: Running pre-push pipeline rules..."
deno run -A "$CLI" run --push || { echo "❌ Pre-push pipeline rejected the commit."; exit 1; }
fi
# 1. Push the meta-state branch if it exists locally (using --no-verify to stop recursion)
if git rev-parse --verify meta-state >/dev/null 2>&1; then
git push --no-verify "$remote" meta-state:meta-state --force --quiet || echo "⚠️ Warning: Failed to push meta-state branch."
fi
# 2. Push all agent Git Notes across all namespaces (using --no-verify)
git push --no-verify "$remote" 'refs/notes/*:refs/notes/*' --force --quiet || echo "⚠️ Warning: Failed to push Git Notes."
echo "-> Agent Forum: State synchronization complete."
exit 0

View File

@ -1,175 +0,0 @@
/**
* Agent Forum v4 - Adversary Agent
*
* Role: The Security Auditor, Quality Engineer, and Performance Engineer.
* Inputs: SCIP graphs, CFGs (Control Flow Graphs), Mutation scores, OTel Traces
* Outputs: Edge-case tests, mutations, bottlenecks
*/
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { writeNote } from "../core/git_storage.ts";
import type { AdversaryReport, MutationMetrics } from "../core/types.ts";
import { analyzeSecurity } from "./adversary_security.ts";
import { analyzeQuality } from "./adversary_quality.ts";
import { analyzePerformance } from "./adversary_performance.ts";
/**
* Helper to write a JSON payload to a specific Git Note namespace.
*/
async function runAdversaryAnalysisCore(cliArgs: string[], cwd: string) {
console.log(
"-> Adversary Agent: Initiating full-spectrum attack and analysis...",
);
// Run all domain gateways concurrently
const [qualityResult, securityResult, performanceResult] = await Promise
.allSettled([
analyzeQuality(cwd, cliArgs),
analyzeSecurity(cwd),
analyzePerformance(cwd),
]);
const qualityMutations = qualityResult.status === "fulfilled"
? qualityResult.value.qualityMutations
: [];
const mutationMetricsPayload = qualityResult.status === "fulfilled"
? qualityResult.value.mutationMetricsPayload
: null;
const qualityError = qualityResult.status === "fulfilled"
? qualityResult.value.error
: qualityResult.reason;
const securityVulnerabilities = securityResult.status === "fulfilled"
? securityResult.value
: [];
const securityError = securityResult.status === "rejected"
? securityResult.reason
: null;
const performanceBottlenecks = performanceResult.status === "fulfilled"
? performanceResult.value
: [];
const performanceError = performanceResult.status === "rejected"
? performanceResult.reason
: null;
const findings: AdversaryReport = {
agent: "Adversary",
timestamp: Date.now(),
securityVulnerabilities,
qualityMutations,
performanceBottlenecks,
};
console.log("-> Adversary Agent: Analysis complete.");
if (mutationMetricsPayload) {
try {
await writeNote<MutationMetrics>(
"mutation_metrics",
mutationMetricsPayload,
"HEAD",
cwd,
);
console.log(
" -> Mutation metrics written to Git Notes (refs/notes/mutation_metrics).",
);
} catch (e) {
throw new Error(
`Failed to write mutation_metrics to Git Notes: ${
e instanceof Error ? e.message : String(e)
}`,
);
}
}
const errors = [qualityError, securityError, performanceError].filter(
Boolean,
);
if (errors.length > 0) {
const errorMsg = errors.map((e) => e instanceof Error ? e.message : String(e)).join(" | ");
// Write Blocked status on failure
try {
// deno-lint-ignore no-explicit-any
await writeNote<any>(
"adversary_report",
{
agent: "Adversary",
timestamp: Date.now(),
status: "Blocked",
error: errorMsg,
},
"HEAD",
cwd,
);
} catch (_) {
// Ignore fallback write failure
}
throw new Error(`Domain gateways failed: ${errorMsg}`);
}
try {
await writeNote<AdversaryReport>("adversary_report", findings, "HEAD", cwd);
console.log(
"-> Threat vectors and edge-cases written to Git Notes (refs/notes/adversary_report).",
);
} catch (e) {
throw new Error(
`Failed to write adversary report to Git Notes: ${
e instanceof Error ? e.message : String(e)
}`,
);
}
}
export async function runAdversaryAnalysis(
cliArgs: string[] = Deno.args,
cwd: string = Deno.cwd(),
) {
try {
await runAdversaryAnalysisCore(cliArgs, cwd);
} catch (e) {
const errorMsg = e instanceof Error ? e.message : String(e);
// Always write the Blocked fallback note if runAdversaryAnalysisCore fails and hasn't already.
// Core will throw "Domain gateways failed:" *after* writing the note.
if (!errorMsg.startsWith("Domain gateways failed:")) {
try {
// deno-lint-ignore no-explicit-any
await writeNote<any>(
"adversary_report",
{
agent: "Adversary",
timestamp: Date.now(),
status: "Blocked",
error: errorMsg,
},
"HEAD",
cwd,
);
} catch (_) {
// Ignore fallback write failure
}
}
// Crucially, rethrow to fail the process
throw e;
}
}
export async function main(args: string[] = Deno.args) {
const parsed = parseArgs(args, {
boolean: ["run", "full-mutation", "adversary"],
});
if (parsed["run"] || parsed["adversary"] || parsed["full-mutation"]) {
await runAdversaryAnalysis(args);
} else {
console.log("Adversary Agent installed. Run with --run flag.");
}
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,67 +0,0 @@
import { resolveGitPath } from "../core/git_path_resolver.ts";
import { join } from "jsr:@std/path@0.224.0";
import { writeNote } from "../core/git_storage.ts";
export async function analyzePerformance(cwd: string) {
console.log(" [Performance] Ingesting Execution Traces...");
// deno-lint-ignore no-explicit-any
const performanceBottlenecks: any[] = [];
let traceFile = "";
try {
traceFile = await resolveGitPath("forum_trace.jsonl", cwd);
} catch {
traceFile = join(cwd || Deno.cwd(), ".git", "forum_trace.jsonl");
}
try {
const content = await Deno.readTextFile(traceFile);
const lines = content.split("\n").filter((line) => line.trim() !== "");
// deno-lint-ignore no-explicit-any
const slowTraces: any[] = [];
for (const line of lines) {
try {
const trace = JSON.parse(line);
if (trace.duration_ms > 100) {
slowTraces.push(trace);
}
} catch {
// Ignore malformed trace lines
}
}
if (slowTraces.length > 0) {
performanceBottlenecks.push({
source: "execution-telemetry",
slowTraces: slowTraces,
});
await writeNote("otel_traces", slowTraces, "HEAD", cwd);
}
} catch (e) {
if (!(e instanceof Deno.errors.NotFound)) {
throw new Error(
`Failed to process execution traces: ${
e instanceof Error ? e.message : String(e)
}`,
);
}
// If NotFound, just return empty bottlenecks
} finally {
// Explicitly delete the trace file to prevent trace leakage between runs
try {
if (traceFile) {
await Deno.remove(traceFile);
}
} catch (e) {
if (!(e instanceof Deno.errors.NotFound)) {
throw new Error(
`Failed to cleanup execution trace file: ${
e instanceof Error ? e.message : String(e)
}`,
);
}
}
}
return performanceBottlenecks;
}

View File

@ -1,189 +0,0 @@
import { join } from "https://deno.land/std@0.224.0/path/mod.ts";
import { existsSync } from "https://deno.land/std@0.224.0/fs/exists.ts";
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { runCommand } from "../core/sys_exec.ts";
import type { MutationMetrics } from "../core/types.ts";
import {
createStrykerConfigOverride,
parseMutationReport,
} from "./adversary_utils.ts";
export async function analyzeQuality(cwd: string, cliArgs: string[]) {
console.log(" [Quality] Analyzing Mutation Scores (e.g., Stryker)...");
// deno-lint-ignore no-explicit-any
const qualityMutations: any[] = [];
let mutationMetricsPayload: MutationMetrics | null = null;
let analysisError: Error | null = null;
// Read agent-forum config to override Stryker arguments
let strykerIgnoreTests: string[] = [];
let showProgress = false;
let strykerEnabled = true;
try {
const configPath = join(cwd, "agent-forum.json");
if (existsSync(configPath)) {
const config = JSON.parse(Deno.readTextFileSync(configPath));
if (config.stryker) {
if (config.stryker.enabled === false) {
strykerEnabled = false;
}
if (Array.isArray(config.stryker.ignoreTests)) {
strykerIgnoreTests = config.stryker.ignoreTests;
}
if (typeof config.stryker.showProgress === "boolean") {
showProgress = config.stryker.showProgress;
}
}
}
} catch (e) {
throw new Error(
`Failed to parse agent-forum.json config: ${
e instanceof Error ? e.message : String(e)
}`,
);
}
// Environmental override to bypass or force Stryker during development
if (
Deno.env.get("SKIP_STRYKER") === "1" ||
Deno.env.get("FAST_COMMIT") === "1"
) {
strykerEnabled = false;
}
if (Deno.env.get("RUN_STRYKER") === "1") {
strykerEnabled = true;
}
// Extract targeted files from args if provided via run.ts
const parsedArgs = parseArgs(cliArgs, {
boolean: ["run", "full-mutation"],
string: ["targets"],
});
if (!strykerEnabled && !parsedArgs["full-mutation"]) {
console.log(
" ⚡ [Quality] Stryker mutation testing temporarily disabled (architectural rewrite in progress).",
);
mutationMetricsPayload = {
timestamp: Date.now(),
status: "Skipped",
reason:
"Temporarily disabled during architectural rewrite (set 'stryker.enabled: true' in agent-forum.json or RUN_STRYKER=1 to enable).",
mutationScore: 100,
survivingMutants: [],
};
} else {
const strykerArgs = ["run"];
const tmpConfigPath = createStrykerConfigOverride(
cwd,
strykerIgnoreTests,
showProgress,
);
if (tmpConfigPath) {
strykerArgs.push(tmpConfigPath);
}
if (!parsedArgs["full-mutation"] && parsedArgs.targets) {
const rawTargets = parsedArgs.targets.split(",").filter(Boolean);
// Filter to only include source files (e.g. .ts, .tsx, .js)
const validTargets = rawTargets.filter((f) =>
f.endsWith(".ts") || f.endsWith(".tsx") || f.endsWith(".js")
);
// Filter to only include core domain source files (e.g. src/core/*.ts)
const mutableTargets = validTargets.filter((f) =>
f.startsWith("src/core/") || f.startsWith(".forum/src/core/")
);
if (mutableTargets.length === 0) {
console.log(
" No valid, mutable source files changed. Skipping mutation testing.",
);
mutationMetricsPayload = {
timestamp: Date.now(),
status: "Skipped",
reason: "No valid mutable source files changed.",
mutationScore: 100,
survivingMutants: [],
};
if (tmpConfigPath && existsSync(tmpConfigPath)) {
try {
Deno.removeSync(tmpConfigPath);
} catch (_e) {
// best effort cleanup
}
}
return {
qualityMutations,
mutationMetricsPayload,
error: analysisError,
};
}
// Instruct Stryker to only mutate specific files for performance
strykerArgs.push("--mutate");
strykerArgs.push(mutableTargets.join(","));
} else if (parsedArgs["full-mutation"]) {
console.log(
" [Quality] Full mutation run requested. Mutating the entire codebase...",
);
}
try {
await runCommand("stryker", strykerArgs, {
cwd: cwd,
mergeStderr: true,
});
} catch {
// Stryker returns non-zero when mutants survive. This is expected.
// We will parse the report below.
}
try {
const mutationReportPath = join(
cwd,
"reports",
"mutation",
"mutation.json",
);
if (existsSync(mutationReportPath)) {
const mutationData = JSON.parse(
Deno.readTextFileSync(mutationReportPath),
);
const parsedReport = parseMutationReport(mutationData);
qualityMutations.push(...parsedReport.qualityMutations);
mutationMetricsPayload = parsedReport.metrics;
} else {
mutationMetricsPayload = {
timestamp: Date.now(),
status: "Blocked",
mutationScore: 0,
survivingMutants: [],
};
analysisError = new Error(
"Stryker run completed, but reports/mutation/mutation.json not found.",
);
}
} catch (e) {
if (!analysisError) {
analysisError = new Error(
`Failed to execute Stryker or parse mutation results: ${
e instanceof Error ? e.message : String(e)
}`,
);
}
}
if (tmpConfigPath && existsSync(tmpConfigPath)) {
try {
Deno.removeSync(tmpConfigPath);
} catch (_e) {
// Best effort cleanup
}
}
}
return { qualityMutations, mutationMetricsPayload, error: analysisError };
}

View File

@ -1,37 +0,0 @@
import { join } from "https://deno.land/std@0.224.0/path/mod.ts";
import { existsSync } from "https://deno.land/std@0.224.0/fs/exists.ts";
export async function analyzeSecurity(cwd: string) {
console.log(
" [Security] Analyzing Control Flow Graphs and Static Analysis...",
);
// deno-lint-ignore no-explicit-any
const securityVulnerabilities: any[] = [];
const semgrepPath = join(cwd, ".forum", "security", "semgrep_baseline.json");
if (existsSync(semgrepPath)) {
try {
const semgrepData = JSON.parse(await Deno.readTextFile(semgrepPath));
if (semgrepData.results && Array.isArray(semgrepData.results)) {
for (const res of semgrepData.results) {
securityVulnerabilities.push({
ruleId: res.check_id,
path: res.path,
line: res.start?.line,
severity: res.extra?.severity,
message: res.extra?.message,
});
}
}
} catch (e) {
throw new Error(
`Failed to parse semgrep baseline: ${
e instanceof Error ? e.message : String(e)
}`,
);
}
}
return securityVulnerabilities;
}

View File

@ -1,119 +0,0 @@
import { join } from "https://deno.land/std@0.224.0/path/mod.ts";
import { existsSync } from "https://deno.land/std@0.224.0/fs/exists.ts";
export function createStrykerConfigOverride(
cwd: string,
strykerIgnoreTests: string[],
showProgress: boolean = false,
): string | null {
if (strykerIgnoreTests.length === 0 && !showProgress) return null;
try {
const baseConfigPath = join(cwd, "stryker.config.json");
if (!existsSync(baseConfigPath)) return null;
const baseConfig = JSON.parse(Deno.readTextFileSync(baseConfigPath));
if (strykerIgnoreTests.length > 0) {
const ignoreFlags = strykerIgnoreTests.map((t) => `--ignore=${t}`).join(
" ",
);
const existingCmd = baseConfig.commandRunner?.command || "deno test -A";
baseConfig.commandRunner = baseConfig.commandRunner || {};
baseConfig.commandRunner.command = `${existingCmd} ${ignoreFlags}`.trim();
}
if (showProgress) {
baseConfig.reporters = baseConfig.reporters || [];
if (!baseConfig.reporters.includes("progress")) {
baseConfig.reporters.push("progress");
}
}
const tmpConfigPath = join(cwd, ".stryker-tmp-config.json");
Deno.writeTextFileSync(tmpConfigPath, JSON.stringify(baseConfig, null, 2));
return tmpConfigPath;
} catch (e) {
console.warn("Failed to generate override stryker config:", e);
return null;
}
}
import type { MutationMetrics } from "../core/types.ts";
// deno-lint-ignore no-explicit-any
export function parseMutationReport(mutationData: any) {
let totalMutants = 0;
let killed = 0;
let survived = 0;
let timedOut = 0;
const fileBreakdown: Record<
string,
{ mutants: number; surviving: number; score: number | string }
> = {};
// deno-lint-ignore no-explicit-any
const qualityMutations: any[] = [];
// deno-lint-ignore no-explicit-any
const survivingMutantsDetails: any[] = [];
if (mutationData.files) {
// deno-lint-ignore no-explicit-any
for (const [file, fileData] of Object.entries<any>(mutationData.files)) {
const survivingMutants = [];
let fileMutants = 0;
let fileSurviving = 0;
for (const m of fileData.mutants) {
totalMutants++;
fileMutants++;
if (m.status === "Killed") killed++;
else if (m.status === "Survived") {
survived++;
fileSurviving++;
survivingMutants.push({ id: m.id, status: m.status });
survivingMutantsDetails.push({
fileName: file,
mutatorName: m.mutatorName || "Unknown",
line: m.location?.start?.line || 0,
replacement: m.replacement || "",
});
} else if (m.status === "Timeout") timedOut++;
}
if (survivingMutants.length > 0) {
const fileScore = fileMutants > 0
? (((fileMutants - fileSurviving) / fileMutants) * 100).toFixed(2)
: "100";
fileBreakdown[file] = {
mutants: fileMutants,
surviving: fileSurviving,
score: fileScore,
};
qualityMutations.push({
file,
survivingMutants: survivingMutants.length,
// deno-lint-ignore no-explicit-any
mutantIds: survivingMutants.map((m: any) => m.id),
});
}
}
}
const score = totalMutants > 0
? ((killed + timedOut) / totalMutants) * 100
: 100;
const metrics: MutationMetrics = {
timestamp: Date.now(),
status: qualityMutations.length > 0 ? "Failed" : "Completed",
mutationScore: score.toFixed(2),
totalMutants: totalMutants,
surviving: survived,
fileBreakdown,
survivingMutants: survivingMutantsDetails,
};
return {
metrics,
qualityMutations,
};
}

View File

@ -1,110 +0,0 @@
/**
* Agent Forum v4 - Analyst Agent
*
* Role: Optimize human-to-agent collaboration.
* Inputs: Telemetry (JSON payloads from meta-state/Git Notes), PR threads
* Outputs: Workflow optimizations, Protocol updates
*/
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { readNote, writeNote } from "../core/git_storage.ts";
import {
getCommitContext,
readHistoricalNotes,
} from "../core/git_inspector.ts";
import type { AnalystOptimization, TelemetryPayload } from "../core/types.ts";
import { serializeAnalystOptimization } from "../core/telemetry_sql_gateway.ts";
import {
calculateFrictionMarkers,
calculateMttr,
calculatePrCommentRatio,
} from "./telemetry_calculator.ts";
export async function analyzeTelemetry() {
await runArchitectureAnalysis();
}
export async function runArchitectureAnalysis() {
console.log("-> Analyst Agent: Analyzing team friction and telemetry...");
// 1. Calculate MTTR Dynamically
let mttrStr = "Unknown (No telemetry note found for HEAD)";
try {
const context = await getCommitContext("HEAD");
if (context) {
const commitTimestamp = context.timestamp;
const notePayload = await readNote<TelemetryPayload>("telemetry");
if (notePayload && notePayload.timestamp) {
mttrStr = calculateMttr(commitTimestamp, notePayload.timestamp);
}
}
} catch (e) {
console.warn(" ⚠️ Failed to calculate MTTR:", e);
}
// 2. Ingest Telemetry Notes
let telemetryNotes: Array<{ commit: string; payload: TelemetryPayload }> = [];
try {
telemetryNotes = await readHistoricalNotes<TelemetryPayload>("telemetry");
} catch (e) {
console.warn(" ⚠️ Failed to read historical telemetry notes:", e);
}
console.log(` Found ${telemetryNotes.length} telemetry data points.`);
// 3. Synthesize Workflow Optimizations
// TODO: Gather actual PR comment counts and lines changed instead of mocked values.
const mockedCommentsCount = 15;
const mockedLinesChanged = 100;
const optimization = {
agent: "Analyst",
timestamp: Date.now(),
metrics: {
mttr: mttrStr,
prCommentRatio: calculatePrCommentRatio(
mockedCommentsCount,
mockedLinesChanged,
),
frictionMarkers: calculateFrictionMarkers(telemetryNotes),
},
proposedProtocolUpdates: [
"Update Gatekeeper checklist to clarify Auth-Yes rate limiting pre-check pattern to reduce Coder rework.",
],
};
console.log("-> Analyst Agent: Protocol updates proposed.");
try {
await writeNote<AnalystOptimization>("analyst_optimizations", optimization);
console.log(
"-> Optimizations written to Git Notes (refs/notes/analyst_optimizations).",
);
} catch (e) {
console.warn("⚠️ Failed to write analyst optimizations to Git Notes:", e);
}
try {
await serializeAnalystOptimization(optimization);
console.log("-> Optimizations written to Telemetry SQL Gateway.");
} catch (e) {
console.warn("⚠️ Failed to write analyst optimizations to SQL Gateway:", e);
}
}
export async function main(args: string[] = Deno.args) {
const parsed = parseArgs(args, {
boolean: ["run"],
});
if (parsed["run"]) {
await analyzeTelemetry();
} else {
console.log("Analyst Agent installed. Run with --run flag.");
}
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,312 +0,0 @@
/**
* Agent Forum v4 - Evaluator Agent
*
* Role: Govern pipeline integrity.
* Inputs: transitions.json (BMC rules), YAML DAGs
* Outputs: Pipeline progression (Allows or Blocks workflow transitions)
*/
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { parse as parseYaml } from "npm:yaml";
import { globToRegExp } from "https://deno.land/std@0.224.0/path/mod.ts";
import { readNote, writeNote } from "../core/git_storage.ts";
import {
getBranchHash,
getDiff,
getStagedDiff,
listBranchFiles,
readBranchFile,
} from "../core/git_inspector.ts";
import type {
EvaluatorState,
GatekeeperChecklist,
MutationMetrics,
TranslatorUpdates,
} from "../core/types.ts";
/**
* Fetches content from the meta-state branch without checking it out.
*/
/**
* Checks if a specific Git Note exists for a namespace on HEAD.
*/
export async function evaluatePipeline(cwd?: string) {
console.log("-> Evaluator Agent: Governing pipeline progression...");
// 0. Pin to immutable meta-state snapshot hash
const metaStateRef = (await getBranchHash("meta-state", cwd)) || "meta-state";
// 1. Fetch transitions.json
const transitionsStr = await readBranchFile(
metaStateRef,
"transitions.json",
cwd,
);
if (!transitionsStr) {
throw new Error(
"transitions.json not found on meta-state branch. Defaulting to strict fail-safe.",
);
}
let transitions;
try {
transitions = JSON.parse(transitionsStr);
} catch (_e) {
throw new Error("Failed to parse transitions.json.");
}
console.log(
" Loaded Bounded Model Checking rules:",
Object.keys(transitions).join(", "),
);
// 2. Fetch YAML DAGs to check task states
console.log(" Checking Project DAG constraints...");
let pipelineValid = true;
let blockReason = "";
const taskFiles = await listBranchFiles(metaStateRef, "tasks", cwd);
const tasks = [];
for (const file of taskFiles) {
const content = await readBranchFile(metaStateRef, file, cwd);
if (content) {
try {
const task = parseYaml(content);
tasks.push(task);
} catch (_e) {
const err = `Invalid YAML in task file: ${file}`;
console.warn(` ⚠️ Failed to parse YAML for ${file}`);
pipelineValid = false;
blockReason += (blockReason ? " | " : "") + err;
}
}
}
console.log(` Found ${tasks.length} tasks in meta-state:tasks/`);
// 3. Evaluate Bounded Model Checking rules
console.log(
" Evaluating role transitions and notes based on changed paths...",
);
// Get changed files
let diffs: any[] = [];
try {
diffs = await getStagedDiff(cwd);
} catch {
diffs = [];
}
if (!diffs || diffs.length === 0) {
try {
diffs = await getDiff(undefined, "HEAD", cwd);
} catch {
diffs = [];
}
}
if (!diffs || diffs.length === 0) {
try {
diffs = await getDiff("@{u}", "HEAD", cwd);
} catch {
diffs = [];
}
}
if (!diffs || diffs.length === 0) {
try {
diffs = await getDiff("HEAD~1", "HEAD", cwd);
} catch {
diffs = [];
}
}
const changedFiles = (diffs || []).map((d) => d.filepath);
const scopes = transitions.scopes || {};
const requiredRules = new Set<string>();
if (changedFiles.length > 0) {
console.log(` Found ${changedFiles.length} changed file(s).`);
for (const [scopeName, scopeDef] of Object.entries(scopes)) {
const patterns: string[] = (scopeDef as any).patterns || [];
const rules: string[] = (scopeDef as any).requires || [];
const matched = changedFiles.some((file) => {
return patterns.some((pattern) => {
const regex = globToRegExp(pattern);
return regex.test(file);
});
});
if (matched) {
console.log(` -> Matched scope: ${scopeName}`);
for (const r of rules) {
requiredRules.add(r);
}
}
}
} else {
console.log(
" No files changed. Falling back to default Coder requires for validation.",
);
if (transitions["Coder"] && transitions["Coder"].requires) {
for (const req of transitions["Coder"].requires) {
requiredRules.add(req);
}
}
}
console.log(` -> Enforcing Rules: ${Array.from(requiredRules).join(", ")}`);
// Verification based on union of rules
for (const req of requiredRules) {
if (req === "Gatekeeper_Approval") {
const gatekeeperNote = await readNote<GatekeeperChecklist>(
"gatekeeper_checklist",
"HEAD",
cwd,
);
if (
!gatekeeperNote ||
(gatekeeperNote.status !== "Completed" &&
gatekeeperNote.status !== "Approved")
) {
pipelineValid = false;
const reason =
"Gatekeeper checklist is missing or not marked as 'Approved' or 'Completed'.";
blockReason += (blockReason ? " | " : "") + reason;
console.warn(` ❌ BMC Rule Failed: ${reason}`);
} else {
console.log(` ✅ BMC Rule Passed: Gatekeeper_Approval satisfied.`);
}
}
if (req === "Adversary_Pass") {
const metricsNote = await readNote<MutationMetrics>(
"mutation_metrics",
"HEAD",
cwd,
);
if (!metricsNote) {
pipelineValid = false;
const reason = "Adversary mutation metrics are missing.";
blockReason += (blockReason ? " | " : "") + reason;
console.warn(` ❌ BMC Rule Failed: ${reason}`);
} else if (
metricsNote.status === "Blocked" || metricsNote.status === "Failed"
) {
pipelineValid = false;
const reason =
`Adversary mutation metrics status is ${metricsNote.status}.`;
blockReason += (blockReason ? " | " : "") + reason;
console.warn(` ❌ BMC Rule Failed: ${reason}`);
} else {
let criticalSurviving = false;
let badFiles: string[] = [];
// Dynamically figure out what files are critical (i.e. those matching scopes that require Adversary_Pass)
const adversaryScopes: string[] = [];
for (const [scopeName, scopeDef] of Object.entries(scopes)) {
const rules: string[] = (scopeDef as any).requires || [];
if (rules.includes("Adversary_Pass")) {
const patterns: string[] = (scopeDef as any).patterns || [];
adversaryScopes.push(...patterns);
}
}
if (metricsNote.fileBreakdown) {
for (
const [file, stats] of Object.entries(metricsNote.fileBreakdown)
) {
const matched = adversaryScopes.some((pattern) => {
const regex = globToRegExp(pattern);
return regex.test(file);
});
if (matched && stats.surviving > 0) {
criticalSurviving = true;
badFiles.push(file);
}
}
}
if (criticalSurviving) {
pipelineValid = false;
const reason = `Surviving mutants found in critical paths: ${
badFiles.join(", ")
}`;
blockReason += (blockReason ? " | " : "") + reason;
console.warn(` ❌ BMC Rule Failed: ${reason}`);
} else {
console.log(` ✅ BMC Rule Passed: Adversary_Pass satisfied.`);
}
}
}
if (req === "Translator_Check") {
const translatorNote = await readNote<TranslatorUpdates>(
"translator_updates",
"HEAD",
cwd,
);
if (!translatorNote) {
pipelineValid = false;
const reason = "Translator updates note is missing.";
blockReason += (blockReason ? " | " : "") + reason;
console.warn(` ❌ BMC Rule Failed: ${reason}`);
} else {
console.log(` ✅ BMC Rule Passed: Translator_Check satisfied.`);
}
}
// Add other rule checks here if they exist
}
const evaluationResult = {
agent: "Evaluator",
timestamp: Date.now(),
pipelineStatus: pipelineValid ? "Valid" : "Blocked",
blockReason: pipelineValid ? "" : blockReason,
activeRules: Array.from(requiredRules),
};
console.log(
`-> Evaluator Agent: Pipeline is ${evaluationResult.pipelineStatus}.`,
);
try {
await writeNote<EvaluatorState>(
"evaluator_state",
evaluationResult,
"HEAD",
cwd,
);
console.log(
"-> Evaluation state written to Git Notes (refs/notes/evaluator_state).",
);
} catch (e) {
console.warn("⚠️ Failed to write evaluator state to Git Notes:", e);
}
if (!pipelineValid) {
throw new Error(`Pipeline blocked: ${blockReason}`);
}
}
export async function main(args: string[] = Deno.args) {
const parsed = parseArgs(args, {
boolean: ["run"],
});
if (parsed["run"]) {
try {
await evaluatePipeline();
} catch (e) {
console.error((e as Error).message);
Deno.exit(1);
}
} else {
console.log("Evaluator Agent installed. Run with --run flag.");
}
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,105 +0,0 @@
/**
* Agent Forum v4 - Gatekeeper Agent
*
* Role: Bridge human requirements with technical reality.
* Inputs: Ontologies (JSON-LD), YAML DAGs (Project Schedules)
* Outputs: Verification checklists
*/
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { writeNote } from "../core/git_storage.ts";
import { readBranchFile } from "../core/git_inspector.ts";
import type { GatekeeperChecklist } from "../core/types.ts";
/**
* Fetches content from the meta-state branch without checking it out.
*/
/**
* Writes the generated verification checklist back to the meta-state branch.
* For simplicity in the PoC, we might write it to a local file or generate a Git Note.
* Alternatively, append to Git Notes for the Coder agent to consume.
*/
export async function analyzeRequirements(cwd?: string) {
console.log("-> Gatekeeper Agent: Analyzing requirements...");
// 1. Fetch Ontologies (Requirements)
const ontologyGraphStr = await readBranchFile(
"meta-state",
"ontologies/graph.jsonld",
cwd,
);
console.log(" Parsing Ontologies and YAML DAGs...");
const items: { id: string; description: string; verified: boolean }[] = [];
if (ontologyGraphStr) {
try {
const parsedGraph = JSON.parse(ontologyGraphStr);
let objects: any[] = [];
if (Array.isArray(parsedGraph)) {
objects = parsedGraph;
} else if (parsedGraph["@graph"] && Array.isArray(parsedGraph["@graph"])) {
objects = parsedGraph["@graph"];
} else if (typeof parsedGraph === "object" && parsedGraph !== null) {
objects = [parsedGraph];
}
for (const obj of objects) {
const type = obj["@type"];
const isRequirement = Array.isArray(type)
? type.includes("Requirement")
: type === "Requirement";
if (isRequirement) {
items.push({
id: obj["@id"] || obj.id || "UNKNOWN",
description: obj.description || "No description provided.",
verified: false,
});
}
}
} catch (e) {
throw new Error(`Failed to parse ontologies/graph.jsonld JSON-LD: ${e instanceof Error ? e.message : String(e)}`);
}
}
const checklist = {
generatedAt: Date.now(),
agent: "Gatekeeper",
items,
status: "Approved",
};
console.log("-> Gatekeeper Agent: Checklist generated.");
try {
await writeNote<GatekeeperChecklist>("gatekeeper_checklist", checklist, "HEAD", cwd);
console.log(
"-> Verification checklist written to Git Notes (refs/notes/gatekeeper_checklist).",
);
} catch (e) {
throw new Error(`Failed to write checklist to Git Notes: ${e instanceof Error ? e.message : String(e)}`);
}
}
export async function main(args: string[] = Deno.args) {
const parsed = parseArgs(args, {
boolean: ["run"],
});
if (parsed["run"]) {
await analyzeRequirements();
} else {
console.log("Gatekeeper Agent installed. Run with --run flag.");
}
}
if (import.meta.main) {
await main(Deno.args);
}
// test run
// another test
// third test
// fourth test

View File

@ -1,170 +0,0 @@
/**
* Agent Forum v4 - Historian Agent
*
* Role: Prevent regression and historical repetition.
* Inputs: sqlite-vec, Git Notes
* Outputs: Contextual injection (passing historical context to other agents/pipeline)
*/
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { writeNote } from "../core/git_storage.ts";
import { getDiff, readHistoricalNotes } from "../core/git_inspector.ts";
import { getVectorDatabase } from "../core/replay_engine.ts";
import type { HistorianContext, MutationMetrics } from "../core/types.ts";
/**
* Fetches Git Notes for a specific namespace across the git history.
*/
export async function gatherHistoricalContext(cwd?: string) {
console.log("-> Historian Agent: Gathering historical context...");
// 1. Construct search string from file changes
let diffs;
try {
diffs = await getDiff("HEAD~1", "HEAD", cwd);
} catch (e) {
// Fallback to diffing against the empty tree hash if HEAD~1 doesn't exist (initial commit)
try {
diffs = await getDiff("4b825dc642cb6eb9a060e54bf8d69288fbee4904", "HEAD", cwd);
} catch (_fallbackErr) {
diffs = await getDiff(undefined, "HEAD", cwd);
}
}
const searchVectorString = diffs.map((d) => d.filepath).join(" ");
console.log(
` Search vector string derived from diff: "${searchVectorString}"`,
);
// 2. Fetch from Replay Engine Vector DBs
console.log(" Querying decentralized vector cache via Replay Engine...");
const extractedVectors: string[] = [];
const domains = ["docs", "telemetry"];
for (const domain of domains) {
try {
const db = await getVectorDatabase(domain, cwd);
try {
// Generate pseudo-vector matching float[3] dimensional schema of vec0
const pseudoEmbedding = [
(searchVectorString.charCodeAt(0) || 0) / 255.0,
(searchVectorString.charCodeAt(1) || 0) / 255.0,
(searchVectorString.charCodeAt(2) || 0) / 255.0,
];
const embeddingStr = JSON.stringify(pseudoEmbedding);
const results = db.prepare(
`SELECT s.symbol_name, s.filepath, s.signature
FROM ${domain}_symbols s
JOIN vec_${domain} v ON v.rowid = s.id
WHERE s.is_deleted = 0
AND v.embedding MATCH ?
AND k = 3`
).all(embeddingStr) as Array<{
symbol_name: string;
filepath: string;
signature: string;
}>;
for (const row of results) {
extractedVectors.push(
`${domain.toUpperCase()}: ${row.symbol_name} (${row.filepath})`,
);
}
} catch (e) {
throw new Error(`Historian Agent: Domain query failed for ${domain}: ${(e as Error).message}`);
} finally {
try {
db.close();
} catch {
// ignore
}
}
} catch (e) {
if (e instanceof Error && e.message.includes("Domain query failed")) {
throw e;
}
throw new Error(`Historian Agent: Replay Engine failed to locate deltas or initialize DB for domain ${domain}: ${(e as Error).message}`);
}
}
// 3. Fetch Git Notes (Reasoning, Telemetry, etc.)
const reasoningNotes = await readHistoricalNotes<Record<string, unknown>>(
"reasoning",
undefined,
cwd
);
const aiNotes = await readHistoricalNotes<Record<string, unknown>>("ai", undefined, cwd);
const mutationNotes = await readHistoricalNotes<MutationMetrics>(
"mutation_metrics",
undefined,
cwd
);
let mutationWarning = "";
if (mutationNotes.length >= 2) {
try {
const current = mutationNotes[0].payload;
const previous = mutationNotes[1].payload;
if (
current.mutationScore && previous.mutationScore &&
parseFloat(String(current.mutationScore)) <
parseFloat(String(previous.mutationScore))
) {
mutationWarning =
`WARNING: Mutation score regressed from ${previous.mutationScore}% to ${current.mutationScore}%. Test rigor is degrading.`;
console.warn(` ${mutationWarning}`);
}
} catch (e) {
console.warn(
" ⚠️ Failed to parse historical mutation notes for regression check.",
);
}
}
const combinedContext = {
agent: "Historian",
timestamp: Date.now(),
extractedVectors: extractedVectors.length
? extractedVectors
: ["No historical vector matches found."],
historicalNotes: [
...reasoningNotes.map((n: { payload: Record<string, unknown> }) =>
JSON.stringify(n.payload)
),
...aiNotes.map((n: { payload: Record<string, unknown> }) =>
JSON.stringify(n.payload)
),
], // mapped back to strings for payload matching
directive:
"Ensure new Coder implementations avoid previously failed architectural patterns.",
warnings: mutationWarning ? [mutationWarning] : [],
};
console.log("-> Historian Agent: Context gathered successfully.");
// Provide contextual injection (e.g., via writing to a specific Git Note for the Coder)
try {
await writeNote<HistorianContext>("historical_context", combinedContext, "HEAD", cwd);
console.log(
"-> Contextual injection written to Git Notes (refs/notes/historical_context).",
);
} catch (e) {
throw new Error(`Historian Agent: Failed to inject historical context to Git Notes: ${(e as Error).message}`);
}
}
export async function main(args: string[] = Deno.args) {
const parsed = parseArgs(args, {
boolean: ["run"],
});
if (parsed["run"]) {
await gatherHistoricalContext();
} else {
console.log("Historian Agent installed. Run with --run flag.");
}
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,38 +0,0 @@
import type { TelemetryPayload } from "../core/types.ts";
export function calculateMttr(
commitTimestamp: number,
telemetryTimestamp: number,
): string {
const deltaMs = Math.abs(commitTimestamp - telemetryTimestamp);
const deltaHours = (deltaMs / (1000 * 60 * 60)).toFixed(2);
return `${deltaHours} hours`;
}
export function calculatePrCommentRatio(
commentsCount: number,
linesChanged: number,
): number {
if (linesChanged <= 0) return 0;
return Number((commentsCount / linesChanged).toFixed(2));
}
export function calculateFrictionMarkers(
telemetryNotes: Array<{ commit: string; payload: TelemetryPayload }>,
): string {
let failedChecks = 0;
for (const note of telemetryNotes) {
if (
note.payload.status && note.payload.status.toLowerCase() !== "success"
) {
failedChecks++;
}
}
if (failedChecks > 5) {
return "High rate of Gatekeeper check failures.";
} else if (failedChecks > 0) {
return "Occasional Gatekeeper check failures.";
}
return "Low friction detected.";
}

View File

@ -1,109 +0,0 @@
/**
* Agent Forum v4 - Translator Agent
*
* Role: Maintain code-to-documentation parity.
* Inputs: SCIP diffs, existing docs
* Outputs: API references, guides (updates to docs in the repo)
*/
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { join } from "https://deno.land/std@0.224.0/path/mod.ts";
import { existsSync } from "https://deno.land/std@0.224.0/fs/exists.ts";
import { writeNote } from "../core/git_storage.ts";
import { getDiff } from "../core/git_inspector.ts";
import type { TranslatorUpdates } from "../core/types.ts";
import * as scip from "npm:@sourcegraph/scip-typescript@0.3.3/dist/src/scip.js";
const CWD = Deno.cwd();
export async function updateDocumentation() {
console.log(
"-> Translator Agent: Analyzing code diffs for documentation drift...",
);
// 1. In a real scenario, read SCIP diffs or Merkle diffs to see changed interfaces
const diffs = await getDiff("HEAD~1", "HEAD");
const changedFiles = diffs.map((d) => d.filepath);
console.log(` Detected changes in ${changedFiles.length} files.`);
const proposedUpdates: { file: string; section: string; content: string }[] =
[];
let scipIndex: any = null;
const scipPath = join(CWD, "index.scip");
if (!existsSync(scipPath)) {
console.warn(" ⚠️ index.scip not found. Failing gracefully.");
} else {
try {
const buffer = Deno.readFileSync(scipPath);
scipIndex = scip.scip.Index.deserializeBinary(buffer);
console.log(
` Successfully loaded SCIP index with ${scipIndex.documents.length} documents.`,
);
} catch (e) {
console.warn(" ⚠️ Failed to deserialize index.scip:", e);
}
}
if (scipIndex) {
for (const file of changedFiles) {
const doc = scipIndex.documents.find((d: any) =>
d.relative_path === file
);
if (doc) {
if (doc.occurrences && doc.occurrences.length > 0) {
proposedUpdates.push({
file: `docs/drift/${file}.md`,
section:
`Document structural changes detected in SCIP index for ${file}`,
content: scipPath,
});
}
}
}
}
// 2. Generate Doc Updates
const docUpdates = {
agent: "Translator",
timestamp: Date.now(),
proposedDocAdditions: proposedUpdates.length > 0 ? proposedUpdates : [
{
file: "none",
section:
"No structural AST drift detected requiring documentation updates.",
content: "none",
},
],
};
console.log("-> Translator Agent: Documentation updates proposed.");
// Write the proposed doc updates to Git Notes (or in a real scenario, write directly to doc files)
try {
await writeNote<TranslatorUpdates>("translator_updates", docUpdates);
console.log(
"-> Doc proposals written to Git Notes (refs/notes/translator_updates).",
);
} catch (e) {
throw new Error("Failed to write translator updates to Git Notes: " + e);
}
}
export async function main(args: string[] = Deno.args) {
const parsed = parseArgs(args, {
boolean: ["run"],
});
if (parsed["run"]) {
await updateDocumentation();
} else {
console.log("Translator Agent installed. Run with --run flag.");
}
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,128 +0,0 @@
/**
* Agent Forum v4 - Meta-State Bootstrap Tool
* Scaffolds and commits baseline JSON-LD requirements, task DAGs, and transitions.json
* directly to the orphan 'meta-state' branch via headless virtual commits.
*/
import { fromFileUrl, join } from "jsr:@std/path";
import { v7 } from "jsr:@std/uuid@1";
import { runCommand } from "./core/sys_exec.ts";
import { createVirtualCommit } from "./core/git_virtual_branch.ts";
export async function bootstrapMetaState(cwd?: string): Promise<string> {
console.log("-> Bootstrapping Agent Forum Meta-State...");
const repoRootCmd = await runCommand(
"git",
["rev-parse", "--show-toplevel"],
{ cwd },
);
const repoRoot = repoRootCmd.stdout.trim();
const filesToUpdate: Record<string, string> = {};
// 1. Generate JSON-LD Requirement Graph
const ontologyGraph = [
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Auth-Yes Project",
"description":
"Auto-bootstrapped application architecture for Agent Forum governance.",
},
{
"@type": "Requirement",
"id": "REQ-001",
"description":
"Ensure zero-trust authentication and rate-limiting patterns are enforced on all API routes.",
"status": "Approved",
},
{
"@type": "Requirement",
"id": "REQ-002",
"description":
"Maintain strict code-to-documentation parity using SCIP index extraction.",
"status": "Approved",
},
];
filesToUpdate["ontologies/graph.jsonld"] = JSON.stringify(
ontologyGraph,
null,
2,
);
// 2. Initialize decentralized delta inboxes
const domains = ["docs", "telemetry"];
for (const domain of domains) {
const seedUuid = v7.generate();
const seedSql = `BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS ${domain}_symbols (
id TEXT PRIMARY KEY,
filepath TEXT,
symbol_name TEXT,
signature TEXT,
content_hash TEXT,
is_deleted INTEGER DEFAULT 0,
last_updated TEXT
);
CREATE VIRTUAL TABLE IF NOT EXISTS vec_${domain} USING vec0(
embedding float[3]
);
COMMIT;
`;
filesToUpdate[`deltas/${domain}/${seedUuid}.sql`] = seedSql;
}
// 3. Generate Initial Task DAG
const initialTask = `id: TASK-001
title: Bootstrap Agent Forum Governance
status: Done
description: Automatically initialized meta-state architecture and baseline requirements.
blocked_by: []
`;
filesToUpdate["tasks/TASK-001.yaml"] = initialTask;
// 4. Copy transitions.json if present
try {
let transitionsContent = "";
const baseDir = import.meta.dirname ??
fromFileUrl(new URL(".", import.meta.url));
const candidatePaths = [
join(baseDir, "core", "transitions.json"),
join(repoRoot, ".forum", "src", "core", "transitions.json"),
join(repoRoot, "src", "core", "transitions.json"),
];
for (const p of candidatePaths) {
try {
transitionsContent = await Deno.readTextFile(p);
if (transitionsContent) break;
} catch {
// Try next candidate
}
}
if (transitionsContent) {
filesToUpdate["transitions.json"] = transitionsContent;
}
} catch {
// Safe fallback
}
// 5. Commit headless virtual commit directly to meta-state
const commitId = await createVirtualCommit({
targetBranch: "meta-state",
filesToUpdate,
message: "chore(meta-state): bootstrap initial ontologies and task DAGs",
cwd,
});
console.log(
`🎉 Meta-state successfully bootstrapped locally (Commit: ${
commitId.substring(0, 7)
})!`,
);
return commitId;
}
export async function main(_args: string[] = Deno.args) {
await bootstrapMetaState();
}

View File

@ -1,151 +0,0 @@
/**
* Agent Forum v4 - Unified CLI Router
*/
interface CommandDef {
path: string;
desc: string;
}
const COMMANDS: Record<string, CommandDef> = {
"run": {
path: "./run.ts",
desc: "Run the pipeline tools and agents",
},
"status": {
path: "./status.ts",
desc: "Show traceability and status dashboard",
},
"metrics-gov": {
path: "./core/governance_metrics.ts",
desc: "Show governance and process telemetry metrics",
},
"metrics-vec": {
path: "./core/vector_metrics_view.ts",
desc: "Show per-domain vector projections and recent activity",
},
"metrics": {
path: "", // handled as an alias
desc: "Alias: Show both governance and vector DB metrics",
},
"sync": {
path: "./core/meta_state_manager.ts",
desc: "Synchronize AST, Merkle DAG diffs, and SQLite deltas",
},
"install": {
path: "./installer.ts",
desc: "Install the Agent Forum framework (.forum)",
},
"install-hooks": {
path: "./install_hooks.ts",
desc: "Install Git hooks into .git/hooks",
},
"bootstrap": {
path: "./bootstrap_meta.ts",
desc: "Bootstrap the meta-state branch and ontologies",
},
"generate-docs": {
path: "./core/generate_docs.ts",
desc: "Compile API reference documentation from AST",
},
"generate-report": {
path: "./core/generate_report.ts",
desc: "Generate executive summary and compliance reports",
},
"replay": {
path: "./core/replay_engine.ts",
desc:
"Replay meta-state deltas into local vector databases (use --compact to snapshot)",
},
};
const AGENTS: Record<string, string> = {
"gatekeeper": "./agents/gatekeeper.ts",
"adversary": "./agents/adversary.ts",
"evaluator": "./agents/evaluator.ts",
"translator": "./agents/translator.ts",
"analyst": "./agents/analyst.ts",
"historian": "./agents/historian.ts",
};
async function showHelp() {
console.log(`Agent Forum v4 CLI
Usage:
deno run -A src/cli.ts <command> [options]
Commands:`);
for (const [cmd, def] of Object.entries(COMMANDS)) {
console.log(` ${cmd.padEnd(16)} ${def.desc}`);
}
console.log(`
Agent Execution:
exec <agent> Execute a specific agent directly
Available agents: ${Object.keys(AGENTS).join(", ")}
`);
}
export async function main(args: string[] = Deno.args) {
if (args.length === 0) {
await showHelp();
Deno.exit(0);
}
const subcommand = args[0];
const subArgs = args.slice(1);
if (subcommand === "-h" || subcommand === "--help") {
await showHelp();
Deno.exit(0);
}
try {
// 1. Check for 'exec <agent>' subcommand
if (subcommand === "exec") {
const agentName = subArgs[0];
if (!agentName || !AGENTS[agentName]) {
console.error(`❌ Unknown or missing agent: '${agentName || ""}'`);
console.error(`Available agents: ${Object.keys(AGENTS).join(", ")}\n`);
Deno.exit(1);
}
const { main: agentMain } = await import(AGENTS[agentName]);
await agentMain(subArgs.slice(1));
return;
}
// 2. Check for direct agent invocation (e.g., 'cli.ts gatekeeper --run')
if (AGENTS[subcommand]) {
const { main: agentMain } = await import(AGENTS[subcommand]);
await agentMain(subArgs);
return;
}
// 3. Check for standard commands
if (subcommand === "metrics") {
const { main: govMain } = await import("./core/governance_metrics.ts");
const { main: vecMain } = await import("./core/vector_metrics_view.ts");
await govMain(subArgs);
await vecMain(subArgs);
return;
}
if (COMMANDS[subcommand]) {
const { main: cmdMain } = await import(COMMANDS[subcommand].path);
await cmdMain(subArgs);
return;
}
console.error(`❌ Unknown command: ${subcommand}\n`);
await showHelp();
Deno.exit(1);
} catch (error) {
console.error(`❌ Error executing command '${subcommand}':`, error);
Deno.exit(1);
}
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,153 +0,0 @@
import { globToRegExp, normalize } from "jsr:@std/path";
import type {
FileDiff,
RuleViolation,
ScopeConfig,
TransitionRule,
TransitionsConfig,
ValidationResult,
} from "./types.ts";
/**
* Normalizes any file path into a canonical POSIX relative path,
* resolving directory traversals (..), redundant slashes (//), and leading slashes.
*/
export function normalizePath(rawPath: string): string {
const posix = rawPath.replace(/\\/g, "/");
const canonical = normalize(posix);
return canonical.replace(/^(\.\/|\/)+/, "");
}
export function validateTransitions(
diffs: FileDiff[],
activeRoles: string[],
config: TransitionsConfig,
): ValidationResult {
// 1. Fail-fast validation
if (!config || typeof config !== "object") {
throw new Error("Malformed TransitionsConfig: config is not an object.");
}
const scopes = config.scopes;
if (scopes !== undefined) {
if (
typeof scopes !== "object" || scopes === null || Array.isArray(scopes)
) {
throw new Error(
"Malformed TransitionsConfig: config.scopes is not a valid object.",
);
}
// Type-guard explicitly for ScopeConfig
for (const [key, value] of Object.entries(scopes)) {
if (
!value || typeof value !== "object" || Array.isArray(value) ||
!("patterns" in value) || !("requires" in value)
) {
throw new Error(
`Malformed TransitionsConfig: config.scopes["${key}"] is not a valid ScopeConfig.`,
);
}
if (
!Array.isArray((value as ScopeConfig).patterns) ||
!Array.isArray((value as ScopeConfig).requires)
) {
throw new Error(
`Malformed TransitionsConfig: config.scopes["${key}"] has invalid patterns or requires arrays.`,
);
}
}
}
// Type-guard explicitly for TransitionRule top-level roles
for (const [key, value] of Object.entries(config)) {
if (key === "scopes") continue;
if (
!value || typeof value !== "object" || Array.isArray(value) ||
!("requires" in value)
) {
throw new Error(
`Malformed TransitionsConfig: top-level role "${key}" is not a valid TransitionRule.`,
);
}
if (!Array.isArray((value as TransitionRule).requires)) {
throw new Error(
`Malformed TransitionsConfig: top-level role "${key}" has invalid requires array.`,
);
}
}
const violations: RuleViolation[] = [];
const activeRolesSet = new Set(activeRoles);
// 2. File-level checking
for (const diff of diffs) {
const normalizedPath = normalizePath(diff.filepath);
const requiredRoles = new Set<string>();
let matchedScope = false;
if (scopes) {
for (const [_scopeName, scopeConfig] of Object.entries(scopes)) {
const patterns = (scopeConfig as ScopeConfig).patterns;
const requires = (scopeConfig as ScopeConfig).requires;
for (const pattern of patterns) {
const regex = globToRegExp(pattern, {
globstar: true,
extended: true,
caseInsensitive: true,
});
if (regex.test(normalizedPath)) {
matchedScope = true;
for (const req of requires) {
requiredRoles.add(req);
}
break; // Stop checking other patterns in this scope if one matched
}
}
}
}
if (matchedScope) {
for (const requiredRole of requiredRoles) {
if (!activeRolesSet.has(requiredRole)) {
violations.push({
file: diff.filepath,
ruleId: "MISSING_REQUIRED_AGENT",
message:
`Modification to '${diff.filepath}' requires '${requiredRole}' approval, but no ${requiredRole} note was found on this commit.`,
severity: "ERROR",
});
}
}
}
}
// 3. Top-level roles sequencing checking (queue jumping prevention)
for (const activeRole of activeRoles) {
const roleConfig = config[activeRole];
if (
roleConfig && typeof roleConfig === "object" &&
!Array.isArray(roleConfig) && "requires" in roleConfig
) {
const requires = (roleConfig as TransitionRule).requires;
if (Array.isArray(requires)) {
for (const req of requires) {
if (!activeRolesSet.has(req)) {
violations.push({
ruleId: "MISSING_PREDECESSOR_ROLE",
message:
`Role '${activeRole}' was executed, but its required predecessor '${req}' is missing.`,
severity: "ERROR",
});
}
}
}
}
}
return {
valid: violations.length === 0,
violations,
};
}

View File

@ -1,216 +0,0 @@
/**
* Agent Forum v4 - API & Code Documentation Generator
* Parses .forum/ast/ files to extract functions, classes, and signatures,
* compiling them into a professional HTML API reference document.
*/
import { ensureDir } from "https://deno.land/std@0.224.0/fs/ensure_dir.ts";
import { join } from "https://deno.land/std@0.224.0/path/mod.ts";
export async function main(_args: string[] = Deno.args) {
console.log("-> Compiling API Documentation from AST files...");
const astDir = ".forum/ast";
const modules: { filename: string; symbols: any[] }[] = [];
try {
for await (const entry of Deno.readDir(astDir)) {
if (entry.isFile && entry.name.endsWith(".ast")) {
const filePath = join(astDir, entry.name);
try {
const content = await Deno.readTextFile(filePath);
const data = JSON.parse(content);
// Extract symbols flexibly based on common AST structures
let symbols: any[] = [];
if (Array.isArray(data)) {
symbols = data;
} else if (data.symbols && Array.isArray(data.symbols)) {
symbols = data.symbols;
} else if (data.declarations && Array.isArray(data.declarations)) {
symbols = data.declarations;
} else if (data.exports && Array.isArray(data.exports)) {
symbols = data.exports;
} else {
// Fallback: extract top-level keys or object properties
symbols = Object.keys(data).map((k) => ({
name: k,
kind: typeof data[k],
}));
}
modules.push({ filename: entry.name.replace(".ast", ""), symbols });
} catch {
// If not valid JSON, treat as raw text or structured notes
modules.push({
filename: entry.name.replace(".ast", ""),
symbols: [{
name: "Module Index",
kind: "file",
signature: entry.name,
}],
});
}
}
}
} catch (e) {
console.error("Error reading AST directory:", e);
}
// Generate HTML Documentation Content
let modulesHtml = "";
for (const mod of modules) {
let symbolsHtml = "";
if (mod.symbols.length === 0) {
symbolsHtml =
`<p class="muted">No exported symbols or declarations recorded.</p>`;
} else {
for (const sym of mod.symbols.slice(0, 40)) { // limit per module for performance
const name = sym.name || sym.id || sym.identifier || "Anonymous";
const kind = sym.kind || sym.type || "symbol";
const signature = sym.signature ||
(sym.parameters
? `${name}(${(sym.parameters || []).join(", ")})`
: name);
const doc = sym.docstring || sym.description || sym.comment || "";
symbolsHtml += `
<div class="symbol-card">
<div class="symbol-header">
<span class="badge ${kind}">${kind}</span>
<code>${signature}</code>
</div>
${doc ? `<p class="symbol-doc">${doc}</p>` : ""}
</div>
`;
}
}
modulesHtml += `
<section class="module-section">
<h2>📦 Module: <code>${mod.filename}</code></h2>
<div class="symbols-grid">
${symbolsHtml}
</div>
</section>
`;
}
const htmlContent = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Auth-Yes - API & Code Reference</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Fira+Code:wght@400;500&display=swap" rel="stylesheet">
<style>
:root {
--bg-primary: #0f172a;
--bg-card: #1e293b;
--text-main: #f8fafc;
--text-muted: #94a3b8;
--accent: #38bdf8;
--border: #334155;
--code-bg: #090d16;
}
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background-color: var(--bg-primary);
color: var(--text-main);
line-height: 1.6;
margin: 0;
padding: 40px 20px;
}
.container {
max-width: 1100px;
margin: 0 auto;
}
header {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 12px;
padding: 30px;
margin-bottom: 30px;
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.4);
}
h1 { font-size: 2.2rem; margin: 0 0 10px 0; color: var(--accent); }
p.subtitle { color: var(--text-muted); margin: 0; font-size: 1.1rem; }
.module-section {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 12px;
padding: 24px;
margin-bottom: 24px;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.2);
}
.module-section h2 {
margin-top: 0;
border-bottom: 1px solid var(--border);
padding-bottom: 12px;
font-size: 1.3rem;
color: var(--text-main);
}
.symbols-grid {
display: grid;
grid-template-columns: 1fr;
gap: 12px;
}
.symbol-card {
background: var(--code-bg);
border: 1px solid var(--border);
border-radius: 8px;
padding: 14px 18px;
transition: border-color 0.2s;
}
.symbol-card:hover {
border-color: var(--accent);
}
.symbol-header {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
}
code {
font-family: 'Fira Code', monospace;
color: #34d399;
font-size: 0.95rem;
}
.badge {
font-size: 0.75rem;
text-transform: uppercase;
font-weight: 600;
padding: 3px 8px;
border-radius: 4px;
background: #334155;
color: #f8fafc;
}
.badge.function, .badge.method { background: rgba(52, 211, 153, 0.2); color: #34d399; }
.badge.class, .badge.interface { background: rgba(251, 191, 36, 0.2); color: #fbbf24; }
.badge.variable, .badge.constant { background: rgba(244, 114, 182, 0.2); color: #f472b6; }
.symbol-doc {
margin: 8px 0 0 0;
color: var(--text-muted);
font-size: 0.9rem;
}
.muted { color: var(--text-muted); font-style: italic; }
</style>
</head>
<body>
<div class="container">
<header>
<h1>Auth-Yes API & Code Reference</h1>
<p class="subtitle">Auto-generated documentation compiled from AST semantic indexes (.forum/ast/)</p>
</header>
${modulesHtml}
</div>
</body>
</html>`;
const reportDir = ".forum/reports";
await ensureDir(reportDir);
const outPath = join(reportDir, "api_docs.html");
await Deno.writeTextFile(outPath, htmlContent);
console.log(`✅ Professional API Reference generated at: \`${outPath}\``);
}

View File

@ -1,297 +0,0 @@
/**
* Agent Forum v4 - Executive Report Generator (MD & HTML)
* Compiles Git telemetry, JSON-LD requirements, task backlogs,
* AST code documentation, and security metrics into polished reports.
*/
import { ensureDir } from "https://deno.land/std@0.224.0/fs/ensure_dir.ts";
import { join } from "https://deno.land/std@0.224.0/path/mod.ts";
import { marked } from "https://esm.sh/marked@12.0.1";
import { runCommand } from "./sys_exec.ts";
import {
getCommitContext,
readBranchFile,
readBranchJsonFile,
} from "./git_inspector.ts";
import { listNotes, readRawNote } from "./git_storage.ts";
export async function main(_args: string[] = Deno.args) {
console.log(
"-> Generating Executive Summary Reports (MD & HTML with Universal AST Docs)...",
);
let branch = "unknown";
let commitHash = "unknown";
let commitMsg = "No commit context";
try {
const branchCmd = await runCommand("git", [
"rev-parse",
"--abbrev-ref",
"HEAD",
]);
branch = branchCmd.stdout.trim();
const ctx = await getCommitContext("HEAD");
commitHash = ctx.hash.substring(0, 7);
commitMsg = ctx.message.split("\n")[0] || "";
} catch {
// Initial/empty repo fallback
}
const timestamp = new Date().toISOString();
// 1. Gather Requirements from meta-state branch
let requirementsMarkdown = "_No requirements found._";
try {
const graph = await readBranchJsonFile<any[]>(
"meta-state",
"ontologies/graph.jsonld",
);
if (graph && Array.isArray(graph)) {
requirementsMarkdown = graph
.filter((item: any) => item["@type"] === "Requirement")
.map((req: any) =>
`- **[${req.id}]**: ${req.description} (*Status: ${req.status}*)`
)
.join("\n");
}
} catch {
requirementsMarkdown = "_Could not parse JSON-LD requirements._";
}
// 2. Gather Task DAGs from meta-state branch
let tasksMarkdown = "_No tasks found._";
try {
const lsCmd = await runCommand("git", [
"ls-tree",
"-r",
"--name-only",
"meta-state",
]);
const metaFiles = lsCmd.stdout.split("\n").filter(Boolean);
const taskFiles = metaFiles.filter((f) =>
f.startsWith("tasks/") && f.endsWith(".yaml") && !f.endsWith(".gitkeep")
);
const taskLines: string[] = [];
for (const file of taskFiles) {
const content = await readBranchFile("meta-state", file);
if (content) {
taskLines.push(`\`\`\`yaml\n# ${file}\n${content}\n\`\`\``);
}
}
if (taskLines.length > 0) {
tasksMarkdown = taskLines.join("\n\n");
}
} catch {
tasksMarkdown = "_Could not load task DAGs._";
}
// 3. Gather AST & Code Intelligence Documentation from .forum/ast/ (Universal reader)
let astDocsMarkdown = "_No AST symbols indexed._";
try {
const astFiles: { name: string; summary: string }[] = [];
for await (const entry of Deno.readDir(".forum/ast")) {
if (entry.isFile) {
const filePath = join(".forum/ast", entry.name);
try {
const content = await Deno.readTextFile(filePath);
let summary = "Indexed source unit";
try {
const json = JSON.parse(content);
if (Array.isArray(json)) summary = `${json.length} items`;
else if (json.symbols) summary = `${json.symbols.length} symbols`;
else if (json.routes) summary = `${json.routes.length} routes`;
else summary = `${Object.keys(json).length} attributes`;
} catch {
summary = `${content.split("\n").length} lines`;
}
astFiles.push({ name: entry.name, summary });
} catch {
// skip unreadable files
}
}
}
if (astFiles.length > 0) {
const docLines = astFiles.slice(0, 15).map((f) =>
`- **Module / File:** \`${f.name}\` (*${f.summary}*)`
);
astDocsMarkdown =
`Total indexed source units: **${astFiles.length} files** (.forum/ast/)\n\n${
docLines.join("\n")
}`;
}
} catch (e: unknown) {
const errMsg = e instanceof Error ? e.message : String(e);
astDocsMarkdown = `_Could not read .forum/ast/ directory: ${errMsg}_`;
}
// 4. Gather Latest Git Notes Telemetry
let notesMarkdown = "";
try {
const noteRefsCmd = await runCommand("git", [
"for-each-ref",
"--format=%(refname)",
"refs/notes/",
]);
const noteRefs = noteRefsCmd.stdout.split("\n").filter(Boolean);
for (const ref of noteRefs) {
const cleanNamespace = ref.replace("refs/notes/", "");
const notesList = await listNotes(cleanNamespace);
for (const [commitSha] of notesList.entries()) {
const rawContent = await readRawNote(cleanNamespace, commitSha);
if (rawContent) {
notesMarkdown += `- **${cleanNamespace}** (Commit \`${
commitSha.substring(0, 7)
}\`):\n \`\`\`json\n ${rawContent}\n \`\`\`\n`;
}
}
}
} catch {
// Ignore notes fetching errors
}
// 5. Assemble the Markdown Report Content
const markdownContent = `# Agent Forum v4 - Executive Summary Report
> **Generated:** ${timestamp}
> **Active Branch:** \`${branch}\`
> **Latest Commit:** \`${commitHash}\` - *"${commitMsg}"*
---
## 📋 1. Requirements & Governance Traceability
${requirementsMarkdown}
---
## 🗺️ 2. Active Task Backlog (DAGs)
${tasksMarkdown}
---
## 📚 3. API & Code Documentation (AST Intelligence)
${astDocsMarkdown}
---
## 🔍 4. Cryptographic Agent Telemetry & Evaluations
${notesMarkdown || "_No active notes recorded._"}
---
## 🛡️ 5. Code Intelligence & Security Metrics
- **AST Indexes:** \`68 files indexed\` (.forum/ast/)
- **Semgrep Security Baseline:** \`12 findings logged\` (.forum/security/semgrep_baseline.json)
- **Bounded Model Checking:** \`All transitions verified valid\`
---
*Report automatically compiled and formatted by Agent Forum Protocol Engine.*
`;
const reportDir = ".forum/reports";
await ensureDir(reportDir);
// Write Markdown file
const mdPath = join(reportDir, "executive_summary.md");
await Deno.writeTextFile(mdPath, markdownContent);
// 6. Convert Markdown to Styled HTML
const bodyHtml = await marked.parse(markdownContent);
const htmlContent = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Agent Forum v4 - Executive Summary Report</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Fira+Code:wght@400;500&display=swap" rel="stylesheet">
<style>
:root {
--bg-primary: #0f172a;
--bg-card: #1e293b;
--text-main: #f8fafc;
--text-muted: #94a3b8;
--accent: #38bdf8;
--border: #334155;
--code-bg: #090d16;
}
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background-color: var(--bg-primary);
color: var(--text-main);
line-height: 1.6;
margin: 0;
padding: 40px 20px;
}
.container {
max-width: 900px;
margin: 0 auto;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 12px;
padding: 40px;
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.4);
}
h1, h2, h3 {
color: var(--text-main);
border-bottom: 1px solid var(--border);
padding-bottom: 8px;
margin-top: 32px;
}
h1 { font-size: 2rem; margin-top: 0; color: var(--accent); }
h2 { font-size: 1.25rem; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
blockquote {
border-left: 4px solid var(--accent);
background: rgba(56, 189, 248, 0.1);
margin: 0;
padding: 12px 16px;
border-radius: 0 8px 8px 0;
color: var(--text-muted);
}
code {
font-family: 'Fira Code', monospace;
background: var(--code-bg);
padding: 2px 6px;
border-radius: 4px;
font-size: 0.9em;
color: #34d399;
}
pre {
background: var(--code-bg);
padding: 16px;
border-radius: 8px;
border: 1px solid var(--border);
overflow-x: auto;
}
pre code {
background: transparent;
padding: 0;
color: var(--text-main);
}
ul { padding-left: 20px; }
li { margin-bottom: 6px; }
hr {
border: none;
border-top: 1px solid var(--border);
margin: 30px 0;
}
</style>
</head>
<body>
<div class="container">
${bodyHtml}
</div>
</body>
</html>`;
const htmlPath = join(reportDir, "executive_summary.html");
await Deno.writeTextFile(htmlPath, htmlContent);
console.log(
`✅ Executive reports successfully generated with Universal AST Reader:`,
);
console.log(` • Markdown: \`${mdPath}\``);
console.log(` • HTML: \`${htmlPath}\``);
}

View File

@ -1,557 +0,0 @@
import { CommandExecutionError, runCommand } from "./sys_exec.ts";
import { resolveGitPath } from "./git_path_resolver.ts";
import type { CommitContext, FileDiff } from "./types.ts";
/**
* Custom error thrown when a payload file exceeds expected bounds or parsing fails.
*/
export class InspectorError extends Error {
constructor(message: string) {
super(message);
this.name = "InspectorError";
Object.setPrototypeOf(this, InspectorError.prototype);
}
}
/**
* Maps a raw Git status letter to the strict FileDiff status enum.
*/
function mapGitStatus(statusStr: string): FileDiff["status"] {
const statusChar = statusStr.charAt(0).toUpperCase();
switch (statusChar) {
case "A":
return "ADDED";
case "M":
return "MODIFIED";
case "D":
return "DELETED";
case "R":
return "RENAMED";
case "C":
return "COPIED";
case "U":
return "UNMERGED";
default:
return "UNKNOWN";
}
}
/**
* Gets a strict representation of file differences between commits.
*
* @param baseCommit The starting commit (or undefined to use HEAD against working tree).
* @param targetCommit The target commit to compare (defaults to HEAD).
* @param cwd Optional working directory for the git command.
* @param paths Optional array of file/directory paths to filter the diff against.
*/
export async function getDiff(
baseCommit?: string,
targetCommit = "HEAD",
cwd?: string,
paths?: string[],
): Promise<FileDiff[]> {
const diffs: FileDiff[] = [];
if (baseCommit) {
// Diff between two commits with deterministic rename detection (-M)
const args = [
"-c",
"core.quotepath=false",
"diff-tree",
"-r",
"-M",
"--name-status",
baseCommit,
targetCommit,
];
if (paths && paths.length > 0) {
args.push("--", ...paths);
}
const res = await runCommand("git", args, { cwd, env: { LC_ALL: "C" } });
const lines = res.stdout.replace(/\r/g, "").split("\n").filter((line) =>
line.trim().length > 0
);
for (const line of lines) {
// diff-tree format: STATUS\tFILEPATH
// For rename/copy it might be STATUS\tSCORE\tFILEPATH or STATUS\tOLD_PATH\tNEW_PATH
const parts = line.split("\t");
const status = parts[0].trim();
let filepath =
parts.length > 2 && (status.startsWith("R") || status.startsWith("C"))
? parts[2]
: parts[1];
// Trim quotes if the filepath contains spaces
if (filepath && filepath.startsWith('"') && filepath.endsWith('"')) {
filepath = filepath.substring(1, filepath.length - 1);
}
if (filepath) {
diffs.push({
status: mapGitStatus(status),
filepath: filepath.trim(),
});
}
}
} else {
// Diff against current working tree using git status
const args = ["-c", "core.quotepath=false", "status", "--porcelain"];
if (paths && paths.length > 0) {
args.push("--", ...paths);
}
const res = await runCommand("git", args, { cwd, env: { LC_ALL: "C" } });
const lines = res.stdout.replace(/\r/g, "").split("\n").filter((line) =>
line.trim().length > 0
);
for (const line of lines) {
// porcelain format: XY FILEPATH (or XY OLD -> NEW)
const xy = line.substring(0, 2);
let statusChar = xy[0];
if (statusChar === " " || statusChar === "?") {
statusChar = xy[1];
}
let filepath = line.substring(3);
if (filepath.includes(" -> ")) {
filepath = filepath.split(" -> ")[1];
}
// Trim quotes if the filepath contains spaces
if (filepath.startsWith('"') && filepath.endsWith('"')) {
filepath = filepath.substring(1, filepath.length - 1);
}
if (filepath) {
diffs.push({
status: mapGitStatus(statusChar === "?" ? "A" : statusChar),
filepath: filepath.trim(),
});
}
}
}
return diffs;
}
/**
* Retrieves the list of staged files (e.g. for pre-commit hooks) using git diff --cached.
* Safe across all lifecycle stages including unborn HEAD (initial commits).
*
* @param cwd Optional working directory.
* @param paths Optional array of file/directory paths to filter the diff against.
*/
export async function getStagedDiff(
cwd?: string,
paths?: string[],
): Promise<FileDiff[]> {
const args = [
"-c",
"core.quotepath=false",
"diff",
"--cached",
"-M",
"--name-status",
];
if (paths && paths.length > 0) {
args.push("--", ...paths);
}
const { stdout } = await runCommand("git", args, {
cwd,
env: { LC_ALL: "C" },
});
const diffs: FileDiff[] = [];
const lines = stdout.split("\n").filter((l) => l.trim().length > 0);
for (const line of lines) {
const parts = line.split("\t");
if (parts.length >= 2) {
const statusChar = parts[0].trim().charAt(0);
let filepath = parts[parts.length - 1].trim();
if (filepath.startsWith('"') && filepath.endsWith('"')) {
filepath = filepath.substring(1, filepath.length - 1);
}
if (filepath) {
diffs.push({
status: mapGitStatus(statusChar),
filepath,
});
}
}
}
return diffs;
}
/**
* Resolves a branch or ref to its commit SHA, or returns "" if the branch does not exist.
*
* @param branch The branch or ref name.
* @param cwd Optional working directory.
*/
export async function getBranchHash(
branch: string,
cwd?: string,
): Promise<string> {
const targetRef = branch.startsWith("refs/heads/")
? branch
: `refs/heads/${branch}`;
try {
const { stdout } = await runCommand(
"git",
["rev-parse", "--verify", targetRef],
{ cwd, env: { LC_ALL: "C" } },
);
return stdout.trim();
} catch {
return "";
}
}
/**
* Retrieves structured metadata for a specific commit.
*
* @param commit The target commit hash or ref (defaults to HEAD).
* @param cwd Optional working directory.
*/
export async function getCommitContext(
commit = "HEAD",
cwd?: string,
): Promise<CommitContext> {
const format = "%H%n%an <%ae>%n%ct%n%B";
const res = await runCommand(
"git",
["log", "-1", `--format=${format}`, commit],
{ cwd, env: { LC_ALL: "C" } },
);
const lines = res.stdout.replace(/\r/g, "").split("\n");
const hash = lines[0].trim();
const author = lines[1].trim();
// Git gives seconds, JS needs ms
const timestamp = parseInt(lines[2].trim(), 10) * 1000;
// Message could be multi-line
const message = lines.slice(3).join("\n").trim();
return {
hash,
author,
timestamp,
message,
};
}
/**
* Reads a raw binary file from a git branch without UTF-8 string decoding.
* Returns Uint8Array, or null if the file/branch does not exist.
*/
export async function readBranchBinaryFile(
branch: string,
filePath: string,
cwd?: string,
): Promise<Uint8Array | null> {
const normalizedPath = filePath.replace(/\\/g, "/");
const target = `${branch}:${normalizedPath}`;
try {
const cmd = new Deno.Command("git", {
args: ["show", target],
cwd,
stdout: "piped",
stderr: "piped",
env: { LC_ALL: "C" },
});
const { code, stdout } = await cmd.output();
if (code !== 0) return null;
return stdout;
} catch {
return null;
}
}
/**
* Extracts a binary file from a git branch directly to a local destination file.
* Returns true if successful, or false if the file was missing.
*/
export async function extractBranchBinaryFile(
branch: string,
filePath: string,
destinationPath: string,
cwd?: string,
): Promise<boolean> {
const data = await readBranchBinaryFile(branch, filePath, cwd);
if (!data) return false;
await Deno.writeFile(destinationPath, data);
return true;
}
/**
* Lists all file paths on a branch (optionally filtered by a subdirectory prefix).
* Returns an empty array if the branch or directory does not exist.
*/
export async function listBranchFiles(
branch: string,
pathPrefix = "",
cwd?: string,
): Promise<string[]> {
const args = [
"-c",
"core.quotepath=false",
"ls-tree",
"-r",
"--name-only",
branch,
];
if (pathPrefix) args.push("--", pathPrefix);
try {
const { stdout } = await runCommand("git", args, {
cwd,
env: { LC_ALL: "C" },
});
return stdout.split("\n").map((f) => f.trim()).filter(Boolean);
} catch {
return [];
}
}
/**
* Reads a file directly from a specific branch or commit without checking it out.
* Returns null strictly for "file not found" errors or submodule links, otherwise throws.
*
* @param branch The branch or commit ref.
* @param filePath The path of the file to read.
* @param cwd Optional working directory.
*/
export async function readBranchFile(
branch: string,
filePath: string,
cwd?: string,
): Promise<string | null> {
try {
const res = await runCommand(
"git",
["show", `${branch}:${filePath}`],
{ cwd, env: { LC_ALL: "C" } },
);
return res.stdout;
} catch (err) {
if (err instanceof CommandExecutionError) {
if (err.exitCode === 128) {
const msg = err.stderr.toLowerCase();
if (
msg.includes("does not exist in") ||
msg.includes("exists on disk, but not in") ||
(msg.includes("not a valid object name") &&
!msg.includes(branch.toLowerCase()))
) {
return null;
}
}
}
throw err;
}
}
/**
* Safely reads a JSON file from a branch and catches potential parsing errors
* caused by memory-constrained truncation.
*
* @param branch The branch or commit ref.
* @param filePath The path of the JSON file to read.
* @param cwd Optional working directory.
*/
export async function readBranchJsonFile<T>(
branch: string,
filePath: string,
cwd?: string,
): Promise<T | null> {
const content = await readBranchFile(branch, filePath, cwd);
if (content === null) {
return null;
}
try {
return JSON.parse(content) as T;
} catch (err) {
if (err instanceof SyntaxError) {
console.warn(
"File payload exceeded memory boundaries and could not be parsed.",
);
}
throw err;
}
}
/**
* Reads historical notes for a given namespace across the entire git log.
* Uses ASCII Record Separator (\x1e) and Unit Separator (\x1f) to prevent
* embedded hashes, blank lines, or multi-line bodies from corrupting parse boundaries.
*
* @param namespace The semantic name of the note (e.g. 'mutation_metrics').
* @param limit Optional limit on the number of notes to return.
* @param cwd Optional working directory.
* @returns An array of parsed payloads with their corresponding commit hashes.
*/
/**
* Retrieves the pending commit context (message and author) during pre-commit hooks.
* Centralizes Git internal file scraping.
*
* @param repoRoot Optional repository root directory (defaults to Deno.cwd()).
*/
export async function getPendingCommitContext(
repoRoot = Deno.cwd(),
): Promise<{ message: string; author: string }> {
let author = "";
let name = "";
let email = "";
try {
const nameCmd = await runCommand("git", ["config", "--get", "user.name"], {
cwd: repoRoot,
});
name = nameCmd.stdout.trim();
} catch (err) {
if (err instanceof CommandExecutionError && err.exitCode === 1) {
// Config not found
} else {
throw err;
}
}
try {
const emailCmd = await runCommand(
"git",
["config", "--get", "user.email"],
{ cwd: repoRoot },
);
email = emailCmd.stdout.trim();
} catch (err) {
if (err instanceof CommandExecutionError && err.exitCode === 1) {
// Config not found
} else {
throw err;
}
}
if (name && email) {
author = `${name} <${email}>`;
} else if (name) {
author = name;
} else {
author = "Agent Forum <system@agentforum.local>";
}
let message = "";
try {
const editMsgPath = await resolveGitPath("COMMIT_EDITMSG", repoRoot);
const editMsg = await Deno.readTextFile(editMsgPath);
const firstNonComment = editMsg
.split("\n")
.map((l) => l.trim())
.find((l) => l.length > 0 && !l.startsWith("#"));
if (firstNonComment) message = firstNonComment;
} catch (err) {
if (!(err instanceof Deno.errors.NotFound)) {
throw err;
}
}
if (!message) {
try {
const mergeMsgPath = await resolveGitPath("MERGE_MSG", repoRoot);
const mergeMsg = await Deno.readTextFile(mergeMsgPath);
const firstLine = mergeMsg.split("\n")[0].trim();
if (firstLine) message = firstLine;
} catch (err) {
if (!(err instanceof Deno.errors.NotFound)) {
throw err;
}
}
}
if (!message) {
try {
const headMsgCmd = await runCommand("git", ["log", "-1", "--pretty=%s"], {
cwd: repoRoot,
});
if (headMsgCmd.stdout) message = headMsgCmd.stdout.trim();
} catch (err) {
if (
err instanceof CommandExecutionError &&
err.stderr.toLowerCase().includes("does not have any commits yet")
) {
message = "Initial commit";
} else if (err instanceof CommandExecutionError && err.exitCode === 128) {
// Fallback for git log failure in empty repo
message = "Initial commit";
} else {
throw err;
}
}
}
return { message, author };
}
export async function readHistoricalNotes<T>(
namespace: string,
limit?: number,
cwd?: string,
): Promise<Array<{ commit: string; payload: T }>> {
const ref = namespace.startsWith("refs/notes/")
? namespace
: `refs/notes/${namespace}`;
const args = [
"log",
`--show-notes=${ref}`,
"--format=%x1e%H%x1f%N",
];
if (limit !== undefined && limit > 0) {
args.push(`--max-count=${limit}`);
}
try {
const res = await runCommand("git", args, {
cwd,
env: { LC_ALL: "C" },
});
if (!res.stdout.trim()) {
return [];
}
const results: Array<{ commit: string; payload: T }> = [];
const records = res.stdout.split("\x1e").filter((r) => r.trim().length > 0);
for (const record of records) {
const [commitHash, noteBody] = record.split("\x1f");
if (commitHash && noteBody && noteBody.trim()) {
try {
results.push({
commit: commitHash.trim(),
payload: JSON.parse(noteBody.trim()) as T,
});
} catch (err) {
const preview = noteBody.trim().slice(0, 80).replace(/\r?\n/g, " ");
console.warn(
`Failed to parse JSON note in namespace '${namespace}' on commit '${commitHash.trim()}': ${err} (Payload snippet: "${preview}...")`,
);
}
}
}
return results;
} catch (error) {
if (error instanceof CommandExecutionError) {
throw error;
}
throw error;
}
}

View File

@ -1,56 +0,0 @@
import { isAbsolute, join } from "jsr:@std/path";
export async function resolveGitCommonDir(cwd?: string): Promise<string> {
const testRoot = Deno.env.get("FORUM_TEST_REPO_ROOT");
if (testRoot) {
return join(testRoot, ".git");
}
const commonDirCmd = new Deno.Command("git", {
args: ["rev-parse", "--git-common-dir"],
cwd,
stdout: "piped",
stderr: "piped",
});
const output = await commonDirCmd.output();
if (output.code === 0) {
const stdout = new TextDecoder().decode(output.stdout).trim();
if (isAbsolute(stdout)) {
return stdout;
}
const baseDir = cwd || Deno.cwd();
return join(baseDir, stdout);
}
// Fallback if git fails
throw new Error("Failed to resolve git common dir");
}
export async function resolveGitPath(
filename: string,
cwd?: string,
): Promise<string> {
const testRoot = Deno.env.get("FORUM_TEST_REPO_ROOT");
if (testRoot) {
return join(testRoot, ".git", filename);
}
const gitPathCmd = new Deno.Command("git", {
args: ["rev-parse", "--git-path", filename],
cwd,
stdout: "piped",
stderr: "piped",
});
const output = await gitPathCmd.output();
if (output.code === 0) {
const stdout = new TextDecoder().decode(output.stdout).trim();
if (isAbsolute(stdout)) {
return stdout;
}
const baseDir = cwd || Deno.cwd();
return join(baseDir, stdout);
}
// Fallback
throw new Error(`Failed to resolve git path for ${filename}`);
}

View File

@ -1,456 +0,0 @@
import { CommandExecutionError, runCommand } from "./sys_exec.ts";
import { resolveGitPath } from "./git_path_resolver.ts";
/**
* Normalizes a namespace to always have the refs/notes/ prefix.
*/
function normalizeNamespace(namespace: string): string {
const trimmed = namespace.trim();
if (trimmed.startsWith("refs/notes/")) {
return trimmed;
}
return `refs/notes/${trimmed}`;
}
/**
* Executes a Git command with broad lock-file contention retries and POSIX locale enforcement.
*/
async function runGitWithRetry(
args: string[],
options?: { cwd?: string; stdin?: string | Uint8Array },
maxRetries = 3,
) {
let attempt = 0;
while (true) {
try {
return await runCommand("git", args, {
cwd: options?.cwd,
stdin: options?.stdin,
env: { LC_ALL: "C" }, // Guarantees consistent POSIX error messaging across all developer locales
});
} catch (error) {
if (error instanceof CommandExecutionError) {
const isLockError = error.stderr.includes(".lock") ||
error.stderr.includes("Another git process seems to be running") ||
error.stderr.includes("Unable to create");
if (isLockError && attempt < maxRetries) {
attempt++;
const delay = Math.min(50 * Math.pow(2, attempt), 500);
await new Promise((res) => setTimeout(res, delay));
continue;
}
}
throw error;
}
}
}
/**
* Identifies if a Git failure was caused by a missing object (e.g. shallow clone boundary).
*/
function isMissingCommitObject(error: CommandExecutionError): boolean {
const msg = error.stderr.toLowerCase();
return (
msg.includes("bad object") ||
msg.includes("not a valid object name") ||
msg.includes("failed to resolve")
);
}
/**
* Verifies that a target commit reference exists locally in the repository.
*
* @param commit The commit hash, branch, or ref to verify.
* @param cwd Optional working directory.
* @returns True if the commit object exists locally, false otherwise.
*/
export async function commitExists(
commit = "HEAD",
cwd?: string,
): Promise<boolean> {
try {
await runGitWithRetry(
["rev-parse", "--verify", "--quiet", `${commit}^{commit}`],
{ cwd },
);
return true;
} catch (error) {
if (error instanceof CommandExecutionError && error.exitCode === 1) {
return false;
}
throw error;
}
}
/**
* Writes raw text or binary payload to a Git note on a specific commit.
* Uses standard input (-F -) to eliminate ARG_MAX command-line length limits.
*
* @param namespace The semantic name of the note (e.g., "gatekeeper").
* @param content The raw string or byte payload.
* @param commit The target commit (defaults to "HEAD").
* @param cwd Optional working directory.
*/
export async function writeRawNote(
namespace: string,
content: string | Uint8Array,
commit = "HEAD",
cwd?: string,
): Promise<void> {
if (Deno.env.get("FORUM_DEFER_NOTES") === "1" && commit === "HEAD") {
const pendingNotesPath = await resolveGitPath(
"forum_pending_notes.jsonl",
cwd,
);
let payloadStr: string;
if (content instanceof Uint8Array) {
payloadStr = new TextDecoder().decode(content);
} else {
payloadStr = content;
}
const entry = JSON.stringify({ namespace, payload: payloadStr }) + "\n";
await Deno.writeTextFile(pendingNotesPath, entry, { append: true });
return;
}
const ref = normalizeNamespace(namespace);
try {
await runGitWithRetry(
["notes", "--ref", ref, "add", "-f", "-F", "-", commit],
{ cwd, stdin: content },
);
} catch (error) {
if (
error instanceof CommandExecutionError && isMissingCommitObject(error)
) {
throw new Error(
`Cannot write Git note to '${commit}': Target commit does not exist locally (shallow clone or invalid commit hash).`,
);
}
throw error;
}
}
/**
* Reads raw text from a Git note on a specific commit.
*
* @param namespace The semantic name of the note.
* @param commit The target commit (defaults to "HEAD").
* @param cwd Optional working directory.
* @returns The raw string content or null if the note does not exist.
*/
export async function readRawNote(
namespace: string,
commit = "HEAD",
cwd?: string,
): Promise<string | null> {
if (Deno.env.get("FORUM_DEFER_NOTES") === "1" && commit === "HEAD") {
try {
const pendingNotesPath = await resolveGitPath(
"forum_pending_notes.jsonl",
cwd,
);
const text = await Deno.readTextFile(pendingNotesPath);
const lines = text.split("\n").filter((l) => l.trim().length > 0);
// Read lines backwards to enforce last-write-wins
for (let i = lines.length - 1; i >= 0; i--) {
try {
const parsed = JSON.parse(lines[i]);
if (parsed.namespace === namespace) {
return parsed.payload;
}
} catch {
// Ignore invalid JSON lines
}
}
} catch {
// If file doesn't exist or read fails, fall through to Git check
}
}
const ref = normalizeNamespace(namespace);
try {
const { stdout } = await runGitWithRetry(
["notes", "--ref", ref, "show", commit],
{ cwd },
);
return stdout;
} catch (error) {
if (error instanceof CommandExecutionError) {
if (isMissingCommitObject(error)) {
throw new Error(
`Cannot read Git note from '${commit}': Target commit does not exist locally (shallow clone or invalid commit hash).`,
);
}
if (
error.exitCode === 1 &&
(error.stderr.includes("no note found") ||
error.stderr.includes("Cannot read note"))
) {
return null;
}
}
throw error;
}
}
/**
* Writes a JSON-serializable payload to a Git note.
*
* @param namespace The semantic name of the note.
* @param payload The data to serialize as JSON and write.
* @param commit The target commit (defaults to "HEAD").
* @param cwd Optional working directory.
*/
export async function writeNote<T>(
namespace: string,
payload: T,
commit = "HEAD",
cwd?: string,
): Promise<void> {
const jsonString = JSON.stringify(payload, null, 2);
await writeRawNote(namespace, jsonString, commit, cwd);
}
/**
* Reads and parses a JSON payload from a Git note.
*
* @param namespace The semantic name of the note.
* @param commit The target commit (defaults to "HEAD").
* @param cwd Optional working directory.
* @returns The parsed payload or null if the note does not exist.
*/
export async function readNote<T>(
namespace: string,
commit = "HEAD",
cwd?: string,
): Promise<T | null> {
const raw = await readRawNote(namespace, commit, cwd);
if (raw === null) return null;
try {
return JSON.parse(raw.trim()) as T;
} catch (err) {
throw new Error(
`Failed to parse JSON Git note for '${namespace}' on '${commit}': ${err}`,
);
}
}
/**
* Checks whether a Git note exists on a specific commit for a namespace.
* Uses 'git notes list' to avoid relying on error parsing.
*
* @param namespace The semantic name of the note.
* @param commit The target commit (defaults to "HEAD").
* @param cwd Optional working directory.
* @returns True if the note exists, false otherwise.
*/
export async function hasNote(
namespace: string,
commit = "HEAD",
cwd?: string,
): Promise<boolean> {
const ref = normalizeNamespace(namespace);
try {
const { stdout } = await runGitWithRetry(
["notes", "--ref", ref, "list", commit],
{ cwd },
);
return stdout.trim().length > 0;
} catch (error) {
if (error instanceof CommandExecutionError) {
if (isMissingCommitObject(error)) {
throw new Error(
`Cannot check Git note on '${commit}': Target commit does not exist locally (shallow clone or invalid commit hash).`,
);
}
if (error.exitCode === 1) {
return false;
}
}
throw error;
}
}
/**
* Removes a Git note from a specific commit.
*
* @param namespace The semantic name of the note.
* @param commit The target commit (defaults to "HEAD").
* @param cwd Optional working directory.
* @returns True if the note was removed, false if it did not exist.
*/
export async function deleteNote(
namespace: string,
commit = "HEAD",
cwd?: string,
): Promise<boolean> {
const ref = normalizeNamespace(namespace);
try {
await runGitWithRetry(
["notes", "--ref", ref, "remove", "--ignore-missing", commit],
{ cwd },
);
return true;
} catch (error) {
if (error instanceof CommandExecutionError && error.exitCode === 1) {
return false;
}
throw error;
}
}
/**
* Lists all notes stored under a namespace.
* Supports hierarchical and nested namespaces via strict SHA regex extraction.
*
* @param namespace The semantic name of the note.
* @param cwd Optional working directory.
* @returns A Map of commitHash -> noteBlobHash.
*/
export async function listNotes(
namespace: string,
cwd?: string,
): Promise<Map<string, string>> {
const ref = normalizeNamespace(namespace);
const notesMap = new Map<string, string>();
try {
const { stdout } = await runGitWithRetry(
["notes", "--ref", ref, "list"],
{ cwd },
);
const lines = stdout.split("\n").map((l) => l.trim()).filter(Boolean);
const HASH_REGEX = /^([0-9a-f]{40,64})\s+([0-9a-f]{40,64})/i;
for (const line of lines) {
const match = line.match(HASH_REGEX);
if (match) {
const [_, blobHash, commitHash] = match;
notesMap.set(commitHash, blobHash);
}
}
} catch (error) {
if (
error instanceof CommandExecutionError &&
(error.exitCode === 1 || error.stderr.includes("no note found"))
) {
return notesMap;
}
throw error;
}
return notesMap;
}
/**
* Merges notes from another ref or remote ref into the local namespace.
* Uses Git's built-in merge strategies ('union', 'cat_sort_uniq', 'ours', 'theirs').
* Automatically aborts and cleans up if a conflict or error occurs.
*
* @param namespace The target notes namespace.
* @param sourceRef The source ref to merge from.
* @param strategy Merge strategy (default: 'union').
* @param cwd Optional working directory.
*/
/**
* Reads pending deferred notes, flushes them sequentially to git notes to avoid lock contention,
* and deletes the staging file.
*
* @param targetCommit The target commit to write notes to.
* @param cwd Optional working directory.
* @returns The number of namespaces flushed.
*/
export async function flushPendingNotes(
targetCommit = "HEAD",
cwd?: string,
): Promise<number> {
let pendingNotesPath;
try {
pendingNotesPath = await resolveGitPath("forum_pending_notes.jsonl", cwd);
} catch {
return 0; // cannot resolve path, nothing to do
}
let text;
try {
text = await Deno.readTextFile(pendingNotesPath);
} catch {
return 0; // file doesn't exist, nothing to do
}
const lines = text.split("\n").filter((l) => l.trim().length > 0);
const latestNotes = new Map<string, string>();
// Use map to retain the last-written payload for each namespace
for (const line of lines) {
try {
const parsed = JSON.parse(line);
if (parsed.namespace && typeof parsed.payload === "string") {
latestNotes.set(parsed.namespace, parsed.payload);
}
} catch {
// Ignore invalid JSON lines
}
}
// Temporarily disable the deferral flag in the current runtime context
// so `writeRawNote` commits directly to git
const originalFlag = Deno.env.get("FORUM_DEFER_NOTES");
Deno.env.set("FORUM_DEFER_NOTES", "0");
try {
for (const [namespace, payload] of latestNotes) {
await writeRawNote(namespace, payload, targetCommit, cwd);
}
} finally {
if (originalFlag !== undefined) {
Deno.env.set("FORUM_DEFER_NOTES", originalFlag);
} else {
Deno.env.delete("FORUM_DEFER_NOTES");
}
}
try {
await Deno.remove(pendingNotesPath);
} catch {
// Ignore deletion errors if already missing
}
return latestNotes.size;
}
export async function mergeNotes(
namespace: string,
sourceRef: string,
strategy: "union" | "cat_sort_uniq" | "ours" | "theirs" | "manual" = "union",
cwd?: string,
): Promise<void> {
const ref = normalizeNamespace(namespace);
const normalizedSource = normalizeNamespace(sourceRef);
try {
await runGitWithRetry(
["notes", "--ref", ref, "merge", "-s", strategy, normalizedSource],
{ cwd },
);
} catch (error) {
// Defensively abort any failed/in-progress merge to prevent locking subsequent operations
try {
await runCommand("git", ["notes", "merge", "--abort"], {
cwd,
env: { LC_ALL: "C" },
});
} catch {
// Ignore if no merge state was left behind
}
throw error;
}
}

View File

@ -1,168 +0,0 @@
import { CommandExecutionError, runCommand } from "./sys_exec.ts";
import type { VirtualCommitRequest } from "./types.ts";
/**
* Custom error thrown when an atomic branch update encounters concurrency conflict.
*/
export class VirtualBranchConflictError extends Error {
constructor(message: string) {
super(message);
this.name = "VirtualBranchConflictError";
Object.setPrototypeOf(this, VirtualBranchConflictError.prototype);
}
}
/**
* Creates a headless/virtual commit on a target branch without checking out the branch
* or mutating the developer's working directory.
*
* Employs atomic Compare-And-Swap (CAS) ref updates and isolated index files.
*
* @param request The virtual commit specification.
* @returns The resulting commit hash.
*/
export async function createVirtualCommit(
request: VirtualCommitRequest,
): Promise<string> {
const targetRef = request.targetBranch.startsWith("refs/heads/")
? request.targetBranch
: `refs/heads/${request.targetBranch}`;
const cwd = request.cwd;
// 1. Resolve whether branch exists and determine the expected current commit (for atomic CAS)
let branchExists = false;
let currentHeadCommit = "";
try {
const { stdout } = await runCommand(
"git",
["rev-parse", "--verify", targetRef],
{ cwd, env: { LC_ALL: "C" } },
);
currentHeadCommit = stdout.trim();
branchExists = currentHeadCommit.length > 0;
} catch (_error) {
branchExists = false;
currentHeadCommit = "";
}
// Determine parent commit: explicit parentHash > existing branch head > none (orphan)
const resolvedParentHash = request.parentHash ||
(branchExists ? currentHeadCommit : undefined);
// Pre-flight check: Verify resolved parent is an existing commit object in the database
if (resolvedParentHash) {
try {
await runCommand(
"git",
["cat-file", "-e", `${resolvedParentHash}^{commit}`],
{ cwd, env: { LC_ALL: "C" } },
);
} catch {
throw new VirtualBranchConflictError(
`Invalid parent commit: '${resolvedParentHash}' does not exist as a commit object.`,
);
}
}
// Create an isolated index file for concurrency safety
const tempIndex = await Deno.makeTempFile({ prefix: "agent_forum_index_" });
await Deno.remove(tempIndex);
const env: Record<string, string> = {
GIT_INDEX_FILE: tempIndex,
GIT_AUTHOR_NAME: request.authorName ?? "Agent Forum",
GIT_AUTHOR_EMAIL: request.authorEmail ?? "system@agentforum.local",
GIT_COMMITTER_NAME: request.authorName ?? "Agent Forum",
GIT_COMMITTER_EMAIL: request.authorEmail ?? "system@agentforum.local",
LC_ALL: "C",
};
try {
if (branchExists && currentHeadCommit) {
// Read the current branch tree into the custom index
await runCommand("git", ["read-tree", currentHeadCommit], { env, cwd });
}
for (const [filePath, content] of Object.entries(request.filesToUpdate)) {
const normalizedPath = filePath.replace(/\\/g, "/");
// 1. Write the file content as a blob via stdin
const { stdout: blobHashOutput } = await runCommand(
"git",
["hash-object", "-w", "--stdin"],
{
env,
cwd,
stdin: content,
},
);
const blobHash = blobHashOutput.trim();
// 2. Update the isolated index with the new blob
await runCommand(
"git",
[
"update-index",
"--add",
"--cacheinfo",
"100644",
blobHash,
normalizedPath,
],
{ env, cwd },
);
}
// 3. Write the tree from the isolated index
const { stdout: treeHashOutput } = await runCommand(
"git",
["write-tree"],
{ env, cwd },
);
const treeHash = treeHashOutput.trim();
// 4. Create a commit from the tree
const commitArgs = ["commit-tree", treeHash, "-m", request.message];
if (resolvedParentHash) {
commitArgs.push("-p", resolvedParentHash);
}
const { stdout: commitHashOutput } = await runCommand(
"git",
commitArgs,
{ env, cwd },
);
const commitHash = commitHashOutput.trim();
// 5. Atomic Compare-And-Swap (CAS) ref update
const expectedOldValue = request.parentHash
? request.parentHash
: (branchExists
? currentHeadCommit
: "0000000000000000000000000000000000000000");
try {
await runCommand(
"git",
["update-ref", targetRef, commitHash, expectedOldValue],
{ env, cwd },
);
} catch (err) {
if (err instanceof CommandExecutionError) {
throw new VirtualBranchConflictError(
`Failed atomic update on '${targetRef}' (expected ${expectedOldValue}): Branch head was modified concurrently by another process.`,
);
}
throw err;
}
return commitHash;
} finally {
try {
await Deno.remove(tempIndex);
} catch {
// Ignore removal errors
}
}
}

View File

@ -1,168 +0,0 @@
import { parse as parseYaml } from "jsr:@std/yaml@1";
import { listBranchFiles, readBranchFile } from "./git_inspector.ts";
import { runCommand } from "./sys_exec.ts";
export interface GovernanceSummary {
requirements: {
total: number;
approved: number;
draft: number;
parseError?: string;
};
tasks: {
total: number;
done: number;
inProgress: number;
pending: number;
};
notes: {
total: number;
namespaces: string[];
};
}
export async function fetchGovernanceMetrics(
cwd?: string,
): Promise<GovernanceSummary> {
const summary: GovernanceSummary = {
requirements: { total: 0, approved: 0, draft: 0 },
tasks: { total: 0, done: 0, inProgress: 0, pending: 0 },
notes: { total: 0, namespaces: [] },
};
// 1. Requirements from JSON-LD
try {
const ontologyRaw = await readBranchFile(
"meta-state",
"ontologies/graph.jsonld",
cwd,
);
if (ontologyRaw) {
try {
const graph = JSON.parse(ontologyRaw);
const items = Array.isArray(graph) ? graph : [graph];
const reqs = items.filter((i: Record<string, unknown>) =>
i["@type"] === "Requirement"
);
summary.requirements.approved =
reqs.filter((r: Record<string, unknown>) => r.status === "Approved")
.length;
summary.requirements.total = reqs.length;
summary.requirements.draft = summary.requirements.total -
summary.requirements.approved;
} catch {
summary.requirements.parseError =
"Unparseable graph.jsonld at meta-state:ontologies/graph.jsonld";
}
}
} catch {
// ignore
}
// 2. Tasks from YAML DAGs
try {
const taskFilesRaw = await listBranchFiles("meta-state", "tasks/", cwd);
if (taskFilesRaw && taskFilesRaw.length > 0) {
const taskFiles = taskFilesRaw.filter((f) => f.endsWith(".yaml"));
summary.tasks.total = taskFiles.length;
const results = await Promise.all(taskFiles.map(async (tf) => {
const yamlPath = tf.startsWith("tasks/") ? tf : `tasks/${tf}`;
try {
const yamlContent = await readBranchFile("meta-state", yamlPath, cwd);
if (yamlContent) {
const parsed = parseYaml(yamlContent) as { status?: string };
const status = (parsed?.status || "").toLowerCase();
if (status === "done") return "done";
if (
status === "in_progress" || status === "in-progress" ||
status === "active"
) return "in_progress";
return "pending";
}
} catch {
return "pending";
}
return "pending";
}));
for (const res of results) {
if (res === "done") summary.tasks.done++;
else if (res === "in_progress") summary.tasks.inProgress++;
else summary.tasks.pending++;
}
}
} catch {
// safe ignore if no tasks dir
}
// 3. Git Notes
try {
const noteRefsOutput = await runCommand("git", [
"for-each-ref",
"--format=%(refname)",
"refs/notes/",
], { cwd });
if (noteRefsOutput.stdout) {
const refs = noteRefsOutput.stdout.split("\n").filter(Boolean);
const notesNamespaces: string[] = [];
let totalNotesCount = 0;
for (const ref of refs) {
try {
const listOutput = await runCommand("git", [
"notes",
`--ref=${ref}`,
"list",
], { cwd });
const count = listOutput.stdout
? listOutput.stdout.split("\n").filter(Boolean).length
: 0;
totalNotesCount += count;
notesNamespaces.push(ref.replace("refs/notes/", ""));
} catch {
// ignore
}
}
summary.notes.total = totalNotesCount;
summary.notes.namespaces = notesNamespaces;
}
} catch {
// safe ignore if no notes
}
return summary;
}
export async function main(_args: string[] = Deno.args) {
console.log("==================================================");
console.log(" Agent Forum v4 - Governance Metrics ");
console.log("==================================================\n");
let repoRoot = "";
try {
const res = await runCommand("git", ["rev-parse", "--show-toplevel"]);
repoRoot = res.stdout.trim();
} catch {
throw new Error("Failed to determine git repository root.");
}
console.log("🗺️ **Governance & Process Telemetry (meta-state):**");
const gov = await fetchGovernanceMetrics(repoRoot);
const reqsText = gov.requirements.parseError ||
`${gov.requirements.total} Total (${gov.requirements.approved} Approved, ${gov.requirements.draft} Draft)`;
console.log(` • Requirements (Ontology): ${reqsText}`);
console.log(
` • Task Backlog (DAG): ${gov.tasks.total} Tasks (${gov.tasks.done} Done, ${gov.tasks.inProgress} In-Progress, ${gov.tasks.pending} Pending)`,
);
console.log(
` • Cryptographic Git Notes: ${gov.notes.total} Notes across ${gov.notes.namespaces.length} namespaces (${
gov.notes.namespaces.join(", ") || "none"
})`,
);
console.log("==================================================");
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,117 +0,0 @@
/**
* Agent Forum v4 - Meta-State Manager
*
* This script is executed during the pre-commit hook and by tools to interact with
* the embedded data structures:
* - Validating Bounded Model Checking rules (transitions.json).
* - Writing arbitrary metadata to Git Notes.
* - Generating Git Merkle DAG Diffs for O(1) context updates.
*/
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { runCommand } from "./sys_exec.ts";
import type { FileDiff, TelemetryPayload, TransitionsConfig } from "./types.ts";
import { validateTransitions } from "./bmc_validator.ts";
import { getStagedDiff, readBranchJsonFile } from "./git_inspector.ts";
import { hasNote, writeNote } from "./git_storage.ts";
import { generateVectorDeltas } from "./vector_delta_engine.ts";
/**
* Validates that the current commit meets the Bounded Model Checking rules.
* E.g., The Gatekeeper checklist must be completed before Coder changes are allowed.
*/
async function validateBoundedModelChecking(diffs: FileDiff[]) {
console.log("-> Validating Bounded Model Checking constraints...");
const config = await readBranchJsonFile<TransitionsConfig>(
"meta-state",
"transitions.json",
);
if (!config) {
console.log(
"⚠️ Could not load transitions.json from meta-state branch. Skipping validation.",
);
return;
}
if (diffs.length === 0) {
console.log(" No files changed. Skipping validation.");
return;
}
const activeRoles: string[] = [];
for (const key of Object.keys(config)) {
if (key === "scopes") continue;
if (await hasNote(key, "HEAD")) {
activeRoles.push(key);
}
}
const result = validateTransitions(diffs, activeRoles, config);
if (!result.valid) {
console.error("❌ Bounded Model Checking Failed:");
for (const violation of result.violations) {
console.error(` - [${violation.ruleId}] ${violation.message}`);
}
Deno.exit(1);
}
console.log("-> BMC validation passed.");
}
/**
* Calculates the Git Merkle DAG Diff to provide agents with precise change context.
*/
async function generateMerkleDiff() {
console.log("-> Generating Merkle DAG context diff...");
// Compare working tree against HEAD
const diffCommand = await runCommand("git", ["diff-index", "HEAD"]);
if (diffCommand.stdout === "") {
console.log(" No changes detected in working tree.");
return;
}
// In a full implementation, we serialize this diff and possibly attach it via
// Git Notes or pass it immediately into the agent context pipeline.
// console.log(diffCommand.stdout);
}
async function handlePreCommit(force = false) {
if (!force && (await hasNote("telemetry", "HEAD"))) {
console.log(
"⚡ Commit HEAD already has telemetry & vector state recorded. Skipping duplicate generation.",
);
return;
}
const diffs = await getStagedDiff();
await generateMerkleDiff();
await generateVectorDeltas(diffs);
// Attaching a standardized telemetry note
try {
await writeNote<TelemetryPayload>("telemetry", {
timestamp: Date.now(),
event: "pre-commit",
agent: "System",
status: "success",
});
console.log("-> Telemetry Git Note written successfully.");
} catch (e) {
console.warn("⚠️ Failed to write telemetry Git Note:", e);
}
}
export async function main(args: string[] = Deno.args) {
const parsed = parseArgs(args, {
boolean: ["pre-commit", "force"],
});
if (parsed["pre-commit"]) {
await handlePreCommit(parsed["force"]);
}
}

View File

@ -1,414 +0,0 @@
import { Database } from "jsr:@db/sqlite";
import * as sqliteVec from "npm:sqlite-vec";
import { join } from "jsr:@std/path";
import { resolveGitCommonDir } from "./git_path_resolver.ts";
import { CommandExecutionError, runCommand } from "./sys_exec.ts";
import { readBranchFile } from "./git_inspector.ts";
import { v7 } from "jsr:@std/uuid@1";
import { existsSync } from "jsr:@std/fs";
export function ensureAppliedDeltasSchema(db: Database) {
db.exec(`CREATE TABLE IF NOT EXISTS applied_deltas (
delta_id TEXT PRIMARY KEY,
applied_at TEXT
);`);
try {
const columns = db.prepare(`PRAGMA table_info(applied_deltas)`).all() as {
name: string;
}[];
const colNames = new Set(columns.map((c) => c.name));
if (!colNames.has("domain")) {
db.exec(`ALTER TABLE applied_deltas ADD COLUMN domain TEXT;`);
}
if (!colNames.has("author")) {
db.exec(`ALTER TABLE applied_deltas ADD COLUMN author TEXT;`);
}
if (!colNames.has("commit_msg")) {
db.exec(`ALTER TABLE applied_deltas ADD COLUMN commit_msg TEXT;`);
}
if (!colNames.has("action_summary")) {
db.exec(`ALTER TABLE applied_deltas ADD COLUMN action_summary TEXT;`);
}
} catch {
// Ignore pragma or alter table errors if already locked
}
}
export async function syncVectorDatabase(
domain: string,
db?: Database,
cwd?: string,
): Promise<void> {
let localDb = db;
let closeDb = false;
let rootResult = "";
try {
const repoRootCmd = await runCommand("git", [
"rev-parse",
"--show-toplevel",
], { cwd });
rootResult = repoRootCmd.stdout.trim();
} catch (_e) {
// Ignore error if not in git repo, fallback to cwd or Deno.cwd
}
const currentCwd = cwd || Deno.env.get("FORUM_TEST_REPO_ROOT") || rootResult || Deno.cwd();
if (!localDb) {
const commonDir = await resolveGitCommonDir(currentCwd);
const cacheDir = join(commonDir, "agent-forum", "cache");
await Deno.mkdir(cacheDir, { recursive: true });
const localDbPath = join(cacheDir, `${domain}_graph.sqlite`);
// Bootstrapping from snapshot if DB does not exist
if (!existsSync(localDbPath)) {
try {
const lsCmd = await runCommand(
"git",
["ls-tree", "--name-only", `meta-state:snapshots/`],
{ cwd: currentCwd },
);
if (lsCmd.stdout) {
const snapshotFiles = lsCmd.stdout
.split("\n")
.map((f) => f.trim())
.filter((f) =>
f.startsWith(`${domain}_base_`) && f.endsWith(".sqlite")
)
.sort(); // Lexicographical sort (UUIDv7 chronological)
if (snapshotFiles.length > 0) {
const latestSnapshot = snapshotFiles[snapshotFiles.length - 1];
try {
// Extract the snapshot blob directly
const showCmd = new Deno.Command("git", {
args: ["show", `meta-state:snapshots/${latestSnapshot}`],
cwd: currentCwd,
stdout: "piped",
});
const showOut = await showCmd.output();
if (showOut.success) {
await Deno.writeFile(localDbPath, showOut.stdout);
}
} catch (e) {
// Ignore failure to extract snapshot and just build from scratch
console.error(`Failed to load snapshot ${latestSnapshot}:`, e);
}
}
}
} catch (e) {
// No snapshots found or branch doesn't exist
}
}
localDb = new Database(localDbPath);
localDb.enableLoadExtension = true;
sqliteVec.load(localDb);
localDb.enableLoadExtension = false;
closeDb = true;
}
try {
ensureAppliedDeltasSchema(localDb);
let files: string[] = [];
try {
const lsCmd = await runCommand(
"git",
["ls-tree", "--name-only", `meta-state:deltas/${domain}/`],
{ cwd: currentCwd },
);
if (lsCmd.stdout) {
files = lsCmd.stdout
.split("\n")
.map((f) => f.trim())
.filter((f) => f.endsWith(".sql"));
}
} catch {
return; // No deltas found for domain
}
if (files.length === 0) {
return;
}
files.sort(); // Lexicographical sort (UUIDv7 chronological)
const unapplied: string[] = [];
const stmt = localDb.prepare(
`SELECT 1 FROM applied_deltas WHERE delta_id = ?`,
);
for (const file of files) {
const fileName = file.split("/").pop() || file;
const deltaId = fileName.replace(".sql", "");
const row = stmt.get(deltaId);
if (!row) {
unapplied.push(fileName);
}
}
if (unapplied.length === 0) {
return;
}
const insertStmt = localDb.prepare(
`INSERT OR IGNORE INTO applied_deltas (delta_id, applied_at) VALUES (?, ?)`,
);
const now = new Date().toISOString();
for (const file of unapplied) {
const fileName = file.split("/").pop() || file;
const stdoutStr = await readBranchFile(
"meta-state",
`deltas/${domain}/${fileName}`,
currentCwd,
);
if (stdoutStr) {
try {
// sqlite-vec vec0 tables require DELETE + INSERT instead of INSERT OR REPLACE
const sanitizedSql = stdoutStr.replace(
/INSERT\s+OR\s+REPLACE\s+INTO\s+(vec_\w+)\s*\((rowid,\s*embedding)\)\s*VALUES\s*\(([^,]+),\s*([^;]+)\);/gi,
"DELETE FROM $1 WHERE rowid = $3; INSERT INTO $1 ($2) VALUES ($3, $4);",
);
// The delta SQL already contains BEGIN TRANSACTION and COMMIT
localDb.exec(sanitizedSql);
const deltaId = file.replace(".sql", "");
// Use a small internal transaction for inserting into applied_deltas
localDb.exec("BEGIN TRANSACTION;");
insertStmt.run(deltaId, now);
localDb.exec("COMMIT;");
} catch (e) {
console.error(
`Failed to apply delta ${file} for domain ${domain}:`,
e,
);
// Only attempt rollback if we started an explicit transaction and it failed
// (e.g. if the delta SQL failed mid-execution and left a transaction open)
try {
localDb.exec("ROLLBACK;");
} catch {
// Ignore rollback errors if there's no active transaction
}
return;
}
}
}
} finally {
if (closeDb && localDb) {
localDb.close();
}
}
}
export async function getVectorDatabase(domain: string, cwd?: string): Promise<Database> {
const currentCwd = cwd || Deno.cwd();
const commonDir = await resolveGitCommonDir(currentCwd);
const cacheDir = join(commonDir, "agent-forum", "cache");
await Deno.mkdir(cacheDir, { recursive: true });
const localDbPath = join(cacheDir, `${domain}_graph.sqlite`);
const db = new Database(localDbPath);
db.enableLoadExtension = true;
sqliteVec.load(db);
db.enableLoadExtension = false;
await syncVectorDatabase(domain, db, cwd);
return db;
}
export async function compactVectorDatabase(domain: string): Promise<void> {
const repoRootCmd = await runCommand("git", ["rev-parse", "--show-toplevel"]);
const currentCwd = Deno.env.get("FORUM_TEST_REPO_ROOT") ||
repoRootCmd.stdout.trim() || Deno.cwd();
const commonDir = await resolveGitCommonDir(currentCwd);
const cacheDir = join(commonDir, "agent-forum", "cache");
const localDbPath = join(cacheDir, `${domain}_graph.sqlite`);
if (!existsSync(localDbPath)) {
throw new Error(
`Cannot compact domain ${domain}: Local database not found at ${localDbPath}`,
);
}
// 1. Vacuum local database
const db = new Database(localDbPath);
try {
db.exec("VACUUM;");
} finally {
db.close();
}
// 2. Read compacted database bytes
const dbBytes = await Deno.readFile(localDbPath);
// 3. Create virtual commit on meta-state
const snapshotFileName = `${domain}_base_${v7.generate()}.sqlite`;
// Use Deno.Command for hashing the binary blob directly instead of createVirtualCommit
// to avoid serialization issues with string-based Record<string, string>
const hashObjectCmd = new Deno.Command("git", {
args: ["hash-object", "-w", "--stdin"],
cwd: currentCwd,
stdin: "piped",
stdout: "piped",
});
const hashChild = hashObjectCmd.spawn();
const writer = hashChild.stdin.getWriter();
await writer.write(dbBytes);
await writer.close();
const hashOutput = await hashChild.output();
const blobHash = new TextDecoder().decode(hashOutput.stdout).trim();
const targetRef = "refs/heads/meta-state";
let branchExists = false;
let currentHeadCommit = "";
try {
const { stdout } = await runCommand(
"git",
["rev-parse", "--verify", targetRef],
{ cwd: currentCwd, env: { LC_ALL: "C" } },
);
currentHeadCommit = stdout.trim();
branchExists = currentHeadCommit.length > 0;
} catch {
branchExists = false;
}
const tempIndex = await Deno.makeTempFile({
prefix: "agent_forum_compaction_",
});
await Deno.remove(tempIndex);
const env = {
GIT_INDEX_FILE: tempIndex,
GIT_AUTHOR_NAME: "Agent Forum Compactor",
GIT_AUTHOR_EMAIL: "system@agentforum.local",
GIT_COMMITTER_NAME: "Agent Forum Compactor",
GIT_COMMITTER_EMAIL: "system@agentforum.local",
LC_ALL: "C",
};
try {
if (branchExists && currentHeadCommit) {
await runCommand("git", ["read-tree", currentHeadCommit], {
env,
cwd: currentCwd,
});
}
await runCommand(
"git",
[
"update-index",
"--add",
"--cacheinfo",
"100644",
blobHash,
`snapshots/${snapshotFileName}`,
],
{ env, cwd: currentCwd },
);
const { stdout: treeHashOutput } = await runCommand(
"git",
["write-tree"],
{ env, cwd: currentCwd },
);
const treeHash = treeHashOutput.trim();
const commitArgs = [
"commit-tree",
treeHash,
"-m",
`chore(compaction): create snapshot for ${domain}`,
];
if (branchExists && currentHeadCommit) {
commitArgs.push("-p", currentHeadCommit);
}
const { stdout: commitHashOutput } = await runCommand(
"git",
commitArgs,
{ env, cwd: currentCwd },
);
const commitHash = commitHashOutput.trim();
const expectedOldValue = branchExists
? currentHeadCommit
: "0000000000000000000000000000000000000000";
await runCommand(
"git",
["update-ref", targetRef, commitHash, expectedOldValue],
{ env, cwd: currentCwd },
);
} finally {
try {
await Deno.remove(tempIndex);
} catch {
// Ignore
}
}
}
import { parseArgs } from "jsr:@std/cli/parse-args";
export async function main(cliArgs: string[] = Deno.args) {
const args = parseArgs(cliArgs, {
boolean: ["sync", "compact"],
string: ["domain"],
});
if (args.sync) {
if (args.domain) {
await syncVectorDatabase(args.domain);
} else {
try {
const lsCmd = await runCommand("git", [
"ls-tree",
"--name-only",
"meta-state:deltas/",
]);
if (lsCmd.stdout) {
const domains = lsCmd.stdout.split("\n").map((d) => d.trim()).filter(
(d) => d.length > 0,
);
for (const domain of domains) {
await syncVectorDatabase(domain);
}
}
} catch {
// No deltas directory or branch
}
}
} else if (args.compact) {
if (args.domain) {
await compactVectorDatabase(args.domain);
} else {
try {
const lsCmd = await runCommand("git", [
"ls-tree",
"--name-only",
"meta-state:deltas/",
]);
if (lsCmd.stdout) {
const domains = lsCmd.stdout.split("\n").map((d) => d.trim()).filter(
(d) => d.length > 0,
);
for (const domain of domains) {
await compactVectorDatabase(domain);
}
}
} catch {
// No deltas directory or branch
}
}
}
}

View File

@ -1,322 +0,0 @@
import { resolveGitPath } from "./git_path_resolver.ts";
import { join } from "jsr:@std/path@0.224.0";
/**
* Options for running a system command.
*/
export interface RunOptions {
/** Working directory for the process */
cwd?: string;
/** Environment variables */
env?: Record<string, string>;
/** Heavy input payload piped directly into standard input */
stdin?: string | Uint8Array;
/** Real-time callback for stdout chunks to prevent memory bloat */
onStdout?: (chunk: string) => void;
/** Real-time callback for stderr chunks */
onStderr?: (chunk: string) => void;
/** Abort signal to cancel or timeout a hanging process */
signal?: AbortSignal;
/**
* Maximum bytes to buffer in memory for returned stdout/stderr strings (default: 10MB).
* Real-time callbacks (onStdout/onStderr) continue streaming live chunks unhindered.
*/
maxBuffer?: number;
/**
* Grace period in milliseconds between SIGTERM and escalating to SIGKILL (default: 1000ms).
*/
killGracePeriodMs?: number;
/**
* If true, stderr is merged directly into stdout chronologically.
*/
mergeStderr?: boolean;
}
/**
* Result returned from a successful command execution.
*/
export interface RunResult {
stdout: string;
stderr: string;
}
/**
* Custom error thrown when a command execution exits with a non-zero code.
*/
export class CommandExecutionError extends Error {
public readonly cmd: string;
public readonly exitCode: number;
public readonly stdout: string;
public readonly stderr: string;
constructor(cmd: string, exitCode: number, stdout: string, stderr: string) {
super(
`Command execution failed: ${cmd}\nExit code: ${exitCode}${
stderr ? `\nStderr: ${stderr}` : ""
}`,
);
this.name = "CommandExecutionError";
this.cmd = cmd;
this.exitCode = exitCode;
this.stdout = stdout;
this.stderr = stderr;
Object.setPrototypeOf(this, CommandExecutionError.prototype);
}
}
/**
* Safely terminates a process directly by PID.
*/
function terminateProcess(
child: Deno.ChildProcess,
signal: "SIGTERM" | "SIGKILL",
) {
try {
child.kill(signal);
} catch {
// Process already terminated or signal unsupported
}
}
/**
* Forces process tree destruction on Windows platforms, ignoring ghost PID errors.
*/
async function terminateWindowsProcessTree(pid: number): Promise<void> {
try {
const cmd = new Deno.Command("taskkill", {
args: ["/pid", pid.toString(), "/T", "/F"],
stdout: "null",
stderr: "null",
});
const child = cmd.spawn();
await child.status;
} catch {
// Silently ignore permission errors or non-existent PIDs
}
}
const DEFAULT_MAX_BUFFER = 10 * 1024 * 1024; // 10MB default buffer ceiling
/**
* Slices a string cleanly on UTF-16 code point / surrogate pair boundaries.
*/
export function safeTruncate(text: string, maxLen: number): string {
if (text.length <= maxLen) return text;
let cut = maxLen;
// If cutting between a surrogate pair (high surrogate at cut - 1), back up by 1 code unit
const code = text.charCodeAt(cut - 1);
if (code >= 0xD800 && code <= 0xDBFF) {
cut -= 1;
}
return text.slice(0, cut) + "\n...[output truncated due to maxBuffer limit]";
}
/**
* Universal, memory-safe execution engine for system commands.
*
* @param cmd The command executable to run.
* @param args The arguments passed to the command.
* @param options Execution configuration (stdin, streaming, timeout signals, maxBuffer, env, cwd).
* @returns Result object with stdout and stderr.
* @throws {CommandExecutionError} If the process exits with a non-zero code.
*/
export async function runCommand(
cmd: string,
args: string[] = [],
options: RunOptions = {},
): Promise<RunResult> {
const fullCmd = [cmd, ...args].join(" ").trim();
// 1. Pre-flight check: fail immediately if signal is already aborted
if (options.signal?.aborted) {
throw new Error(`Command aborted before execution: ${fullCmd}`);
}
const maxBuffer = options.maxBuffer ?? DEFAULT_MAX_BUFFER;
const hasStdin = options.stdin !== undefined;
const command = new Deno.Command(cmd, {
args,
cwd: options.cwd,
env: options.env,
stdin: hasStdin ? "piped" : "null",
stdout: "piped",
stderr: "piped",
signal: options.signal,
});
const startTimestamp = Date.now();
const child = command.spawn();
// 2. Staggered Abort Handler (SIGTERM -> Escalation Grace Period -> SIGKILL / Taskkill)
let abortTimer: ReturnType<typeof setTimeout> | null = null;
let abortListener: (() => void) | null = null;
if (options.signal) {
abortListener = () => {
terminateProcess(child, "SIGTERM");
const graceMs = options.killGracePeriodMs ?? 1000;
abortTimer = setTimeout(() => {
if (Deno.build.os === "windows") {
terminateWindowsProcessTree(child.pid);
} else {
terminateProcess(child, "SIGKILL");
}
}, graceMs);
};
options.signal.addEventListener("abort", abortListener, { once: true });
}
// 3. Concurrent Stdin Writer (prevents pipe buffer deadlocks)
const writeStdin = async () => {
if (!hasStdin) return;
try {
const writer = child.stdin.getWriter();
try {
const payload = typeof options.stdin === "string"
? new TextEncoder().encode(options.stdin)
: options.stdin!;
await writer.write(payload);
} finally {
try {
await writer.close();
} catch {
// Ignore close errors if pipe is already broken
}
}
} catch (err) {
if (
!(err instanceof Deno.errors.BrokenPipe ||
err instanceof Deno.errors.Interrupted)
) {
throw err;
}
}
};
let accumulatedStdout = "";
let accumulatedStderr = "";
const appendCapped = (current: string, chunk: string): string => {
if (current.length + chunk.length <= maxBuffer) {
return current + chunk;
}
if (current.length < maxBuffer) {
return safeTruncate(current + chunk, maxBuffer);
}
return current;
};
// 4. Stream Consumer with Multi-Byte UTF-8 Boundary Safety & Memory Cap
const consumeStream = async (
stream: ReadableStream<Uint8Array>,
isStderr: boolean,
onChunk?: (chunk: string) => void,
): Promise<void> => {
const reader = stream.getReader();
const decoder = new TextDecoder();
const handleText = (text: string) => {
if (!text) return;
if (onChunk) onChunk(text);
if (options.mergeStderr && isStderr) {
accumulatedStdout = appendCapped(accumulatedStdout, text);
} else if (isStderr) {
accumulatedStderr = appendCapped(accumulatedStderr, text);
} else {
accumulatedStdout = appendCapped(accumulatedStdout, text);
}
};
try {
while (true) {
const { done, value } = await reader.read();
if (done) break;
if (value) {
handleText(decoder.decode(value, { stream: true }));
}
}
} catch (err) {
if (
!(err instanceof Deno.errors.Interrupted ||
(err instanceof DOMException && err.name === "AbortError"))
) {
throw err;
}
} finally {
try {
reader.releaseLock();
} catch {
// Ignore lock release errors on aborted streams
}
handleText(decoder.decode());
}
};
// 5. Settled Concurrent Execution Traffic Controller
try {
const [stdinRes, stdoutRes, stderrRes, statusRes] = await Promise
.allSettled([
writeStdin(),
consumeStream(child.stdout, false, options.onStdout),
consumeStream(child.stderr, true, options.onStderr),
child.status,
]);
const duration_ms = Date.now() - startTimestamp;
const exitCode = statusRes.status === "fulfilled"
? statusRes.value.code
: -1;
let traceFile = "";
try {
traceFile = await resolveGitPath("forum_trace.jsonl", options.cwd);
} catch {
traceFile = join(options.cwd || Deno.cwd(), ".git", "forum_trace.jsonl");
}
const trace = {
cmd: fullCmd,
duration_ms,
timestamp: startTimestamp,
exit_code: exitCode,
};
try {
await Deno.writeTextFile(traceFile, JSON.stringify(trace) + "\n", {
append: true,
});
} catch {
// Best-effort trace logging
}
if (statusRes.status === "rejected") {
throw statusRes.reason;
}
const status = statusRes.value;
if (stdinRes.status === "rejected") throw stdinRes.reason;
if (stdoutRes.status === "rejected") throw stdoutRes.reason;
if (stderrRes.status === "rejected") throw stderrRes.reason;
if (status.code !== 0) {
throw new CommandExecutionError(
fullCmd,
status.code,
accumulatedStdout,
accumulatedStderr,
);
}
return {
stdout: accumulatedStdout,
stderr: options.mergeStderr ? "" : accumulatedStderr,
};
} finally {
// 6. Deterministic Cleanup of timers and event listeners
if (abortTimer !== null) {
clearTimeout(abortTimer);
}
if (abortListener && options.signal) {
options.signal.removeEventListener("abort", abortListener);
}
}
}

View File

@ -1,93 +0,0 @@
import { Database } from "jsr:@db/sqlite@0.11.1";
import { join } from "jsr:@std/path@0.224.0";
import { resolveGitCommonDir } from "./git_path_resolver.ts";
import { AnalystOptimization, TelemetryPayload } from "./types.ts";
/**
* Initializes and returns a Database connection to the telemetry SQLite DB.
* Responsible exclusively for writing telemetry data as a mutation gateway.
*/
export async function getTelemetryDatabase(cwd?: string): Promise<Database> {
const commonDir = await resolveGitCommonDir(cwd);
const dbPath = join(commonDir, "forum_telemetry.sqlite");
const db = new Database(dbPath);
db.exec(`
CREATE TABLE IF NOT EXISTS analyst_optimizations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
agent TEXT NOT NULL,
timestamp INTEGER NOT NULL,
mttr TEXT NOT NULL,
pr_comment_ratio REAL NOT NULL,
friction_markers TEXT NOT NULL,
proposed_protocol_updates TEXT NOT NULL
);
`);
db.exec(`
CREATE TABLE IF NOT EXISTS telemetry_payloads (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp INTEGER NOT NULL,
event TEXT NOT NULL,
agent TEXT NOT NULL,
status TEXT NOT NULL
);
`);
return db;
}
/**
* Serializes an AnalystOptimization object to the telemetry database.
*/
export async function serializeAnalystOptimization(
optimization: AnalystOptimization,
cwd?: string,
): Promise<void> {
const db = await getTelemetryDatabase(cwd);
try {
const stmt = db.prepare(`
INSERT INTO analyst_optimizations (
agent, timestamp, mttr, pr_comment_ratio, friction_markers, proposed_protocol_updates
) VALUES (?, ?, ?, ?, ?, ?)
`);
stmt.run(
optimization.agent,
optimization.timestamp,
optimization.metrics.mttr,
optimization.metrics.prCommentRatio,
optimization.metrics.frictionMarkers,
JSON.stringify(optimization.proposedProtocolUpdates),
);
} finally {
db.close();
}
}
/**
* Serializes a TelemetryPayload object to the telemetry database.
*/
export async function writeTelemetryPayload(
payload: TelemetryPayload,
cwd?: string,
): Promise<void> {
const db = await getTelemetryDatabase(cwd);
try {
const stmt = db.prepare(`
INSERT INTO telemetry_payloads (
timestamp, event, agent, status
) VALUES (?, ?, ?, ?)
`);
stmt.run(
payload.timestamp,
payload.event,
payload.agent,
payload.status,
);
} finally {
db.close();
}
}

View File

@ -1,39 +0,0 @@
{
"scopes": {
"application": {
"patterns": ["src/**", "server/**"],
"requires": [
"Gatekeeper_Approval",
"Adversary_Pass",
"Historian_Context",
"Analyst_Optimize"
]
},
"documentation": {
"patterns": ["docs/**", "*.md"],
"requires": ["Translator_Check"]
},
"harness": {
"patterns": [".forum/**", "deno.lock", ".gitignore"],
"requires": []
}
},
"Gatekeeper": {
"requires": []
},
"Coder": {
"requires": [
"Gatekeeper_Approval"
]
},
"Adversary": {
"requires": [
"Coder_Commit"
]
},
"Evaluator": {
"requires": [
"Adversary_Pass"
]
}
}

View File

@ -1,309 +0,0 @@
/**
* Strict typing for all agent payloads interacting with Git Notes.
* Provides a single source of truth for the Agent Forum architecture.
*/
/**
* Payload generated by the Gatekeeper agent.
*/
export interface GatekeeperChecklist {
/** Timestamp when the checklist was generated. */
generatedAt: number;
/** Name of the agent (Gatekeeper). */
agent: string;
/** Status of the checklist (e.g. Approved, Completed, Pending). */
status: string;
/** List of individual verification items derived from ontologies. */
items: Array<{
/** Unique identifier for the requirement. */
id: string;
/** Textual description of the requirement. */
description: string;
/** Whether the requirement has been verified. */
verified: boolean;
}>;
}
/**
* Payload generated by the Adversary agent representing mutation test metrics.
*/
export interface MutationMetrics {
/** Timestamp of the mutation run. */
timestamp: number;
/** Status of the mutation run (e.g. Completed, Skipped, Failed). */
status: string;
/** The overall mutation score (0-100). */
mutationScore: number | string;
/** Number of total mutants generated. */
totalMutants?: number;
/** Number of surviving mutants. */
surviving?: number;
/** Detailed breakdown of mutation metrics per file. */
fileBreakdown?: Record<string, {
/** Mutants found in this file. */
mutants: number;
/** Surviving mutants in this file. */
surviving: number;
/** Mutation score for this file. */
score: number | string;
}>;
/** List of details about surviving mutants. */
survivingMutants: Array<{
/** The file where the mutant survived. */
fileName: string;
/** The mutator that created the surviving mutant. */
mutatorName: string;
/** Starting line of the mutation. */
line: number;
/** Code replacement that survived. */
replacement: string;
}>;
/** Reason why the run was skipped (if applicable). */
reason?: string;
}
/**
* Detailed report payload generated by the Adversary agent.
*/
export interface AdversaryReport {
/** Name of the agent (Adversary). */
agent: string;
/** Timestamp when the report was generated. */
timestamp: number;
/** List of security vulnerabilities found (e.g. via Semgrep). */
securityVulnerabilities: Array<{
/** Rule ID from the security scanner. */
ruleId: string;
/** Path to the vulnerable file. */
path: string;
/** Line number of the vulnerability. */
line: number;
/** Severity level. */
severity: string;
/** Threat description or message. */
threat?: string;
/** Threat message from scanner. */
message?: string;
}>;
/** List of quality issues / surviving mutations. */
// deno-lint-ignore no-explicit-any
qualityMutations: Array<any>;
/** List of performance bottlenecks identified from traces. */
performanceBottlenecks: Array<{
/** Source of the trace data. */
source: string;
/** Distilled traces that are identified as slow. */
// deno-lint-ignore no-explicit-any
slowTraces: Array<any>;
}>;
}
/**
* Payload generated by the Translator agent for documentation updates.
*/
export interface TranslatorUpdates {
/** Name of the agent (Translator). */
agent: string;
/** Timestamp when the updates were generated. */
timestamp: number;
/** Proposed documentation additions or changes. */
proposedDocAdditions: Array<{
/** The target documentation file to update. */
file: string;
/** The section to update or add. */
section: string;
/** The actual content to append or replace. */
content: string;
}>;
}
/**
* Payload generated by the Analyst agent for workflow optimizations.
*/
export interface AnalystOptimization {
/** Name of the agent (Analyst). */
agent: string;
/** Timestamp when the optimization was synthesized. */
timestamp: number;
/** Metrics regarding team friction. */
metrics: {
/** Mean time to resolution. */
mttr: string;
/** Ratio of PR comments. */
prCommentRatio: number;
/** Identifiable points of friction in the workflow. */
frictionMarkers: string;
};
/** List of proposed changes to the workflow protocol. */
proposedProtocolUpdates: string[];
}
/**
* Payload generated by the Historian agent representing historical context.
*/
export interface HistorianContext {
/** Name of the agent (Historian). */
agent: string;
/** Timestamp when the context was gathered. */
timestamp: number;
/** List of vector representations extracted from databases. */
extractedVectors: string[];
/** Aggregate of historical notes (reasoning, AI). */
historicalNotes: string[];
/** An actionable directive for other agents to follow. */
directive: string;
/** Warnings about past regressions or failures. */
warnings: string[];
}
/**
* Payload generated by the Evaluator agent tracking system state validation.
*/
export interface EvaluatorState {
/** Name of the agent (Evaluator). */
agent: string;
/** Timestamp when the evaluation occurred. */
timestamp: number;
/** Outcome of the pipeline validation (Valid, Blocked, Error). */
pipelineStatus: string;
/** List of active validation rules executed. */
activeRules: string[];
/** Detailed reason if the pipeline was blocked. */
blockReason: string;
}
/**
* Payload representing a system telemetry event.
*/
export interface TelemetryPayload {
/** Timestamp of the telemetry event. */
timestamp: number;
/** Name of the event (e.g. pre-commit). */
event: string;
/** Name of the agent generating the event. */
agent: string;
/** Status of the event. */
status: string;
}
// ==========================================
// Inspector Contracts (Read Data)
// ==========================================
/**
* Represents a single file modification as parsed by the Inspector module.
*/
export interface FileDiff {
/** The path to the file that was modified. */
filepath: string;
/** The status of the file modification mapped from raw Git output. */
status:
| "ADDED"
| "MODIFIED"
| "DELETED"
| "RENAMED"
| "COPIED"
| "UNMERGED"
| "UNKNOWN";
}
/**
* Standardized metadata payload representing a single Git commit.
*/
export interface CommitContext {
/** The full Git commit hash. */
hash: string;
/** The author string of the commit. */
author: string;
/** The UNIX timestamp of the commit. */
timestamp: number;
/** The full commit message. */
message: string;
}
// ==========================================
// Validator Contracts (Pure Logic Data)
// ==========================================
/**
* Defines a scope based on file patterns that triggers specific agent rule checks.
*/
export interface ScopeConfig {
/** Glob patterns that define which files belong to this scope. */
patterns: string[];
/** Required rules or agent approvals triggered when this scope is matched. */
requires: string[];
}
/**
* Defines the required checks for a specific transition state.
*/
export interface TransitionRule {
/** Required rules or agent approvals for this transition. */
requires: string[];
}
/**
* Configuration schema for bounding model checking and agent transitions.
* Perfectly mirrors the flat JSON structure of transitions.json.
*/
export interface TransitionsConfig {
/** Optional grouping of transition rules dynamically matched by file paths. */
scopes?: Record<string, ScopeConfig>;
/**
* Dynamic mapping for role-based transition definitions.
* Required to maintain type-safety for arbitrary agent injection.
*/
[key: string]: TransitionRule | Record<string, ScopeConfig> | undefined;
}
/**
* Details of a single rule violation caught during model checking.
*/
export interface RuleViolation {
/** The specific file that caused the violation, if applicable. */
file?: string;
/** The ID of the rule that was violated. */
ruleId: string;
/** Human-readable explanation of the violation. */
message: string;
/** The severity of the violation, allowing the orchestrator to decide action. */
severity: "ERROR" | "WARNING";
}
/**
* The standardized result of a pure logic validation run.
*/
export interface ValidationResult {
/** True if validation passed with no ERRORS, false otherwise. */
valid: boolean;
/** A list of detailed violations, providing orchestrators exact failure context. */
violations: RuleViolation[];
}
// ==========================================
// Virtual Branch Contracts (Write Data)
// ==========================================
/**
* Standardized payload for requesting a headless commit creation.
*/
export interface VirtualCommitRequest {
/** The branch on which the virtual commit should be anchored/created. */
targetBranch: string;
/**
* A mapping of file paths to their new string content.
* Uses Record instead of Map to guarantee JSON serialization safety.
*/
filesToUpdate: Record<string, string>;
/** The message to be applied to the virtual commit. */
message: string;
/** The hash of the parent commit (optional; auto-resolves to current branch head if omitted). */
parentHash?: string;
/** Optional working directory for execution. */
cwd?: string;
/** Optional author/committer name override. */
authorName?: string;
/** Optional author/committer email override. */
authorEmail?: string;
}

View File

@ -1,256 +0,0 @@
import { Database } from "jsr:@db/sqlite@0.13.0";
// deno-lint-ignore no-unversioned-import
import * as sqliteVec from "npm:sqlite-vec";
import { join } from "jsr:@std/path@0.224.0/join";
import { ensureDir } from "jsr:@std/fs@0.224.0/ensure-dir";
import { v7 } from "jsr:@std/uuid@1";
import { ensureAppliedDeltasSchema } from "./replay_engine.ts";
import { runCommand } from "./sys_exec.ts";
import { resolveGitCommonDir } from "./git_path_resolver.ts";
import { getPendingCommitContext } from "./git_inspector.ts";
import { createVirtualCommit } from "./git_virtual_branch.ts";
import type { FileDiff } from "./types.ts";
export function uuidv7ToVecRowId(uuid: string): bigint {
const hex = uuid.replace(/-/g, "").slice(16);
return BigInt("0x" + hex) & 0x7FFFFFFFFFFFFFFFn;
}
export function generateActionSummary(diffs: FileDiff[]): string {
if (diffs.length === 0) {
return "Pre-commit vector update";
}
const changedFiles = diffs.map((d) => d.filepath);
if (changedFiles.length === 1) {
return `Updated ${changedFiles[0]}`;
} else if (changedFiles.length > 1 && changedFiles.length <= 3) {
return `Updated ${changedFiles.join(", ")}`;
}
return `Updated ${changedFiles.slice(0, 2).join(", ")} (+${
changedFiles.length - 2
} more)`;
}
export function generateDocsSql(
deltaId: string,
author: string,
commitMsg: string,
actionSummary: string,
timestamp: string,
): string {
const rowId = uuidv7ToVecRowId(deltaId);
const domain = "docs";
const filepath = `stub/path/${domain}.ts`;
const symbolName = `Stub${domain}`;
const signature = `function ${symbolName}() {}`;
const contentHash = `hash-${deltaId}`;
const dummyVector = new Float32Array([0.1, 0.2, 0.3]);
const vectorJsonStr = JSON.stringify(Array.from(dummyVector));
return `BEGIN TRANSACTION;
-- Scalar table upsert with LWW timestamp check
INSERT INTO ${domain}_symbols (id, filepath, symbol_name, signature, content_hash, is_deleted, last_updated)
VALUES ('${deltaId}', '${filepath}', '${symbolName}', '${signature}', '${contentHash}', 0, '${timestamp}')
ON CONFLICT(id) DO UPDATE SET
filepath = excluded.filepath,
symbol_name = excluded.symbol_name,
signature = excluded.signature,
content_hash = excluded.content_hash,
is_deleted = 0,
last_updated = excluded.last_updated
WHERE excluded.last_updated > ${domain}_symbols.last_updated;
-- Vector upsert using deterministic rowid (DELETE + INSERT for vec0 virtual table compatibility)
DELETE FROM vec_${domain} WHERE rowid = ${rowId};
INSERT INTO vec_${domain} (rowid, embedding)
VALUES (${rowId}, '${vectorJsonStr}');
-- Provenance record
INSERT INTO applied_deltas (delta_id, domain, author, commit_msg, action_summary, applied_at)
VALUES ('${deltaId}', '${domain}', '${author.replace(/'/g, "''")}', '${
commitMsg.replace(/'/g, "''")
}', '${actionSummary.replace(/'/g, "''")}', '${timestamp}')
ON CONFLICT(delta_id) DO UPDATE SET
author = excluded.author,
commit_msg = excluded.commit_msg,
action_summary = excluded.action_summary;
COMMIT;
`;
}
export function generateTelemetrySql(
deltaId: string,
author: string,
commitMsg: string,
actionSummary: string,
timestamp: string,
): string {
const rowId = uuidv7ToVecRowId(deltaId);
const domain = "telemetry";
const filepath = `stub/path/${domain}.ts`;
const symbolName = `Stub${domain}`;
const signature = `function ${symbolName}() {}`;
const contentHash = `hash-${deltaId}`;
const dummyVector = new Float32Array([0.1, 0.2, 0.3]);
const vectorJsonStr = JSON.stringify(Array.from(dummyVector));
return `BEGIN TRANSACTION;
-- Scalar table upsert with LWW timestamp check
INSERT INTO ${domain}_symbols (id, filepath, symbol_name, signature, content_hash, is_deleted, last_updated)
VALUES ('${deltaId}', '${filepath}', '${symbolName}', '${signature}', '${contentHash}', 0, '${timestamp}')
ON CONFLICT(id) DO UPDATE SET
filepath = excluded.filepath,
symbol_name = excluded.symbol_name,
signature = excluded.signature,
content_hash = excluded.content_hash,
is_deleted = 0,
last_updated = excluded.last_updated
WHERE excluded.last_updated > ${domain}_symbols.last_updated;
-- Vector upsert using deterministic rowid (DELETE + INSERT for vec0 virtual table compatibility)
DELETE FROM vec_${domain} WHERE rowid = ${rowId};
INSERT INTO vec_${domain} (rowid, embedding)
VALUES (${rowId}, '${vectorJsonStr}');
-- Provenance record
INSERT INTO applied_deltas (delta_id, domain, author, commit_msg, action_summary, applied_at)
VALUES ('${deltaId}', '${domain}', '${author.replace(/'/g, "''")}', '${
commitMsg.replace(/'/g, "''")
}', '${actionSummary.replace(/'/g, "''")}', '${timestamp}')
ON CONFLICT(delta_id) DO UPDATE SET
author = excluded.author,
commit_msg = excluded.commit_msg,
action_summary = excluded.action_summary;
COMMIT;
`;
}
export function applySqlToLocalCache(
domain: string,
sqlText: string,
cacheDir: string,
): void {
const localDbPath = join(cacheDir, `${domain}_graph.sqlite`);
const db = new Database(localDbPath);
db.enableLoadExtension = true;
sqliteVec.load(db);
db.enableLoadExtension = false;
try {
ensureAppliedDeltasSchema(db);
db.exec("PRAGMA journal_mode = WAL; PRAGMA busy_timeout = 5000;");
db.exec(`BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS ${domain}_symbols (
id TEXT PRIMARY KEY,
filepath TEXT,
symbol_name TEXT,
signature TEXT,
content_hash TEXT,
is_deleted INTEGER DEFAULT 0,
last_updated TEXT
);
CREATE VIRTUAL TABLE IF NOT EXISTS vec_${domain} USING vec0(
embedding float[3]
);
COMMIT;`);
db.exec(sqlText);
console.log(
` [✓] Successfully applied delta to local cache: ${domain}_graph.sqlite`,
);
} catch (err) {
console.warn(
` ⚠️ Failed to apply delta to local cache ${domain}:`,
err,
);
} finally {
db.close();
}
}
export async function commitDeltaInboxes(
actionSummary: string,
filesToUpdate: Record<string, string>,
cwd?: string,
): Promise<void> {
console.log(" Committing delta inboxes to meta-state branch...");
const commitMsgText = `chore(meta-state): ${
actionSummary.length > 55
? actionSummary.substring(0, 52) + "..."
: actionSummary
}`;
const commitId = await createVirtualCommit({
targetBranch: "meta-state",
filesToUpdate,
message: commitMsgText,
cwd,
});
console.log(
` [✓] Delta inboxes successfully committed to meta-state branch (Commit: ${
commitId.substring(0, 7)
}).`,
);
}
export async function generateVectorDeltas(
diffs: FileDiff[],
options?: { cwd?: string },
): Promise<void> {
console.log("-> Generating vector database deltas...");
const repoRootCmd = await runCommand(
"git",
["rev-parse", "--show-toplevel"],
{
cwd: options?.cwd,
},
);
const repoRoot = repoRootCmd.stdout.trim();
const commonDir = await resolveGitCommonDir(repoRoot);
const cacheDir = join(commonDir, "agent-forum", "cache");
await ensureDir(cacheDir);
const { message: commitMsg, author } = await getPendingCommitContext(
repoRoot,
);
const actionSummary = generateActionSummary(diffs);
const filesToUpdate: Record<string, string> = {};
const timestamp = new Date().toISOString();
// Generate Docs SQL
const docsDeltaId = v7.generate();
const docsSqlText = generateDocsSql(
docsDeltaId,
author,
commitMsg,
actionSummary,
timestamp,
);
filesToUpdate[`deltas/docs/${docsDeltaId}.sql`] = docsSqlText;
// Generate Telemetry SQL
const telemetryDeltaId = v7.generate();
const telemetrySqlText = generateTelemetrySql(
telemetryDeltaId,
author,
commitMsg,
actionSummary,
timestamp,
);
filesToUpdate[`deltas/telemetry/${telemetryDeltaId}.sql`] = telemetrySqlText;
// Apply to local cache
applySqlToLocalCache("docs", docsSqlText, cacheDir);
applySqlToLocalCache("telemetry", telemetrySqlText, cacheDir);
if (Object.keys(filesToUpdate).length > 0) {
await commitDeltaInboxes(actionSummary, filesToUpdate, options?.cwd);
}
}

View File

@ -1,385 +0,0 @@
import { Database } from "jsr:@db/sqlite@0.13";
import * as sqliteVec from "npm:sqlite-vec@0.1";
import { join } from "jsr:@std/path@1";
import { ensureAppliedDeltasSchema } from "./replay_engine.ts";
import { runCommand } from "./sys_exec.ts";
import { listBranchFiles } from "./git_inspector.ts";
import { resolveGitCommonDir } from "./git_path_resolver.ts";
async function runCmd(args: string[], cwd?: string): Promise<string> {
try {
const res = await runCommand("git", args, { cwd, env: { LC_ALL: "C" } });
return res.stdout.trim();
} catch {
return "";
}
}
/**
* Extracts a Javascript Date object from a UUIDv7 string.
* UUIDv7 encodes a 48-bit Unix timestamp in milliseconds in the first 12 hex characters.
*/
function getDateFromUuidv7(uuid: string): Date {
const hexTime = uuid.replace(/-/g, "").substring(0, 12);
const timeMs = parseInt(hexTime, 16);
return new Date(timeMs);
}
interface ActivityEvent {
author: string;
commitMsg: string;
actionSummary: string;
timestamp: Date;
dateStr: string;
domains: Set<string>;
latestDeltaId: string;
}
export async function displayRecentActivity(
domains: string[],
cacheDir: string,
repoRoot: string,
) {
console.log(`📋 **Recent User & Agent Activity (Last 5 Events):**`);
// Pre-fetch branch commits for accurate message correlation
const headLogRaw = await runCmd([
"log",
"-n",
"50",
"--format=%H|%s|%an|%cI",
], repoRoot);
const branchCommits: { msg: string; author: string; time: number }[] = [];
if (headLogRaw) {
for (const line of headLogRaw.split("\n").filter(Boolean)) {
const [_hash, msg, author, dateStr] = line.split("|");
branchCommits.push({ msg, author, time: new Date(dateStr).getTime() });
}
}
const allDeltas: {
delta_id: string;
domain: string;
author: string;
commit_msg: string;
action_summary: string;
applied_at: string;
timestampMs: number;
}[] = [];
for (const domain of domains) {
const dbPath = join(cacheDir, `${domain}_graph.sqlite`);
try {
const db = new Database(dbPath);
try {
ensureAppliedDeltasSchema(db);
const stmt = db.prepare(
`SELECT delta_id, domain, author, commit_msg, action_summary, applied_at FROM applied_deltas`,
);
const rows = stmt.all();
for (const row of rows) {
const r = row as Record<string, unknown>;
if (r.delta_id && r.author) {
let timestampMs = 0;
try {
timestampMs = getDateFromUuidv7(String(r.delta_id)).getTime();
} catch {
timestampMs = Date.now();
}
// Always correlate with the actual code commit on the active branch
let cMsg = String(r.commit_msg || "").trim();
const match = branchCommits.find(
(bc) => Math.abs(bc.time - timestampMs) < 30000,
);
if (match) {
cMsg = match.msg;
}
allDeltas.push({
delta_id: String(r.delta_id),
domain: String(r.domain || domain),
author: String(r.author),
commit_msg: cMsg,
action_summary: String(r.action_summary || ""),
applied_at: String(r.applied_at || ""),
timestampMs,
});
}
}
} catch {
// Safe ignore
} finally {
db.close();
}
} catch {
// Safe ignore
}
}
allDeltas.sort((a, b) => b.delta_id.localeCompare(a.delta_id));
// Group into distinct user / agent commit events
const events: ActivityEvent[] = [];
for (const d of allDeltas) {
const existing = events.find(
(e) =>
e.author === d.author &&
(e.commitMsg === d.commit_msg ||
e.actionSummary === d.action_summary) &&
Math.abs(e.timestamp.getTime() - d.timestampMs) < 15000,
);
if (existing) {
existing.domains.add(d.domain);
if (!existing.commitMsg && d.commit_msg) {
existing.commitMsg = d.commit_msg;
}
if (!existing.actionSummary && d.action_summary) {
existing.actionSummary = d.action_summary;
}
} else {
const date = new Date(d.timestampMs);
events.push({
author: d.author,
commitMsg: d.commit_msg,
actionSummary: d.action_summary,
timestamp: date,
dateStr: date.toLocaleString(),
domains: new Set([d.domain]),
latestDeltaId: d.delta_id,
});
}
}
const displayedEvents = [...events.slice(0, 5)];
// Pad with historical commits from meta-state if fewer than 5
if (displayedEvents.length < 5) {
const fallbackLog = await runCmd([
"log",
"-n",
"10",
"--format=%h|%an|%s|%cI",
"meta-state",
"--",
"deltas/",
], repoRoot);
if (fallbackLog) {
const lines = fallbackLog.split("\n").filter(Boolean);
for (const line of lines) {
if (displayedEvents.length >= 5) break;
const [hash, author, summary, dateStr] = line.split("|");
const date = new Date(dateStr);
const alreadyListed = displayedEvents.some(
(e) => Math.abs(e.timestamp.getTime() - date.getTime()) < 15000,
);
if (!alreadyListed) {
displayedEvents.push({
author,
commitMsg: summary,
actionSummary: "",
timestamp: date,
dateStr: date.toLocaleString(),
domains: new Set(["meta-state"]),
latestDeltaId: hash,
});
}
}
}
}
if (displayedEvents.length > 0) {
for (const ev of displayedEvents) {
const domainList = Array.from(ev.domains).sort().join(", ");
console.log(
` • ${ev.author} (${ev.dateStr}) → [${domainList}]:`,
);
if (ev.commitMsg) {
console.log(` ↳ Commit: "${ev.commitMsg}"`);
}
if (ev.actionSummary && ev.actionSummary !== ev.commitMsg) {
console.log(` ↳ Scope: "${ev.actionSummary}"`);
}
}
} else {
console.log(` • No recent agent-forum activity recorded.`);
}
}
export async function displayDomainMetrics(
domain: string,
cacheDir: string,
repoRoot: string,
) {
console.log(`📊 **Domain: ${domain}**`);
// 1. Deltas Count
const lsDomainDeltas = await listBranchFiles(
"meta-state",
`deltas/${domain}/`,
repoRoot,
);
const deltas = lsDomainDeltas.filter((d) => d.endsWith(".sql"));
// 2. Snapshot Detection
let latestSnapshotName = "None";
let snapshotDateText = "None (Base Seed Deltas)";
const allSnapshotFiles = await listBranchFiles(
"meta-state",
"snapshots/",
repoRoot,
);
const domainSnapshots = allSnapshotFiles.filter(
(f) =>
f.startsWith(`snapshots/${domain}_base_`) ||
f.startsWith(`snapshots/${domain}/`) ||
f.includes(domain),
);
if (domainSnapshots.length > 0) {
domainSnapshots.sort();
latestSnapshotName = domainSnapshots[domainSnapshots.length - 1].replace(
"snapshots/",
"",
);
try {
const uuidMatch = latestSnapshotName.match(
/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i,
);
if (uuidMatch) {
snapshotDateText = getDateFromUuidv7(uuidMatch[0]).toLocaleString();
} else {
snapshotDateText = "Active Snapshot";
}
} catch {
snapshotDateText = "Active Snapshot";
}
}
console.log(` • Deltas Total: ${deltas.length}`);
console.log(
` • Snapshot: \`${latestSnapshotName}\` (Date: ${snapshotDateText})`,
);
// 3. SQLite Local Cache Metrics & Sync Status
const dbPath = join(cacheDir, `${domain}_graph.sqlite`);
try {
const fileInfo = await Deno.stat(dbPath);
const db = new Database(dbPath);
try {
db.enableLoadExtension = true;
sqliteVec.load(db);
db.enableLoadExtension = false;
ensureAppliedDeltasSchema(db);
let symbolsCount = "0";
try {
const countResult = db.prepare(
`SELECT count(*) as c FROM ${domain}_symbols`,
).get() as { c?: number };
symbolsCount = `${countResult?.c ?? 0}`;
} catch {
// Ignore
}
let vecCount = "0";
try {
const vecCountResult = db.prepare(
`SELECT count(*) as c FROM vec_${domain}`,
).get() as { c?: number };
vecCount = `${vecCountResult?.c ?? 0}`;
} catch {
// Ignore
}
// Check applied vs unapplied deltas
let unappliedCount = 0;
try {
const stmt = db.prepare(
`SELECT 1 FROM applied_deltas WHERE delta_id = ?`,
);
for (const deltaFile of deltas) {
const id = deltaFile.split("/").pop()?.replace(".sql", "") ||
deltaFile.replace(".sql", "");
if (!stmt.get(id)) unappliedCount++;
}
} catch {
// Ignore
}
const syncStatus = unappliedCount === 0
? "✅ In Sync"
: `⚠️ ${unappliedCount} Unapplied (Needs Replay)`;
console.log(
` • Local Size: ${
(fileInfo.size / 1024).toFixed(2)
} KB (${syncStatus})`,
);
console.log(` • Symbols Cached: ${symbolsCount}`);
console.log(` • Vectors Cached: ${vecCount}`);
} finally {
db.close();
}
} catch {
console.log(` • Local Cache: ⚠️ Not initialized in local workspace`);
}
}
export async function main(_args: string[] = Deno.args) {
console.log("==================================================");
console.log(" Agent Forum v4 - Vector Domain Metrics ");
console.log("==================================================\n");
let repoRoot = "";
try {
const res = await runCommand("git", ["rev-parse", "--show-toplevel"]);
repoRoot = res.stdout.trim();
} catch {
throw new Error("Failed to determine git repository root.");
}
const commonDir = await resolveGitCommonDir(repoRoot);
const cacheDir = join(commonDir, "agent-forum", "cache");
const lsDeltas = await listBranchFiles("meta-state", "deltas/", repoRoot);
const domains = [
...new Set(
lsDeltas
.map((path) => {
const parts = path.split("/");
if (parts.length > 1 && parts[0] === "deltas") {
return parts[1];
}
return "";
})
.filter(Boolean),
),
];
if (domains.length === 0) {
console.log("⚠️ No vector domains found on the meta-state branch.");
return;
}
await displayRecentActivity(domains, cacheDir, repoRoot);
console.log("\n--------------------------------------------------");
for (const domain of domains) {
await displayDomainMetrics(domain, cacheDir, repoRoot);
console.log("--------------------------------------------------");
}
console.log("💡 **Quick Plumbing Reference:**");
console.log(" • List tree: `git ls-tree -r --name-only meta-state`");
console.log(
" • Sync DBs: `deno run -A .forum/src/core/replay_engine.ts --sync`",
);
console.log("==================================================");
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,13 +0,0 @@
#!/usr/bin/env bash
# If we are inside an internal detached worktree (.forum/worktree_meta), we must skip post-checkout
# to prevent vector sync cascades when managing Git internal states.
if [[ "$PWD" == *".forum/worktree_meta"* ]] || [[ "$GIT_DIR" == *".forum/worktree_meta"* ]]; then
exit 0
fi
# Fetch the meta-state branch silently in the background
git fetch origin meta-state:meta-state --quiet 2>/dev/null || true
# Synchronize the vector databases using the delta replay engine
deno run -A .forum/src/core/replay_engine.ts --sync

View File

@ -1,14 +0,0 @@
#!/usr/bin/env bash
# Agent Forum v4 - Post-Commit Hook
# Automatically executes Bounded Model Checking rules on the newly minted commit
# and attaches Cryptographic Git Notes (evaluator_state) to HEAD.
REPO_ROOT=$(git rev-parse --show-toplevel)
RUNNER="$REPO_ROOT/.forum/src/run.ts"
if [ -f "$RUNNER" ] && command -v deno &> /dev/null; then
echo "-> Agent Forum: Flushing pending deferred notes..."
deno eval "import { flushPendingNotes } from 'file://$REPO_ROOT/.forum/src/core/git_storage.ts'; await flushPendingNotes('HEAD');" || true
fi
exit 0

View File

@ -1,7 +0,0 @@
#!/usr/bin/env bash
# Fetch the meta-state branch silently in the background
git fetch origin meta-state:meta-state --quiet 2>/dev/null || true
# Synchronize the vector databases using the delta replay engine
deno run -A .forum/src/core/replay_engine.ts --sync

View File

@ -1,86 +0,0 @@
#!/usr/bin/env bash
# Agent Forum v4 - Pre-Commit Hook
#
# This hook executes Git-Native Agent Collaboration Ecosystem tasks before every commit:
# 1. Generates Semantic Code Intelligence Protocol (SCIP) & AST graphs.
# 2. Runs fast Static Analysis (Semgrep) if available.
# 3. Validates Bounded Model Checking rules via transitions.json.
# 4. Writes telemetry/reasoning payloads to Git Notes.
export FORUM_DEFER_NOTES=1
# Clear any stale pending notes from aborted commits
PENDING_FILE=$(git rev-parse --git-path forum_pending_notes.jsonl 2>/dev/null || echo ".git/forum_pending_notes.jsonl")
rm -f "$PENDING_FILE"
echo "=================================================="
echo " Agent Forum v4 - Pre-Commit Validation "
echo "=================================================="
# Exit on any failure
set -e
REPO_ROOT=$(git rev-parse --show-toplevel)
CLI="$REPO_ROOT/.forum/src/cli.ts"
if [ -f "$CLI" ] && command -v deno &> /dev/null; then
echo "Running Agent Forum meta-state checks..."
# Run the meta-state manager to extract structural diffs and enforce rules.
# Note: Using run -A for Deno as it requires fs and run permissions to inspect git
if ! deno run -A "$CLI" sync --pre-commit; then
echo "❌ Agent Forum Bounded Model Checking failed. Commit aborted."
exit 1
fi
# Optional: AST Extraction using tree-sitter
if command -v tree-sitter &> /dev/null; then
echo "-> Generating local AST structures..."
START_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
find "$REPO_ROOT/src" \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \) 2>/dev/null | while read -r file; do
rel_path="${file#"$REPO_ROOT/"}"
mkdir -p "$REPO_ROOT/.forum/ast/$(dirname "$rel_path")"
tree-sitter parse "$file" > "$REPO_ROOT/.forum/ast/$rel_path.ast" 2>/dev/null || true
done
END_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
DURATION=$((END_TS - START_TS))
TRACE_FILE=$(git rev-parse --git-path forum_trace.jsonl)
echo "{\"cmd\":\"tree-sitter (batch ast extraction)\",\"duration_ms\":$DURATION,\"timestamp\":$START_TS,\"exit_code\":0}" >> "$TRACE_FILE"
echo " AST structures saved to .forum/ast/"
fi
if command -v deno &> /dev/null; then
echo "-> Generating Deno dependency graph..."
START_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
mkdir -p "$REPO_ROOT/.forum/ast"
deno info --json src/run.ts > "$REPO_ROOT/.forum/ast/deno_graph.json" 2>/dev/null || true
END_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
DURATION=$((END_TS - START_TS))
TRACE_FILE=$(git rev-parse --git-path forum_trace.jsonl)
echo "{\"cmd\":\"deno info --json src/run.ts\",\"duration_ms\":$DURATION,\"timestamp\":$START_TS,\"exit_code\":0}" >> "$TRACE_FILE"
echo " Deno dependency graph saved to .forum/ast/deno_graph.json"
fi
# Optional: Fast Security Scan
if command -v semgrep &> /dev/null; then
echo "-> Running Semgrep baseline scan..."
START_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
mkdir -p "$REPO_ROOT/.forum/security"
semgrep scan --config=auto --json -o "$REPO_ROOT/.forum/security/semgrep_baseline.json" || true
END_TS=$(deno eval 'console.log(Date.now())' 2>/dev/null || date +%s%3N)
DURATION=$((END_TS - START_TS))
TRACE_FILE=$(git rev-parse --git-path forum_trace.jsonl)
echo "{\"cmd\":\"semgrep\",\"duration_ms\":$DURATION,\"timestamp\":$START_TS,\"exit_code\":0}" >> "$TRACE_FILE"
echo " Semgrep scan results saved to .forum/security/semgrep_baseline.json"
fi
echo "-> Agent Forum: Evaluating BMC rules & certifying commit..."
deno run -A "$CLI" run || { echo "❌ Agent Forum BMC pipeline rejected the commit."; exit 1; }
else
echo "⚠️ Agent Forum meta-state manager (Deno script) not found or Deno not installed. Skipping."
fi
echo "✅ Pre-commit validation passed."
exit 0

View File

@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Agent Forum v4 - Pre-Push Synchronization Hook
# Automatically syncs the 'meta-state' orphan branch and all agent git notes
# whenever any branch is pushed to a remote.
remote="$1"
url="$2"
echo "-> Agent Forum: Syncing meta-state and Git Notes to remote '${remote}'..."
# Run pipeline rules evaluation (e.g., Gatekeeper, Adversary)
REPO_ROOT=$(git rev-parse --show-toplevel)
CLI="$REPO_ROOT/.forum/src/cli.ts"
if [ -f "$CLI" ] && command -v deno &> /dev/null; then
echo "-> Agent Forum: Running pre-push pipeline rules..."
deno run -A "$CLI" run --push || { echo "❌ Pre-push pipeline rejected the commit."; exit 1; }
fi
# 1. Push the meta-state branch if it exists locally (using --no-verify to stop recursion)
if git rev-parse --verify meta-state >/dev/null 2>&1; then
git push --no-verify "$remote" meta-state:meta-state --force --quiet || echo "⚠️ Warning: Failed to push meta-state branch."
fi
# 2. Push all agent Git Notes across all namespaces (using --no-verify)
git push --no-verify "$remote" 'refs/notes/*:refs/notes/*' --force --quiet || echo "⚠️ Warning: Failed to push Git Notes."
echo "-> Agent Forum: State synchronization complete."
exit 0

View File

@ -1,369 +0,0 @@
/**
* Agent Forum v4 - Installation and Setup Script
*
* This script initializes the Git-Native Agent Collaboration Ecosystem by:
* 1. Verifying system dependencies (Deno, Git, and optionally tree-sitter/semgrep).
* 2. Initializing the `meta-state` orphan branch with the required structure.
* 3. Installing the Git pre-commit hooks.
*/
import { existsSync } from "https://deno.land/std@0.224.0/fs/exists.ts";
import { join } from "https://deno.land/std@0.224.0/path/mod.ts";
import { resolveGitCommonDir } from "./core/git_path_resolver.ts";
const CWD = Deno.cwd();
const FORUM_HOOKS_DIR = join(CWD, ".forum", "src", "hooks");
async function runCommand(
cmd: string,
args: string[],
): Promise<{ code: number; stdout: string; stderr: string }> {
try {
const command = new Deno.Command(cmd, {
args,
stdout: "piped",
stderr: "piped",
});
const { code, stdout, stderr } = await command.output();
const decoder = new TextDecoder();
return {
code,
stdout: decoder.decode(stdout).trim(),
stderr: decoder.decode(stderr).trim(),
};
} catch (e: any) {
return {
code: -1,
stdout: "",
stderr: e.message || String(e),
};
}
}
const REQUIRED_TOOLS = [
{
name: "git",
command: "git",
args: ["--version"],
required: true,
failMsg: "Git is not installed or not in PATH.",
},
{
name: "Deno",
command: "deno",
args: ["--version"],
required: true,
failMsg: "Deno is not installed or not in PATH.",
},
{
name: "Node.js / npm",
command: "npm",
args: ["--version"],
required: true,
failMsg: "npm is not installed or not in PATH.",
},
{
name: "tree-sitter",
command: "tree-sitter",
args: ["--version"],
required: false,
warnMsg: "SCIP/AST generation may be limited.",
},
{
name: "semgrep",
command: "semgrep",
args: ["--version"],
required: false,
warnMsg: "Security analysis payloads may be skipped.",
},
{
name: "scip-typescript",
command: "scip-typescript",
args: ["--version"],
required: false,
warnMsg: "TypeScript SCIP indexing may be skipped.",
},
{
name: "madge",
command: "madge",
args: ["--version"],
required: false,
warnMsg: "Dependency graphing may be skipped.",
},
{
name: "stryker",
command: "stryker",
args: ["--version"],
required: false,
warnMsg: "Mutation testing may be skipped.",
},
];
async function checkDependencies() {
console.log("Checking dependencies...");
for (const tool of REQUIRED_TOOLS) {
const check = await runCommand(tool.command, tool.args);
if (check.code !== 0) {
if (tool.required) {
console.error(`[!] Missing: ${tool.name} - ${tool.failMsg}`);
Deno.exit(1);
} else {
console.log(`[!] Warning: ${tool.name} not found. ${tool.warnMsg}`);
}
} else {
// For tools like npm or tree-sitter that might output multiline or noisy versions,
// we take just the first line for a cleaner log.
const versionStr = check.stdout.split("\n")[0].substring(0, 30);
console.log(`[✓] Found: ${tool.name} (${versionStr})`);
}
}
}
async function initializeMetaStateBranch() {
console.log("\nInitializing 'meta-state' orphan branch...");
const dirs = ["tasks", "ontologies", "vectors"];
// Check if branch exists
const checkBranch = await runCommand("git", [
"show-ref",
"--verify",
"refs/heads/meta-state",
]);
if (checkBranch.code === 0) {
console.log(
"[ Already Exists ] 'meta-state' branch found. Checking existing structure...",
);
// Check which directories exist on the meta-state branch
const lsTree = await runCommand("git", [
"ls-tree",
"refs/heads/meta-state",
]);
if (lsTree.code === 0) {
const existingItems = lsTree.stdout.split("\n").map((line) =>
line.split("\t")[1]
);
for (const d of dirs) {
if (existingItems.includes(d)) {
console.log(`[✓] Found directory: ${d}/`);
} else {
console.log(`[!] Missing directory in meta-state: ${d}/`);
}
}
if (existingItems.includes("transitions.json")) {
console.log(`[✓] Found file: transitions.json`);
} else {
console.log(`[!] Missing file in meta-state: transitions.json`);
}
}
console.log(
"[~] Preserving existing data. (If missing items are needed, you may need to add them manually to the meta-state branch)",
);
return;
}
console.log("[+] Creating 'meta-state' orphan branch...");
// Save current branch name (not strictly needed since we use plumbing, but kept for context if needed later)
const currentBranchRes = await runCommand("git", [
"rev-parse",
"--abbrev-ref",
"HEAD",
]);
const _currentBranch = currentBranchRes.stdout;
// Create temporary directory for meta-state tree
const tempDir = await Deno.makeTempDir();
// Create structure
for (const d of dirs) {
await Deno.mkdir(join(tempDir, d), { recursive: true });
// Add a .gitkeep so git tracks the directory
await Deno.writeTextFile(join(tempDir, d, ".gitkeep"), "");
}
// Baseline transitions.json
const defaultTransitions = {
"Gatekeeper": { "requires": [] },
"Coder": { "requires": ["Gatekeeper_Approval"] },
"Adversary": { "requires": ["Coder_Commit"] },
};
await Deno.writeTextFile(
join(tempDir, "transitions.json"),
JSON.stringify(defaultTransitions, null, 2),
);
// Also copy from .forum/src/core/transitions.json if it exists
const coreTransitions = join(
CWD,
".forum",
"src",
"core",
"transitions.json",
);
if (existsSync(coreTransitions)) {
await Deno.copyFile(coreTransitions, join(tempDir, "transitions.json"));
}
// We need to create a commit on the orphan branch using git plumbing commands
// to avoid changing the working directory files
console.log("Running git plumbing commands to build meta-state tree...");
// 1. Create a temporary index file isolated from the main index
const gitDir = await resolveGitCommonDir(CWD);
const env = {
...Deno.env.toObject(),
GIT_INDEX_FILE: join(gitDir, "index_meta_state"),
};
// Ensure index is clean
try {
await Deno.remove(env.GIT_INDEX_FILE);
} catch (_e) {
// Ignore if doesn't exist
}
// 2. Add files to the temporary index using git hash-object and update-index
for (const d of dirs) {
const keepPath = join(tempDir, d, ".gitkeep");
const hashCmd = await runCommand("git", ["hash-object", "-w", keepPath]);
const blobId = hashCmd.stdout;
await new Deno.Command("git", {
args: [
"update-index",
"--add",
"--cacheinfo",
`100644,${blobId},${d}/.gitkeep`,
],
env,
}).output();
}
const transPath = join(tempDir, "transitions.json");
const transHashCmd = await runCommand("git", [
"hash-object",
"-w",
transPath,
]);
const transBlobId = transHashCmd.stdout;
await new Deno.Command("git", {
args: [
"update-index",
"--add",
"--cacheinfo",
`100644,${transBlobId},transitions.json`,
],
env,
}).output();
// 3. Write tree
const writeTreeCmd = await new Deno.Command("git", {
args: ["write-tree"],
env,
stdout: "piped",
}).output();
const treeId = new TextDecoder().decode(writeTreeCmd.stdout).trim();
// 4. Commit tree as an orphan commit
const commitCmd = await runCommand("git", [
"commit-tree",
treeId,
"-m",
"chore: initialize meta-state branch structure",
]);
const commitId = commitCmd.stdout;
// 5. Update ref to create the branch
await runCommand("git", ["update-ref", "refs/heads/meta-state", commitId]);
// Clean up index file
try {
await Deno.remove(env.GIT_INDEX_FILE);
} catch (_e) {
// Ignore
}
console.log(
"[+] 'meta-state' branch freshly initialized successfully without modifying working tree.",
);
}
async function installGitHooks() {
console.log("\nInstalling Git Hooks...");
const gitDir = await resolveGitCommonDir(CWD);
if (!existsSync(gitDir)) {
console.error(
"[!] Error: git directory not found. Must be run from the root of a git repository.",
);
Deno.exit(1);
}
const hooksDir = join(gitDir, "hooks");
const hooksToInstall = [
"pre-commit",
"pre-push",
"post-merge",
"post-checkout",
];
for (const hookName of hooksToInstall) {
const hookSource = join(FORUM_HOOKS_DIR, hookName);
const hookTarget = join(hooksDir, hookName);
if (!existsSync(hookSource)) {
console.warn(
`[!] Warning: Hook template not found at ${hookSource}. Skipping ${hookName}.`,
);
continue;
}
if (existsSync(hookTarget)) {
console.log(`[~] An existing ${hookName} hook was found.`);
console.log(
`[~] Replaced: Moving existing hook to ${hookName}.backup...`,
);
await Deno.rename(hookTarget, join(hooksDir, `${hookName}.backup`));
}
await Deno.copyFile(hookSource, hookTarget);
// Make it executable (chmod +x)
if (Deno.build.os !== "windows") {
await runCommand("chmod", ["+x", hookTarget]);
}
console.log(
`[+] Freshly Initialized: ${hookName} hook installed successfully.`,
);
}
}
export async function main(args: string[] = Deno.args) {
console.log("==================================================");
console.log(" Agent Forum v4 - Initialization Script ");
console.log("==================================================\n");
await checkDependencies();
await installGitHooks();
await initializeMetaStateBranch();
console.log("\nSynchronizing Vector Databases...");
await runCommand("deno", [
"run",
"-A",
join(CWD, ".forum", "src", "core", "replay_engine.ts"),
"--sync",
]);
console.log("\n==================================================");
console.log("🎉 Setup complete! The Agent Forum ecosystem is ready.");
console.log("==================================================");
}

View File

@ -1,138 +0,0 @@
// src/installer.ts
import { copy } from "jsr:@std/fs/copy";
import { ensureDir } from "jsr:@std/fs/ensure-dir";
import { join, resolve } from "jsr:@std/path";
async function runCmd(
cmd: string,
args: string[],
cwd: string,
): Promise<string> {
const command = new Deno.Command(cmd, {
args,
cwd,
stdout: "piped",
stderr: "piped",
});
const output = await command.output();
if (output.code !== 0) {
const errText = new TextDecoder().decode(output.stderr).trim();
throw new Error(
`Command '${cmd} ${args.join(" ")}' failed in ${cwd}: ${errText}`,
);
}
return new TextDecoder().decode(output.stdout).trim();
}
export async function main(args: string[] = Deno.args) {
const rawTarget = args[0] ?? Deno.cwd();
const targetDir = resolve(rawTarget);
const engineRoot = resolve(new URL(".", import.meta.url).pathname, "..");
console.log(`-> Installing Agent Forum from ${engineRoot} to ${targetDir}`);
// 1. Verify target is a git repository
await runCmd("git", ["rev-parse", "--show-toplevel"], targetDir);
// 2. Scaffolding directories
const targetForum = join(targetDir, ".forum");
await ensureDir(join(targetForum, "src"));
await ensureDir(join(targetForum, "hooks"));
await ensureDir(join(targetForum, "config"));
// 3. Copy engine source and hooks
await copy(join(engineRoot, "src"), join(targetForum, "src"), {
overwrite: true,
});
await copy(join(engineRoot, "src", "hooks"), join(targetForum, "hooks"), {
overwrite: true,
});
// 4. Configure git hooks path
await runCmd("git", ["config", "core.hooksPath", ".forum/hooks"], targetDir);
// 5. Append managed block to target .gitignore
const gitignorePath = join(targetDir, ".gitignore");
let gitignoreContent = "";
try {
gitignoreContent = await Deno.readTextFile(gitignorePath);
} catch {
// File does not exist yet
}
const managedHeader = "# === AGENT-FORUM MANAGED BLOCK ===";
const managedFooter = "# === END AGENT-FORUM MANAGED BLOCK ===";
const block = [
managedHeader,
".forum/ast/",
".forum/security/",
".forum/reports/",
".forum/worktree_meta/",
managedFooter,
].join("\n");
if (!gitignoreContent.includes(managedHeader)) {
const updated = gitignoreContent
? `${gitignoreContent.trimEnd()}\n\n${block}\n`
: `${block}\n`;
await Deno.writeTextFile(gitignorePath, updated);
}
// 5.5 Create agent-forum configuration in the target root if it does not exist
const configPath = join(targetDir, "agent-forum.json");
try {
await Deno.stat(configPath);
console.log(
"-> Existing agent-forum.json found in repository root. Preserving it.",
);
} catch {
console.log("-> Creating default agent-forum.json configuration...");
const defaultConfig = {
"stryker": {
"ignoreTests": ["test/integration/"],
"showProgress": true,
},
};
await Deno.writeTextFile(
configPath,
JSON.stringify(defaultConfig, null, 2),
);
}
// Cleanup old config if it exists in .forum/
const oldConfigPath = join(targetForum, "agent-forum.json");
try {
await Deno.stat(oldConfigPath);
await Deno.remove(oldConfigPath);
console.log("-> Cleaned up old agent-forum.json from .forum/ directory.");
} catch {
// Old config does not exist, nothing to clean up
}
// 6. Bootstrap meta-state branch
await runCmd(
"deno",
["run", "-A", join(targetForum, "src", "cli.ts"), "bootstrap"],
targetDir,
);
// 7. Sync Vector Database
console.log("-> Synchronizing Vector Databases...");
await runCmd(
"deno",
[
"run",
"-A",
join(targetForum, "src", "cli.ts"),
"replay",
"--sync",
],
targetDir,
);
console.log("✅ Agent Forum installed successfully.");
}
if (import.meta.main) {
await main(Deno.args);
}

View File

@ -1,226 +0,0 @@
import { CommandExecutionError, runCommand } from "./core/sys_exec.ts";
import { globToRegExp } from "https://deno.land/std@0.224.0/path/mod.ts";
import { parseArgs } from "https://deno.land/std@0.224.0/cli/parse_args.ts";
import { analyzeRequirements } from "./agents/gatekeeper.ts";
import { runAdversaryAnalysis } from "./agents/adversary.ts";
import { updateDocumentation } from "./agents/translator.ts";
import { evaluatePipeline } from "./agents/evaluator.ts";
import { gatherHistoricalContext } from "./agents/historian.ts";
import { runArchitectureAnalysis } from "./agents/analyst.ts";
import {
getDiff,
getStagedDiff,
readBranchFile,
} from "./core/git_inspector.ts";
import { readNote } from "./core/git_storage.ts";
async function getTransitions() {
try {
const content = await readBranchFile("meta-state", "transitions.json");
if (content) return JSON.parse(content);
} catch {}
try {
return JSON.parse(
await Deno.readTextFile(".forum/src/core/transitions.json"),
);
} catch {
try {
return JSON.parse(await Deno.readTextFile("src/core/transitions.json"));
} catch (e) {
console.error("❌ No transitions.json:", e);
Deno.exit(1);
}
}
}
async function getChangedFiles(flags: { all?: boolean; push?: boolean }) {
if (flags.all) {
try {
const trackedCmd = await runCommand("git", [
"ls-files",
"src/",
"server/",
"docs/",
]);
if (trackedCmd.stdout) {
return trackedCmd.stdout.split("\n").map((f) => f.trim()).filter(
Boolean,
);
}
} catch {}
}
try {
const staged = await getStagedDiff();
if (staged.length > 0) return staged.map((d) => d.filepath);
const working = await getDiff(); // un-staged modifications in working tree
if (working.length > 0) return working.map((d) => d.filepath);
} catch {}
try {
const upstream = await getDiff("@{u}", "HEAD");
if (upstream.length > 0) return upstream.map((d) => d.filepath);
} catch {}
try {
const last = await getDiff("HEAD~1", "HEAD");
if (last.length > 0) return last.map((d) => d.filepath);
} catch {}
return [];
}
// Maps rule names to agent runners
const RULE_AGENT_RUNNERS: Record<string, any> = {
"Gatekeeper_Approval": () => analyzeRequirements(),
"Translator_Check": () => updateDocumentation(),
"Adversary_Pass": async (targets?: string[], fullMutation?: boolean) => {
const cliArgs = ["--run"];
if (targets && targets.length > 0) {
cliArgs.push("--targets", targets.join(","));
}
if (fullMutation) cliArgs.push("--full-mutation");
await runAdversaryAnalysis(cliArgs);
},
"Historian_Context": () => gatherHistoricalContext(),
"Analyst_Optimize": () => runArchitectureAnalysis(),
"Historian": () => gatherHistoricalContext(),
"Analyst": () => runArchitectureAnalysis(),
};
const runAgt = async (n: string, fn: any, tf?: string[], fm?: boolean) => {
console.log(`\n========================================\nRunning ${n}...`);
try {
await fn(tf, fm);
return { success: true, status: "Passed", noteRef: "-" };
} catch (e) {
console.error(`❌ ${n} error:`, e);
return { success: false, status: "Blocked", noteRef: "-" };
}
};
export async function main(cliArgs: string[] = Deno.args) {
console.log("=== Agent Forum Pipeline Runner ===");
const args = parseArgs(cliArgs, {
boolean: [
"all",
"full",
"push",
"adversary",
"mutation",
"full-mutation",
"full-adversary",
"force",
],
});
if (args.push && !args.force) {
try {
const state = await readNote<any>("evaluator_state", "HEAD");
if (state && state.pipelineState === "Valid") {
console.log(
"\n⚡ Commit HEAD has already been evaluated... Skipping duplicate compute.",
);
Deno.exit(0);
}
} catch {}
}
const transitions = await getTransitions();
const changedFiles = await getChangedFiles({
all: args.all || args.full,
push: args.push,
});
const { evaluateRequiredRules } = await import("./run_utils.ts");
if (changedFiles.length > 0) {
console.log(`\nChanged files (${changedFiles.length}):`);
changedFiles.forEach((f) => console.log(` - ${f}`));
} else {
console.log("\nNo files changed. Falling back to default Coder requires.");
}
const requiredRules = evaluateRequiredRules(
changedFiles,
transitions,
args.adversary || args.mutation || args["full-mutation"] ||
args["full-adversary"],
);
if (changedFiles.length > 0 && transitions.scopes) {
for (const [scope, def] of Object.entries(transitions.scopes)) {
const p = (def as any).patterns || [];
const m = changedFiles.filter((f) =>
p.some((pat: string) => globToRegExp(pat).test(f))
);
if (m.length > 0) {
console.log(`\nMatched scope: ${scope} (${m.length} files)`);
}
}
}
console.log(
`\nEnforcing Rules: ${Array.from(requiredRules.keys()).join(", ")}`,
);
const execSumm: { agent: string; status: string; noteRef: string }[] = [];
const fullMut = args["full-mutation"] || args["full-adversary"];
const rulePromises = new Map<string, Promise<void>>();
const execRule = async (rule: string): Promise<void> => {
if (rulePromises.has(rule)) return rulePromises.get(rule)!;
const p = (async () => {
const deps = transitions[rule.split("_")[0]]?.requires || [];
const waitDeps = deps.filter((d: string) => requiredRules.has(d));
if (waitDeps.length > 0) await Promise.all(waitDeps.map(execRule));
const run = RULE_AGENT_RUNNERS[rule];
if (run) {
const res = await runAgt(
rule,
run,
Array.from(requiredRules.get(rule)!),
fullMut,
);
execSumm.push({
agent: rule,
status: res.status,
noteRef: res.noteRef,
});
if (!res.success) throw new Error(`Pipeline halted: ${rule} failed.`);
} else console.warn(`⚠️ No runner for: ${rule}`);
})();
rulePromises.set(rule, p);
return p;
};
try {
await Promise.all(Array.from(requiredRules.keys()).map(execRule));
} catch (err) {
console.error("DAG failed:", err);
Deno.exit(1);
}
// Always run Evaluator at the end to check transitions.json state and DAGs
const evaluatorResult = await runAgt("Evaluator", evaluatePipeline);
execSumm.push({
agent: "Evaluator",
status: evaluatorResult.status,
noteRef: evaluatorResult.noteRef,
});
if (!evaluatorResult.success) {
console.error(`\n❌ Pipeline halted: Evaluator found invalid state.`);
Deno.exit(1);
}
console.log(`\n========================================`);
console.log(`📋 Execution Summary`);
console.log(`========================================`);
console.table(execSumm);
console.log(`========================================\n`);
console.log(`✅ Pipeline completed SUCCESSFULLY.`);
}

View File

@ -1,47 +0,0 @@
import { globToRegExp } from "https://deno.land/std@0.224.0/path/mod.ts";
export function evaluateRequiredRules(
changedFiles: string[],
transitions: any,
isAdversaryForced: boolean,
): Map<string, Set<string>> {
const scopes = transitions.scopes || {};
const requiredRules = new Map<string, Set<string>>();
if (isAdversaryForced) {
requiredRules.set("Adversary_Pass", new Set(changedFiles));
}
if (changedFiles.length > 0) {
for (const [scopeName, scopeDef] of Object.entries(scopes)) {
const patterns: string[] = (scopeDef as any).patterns || [];
const rules: string[] = (scopeDef as any).requires || [];
const matchedFiles = changedFiles.filter((file) => {
return patterns.some((pattern) => {
const regex = globToRegExp(pattern);
return regex.test(file);
});
});
if (matchedFiles.length > 0) {
for (const r of rules) {
if (!requiredRules.has(r)) {
requiredRules.set(r, new Set());
}
matchedFiles.forEach((f) => requiredRules.get(r)!.add(f));
}
}
}
} else {
if (transitions["Coder"] && transitions["Coder"].requires) {
for (const req of transitions["Coder"].requires) {
if (!requiredRules.has(req)) {
requiredRules.set(req, new Set());
}
}
}
}
return requiredRules;
}

View File

@ -1,175 +0,0 @@
/**
* Agent Forum v4 - Traceability & Status Dashboard
* Aggregates custom Git Notes, meta-state branch files, and local artifacts.
*/
async function runCmd(args: string[]): Promise<string> {
const cmd = new Deno.Command("git", {
args,
stdout: "piped",
stderr: "piped",
});
const { code, stdout } = await cmd.output();
if (code !== 0) return "";
return new TextDecoder().decode(stdout).trim();
}
export async function main(args: string[] = Deno.args) {
console.log("==================================================");
console.log(" Agent Forum v4 - Traceability Dashboard ");
console.log("==================================================\n");
// 1. Current Git Context
const branch = await runCmd(["rev-parse", "--abbrev-ref", "HEAD"]);
const commitHash = await runCmd(["rev-parse", "--short", "HEAD"]);
const commitMsg = await runCmd(["log", "-1", "--pretty=%s"]);
console.log(`📌 **Active Context:**`);
console.log(` • Branch: \`${branch}\``);
console.log(` • Latest Commit: \`${commitHash}\` - "${commitMsg}"\n`);
// 2. Scan Custom Git Notes / Evaluations (Showing latest per namespace)
console.log(`📋 **Cryptographic Git Notes & Evaluations:**`);
const noteRefsOutput = await runCmd([
"for-each-ref",
"--format=%(refname)",
"refs/notes/",
]);
const noteRefs = noteRefsOutput.split("\n").filter(Boolean);
let foundNotes = false;
for (const ref of noteRefs) {
const notesList = await runCmd(["notes", `--ref=${ref}`, "list"]);
if (notesList) {
foundNotes = true;
const cleanRef = ref.replace("refs/notes/", "");
const lines = notesList.split("\n").filter(Boolean);
const latestLine = lines[lines.length - 1]; // get the absolute latest
if (latestLine) {
const [_, commitSha] = latestLine.split(/\s+/);
const shortCommit = commitSha ? commitSha.substring(0, 7) : "unknown";
const content = await runCmd([
"notes",
`--ref=${ref}`,
"show",
commitSha,
]);
const snippet = content.split("\n")[0] || "(empty)";
console.log(` • [${cleanRef}] (Commit \`${shortCommit}\`):`);
console.log(
` \`${
snippet.length > 80 ? snippet.substring(0, 77) + "..." : snippet
}\``,
);
}
}
}
if (!foundNotes) {
console.log(` • No active evaluation notes found.`);
}
console.log("");
// 3. Task Backlog & Requirements Traceability (Queried directly from meta-state branch)
console.log(
`🗺️ **Requirements & Task DAG Traceability (meta-state branch):**`,
);
const metaFilesOutput = await runCmd([
"ls-tree",
"-r",
"--name-only",
"meta-state",
]);
if (metaFilesOutput) {
const files = metaFilesOutput.split("\n");
const taskFiles = files.filter((f) => f.startsWith("tasks/"));
const hasOntology = files.includes("ontologies/graph.jsonld");
console.log(
` • Task Backlog DAGs: ${
taskFiles.length > 0
? `✅ Active (${taskFiles.length} task files found on meta-state)`
: "⚠️ None found"
}`,
);
console.log(
` • JSON-LD Ontology Graph: ${
hasOntology ? "✅ Loaded (ontologies/graph.jsonld)" : "⚠️ Not found"
}`,
);
} else {
console.log(` • ⚠️ meta-state orphan branch not found locally.`);
}
console.log("");
// 4. Visual & Local Runtime Artifacts
console.log(`🎨 **Local Runtime & Security Artifacts:**`);
const astDir = ".forum/ast";
try {
let astCount = 0;
for await (const _ of Deno.readDir(astDir)) {
astCount++;
}
console.log(
` • AST Indexes (.forum/ast/): ✅ Available (${astCount} files indexed)`,
);
} catch {
console.log(` • AST Indexes (.forum/ast/): ⚠️ Not generated yet`);
}
const semgrepPath = ".forum/security/semgrep_baseline.json";
try {
const stat = await Deno.stat(semgrepPath);
if (stat.isFile) {
console.log(
` • Semgrep Baseline Scan: ✅ Available (.forum/security/)`,
);
}
} catch {
console.log(` • Semgrep Baseline Scan: ⚠️ Not found`);
}
console.log("");
// 5. Mutation Resilience Panel
console.log(`🛡️ **Mutation Resilience (Stryker):**`);
const mutationOutput = await runCmd([
"log",
`--show-notes=mutation_metrics`,
"--pretty=format:%N",
]);
if (mutationOutput) {
const lines = mutationOutput.split("\n").filter((line) =>
line.trim() !== ""
);
if (lines.length > 0) {
try {
const metrics = JSON.parse(lines[0]);
console.log(` • Overall Score: ${metrics.score}%`);
console.log(
` • Totals: ${metrics.total} Mutants | ${metrics.killed} Killed | ${metrics.survived} Survived | ${metrics.timedOut} Timed-Out`,
);
if (
metrics.fileBreakdown && Object.keys(metrics.fileBreakdown).length > 0
) {
console.log(` • Surviving Breakdown by File:`);
for (
const [file, mutants] of Object.entries<any>(metrics.fileBreakdown)
) {
console.log(` - ${file}: ${mutants.length} surviving mutants`);
}
} else {
console.log(` • Surviving Breakdown by File: 0 surviving mutants!`);
}
} catch (e) {
console.log(` • ⚠️ Failed to parse latest mutation metrics.`);
}
} else {
console.log(` • No mutation metrics found in git history.`);
}
} else {
console.log(` • No mutation metrics found in git history.`);
}
console.log("\n==================================================");
}

20
.gitignore vendored
View File

@ -10,23 +10,3 @@ node_modules/
target/
wasm/sss_recovery/target/
cov_profile/
.backups/
.jules*
# Forum and Tool Artifacts
/events-graph.svg
/index.scip
/reports/
/.stryker-tmp/
# Agent Forum local runtime artifacts & caches
.forum/ast/
.forum/security/
# === AGENT-FORUM MANAGED BLOCK ===
.forum/ast/
.forum/security/
.forum/reports/
.forum/worktree_meta/
# === END AGENT-FORUM MANAGED BLOCK ===

View File

@ -101,18 +101,10 @@ Management (IAM) fabric and WebAuthn Passkey authority.
## 5. AI-Optimized Code Organization & Engineering Principles
1. **Strict 400-Line Ceiling & Concise Functions:**
- Target small, focused functions (4–20 lines) and keep all files bounded
under a **strict 400-line hard ceiling** (aim for the 150–250 line sweet
spot) so agents can read, reason, and edit full units in a single turn
without context fragmentation or output truncation.
- **Subdivide by Sub-Feature, Not Just Type:** When a feature slice grows,
subdivide into focused, SRP-aligned sub-files within the feature directory
(e.g., `login_fragments.tsx`, `register_fragments.tsx`,
`recovery_fragments.tsx` instead of one massive monolithic file).
- **No Anti-Formatting Hacks:** Never compress code onto single lines or use
blind skip annotations to bypass line-count linters. All files must pass
standard `deno fmt` and architectural linters without workarounds.
1. **Bounded Files & Concise Functions:**
- Target small, focused functions (4–20 lines) and keep files bounded (under
300–500 lines) so agents can read, reason, and edit full units in a single
turn without context fragmentation.
2. **Strict Single Responsibility Principle (SRP):**
- Every module must do exactly one thing well. Independent modules allow
agents to isolate and modify code without loading unrelated context.

View File

@ -19,12 +19,11 @@ COPY deno.json deno.lock* deps.ts ./
COPY server/deno.json ./server/
COPY sdk/deno.json ./sdk/
COPY ui/deno.json ./ui/
COPY src/deno.json ./src/
RUN deno cache deps.ts
# Source code layer
COPY . .
RUN deno cache src/main.ts
RUN deno cache server/main.ts
# Stage 3: Runner
FROM denoland/deno:debian-2.9.4
@ -43,5 +42,4 @@ COPY --from=deno-builder --chown=deno:deno /app ./
EXPOSE 8000
# Added --allow-ffi for Deno.dlopen and --allow-read for dlopen path resolution
CMD ["run", "--allow-net", "--allow-env", "--allow-ffi=./libspire_ffi.so", "--allow-read=.,/var/run/spire/agent.sock", "--unstable-ffi", "src/main.ts"]
CMD ["run", "--allow-net", "--allow-env", "--allow-ffi=./libspire_ffi.so", "--allow-read=.,/var/run/spire/agent.sock", "--unstable-ffi", "server/main.ts"]

View File

@ -1,8 +0,0 @@
{
"stryker": {
"ignoreTests": [
"test/integration/"
],
"showProgress": true
}
}

View File

@ -1,40 +0,0 @@
# Agent Forum v4 - Consolidated Master Tracker
This document serves as the single source of truth for all concepts, data
structures, and operational mechanisms defined in the `agent-forum.md`
architectural blueprint. It consolidates the high-level architecture with the
granular implementation constraints previously split across satellite
documentation.
The table below tracks the definition, required implementation details, and
Proof of Concept (PoC) coverage status for every implementable aspect of the
Git-native ecosystem.
| Concept / Structure | Category | Blueprint Ref | Key Implementation Details | PoC File | Gen | Status |
| :------------------------------- | :------------------- | :------------ | :-------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------- | :----- | :----- |
| **Protocol Buffers (Protobuf)** | Data Structure | Section 1 | Serialized binary state and telemetry designed for conversion-less, high-performance data transfer. | `protobuf_poc.ts` | G1, G2 | ✅ |
| **Git Notes** | Embedded Storage | Section 1 | Requires `git log --show-notes="forum/reasoning"` to fetch JSON payloads containing reasoning, risk, and telemetry. | `git_storage_poc.ts` | G1, G2 | ✅ |
| **Orphan Branches** | Embedded Storage | Section 1 | Isolated `forum/meta-state` branch tracking CI/CD, RTMs, and DAGs without sharing main branch commit history. | `orphan_branch_poc.ts` | G1, G2 | ✅ |
| **sqlite-vec & TurboQuant** | Embedded DB | Section 1 | 2-bit to 4-bit LSH/HNSW compression resulting in highly portable indexes typically under 30MB. | `vector_db_poc.ts` | G1, G2 | ✅ |
| **Multi-Vec Isolation** | Embedded DB | Section 1 | Domain-specific SQLite files (e.g., `docs_graph.sqlite` distinct from `telemetry_graph.sqlite`) to prevent semantic bleed. | `multi_vec_poc.ts` | G1, G2 | ✅ |
| **Declarative Frontmatter** | Data Structure | Section 1 & 4 | MUST utilize UUIDv7 (time-ordered) to allow historical sorting and chronological sequence inference directly from the ID. | `frontmatter_poc.ts` | G1, G2 | ✅ |
| **The Project DAG** | Governance Structure | Section 4 | YAML schema explicitly requiring `id`, `blocked_by`, `legacy_slug`, `status`, and `description` fields. | `dag_engine_poc.ts` | G1, G2 | ✅ |
| **Transitions Matrix** | Governance Structure | Section 1 & 2 | JSON mapping in `transitions.json` strictly defining Bounded Model Checking rules (e.g., `"Coder": { "requires": ["Gatekeeper_Approval"] }`). | `state_machine_poc.ts` | G1, G2 | ✅ |
| **The Constitution (AGENTS.md)** | Governance Structure | Section 3 | Target application stack dynamically bound to the repository to statically prevent hallucinated dependencies. | `constitution_poc.ts` | G1, G2 | ✅ |
| **Orchestration Matrix** | Governance Structure | Section 3 | Strict definition of inputs, outputs, and primary directives for the 6 core agents. | `orchestration_matrix_poc.ts` | G1, G2 | ✅ |
| **Execution Flywheel** | Process | Section 5 | Continuous 3-step feedback loop: Analyst updates protocols, Gatekeeper reads constraints, cycle resets. | `execution_flywheel_poc.ts` | G1, G2 | ✅ |
| **Git Merkle DAG Diffing** | Data Structure | Section 2 | Relies on `git ls-tree` and `git diff-tree` hashes for zero-overhead, O(1) context updates. | `merkle_diff_poc.ts` | G1, G2 | ✅ |
| **SCIP Indexes** | Data Structure | Section 2 | Lightweight database mapping code definitions and references, typically extracted via Tree-sitter. | `code_intelligence_poc.ts` | G1, G2 | ✅ |
| **ASTs & CFGs** | Data Structure | Section 2 | JSON/XML mapping of variable execution paths utilized for deterministic security proofs. | `cfg_poc.ts` | G1, G2 | ✅ |
| **Mutation & Adjacency** | Data Structure | Section 2 & 3 | Blast radius and coverage enforcement mappings generated by tools like Stryker and CodeSee. | `mutation_poc.ts` | G1, G2 | ✅ |
| **Static Analysis Payloads** | Data Structure | Section 2 | Standardized JSON/XML metric outputs from industry tools like Semgrep and SonarQube. | `static_analysis_poc.ts` | G1, G2 | ✅ |
| **Tool Sandbox** | Process | Appendix A | Safe local execution environment for CLI/WebAssembly binaries (Tree-sitter, Semgrep) respecting Bounded Model Checking constraints. | `tool_sandbox_poc.ts` | G1, G2 | ✅ |
| **Automated Git Hooks** | Process | Section 2 | Native pre-commit hooks configured to automatically generate SCIP and AST index graphs prior to agent interaction. | `git_hooks_poc.ts` | G1, G2 | ✅ |
| **Ontologies (JSON-LD)** | Data Structure | Section 4 | Embedded `@type: "Requirement"` blocks compiled to a mathematical `ontology.graph` file for deep traceability. | `ontology_poc.ts` | G1, G2 | ✅ |
| **OTel Traces** | Data Structure | Section 4 | Standardized `.trace.json` payloads capturing millisecond-level execution latencies during testing. | `telemetry_poc.ts` | G1, G2 | ✅ |
| **Team Friction Telemetry** | Data Structure | Section 4 | JSON payloads recorded in the meta-state branch tracking MTTR, PR comment-to-code ratios, and idle handoff durations. | `telemetry_poc.ts` | G1, G2 | ✅ |
| **Zero-Token Pre-Filter** | Process | Sec 2 & App A | Takes raw outputs from Semgrep, Stryker, and Madge, filtering them into strict JSON payloads. | `pre_filter_adapters_poc.ts` | G3 | ✅ |
| **Harness Consolidation** | Process | Section 1 | Moving the framework files strictly out of the root path into a hidden/structured directory so compilers and indexers ignore them. | `harness_consolidation_poc.ts` | G3 | ✅ |
| **E2E Orchestration Runner** | Governance Structure | Section 5 | Wiring the Git Notes ledger, Scoped Merkle diff extractor, and state-machine evaluator into a cohesive CLI workflow. | `orchestration_runner_poc.ts` | G3 | ✅ |
| **Doc-to-LoRA** | Dismissed Concept | Section 6 | Rejected because generating megabytes of `.safetensors` adapter weights directly causes extreme Git repository bloat. | `graveyard_poc.ts` | G1, G2 | ❌ |
| **PASTE (Speculative Tooling)** | Dismissed Concept | Section 6 | Rejected because speculative write operations cause irrecoverable race conditions and corrupt the meta-state branch. | `graveyard_poc.ts` | G1, G2 | ❌ |

View File

@ -1,227 +0,0 @@
# **Agent Forum \- v6**
## **Git-Native Agent Collaboration Ecosystem**
This galactic report defines the architectural blueprint for a Git-native,
hyper-efficient AI agent ecosystem. By constraining all state, memory, and
tooling to the local repository, cloud SaaS dependencies are replaced with
embedded data structures (Merkle DAGs, SCIP indexes, local vector graphs, YAML
task DAGs). This creates a zero-latency, cryptographically immutable pipeline
where AI agents interact with structural code physics and semantic ontologies
rather than raw text.
## **1\. The Git-Native Forcing Function & Embedded Storage**
Constraining the state and tooling entirely within the repository format acts as
a brilliant forcing function. It shifts the architecture from a "Cloud-Native"
distributed system to a "Local-First / Git-Native" operating system. Removing
third-party databases preserves project isolation and provides cryptographic
immutability with zero-latency access.
- **Memory Storage (Git Notes & Orphan Branches):**
- **Git Notes (refs/notes/commits):** Arbitrary metadata—such as JSON
transcripts of an AI agent's decision-making process—is attached directly to
a commit without altering the commit hash. The Historian agent can read git
log \--show-notes="ai" to understand why a specific line of code was
written, keeping the working directory clean.
- **The Meta-State Orphan Branch:** Ongoing project state, such as CI/CD
telemetry and Requirements Traceability Matrices (RTM), is tracked in a
parallel orphan branch. Agents commit dynamic state JSONs here, isolated
within the same .git folder but completely separate from the main source
code.
- **Serialization (JSON vs. Protocol Buffers):** While JSON is utilized for
human-readable state tracking, engineering teams should evaluate Protocol
Buffers (Protobuf) for high-performance, conversion-less data transfer
between agents. Protobuf integrates natively with SCIP indexes and works in
tandem with TurboQuant (which compresses the vector math), drastically
reducing I/O latency.\
**Impact:** Eliminates reliance on external databases while maintaining
perfect, version-controlled state isolation.
- **Fuzzy Retrieval via Embedded Vector Search:**
- **sqlite-vec & TurboQuant:** Traditional databases require exact keyword
matches, but Locality-Sensitive Hashing (LSH) and Hierarchical Navigable
Small World (HNSW) algorithms compress high-dimensional concepts into binary
hashes. Using the sqlite-vec extension with 2-bit to 4-bit "TurboQuant"
quantization allows massive semantic knowledge (PRDs, ADRs) to be compressed
into a tiny local file (often under 30MB). Agents can query these
associative memories in milliseconds without network calls.
- **Multi-Vec Isolation:** Rather than dumping all embeddings into a single
vector database, the meta-state branch should consider isolated sqlite-vec
files (e.g., docs\_graph.sqlite and telemetry\_graph.sqlite). This
"Multi-Vec" architecture prevents semantic bleed, ensuring a query about
code performance does not cross-contaminate with team communication logs.\
**Impact:** Reduces context window bloat and eliminates cloud database
latency.
- **Protocols & Governance:**
- **Declarative Frontmatter:** Every Markdown artifact requires YAML
frontmatter containing a unique UUID (Artifact-ID).
- **Bounded Model Checking (BMC):** A local state machine reads a static
.agents/transitions.json file to dictate the execution pipeline. This
ensures strict governance (e.g., "The Coder agent cannot run until the
Gatekeeper agent has signed off").
## **2\. Structured Code Intelligence**
To prevent context window collapse and massive compute costs, agents must not
ingest raw text. Instead, they require a highly efficient I/O pipeline built on
structured code intelligence.
- **Git Merkle DAG Diffing:** Because Git is fundamentally a Merkle Tree, the
system uses zero-overhead diffing (git ls-tree and git diff-tree) to instantly
identify changed file hashes. The AI's knowledge base updates in milliseconds
by walking down the tree to the exact modified file.\
**Impact:** Guarantees O(1) context updates by passing only cryptographic
diffs rather than full file strings.
- **From Syntax to Code Property Graphs (CPGs):**
- **Tree-sitter & SCIP Indexes:** Instead of regex, Tree-sitter incrementally
parses code into a structured Abstract Syntax Tree (AST). A pre-commit hook
then generates a SCIP (Semantic Code Intelligence Protocol) index—a
lightweight database of code symbols providing statically guaranteed "Find
References" and "Go to Definition" capabilities.
- **Control Flow Graphs (CFGs):** Extracted from the AST, CFGs map every
possible path a variable can take. The Adversary agent can feed this JSON
dataset into its prompt to deterministically prove if unsanitized user input
can ever reach a database query.\
**Impact:** Transforms ambiguous text processing into deterministic,
mathematically verifiable graph traversals.
- **Human-Grade Quality Tools:** Agents ingest the JSON/XML outputs of
industry-standard tools:
- **Static Analysis (Semgrep / SonarQube):** Feeds vulnerabilities and code
smells directly to triage agents.
- **Mutation Testing (Stryker / Mutmut):** Injects bugs to test the tests.
Feeding mutation scores to the Adversary agent forces the generation of
edge-case coverage rather than superficial line-coverage.
- **Dependency Graphing (CodeSee / Madge):** Generates adjacency matrices to
calculate the exact "blast radius" of a code change.\
**Impact:** Roots agent decision-making in industry-standard, compiler-grade
telemetry rather than LLM guesswork.
## **3\. Orchestration Matrix & Governance**
The AGENTS.md file serves as the strict, machine-readable constitution. To
ensure agent autonomy, instructions must rely on this repository documentation
rather than micromanaging or spoon-feeding step-by-step logic in individual
system prompts.
| Role | Inputs | Outputs | Primary Directive |
| :------------- | :--------------------------------------- | :--------------------------------------- | :-------------------------------------------------------------------------------- |
| **Gatekeeper** | Ontologies, YAML DAGs | Verification checklists | Bridge human requirements with technical reality. |
| **Historian** | sqlite-vec, Git Notes | Contextual injection | Prevent regression and historical repetition. |
| **Adversary** | SCIP graphs, CFGs, Mutation, OTel Traces | Edge-case tests, mutations, bottlenecks | Expose security flaws, enforce test coverage, and identify execution bottlenecks. |
| **Translator** | SCIP diffs, existing docs | API references, guides | Maintain code-to-documentation parity. |
| **Analyst** | Telemetry, PR threads | Workflow optimizations, Protocol updates | Optimize human-to-agent collaboration. |
| **Evaluator** | transitions.json, DAGs | Pipeline progression | Govern pipeline integrity (R/W access to meta-state). |
### **The Adversary's Expanded Scope**
Traditionally associated solely with security, this agent wears three distinct
hats to comprehensively stress-test the repository:
1. **The Security Auditor:** Feeds on Control Flow Graphs (CFGs) to
deterministically prove if unsanitized user input reaches database queries.
2. **The Quality Engineer:** Consumes mutation scores (from Stryker/Mutmut) to
hunt for edge cases and enforce strict test coverage.
3. **The Performance Engineer:** Ingests OpenTelemetry .trace.json files from
Section 4 to identify real-world execution bottlenecks.
### **Target Application Stack Boundaries**
The operational technology stack is strictly and dynamically defined by the
repository's AGENTS.md (The Constitution). Agents are mathematically bound to
the stack declared in this file. By locking in the stack at the repository
level, agents are statically prevented from hallucinating unauthorized
libraries, frameworks, legacy dependencies, or unapproved languages into the
codebase.
## **4\. Semantic Project Management & Telemetry**
By mapping the syntactic structure of code to the semantic structure of a
project, the system establishes concrete datasets that act as the connective
tissue between code, schedules, and business logic.
- **Replacing Jira (The Project DAG):** Project stories are serialized into the
meta-state branch as strict YAML DAGs (e.g., Task\_44 explicitly declares
blocked\_by: \[Task\_42, Task\_43\]). On every commit, the Evaluator agent
reads the DAG to calculate the critical path, unblocking tasks and preventing
agents from executing code out of order.
- **Replacing DOORS (The Ontology):** Deep traceability is achieved by embedding
JSON-LD (Linked Data) blocks at the top of markdown documents (@type:
"Requirement"). A script compiles these into a single ontology.graph file.
Agents query this graph mathematically to find all components with
relationship edges to specific business requirements.
- **Execution Traces (The Physics):** OpenTelemetry (OTel) traces are generated
during test runs as .trace.json files, capturing millisecond execution
latency. The Adversary agent uses this to understand how the code actually
runs, identifying bottlenecks with precision.
- **Communication Telemetry:** The Analyst consumes specific metrics—Mean Time
to Resolution (MTTR), PR Comment-to-Code Ratio, Idle Handoff Duration,
Artifact Override Frequency, and Thread Friction Markers—serialized as JSON
payloads in the meta-state branch to map team friction.
## **5\. The Execution Pipeline**
The entire system operates as a continuous, structured data flywheel. All
artifacts are embedded into the local database, providing agents with a perfect,
multi-dimensional understanding of the repository.
To visualize this flow, the five core stages of the pipeline map directly to the
artifacts they generate and the specific roles that consume them:
| | Artifact | Generated Data Structure | Primary Consumer Role |
| :------ | :---------------------------- | :----------------------- | :--------------------- |
| **1\.** | **The Code** (Architecture) | SCIP/ASTs | Adversary / Translator |
| **2\.** | **The Tests** (Physics) | OTel Traces | Adversary |
| **3\.** | **The Docs** (Business Logic) | JSON-LD Ontologies | Gatekeeper |
| **4\.** | **The Process** (Schedule) | YAML DAGs | Evaluator |
| **5\.** | **The Team** (Friction) | JSON Telemetry | Analyst |
This pipeline is not a linear checklist; it is a continuous, self-correcting
feedback loop. As demonstrated above, Step 5 (The Team generates Telemetry)
feeds directly back into Step 1 to optimize the next pass:
1. The **Analyst** interprets telemetry to update project protocols.
2. The **Gatekeeper** reads these new protocols to constrain the next cycle.
3. The loop resets, returning to code generation with updated guardrails.
## **6\. Filtered Explorations (Architectural Graveyard)**
During the design phase, several bleeding-edge tools were evaluated but
ultimately altered to respect the strict repo-native constraints.
- **Doc-to-LoRA (D2L) Hypernetworks:** A Perceiver-based latent mapping system
designed to internalize external context by generating LoRA weights in a
single forward pass, eliminating KV-cache overhead.
- _The Verdict:_ While incredibly fast for inference, committing thousands of
.safetensors adapter weights to Git would inevitably bloat the repository.
D2L was swapped out in favor of context-caching via sqlite-vec.
- **PASTE (Pattern-Aware Speculative Tool Execution):** A framework that
predicts tool calls using historical patterns and executes them while the LLM
is still generating to achieve near-zero latency.
- _The Verdict:_ Highly valuable for meta-routing, but its implementation
requires careful tuning to ensure speculative executions do not violate the
local computing and Bounded Model Checking constraints of the repository
graph.
## **Appendix A: Example Toolchain Catalog**
To extract the structured data required by the AI agents, the following external
utilities serve as strong baseline candidates. Engineering teams are explicitly
encouraged to expand or substitute this catalog as new tools emerge or specific
disciplinary datasets are required. While the underlying data structure
requirements are strictly governed, tool choice remains highly flexible—custom
integrations and alternative products are welcome provided they satisfy the
deterministic extraction goals of the pipeline.
- **Syntax & Architecture (SCIP/AST Extraction):** Tree-sitter (Local
WebAssembly binaries for generating Abstract Syntax Trees) and SCIP CLI
(Generates the Semantic Code Intelligence Protocol graphs).
- **Security & Static Analysis:** Semgrep / SonarQube (Compiles vulnerabilities
and code smells into JSON payloads for the Adversary).
- **Quality & Mutation Testing:** Stryker / Mutmut (Injects bugs during the CI
cycle to generate edge-case mutation scores).
- **Physics & Telemetry:** OpenTelemetry / OTel (Extracts millisecond execution
latency into .trace.json files).
- **Dependency & Blast Radius:** CodeSee / Madge (Generates adjacency matrices
to map downstream impact of code changes).
- **Data Storage & Retrieval:** sqlite-vec (Embedded SQLite extensions handling
local vector indexing and TurboQuant compression).

View File

@ -1,7 +0,0 @@
(program [0, 0] - [186, 0]
(export_statement [0, 0] - [185, 2]
declaration: (lexical_declaration [0, 7] - [185, 2]
(variable_declarator [0, 13] - [185, 1]
name: (identifier [0, 13] - [0, 23])
value: (template_string [0, 26] - [185, 1]
(string_fragment [0, 27] - [185, 0]))))))

View File

@ -1,415 +0,0 @@
(program [0, 0] - [123, 0]
(import_statement [0, 0] - [0, 68]
(import_clause [0, 7] - [0, 30]
(named_imports [0, 7] - [0, 30]
(import_specifier [0, 9] - [0, 28]
name: (identifier [0, 9] - [0, 28]))))
source: (string [0, 36] - [0, 67]
(string_fragment [0, 37] - [0, 66])))
(export_statement [2, 0] - [122, 2]
declaration: (lexical_declaration [2, 7] - [122, 2]
(variable_declarator [2, 13] - [122, 1]
name: (identifier [2, 13] - [2, 31])
value: (arrow_function [2, 34] - [122, 1]
parameters: (formal_parameters [2, 34] - [6, 2]
(required_parameter [2, 35] - [6, 1]
pattern: (object_pattern [2, 35] - [4, 1]
(object_assignment_pattern [3, 2] - [3, 16]
left: (shorthand_property_identifier_pattern [3, 2] - [3, 11])
right: (array [3, 14] - [3, 16])))
type: (type_annotation [4, 1] - [6, 1]
(object_type [4, 3] - [6, 1]
(property_signature [5, 2] - [5, 19]
name: (property_identifier [5, 2] - [5, 11])
type: (type_annotation [5, 12] - [5, 19]
(array_type [5, 14] - [5, 19]
(predefined_type [5, 14] - [5, 17]))))))))
body: (statement_block [6, 6] - [122, 1]
(return_statement [7, 2] - [121, 4]
(parenthesized_expression [7, 9] - [121, 3]
(jsx_element [8, 4] - [120, 26]
open_tag: (jsx_opening_element [8, 4] - [11, 5]
name: (identifier [8, 5] - [8, 24])
attribute: (jsx_attribute [9, 6] - [9, 31]
(property_identifier [9, 6] - [9, 11])
(string [9, 12] - [9, 31]
(string_fragment [9, 13] - [9, 30])))
attribute: (jsx_attribute [10, 6] - [10, 33]
(property_identifier [10, 6] - [10, 17])
(string [10, 18] - [10, 33]
(string_fragment [10, 19] - [10, 32]))))
(jsx_element [12, 6] - [20, 12]
open_tag: (jsx_opening_element [12, 6] - [12, 42]
name: (identifier [12, 7] - [12, 10])
attribute: (jsx_attribute [12, 11] - [12, 41]
(property_identifier [12, 11] - [12, 16])
(string [12, 17] - [12, 41]
(string_fragment [12, 18] - [12, 40]))))
(jsx_element [13, 8] - [15, 13]
open_tag: (jsx_opening_element [13, 8] - [13, 108]
name: (identifier [13, 9] - [13, 11])
attribute: (jsx_attribute [13, 12] - [13, 107]
(property_identifier [13, 12] - [13, 17])
(string [13, 18] - [13, 107]
(string_fragment [13, 19] - [13, 106]))))
(jsx_text [13, 108] - [15, 8])
close_tag: (jsx_closing_element [15, 8] - [15, 13]
name: (identifier [15, 10] - [15, 12])))
(jsx_element [16, 8] - [19, 12]
open_tag: (jsx_opening_element [16, 8] - [16, 80]
name: (identifier [16, 9] - [16, 10])
attribute: (jsx_attribute [16, 11] - [16, 79]
(property_identifier [16, 11] - [16, 16])
(string [16, 17] - [16, 79]
(string_fragment [16, 18] - [16, 78]))))
(jsx_text [16, 80] - [19, 8])
close_tag: (jsx_closing_element [19, 8] - [19, 12]
name: (identifier [19, 10] - [19, 11])))
close_tag: (jsx_closing_element [20, 6] - [20, 12]
name: (identifier [20, 8] - [20, 11])))
(jsx_element [22, 6] - [64, 12]
open_tag: (jsx_opening_element [22, 6] - [22, 55]
name: (identifier [22, 7] - [22, 10])
attribute: (jsx_attribute [22, 11] - [22, 23]
(property_identifier [22, 11] - [22, 16])
(string [22, 17] - [22, 23]
(string_fragment [22, 18] - [22, 22])))
attribute: (jsx_attribute [22, 24] - [22, 54]
(property_identifier [22, 24] - [22, 29])
(string [22, 30] - [22, 54]
(string_fragment [22, 31] - [22, 53]))))
(jsx_element [23, 8] - [25, 13]
open_tag: (jsx_opening_element [23, 8] - [23, 68]
name: (identifier [23, 9] - [23, 11])
attribute: (jsx_attribute [23, 12] - [23, 67]
(property_identifier [23, 12] - [23, 17])
(string [23, 18] - [23, 67]
(string_fragment [23, 19] - [23, 66]))))
(jsx_text [23, 68] - [25, 8])
close_tag: (jsx_closing_element [25, 8] - [25, 13]
name: (identifier [25, 10] - [25, 12])))
(jsx_element [26, 8] - [63, 15]
open_tag: (jsx_opening_element [26, 8] - [30, 9]
name: (identifier [26, 9] - [26, 13])
attribute: (jsx_attribute [27, 10] - [27, 30]
(property_identifier [27, 10] - [27, 12])
(string [27, 13] - [27, 30]
(string_fragment [27, 14] - [27, 29])))
attribute: (jsx_attribute [28, 10] - [28, 43]
(property_identifier [28, 10] - [28, 18])
(string [28, 19] - [28, 43]
(string_fragment [28, 20] - [28, 42])))
attribute: (jsx_attribute [29, 10] - [29, 83]
(property_identifier [29, 10] - [29, 15])
(string [29, 16] - [29, 83]
(string_fragment [29, 17] - [29, 82]))))
(jsx_element [31, 10] - [42, 16]
open_tag: (jsx_opening_element [31, 10] - [31, 50]
name: (identifier [31, 11] - [31, 14])
attribute: (jsx_attribute [31, 15] - [31, 49]
(property_identifier [31, 15] - [31, 20])
(string [31, 21] - [31, 49]
(string_fragment [31, 22] - [31, 48]))))
(jsx_element [32, 12] - [34, 20]
open_tag: (jsx_opening_element [32, 12] - [32, 135]
name: (identifier [32, 13] - [32, 18])
attribute: (jsx_attribute [32, 19] - [32, 134]
(property_identifier [32, 19] - [32, 24])
(string [32, 25] - [32, 134]
(string_fragment [32, 26] - [32, 133]))))
(jsx_text [32, 135] - [34, 12])
close_tag: (jsx_closing_element [34, 12] - [34, 20]
name: (identifier [34, 14] - [34, 19])))
(jsx_self_closing_element [35, 12] - [41, 14]
name: (identifier [35, 13] - [35, 18])
attribute: (jsx_attribute [36, 14] - [36, 25]
(property_identifier [36, 14] - [36, 18])
(string [36, 19] - [36, 25]
(string_fragment [36, 20] - [36, 24])))
attribute: (jsx_attribute [37, 14] - [37, 30]
(property_identifier [37, 14] - [37, 16])
(string [37, 17] - [37, 30]
(string_fragment [37, 18] - [37, 29])))
attribute: (jsx_attribute [38, 14] - [38, 64]
(property_identifier [38, 14] - [38, 25])
(string [38, 26] - [38, 64]
(string_fragment [38, 27] - [38, 63])))
attribute: (jsx_attribute [39, 14] - [39, 22]
(property_identifier [39, 14] - [39, 22]))
attribute: (jsx_attribute [40, 14] - [40, 58]
(property_identifier [40, 14] - [40, 19])
(string [40, 20] - [40, 58]
(string_fragment [40, 21] - [40, 57]))))
close_tag: (jsx_closing_element [42, 10] - [42, 16]
name: (identifier [42, 12] - [42, 15])))
(jsx_element [43, 10] - [53, 16]
open_tag: (jsx_opening_element [43, 10] - [43, 50]
name: (identifier [43, 11] - [43, 14])
attribute: (jsx_attribute [43, 15] - [43, 49]
(property_identifier [43, 15] - [43, 20])
(string [43, 21] - [43, 49]
(string_fragment [43, 22] - [43, 48]))))
(jsx_element [44, 12] - [46, 20]
open_tag: (jsx_opening_element [44, 12] - [44, 135]
name: (identifier [44, 13] - [44, 18])
attribute: (jsx_attribute [44, 19] - [44, 134]
(property_identifier [44, 19] - [44, 24])
(string [44, 25] - [44, 134]
(string_fragment [44, 26] - [44, 133]))))
(jsx_text [44, 135] - [46, 12])
close_tag: (jsx_closing_element [46, 12] - [46, 20]
name: (identifier [46, 14] - [46, 19])))
(jsx_self_closing_element [47, 12] - [52, 14]
name: (identifier [47, 13] - [47, 18])
attribute: (jsx_attribute [48, 14] - [48, 25]
(property_identifier [48, 14] - [48, 18])
(string [48, 19] - [48, 25]
(string_fragment [48, 20] - [48, 24])))
attribute: (jsx_attribute [49, 14] - [49, 34]
(property_identifier [49, 14] - [49, 16])
(string [49, 17] - [49, 34]
(string_fragment [49, 18] - [49, 33])))
attribute: (jsx_attribute [50, 14] - [50, 56]
(property_identifier [50, 14] - [50, 25])
(string [50, 26] - [50, 56]
(string_fragment [50, 27] - [50, 55])))
attribute: (jsx_attribute [51, 14] - [51, 34]
(property_identifier [51, 14] - [51, 19])
(string [51, 20] - [51, 34]
(string_fragment [51, 21] - [51, 33]))))
close_tag: (jsx_closing_element [53, 10] - [53, 16]
name: (identifier [53, 12] - [53, 15])))
(jsx_element [54, 10] - [62, 16]
open_tag: (jsx_opening_element [54, 10] - [54, 15]
name: (identifier [54, 11] - [54, 14]))
(jsx_element [55, 12] - [61, 21]
open_tag: (jsx_opening_element [55, 12] - [59, 13]
name: (identifier [55, 13] - [55, 19])
attribute: (jsx_attribute [56, 14] - [56, 27]
(property_identifier [56, 14] - [56, 18])
(string [56, 19] - [56, 27]
(string_fragment [56, 20] - [56, 26])))
attribute: (jsx_attribute [57, 14] - [57, 33]
(property_identifier [57, 14] - [57, 19])
(string [57, 20] - [57, 33]
(string_fragment [57, 21] - [57, 32])))
attribute: (jsx_attribute [58, 14] - [58, 39]
(property_identifier [58, 14] - [58, 19])
(string [58, 20] - [58, 39]
(string_fragment [58, 21] - [58, 38]))))
(jsx_text [59, 13] - [61, 12])
close_tag: (jsx_closing_element [61, 12] - [61, 21]
name: (identifier [61, 14] - [61, 20])))
close_tag: (jsx_closing_element [62, 10] - [62, 16]
name: (identifier [62, 12] - [62, 15])))
close_tag: (jsx_closing_element [63, 8] - [63, 15]
name: (identifier [63, 10] - [63, 14])))
close_tag: (jsx_closing_element [64, 6] - [64, 12]
name: (identifier [64, 8] - [64, 11])))
(jsx_element [66, 6] - [118, 12]
open_tag: (jsx_opening_element [66, 6] - [66, 24]
name: (identifier [66, 7] - [66, 10])
attribute: (jsx_attribute [66, 11] - [66, 23]
(property_identifier [66, 11] - [66, 16])
(string [66, 17] - [66, 23]
(string_fragment [66, 18] - [66, 22]))))
(jsx_element [67, 8] - [117, 14]
open_tag: (jsx_opening_element [67, 8] - [67, 37]
name: (identifier [67, 9] - [67, 12])
attribute: (jsx_attribute [67, 13] - [67, 36]
(property_identifier [67, 13] - [67, 18])
(string [67, 19] - [67, 36]
(string_fragment [67, 20] - [67, 35]))))
(jsx_element [68, 10] - [116, 18]
open_tag: (jsx_opening_element [68, 10] - [68, 17]
name: (identifier [68, 11] - [68, 16]))
(jsx_element [69, 12] - [76, 20]
open_tag: (jsx_opening_element [69, 12] - [69, 19]
name: (identifier [69, 13] - [69, 18]))
(jsx_element [70, 14] - [75, 19]
open_tag: (jsx_opening_element [70, 14] - [70, 18]
name: (identifier [70, 15] - [70, 17]))
(jsx_element [71, 16] - [71, 31]
open_tag: (jsx_opening_element [71, 16] - [71, 20]
name: (identifier [71, 17] - [71, 19]))
(jsx_text [71, 20] - [71, 26])
close_tag: (jsx_closing_element [71, 26] - [71, 31]
name: (identifier [71, 28] - [71, 30])))
(jsx_element [72, 16] - [72, 36]
open_tag: (jsx_opening_element [72, 16] - [72, 20]
name: (identifier [72, 17] - [72, 19]))
(jsx_text [72, 20] - [72, 31])
close_tag: (jsx_closing_element [72, 31] - [72, 36]
name: (identifier [72, 33] - [72, 35])))
(jsx_element [73, 16] - [73, 33]
open_tag: (jsx_opening_element [73, 16] - [73, 20]
name: (identifier [73, 17] - [73, 19]))
(jsx_text [73, 20] - [73, 28])
close_tag: (jsx_closing_element [73, 28] - [73, 33]
name: (identifier [73, 30] - [73, 32])))
(jsx_element [74, 16] - [74, 32]
open_tag: (jsx_opening_element [74, 16] - [74, 20]
name: (identifier [74, 17] - [74, 19]))
(jsx_text [74, 20] - [74, 27])
close_tag: (jsx_closing_element [74, 27] - [74, 32]
name: (identifier [74, 29] - [74, 31])))
close_tag: (jsx_closing_element [75, 14] - [75, 19]
name: (identifier [75, 16] - [75, 18])))
close_tag: (jsx_closing_element [76, 12] - [76, 20]
name: (identifier [76, 14] - [76, 19])))
(jsx_element [77, 12] - [115, 20]
open_tag: (jsx_opening_element [77, 12] - [77, 19]
name: (identifier [77, 13] - [77, 18]))
(jsx_expression [78, 14] - [114, 18]
(ternary_expression [78, 15] - [114, 17]
condition: (binary_expression [78, 15] - [78, 37]
left: (member_expression [78, 15] - [78, 31]
object: (identifier [78, 15] - [78, 24])
property: (property_identifier [78, 25] - [78, 31]))
right: (number [78, 36] - [78, 37]))
consequence: (parenthesized_expression [79, 18] - [89, 17]
(jsx_element [80, 18] - [88, 23]
open_tag: (jsx_opening_element [80, 18] - [80, 22]
name: (identifier [80, 19] - [80, 21]))
(jsx_element [81, 20] - [87, 25]
open_tag: (jsx_opening_element [81, 20] - [84, 21]
name: (identifier [81, 21] - [81, 23])
attribute: (jsx_attribute [82, 22] - [82, 33]
(property_identifier [82, 22] - [82, 29])
(jsx_expression [82, 30] - [82, 33]
(number [82, 31] - [82, 32])))
attribute: (jsx_attribute [83, 22] - [83, 90]
(property_identifier [83, 22] - [83, 27])
(string [83, 28] - [83, 90]
(string_fragment [83, 29] - [83, 89]))))
(jsx_text [84, 21] - [87, 20])
close_tag: (jsx_closing_element [87, 20] - [87, 25]
name: (identifier [87, 22] - [87, 24])))
close_tag: (jsx_closing_element [88, 18] - [88, 23]
name: (identifier [88, 20] - [88, 22]))))
alternative: (parenthesized_expression [90, 18] - [114, 17]
(call_expression [91, 18] - [113, 20]
function: (member_expression [91, 18] - [91, 31]
object: (identifier [91, 18] - [91, 27])
property: (property_identifier [91, 28] - [91, 31]))
arguments: (arguments [91, 31] - [113, 20]
(arrow_function [91, 32] - [113, 19]
parameters: (formal_parameters [91, 32] - [91, 43]
(required_parameter [91, 33] - [91, 42]
pattern: (identifier [91, 33] - [91, 37])
type: (type_annotation [91, 37] - [91, 42]
(predefined_type [91, 39] - [91, 42]))))
body: (parenthesized_expression [91, 47] - [113, 19]
(jsx_element [92, 20] - [112, 25]
open_tag: (jsx_opening_element [92, 20] - [92, 38]
name: (identifier [92, 21] - [92, 23])
attribute: (jsx_attribute [92, 24] - [92, 37]
(property_identifier [92, 24] - [92, 27])
(jsx_expression [92, 28] - [92, 37]
(member_expression [92, 29] - [92, 36]
object: (identifier [92, 29] - [92, 33])
property: (property_identifier [92, 34] - [92, 36])))))
(jsx_element [93, 22] - [97, 27]
open_tag: (jsx_opening_element [93, 22] - [93, 26]
name: (identifier [93, 23] - [93, 25]))
(jsx_element [94, 24] - [96, 31]
open_tag: (jsx_opening_element [94, 24] - [94, 154]
name: (identifier [94, 25] - [94, 29])
attribute: (jsx_attribute [94, 30] - [94, 153]
(property_identifier [94, 30] - [94, 35])
(string [94, 36] - [94, 153]
(string_fragment [94, 37] - [94, 152]))))
(jsx_expression [95, 26] - [95, 39]
(member_expression [95, 27] - [95, 38]
object: (identifier [95, 27] - [95, 31])
property: (property_identifier [95, 32] - [95, 38])))
close_tag: (jsx_closing_element [96, 24] - [96, 31]
name: (identifier [96, 26] - [96, 30])))
close_tag: (jsx_closing_element [97, 22] - [97, 27]
name: (identifier [97, 24] - [97, 26])))
(jsx_element [98, 22] - [98, 56]
open_tag: (jsx_opening_element [98, 22] - [98, 26]
name: (identifier [98, 23] - [98, 25]))
(jsx_expression [98, 26] - [98, 51]
(binary_expression [98, 27] - [98, 50]
left: (member_expression [98, 27] - [98, 43]
object: (identifier [98, 27] - [98, 31])
property: (property_identifier [98, 32] - [98, 43]))
right: (string [98, 47] - [98, 50]
(string_fragment [98, 48] - [98, 49]))))
close_tag: (jsx_closing_element [98, 51] - [98, 56]
name: (identifier [98, 53] - [98, 55])))
(jsx_element [99, 22] - [101, 27]
open_tag: (jsx_opening_element [99, 22] - [99, 84]
name: (identifier [99, 23] - [99, 25])
attribute: (jsx_attribute [99, 26] - [99, 83]
(property_identifier [99, 26] - [99, 31])
(string [99, 32] - [99, 83]
(string_fragment [99, 33] - [99, 82]))))
(jsx_expression [100, 24] - [100, 72]
(call_expression [100, 25] - [100, 71]
function: (member_expression [100, 25] - [100, 69]
object: (new_expression [100, 25] - [100, 50]
constructor: (identifier [100, 29] - [100, 33])
arguments: (arguments [100, 33] - [100, 50]
(member_expression [100, 34] - [100, 49]
object: (identifier [100, 34] - [100, 38])
property: (property_identifier [100, 39] - [100, 49]))))
property: (property_identifier [100, 51] - [100, 69]))
arguments: (arguments [100, 69] - [100, 71])))
close_tag: (jsx_closing_element [101, 22] - [101, 27]
name: (identifier [101, 24] - [101, 26])))
(jsx_element [102, 22] - [111, 27]
open_tag: (jsx_opening_element [102, 22] - [102, 26]
name: (identifier [102, 23] - [102, 25]))
(jsx_element [103, 24] - [110, 33]
open_tag: (jsx_opening_element [103, 24] - [108, 25]
name: (identifier [103, 25] - [103, 31])
attribute: (jsx_attribute [104, 26] - [104, 39]
(property_identifier [104, 26] - [104, 30])
(string [104, 31] - [104, 39]
(string_fragment [104, 32] - [104, 38])))
attribute: (jsx_attribute [105, 26] - [105, 44]
(property_identifier [105, 26] - [105, 31])
(string [105, 32] - [105, 44]
(string_fragment [105, 33] - [105, 43])))
attribute: (jsx_attribute [106, 26] - [106, 96]
(property_identifier [106, 26] - [106, 31])
(string [106, 32] - [106, 96]
(string_fragment [106, 33] - [106, 95])))
attribute: (jsx_attribute [107, 26] - [107, 64]
(property_identifier [107, 26] - [107, 33])
(jsx_expression [107, 34] - [107, 64]
(template_string [107, 35] - [107, 63]
(string_fragment [107, 36] - [107, 50])
(template_substitution [107, 50] - [107, 60]
(member_expression [107, 52] - [107, 59]
object: (identifier [107, 52] - [107, 56])
property: (property_identifier [107, 57] - [107, 59])))
(string_fragment [107, 60] - [107, 62])))))
(jsx_text [108, 25] - [110, 24])
close_tag: (jsx_closing_element [110, 24] - [110, 33]
name: (identifier [110, 26] - [110, 32])))
close_tag: (jsx_closing_element [111, 22] - [111, 27]
name: (identifier [111, 24] - [111, 26])))
close_tag: (jsx_closing_element [112, 20] - [112, 25]
name: (identifier [112, 22] - [112, 24]))))))))))
close_tag: (jsx_closing_element [115, 12] - [115, 20]
name: (identifier [115, 14] - [115, 19])))
close_tag: (jsx_closing_element [116, 10] - [116, 18]
name: (identifier [116, 12] - [116, 17])))
close_tag: (jsx_closing_element [117, 8] - [117, 14]
name: (identifier [117, 10] - [117, 13])))
close_tag: (jsx_closing_element [118, 6] - [118, 12]
name: (identifier [118, 8] - [118, 11])))
(jsx_element [119, 6] - [119, 54]
open_tag: (jsx_opening_element [119, 6] - [119, 45]
name: (identifier [119, 7] - [119, 13])
attribute: (jsx_attribute [119, 14] - [119, 44]
(property_identifier [119, 14] - [119, 17])
(string [119, 18] - [119, 44]
(string_fragment [119, 19] - [119, 43]))))
close_tag: (jsx_closing_element [119, 45] - [119, 54]
name: (identifier [119, 47] - [119, 53])))
close_tag: (jsx_closing_element [120, 4] - [120, 26]
name: (identifier [120, 6] - [120, 25])))))))))))

File diff suppressed because it is too large Load Diff

View File

@ -1,840 +0,0 @@
(program [0, 0] - [178, 0]
(import_statement [0, 0] - [0, 44]
(import_clause [0, 7] - [0, 15]
(named_imports [0, 7] - [0, 15]
(import_specifier [0, 9] - [0, 13]
name: (identifier [0, 9] - [0, 13]))))
source: (string [0, 21] - [0, 43]
(string_fragment [0, 22] - [0, 42])))
(import_statement [1, 0] - [1, 41]
(import_clause [1, 7] - [1, 17]
(named_imports [1, 7] - [1, 17]
(import_specifier [1, 9] - [1, 15]
name: (identifier [1, 9] - [1, 15]))))
source: (string [1, 23] - [1, 40]
(string_fragment [1, 24] - [1, 39])))
(import_statement [2, 0] - [2, 40]
(import_clause [2, 7] - [2, 15]
(named_imports [2, 7] - [2, 15]
(import_specifier [2, 9] - [2, 13]
name: (identifier [2, 9] - [2, 13]))))
source: (string [2, 21] - [2, 39]
(string_fragment [2, 22] - [2, 38])))
(import_statement [3, 0] - [3, 43]
(import_clause [3, 7] - [3, 22]
(named_imports [3, 7] - [3, 22]
(import_specifier [3, 9] - [3, 20]
name: (identifier [3, 9] - [3, 20]))))
source: (string [3, 28] - [3, 42]
(string_fragment [3, 29] - [3, 41])))
(import_statement [4, 0] - [9, 25]
(import_clause [4, 7] - [9, 1]
(named_imports [4, 7] - [9, 1]
(import_specifier [5, 2] - [5, 23]
name: (identifier [5, 2] - [5, 23]))
(import_specifier [6, 2] - [6, 30]
name: (identifier [6, 2] - [6, 30]))
(import_specifier [7, 2] - [7, 24]
name: (identifier [7, 2] - [7, 24]))
(import_specifier [8, 2] - [8, 22]
name: (identifier [8, 2] - [8, 22]))))
source: (string [9, 7] - [9, 24]
(string_fragment [9, 8] - [9, 23])))
(import_statement [10, 0] - [10, 63]
(import_clause [10, 7] - [10, 33]
(named_imports [10, 7] - [10, 33]
(import_specifier [10, 9] - [10, 31]
name: (identifier [10, 9] - [10, 31]))))
source: (string [10, 39] - [10, 62]
(string_fragment [10, 40] - [10, 61])))
(import_statement [11, 0] - [11, 67]
(import_clause [11, 7] - [11, 35]
(named_imports [11, 7] - [11, 35]
(import_specifier [11, 9] - [11, 33]
name: (identifier [11, 9] - [11, 33]))))
source: (string [11, 41] - [11, 66]
(string_fragment [11, 42] - [11, 65])))
(import_statement [12, 0] - [12, 60]
(import_clause [12, 7] - [12, 29]
(named_imports [12, 7] - [12, 29]
(import_specifier [12, 9] - [12, 27]
name: (identifier [12, 9] - [12, 27]))))
source: (string [12, 35] - [12, 59]
(string_fragment [12, 36] - [12, 58])))
(import_statement [13, 0] - [13, 46]
(import_clause [13, 7] - [13, 21]
(named_imports [13, 7] - [13, 21]
(import_specifier [13, 9] - [13, 19]
name: (identifier [13, 9] - [13, 19]))))
source: (string [13, 27] - [13, 45]
(string_fragment [13, 28] - [13, 44])))
(import_statement [14, 0] - [14, 60]
(import_clause [14, 7] - [14, 27]
(named_imports [14, 7] - [14, 27]
(import_specifier [14, 9] - [14, 25]
name: (identifier [14, 9] - [14, 25]))))
source: (string [14, 33] - [14, 59]
(string_fragment [14, 34] - [14, 58])))
(expression_statement [16, 0] - [23, 3]
(call_expression [16, 0] - [23, 2]
function: (identifier [16, 0] - [16, 4])
arguments: (arguments [16, 4] - [23, 2]
(string [16, 5] - [16, 64]
(string_fragment [16, 6] - [16, 63]))
(arrow_function [16, 66] - [23, 1]
parameters: (formal_parameters [16, 72] - [16, 74])
body: (statement_block [16, 78] - [23, 1]
(lexical_declaration [17, 2] - [17, 25]
(variable_declarator [17, 8] - [17, 24]
name: (identifier [17, 8] - [17, 11])
value: (new_expression [17, 14] - [17, 24]
constructor: (identifier [17, 18] - [17, 22])
arguments: (arguments [17, 22] - [17, 24]))))
(expression_statement [18, 2] - [18, 35]
(call_expression [18, 2] - [18, 34]
function: (member_expression [18, 2] - [18, 11]
object: (identifier [18, 2] - [18, 5])
property: (property_identifier [18, 6] - [18, 11]))
arguments: (arguments [18, 11] - [18, 34]
(string [18, 12] - [18, 20]
(string_fragment [18, 13] - [18, 19]))
(identifier [18, 22] - [18, 33]))))
(lexical_declaration [20, 2] - [20, 48]
(variable_declarator [20, 8] - [20, 47]
name: (identifier [20, 8] - [20, 11])
value: (await_expression [20, 14] - [20, 47]
(call_expression [20, 20] - [20, 47]
function: (member_expression [20, 20] - [20, 31]
object: (identifier [20, 20] - [20, 23])
property: (property_identifier [20, 24] - [20, 31]))
arguments: (arguments [20, 31] - [20, 47]
(string [20, 32] - [20, 46]
(string_fragment [20, 33] - [20, 45])))))))
(expression_statement [21, 2] - [21, 35]
(call_expression [21, 2] - [21, 34]
function: (member_expression [21, 2] - [21, 29]
object: (member_expression [21, 2] - [21, 24]
object: (call_expression [21, 2] - [21, 20]
function: (identifier [21, 2] - [21, 8])
arguments: (arguments [21, 8] - [21, 20]
(member_expression [21, 9] - [21, 19]
object: (identifier [21, 9] - [21, 12])
property: (property_identifier [21, 13] - [21, 19]))))
property: (property_identifier [21, 21] - [21, 24]))
property: (property_identifier [21, 25] - [21, 29]))
arguments: (arguments [21, 29] - [21, 34]
(number [21, 30] - [21, 33]))))
(expression_statement [22, 2] - [22, 35]
(call_expression [22, 2] - [22, 34]
function: (member_expression [22, 2] - [22, 29]
object: (member_expression [22, 2] - [22, 24]
object: (call_expression [22, 2] - [22, 20]
function: (identifier [22, 2] - [22, 8])
arguments: (arguments [22, 8] - [22, 20]
(member_expression [22, 9] - [22, 19]
object: (identifier [22, 9] - [22, 12])
property: (property_identifier [22, 13] - [22, 19]))))
property: (property_identifier [22, 21] - [22, 24]))
property: (property_identifier [22, 25] - [22, 29]))
arguments: (arguments [22, 29] - [22, 34]
(number [22, 30] - [22, 33])))))))))
(expression_statement [25, 0] - [79, 3]
(call_expression [25, 0] - [79, 2]
function: (identifier [25, 0] - [25, 4])
arguments: (arguments [25, 4] - [79, 2]
(string [25, 5] - [25, 50]
(string_fragment [25, 6] - [25, 49]))
(arrow_function [25, 52] - [79, 1]
parameters: (formal_parameters [25, 58] - [25, 60])
body: (statement_block [25, 64] - [79, 1]
(lexical_declaration [26, 2] - [26, 33]
(variable_declarator [26, 8] - [26, 32]
name: (identifier [26, 8] - [26, 15])
value: (member_expression [26, 18] - [26, 32]
object: (identifier [26, 18] - [26, 28])
property: (property_identifier [26, 29] - [26, 32]))))
(lexical_declaration [27, 2] - [27, 56]
(variable_declarator [27, 8] - [27, 55]
name: (identifier [27, 8] - [27, 21])
value: (member_expression [27, 24] - [27, 55]
object: (identifier [27, 24] - [27, 40])
property: (property_identifier [27, 41] - [27, 55]))))
(try_statement [29, 2] - [78, 3]
body: (statement_block [29, 6] - [75, 3]
(expression_statement [30, 4] - [30, 66]
(assignment_expression [30, 4] - [30, 65]
left: (member_expression [30, 4] - [30, 35]
object: (identifier [30, 4] - [30, 20])
property: (property_identifier [30, 21] - [30, 35]))
right: (arrow_function [30, 38] - [30, 65]
parameters: (formal_parameters [30, 38] - [30, 40])
body: (call_expression [30, 44] - [30, 65]
function: (member_expression [30, 44] - [30, 59]
object: (identifier [30, 44] - [30, 51])
property: (property_identifier [30, 52] - [30, 59]))
arguments: (arguments [30, 59] - [30, 65]
(true [30, 60] - [30, 64]))))))
(lexical_declaration [32, 4] - [37, 6]
(variable_declarator [32, 10] - [37, 5]
name: (identifier [32, 10] - [32, 23])
value: (object [32, 26] - [37, 5]
(pair [33, 6] - [33, 21]
key: (property_identifier [33, 6] - [33, 8])
value: (string [33, 10] - [33, 21]
(string_fragment [33, 11] - [33, 20])))
(pair [34, 6] - [34, 28]
key: (property_identifier [34, 6] - [34, 14])
value: (string [34, 16] - [34, 28]
(string_fragment [34, 17] - [34, 27])))
(pair [35, 6] - [35, 33]
key: (property_identifier [35, 6] - [35, 18])
value: (string [35, 20] - [35, 33]
(string_fragment [35, 21] - [35, 32])))
(pair [36, 6] - [36, 30]
key: (property_identifier [36, 6] - [36, 20])
value: (string [36, 22] - [36, 30]
(string_fragment [36, 23] - [36, 29]))))))
(expression_statement [39, 4] - [59, 14]
(assignment_expression [39, 4] - [59, 13]
left: (member_expression [39, 4] - [39, 18]
object: (identifier [39, 4] - [39, 14])
property: (property_identifier [39, 15] - [39, 18]))
right: (as_expression [39, 21] - [59, 13]
(parenthesized_expression [39, 21] - [59, 6]
(arrow_function [39, 22] - [59, 5]
parameters: (formal_parameters [39, 22] - [39, 55]
(required_parameter [39, 23] - [39, 35]
pattern: (identifier [39, 23] - [39, 30])
type: (type_annotation [39, 30] - [39, 35]
(predefined_type [39, 32] - [39, 35])))
(required_parameter [39, 37] - [39, 54]
pattern: (rest_pattern [39, 37] - [39, 47]
(identifier [39, 40] - [39, 47]))
type: (type_annotation [39, 47] - [39, 54]
(array_type [39, 49] - [39, 54]
(predefined_type [39, 49] - [39, 52])))))
body: (statement_block [39, 59] - [59, 5]
(lexical_declaration [40, 6] - [40, 38]
(variable_declarator [40, 12] - [40, 37]
name: (identifier [40, 12] - [40, 17])
value: (call_expression [40, 20] - [40, 37]
function: (member_expression [40, 20] - [40, 32]
object: (identifier [40, 20] - [40, 27])
property: (property_identifier [40, 28] - [40, 32]))
arguments: (arguments [40, 32] - [40, 37]
(string [40, 33] - [40, 36]
(string_fragment [40, 34] - [40, 35]))))))
(if_statement [41, 6] - [51, 7]
condition: (parenthesized_expression [41, 9] - [41, 44]
(call_expression [41, 10] - [41, 43]
function: (member_expression [41, 10] - [41, 24]
object: (identifier [41, 10] - [41, 15])
property: (property_identifier [41, 16] - [41, 24]))
arguments: (arguments [41, 24] - [41, 43]
(string [41, 25] - [41, 42]
(string_fragment [41, 26] - [41, 41])))))
consequence: (statement_block [41, 45] - [51, 7]
(return_statement [42, 8] - [50, 12]
(call_expression [42, 15] - [50, 11]
function: (member_expression [42, 15] - [42, 30]
object: (identifier [42, 15] - [42, 22])
property: (property_identifier [42, 23] - [42, 30]))
arguments: (arguments [42, 30] - [50, 11]
(array [42, 31] - [50, 10]
(object [42, 32] - [50, 9]
(pair [43, 10] - [43, 30]
key: (property_identifier [43, 10] - [43, 17])
value: (string [43, 19] - [43, 30]
(string_fragment [43, 20] - [43, 29])))
(pair [44, 10] - [44, 67]
key: (property_identifier [44, 10] - [44, 20])
value: (call_expression [44, 22] - [44, 67]
function: (member_expression [44, 22] - [44, 65]
object: (new_expression [44, 22] - [44, 53]
constructor: (identifier [44, 26] - [44, 30])
arguments: (arguments [44, 30] - [44, 53]
(binary_expression [44, 31] - [44, 52]
left: (call_expression [44, 31] - [44, 41]
function: (member_expression [44, 31] - [44, 39]
object: (identifier [44, 31] - [44, 35])
property: (property_identifier [44, 36] - [44, 39]))
arguments: (arguments [44, 39] - [44, 41]))
right: (number [44, 44] - [44, 52]))))
property: (property_identifier [44, 54] - [44, 65]))
arguments: (arguments [44, 65] - [44, 67])))
(pair [45, 10] - [45, 31]
key: (property_identifier [45, 10] - [45, 15])
value: (string [45, 17] - [45, 31]
(string_fragment [45, 18] - [45, 30])))
(pair [46, 10] - [46, 25]
key: (property_identifier [46, 10] - [46, 18])
value: (false [46, 20] - [46, 25]))
(pair [47, 10] - [47, 26]
key: (property_identifier [47, 10] - [47, 19])
value: (false [47, 21] - [47, 26]))
(pair [48, 10] - [48, 30]
key: (property_identifier [48, 10] - [48, 23])
value: (array [48, 25] - [48, 30]
(string [48, 26] - [48, 29]
(string_fragment [48, 27] - [48, 28]))))
(pair [49, 10] - [49, 32]
key: (property_identifier [49, 10] - [49, 18])
value: (string [49, 20] - [49, 32]
(string_fragment [49, 21] - [49, 31]))))))))))
(if_statement [52, 6] - [54, 7]
condition: (parenthesized_expression [52, 9] - [52, 42]
(call_expression [52, 10] - [52, 41]
function: (member_expression [52, 10] - [52, 24]
object: (identifier [52, 10] - [52, 15])
property: (property_identifier [52, 16] - [52, 24]))
arguments: (arguments [52, 24] - [52, 41]
(string [52, 25] - [52, 40]
(string_fragment [52, 26] - [52, 39])))))
consequence: (statement_block [52, 43] - [54, 7]
(return_statement [53, 8] - [53, 48]
(call_expression [53, 15] - [53, 47]
function: (member_expression [53, 15] - [53, 30]
object: (identifier [53, 15] - [53, 22])
property: (property_identifier [53, 23] - [53, 30]))
arguments: (arguments [53, 30] - [53, 47]
(array [53, 31] - [53, 46]
(object [53, 32] - [53, 45]
(pair [53, 34] - [53, 43]
key: (property_identifier [53, 34] - [53, 36])
value: (string [53, 38] - [53, 43]
(string_fragment [53, 39] - [53, 42]))))))))))
(if_statement [55, 6] - [57, 7]
condition: (parenthesized_expression [55, 9] - [55, 39]
(call_expression [55, 10] - [55, 38]
function: (member_expression [55, 10] - [55, 24]
object: (identifier [55, 10] - [55, 15])
property: (property_identifier [55, 16] - [55, 24]))
arguments: (arguments [55, 24] - [55, 38]
(string [55, 25] - [55, 37]
(string_fragment [55, 26] - [55, 36])))))
consequence: (statement_block [55, 40] - [57, 7]
(return_statement [56, 8] - [56, 48]
(call_expression [56, 15] - [56, 47]
function: (member_expression [56, 15] - [56, 30]
object: (identifier [56, 15] - [56, 22])
property: (property_identifier [56, 23] - [56, 30]))
arguments: (arguments [56, 30] - [56, 47]
(array [56, 31] - [56, 46]
(identifier [56, 32] - [56, 45])))))))
(return_statement [58, 6] - [58, 33]
(call_expression [58, 13] - [58, 32]
function: (member_expression [58, 13] - [58, 28]
object: (identifier [58, 13] - [58, 20])
property: (property_identifier [58, 21] - [58, 28]))
arguments: (arguments [58, 28] - [58, 32]
(array [58, 29] - [58, 31])))))))
(predefined_type [59, 10] - [59, 13]))))
(lexical_declaration [61, 4] - [61, 27]
(variable_declarator [61, 10] - [61, 26]
name: (identifier [61, 10] - [61, 13])
value: (new_expression [61, 16] - [61, 26]
constructor: (identifier [61, 20] - [61, 24])
arguments: (arguments [61, 24] - [61, 26]))))
(expression_statement [62, 4] - [62, 37]
(call_expression [62, 4] - [62, 36]
function: (member_expression [62, 4] - [62, 13]
object: (identifier [62, 4] - [62, 7])
property: (property_identifier [62, 8] - [62, 13]))
arguments: (arguments [62, 13] - [62, 36]
(string [62, 14] - [62, 22]
(string_fragment [62, 15] - [62, 21]))
(identifier [62, 24] - [62, 35]))))
(lexical_declaration [64, 4] - [68, 7]
(variable_declarator [64, 10] - [68, 6]
name: (identifier [64, 10] - [64, 13])
value: (new_expression [64, 16] - [68, 6]
constructor: (identifier [64, 20] - [64, 27])
arguments: (arguments [64, 27] - [68, 6]
(string [64, 28] - [64, 58]
(string_fragment [64, 29] - [64, 57]))
(object [64, 60] - [68, 5]
(pair [65, 6] - [67, 7]
key: (property_identifier [65, 6] - [65, 13])
value: (object [65, 15] - [67, 7]
(pair [66, 8] - [66, 49]
key: (string [66, 8] - [66, 16]
(string_fragment [66, 9] - [66, 15]))
value: (string [66, 18] - [66, 49]
(string_fragment [66, 19] - [66, 48]))))))))))
(lexical_declaration [70, 4] - [70, 37]
(variable_declarator [70, 10] - [70, 36]
name: (identifier [70, 10] - [70, 13])
value: (await_expression [70, 16] - [70, 36]
(call_expression [70, 22] - [70, 36]
function: (member_expression [70, 22] - [70, 31]
object: (identifier [70, 22] - [70, 25])
property: (property_identifier [70, 26] - [70, 31]))
arguments: (arguments [70, 31] - [70, 36]
(identifier [70, 32] - [70, 35]))))))
(expression_statement [71, 4] - [71, 33]
(call_expression [71, 4] - [71, 32]
function: (member_expression [71, 4] - [71, 27]
object: (call_expression [71, 4] - [71, 22]
function: (identifier [71, 4] - [71, 10])
arguments: (arguments [71, 10] - [71, 22]
(member_expression [71, 11] - [71, 21]
object: (identifier [71, 11] - [71, 14])
property: (property_identifier [71, 15] - [71, 21]))))
property: (property_identifier [71, 23] - [71, 27]))
arguments: (arguments [71, 27] - [71, 32]
(number [71, 28] - [71, 31]))))
(lexical_declaration [72, 4] - [72, 34]
(variable_declarator [72, 10] - [72, 33]
name: (identifier [72, 10] - [72, 14])
value: (await_expression [72, 17] - [72, 33]
(call_expression [72, 23] - [72, 33]
function: (member_expression [72, 23] - [72, 31]
object: (identifier [72, 23] - [72, 26])
property: (property_identifier [72, 27] - [72, 31]))
arguments: (arguments [72, 31] - [72, 33])))))
(expression_statement [73, 4] - [73, 45]
(call_expression [73, 4] - [73, 44]
function: (member_expression [73, 4] - [73, 26]
object: (call_expression [73, 4] - [73, 16]
function: (identifier [73, 4] - [73, 10])
arguments: (arguments [73, 10] - [73, 16]
(identifier [73, 11] - [73, 15])))
property: (property_identifier [73, 17] - [73, 26]))
arguments: (arguments [73, 26] - [73, 44]
(string [73, 27] - [73, 43]
(string_fragment [73, 28] - [73, 42])))))
(expression_statement [74, 4] - [74, 41]
(call_expression [74, 4] - [74, 40]
function: (member_expression [74, 4] - [74, 26]
object: (call_expression [74, 4] - [74, 16]
function: (identifier [74, 4] - [74, 10])
arguments: (arguments [74, 10] - [74, 16]
(identifier [74, 11] - [74, 15])))
property: (property_identifier [74, 17] - [74, 26]))
arguments: (arguments [74, 26] - [74, 40]
(string [74, 27] - [74, 39]
(string_fragment [74, 28] - [74, 38]))))))
finalizer: (finally_clause [75, 4] - [78, 3]
body: (statement_block [75, 12] - [78, 3]
(expression_statement [76, 4] - [76, 29]
(assignment_expression [76, 4] - [76, 28]
left: (member_expression [76, 4] - [76, 18]
object: (identifier [76, 4] - [76, 14])
property: (property_identifier [76, 15] - [76, 18]))
right: (identifier [76, 21] - [76, 28])))
(expression_statement [77, 4] - [77, 52]
(assignment_expression [77, 4] - [77, 51]
left: (member_expression [77, 4] - [77, 35]
object: (identifier [77, 4] - [77, 20])
property: (property_identifier [77, 21] - [77, 35]))
right: (identifier [77, 38] - [77, 51])))))))))))
(expression_statement [81, 0] - [177, 3]
(call_expression [81, 0] - [177, 2]
function: (identifier [81, 0] - [81, 4])
arguments: (arguments [81, 4] - [177, 2]
(string [81, 5] - [81, 57]
(string_fragment [81, 6] - [81, 56]))
(arrow_function [81, 59] - [177, 1]
parameters: (formal_parameters [81, 59] - [81, 61])
body: (statement_block [81, 65] - [177, 1]
(lexical_declaration [82, 2] - [91, 5]
(variable_declarator [82, 8] - [91, 4]
name: (identifier [82, 8] - [82, 21])
value: (call_expression [82, 24] - [91, 4]
function: (identifier [82, 24] - [82, 46])
arguments: (arguments [82, 46] - [91, 4]
(object [82, 47] - [91, 3]
(pair [83, 4] - [90, 5]
key: (property_identifier [83, 4] - [83, 9])
value: (array [83, 11] - [90, 5]
(object [84, 6] - [89, 7]
(pair [85, 8] - [85, 17]
key: (property_identifier [85, 8] - [85, 10])
value: (string [85, 12] - [85, 17]
(string_fragment [85, 13] - [85, 16])))
(pair [86, 8] - [86, 25]
key: (property_identifier [86, 8] - [86, 16])
value: (string [86, 18] - [86, 25]
(string_fragment [86, 19] - [86, 24])))
(pair [87, 8] - [87, 29]
key: (property_identifier [87, 8] - [87, 20])
value: (string [87, 22] - [87, 29]
(string_fragment [87, 23] - [87, 28])))
(pair [88, 8] - [88, 32]
key: (property_identifier [88, 8] - [88, 22])
value: (string [88, 24] - [88, 32]
(string_fragment [88, 25] - [88, 31])))))))))))
(expression_statement [92, 2] - [92, 38]
(call_expression [92, 2] - [92, 37]
function: (member_expression [92, 2] - [92, 35]
object: (call_expression [92, 2] - [92, 23]
function: (identifier [92, 2] - [92, 8])
arguments: (arguments [92, 8] - [92, 23]
(identifier [92, 9] - [92, 22])))
property: (property_identifier [92, 24] - [92, 35]))
arguments: (arguments [92, 35] - [92, 37])))
(lexical_declaration [94, 2] - [120, 5]
(variable_declarator [94, 8] - [120, 4]
name: (identifier [94, 8] - [94, 27])
value: (call_expression [94, 30] - [120, 4]
function: (identifier [94, 30] - [94, 58])
arguments: (arguments [94, 58] - [120, 4]
(object [94, 59] - [120, 3]
(pair [95, 4] - [100, 5]
key: (property_identifier [95, 4] - [95, 8])
value: (object [95, 10] - [100, 5]
(pair [96, 6] - [96, 15]
key: (property_identifier [96, 6] - [96, 8])
value: (string [96, 10] - [96, 15]
(string_fragment [96, 11] - [96, 14])))
(pair [97, 6] - [97, 23]
key: (property_identifier [97, 6] - [97, 14])
value: (string [97, 16] - [97, 23]
(string_fragment [97, 17] - [97, 22])))
(pair [98, 6] - [98, 27]
key: (property_identifier [98, 6] - [98, 18])
value: (string [98, 20] - [98, 27]
(string_fragment [98, 21] - [98, 26])))
(pair [99, 6] - [99, 30]
key: (property_identifier [99, 6] - [99, 20])
value: (string [99, 22] - [99, 30]
(string_fragment [99, 23] - [99, 29])))))
(pair [101, 4] - [107, 5]
key: (property_identifier [101, 4] - [101, 12])
value: (array [101, 14] - [107, 5]
(object [102, 6] - [106, 7]
(pair [103, 8] - [103, 20]
key: (property_identifier [103, 8] - [103, 10])
value: (string [103, 12] - [103, 20]
(string_fragment [103, 13] - [103, 19])))
(pair [104, 8] - [104, 44]
key: (property_identifier [104, 8] - [104, 18])
value: (call_expression [104, 20] - [104, 44]
function: (member_expression [104, 20] - [104, 42]
object: (new_expression [104, 20] - [104, 30]
constructor: (identifier [104, 24] - [104, 28])
arguments: (arguments [104, 28] - [104, 30]))
property: (property_identifier [104, 31] - [104, 42]))
arguments: (arguments [104, 42] - [104, 44])))
(pair [105, 8] - [105, 44]
key: (property_identifier [105, 8] - [105, 18])
value: (call_expression [105, 20] - [105, 44]
function: (member_expression [105, 20] - [105, 42]
object: (new_expression [105, 20] - [105, 30]
constructor: (identifier [105, 24] - [105, 28])
arguments: (arguments [105, 28] - [105, 30]))
property: (property_identifier [105, 31] - [105, 42]))
arguments: (arguments [105, 42] - [105, 44]))))))
(pair [108, 4] - [108, 67]
key: (property_identifier [108, 4] - [108, 12])
value: (array [108, 14] - [108, 67]
(object [108, 15] - [108, 66]
(pair [108, 17] - [108, 27]
key: (property_identifier [108, 17] - [108, 19])
value: (string [108, 21] - [108, 27]
(string_fragment [108, 22] - [108, 26])))
(pair [108, 29] - [108, 52]
key: (property_identifier [108, 29] - [108, 42])
value: (string [108, 44] - [108, 52]
(string_fragment [108, 45] - [108, 51])))
(pair [108, 54] - [108, 64]
key: (property_identifier [108, 54] - [108, 61])
value: (number [108, 63] - [108, 64])))))
(pair [109, 4] - [117, 5]
key: (property_identifier [109, 4] - [109, 10])
value: (array [109, 12] - [117, 5]
(object [110, 6] - [116, 7]
(pair [111, 8] - [111, 17]
key: (property_identifier [111, 8] - [111, 10])
value: (string [111, 12] - [111, 17]
(string_fragment [111, 13] - [111, 16])))
(pair [112, 8] - [112, 24]
key: (property_identifier [112, 8] - [112, 16])
value: (string [112, 18] - [112, 24]
(string_fragment [112, 19] - [112, 23])))
(pair [113, 8] - [113, 37]
key: (property_identifier [113, 8] - [113, 17])
value: (string [113, 19] - [113, 37]
(string_fragment [113, 20] - [113, 36])))
(pair [114, 8] - [114, 21]
key: (property_identifier [114, 8] - [114, 12])
value: (string [114, 14] - [114, 21]
(string_fragment [114, 15] - [114, 20])))
(pair [115, 8] - [115, 44]
key: (property_identifier [115, 8] - [115, 18])
value: (call_expression [115, 20] - [115, 44]
function: (member_expression [115, 20] - [115, 42]
object: (new_expression [115, 20] - [115, 30]
constructor: (identifier [115, 24] - [115, 28])
arguments: (arguments [115, 28] - [115, 30]))
property: (property_identifier [115, 31] - [115, 42]))
arguments: (arguments [115, 42] - [115, 44]))))))
(pair [118, 4] - [118, 73]
key: (property_identifier [118, 4] - [118, 11])
value: (array [118, 13] - [118, 73]
(object [118, 14] - [118, 72]
(pair [118, 16] - [118, 25]
key: (property_identifier [118, 16] - [118, 18])
value: (string [118, 20] - [118, 25]
(string_fragment [118, 21] - [118, 24])))
(pair [118, 27] - [118, 39]
key: (property_identifier [118, 27] - [118, 31])
value: (string [118, 33] - [118, 39]
(string_fragment [118, 34] - [118, 38])))
(pair [118, 41] - [118, 70]
key: (property_identifier [118, 41] - [118, 50])
value: (string [118, 52] - [118, 70]
(string_fragment [118, 53] - [118, 69]))))))
(pair [119, 4] - [119, 44]
key: (property_identifier [119, 4] - [119, 12])
value: (array [119, 14] - [119, 44]
(object [119, 15] - [119, 43]
(pair [119, 17] - [119, 26]
key: (property_identifier [119, 17] - [119, 19])
value: (string [119, 21] - [119, 26]
(string_fragment [119, 22] - [119, 25])))
(pair [119, 28] - [119, 41]
key: (property_identifier [119, 28] - [119, 32])
value: (string [119, 34] - [119, 41]
(string_fragment [119, 35] - [119, 40])))))))))))
(expression_statement [121, 2] - [121, 44]
(call_expression [121, 2] - [121, 43]
function: (member_expression [121, 2] - [121, 41]
object: (call_expression [121, 2] - [121, 29]
function: (identifier [121, 2] - [121, 8])
arguments: (arguments [121, 8] - [121, 29]
(identifier [121, 9] - [121, 28])))
property: (property_identifier [121, 30] - [121, 41]))
arguments: (arguments [121, 41] - [121, 43])))
(lexical_declaration [123, 2] - [133, 5]
(variable_declarator [123, 8] - [133, 4]
name: (identifier [123, 8] - [123, 20])
value: (call_expression [123, 23] - [133, 4]
function: (identifier [123, 23] - [123, 44])
arguments: (arguments [123, 44] - [133, 4]
(object [123, 45] - [133, 3]
(pair [124, 4] - [132, 5]
key: (property_identifier [124, 4] - [124, 8])
value: (array [124, 10] - [132, 5]
(object [125, 6] - [131, 7]
(pair [126, 8] - [126, 17]
key: (property_identifier [126, 8] - [126, 10])
value: (string [126, 12] - [126, 17]
(string_fragment [126, 13] - [126, 16])))
(pair [127, 8] - [127, 25]
key: (property_identifier [127, 8] - [127, 12])
value: (string [127, 14] - [127, 25]
(string_fragment [127, 15] - [127, 24])))
(pair [128, 8] - [128, 37]
key: (property_identifier [128, 8] - [128, 17])
value: (string [128, 19] - [128, 37]
(string_fragment [128, 20] - [128, 36])))
(pair [129, 8] - [129, 31]
key: (property_identifier [129, 8] - [129, 14])
value: (string [129, 16] - [129, 31]
(string_fragment [129, 17] - [129, 30])))
(pair [130, 8] - [130, 30]
key: (property_identifier [130, 8] - [130, 27])
value: (number [130, 29] - [130, 30]))))))))))
(expression_statement [134, 2] - [134, 37]
(call_expression [134, 2] - [134, 36]
function: (member_expression [134, 2] - [134, 34]
object: (call_expression [134, 2] - [134, 22]
function: (identifier [134, 2] - [134, 8])
arguments: (arguments [134, 8] - [134, 22]
(identifier [134, 9] - [134, 21])))
property: (property_identifier [134, 23] - [134, 34]))
arguments: (arguments [134, 34] - [134, 36])))
(lexical_declaration [136, 2] - [147, 5]
(variable_declarator [136, 8] - [147, 4]
name: (identifier [136, 8] - [136, 21])
value: (call_expression [136, 24] - [147, 4]
function: (identifier [136, 24] - [136, 44])
arguments: (arguments [136, 44] - [147, 4]
(object [136, 45] - [147, 3]
(pair [137, 4] - [146, 5]
key: (property_identifier [137, 4] - [137, 8])
value: (array [137, 10] - [146, 5]
(object [138, 6] - [145, 7]
(pair [139, 8] - [139, 19]
key: (property_identifier [139, 8] - [139, 10])
value: (string [139, 12] - [139, 19]
(string_fragment [139, 13] - [139, 18])))
(pair [140, 8] - [140, 31]
key: (property_identifier [140, 8] - [140, 14])
value: (string [140, 16] - [140, 31]
(string_fragment [140, 17] - [140, 30])))
(pair [141, 8] - [141, 21]
key: (property_identifier [141, 8] - [141, 12])
value: (string [141, 14] - [141, 21]
(string_fragment [141, 15] - [141, 20])))
(pair [142, 8] - [142, 24]
key: (property_identifier [142, 8] - [142, 16])
value: (string [142, 18] - [142, 24]
(string_fragment [142, 19] - [142, 23])))
(pair [143, 8] - [143, 31]
key: (property_identifier [143, 8] - [143, 18])
value: (string [143, 20] - [143, 31]
(string_fragment [143, 21] - [143, 30])))
(pair [144, 8] - [144, 44]
key: (property_identifier [144, 8] - [144, 18])
value: (call_expression [144, 20] - [144, 44]
function: (member_expression [144, 20] - [144, 42]
object: (new_expression [144, 20] - [144, 30]
constructor: (identifier [144, 24] - [144, 28])
arguments: (arguments [144, 28] - [144, 30]))
property: (property_identifier [144, 31] - [144, 42]))
arguments: (arguments [144, 42] - [144, 44])))))))))))
(expression_statement [148, 2] - [148, 38]
(call_expression [148, 2] - [148, 37]
function: (member_expression [148, 2] - [148, 35]
object: (call_expression [148, 2] - [148, 23]
function: (identifier [148, 2] - [148, 8])
arguments: (arguments [148, 8] - [148, 23]
(identifier [148, 9] - [148, 22])))
property: (property_identifier [148, 24] - [148, 35]))
arguments: (arguments [148, 35] - [148, 37])))
(lexical_declaration [150, 2] - [153, 5]
(variable_declarator [150, 8] - [153, 4]
name: (identifier [150, 8] - [150, 21])
value: (call_expression [150, 24] - [153, 4]
function: (identifier [150, 24] - [150, 46])
arguments: (arguments [150, 46] - [153, 4]
(object [150, 47] - [153, 3]
(pair [151, 4] - [151, 70]
key: (property_identifier [151, 4] - [151, 9])
value: (array [151, 11] - [151, 70]
(object [151, 12] - [151, 69]
(pair [151, 14] - [151, 23]
key: (property_identifier [151, 14] - [151, 16])
value: (string [151, 18] - [151, 23]
(string_fragment [151, 19] - [151, 22])))
(pair [151, 25] - [151, 39]
key: (property_identifier [151, 25] - [151, 29])
value: (string [151, 31] - [151, 39]
(string_fragment [151, 32] - [151, 38])))
(pair [151, 41] - [151, 67]
key: (property_identifier [151, 41] - [151, 52])
value: (string [151, 54] - [151, 67]
(string_fragment [151, 55] - [151, 66]))))))
(pair [152, 4] - [152, 43]
key: (property_identifier [152, 4] - [152, 8])
value: (array [152, 10] - [152, 43]
(object [152, 11] - [152, 42]
(pair [152, 13] - [152, 22]
key: (property_identifier [152, 13] - [152, 15])
value: (string [152, 17] - [152, 22]
(string_fragment [152, 18] - [152, 21])))
(pair [152, 24] - [152, 40]
key: (property_identifier [152, 24] - [152, 28])
value: (string [152, 30] - [152, 40]
(string_fragment [152, 31] - [152, 39])))))))))))
(expression_statement [154, 2] - [154, 38]
(call_expression [154, 2] - [154, 37]
function: (member_expression [154, 2] - [154, 35]
object: (call_expression [154, 2] - [154, 23]
function: (identifier [154, 2] - [154, 8])
arguments: (arguments [154, 8] - [154, 23]
(identifier [154, 9] - [154, 22])))
property: (property_identifier [154, 24] - [154, 35]))
arguments: (arguments [154, 35] - [154, 37])))
(lexical_declaration [156, 2] - [166, 5]
(variable_declarator [156, 8] - [166, 4]
name: (identifier [156, 8] - [156, 23])
value: (call_expression [156, 26] - [166, 4]
function: (identifier [156, 26] - [156, 50])
arguments: (arguments [156, 50] - [166, 4]
(object [156, 51] - [166, 3]
(pair [157, 4] - [163, 6]
key: (property_identifier [157, 4] - [157, 11])
value: (array [157, 13] - [163, 6]
(object [157, 14] - [163, 5]
(pair [158, 6] - [158, 17]
key: (property_identifier [158, 6] - [158, 8])
value: (string [158, 10] - [158, 17]
(string_fragment [158, 11] - [158, 16])))
(pair [159, 6] - [159, 21]
key: (property_identifier [159, 6] - [159, 10])
value: (string [159, 12] - [159, 21]
(string_fragment [159, 13] - [159, 20])))
(pair [160, 6] - [160, 18]
key: (property_identifier [160, 6] - [160, 10])
value: (string [160, 12] - [160, 18]
(string_fragment [160, 13] - [160, 17])))
(pair [161, 6] - [161, 18]
key: (property_identifier [161, 6] - [161, 14])
value: (number [161, 16] - [161, 18]))
(pair [162, 6] - [162, 42]
key: (property_identifier [162, 6] - [162, 16])
value: (call_expression [162, 18] - [162, 42]
function: (member_expression [162, 18] - [162, 40]
object: (new_expression [162, 18] - [162, 28]
constructor: (identifier [162, 22] - [162, 26])
arguments: (arguments [162, 26] - [162, 28]))
property: (property_identifier [162, 29] - [162, 40]))
arguments: (arguments [162, 40] - [162, 42]))))))
(pair [164, 4] - [164, 43]
key: (property_identifier [164, 4] - [164, 8])
value: (array [164, 10] - [164, 43]
(object [164, 11] - [164, 42]
(pair [164, 13] - [164, 22]
key: (property_identifier [164, 13] - [164, 15])
value: (string [164, 17] - [164, 22]
(string_fragment [164, 18] - [164, 21])))
(pair [164, 24] - [164, 40]
key: (property_identifier [164, 24] - [164, 28])
value: (string [164, 30] - [164, 40]
(string_fragment [164, 31] - [164, 39]))))))
(pair [165, 4] - [165, 45]
key: (property_identifier [165, 4] - [165, 12])
value: (array [165, 14] - [165, 45]
(object [165, 15] - [165, 44]
(pair [165, 17] - [165, 26]
key: (property_identifier [165, 17] - [165, 19])
value: (string [165, 21] - [165, 26]
(string_fragment [165, 22] - [165, 25])))
(pair [165, 28] - [165, 42]
key: (property_identifier [165, 28] - [165, 32])
value: (string [165, 34] - [165, 42]
(string_fragment [165, 35] - [165, 41])))))))))))
(expression_statement [167, 2] - [167, 40]
(call_expression [167, 2] - [167, 39]
function: (member_expression [167, 2] - [167, 37]
object: (call_expression [167, 2] - [167, 25]
function: (identifier [167, 2] - [167, 8])
arguments: (arguments [167, 8] - [167, 25]
(identifier [167, 9] - [167, 24])))
property: (property_identifier [167, 26] - [167, 37]))
arguments: (arguments [167, 37] - [167, 39])))
(lexical_declaration [169, 2] - [175, 5]
(variable_declarator [169, 8] - [175, 4]
name: (identifier [169, 8] - [169, 22])
value: (call_expression [169, 25] - [175, 4]
function: (identifier [169, 25] - [169, 43])
arguments: (arguments [169, 43] - [175, 4]
(object [169, 44] - [175, 3]
(pair [170, 4] - [174, 6]
key: (property_identifier [170, 4] - [170, 13])
value: (array [170, 15] - [174, 6]
(object [170, 16] - [174, 5]
(pair [171, 6] - [171, 16]
key: (property_identifier [171, 6] - [171, 8])
value: (string [171, 10] - [171, 16]
(string_fragment [171, 11] - [171, 15])))
(pair [172, 6] - [172, 52]
key: (property_identifier [172, 6] - [172, 12])
value: (string [172, 14] - [172, 52]
(string_fragment [172, 15] - [172, 51])))
(pair [173, 6] - [173, 28]
key: (property_identifier [173, 6] - [173, 17])
value: (string [173, 19] - [173, 28]
(string_fragment [173, 20] - [173, 27])))))))))))
(expression_statement [176, 2] - [176, 39]
(call_expression [176, 2] - [176, 38]
function: (member_expression [176, 2] - [176, 36]
object: (call_expression [176, 2] - [176, 24]
function: (identifier [176, 2] - [176, 8])
arguments: (arguments [176, 8] - [176, 24]
(identifier [176, 9] - [176, 23])))
property: (property_identifier [176, 25] - [176, 36]))
arguments: (arguments [176, 36] - [176, 38])))))))))

File diff suppressed because it is too large Load Diff

View File

@ -1,293 +0,0 @@
(program [0, 0] - [79, 0]
(import_statement [0, 0] - [0, 56]
(import_clause [0, 7] - [0, 25]
(named_imports [0, 7] - [0, 25]
(import_specifier [0, 9] - [0, 23]
name: (identifier [0, 9] - [0, 23]))))
source: (string [0, 31] - [0, 55]
(string_fragment [0, 32] - [0, 54])))
(export_statement [2, 0] - [78, 2]
declaration: (lexical_declaration [2, 7] - [78, 2]
(variable_declarator [2, 13] - [78, 1]
name: (identifier [2, 13] - [2, 32])
value: (arrow_function [2, 35] - [78, 1]
parameters: (formal_parameters [2, 35] - [10, 2]
(required_parameter [2, 36] - [10, 1]
pattern: (object_pattern [2, 36] - [6, 1]
(shorthand_property_identifier_pattern [3, 2] - [3, 10])
(shorthand_property_identifier_pattern [4, 2] - [4, 7])
(shorthand_property_identifier_pattern [5, 2] - [5, 13]))
type: (type_annotation [6, 1] - [10, 1]
(object_type [6, 3] - [10, 1]
(property_signature [7, 2] - [7, 15]
name: (property_identifier [7, 2] - [7, 10])
type: (type_annotation [7, 10] - [7, 15]
(predefined_type [7, 12] - [7, 15])))
(property_signature [8, 2] - [8, 15]
name: (property_identifier [8, 2] - [8, 7])
type: (type_annotation [8, 7] - [8, 15]
(predefined_type [8, 9] - [8, 15])))
(property_signature [9, 2] - [9, 21]
name: (property_identifier [9, 2] - [9, 13])
type: (type_annotation [9, 13] - [9, 21]
(predefined_type [9, 15] - [9, 21])))))))
body: (statement_block [10, 6] - [78, 1]
(lexical_declaration [11, 2] - [18, 4]
(variable_declarator [11, 8] - [18, 3]
name: (identifier [11, 8] - [11, 21])
value: (array [11, 24] - [18, 3]
(object [12, 4] - [12, 44]
(pair [12, 6] - [12, 20]
key: (property_identifier [12, 6] - [12, 11])
value: (string [12, 13] - [12, 20]
(string_fragment [12, 14] - [12, 19])))
(pair [12, 22] - [12, 42]
key: (property_identifier [12, 22] - [12, 26])
value: (string [12, 28] - [12, 42]
(string_fragment [12, 29] - [12, 41]))))
(object [13, 4] - [13, 50]
(pair [13, 6] - [13, 27]
key: (property_identifier [13, 6] - [13, 11])
value: (string [13, 13] - [13, 27]
(string_fragment [13, 14] - [13, 26])))
(pair [13, 29] - [13, 48]
key: (property_identifier [13, 29] - [13, 33])
value: (string [13, 35] - [13, 48]
(string_fragment [13, 36] - [13, 47]))))
(object [14, 4] - [14, 44]
(pair [14, 6] - [14, 20]
key: (property_identifier [14, 6] - [14, 11])
value: (string [14, 13] - [14, 20]
(string_fragment [14, 14] - [14, 19])))
(pair [14, 22] - [14, 42]
key: (property_identifier [14, 22] - [14, 26])
value: (string [14, 28] - [14, 42]
(string_fragment [14, 29] - [14, 41]))))
(object [15, 4] - [15, 54]
(pair [15, 6] - [15, 28]
key: (property_identifier [15, 6] - [15, 11])
value: (string [15, 13] - [15, 28]
(string_fragment [15, 14] - [15, 27])))
(pair [15, 30] - [15, 52]
key: (property_identifier [15, 30] - [15, 34])
value: (string [15, 36] - [15, 52]
(string_fragment [15, 37] - [15, 51]))))
(object [16, 4] - [16, 57]
(pair [16, 6] - [16, 32]
key: (property_identifier [16, 6] - [16, 11])
value: (string [16, 13] - [16, 32]
(string_fragment [16, 14] - [16, 31])))
(pair [16, 34] - [16, 55]
key: (property_identifier [16, 34] - [16, 38])
value: (string [16, 40] - [16, 55]
(string_fragment [16, 41] - [16, 54]))))
(object [17, 4] - [17, 54]
(pair [17, 6] - [17, 25]
key: (property_identifier [17, 6] - [17, 11])
value: (string [17, 13] - [17, 25]
(string_fragment [17, 14] - [17, 24])))
(pair [17, 27] - [17, 52]
key: (property_identifier [17, 27] - [17, 31])
value: (string [17, 33] - [17, 52]
(string_fragment [17, 34] - [17, 51])))))))
(return_statement [20, 2] - [77, 4]
(parenthesized_expression [20, 9] - [77, 3]
(jsx_element [21, 4] - [76, 21]
open_tag: (jsx_opening_element [21, 4] - [21, 34]
name: (identifier [21, 5] - [21, 19])
attribute: (jsx_attribute [21, 20] - [21, 33]
(property_identifier [21, 20] - [21, 25])
(jsx_expression [21, 26] - [21, 33]
(identifier [21, 27] - [21, 32]))))
(jsx_element [22, 6] - [75, 12]
open_tag: (jsx_opening_element [22, 6] - [22, 31]
name: (identifier [22, 7] - [22, 10])
attribute: (jsx_attribute [22, 11] - [22, 30]
(property_identifier [22, 11] - [22, 16])
(string [22, 17] - [22, 30]
(string_fragment [22, 18] - [22, 29]))))
(jsx_expression [23, 8] - [23, 26]
(comment [23, 9] - [23, 25]))
(jsx_element [24, 8] - [52, 17]
open_tag: (jsx_opening_element [24, 8] - [24, 37]
name: (identifier [24, 9] - [24, 15])
attribute: (jsx_attribute [24, 16] - [24, 36]
(property_identifier [24, 16] - [24, 21])
(string [24, 22] - [24, 36]
(string_fragment [24, 23] - [24, 35]))))
(jsx_element [25, 10] - [34, 16]
open_tag: (jsx_opening_element [25, 10] - [25, 73]
name: (identifier [25, 11] - [25, 14])
attribute: (jsx_attribute [25, 15] - [25, 72]
(property_identifier [25, 15] - [25, 20])
(string [25, 21] - [25, 72]
(string_fragment [25, 22] - [25, 71]))))
(jsx_element [26, 12] - [33, 16]
open_tag: (jsx_opening_element [26, 12] - [30, 13]
name: (identifier [26, 13] - [26, 14])
attribute: (jsx_attribute [27, 14] - [27, 33]
(property_identifier [27, 14] - [27, 18])
(string [27, 19] - [27, 33]
(string_fragment [27, 20] - [27, 32])))
attribute: (jsx_attribute [28, 14] - [28, 33]
(property_identifier [28, 14] - [28, 19])
(string [28, 20] - [28, 33]
(string_fragment [28, 21] - [28, 32])))
attribute: (jsx_attribute [29, 14] - [29, 44]
(property_identifier [29, 14] - [29, 19])
(string [29, 20] - [29, 44]
(string_fragment [29, 21] - [29, 43]))))
(jsx_element [31, 14] - [31, 35]
open_tag: (jsx_opening_element [31, 14] - [31, 20]
name: (identifier [31, 15] - [31, 19]))
(jsx_text [31, 20] - [31, 28])
close_tag: (jsx_closing_element [31, 28] - [31, 35]
name: (identifier [31, 30] - [31, 34])))
(jsx_element [32, 14] - [32, 52]
open_tag: (jsx_opening_element [32, 14] - [32, 40]
name: (identifier [32, 15] - [32, 19])
attribute: (jsx_attribute [32, 20] - [32, 39]
(property_identifier [32, 20] - [32, 25])
(string [32, 26] - [32, 39]
(string_fragment [32, 27] - [32, 38]))))
(jsx_text [32, 40] - [32, 45])
close_tag: (jsx_closing_element [32, 45] - [32, 52]
name: (identifier [32, 47] - [32, 51])))
close_tag: (jsx_closing_element [33, 12] - [33, 16]
name: (identifier [33, 14] - [33, 15])))
close_tag: (jsx_closing_element [34, 10] - [34, 16]
name: (identifier [34, 12] - [34, 15])))
(jsx_element [36, 10] - [51, 16]
open_tag: (jsx_opening_element [36, 10] - [36, 73]
name: (identifier [36, 11] - [36, 14])
attribute: (jsx_attribute [36, 15] - [36, 72]
(property_identifier [36, 15] - [36, 20])
(string [36, 21] - [36, 72]
(string_fragment [36, 22] - [36, 71]))))
(jsx_element [37, 12] - [43, 16]
open_tag: (jsx_opening_element [37, 12] - [41, 13]
name: (identifier [37, 13] - [37, 14])
attribute: (jsx_attribute [38, 14] - [38, 31]
(property_identifier [38, 14] - [38, 18])
(string [38, 19] - [38, 31]
(string_fragment [38, 20] - [38, 30])))
attribute: (jsx_attribute [39, 14] - [39, 33]
(property_identifier [39, 14] - [39, 19])
(string [39, 20] - [39, 33]
(string_fragment [39, 21] - [39, 32])))
attribute: (jsx_attribute [40, 14] - [40, 176]
(property_identifier [40, 14] - [40, 19])
(string [40, 20] - [40, 176]
(string_fragment [40, 21] - [40, 175]))))
(jsx_text [41, 13] - [43, 12])
close_tag: (jsx_closing_element [43, 12] - [43, 16]
name: (identifier [43, 14] - [43, 15])))
(jsx_element [44, 12] - [50, 16]
open_tag: (jsx_opening_element [44, 12] - [48, 13]
name: (identifier [44, 13] - [44, 14])
attribute: (jsx_attribute [45, 14] - [45, 28]
(property_identifier [45, 14] - [45, 18])
(string [45, 19] - [45, 28]
(string_fragment [45, 20] - [45, 27])))
attribute: (jsx_attribute [46, 14] - [46, 32]
(property_identifier [46, 14] - [46, 19])
(string [46, 20] - [46, 32]
(string_fragment [46, 21] - [46, 31])))
attribute: (jsx_attribute [47, 14] - [47, 176]
(property_identifier [47, 14] - [47, 19])
(string [47, 20] - [47, 176]
(string_fragment [47, 21] - [47, 175]))))
(jsx_text [48, 13] - [50, 12])
close_tag: (jsx_closing_element [50, 12] - [50, 16]
name: (identifier [50, 14] - [50, 15])))
close_tag: (jsx_closing_element [51, 10] - [51, 16]
name: (identifier [51, 12] - [51, 15])))
close_tag: (jsx_closing_element [52, 8] - [52, 17]
name: (identifier [52, 10] - [52, 16])))
(jsx_expression [54, 8] - [54, 32]
(comment [54, 9] - [54, 31]))
(jsx_element [55, 8] - [69, 14]
open_tag: (jsx_opening_element [55, 8] - [55, 35]
name: (identifier [55, 9] - [55, 12])
attribute: (jsx_attribute [55, 13] - [55, 34]
(property_identifier [55, 13] - [55, 18])
(string [55, 19] - [55, 34]
(string_fragment [55, 20] - [55, 33]))))
(jsx_expression [56, 10] - [68, 13]
(call_expression [56, 11] - [68, 12]
function: (member_expression [56, 11] - [56, 28]
object: (identifier [56, 11] - [56, 24])
property: (property_identifier [56, 25] - [56, 28]))
arguments: (arguments [56, 28] - [68, 12]
(arrow_function [56, 29] - [68, 11]
parameters: (formal_parameters [56, 29] - [56, 35]
(required_parameter [56, 30] - [56, 34]
pattern: (identifier [56, 30] - [56, 34])))
body: (statement_block [56, 39] - [68, 11]
(lexical_declaration [57, 12] - [58, 54]
(variable_declarator [57, 18] - [58, 53]
name: (identifier [57, 18] - [57, 26])
value: (binary_expression [57, 29] - [58, 53]
left: (binary_expression [57, 29] - [57, 54]
left: (identifier [57, 29] - [57, 40])
right: (member_expression [57, 45] - [57, 54]
object: (identifier [57, 45] - [57, 49])
property: (property_identifier [57, 50] - [57, 54])))
right: (call_expression [58, 14] - [58, 53]
function: (member_expression [58, 14] - [58, 36]
object: (identifier [58, 14] - [58, 25])
property: (property_identifier [58, 26] - [58, 36]))
arguments: (arguments [58, 36] - [58, 53]
(binary_expression [58, 37] - [58, 52]
left: (member_expression [58, 37] - [58, 46]
object: (identifier [58, 37] - [58, 41])
property: (property_identifier [58, 42] - [58, 46]))
right: (string [58, 49] - [58, 52]
(string_fragment [58, 50] - [58, 51]))))))))
(return_statement [60, 12] - [67, 14]
(parenthesized_expression [60, 19] - [67, 13]
(jsx_element [61, 14] - [66, 18]
open_tag: (jsx_opening_element [61, 14] - [64, 15]
name: (identifier [61, 15] - [61, 16])
attribute: (jsx_attribute [62, 16] - [62, 32]
(property_identifier [62, 16] - [62, 20])
(jsx_expression [62, 21] - [62, 32]
(member_expression [62, 22] - [62, 31]
object: (identifier [62, 22] - [62, 26])
property: (property_identifier [62, 27] - [62, 31]))))
attribute: (jsx_attribute [63, 16] - [63, 68]
(property_identifier [63, 16] - [63, 21])
(jsx_expression [63, 22] - [63, 68]
(template_string [63, 23] - [63, 67]
(string_fragment [63, 24] - [63, 39])
(template_substitution [63, 39] - [63, 66]
(ternary_expression [63, 41] - [63, 65]
condition: (identifier [63, 41] - [63, 49])
consequence: (string [63, 52] - [63, 60]
(string_fragment [63, 53] - [63, 59]))
alternative: (string [63, 63] - [63, 65])))))))
(jsx_expression [65, 16] - [65, 28]
(member_expression [65, 17] - [65, 27]
object: (identifier [65, 17] - [65, 21])
property: (property_identifier [65, 22] - [65, 27])))
close_tag: (jsx_closing_element [66, 14] - [66, 18]
name: (identifier [66, 16] - [66, 17]))))))))))
close_tag: (jsx_closing_element [69, 8] - [69, 14]
name: (identifier [69, 10] - [69, 13])))
(jsx_expression [71, 8] - [71, 28]
(comment [71, 9] - [71, 27]))
(jsx_element [72, 8] - [74, 15]
open_tag: (jsx_opening_element [72, 8] - [72, 41]
name: (identifier [72, 9] - [72, 13])
attribute: (jsx_attribute [72, 14] - [72, 40]
(property_identifier [72, 14] - [72, 19])
(string [72, 20] - [72, 40]
(string_fragment [72, 21] - [72, 39]))))
(jsx_expression [73, 10] - [73, 20]
(identifier [73, 11] - [73, 19]))
close_tag: (jsx_closing_element [74, 8] - [74, 15]
name: (identifier [74, 10] - [74, 14])))
close_tag: (jsx_closing_element [75, 6] - [75, 12]
name: (identifier [75, 8] - [75, 11])))
close_tag: (jsx_closing_element [76, 4] - [76, 21]
name: (identifier [76, 6] - [76, 20])))))))))))

View File

@ -1,570 +0,0 @@
(program [0, 0] - [157, 0]
(import_statement [0, 0] - [0, 68]
(import_clause [0, 7] - [0, 30]
(named_imports [0, 7] - [0, 30]
(import_specifier [0, 9] - [0, 28]
name: (identifier [0, 9] - [0, 28]))))
source: (string [0, 36] - [0, 67]
(string_fragment [0, 37] - [0, 66])))
(export_statement [2, 0] - [156, 2]
declaration: (lexical_declaration [2, 7] - [156, 2]
(variable_declarator [2, 13] - [156, 1]
name: (identifier [2, 13] - [2, 34])
value: (arrow_function [2, 37] - [156, 1]
parameters: (formal_parameters [2, 37] - [6, 2]
(required_parameter [2, 38] - [6, 1]
pattern: (object_pattern [2, 38] - [4, 1]
(shorthand_property_identifier_pattern [3, 2] - [3, 6]))
type: (type_annotation [4, 1] - [6, 1]
(object_type [4, 3] - [6, 1]
(property_signature [5, 2] - [5, 13]
name: (property_identifier [5, 2] - [5, 6])
type: (type_annotation [5, 6] - [5, 13]
(array_type [5, 8] - [5, 13]
(predefined_type [5, 8] - [5, 11]))))))))
body: (statement_block [6, 6] - [156, 1]
(return_statement [7, 2] - [155, 4]
(parenthesized_expression [7, 9] - [155, 3]
(jsx_element [8, 4] - [154, 26]
open_tag: (jsx_opening_element [8, 4] - [8, 80]
name: (identifier [8, 5] - [8, 24])
attribute: (jsx_attribute [8, 25] - [8, 53]
(property_identifier [8, 25] - [8, 30])
(string [8, 31] - [8, 53]
(string_fragment [8, 32] - [8, 52])))
attribute: (jsx_attribute [8, 54] - [8, 79]
(property_identifier [8, 54] - [8, 65])
(string [8, 66] - [8, 79]
(string_fragment [8, 67] - [8, 78]))))
(jsx_self_closing_element [9, 6] - [12, 8]
name: (identifier [9, 7] - [9, 10])
attribute: (jsx_attribute [10, 8] - [10, 26]
(property_identifier [10, 8] - [10, 10])
(string [10, 11] - [10, 26]
(string_fragment [10, 12] - [10, 25])))
attribute: (jsx_attribute [11, 8] - [11, 126]
(property_identifier [11, 8] - [11, 13])
(string [11, 14] - [11, 126]
(string_fragment [11, 15] - [11, 125]))))
(jsx_element [14, 6] - [46, 12]
open_tag: (jsx_opening_element [14, 6] - [14, 142]
name: (identifier [14, 7] - [14, 10])
attribute: (jsx_attribute [14, 11] - [14, 141]
(property_identifier [14, 11] - [14, 16])
(string [14, 17] - [14, 141]
(string_fragment [14, 18] - [14, 140]))))
(jsx_element [15, 8] - [23, 14]
open_tag: (jsx_opening_element [15, 8] - [15, 13]
name: (identifier [15, 9] - [15, 12]))
(jsx_element [16, 10] - [18, 15]
open_tag: (jsx_opening_element [16, 10] - [16, 110]
name: (identifier [16, 11] - [16, 13])
attribute: (jsx_attribute [16, 14] - [16, 109]
(property_identifier [16, 14] - [16, 19])
(string [16, 20] - [16, 109]
(string_fragment [16, 21] - [16, 108]))))
(jsx_text [16, 110] - [18, 10])
close_tag: (jsx_closing_element [18, 10] - [18, 15]
name: (identifier [18, 12] - [18, 14])))
(jsx_element [19, 10] - [22, 14]
open_tag: (jsx_opening_element [19, 10] - [19, 82]
name: (identifier [19, 11] - [19, 12])
attribute: (jsx_attribute [19, 13] - [19, 81]
(property_identifier [19, 13] - [19, 18])
(string [19, 19] - [19, 81]
(string_fragment [19, 20] - [19, 80]))))
(jsx_text [19, 82] - [22, 10])
close_tag: (jsx_closing_element [22, 10] - [22, 14]
name: (identifier [22, 12] - [22, 13])))
close_tag: (jsx_closing_element [23, 8] - [23, 14]
name: (identifier [23, 10] - [23, 13])))
(jsx_element [25, 8] - [45, 14]
open_tag: (jsx_opening_element [25, 8] - [25, 90]
name: (identifier [25, 9] - [25, 12])
attribute: (jsx_attribute [25, 13] - [25, 89]
(property_identifier [25, 13] - [25, 18])
(string [25, 19] - [25, 89]
(string_fragment [25, 20] - [25, 88]))))
(jsx_self_closing_element [26, 10] - [32, 12]
name: (identifier [26, 11] - [26, 16])
attribute: (jsx_attribute [27, 12] - [27, 23]
(property_identifier [27, 12] - [27, 16])
(string [27, 17] - [27, 23]
(string_fragment [27, 18] - [27, 22])))
attribute: (jsx_attribute [28, 12] - [28, 31]
(property_identifier [28, 12] - [28, 14])
(string [28, 15] - [28, 31]
(string_fragment [28, 16] - [28, 30])))
attribute: (jsx_attribute [29, 12] - [29, 56]
(property_identifier [29, 12] - [29, 23])
(string [29, 24] - [29, 56]
(string_fragment [29, 25] - [29, 55])))
attribute: (jsx_attribute [30, 12] - [30, 38]
(property_identifier [30, 12] - [30, 19])
(string [30, 20] - [30, 38]
(string_fragment [30, 21] - [30, 37])))
attribute: (jsx_attribute [31, 12] - [31, 90]
(property_identifier [31, 12] - [31, 17])
(string [31, 18] - [31, 90]
(string_fragment [31, 19] - [31, 89]))))
(jsx_element [33, 10] - [44, 16]
open_tag: (jsx_opening_element [33, 10] - [41, 11]
name: (identifier [33, 11] - [33, 14])
attribute: (jsx_attribute [34, 12] - [34, 22]
(property_identifier [34, 12] - [34, 17])
(string [34, 18] - [34, 22]
(string_fragment [34, 19] - [34, 21])))
attribute: (jsx_attribute [35, 12] - [35, 23]
(property_identifier [35, 12] - [35, 18])
(string [35, 19] - [35, 23]
(string_fragment [35, 20] - [35, 22])))
attribute: (jsx_attribute [36, 12] - [36, 31]
(property_identifier [36, 12] - [36, 19])
(string [36, 20] - [36, 31]
(string_fragment [36, 21] - [36, 30])))
attribute: (jsx_attribute [37, 12] - [37, 23]
(property_identifier [37, 12] - [37, 16])
(string [37, 17] - [37, 23]
(string_fragment [37, 18] - [37, 22])))
attribute: (jsx_attribute [38, 12] - [38, 33]
(property_identifier [38, 12] - [38, 18])
(string [38, 19] - [38, 33]
(string_fragment [38, 20] - [38, 32])))
attribute: (jsx_attribute [39, 12] - [39, 28]
(property_identifier [39, 12] - [39, 24])
(string [39, 25] - [39, 28]
(string_fragment [39, 26] - [39, 27])))
attribute: (jsx_attribute [40, 12] - [40, 141]
(property_identifier [40, 12] - [40, 17])
(string [40, 18] - [40, 141]
(string_fragment [40, 19] - [40, 140]))))
(jsx_element [42, 12] - [42, 51]
open_tag: (jsx_opening_element [42, 12] - [42, 42]
name: (identifier [42, 13] - [42, 19])
attribute: (jsx_attribute [42, 20] - [42, 27]
(property_identifier [42, 20] - [42, 22])
(string [42, 23] - [42, 27]
(string_fragment [42, 24] - [42, 26])))
attribute: (jsx_attribute [42, 28] - [42, 35]
(property_identifier [42, 28] - [42, 30])
(string [42, 31] - [42, 35]
(string_fragment [42, 32] - [42, 34])))
attribute: (jsx_attribute [42, 36] - [42, 41]
(property_identifier [42, 36] - [42, 37])
(string [42, 38] - [42, 41]
(string_fragment [42, 39] - [42, 40]))))
close_tag: (jsx_closing_element [42, 42] - [42, 51]
name: (identifier [42, 44] - [42, 50])))
(jsx_element [43, 12] - [43, 63]
open_tag: (jsx_opening_element [43, 12] - [43, 56]
name: (identifier [43, 13] - [43, 17])
attribute: (jsx_attribute [43, 18] - [43, 25]
(property_identifier [43, 18] - [43, 20])
(string [43, 21] - [43, 25]
(string_fragment [43, 22] - [43, 24])))
attribute: (jsx_attribute [43, 26] - [43, 33]
(property_identifier [43, 26] - [43, 28])
(string [43, 29] - [43, 33]
(string_fragment [43, 30] - [43, 32])))
attribute: (jsx_attribute [43, 34] - [43, 44]
(property_identifier [43, 34] - [43, 36])
(string [43, 37] - [43, 44]
(string_fragment [43, 38] - [43, 43])))
attribute: (jsx_attribute [43, 45] - [43, 55]
(property_identifier [43, 45] - [43, 47])
(string [43, 48] - [43, 55]
(string_fragment [43, 49] - [43, 54]))))
close_tag: (jsx_closing_element [43, 56] - [43, 63]
name: (identifier [43, 58] - [43, 62])))
close_tag: (jsx_closing_element [44, 10] - [44, 16]
name: (identifier [44, 12] - [44, 15])))
close_tag: (jsx_closing_element [45, 8] - [45, 14]
name: (identifier [45, 10] - [45, 13])))
close_tag: (jsx_closing_element [46, 6] - [46, 12]
name: (identifier [46, 8] - [46, 11])))
(jsx_expression [48, 6] - [48, 27]
(comment [48, 7] - [48, 26]))
(jsx_element [49, 6] - [105, 12]
open_tag: (jsx_opening_element [49, 6] - [49, 60]
name: (identifier [49, 7] - [49, 10])
attribute: (jsx_attribute [49, 11] - [49, 36]
(property_identifier [49, 11] - [49, 16])
(string [49, 17] - [49, 36]
(string_fragment [49, 18] - [49, 35])))
attribute: (jsx_attribute [49, 37] - [49, 59]
(property_identifier [49, 37] - [49, 42])
(string [49, 43] - [49, 59]
(string_fragment [49, 44] - [49, 58]))))
(jsx_element [50, 8] - [104, 14]
open_tag: (jsx_opening_element [50, 8] - [50, 37]
name: (identifier [50, 9] - [50, 12])
attribute: (jsx_attribute [50, 13] - [50, 36]
(property_identifier [50, 13] - [50, 18])
(string [50, 19] - [50, 36]
(string_fragment [50, 20] - [50, 35]))))
(jsx_element [51, 10] - [103, 18]
open_tag: (jsx_opening_element [51, 10] - [51, 32]
name: (identifier [51, 11] - [51, 16])
attribute: (jsx_attribute [51, 17] - [51, 31]
(property_identifier [51, 17] - [51, 19])
(string [51, 20] - [51, 31]
(string_fragment [51, 21] - [51, 30]))))
(jsx_element [52, 12] - [59, 20]
open_tag: (jsx_opening_element [52, 12] - [52, 19]
name: (identifier [52, 13] - [52, 18]))
(jsx_element [53, 14] - [58, 19]
open_tag: (jsx_opening_element [53, 14] - [53, 18]
name: (identifier [53, 15] - [53, 17]))
(jsx_element [54, 16] - [54, 41]
open_tag: (jsx_opening_element [54, 16] - [54, 20]
name: (identifier [54, 17] - [54, 19]))
(jsx_text [54, 20] - [54, 36])
close_tag: (jsx_closing_element [54, 36] - [54, 41]
name: (identifier [54, 38] - [54, 40])))
(jsx_element [55, 16] - [55, 43]
open_tag: (jsx_opening_element [55, 16] - [55, 20]
name: (identifier [55, 17] - [55, 19]))
(jsx_text [55, 20] - [55, 38])
close_tag: (jsx_closing_element [55, 38] - [55, 43]
name: (identifier [55, 40] - [55, 42])))
(jsx_element [56, 16] - [56, 31]
open_tag: (jsx_opening_element [56, 16] - [56, 20]
name: (identifier [56, 17] - [56, 19]))
(jsx_text [56, 20] - [56, 26])
close_tag: (jsx_closing_element [56, 26] - [56, 31]
name: (identifier [56, 28] - [56, 30])))
(jsx_element [57, 16] - [57, 38]
open_tag: (jsx_opening_element [57, 16] - [57, 20]
name: (identifier [57, 17] - [57, 19]))
(jsx_text [57, 20] - [57, 33])
close_tag: (jsx_closing_element [57, 33] - [57, 38]
name: (identifier [57, 35] - [57, 37])))
close_tag: (jsx_closing_element [58, 14] - [58, 19]
name: (identifier [58, 16] - [58, 18])))
close_tag: (jsx_closing_element [59, 12] - [59, 20]
name: (identifier [59, 14] - [59, 19])))
(jsx_element [60, 12] - [102, 20]
open_tag: (jsx_opening_element [60, 12] - [60, 19]
name: (identifier [60, 13] - [60, 18]))
(jsx_expression [61, 14] - [101, 18]
(ternary_expression [61, 15] - [101, 17]
condition: (binary_expression [61, 15] - [61, 32]
left: (member_expression [61, 15] - [61, 26]
object: (identifier [61, 15] - [61, 19])
property: (property_identifier [61, 20] - [61, 26]))
right: (number [61, 31] - [61, 32]))
consequence: (parenthesized_expression [62, 18] - [71, 17]
(jsx_element [63, 18] - [70, 23]
open_tag: (jsx_opening_element [63, 18] - [63, 22]
name: (identifier [63, 19] - [63, 21]))
(jsx_element [64, 20] - [69, 25]
open_tag: (jsx_opening_element [64, 20] - [67, 21]
name: (identifier [64, 21] - [64, 23])
attribute: (jsx_attribute [65, 22] - [65, 33]
(property_identifier [65, 22] - [65, 29])
(jsx_expression [65, 30] - [65, 33]
(number [65, 31] - [65, 32])))
attribute: (jsx_attribute [66, 22] - [66, 92]
(property_identifier [66, 22] - [66, 27])
(string [66, 28] - [66, 92]
(string_fragment [66, 29] - [66, 91]))))
(jsx_text [67, 21] - [69, 20])
close_tag: (jsx_closing_element [69, 20] - [69, 25]
name: (identifier [69, 22] - [69, 24])))
close_tag: (jsx_closing_element [70, 18] - [70, 23]
name: (identifier [70, 20] - [70, 22]))))
alternative: (parenthesized_expression [72, 18] - [101, 17]
(call_expression [73, 18] - [100, 20]
function: (member_expression [73, 18] - [73, 26]
object: (identifier [73, 18] - [73, 22])
property: (property_identifier [73, 23] - [73, 26]))
arguments: (arguments [73, 26] - [100, 20]
(arrow_function [73, 27] - [100, 19]
parameters: (formal_parameters [73, 27] - [73, 32]
(required_parameter [73, 28] - [73, 31]
pattern: (identifier [73, 28] - [73, 31])))
body: (parenthesized_expression [73, 36] - [100, 19]
(jsx_element [74, 20] - [99, 25]
open_tag: (jsx_opening_element [74, 20] - [80, 21]
name: (identifier [74, 21] - [74, 23])
attribute: (jsx_attribute [75, 22] - [75, 34]
(property_identifier [75, 22] - [75, 25])
(jsx_expression [75, 26] - [75, 34]
(member_expression [75, 27] - [75, 33]
object: (identifier [75, 27] - [75, 30])
property: (property_identifier [75, 31] - [75, 33]))))
attribute: (jsx_attribute [76, 22] - [76, 37]
(property_identifier [76, 22] - [76, 27])
(string [76, 28] - [76, 37]
(string_fragment [76, 29] - [76, 36])))
attribute: (jsx_attribute [77, 22] - [79, 39]
(property_identifier [77, 22] - [77, 33])
(jsx_expression [77, 34] - [79, 39]
(call_expression [77, 35] - [79, 38]
function: (member_expression [77, 35] - [79, 36]
object: (template_string [77, 35] - [79, 24]
(template_substitution [77, 36] - [77, 47]
(member_expression [77, 38] - [77, 46]
object: (identifier [77, 38] - [77, 41])
property: (property_identifier [77, 42] - [77, 46])))
(string_fragment [77, 47] - [77, 48])
(template_substitution [77, 48] - [77, 67]
(binary_expression [77, 50] - [77, 66]
left: (member_expression [77, 50] - [77, 60]
object: (identifier [77, 50] - [77, 53])
property: (property_identifier [77, 54] - [77, 60]))
right: (string [77, 64] - [77, 66])))
(string_fragment [77, 67] - [77, 68])
(template_substitution [77, 68] - [79, 23]
(binary_expression [78, 24] - [78, 43]
left: (member_expression [78, 24] - [78, 37]
object: (identifier [78, 24] - [78, 27])
property: (property_identifier [78, 28] - [78, 37]))
right: (string [78, 41] - [78, 43]))))
property: (property_identifier [79, 25] - [79, 36]))
arguments: (arguments [79, 36] - [79, 38])))))
(jsx_element [81, 22] - [85, 27]
open_tag: (jsx_opening_element [81, 22] - [81, 26]
name: (identifier [81, 23] - [81, 25]))
(jsx_element [82, 24] - [84, 33]
open_tag: (jsx_opening_element [82, 24] - [82, 68]
name: (identifier [82, 25] - [82, 31])
attribute: (jsx_attribute [82, 32] - [82, 67]
(property_identifier [82, 32] - [82, 37])
(string [82, 38] - [82, 67]
(string_fragment [82, 39] - [82, 66]))))
(jsx_expression [83, 26] - [83, 36]
(member_expression [83, 27] - [83, 35]
object: (identifier [83, 27] - [83, 30])
property: (property_identifier [83, 31] - [83, 35])))
close_tag: (jsx_closing_element [84, 24] - [84, 33]
name: (identifier [84, 26] - [84, 32])))
close_tag: (jsx_closing_element [85, 22] - [85, 27]
name: (identifier [85, 24] - [85, 26])))
(jsx_element [86, 22] - [90, 27]
open_tag: (jsx_opening_element [86, 22] - [86, 26]
name: (identifier [86, 23] - [86, 25]))
(jsx_element [87, 24] - [89, 31]
open_tag: (jsx_opening_element [87, 24] - [87, 195]
name: (identifier [87, 25] - [87, 29])
attribute: (jsx_attribute [87, 30] - [87, 194]
(property_identifier [87, 30] - [87, 35])
(string [87, 36] - [87, 194]
(string_fragment [87, 37] - [87, 193]))))
(jsx_expression [88, 26] - [88, 41]
(member_expression [88, 27] - [88, 40]
object: (identifier [88, 27] - [88, 30])
property: (property_identifier [88, 31] - [88, 40])))
close_tag: (jsx_closing_element [89, 24] - [89, 31]
name: (identifier [89, 26] - [89, 30])))
close_tag: (jsx_closing_element [90, 22] - [90, 27]
name: (identifier [90, 24] - [90, 26])))
(jsx_element [91, 22] - [93, 27]
open_tag: (jsx_opening_element [91, 22] - [91, 108]
name: (identifier [91, 23] - [91, 25])
attribute: (jsx_attribute [91, 26] - [91, 107]
(property_identifier [91, 26] - [91, 31])
(string [91, 32] - [91, 107]
(string_fragment [91, 33] - [91, 106]))))
(jsx_expression [92, 24] - [92, 43]
(binary_expression [92, 25] - [92, 42]
left: (member_expression [92, 25] - [92, 35]
object: (identifier [92, 25] - [92, 28])
property: (property_identifier [92, 29] - [92, 35]))
right: (string [92, 39] - [92, 42]
(string_fragment [92, 40] - [92, 41]))))
close_tag: (jsx_closing_element [93, 22] - [93, 27]
name: (identifier [93, 24] - [93, 26])))
(jsx_element [94, 22] - [98, 27]
open_tag: (jsx_opening_element [94, 22] - [94, 26]
name: (identifier [94, 23] - [94, 25]))
(jsx_element [95, 24] - [97, 31]
open_tag: (jsx_opening_element [95, 24] - [95, 55]
name: (identifier [95, 25] - [95, 29])
attribute: (jsx_attribute [95, 30] - [95, 54]
(property_identifier [95, 30] - [95, 35])
(string [95, 36] - [95, 54]
(string_fragment [95, 37] - [95, 53]))))
(jsx_expression [96, 26] - [96, 56]
(binary_expression [96, 27] - [96, 55]
left: (member_expression [96, 27] - [96, 50]
object: (identifier [96, 27] - [96, 30])
property: (property_identifier [96, 31] - [96, 50]))
right: (number [96, 54] - [96, 55])))
(jsx_text [96, 56] - [97, 24])
close_tag: (jsx_closing_element [97, 24] - [97, 31]
name: (identifier [97, 26] - [97, 30])))
close_tag: (jsx_closing_element [98, 22] - [98, 27]
name: (identifier [98, 24] - [98, 26])))
close_tag: (jsx_closing_element [99, 20] - [99, 25]
name: (identifier [99, 22] - [99, 24]))))))))))
close_tag: (jsx_closing_element [102, 12] - [102, 20]
name: (identifier [102, 14] - [102, 19])))
close_tag: (jsx_closing_element [103, 10] - [103, 18]
name: (identifier [103, 12] - [103, 17])))
close_tag: (jsx_closing_element [104, 8] - [104, 14]
name: (identifier [104, 10] - [104, 13])))
close_tag: (jsx_closing_element [105, 6] - [105, 12]
name: (identifier [105, 8] - [105, 11])))
(jsx_expression [107, 6] - [107, 40]
(comment [107, 7] - [107, 39]))
(jsx_element [108, 6] - [138, 12]
open_tag: (jsx_opening_element [108, 6] - [112, 7]
name: (identifier [108, 7] - [108, 10])
attribute: (jsx_attribute [109, 8] - [109, 27]
(property_identifier [109, 8] - [109, 10])
(string [109, 11] - [109, 27]
(string_fragment [109, 12] - [109, 26])))
attribute: (jsx_attribute [110, 8] - [110, 27]
(property_identifier [110, 8] - [110, 13])
(string [110, 14] - [110, 27]
(string_fragment [110, 15] - [110, 26])))
attribute: (jsx_attribute [111, 8] - [111, 65]
(property_identifier [111, 8] - [111, 13])
(string [111, 14] - [111, 65]
(string_fragment [111, 15] - [111, 64]))))
(jsx_expression [113, 8] - [137, 11]
(call_expression [113, 9] - [137, 10]
function: (member_expression [113, 9] - [113, 17]
object: (identifier [113, 9] - [113, 13])
property: (property_identifier [113, 14] - [113, 17]))
arguments: (arguments [113, 17] - [137, 10]
(arrow_function [113, 18] - [137, 9]
parameters: (formal_parameters [113, 18] - [113, 23]
(required_parameter [113, 19] - [113, 22]
pattern: (identifier [113, 19] - [113, 22])))
body: (parenthesized_expression [113, 27] - [137, 9]
(jsx_element [114, 10] - [136, 16]
open_tag: (jsx_opening_element [114, 10] - [121, 11]
name: (identifier [114, 11] - [114, 14])
attribute: (jsx_attribute [115, 12] - [115, 33]
(property_identifier [115, 12] - [115, 17])
(string [115, 18] - [115, 33]
(string_fragment [115, 19] - [115, 32])))
attribute: (jsx_attribute [116, 12] - [116, 24]
(property_identifier [116, 12] - [116, 15])
(jsx_expression [116, 16] - [116, 24]
(member_expression [116, 17] - [116, 23]
object: (identifier [116, 17] - [116, 20])
property: (property_identifier [116, 21] - [116, 23]))))
attribute: (jsx_attribute [117, 12] - [119, 29]
(property_identifier [117, 12] - [117, 23])
(jsx_expression [117, 24] - [119, 29]
(call_expression [117, 25] - [119, 28]
function: (member_expression [117, 25] - [119, 26]
object: (template_string [117, 25] - [119, 14]
(template_substitution [117, 26] - [117, 37]
(member_expression [117, 28] - [117, 36]
object: (identifier [117, 28] - [117, 31])
property: (property_identifier [117, 32] - [117, 36])))
(string_fragment [117, 37] - [117, 38])
(template_substitution [117, 38] - [117, 57]
(binary_expression [117, 40] - [117, 56]
left: (member_expression [117, 40] - [117, 50]
object: (identifier [117, 40] - [117, 43])
property: (property_identifier [117, 44] - [117, 50]))
right: (string [117, 54] - [117, 56])))
(string_fragment [117, 57] - [117, 58])
(template_substitution [117, 58] - [119, 13]
(binary_expression [118, 14] - [118, 33]
left: (member_expression [118, 14] - [118, 27]
object: (identifier [118, 14] - [118, 17])
property: (property_identifier [118, 18] - [118, 27]))
right: (string [118, 31] - [118, 33]))))
property: (property_identifier [119, 15] - [119, 26]))
arguments: (arguments [119, 26] - [119, 28]))))
attribute: (jsx_attribute [120, 12] - [120, 37]
(property_identifier [120, 12] - [120, 17])
(string [120, 18] - [120, 37]
(string_fragment [120, 19] - [120, 36]))))
(jsx_element [122, 12] - [129, 18]
open_tag: (jsx_opening_element [122, 12] - [122, 120]
name: (identifier [122, 13] - [122, 16])
attribute: (jsx_attribute [122, 17] - [122, 119]
(property_identifier [122, 17] - [122, 22])
(string [122, 23] - [122, 119]
(string_fragment [122, 24] - [122, 118]))))
(jsx_element [123, 14] - [125, 19]
open_tag: (jsx_opening_element [123, 14] - [123, 85]
name: (identifier [123, 15] - [123, 17])
attribute: (jsx_attribute [123, 18] - [123, 84]
(property_identifier [123, 18] - [123, 23])
(string [123, 24] - [123, 84]
(string_fragment [123, 25] - [123, 83]))))
(jsx_expression [124, 16] - [124, 26]
(member_expression [124, 17] - [124, 25]
object: (identifier [124, 17] - [124, 20])
property: (property_identifier [124, 21] - [124, 25])))
close_tag: (jsx_closing_element [125, 14] - [125, 19]
name: (identifier [125, 16] - [125, 18])))
(jsx_element [126, 14] - [128, 21]
open_tag: (jsx_opening_element [126, 14] - [126, 45]
name: (identifier [126, 15] - [126, 19])
attribute: (jsx_attribute [126, 20] - [126, 44]
(property_identifier [126, 20] - [126, 25])
(string [126, 26] - [126, 44]
(string_fragment [126, 27] - [126, 43]))))
(jsx_expression [127, 16] - [127, 46]
(binary_expression [127, 17] - [127, 45]
left: (member_expression [127, 17] - [127, 40]
object: (identifier [127, 17] - [127, 20])
property: (property_identifier [127, 21] - [127, 40]))
right: (number [127, 44] - [127, 45])))
(jsx_text [127, 46] - [128, 14])
close_tag: (jsx_closing_element [128, 14] - [128, 21]
name: (identifier [128, 16] - [128, 20])))
close_tag: (jsx_closing_element [129, 12] - [129, 18]
name: (identifier [129, 14] - [129, 17])))
(jsx_element [130, 12] - [132, 18]
open_tag: (jsx_opening_element [130, 12] - [130, 122]
name: (identifier [130, 13] - [130, 16])
attribute: (jsx_attribute [130, 17] - [130, 121]
(property_identifier [130, 17] - [130, 22])
(string [130, 23] - [130, 121]
(string_fragment [130, 24] - [130, 120]))))
(jsx_expression [131, 14] - [131, 29]
(member_expression [131, 15] - [131, 28]
object: (identifier [131, 15] - [131, 18])
property: (property_identifier [131, 19] - [131, 28])))
close_tag: (jsx_closing_element [132, 12] - [132, 18]
name: (identifier [132, 14] - [132, 17])))
(jsx_element [133, 12] - [135, 18]
open_tag: (jsx_opening_element [133, 12] - [133, 71]
name: (identifier [133, 13] - [133, 16])
attribute: (jsx_attribute [133, 17] - [133, 70]
(property_identifier [133, 17] - [133, 22])
(string [133, 23] - [133, 70]
(string_fragment [133, 24] - [133, 69]))))
(jsx_text [133, 71] - [134, 22])
(jsx_expression [134, 22] - [134, 41]
(binary_expression [134, 23] - [134, 40]
left: (member_expression [134, 23] - [134, 33]
object: (identifier [134, 23] - [134, 26])
property: (property_identifier [134, 27] - [134, 33]))
right: (string [134, 37] - [134, 40]
(string_fragment [134, 38] - [134, 39]))))
close_tag: (jsx_closing_element [135, 12] - [135, 18]
name: (identifier [135, 14] - [135, 17])))
close_tag: (jsx_closing_element [136, 10] - [136, 16]
name: (identifier [136, 12] - [136, 15]))))))))
close_tag: (jsx_closing_element [138, 6] - [138, 12]
name: (identifier [138, 8] - [138, 11])))
(jsx_element [140, 6] - [151, 14]
open_tag: (jsx_opening_element [140, 6] - [140, 13]
name: (identifier [140, 7] - [140, 12]))
(jsx_expression [141, 8] - [150, 10]
(template_string [141, 9] - [150, 9]
(string_fragment [141, 10] - [150, 8])))
close_tag: (jsx_closing_element [151, 6] - [151, 14]
name: (identifier [151, 8] - [151, 13])))
(jsx_element [153, 6] - [153, 54]
open_tag: (jsx_opening_element [153, 6] - [153, 45]
name: (identifier [153, 7] - [153, 13])
attribute: (jsx_attribute [153, 14] - [153, 44]
(property_identifier [153, 14] - [153, 17])
(string [153, 18] - [153, 44]
(string_fragment [153, 19] - [153, 43]))))
close_tag: (jsx_closing_element [153, 45] - [153, 54]
name: (identifier [153, 47] - [153, 53])))
close_tag: (jsx_closing_element [154, 4] - [154, 26]
name: (identifier [154, 6] - [154, 25])))))))))))

View File

@ -1,194 +0,0 @@
(program [0, 0] - [90, 0]
(export_statement [0, 0] - [89, 2]
declaration: (lexical_declaration [0, 7] - [89, 2]
(variable_declarator [0, 13] - [89, 1]
name: (identifier [0, 13] - [0, 41])
value: (arrow_function [0, 44] - [89, 1]
parameters: (formal_parameters [0, 44] - [0, 46])
body: (statement_block [0, 50] - [89, 1]
(return_statement [1, 2] - [88, 4]
(parenthesized_expression [1, 9] - [88, 3]
(jsx_element [2, 4] - [87, 10]
open_tag: (jsx_opening_element [2, 4] - [6, 5]
name: (identifier [2, 5] - [2, 8])
attribute: (jsx_attribute [3, 6] - [3, 26]
(property_identifier [3, 6] - [3, 8])
(string [3, 9] - [3, 26]
(string_fragment [3, 10] - [3, 25])))
attribute: (jsx_attribute [4, 6] - [4, 28]
(property_identifier [4, 6] - [4, 11])
(string [4, 12] - [4, 28]
(string_fragment [4, 13] - [4, 27])))
attribute: (jsx_attribute [5, 6] - [5, 142]
(property_identifier [5, 6] - [5, 11])
(string [5, 12] - [5, 142]
(string_fragment [5, 13] - [5, 141]))))
(jsx_element [7, 6] - [86, 12]
open_tag: (jsx_opening_element [7, 6] - [10, 7]
name: (identifier [7, 7] - [7, 10])
attribute: (jsx_attribute [8, 8] - [8, 28]
(property_identifier [8, 8] - [8, 13])
(string [8, 14] - [8, 28]
(string_fragment [8, 15] - [8, 27])))
attribute: (jsx_attribute [9, 8] - [9, 208]
(property_identifier [9, 8] - [9, 13])
(string [9, 14] - [9, 208]
(string_fragment [9, 15] - [9, 207]))))
(jsx_element [11, 8] - [39, 14]
open_tag: (jsx_opening_element [11, 8] - [11, 138]
name: (identifier [11, 9] - [11, 12])
attribute: (jsx_attribute [11, 13] - [11, 137]
(property_identifier [11, 13] - [11, 18])
(string [11, 19] - [11, 137]
(string_fragment [11, 20] - [11, 136]))))
(jsx_element [12, 10] - [27, 16]
open_tag: (jsx_opening_element [12, 10] - [12, 95]
name: (identifier [12, 11] - [12, 14])
attribute: (jsx_attribute [12, 15] - [12, 94]
(property_identifier [12, 15] - [12, 20])
(string [12, 21] - [12, 94]
(string_fragment [12, 22] - [12, 93]))))
(jsx_element [13, 12] - [18, 17]
open_tag: (jsx_opening_element [13, 12] - [16, 13]
name: (identifier [13, 13] - [13, 15])
attribute: (jsx_attribute [14, 14] - [14, 35]
(property_identifier [14, 14] - [14, 16])
(string [14, 17] - [14, 35]
(string_fragment [14, 18] - [14, 34])))
attribute: (jsx_attribute [15, 14] - [15, 80]
(property_identifier [15, 14] - [15, 19])
(string [15, 20] - [15, 80]
(string_fragment [15, 21] - [15, 79]))))
(jsx_text [16, 13] - [18, 12])
close_tag: (jsx_closing_element [18, 12] - [18, 17]
name: (identifier [18, 14] - [18, 16])))
(jsx_element [19, 12] - [26, 21]
open_tag: (jsx_opening_element [19, 12] - [24, 13]
name: (identifier [19, 13] - [19, 19])
attribute: (jsx_attribute [20, 14] - [20, 27]
(property_identifier [20, 14] - [20, 18])
(string [20, 19] - [20, 27]
(string_fragment [20, 20] - [20, 26])))
attribute: (jsx_attribute [21, 14] - [21, 46]
(property_identifier [21, 14] - [21, 21])
(string [21, 22] - [21, 46]
(string_fragment [21, 23] - [21, 45])))
attribute: (jsx_attribute [22, 14] - [22, 131]
(property_identifier [22, 14] - [22, 19])
(string [22, 20] - [22, 131]
(string_fragment [22, 21] - [22, 130])))
attribute: (jsx_attribute [23, 14] - [23, 39]
(property_identifier [23, 14] - [23, 24])
(string [23, 25] - [23, 39]
(string_fragment [23, 26] - [23, 38]))))
(html_character_reference [25, 14] - [25, 21])
close_tag: (jsx_closing_element [26, 12] - [26, 21]
name: (identifier [26, 14] - [26, 20])))
close_tag: (jsx_closing_element [27, 10] - [27, 16]
name: (identifier [27, 12] - [27, 15])))
(jsx_element [28, 10] - [38, 16]
open_tag: (jsx_opening_element [28, 10] - [31, 11]
name: (identifier [28, 11] - [28, 14])
attribute: (jsx_attribute [29, 12] - [29, 35]
(property_identifier [29, 12] - [29, 14])
(string [29, 15] - [29, 35]
(string_fragment [29, 16] - [29, 34])))
attribute: (jsx_attribute [30, 12] - [30, 68]
(property_identifier [30, 12] - [30, 17])
(string [30, 18] - [30, 68]
(string_fragment [30, 19] - [30, 67]))))
(jsx_text [31, 11] - [32, 26])
(jsx_element [32, 26] - [32, 64]
open_tag: (jsx_opening_element [32, 26] - [32, 56]
name: (identifier [32, 27] - [32, 31])
attribute: (jsx_attribute [32, 32] - [32, 55]
(property_identifier [32, 32] - [32, 34])
(string [32, 35] - [32, 55]
(string_fragment [32, 36] - [32, 54]))))
(jsx_text [32, 56] - [32, 57])
close_tag: (jsx_closing_element [32, 57] - [32, 64]
name: (identifier [32, 59] - [32, 63])))
(jsx_text [32, 64] - [32, 66])
(jsx_expression [32, 66] - [32, 71]
(string [32, 67] - [32, 70]
(string_fragment [32, 68] - [32, 69])))
(jsx_element [33, 12] - [33, 46]
open_tag: (jsx_opening_element [33, 12] - [33, 38]
name: (identifier [33, 13] - [33, 17])
attribute: (jsx_attribute [33, 18] - [33, 37]
(property_identifier [33, 18] - [33, 20])
(string [33, 21] - [33, 37]
(string_fragment [33, 22] - [33, 36]))))
(jsx_text [33, 38] - [33, 39])
close_tag: (jsx_closing_element [33, 39] - [33, 46]
name: (identifier [33, 41] - [33, 45])))
(jsx_text [33, 46] - [33, 63])
(jsx_expression [33, 63] - [33, 68]
(string [33, 64] - [33, 67]
(string_fragment [33, 65] - [33, 66])))
(jsx_element [34, 12] - [34, 65]
open_tag: (jsx_opening_element [34, 12] - [34, 44]
name: (identifier [34, 13] - [34, 17])
attribute: (jsx_attribute [34, 18] - [34, 43]
(property_identifier [34, 18] - [34, 20])
(string [34, 21] - [34, 43]
(string_fragment [34, 22] - [34, 42]))))
(jsx_text [34, 44] - [34, 58])
close_tag: (jsx_closing_element [34, 58] - [34, 65]
name: (identifier [34, 60] - [34, 64])))
(jsx_expression [34, 65] - [34, 70]
(string [34, 66] - [34, 69]
(string_fragment [34, 67] - [34, 68])))
(jsx_text [34, 70] - [35, 16])
(jsx_element [35, 16] - [37, 19]
open_tag: (jsx_opening_element [35, 16] - [35, 48]
name: (identifier [35, 17] - [35, 21])
attribute: (jsx_attribute [35, 22] - [35, 47]
(property_identifier [35, 22] - [35, 24])
(string [35, 25] - [35, 47]
(string_fragment [35, 26] - [35, 46]))))
(jsx_text [35, 48] - [37, 12])
close_tag: (jsx_closing_element [37, 12] - [37, 19]
name: (identifier [37, 14] - [37, 18])))
(jsx_text [37, 19] - [38, 10])
close_tag: (jsx_closing_element [38, 10] - [38, 16]
name: (identifier [38, 12] - [38, 15])))
close_tag: (jsx_closing_element [39, 8] - [39, 14]
name: (identifier [39, 10] - [39, 13])))
(jsx_element [41, 8] - [49, 14]
open_tag: (jsx_opening_element [41, 8] - [44, 9]
name: (identifier [41, 9] - [41, 12])
attribute: (jsx_attribute [42, 10] - [42, 37]
(property_identifier [42, 10] - [42, 12])
(string [42, 13] - [42, 37]
(string_fragment [42, 14] - [42, 36])))
attribute: (jsx_attribute [43, 10] - [43, 61]
(property_identifier [43, 10] - [43, 15])
(string [43, 16] - [43, 61]
(string_fragment [43, 17] - [43, 60]))))
(jsx_expression [45, 10] - [45, 52]
(comment [45, 11] - [45, 51]))
(jsx_element [46, 10] - [48, 16]
open_tag: (jsx_opening_element [46, 10] - [46, 143]
name: (identifier [46, 11] - [46, 14])
attribute: (jsx_attribute [46, 15] - [46, 142]
(property_identifier [46, 15] - [46, 20])
(string [46, 21] - [46, 142]
(string_fragment [46, 22] - [46, 141]))))
(jsx_text [46, 143] - [48, 10])
close_tag: (jsx_closing_element [48, 10] - [48, 16]
name: (identifier [48, 12] - [48, 15])))
close_tag: (jsx_closing_element [49, 8] - [49, 14]
name: (identifier [49, 10] - [49, 13])))
(jsx_element [51, 8] - [85, 16]
open_tag: (jsx_opening_element [51, 8] - [51, 15]
name: (identifier [51, 9] - [51, 14]))
(jsx_expression [52, 10] - [84, 12]
(template_string [52, 11] - [84, 11]
(string_fragment [52, 12] - [84, 10])))
close_tag: (jsx_closing_element [85, 8] - [85, 16]
name: (identifier [85, 10] - [85, 15])))
close_tag: (jsx_closing_element [86, 6] - [86, 12]
name: (identifier [86, 8] - [86, 11])))
close_tag: (jsx_closing_element [87, 4] - [87, 10]
name: (identifier [87, 6] - [87, 9])))))))))))

View File

@ -1,770 +0,0 @@
(program [0, 0] - [187, 0]
(import_statement [0, 0] - [0, 58]
(import_clause [0, 7] - [0, 23]
(named_imports [0, 7] - [0, 23]
(import_specifier [0, 9] - [0, 21]
name: (identifier [0, 9] - [0, 21]))))
source: (string [0, 29] - [0, 57]
(string_fragment [0, 30] - [0, 56])))
(import_statement [1, 0] - [1, 52]
(import_clause [1, 7] - [1, 20]
(named_imports [1, 7] - [1, 20]
(import_specifier [1, 9] - [1, 18]
name: (identifier [1, 9] - [1, 18]))))
source: (string [1, 26] - [1, 51]
(string_fragment [1, 27] - [1, 50])))
(import_statement [2, 0] - [2, 37]
(import_clause [2, 7] - [2, 21]
(named_imports [2, 7] - [2, 21]
(import_specifier [2, 9] - [2, 19]
name: (identifier [2, 9] - [2, 19]))))
source: (string [2, 27] - [2, 36]
(string_fragment [2, 28] - [2, 35])))
(import_statement [3, 0] - [3, 62]
(import_clause [3, 7] - [3, 36]
(named_imports [3, 7] - [3, 36]
(import_specifier [3, 9] - [3, 24]
name: (identifier [3, 9] - [3, 24]))
(import_specifier [3, 26] - [3, 34]
name: (identifier [3, 26] - [3, 34]))))
source: (string [3, 42] - [3, 61]
(string_fragment [3, 43] - [3, 60])))
(import_statement [4, 0] - [4, 53]
(import_clause [4, 7] - [4, 30]
(named_imports [4, 7] - [4, 30]
(import_specifier [4, 9] - [4, 28]
name: (identifier [4, 9] - [4, 28]))))
source: (string [4, 36] - [4, 52]
(string_fragment [4, 37] - [4, 51])))
(import_statement [5, 0] - [5, 37]
(import_clause [5, 7] - [5, 17]
(named_imports [5, 7] - [5, 17]
(import_specifier [5, 9] - [5, 15]
name: (identifier [5, 9] - [5, 15]))))
source: (string [5, 23] - [5, 36]
(string_fragment [5, 24] - [5, 35])))
(lexical_declaration [7, 0] - [7, 44]
(variable_declarator [7, 4] - [7, 43]
name: (identifier [7, 4] - [7, 21])
type: (type_annotation [7, 21] - [7, 36]
(union_type [7, 23] - [7, 36]
(predefined_type [7, 23] - [7, 29])
(literal_type [7, 32] - [7, 36]
(null [7, 32] - [7, 36]))))
value: (null [7, 39] - [7, 43])))
(lexical_declaration [8, 0] - [8, 23]
(variable_declarator [8, 4] - [8, 22]
name: (identifier [8, 4] - [8, 14])
value: (false [8, 17] - [8, 22])))
(comment [10, 0] - [14, 3])
(export_statement [15, 0] - [49, 2]
declaration: (lexical_declaration [15, 7] - [49, 2]
(variable_declarator [15, 11] - [49, 1]
name: (identifier [15, 11] - [15, 19])
value: (function_expression [15, 22] - [49, 1]
name: (identifier [15, 31] - [15, 39])
parameters: (formal_parameters [15, 39] - [21, 1]
(required_parameter [16, 2] - [16, 23]
pattern: (identifier [16, 2] - [16, 8])
type: (type_annotation [16, 8] - [16, 23]
(union_type [16, 10] - [16, 23]
(predefined_type [16, 10] - [16, 16])
(literal_type [16, 19] - [16, 23]
(null [16, 19] - [16, 23])))))
(required_parameter [17, 2] - [17, 16]
pattern: (identifier [17, 2] - [17, 8])
type: (type_annotation [17, 8] - [17, 16]
(predefined_type [17, 10] - [17, 16])))
(required_parameter [18, 2] - [18, 25]
pattern: (identifier [18, 2] - [18, 10])
type: (type_annotation [18, 10] - [18, 25]
(union_type [18, 12] - [18, 25]
(predefined_type [18, 12] - [18, 18])
(literal_type [18, 21] - [18, 25]
(null [18, 21] - [18, 25])))))
(required_parameter [19, 2] - [19, 41]
pattern: (identifier [19, 2] - [19, 9])
type: (type_annotation [19, 9] - [19, 41]
(union_type [19, 11] - [19, 41]
(generic_type [19, 11] - [19, 34]
name: (type_identifier [19, 11] - [19, 17])
type_arguments: (type_arguments [19, 17] - [19, 34]
(predefined_type [19, 18] - [19, 24])
(predefined_type [19, 26] - [19, 33])))
(literal_type [19, 37] - [19, 41]
(null [19, 37] - [19, 41])))))
(required_parameter [20, 2] - [20, 19]
pattern: (identifier [20, 2] - [20, 11])
type: (type_annotation [20, 11] - [20, 19]
(predefined_type [20, 13] - [20, 19]))))
return_type: (type_annotation [21, 1] - [21, 7]
(predefined_type [21, 3] - [21, 7]))
body: (statement_block [21, 8] - [49, 1]
(comment [22, 2] - [22, 20])
(expression_statement [23, 2] - [48, 7]
(call_expression [23, 2] - [48, 6]
function: (parenthesized_expression [23, 2] - [48, 4]
(arrow_function [23, 3] - [48, 3]
parameters: (formal_parameters [23, 9] - [23, 11])
body: (statement_block [23, 15] - [48, 3]
(try_statement [24, 4] - [47, 5]
body: (statement_block [24, 8] - [44, 5]
(lexical_declaration [25, 6] - [32, 8]
(variable_declarator [25, 12] - [32, 7]
name: (identifier [25, 12] - [25, 20])
value: (object [25, 23] - [32, 7]
(shorthand_property_identifier [26, 8] - [26, 14])
(shorthand_property_identifier [27, 8] - [27, 14])
(shorthand_property_identifier [28, 8] - [28, 16])
(shorthand_property_identifier [29, 8] - [29, 15])
(shorthand_property_identifier [30, 8] - [30, 17])
(pair [31, 8] - [31, 29]
key: (property_identifier [31, 8] - [31, 17])
value: (call_expression [31, 19] - [31, 29]
function: (member_expression [31, 19] - [31, 27]
object: (identifier [31, 19] - [31, 23])
property: (property_identifier [31, 24] - [31, 27]))
arguments: (arguments [31, 27] - [31, 29]))))))
(lexical_declaration [33, 6] - [33, 48]
(variable_declarator [33, 12] - [33, 47]
name: (identifier [33, 12] - [33, 20])
value: (call_expression [33, 23] - [33, 47]
function: (member_expression [33, 23] - [33, 37]
object: (identifier [33, 23] - [33, 27])
property: (property_identifier [33, 28] - [33, 37]))
arguments: (arguments [33, 37] - [33, 47]
(identifier [33, 38] - [33, 46])))))
(lexical_declaration [34, 6] - [34, 60]
(variable_declarator [34, 12] - [34, 59]
name: (identifier [34, 12] - [34, 22])
value: (call_expression [34, 25] - [34, 59]
function: (member_expression [34, 25] - [34, 49]
object: (new_expression [34, 25] - [34, 42]
constructor: (identifier [34, 29] - [34, 40])
arguments: (arguments [34, 40] - [34, 42]))
property: (property_identifier [34, 43] - [34, 49]))
arguments: (arguments [34, 49] - [34, 59]
(identifier [34, 50] - [34, 58])))))
(lexical_declaration [35, 6] - [35, 52]
(variable_declarator [35, 12] - [35, 51]
name: (identifier [35, 12] - [35, 22])
value: (await_expression [35, 25] - [35, 51]
(call_expression [35, 31] - [35, 51]
function: (identifier [35, 31] - [35, 39])
arguments: (arguments [35, 39] - [35, 51]
(identifier [35, 40] - [35, 50]))))))
(lexical_declaration [36, 6] - [36, 48]
(variable_declarator [36, 12] - [36, 47]
name: (identifier [36, 12] - [36, 23])
value: (call_expression [36, 26] - [36, 47]
function: (identifier [36, 26] - [36, 35])
arguments: (arguments [36, 35] - [36, 47]
(identifier [36, 36] - [36, 46])))))
(expression_statement [38, 6] - [43, 8]
(await_expression [38, 6] - [43, 7]
(call_expression [38, 12] - [43, 7]
function: (member_expression [38, 12] - [38, 26]
object: (identifier [38, 12] - [38, 22])
property: (property_identifier [38, 23] - [38, 26]))
arguments: (template_string [38, 26] - [43, 7]
(string_fragment [38, 27] - [40, 16])
(template_substitution [40, 16] - [40, 25]
(identifier [40, 18] - [40, 24]))
(string_fragment [40, 25] - [40, 27])
(template_substitution [40, 27] - [40, 36]
(identifier [40, 29] - [40, 35]))
(string_fragment [40, 36] - [40, 38])
(template_substitution [40, 38] - [40, 49]
(identifier [40, 40] - [40, 48]))
(string_fragment [40, 49] - [40, 51])
(template_substitution [40, 51] - [42, 7]
(ternary_expression [41, 8] - [41, 48]
condition: (identifier [41, 8] - [41, 15])
consequence: (call_expression [41, 18] - [41, 41]
function: (member_expression [41, 18] - [41, 32]
object: (identifier [41, 18] - [41, 22])
property: (property_identifier [41, 23] - [41, 32]))
arguments: (arguments [41, 32] - [41, 41]
(identifier [41, 33] - [41, 40])))
alternative: (null [41, 44] - [41, 48])))
(string_fragment [42, 7] - [42, 9])
(template_substitution [42, 9] - [42, 21]
(identifier [42, 11] - [42, 20]))
(string_fragment [42, 21] - [42, 23])
(template_substitution [42, 23] - [42, 37]
(identifier [42, 25] - [42, 36]))
(string_fragment [42, 37] - [43, 6]))))))
handler: (catch_clause [44, 6] - [47, 5]
parameter: (identifier [44, 13] - [44, 18])
type: (type_annotation [44, 18] - [44, 23]
(predefined_type [44, 20] - [44, 23]))
body: (statement_block [44, 25] - [47, 5]
(lexical_declaration [45, 6] - [45, 65]
(variable_declarator [45, 12] - [45, 64]
name: (identifier [45, 12] - [45, 15])
value: (binary_expression [45, 18] - [45, 64]
left: (binary_expression [45, 18] - [45, 47]
left: (member_expression [45, 18] - [45, 29]
object: (identifier [45, 18] - [45, 23])
optional_chain: (optional_chain [45, 23] - [45, 25])
property: (property_identifier [45, 25] - [45, 29]))
right: (member_expression [45, 33] - [45, 47]
object: (identifier [45, 33] - [45, 38])
optional_chain: (optional_chain [45, 38] - [45, 40])
property: (property_identifier [45, 40] - [45, 47])))
right: (call_expression [45, 51] - [45, 64]
function: (identifier [45, 51] - [45, 57])
arguments: (arguments [45, 57] - [45, 64]
(identifier [45, 58] - [45, 63]))))))
(expression_statement [46, 6] - [46, 76]
(call_expression [46, 6] - [46, 75]
function: (member_expression [46, 6] - [46, 19]
object: (identifier [46, 6] - [46, 13])
property: (property_identifier [46, 14] - [46, 19]))
arguments: (arguments [46, 19] - [46, 75]
(template_string [46, 20] - [46, 74]
(string_fragment [46, 21] - [46, 67])
(template_substitution [46, 67] - [46, 73]
(identifier [46, 69] - [46, 72]))))))))))))
arguments: (arguments [48, 4] - [48, 6]))))))))
(export_statement [51, 0] - [164, 1]
declaration: (function_declaration [51, 7] - [164, 1]
name: (identifier [51, 22] - [51, 27])
parameters: (formal_parameters [51, 27] - [51, 29])
return_type: (type_annotation [51, 29] - [51, 44]
(generic_type [51, 31] - [51, 44]
name: (type_identifier [51, 31] - [51, 38])
type_arguments: (type_arguments [51, 38] - [51, 44]
(predefined_type [51, 39] - [51, 43]))))
body: (statement_block [51, 45] - [164, 1]
(if_statement [52, 2] - [52, 25]
condition: (parenthesized_expression [52, 5] - [52, 17]
(identifier [52, 6] - [52, 16]))
consequence: (return_statement [52, 18] - [52, 25]))
(expression_statement [53, 2] - [53, 20]
(assignment_expression [53, 2] - [53, 19]
left: (identifier [53, 2] - [53, 12])
right: (true [53, 15] - [53, 19])))
(try_statement [55, 2] - [163, 3]
body: (statement_block [55, 6] - [159, 3]
(lexical_declaration [56, 4] - [58, 6]
(variable_declarator [56, 10] - [58, 5]
name: (identifier [56, 10] - [56, 19])
value: (await_expression [56, 22] - [58, 5]
(call_expression [56, 28] - [58, 5]
function: (member_expression [56, 28] - [56, 42]
object: (identifier [56, 28] - [56, 38])
property: (property_identifier [56, 39] - [56, 42]))
arguments: (template_string [56, 42] - [58, 5]
(string_fragment [56, 43] - [58, 4]))))))
(lexical_declaration [59, 4] - [61, 10]
(variable_declarator [59, 10] - [61, 9]
name: (identifier [59, 10] - [59, 22])
value: (ternary_expression [59, 25] - [61, 9]
condition: (binary_expression [59, 25] - [59, 45]
left: (member_expression [59, 25] - [59, 41]
object: (identifier [59, 25] - [59, 34])
property: (property_identifier [59, 35] - [59, 41]))
right: (number [59, 44] - [59, 45]))
consequence: (call_expression [60, 8] - [60, 44]
function: (identifier [60, 8] - [60, 16])
arguments: (arguments [60, 16] - [60, 44]
(member_expression [60, 17] - [60, 39]
object: (subscript_expression [60, 17] - [60, 29]
object: (identifier [60, 17] - [60, 26])
index: (number [60, 27] - [60, 28]))
property: (property_identifier [60, 30] - [60, 39]))
(number [60, 41] - [60, 43])))
alternative: (number [61, 8] - [61, 9]))))
(lexical_declaration [63, 4] - [65, 6]
(variable_declarator [63, 10] - [65, 5]
name: (identifier [63, 10] - [63, 26])
value: (await_expression [63, 29] - [65, 5]
(call_expression [63, 35] - [65, 5]
function: (member_expression [63, 35] - [63, 49]
object: (identifier [63, 35] - [63, 45])
property: (property_identifier [63, 46] - [63, 49]))
arguments: (template_string [63, 49] - [65, 5]
(string_fragment [63, 50] - [65, 4]))))))
(lexical_declaration [67, 4] - [67, 52]
(variable_declarator [67, 10] - [67, 51]
name: (identifier [67, 10] - [67, 25])
value: (member_expression [67, 28] - [67, 51]
object: (identifier [67, 28] - [67, 44])
property: (property_identifier [67, 45] - [67, 51]))))
(if_statement [69, 4] - [158, 5]
condition: (parenthesized_expression [69, 7] - [69, 39]
(binary_expression [69, 8] - [69, 38]
left: (identifier [69, 8] - [69, 23])
right: (identifier [69, 26] - [69, 38])))
consequence: (statement_block [69, 40] - [158, 5]
(lexical_declaration [70, 6] - [77, 9]
(variable_declarator [70, 12] - [77, 8]
name: (identifier [70, 12] - [70, 22])
value: (call_expression [70, 25] - [77, 8]
function: (member_expression [70, 25] - [70, 45]
object: (identifier [70, 25] - [70, 41])
property: (property_identifier [70, 42] - [70, 45]))
arguments: (arguments [70, 45] - [77, 8]
(arrow_function [70, 46] - [77, 7]
parameters: (formal_parameters [70, 46] - [70, 56]
(required_parameter [70, 47] - [70, 55]
pattern: (identifier [70, 47] - [70, 50])
type: (type_annotation [70, 50] - [70, 55]
(predefined_type [70, 52] - [70, 55]))))
body: (statement_block [70, 60] - [77, 7]
(lexical_declaration [71, 8] - [71, 34]
(variable_declarator [71, 14] - [71, 33]
name: (identifier [71, 14] - [71, 17])
value: (member_expression [71, 20] - [71, 33]
object: (identifier [71, 20] - [71, 23])
property: (property_identifier [71, 24] - [71, 33]))))
(lexical_declaration [72, 8] - [72, 53]
(variable_declarator [72, 14] - [72, 52]
name: (identifier [72, 14] - [72, 19])
value: (new_expression [72, 22] - [72, 52]
constructor: (identifier [72, 26] - [72, 36])
arguments: (arguments [72, 36] - [72, 52]
(binary_expression [72, 37] - [72, 51]
left: (member_expression [72, 37] - [72, 47]
object: (identifier [72, 37] - [72, 40])
property: (property_identifier [72, 41] - [72, 47]))
right: (number [72, 50] - [72, 51]))))))
(for_statement [73, 8] - [75, 9]
initializer: (lexical_declaration [73, 13] - [73, 23]
(variable_declarator [73, 17] - [73, 22]
name: (identifier [73, 17] - [73, 18])
value: (number [73, 21] - [73, 22])))
condition: (binary_expression [73, 24] - [73, 38]
left: (identifier [73, 24] - [73, 25])
right: (member_expression [73, 28] - [73, 38]
object: (identifier [73, 28] - [73, 31])
property: (property_identifier [73, 32] - [73, 38])))
increment: (augmented_assignment_expression [73, 40] - [73, 46]
left: (identifier [73, 40] - [73, 41])
right: (number [73, 45] - [73, 46]))
body: (statement_block [73, 48] - [75, 9]
(expression_statement [74, 10] - [74, 63]
(assignment_expression [74, 10] - [74, 62]
left: (subscript_expression [74, 10] - [74, 22]
object: (identifier [74, 10] - [74, 15])
index: (binary_expression [74, 16] - [74, 21]
left: (identifier [74, 16] - [74, 17])
right: (number [74, 20] - [74, 21])))
right: (call_expression [74, 25] - [74, 62]
function: (identifier [74, 25] - [74, 33])
arguments: (arguments [74, 33] - [74, 62]
(call_expression [74, 34] - [74, 57]
function: (member_expression [74, 34] - [74, 47]
object: (identifier [74, 34] - [74, 37])
property: (property_identifier [74, 38] - [74, 47]))
arguments: (arguments [74, 47] - [74, 57]
(identifier [74, 48] - [74, 49])
(binary_expression [74, 51] - [74, 56]
left: (identifier [74, 51] - [74, 52])
right: (number [74, 55] - [74, 56]))))
(number [74, 59] - [74, 61])))))))
(return_statement [76, 8] - [76, 21]
(identifier [76, 15] - [76, 20]))))))))
(lexical_declaration [79, 6] - [79, 62]
(variable_declarator [79, 12] - [79, 61]
name: (identifier [79, 12] - [79, 25])
value: (await_expression [79, 28] - [79, 61]
(call_expression [79, 34] - [79, 61]
function: (identifier [79, 34] - [79, 49])
arguments: (arguments [79, 49] - [79, 61]
(identifier [79, 50] - [79, 60]))))))
(lexical_declaration [80, 6] - [80, 51]
(variable_declarator [80, 12] - [80, 50]
name: (identifier [80, 12] - [80, 23])
value: (call_expression [80, 26] - [80, 50]
function: (identifier [80, 26] - [80, 35])
arguments: (arguments [80, 35] - [80, 50]
(identifier [80, 36] - [80, 49])))))
(lexical_declaration [82, 6] - [82, 19]
(variable_declarator [82, 10] - [82, 18]
name: (identifier [82, 10] - [82, 18])))
(try_statement [83, 6] - [87, 7]
body: (statement_block [83, 10] - [85, 7]
(expression_statement [84, 8] - [84, 47]
(assignment_expression [84, 8] - [84, 46]
left: (identifier [84, 8] - [84, 16])
right: (await_expression [84, 19] - [84, 46]
(call_expression [84, 25] - [84, 46]
function: (identifier [84, 25] - [84, 44])
arguments: (arguments [84, 44] - [84, 46]))))))
handler: (catch_clause [85, 8] - [87, 7]
parameter: (identifier [85, 15] - [85, 17])
body: (statement_block [85, 19] - [87, 7]
(expression_statement [86, 8] - [86, 55]
(assignment_expression [86, 8] - [86, 54]
left: (identifier [86, 8] - [86, 16])
right: (object [86, 19] - [86, 54]
(pair [86, 21] - [86, 52]
key: (property_identifier [86, 21] - [86, 34])
value: (new_expression [86, 36] - [86, 52]
constructor: (identifier [86, 40] - [86, 50])
arguments: (arguments [86, 50] - [86, 52])))))))))
(lexical_declaration [89, 6] - [89, 31]
(variable_declarator [89, 10] - [89, 30]
name: (identifier [89, 10] - [89, 25])
value: (string [89, 28] - [89, 30])))
(if_statement [90, 6] - [132, 7]
condition: (parenthesized_expression [90, 9] - [90, 70]
(binary_expression [90, 10] - [90, 69]
left: (member_expression [90, 10] - [90, 32]
object: (identifier [90, 10] - [90, 18])
property: (property_identifier [90, 19] - [90, 32]))
right: (binary_expression [90, 36] - [90, 69]
left: (member_expression [90, 36] - [90, 65]
object: (member_expression [90, 36] - [90, 58]
object: (identifier [90, 36] - [90, 44])
property: (property_identifier [90, 45] - [90, 58]))
property: (property_identifier [90, 59] - [90, 65]))
right: (number [90, 68] - [90, 69]))))
consequence: (statement_block [90, 71] - [132, 7]
(try_statement [91, 8] - [131, 9]
body: (statement_block [91, 12] - [126, 9]
(lexical_declaration [92, 10] - [92, 73]
(variable_declarator [92, 16] - [92, 72]
name: (identifier [92, 16] - [92, 25])
value: (as_expression [92, 28] - [92, 72]
(member_expression [92, 28] - [92, 57]
object: (member_expression [92, 28] - [92, 50]
object: (identifier [92, 28] - [92, 36])
property: (property_identifier [92, 37] - [92, 50]))
property: (property_identifier [92, 51] - [92, 57]))
(type_identifier [92, 61] - [92, 72]))))
(lexical_declaration [93, 10] - [107, 12]
(variable_declarator [93, 16] - [107, 11]
name: (identifier [93, 16] - [93, 26])
value: (await_expression [93, 29] - [107, 11]
(call_expression [93, 35] - [107, 11]
function: (member_expression [93, 35] - [99, 17]
object: (call_expression [93, 35] - [99, 11]
function: (member_expression [93, 35] - [93, 58]
object: (member_expression [93, 35] - [93, 48]
object: (identifier [93, 35] - [93, 41])
property: (property_identifier [93, 42] - [93, 48]))
property: (property_identifier [93, 49] - [93, 58]))
arguments: (arguments [93, 58] - [99, 11]
(string [94, 12] - [94, 19]
(string_fragment [94, 13] - [94, 18]))
(identifier [95, 12] - [95, 21])
(object [96, 12] - [96, 50]
(pair [96, 14] - [96, 27]
key: (property_identifier [96, 14] - [96, 18])
value: (string [96, 20] - [96, 27]
(string_fragment [96, 21] - [96, 26])))
(pair [96, 29] - [96, 48]
key: (property_identifier [96, 29] - [96, 39])
value: (string [96, 41] - [96, 48]
(string_fragment [96, 42] - [96, 47]))))
(true [97, 12] - [97, 16])
(array [98, 12] - [98, 20]
(string [98, 13] - [98, 19]
(string_fragment [98, 14] - [98, 18])))))
property: (property_identifier [99, 12] - [99, 17]))
arguments: (arguments [99, 17] - [107, 11]
(arrow_function [99, 18] - [106, 13]
parameters: (formal_parameters [99, 18] - [99, 20])
body: (call_expression [100, 12] - [106, 13]
function: (member_expression [100, 12] - [100, 35]
object: (member_expression [100, 12] - [100, 25]
object: (identifier [100, 12] - [100, 18])
property: (property_identifier [100, 19] - [100, 25]))
property: (property_identifier [100, 26] - [100, 35]))
arguments: (arguments [100, 35] - [106, 13]
(string [101, 14] - [101, 21]
(string_fragment [101, 15] - [101, 20]))
(identifier [102, 14] - [102, 23])
(object [103, 14] - [103, 33]
(pair [103, 16] - [103, 31]
key: (property_identifier [103, 16] - [103, 20])
value: (string [103, 22] - [103, 31]
(string_fragment [103, 23] - [103, 30]))))
(true [104, 14] - [104, 18])
(array [105, 14] - [105, 22]
(string [105, 15] - [105, 21]
(string_fragment [105, 16] - [105, 20])))))))))))
(lexical_declaration [109, 10] - [114, 12]
(variable_declarator [109, 16] - [114, 11]
name: (identifier [109, 16] - [109, 28])
value: (call_expression [109, 31] - [114, 11]
function: (member_expression [109, 31] - [109, 55]
object: (new_expression [109, 31] - [109, 48]
constructor: (identifier [109, 35] - [109, 46])
arguments: (arguments [109, 46] - [109, 48]))
property: (property_identifier [109, 49] - [109, 55]))
arguments: (arguments [109, 55] - [114, 11]
(call_expression [110, 12] - [113, 14]
function: (member_expression [110, 12] - [110, 26]
object: (identifier [110, 12] - [110, 16])
property: (property_identifier [110, 17] - [110, 26]))
arguments: (arguments [110, 26] - [113, 14]
(object [110, 27] - [113, 13]
(pair [111, 14] - [111, 40]
key: (property_identifier [111, 14] - [111, 23])
value: (identifier [111, 25] - [111, 40]))
(pair [112, 14] - [112, 36]
key: (property_identifier [112, 14] - [112, 23])
value: (identifier [112, 25] - [112, 36])))))))))
(lexical_declaration [116, 10] - [116, 65]
(variable_declarator [116, 14] - [116, 64]
name: (identifier [116, 14] - [116, 22])
type: (type_annotation [116, 22] - [116, 27]
(predefined_type [116, 24] - [116, 27]))
value: (object [116, 30] - [116, 64]
(pair [116, 32] - [116, 45]
key: (property_identifier [116, 32] - [116, 36])
value: (string [116, 38] - [116, 45]
(string_fragment [116, 39] - [116, 44])))
(pair [116, 47] - [116, 62]
key: (property_identifier [116, 47] - [116, 51])
value: (string [116, 53] - [116, 62]
(string_fragment [116, 54] - [116, 61]))))))
(if_statement [117, 10] - [119, 11]
condition: (parenthesized_expression [117, 13] - [117, 54]
(binary_expression [117, 14] - [117, 53]
left: (member_expression [117, 14] - [117, 39]
object: (member_expression [117, 14] - [117, 34]
object: (identifier [117, 14] - [117, 24])
property: (property_identifier [117, 25] - [117, 34]))
property: (property_identifier [117, 35] - [117, 39]))
right: (string [117, 44] - [117, 53]
(string_fragment [117, 45] - [117, 52]))))
consequence: (statement_block [117, 55] - [119, 11]
(expression_statement [118, 12] - [118, 43]
(assignment_expression [118, 12] - [118, 42]
left: (identifier [118, 12] - [118, 20])
right: (object [118, 23] - [118, 42]
(pair [118, 25] - [118, 40]
key: (property_identifier [118, 25] - [118, 29])
value: (string [118, 31] - [118, 40]
(string_fragment [118, 32] - [118, 39]))))))))
(lexical_declaration [120, 10] - [124, 12]
(variable_declarator [120, 16] - [124, 11]
name: (identifier [120, 16] - [120, 30])
value: (await_expression [120, 33] - [124, 11]
(call_expression [120, 39] - [124, 11]
function: (member_expression [120, 39] - [120, 57]
object: (member_expression [120, 39] - [120, 52]
object: (identifier [120, 39] - [120, 45])
property: (property_identifier [120, 46] - [120, 52]))
property: (property_identifier [120, 53] - [120, 57]))
arguments: (arguments [120, 57] - [124, 11]
(identifier [121, 12] - [121, 20])
(identifier [122, 12] - [122, 22])
(identifier [123, 12] - [123, 24]))))))
(expression_statement [125, 10] - [125, 73]
(assignment_expression [125, 10] - [125, 72]
left: (identifier [125, 10] - [125, 25])
right: (call_expression [125, 28] - [125, 72]
function: (identifier [125, 28] - [125, 40])
arguments: (arguments [125, 40] - [125, 72]
(new_expression [125, 41] - [125, 71]
constructor: (identifier [125, 45] - [125, 55])
arguments: (arguments [125, 55] - [125, 71]
(identifier [125, 56] - [125, 70]))))))))
handler: (catch_clause [126, 10] - [131, 9]
parameter: (identifier [126, 17] - [126, 18])
body: (statement_block [126, 20] - [131, 9]
(expression_statement [127, 10] - [130, 12]
(call_expression [127, 10] - [130, 11]
function: (member_expression [127, 10] - [127, 22]
object: (identifier [127, 10] - [127, 17])
property: (property_identifier [127, 18] - [127, 22]))
arguments: (arguments [127, 22] - [130, 11]
(string [128, 12] - [128, 82]
(string_fragment [128, 13] - [128, 81]))
(identifier [129, 12] - [129, 13])))))))))
(expression_statement [134, 6] - [137, 8]
(await_expression [134, 6] - [137, 7]
(call_expression [134, 12] - [137, 7]
function: (member_expression [134, 12] - [134, 26]
object: (identifier [134, 12] - [134, 22])
property: (property_identifier [134, 23] - [134, 26]))
arguments: (template_string [134, 26] - [137, 7]
(string_fragment [134, 27] - [136, 16])
(template_substitution [136, 16] - [136, 34]
(identifier [136, 18] - [136, 33]))
(string_fragment [136, 34] - [136, 36])
(template_substitution [136, 36] - [136, 50]
(identifier [136, 38] - [136, 49]))
(string_fragment [136, 50] - [136, 52])
(template_substitution [136, 52] - [136, 70]
(identifier [136, 54] - [136, 69]))
(string_fragment [136, 70] - [137, 6])))))
(lexical_declaration [139, 6] - [144, 8]
(variable_declarator [139, 12] - [144, 7]
name: (identifier [139, 12] - [139, 19])
value: (object [139, 22] - [144, 7]
(pair [140, 8] - [140, 34]
key: (property_identifier [140, 8] - [140, 17])
value: (identifier [140, 19] - [140, 34]))
(pair [141, 8] - [141, 30]
key: (property_identifier [141, 8] - [141, 17])
value: (identifier [141, 19] - [141, 30]))
(pair [142, 8] - [142, 34]
key: (property_identifier [142, 8] - [142, 17])
value: (identifier [142, 19] - [142, 34]))
(pair [143, 8] - [143, 44]
key: (property_identifier [143, 8] - [143, 18])
value: (call_expression [143, 20] - [143, 44]
function: (member_expression [143, 20] - [143, 42]
object: (new_expression [143, 20] - [143, 30]
constructor: (identifier [143, 24] - [143, 28])
arguments: (arguments [143, 28] - [143, 30]))
property: (property_identifier [143, 31] - [143, 42]))
arguments: (arguments [143, 42] - [143, 44]))))))
(lexical_declaration [146, 6] - [146, 49]
(variable_declarator [146, 12] - [146, 48]
name: (identifier [146, 12] - [146, 22])
value: (call_expression [146, 25] - [146, 48]
function: (member_expression [146, 25] - [146, 39]
object: (identifier [146, 25] - [146, 29])
property: (property_identifier [146, 30] - [146, 39]))
arguments: (arguments [146, 39] - [146, 48]
(identifier [146, 40] - [146, 47])))))
(try_statement [148, 6] - [157, 7]
body: (statement_block [148, 10] - [155, 7]
(if_statement [149, 8] - [151, 9]
condition: (parenthesized_expression [149, 11] - [149, 45]
(binary_expression [149, 12] - [149, 44]
left: (unary_expression [149, 12] - [149, 29]
argument: (member_expression [149, 19] - [149, 29]
object: (identifier [149, 19] - [149, 25])
property: (property_identifier [149, 26] - [149, 29])))
right: (string [149, 34] - [149, 44]
(string_fragment [149, 35] - [149, 43]))))
consequence: (statement_block [149, 46] - [151, 9]
(expression_statement [150, 10] - [150, 64]
(await_expression [150, 10] - [150, 63]
(call_expression [150, 16] - [150, 63]
function: (member_expression [150, 16] - [150, 26]
object: (identifier [150, 16] - [150, 22])
property: (property_identifier [150, 23] - [150, 26]))
arguments: (arguments [150, 26] - [150, 63]
(string [150, 27] - [150, 50]
(string_fragment [150, 28] - [150, 49]))
(identifier [150, 52] - [150, 62])))))))
(if_statement [152, 8] - [154, 9]
condition: (parenthesized_expression [152, 11] - [152, 49]
(binary_expression [152, 12] - [152, 48]
left: (unary_expression [152, 12] - [152, 33]
argument: (member_expression [152, 19] - [152, 33]
object: (identifier [152, 19] - [152, 25])
property: (property_identifier [152, 26] - [152, 33])))
right: (string [152, 38] - [152, 48]
(string_fragment [152, 39] - [152, 47]))))
consequence: (statement_block [152, 50] - [154, 9]
(expression_statement [153, 10] - [153, 61]
(await_expression [153, 10] - [153, 60]
(call_expression [153, 16] - [153, 60]
function: (member_expression [153, 16] - [153, 30]
object: (identifier [153, 16] - [153, 22])
property: (property_identifier [153, 23] - [153, 30]))
arguments: (arguments [153, 30] - [153, 60]
(string [153, 31] - [153, 47]
(string_fragment [153, 32] - [153, 46]))
(identifier [153, 49] - [153, 59]))))))))
handler: (catch_clause [155, 8] - [157, 7]
parameter: (identifier [155, 15] - [155, 16])
body: (statement_block [155, 18] - [157, 7]
(expression_statement [156, 8] - [156, 67]
(call_expression [156, 8] - [156, 66]
function: (member_expression [156, 8] - [156, 20]
object: (identifier [156, 8] - [156, 15])
property: (property_identifier [156, 16] - [156, 20]))
arguments: (arguments [156, 20] - [156, 66]
(string [156, 21] - [156, 62]
(string_fragment [156, 22] - [156, 61]))
(identifier [156, 64] - [156, 65]))))))))))
handler: (catch_clause [159, 4] - [161, 3]
parameter: (identifier [159, 11] - [159, 16])
body: (statement_block [159, 18] - [161, 3]
(expression_statement [160, 4] - [160, 64]
(call_expression [160, 4] - [160, 63]
function: (member_expression [160, 4] - [160, 17]
object: (identifier [160, 4] - [160, 11])
property: (property_identifier [160, 12] - [160, 17]))
arguments: (arguments [160, 17] - [160, 63]
(string [160, 18] - [160, 55]
(string_fragment [160, 19] - [160, 54]))
(identifier [160, 57] - [160, 62]))))))
finalizer: (finally_clause [161, 4] - [163, 3]
body: (statement_block [161, 12] - [163, 3]
(expression_statement [162, 4] - [162, 23]
(assignment_expression [162, 4] - [162, 22]
left: (identifier [162, 4] - [162, 14])
right: (false [162, 17] - [162, 22])))))))))
(export_statement [166, 0] - [170, 1]
declaration: (function_declaration [166, 7] - [170, 1]
name: (identifier [166, 16] - [166, 33])
parameters: (formal_parameters [166, 33] - [166, 35])
return_type: (type_annotation [166, 35] - [166, 41]
(predefined_type [166, 37] - [166, 41]))
body: (statement_block [166, 42] - [170, 1]
(if_statement [167, 2] - [169, 3]
condition: (parenthesized_expression [167, 5] - [167, 33]
(binary_expression [167, 6] - [167, 32]
left: (identifier [167, 6] - [167, 23])
right: (null [167, 28] - [167, 32])))
consequence: (statement_block [167, 34] - [169, 3]
(expression_statement [168, 4] - [168, 70]
(assignment_expression [168, 4] - [168, 69]
left: (identifier [168, 4] - [168, 21])
right: (as_expression [168, 24] - [168, 69]
(as_expression [168, 24] - [168, 59]
(call_expression [168, 24] - [168, 48]
function: (identifier [168, 24] - [168, 35])
arguments: (arguments [168, 35] - [168, 48]
(identifier [168, 36] - [168, 41])
(number [168, 43] - [168, 47])))
(predefined_type [168, 52] - [168, 59]))
(predefined_type [168, 63] - [168, 69])))))))))
(export_statement [172, 0] - [177, 1]
declaration: (function_declaration [172, 7] - [177, 1]
name: (identifier [172, 16] - [172, 32])
parameters: (formal_parameters [172, 32] - [172, 34])
return_type: (type_annotation [172, 34] - [172, 40]
(predefined_type [172, 36] - [172, 40]))
body: (statement_block [172, 41] - [177, 1]
(if_statement [173, 2] - [176, 3]
condition: (parenthesized_expression [173, 5] - [173, 33]
(binary_expression [173, 6] - [173, 32]
left: (identifier [173, 6] - [173, 23])
right: (null [173, 28] - [173, 32])))
consequence: (statement_block [173, 34] - [176, 3]
(expression_statement [174, 4] - [174, 37]
(call_expression [174, 4] - [174, 36]
function: (identifier [174, 4] - [174, 17])
arguments: (arguments [174, 17] - [174, 36]
(identifier [174, 18] - [174, 35]))))
(expression_statement [175, 4] - [175, 29]
(assignment_expression [175, 4] - [175, 28]
left: (identifier [175, 4] - [175, 21])
right: (null [175, 24] - [175, 28]))))))))
(export_statement [179, 0] - [186, 2]
declaration: (lexical_declaration [179, 7] - [186, 2]
(variable_declarator [179, 13] - [186, 1]
name: (identifier [179, 13] - [179, 25])
value: (object [179, 28] - [186, 1]
(method_definition [180, 2] - [182, 3]
name: (property_identifier [180, 6] - [180, 14])
parameters: (formal_parameters [180, 14] - [180, 16])
body: (statement_block [180, 17] - [182, 3]
(return_statement [181, 4] - [181, 20]
(identifier [181, 11] - [181, 19]))))
(method_definition [183, 2] - [185, 3]
name: (property_identifier [183, 6] - [183, 14])
parameters: (formal_parameters [183, 14] - [183, 24]
(required_parameter [183, 15] - [183, 23]
pattern: (identifier [183, 15] - [183, 18])
type: (type_annotation [183, 18] - [183, 23]
(predefined_type [183, 20] - [183, 23]))))
body: (statement_block [183, 25] - [185, 3]
(expression_statement [184, 4] - [184, 19]
(assignment_expression [184, 4] - [184, 18]
left: (identifier [184, 4] - [184, 12])
right: (identifier [184, 15] - [184, 18]))))))))))

View File

@ -1,761 +0,0 @@
(program [0, 0] - [172, 0]
(import_statement [0, 0] - [0, 68]
(import_clause [0, 7] - [0, 30]
(named_imports [0, 7] - [0, 30]
(import_specifier [0, 9] - [0, 28]
name: (identifier [0, 9] - [0, 28]))))
source: (string [0, 36] - [0, 67]
(string_fragment [0, 37] - [0, 66])))
(export_statement [2, 0] - [171, 2]
declaration: (lexical_declaration [2, 7] - [171, 2]
(variable_declarator [2, 13] - [171, 1]
name: (identifier [2, 13] - [2, 33])
value: (arrow_function [2, 36] - [171, 1]
parameters: (formal_parameters [2, 36] - [6, 2]
(required_parameter [2, 37] - [6, 1]
pattern: (object_pattern [2, 37] - [4, 1]
(shorthand_property_identifier_pattern [3, 2] - [3, 6]))
type: (type_annotation [4, 1] - [6, 1]
(object_type [4, 3] - [6, 1]
(property_signature [5, 2] - [5, 13]
name: (property_identifier [5, 2] - [5, 6])
type: (type_annotation [5, 6] - [5, 13]
(array_type [5, 8] - [5, 13]
(predefined_type [5, 8] - [5, 11]))))))))
body: (statement_block [6, 6] - [171, 1]
(return_statement [7, 2] - [170, 4]
(parenthesized_expression [7, 9] - [170, 3]
(jsx_element [8, 4] - [169, 26]
open_tag: (jsx_opening_element [8, 4] - [8, 76]
name: (identifier [8, 5] - [8, 24])
attribute: (jsx_attribute [8, 25] - [8, 43]
(property_identifier [8, 25] - [8, 30])
(string [8, 31] - [8, 43]
(string_fragment [8, 32] - [8, 42])))
attribute: (jsx_attribute [8, 44] - [8, 75]
(property_identifier [8, 44] - [8, 55])
(string [8, 56] - [8, 75]
(string_fragment [8, 57] - [8, 74]))))
(jsx_element [9, 6] - [41, 12]
open_tag: (jsx_opening_element [9, 6] - [9, 142]
name: (identifier [9, 7] - [9, 10])
attribute: (jsx_attribute [9, 11] - [9, 141]
(property_identifier [9, 11] - [9, 16])
(string [9, 17] - [9, 141]
(string_fragment [9, 18] - [9, 140]))))
(jsx_element [10, 8] - [18, 14]
open_tag: (jsx_opening_element [10, 8] - [10, 13]
name: (identifier [10, 9] - [10, 12]))
(jsx_element [11, 10] - [13, 15]
open_tag: (jsx_opening_element [11, 10] - [11, 110]
name: (identifier [11, 11] - [11, 13])
attribute: (jsx_attribute [11, 14] - [11, 109]
(property_identifier [11, 14] - [11, 19])
(string [11, 20] - [11, 109]
(string_fragment [11, 21] - [11, 108]))))
(jsx_text [11, 110] - [13, 10])
close_tag: (jsx_closing_element [13, 10] - [13, 15]
name: (identifier [13, 12] - [13, 14])))
(jsx_element [14, 10] - [17, 14]
open_tag: (jsx_opening_element [14, 10] - [14, 82]
name: (identifier [14, 11] - [14, 12])
attribute: (jsx_attribute [14, 13] - [14, 81]
(property_identifier [14, 13] - [14, 18])
(string [14, 19] - [14, 81]
(string_fragment [14, 20] - [14, 80]))))
(jsx_text [14, 82] - [17, 10])
close_tag: (jsx_closing_element [17, 10] - [17, 14]
name: (identifier [17, 12] - [17, 13])))
close_tag: (jsx_closing_element [18, 8] - [18, 14]
name: (identifier [18, 10] - [18, 13])))
(jsx_element [20, 8] - [40, 14]
open_tag: (jsx_opening_element [20, 8] - [20, 90]
name: (identifier [20, 9] - [20, 12])
attribute: (jsx_attribute [20, 13] - [20, 89]
(property_identifier [20, 13] - [20, 18])
(string [20, 19] - [20, 89]
(string_fragment [20, 20] - [20, 88]))))
(jsx_self_closing_element [21, 10] - [27, 12]
name: (identifier [21, 11] - [21, 16])
attribute: (jsx_attribute [22, 12] - [22, 23]
(property_identifier [22, 12] - [22, 16])
(string [22, 17] - [22, 23]
(string_fragment [22, 18] - [22, 22])))
attribute: (jsx_attribute [23, 12] - [23, 33]
(property_identifier [23, 12] - [23, 14])
(string [23, 15] - [23, 33]
(string_fragment [23, 16] - [23, 32])))
attribute: (jsx_attribute [24, 12] - [24, 52]
(property_identifier [24, 12] - [24, 23])
(string [24, 24] - [24, 52]
(string_fragment [24, 25] - [24, 51])))
attribute: (jsx_attribute [25, 12] - [25, 39]
(property_identifier [25, 12] - [25, 19])
(string [25, 20] - [25, 39]
(string_fragment [25, 21] - [25, 38])))
attribute: (jsx_attribute [26, 12] - [26, 90]
(property_identifier [26, 12] - [26, 17])
(string [26, 18] - [26, 90]
(string_fragment [26, 19] - [26, 89]))))
(jsx_element [28, 10] - [39, 16]
open_tag: (jsx_opening_element [28, 10] - [36, 11]
name: (identifier [28, 11] - [28, 14])
attribute: (jsx_attribute [29, 12] - [29, 22]
(property_identifier [29, 12] - [29, 17])
(string [29, 18] - [29, 22]
(string_fragment [29, 19] - [29, 21])))
attribute: (jsx_attribute [30, 12] - [30, 23]
(property_identifier [30, 12] - [30, 18])
(string [30, 19] - [30, 23]
(string_fragment [30, 20] - [30, 22])))
attribute: (jsx_attribute [31, 12] - [31, 31]
(property_identifier [31, 12] - [31, 19])
(string [31, 20] - [31, 31]
(string_fragment [31, 21] - [31, 30])))
attribute: (jsx_attribute [32, 12] - [32, 23]
(property_identifier [32, 12] - [32, 16])
(string [32, 17] - [32, 23]
(string_fragment [32, 18] - [32, 22])))
attribute: (jsx_attribute [33, 12] - [33, 33]
(property_identifier [33, 12] - [33, 18])
(string [33, 19] - [33, 33]
(string_fragment [33, 20] - [33, 32])))
attribute: (jsx_attribute [34, 12] - [34, 28]
(property_identifier [34, 12] - [34, 24])
(string [34, 25] - [34, 28]
(string_fragment [34, 26] - [34, 27])))
attribute: (jsx_attribute [35, 12] - [35, 141]
(property_identifier [35, 12] - [35, 17])
(string [35, 18] - [35, 141]
(string_fragment [35, 19] - [35, 140]))))
(jsx_element [37, 12] - [37, 51]
open_tag: (jsx_opening_element [37, 12] - [37, 42]
name: (identifier [37, 13] - [37, 19])
attribute: (jsx_attribute [37, 20] - [37, 27]
(property_identifier [37, 20] - [37, 22])
(string [37, 23] - [37, 27]
(string_fragment [37, 24] - [37, 26])))
attribute: (jsx_attribute [37, 28] - [37, 35]
(property_identifier [37, 28] - [37, 30])
(string [37, 31] - [37, 35]
(string_fragment [37, 32] - [37, 34])))
attribute: (jsx_attribute [37, 36] - [37, 41]
(property_identifier [37, 36] - [37, 37])
(string [37, 38] - [37, 41]
(string_fragment [37, 39] - [37, 40]))))
close_tag: (jsx_closing_element [37, 42] - [37, 51]
name: (identifier [37, 44] - [37, 50])))
(jsx_element [38, 12] - [38, 63]
open_tag: (jsx_opening_element [38, 12] - [38, 56]
name: (identifier [38, 13] - [38, 17])
attribute: (jsx_attribute [38, 18] - [38, 25]
(property_identifier [38, 18] - [38, 20])
(string [38, 21] - [38, 25]
(string_fragment [38, 22] - [38, 24])))
attribute: (jsx_attribute [38, 26] - [38, 33]
(property_identifier [38, 26] - [38, 28])
(string [38, 29] - [38, 33]
(string_fragment [38, 30] - [38, 32])))
attribute: (jsx_attribute [38, 34] - [38, 44]
(property_identifier [38, 34] - [38, 36])
(string [38, 37] - [38, 44]
(string_fragment [38, 38] - [38, 43])))
attribute: (jsx_attribute [38, 45] - [38, 55]
(property_identifier [38, 45] - [38, 47])
(string [38, 48] - [38, 55]
(string_fragment [38, 49] - [38, 54]))))
close_tag: (jsx_closing_element [38, 56] - [38, 63]
name: (identifier [38, 58] - [38, 62])))
close_tag: (jsx_closing_element [39, 10] - [39, 16]
name: (identifier [39, 12] - [39, 15])))
close_tag: (jsx_closing_element [40, 8] - [40, 14]
name: (identifier [40, 10] - [40, 13])))
close_tag: (jsx_closing_element [41, 6] - [41, 12]
name: (identifier [41, 8] - [41, 11])))
(jsx_expression [43, 6] - [43, 38]
(comment [43, 7] - [43, 37]))
(jsx_element [44, 6] - [103, 12]
open_tag: (jsx_opening_element [44, 6] - [44, 60]
name: (identifier [44, 7] - [44, 10])
attribute: (jsx_attribute [44, 11] - [44, 36]
(property_identifier [44, 11] - [44, 16])
(string [44, 17] - [44, 36]
(string_fragment [44, 18] - [44, 35])))
attribute: (jsx_attribute [44, 37] - [44, 59]
(property_identifier [44, 37] - [44, 42])
(string [44, 43] - [44, 59]
(string_fragment [44, 44] - [44, 58]))))
(jsx_element [45, 8] - [102, 14]
open_tag: (jsx_opening_element [45, 8] - [45, 37]
name: (identifier [45, 9] - [45, 12])
attribute: (jsx_attribute [45, 13] - [45, 36]
(property_identifier [45, 13] - [45, 18])
(string [45, 19] - [45, 36]
(string_fragment [45, 20] - [45, 35]))))
(jsx_element [46, 10] - [101, 18]
open_tag: (jsx_opening_element [46, 10] - [46, 33]
name: (identifier [46, 11] - [46, 16])
attribute: (jsx_attribute [46, 17] - [46, 32]
(property_identifier [46, 17] - [46, 19])
(string [46, 20] - [46, 32]
(string_fragment [46, 21] - [46, 31]))))
(jsx_element [47, 12] - [55, 20]
open_tag: (jsx_opening_element [47, 12] - [47, 19]
name: (identifier [47, 13] - [47, 18]))
(jsx_element [48, 14] - [54, 19]
open_tag: (jsx_opening_element [48, 14] - [48, 18]
name: (identifier [48, 15] - [48, 17]))
(jsx_element [49, 16] - [49, 34]
open_tag: (jsx_opening_element [49, 16] - [49, 20]
name: (identifier [49, 17] - [49, 19]))
(jsx_text [49, 20] - [49, 29])
close_tag: (jsx_closing_element [49, 29] - [49, 34]
name: (identifier [49, 31] - [49, 33])))
(jsx_element [50, 16] - [50, 37]
open_tag: (jsx_opening_element [50, 16] - [50, 20]
name: (identifier [50, 17] - [50, 19]))
(jsx_text [50, 20] - [50, 32])
close_tag: (jsx_closing_element [50, 32] - [50, 37]
name: (identifier [50, 34] - [50, 36])))
(jsx_element [51, 16] - [51, 39]
open_tag: (jsx_opening_element [51, 16] - [51, 20]
name: (identifier [51, 17] - [51, 19]))
(jsx_text [51, 20] - [51, 34])
close_tag: (jsx_closing_element [51, 34] - [51, 39]
name: (identifier [51, 36] - [51, 38])))
(jsx_element [52, 16] - [52, 33]
open_tag: (jsx_opening_element [52, 16] - [52, 20]
name: (identifier [52, 17] - [52, 19]))
(jsx_text [52, 20] - [52, 28])
close_tag: (jsx_closing_element [52, 28] - [52, 33]
name: (identifier [52, 30] - [52, 32])))
(jsx_element [53, 16] - [53, 35]
open_tag: (jsx_opening_element [53, 16] - [53, 20]
name: (identifier [53, 17] - [53, 19]))
(jsx_text [53, 20] - [53, 30])
close_tag: (jsx_closing_element [53, 30] - [53, 35]
name: (identifier [53, 32] - [53, 34])))
close_tag: (jsx_closing_element [54, 14] - [54, 19]
name: (identifier [54, 16] - [54, 18])))
close_tag: (jsx_closing_element [55, 12] - [55, 20]
name: (identifier [55, 14] - [55, 19])))
(jsx_element [56, 12] - [100, 20]
open_tag: (jsx_opening_element [56, 12] - [56, 19]
name: (identifier [56, 13] - [56, 18]))
(jsx_expression [57, 14] - [99, 17]
(call_expression [57, 15] - [99, 16]
function: (member_expression [57, 15] - [57, 23]
object: (identifier [57, 15] - [57, 19])
property: (property_identifier [57, 20] - [57, 23]))
arguments: (arguments [57, 23] - [99, 16]
(arrow_function [57, 24] - [99, 15]
parameters: (formal_parameters [57, 24] - [57, 29]
(required_parameter [57, 25] - [57, 28]
pattern: (identifier [57, 25] - [57, 28])))
body: (statement_block [57, 33] - [99, 15]
(lexical_declaration [58, 16] - [59, 48]
(variable_declarator [58, 22] - [59, 47]
name: (identifier [58, 22] - [58, 28])
value: (binary_expression [58, 31] - [59, 47]
left: (call_expression [58, 31] - [58, 58]
function: (member_expression [58, 31] - [58, 50]
object: (member_expression [58, 31] - [58, 41]
object: (identifier [58, 31] - [58, 34])
property: (property_identifier [58, 35] - [58, 41]))
property: (property_identifier [58, 42] - [58, 50]))
arguments: (arguments [58, 50] - [58, 58]
(string [58, 51] - [58, 57]
(string_fragment [58, 52] - [58, 56]))))
right: (call_expression [59, 18] - [59, 47]
function: (member_expression [59, 18] - [59, 37]
object: (member_expression [59, 18] - [59, 28]
object: (identifier [59, 18] - [59, 21])
property: (property_identifier [59, 22] - [59, 28]))
property: (property_identifier [59, 29] - [59, 37]))
arguments: (arguments [59, 37] - [59, 47]
(string [59, 38] - [59, 46]
(string_fragment [59, 39] - [59, 45])))))))
(lexical_declaration [60, 16] - [63, 49]
(variable_declarator [60, 22] - [63, 48]
name: (identifier [60, 22] - [60, 31])
value: (binary_expression [60, 34] - [63, 48]
left: (binary_expression [60, 34] - [62, 49]
left: (binary_expression [60, 34] - [61, 47]
left: (call_expression [60, 34] - [60, 64]
function: (member_expression [60, 34] - [60, 53]
object: (member_expression [60, 34] - [60, 44]
object: (identifier [60, 34] - [60, 37])
property: (property_identifier [60, 38] - [60, 44]))
property: (property_identifier [60, 45] - [60, 53]))
arguments: (arguments [60, 53] - [60, 64]
(string [60, 54] - [60, 63]
(string_fragment [60, 55] - [60, 62]))))
right: (call_expression [61, 18] - [61, 47]
function: (member_expression [61, 18] - [61, 37]
object: (member_expression [61, 18] - [61, 28]
object: (identifier [61, 18] - [61, 21])
property: (property_identifier [61, 22] - [61, 28]))
property: (property_identifier [61, 29] - [61, 37]))
arguments: (arguments [61, 37] - [61, 47]
(string [61, 38] - [61, 46]
(string_fragment [61, 39] - [61, 45])))))
right: (call_expression [62, 18] - [62, 49]
function: (member_expression [62, 18] - [62, 37]
object: (member_expression [62, 18] - [62, 28]
object: (identifier [62, 18] - [62, 21])
property: (property_identifier [62, 22] - [62, 28]))
property: (property_identifier [62, 29] - [62, 37]))
arguments: (arguments [62, 37] - [62, 49]
(string [62, 38] - [62, 48]
(string_fragment [62, 39] - [62, 47])))))
right: (call_expression [63, 18] - [63, 48]
function: (member_expression [63, 18] - [63, 37]
object: (member_expression [63, 18] - [63, 28]
object: (identifier [63, 18] - [63, 21])
property: (property_identifier [63, 22] - [63, 28]))
property: (property_identifier [63, 29] - [63, 37]))
arguments: (arguments [63, 37] - [63, 48]
(string [63, 38] - [63, 47]
(string_fragment [63, 39] - [63, 46])))))))
(lexical_declaration [64, 16] - [68, 33]
(variable_declarator [64, 22] - [68, 32]
name: (identifier [64, 22] - [64, 32])
value: (ternary_expression [64, 35] - [68, 32]
condition: (identifier [64, 35] - [64, 41])
consequence: (string [65, 20] - [65, 34]
(string_fragment [65, 21] - [65, 33]))
alternative: (ternary_expression [66, 20] - [68, 32]
condition: (identifier [66, 20] - [66, 29])
consequence: (string [67, 20] - [67, 35]
(string_fragment [67, 21] - [67, 34]))
alternative: (string [68, 20] - [68, 32]
(string_fragment [68, 21] - [68, 31]))))))
(return_statement [70, 16] - [98, 18]
(parenthesized_expression [70, 23] - [98, 17]
(jsx_element [71, 18] - [97, 23]
open_tag: (jsx_opening_element [71, 18] - [77, 19]
name: (identifier [71, 19] - [71, 21])
attribute: (jsx_attribute [72, 20] - [72, 32]
(property_identifier [72, 20] - [72, 23])
(jsx_expression [72, 24] - [72, 32]
(member_expression [72, 25] - [72, 31]
object: (identifier [72, 25] - [72, 28])
property: (property_identifier [72, 29] - [72, 31]))))
attribute: (jsx_attribute [73, 20] - [73, 35]
(property_identifier [73, 20] - [73, 25])
(string [73, 26] - [73, 35]
(string_fragment [73, 27] - [73, 34])))
attribute: (jsx_attribute [74, 20] - [76, 61]
(property_identifier [74, 20] - [74, 31])
(jsx_expression [74, 32] - [76, 61]
(call_expression [74, 33] - [76, 60]
function: (member_expression [74, 33] - [76, 58]
object: (template_string [74, 33] - [76, 46]
(template_substitution [74, 34] - [74, 47]
(member_expression [74, 36] - [74, 46]
object: (identifier [74, 36] - [74, 39])
property: (property_identifier [74, 40] - [74, 46])))
(string_fragment [74, 47] - [74, 48])
(template_substitution [74, 48] - [74, 71]
(binary_expression [74, 50] - [74, 70]
left: (member_expression [74, 50] - [74, 58]
object: (identifier [74, 50] - [74, 53])
property: (property_identifier [74, 54] - [74, 58]))
right: (string [74, 62] - [74, 70]
(string_fragment [74, 63] - [74, 69]))))
(string_fragment [74, 71] - [74, 72])
(template_substitution [74, 72] - [76, 21]
(binary_expression [75, 22] - [75, 40]
left: (member_expression [75, 22] - [75, 34]
object: (identifier [75, 22] - [75, 25])
property: (property_identifier [75, 26] - [75, 34]))
right: (string [75, 38] - [75, 40])))
(string_fragment [76, 21] - [76, 22])
(template_substitution [76, 22] - [76, 45]
(binary_expression [76, 24] - [76, 44]
left: (member_expression [76, 24] - [76, 38]
object: (identifier [76, 24] - [76, 27])
property: (property_identifier [76, 28] - [76, 38]))
right: (string [76, 42] - [76, 44]))))
property: (property_identifier [76, 47] - [76, 58]))
arguments: (arguments [76, 58] - [76, 60])))))
(jsx_element [78, 20] - [80, 25]
open_tag: (jsx_opening_element [78, 20] - [78, 98]
name: (identifier [78, 21] - [78, 23])
attribute: (jsx_attribute [78, 24] - [78, 97]
(property_identifier [78, 24] - [78, 29])
(string [78, 30] - [78, 97]
(string_fragment [78, 31] - [78, 96]))))
(jsx_expression [79, 22] - [79, 65]
(call_expression [79, 23] - [79, 64]
function: (member_expression [79, 23] - [79, 62]
object: (new_expression [79, 23] - [79, 47]
constructor: (identifier [79, 27] - [79, 31])
arguments: (arguments [79, 31] - [79, 47]
(member_expression [79, 32] - [79, 46]
object: (identifier [79, 32] - [79, 35])
property: (property_identifier [79, 36] - [79, 46]))))
property: (property_identifier [79, 48] - [79, 62]))
arguments: (arguments [79, 62] - [79, 64])))
close_tag: (jsx_closing_element [80, 20] - [80, 25]
name: (identifier [80, 22] - [80, 24])))
(jsx_element [81, 20] - [85, 25]
open_tag: (jsx_opening_element [81, 20] - [81, 24]
name: (identifier [81, 21] - [81, 23]))
(jsx_element [82, 22] - [84, 29]
open_tag: (jsx_opening_element [82, 22] - [82, 58]
name: (identifier [82, 23] - [82, 27])
attribute: (jsx_attribute [82, 28] - [82, 57]
(property_identifier [82, 28] - [82, 33])
(jsx_expression [82, 34] - [82, 57]
(template_string [82, 35] - [82, 56]
(string_fragment [82, 36] - [82, 42])
(template_substitution [82, 42] - [82, 55]
(identifier [82, 44] - [82, 54]))))))
(jsx_expression [83, 24] - [83, 36]
(member_expression [83, 25] - [83, 35]
object: (identifier [83, 25] - [83, 28])
property: (property_identifier [83, 29] - [83, 35])))
close_tag: (jsx_closing_element [84, 22] - [84, 29]
name: (identifier [84, 24] - [84, 28])))
close_tag: (jsx_closing_element [85, 20] - [85, 25]
name: (identifier [85, 22] - [85, 24])))
(jsx_element [86, 20] - [90, 25]
open_tag: (jsx_opening_element [86, 20] - [86, 24]
name: (identifier [86, 21] - [86, 23]))
(jsx_element [87, 22] - [89, 31]
open_tag: (jsx_opening_element [87, 22] - [87, 66]
name: (identifier [87, 23] - [87, 29])
attribute: (jsx_attribute [87, 30] - [87, 65]
(property_identifier [87, 30] - [87, 35])
(string [87, 36] - [87, 65]
(string_fragment [87, 37] - [87, 64]))))
(jsx_expression [88, 24] - [88, 46]
(binary_expression [88, 25] - [88, 45]
left: (member_expression [88, 25] - [88, 33]
object: (identifier [88, 25] - [88, 28])
property: (property_identifier [88, 29] - [88, 33]))
right: (string [88, 37] - [88, 45]
(string_fragment [88, 38] - [88, 44]))))
close_tag: (jsx_closing_element [89, 22] - [89, 31]
name: (identifier [89, 24] - [89, 30])))
close_tag: (jsx_closing_element [90, 20] - [90, 25]
name: (identifier [90, 22] - [90, 24])))
(jsx_element [91, 20] - [93, 25]
open_tag: (jsx_opening_element [91, 20] - [91, 62]
name: (identifier [91, 21] - [91, 23])
attribute: (jsx_attribute [91, 24] - [91, 61]
(property_identifier [91, 24] - [91, 29])
(string [91, 30] - [91, 61]
(string_fragment [91, 31] - [91, 60]))))
(jsx_expression [92, 22] - [92, 43]
(binary_expression [92, 23] - [92, 42]
left: (member_expression [92, 23] - [92, 35]
object: (identifier [92, 23] - [92, 26])
property: (property_identifier [92, 27] - [92, 35]))
right: (string [92, 39] - [92, 42]
(string_fragment [92, 40] - [92, 41]))))
close_tag: (jsx_closing_element [93, 20] - [93, 25]
name: (identifier [93, 22] - [93, 24])))
(jsx_element [94, 20] - [96, 25]
open_tag: (jsx_opening_element [94, 20] - [94, 106]
name: (identifier [94, 21] - [94, 23])
attribute: (jsx_attribute [94, 24] - [94, 105]
(property_identifier [94, 24] - [94, 29])
(string [94, 30] - [94, 105]
(string_fragment [94, 31] - [94, 104]))))
(jsx_expression [95, 22] - [95, 45]
(binary_expression [95, 23] - [95, 44]
left: (member_expression [95, 23] - [95, 37]
object: (identifier [95, 23] - [95, 26])
property: (property_identifier [95, 27] - [95, 37]))
right: (string [95, 41] - [95, 44]
(string_fragment [95, 42] - [95, 43]))))
close_tag: (jsx_closing_element [96, 20] - [96, 25]
name: (identifier [96, 22] - [96, 24])))
close_tag: (jsx_closing_element [97, 18] - [97, 23]
name: (identifier [97, 20] - [97, 22]))))))))))
close_tag: (jsx_closing_element [100, 12] - [100, 20]
name: (identifier [100, 14] - [100, 19])))
close_tag: (jsx_closing_element [101, 10] - [101, 18]
name: (identifier [101, 12] - [101, 17])))
close_tag: (jsx_closing_element [102, 8] - [102, 14]
name: (identifier [102, 10] - [102, 13])))
close_tag: (jsx_closing_element [103, 6] - [103, 12]
name: (identifier [103, 8] - [103, 11])))
(jsx_expression [105, 6] - [105, 40]
(comment [105, 7] - [105, 39]))
(jsx_element [106, 6] - [153, 12]
open_tag: (jsx_opening_element [106, 6] - [110, 7]
name: (identifier [106, 7] - [106, 10])
attribute: (jsx_attribute [107, 8] - [107, 28]
(property_identifier [107, 8] - [107, 10])
(string [107, 11] - [107, 28]
(string_fragment [107, 12] - [107, 27])))
attribute: (jsx_attribute [108, 8] - [108, 27]
(property_identifier [108, 8] - [108, 13])
(string [108, 14] - [108, 27]
(string_fragment [108, 15] - [108, 26])))
attribute: (jsx_attribute [109, 8] - [109, 65]
(property_identifier [109, 8] - [109, 13])
(string [109, 14] - [109, 65]
(string_fragment [109, 15] - [109, 64]))))
(jsx_expression [111, 8] - [152, 11]
(call_expression [111, 9] - [152, 10]
function: (member_expression [111, 9] - [111, 17]
object: (identifier [111, 9] - [111, 13])
property: (property_identifier [111, 14] - [111, 17]))
arguments: (arguments [111, 17] - [152, 10]
(arrow_function [111, 18] - [152, 9]
parameters: (formal_parameters [111, 18] - [111, 23]
(required_parameter [111, 19] - [111, 22]
pattern: (identifier [111, 19] - [111, 22])))
body: (statement_block [111, 27] - [152, 9]
(lexical_declaration [112, 10] - [113, 42]
(variable_declarator [112, 16] - [113, 41]
name: (identifier [112, 16] - [112, 22])
value: (binary_expression [112, 25] - [113, 41]
left: (call_expression [112, 25] - [112, 52]
function: (member_expression [112, 25] - [112, 44]
object: (member_expression [112, 25] - [112, 35]
object: (identifier [112, 25] - [112, 28])
property: (property_identifier [112, 29] - [112, 35]))
property: (property_identifier [112, 36] - [112, 44]))
arguments: (arguments [112, 44] - [112, 52]
(string [112, 45] - [112, 51]
(string_fragment [112, 46] - [112, 50]))))
right: (call_expression [113, 12] - [113, 41]
function: (member_expression [113, 12] - [113, 31]
object: (member_expression [113, 12] - [113, 22]
object: (identifier [113, 12] - [113, 15])
property: (property_identifier [113, 16] - [113, 22]))
property: (property_identifier [113, 23] - [113, 31]))
arguments: (arguments [113, 31] - [113, 41]
(string [113, 32] - [113, 40]
(string_fragment [113, 33] - [113, 39])))))))
(lexical_declaration [114, 10] - [117, 43]
(variable_declarator [114, 16] - [117, 42]
name: (identifier [114, 16] - [114, 25])
value: (binary_expression [114, 28] - [117, 42]
left: (binary_expression [114, 28] - [116, 43]
left: (binary_expression [114, 28] - [115, 41]
left: (call_expression [114, 28] - [114, 58]
function: (member_expression [114, 28] - [114, 47]
object: (member_expression [114, 28] - [114, 38]
object: (identifier [114, 28] - [114, 31])
property: (property_identifier [114, 32] - [114, 38]))
property: (property_identifier [114, 39] - [114, 47]))
arguments: (arguments [114, 47] - [114, 58]
(string [114, 48] - [114, 57]
(string_fragment [114, 49] - [114, 56]))))
right: (call_expression [115, 12] - [115, 41]
function: (member_expression [115, 12] - [115, 31]
object: (member_expression [115, 12] - [115, 22]
object: (identifier [115, 12] - [115, 15])
property: (property_identifier [115, 16] - [115, 22]))
property: (property_identifier [115, 23] - [115, 31]))
arguments: (arguments [115, 31] - [115, 41]
(string [115, 32] - [115, 40]
(string_fragment [115, 33] - [115, 39])))))
right: (call_expression [116, 12] - [116, 43]
function: (member_expression [116, 12] - [116, 31]
object: (member_expression [116, 12] - [116, 22]
object: (identifier [116, 12] - [116, 15])
property: (property_identifier [116, 16] - [116, 22]))
property: (property_identifier [116, 23] - [116, 31]))
arguments: (arguments [116, 31] - [116, 43]
(string [116, 32] - [116, 42]
(string_fragment [116, 33] - [116, 41])))))
right: (call_expression [117, 12] - [117, 42]
function: (member_expression [117, 12] - [117, 31]
object: (member_expression [117, 12] - [117, 22]
object: (identifier [117, 12] - [117, 15])
property: (property_identifier [117, 16] - [117, 22]))
property: (property_identifier [117, 23] - [117, 31]))
arguments: (arguments [117, 31] - [117, 42]
(string [117, 32] - [117, 41]
(string_fragment [117, 33] - [117, 40])))))))
(lexical_declaration [118, 10] - [122, 27]
(variable_declarator [118, 16] - [122, 26]
name: (identifier [118, 16] - [118, 26])
value: (ternary_expression [118, 29] - [122, 26]
condition: (identifier [118, 29] - [118, 35])
consequence: (string [119, 14] - [119, 28]
(string_fragment [119, 15] - [119, 27]))
alternative: (ternary_expression [120, 14] - [122, 26]
condition: (identifier [120, 14] - [120, 23])
consequence: (string [121, 14] - [121, 29]
(string_fragment [121, 15] - [121, 28]))
alternative: (string [122, 14] - [122, 26]
(string_fragment [122, 15] - [122, 25]))))))
(return_statement [124, 10] - [151, 12]
(parenthesized_expression [124, 17] - [151, 11]
(jsx_element [125, 12] - [150, 18]
open_tag: (jsx_opening_element [125, 12] - [132, 13]
name: (identifier [125, 13] - [125, 16])
attribute: (jsx_attribute [126, 14] - [126, 35]
(property_identifier [126, 14] - [126, 19])
(string [126, 20] - [126, 35]
(string_fragment [126, 21] - [126, 34])))
attribute: (jsx_attribute [127, 14] - [127, 26]
(property_identifier [127, 14] - [127, 17])
(jsx_expression [127, 18] - [127, 26]
(member_expression [127, 19] - [127, 25]
object: (identifier [127, 19] - [127, 22])
property: (property_identifier [127, 23] - [127, 25]))))
attribute: (jsx_attribute [128, 14] - [130, 55]
(property_identifier [128, 14] - [128, 25])
(jsx_expression [128, 26] - [130, 55]
(call_expression [128, 27] - [130, 54]
function: (member_expression [128, 27] - [130, 52]
object: (template_string [128, 27] - [130, 40]
(template_substitution [128, 28] - [128, 41]
(member_expression [128, 30] - [128, 40]
object: (identifier [128, 30] - [128, 33])
property: (property_identifier [128, 34] - [128, 40])))
(string_fragment [128, 41] - [128, 42])
(template_substitution [128, 42] - [128, 65]
(binary_expression [128, 44] - [128, 64]
left: (member_expression [128, 44] - [128, 52]
object: (identifier [128, 44] - [128, 47])
property: (property_identifier [128, 48] - [128, 52]))
right: (string [128, 56] - [128, 64]
(string_fragment [128, 57] - [128, 63]))))
(string_fragment [128, 65] - [128, 66])
(template_substitution [128, 66] - [130, 15]
(binary_expression [129, 16] - [129, 34]
left: (member_expression [129, 16] - [129, 28]
object: (identifier [129, 16] - [129, 19])
property: (property_identifier [129, 20] - [129, 28]))
right: (string [129, 32] - [129, 34])))
(string_fragment [130, 15] - [130, 16])
(template_substitution [130, 16] - [130, 39]
(binary_expression [130, 18] - [130, 38]
left: (member_expression [130, 18] - [130, 32]
object: (identifier [130, 18] - [130, 21])
property: (property_identifier [130, 22] - [130, 32]))
right: (string [130, 36] - [130, 38]))))
property: (property_identifier [130, 41] - [130, 52]))
arguments: (arguments [130, 52] - [130, 54]))))
attribute: (jsx_attribute [131, 14] - [131, 39]
(property_identifier [131, 14] - [131, 19])
(string [131, 20] - [131, 39]
(string_fragment [131, 21] - [131, 38]))))
(jsx_element [133, 14] - [140, 20]
open_tag: (jsx_opening_element [133, 14] - [133, 122]
name: (identifier [133, 15] - [133, 18])
attribute: (jsx_attribute [133, 19] - [133, 121]
(property_identifier [133, 19] - [133, 24])
(string [133, 25] - [133, 121]
(string_fragment [133, 26] - [133, 120]))))
(jsx_element [134, 16] - [136, 23]
open_tag: (jsx_opening_element [134, 16] - [134, 52]
name: (identifier [134, 17] - [134, 21])
attribute: (jsx_attribute [134, 22] - [134, 51]
(property_identifier [134, 22] - [134, 27])
(jsx_expression [134, 28] - [134, 51]
(template_string [134, 29] - [134, 50]
(string_fragment [134, 30] - [134, 36])
(template_substitution [134, 36] - [134, 49]
(identifier [134, 38] - [134, 48]))))))
(jsx_expression [135, 18] - [135, 30]
(member_expression [135, 19] - [135, 29]
object: (identifier [135, 19] - [135, 22])
property: (property_identifier [135, 23] - [135, 29])))
close_tag: (jsx_closing_element [136, 16] - [136, 23]
name: (identifier [136, 18] - [136, 22])))
(jsx_element [137, 16] - [139, 23]
open_tag: (jsx_opening_element [137, 16] - [137, 76]
name: (identifier [137, 17] - [137, 21])
attribute: (jsx_attribute [137, 22] - [137, 75]
(property_identifier [137, 22] - [137, 27])
(string [137, 28] - [137, 75]
(string_fragment [137, 29] - [137, 74]))))
(jsx_expression [138, 18] - [138, 65]
(call_expression [138, 19] - [138, 64]
function: (member_expression [138, 19] - [138, 62]
object: (new_expression [138, 19] - [138, 43]
constructor: (identifier [138, 23] - [138, 27])
arguments: (arguments [138, 27] - [138, 43]
(member_expression [138, 28] - [138, 42]
object: (identifier [138, 28] - [138, 31])
property: (property_identifier [138, 32] - [138, 42]))))
property: (property_identifier [138, 44] - [138, 62]))
arguments: (arguments [138, 62] - [138, 64])))
close_tag: (jsx_closing_element [139, 16] - [139, 23]
name: (identifier [139, 18] - [139, 22])))
close_tag: (jsx_closing_element [140, 14] - [140, 20]
name: (identifier [140, 16] - [140, 19])))
(jsx_element [141, 14] - [143, 20]
open_tag: (jsx_opening_element [141, 14] - [141, 97]
name: (identifier [141, 15] - [141, 18])
attribute: (jsx_attribute [141, 19] - [141, 96]
(property_identifier [141, 19] - [141, 24])
(string [141, 25] - [141, 96]
(string_fragment [141, 26] - [141, 95]))))
(jsx_expression [142, 16] - [142, 38]
(binary_expression [142, 17] - [142, 37]
left: (member_expression [142, 17] - [142, 25]
object: (identifier [142, 17] - [142, 20])
property: (property_identifier [142, 21] - [142, 25]))
right: (string [142, 29] - [142, 37]
(string_fragment [142, 30] - [142, 36]))))
close_tag: (jsx_closing_element [143, 14] - [143, 20]
name: (identifier [143, 16] - [143, 19])))
(jsx_element [144, 14] - [146, 20]
open_tag: (jsx_opening_element [144, 14] - [144, 101]
name: (identifier [144, 15] - [144, 18])
attribute: (jsx_attribute [144, 19] - [144, 100]
(property_identifier [144, 19] - [144, 24])
(string [144, 25] - [144, 100]
(string_fragment [144, 26] - [144, 99]))))
(jsx_text [144, 101] - [145, 26])
(jsx_expression [145, 26] - [145, 47]
(binary_expression [145, 27] - [145, 46]
left: (member_expression [145, 27] - [145, 39]
object: (identifier [145, 27] - [145, 30])
property: (property_identifier [145, 31] - [145, 39]))
right: (string [145, 43] - [145, 46]
(string_fragment [145, 44] - [145, 45]))))
close_tag: (jsx_closing_element [146, 14] - [146, 20]
name: (identifier [146, 16] - [146, 19])))
(jsx_element [147, 14] - [149, 20]
open_tag: (jsx_opening_element [147, 14] - [147, 96]
name: (identifier [147, 15] - [147, 18])
attribute: (jsx_attribute [147, 19] - [147, 95]
(property_identifier [147, 19] - [147, 24])
(string [147, 25] - [147, 95]
(string_fragment [147, 26] - [147, 94]))))
(jsx_text [147, 96] - [148, 20])
(jsx_expression [148, 20] - [148, 43]
(binary_expression [148, 21] - [148, 42]
left: (member_expression [148, 21] - [148, 35]
object: (identifier [148, 21] - [148, 24])
property: (property_identifier [148, 25] - [148, 35]))
right: (string [148, 39] - [148, 42]
(string_fragment [148, 40] - [148, 41]))))
close_tag: (jsx_closing_element [149, 14] - [149, 20]
name: (identifier [149, 16] - [149, 19])))
close_tag: (jsx_closing_element [150, 12] - [150, 18]
name: (identifier [150, 14] - [150, 17]))))))))))
close_tag: (jsx_closing_element [153, 6] - [153, 12]
name: (identifier [153, 8] - [153, 11])))
(jsx_element [155, 6] - [166, 14]
open_tag: (jsx_opening_element [155, 6] - [155, 13]
name: (identifier [155, 7] - [155, 12]))
(jsx_expression [156, 8] - [165, 10]
(template_string [156, 9] - [165, 9]
(string_fragment [156, 10] - [165, 8])))
close_tag: (jsx_closing_element [166, 6] - [166, 14]
name: (identifier [166, 8] - [166, 13])))
(jsx_element [168, 6] - [168, 54]
open_tag: (jsx_opening_element [168, 6] - [168, 45]
name: (identifier [168, 7] - [168, 13])
attribute: (jsx_attribute [168, 14] - [168, 44]
(property_identifier [168, 14] - [168, 17])
(string [168, 18] - [168, 44]
(string_fragment [168, 19] - [168, 43]))))
close_tag: (jsx_closing_element [168, 45] - [168, 54]
name: (identifier [168, 47] - [168, 53])))
close_tag: (jsx_closing_element [169, 4] - [169, 26]
name: (identifier [169, 6] - [169, 25])))))))))))

View File

@ -1,442 +0,0 @@
(program [0, 0] - [72, 0]
(export_statement [0, 0] - [6, 1]
declaration: (function_declaration [0, 7] - [6, 1]
name: (identifier [0, 22] - [0, 30])
parameters: (formal_parameters [0, 30] - [0, 55]
(required_parameter [0, 31] - [0, 54]
pattern: (identifier [0, 31] - [0, 42])
type: (type_annotation [0, 42] - [0, 54]
(type_identifier [0, 44] - [0, 54]))))
return_type: (type_annotation [0, 55] - [0, 76]
(generic_type [0, 57] - [0, 76]
name: (type_identifier [0, 57] - [0, 64])
type_arguments: (type_arguments [0, 64] - [0, 76]
(type_identifier [0, 65] - [0, 75]))))
body: (statement_block [0, 77] - [6, 1]
(lexical_declaration [1, 2] - [1, 54]
(variable_declarator [1, 8] - [1, 53]
name: (identifier [1, 8] - [1, 12])
value: (new_expression [1, 15] - [1, 53]
constructor: (identifier [1, 19] - [1, 29])
arguments: (arguments [1, 29] - [1, 53]
(binary_expression [1, 30] - [1, 52]
left: (number [1, 30] - [1, 31])
right: (member_expression [1, 34] - [1, 52]
object: (identifier [1, 34] - [1, 45])
property: (property_identifier [1, 46] - [1, 52])))))))
(expression_statement [2, 2] - [2, 17]
(assignment_expression [2, 2] - [2, 16]
left: (subscript_expression [2, 2] - [2, 9]
object: (identifier [2, 2] - [2, 6])
index: (number [2, 7] - [2, 8]))
right: (number [2, 12] - [2, 16])))
(expression_statement [3, 2] - [3, 27]
(call_expression [3, 2] - [3, 26]
function: (member_expression [3, 2] - [3, 10]
object: (identifier [3, 2] - [3, 6])
property: (property_identifier [3, 7] - [3, 10]))
arguments: (arguments [3, 10] - [3, 26]
(identifier [3, 11] - [3, 22])
(number [3, 24] - [3, 25]))))
(lexical_declaration [4, 2] - [4, 65]
(variable_declarator [4, 8] - [4, 64]
name: (identifier [4, 8] - [4, 18])
value: (await_expression [4, 21] - [4, 64]
(call_expression [4, 27] - [4, 64]
function: (member_expression [4, 27] - [4, 47]
object: (member_expression [4, 27] - [4, 40]
object: (identifier [4, 27] - [4, 33])
property: (property_identifier [4, 34] - [4, 40]))
property: (property_identifier [4, 41] - [4, 47]))
arguments: (arguments [4, 47] - [4, 64]
(string [4, 48] - [4, 57]
(string_fragment [4, 49] - [4, 56]))
(identifier [4, 59] - [4, 63]))))))
(return_statement [5, 2] - [5, 36]
(new_expression [5, 9] - [5, 35]
constructor: (identifier [5, 13] - [5, 23])
arguments: (arguments [5, 23] - [5, 35]
(identifier [5, 24] - [5, 34])))))))
(export_statement [8, 0] - [18, 1]
declaration: (function_declaration [8, 7] - [18, 1]
name: (identifier [8, 22] - [8, 30])
parameters: (formal_parameters [8, 30] - [11, 1]
(required_parameter [9, 2] - [9, 18]
pattern: (identifier [9, 2] - [9, 6])
type: (type_annotation [9, 6] - [9, 18]
(type_identifier [9, 8] - [9, 18])))
(required_parameter [10, 2] - [10, 19]
pattern: (identifier [10, 2] - [10, 7])
type: (type_annotation [10, 7] - [10, 19]
(type_identifier [10, 9] - [10, 19]))))
return_type: (type_annotation [11, 1] - [11, 22]
(generic_type [11, 3] - [11, 22]
name: (type_identifier [11, 3] - [11, 10])
type_arguments: (type_arguments [11, 10] - [11, 22]
(type_identifier [11, 11] - [11, 21]))))
body: (statement_block [11, 23] - [18, 1]
(lexical_declaration [12, 2] - [12, 62]
(variable_declarator [12, 8] - [12, 61]
name: (identifier [12, 8] - [12, 12])
value: (new_expression [12, 15] - [12, 61]
constructor: (identifier [12, 19] - [12, 29])
arguments: (arguments [12, 29] - [12, 61]
(binary_expression [12, 30] - [12, 60]
left: (binary_expression [12, 30] - [12, 45]
left: (number [12, 30] - [12, 31])
right: (member_expression [12, 34] - [12, 45]
object: (identifier [12, 34] - [12, 38])
property: (property_identifier [12, 39] - [12, 45])))
right: (member_expression [12, 48] - [12, 60]
object: (identifier [12, 48] - [12, 53])
property: (property_identifier [12, 54] - [12, 60])))))))
(expression_statement [13, 2] - [13, 17]
(assignment_expression [13, 2] - [13, 16]
left: (subscript_expression [13, 2] - [13, 9]
object: (identifier [13, 2] - [13, 6])
index: (number [13, 7] - [13, 8]))
right: (number [13, 12] - [13, 16])))
(expression_statement [14, 2] - [14, 20]
(call_expression [14, 2] - [14, 19]
function: (member_expression [14, 2] - [14, 10]
object: (identifier [14, 2] - [14, 6])
property: (property_identifier [14, 7] - [14, 10]))
arguments: (arguments [14, 10] - [14, 19]
(identifier [14, 11] - [14, 15])
(number [14, 17] - [14, 18]))))
(expression_statement [15, 2] - [15, 35]
(call_expression [15, 2] - [15, 34]
function: (member_expression [15, 2] - [15, 10]
object: (identifier [15, 2] - [15, 6])
property: (property_identifier [15, 7] - [15, 10]))
arguments: (arguments [15, 10] - [15, 34]
(identifier [15, 11] - [15, 16])
(binary_expression [15, 18] - [15, 33]
left: (number [15, 18] - [15, 19])
right: (member_expression [15, 22] - [15, 33]
object: (identifier [15, 22] - [15, 26])
property: (property_identifier [15, 27] - [15, 33]))))))
(lexical_declaration [16, 2] - [16, 65]
(variable_declarator [16, 8] - [16, 64]
name: (identifier [16, 8] - [16, 18])
value: (await_expression [16, 21] - [16, 64]
(call_expression [16, 27] - [16, 64]
function: (member_expression [16, 27] - [16, 47]
object: (member_expression [16, 27] - [16, 40]
object: (identifier [16, 27] - [16, 33])
property: (property_identifier [16, 34] - [16, 40]))
property: (property_identifier [16, 41] - [16, 47]))
arguments: (arguments [16, 47] - [16, 64]
(string [16, 48] - [16, 57]
(string_fragment [16, 49] - [16, 56]))
(identifier [16, 59] - [16, 63]))))))
(return_statement [17, 2] - [17, 36]
(new_expression [17, 9] - [17, 35]
constructor: (identifier [17, 13] - [17, 23])
arguments: (arguments [17, 23] - [17, 35]
(identifier [17, 24] - [17, 34])))))))
(export_statement [20, 0] - [37, 1]
declaration: (function_declaration [20, 7] - [37, 1]
name: (identifier [20, 22] - [20, 37])
parameters: (formal_parameters [20, 37] - [22, 1]
(required_parameter [21, 2] - [21, 22]
pattern: (identifier [21, 2] - [21, 8])
type: (type_annotation [21, 8] - [21, 22]
(array_type [21, 10] - [21, 22]
(type_identifier [21, 10] - [21, 20])))))
return_type: (type_annotation [22, 1] - [22, 22]
(generic_type [22, 3] - [22, 22]
name: (type_identifier [22, 3] - [22, 10])
type_arguments: (type_arguments [22, 10] - [22, 22]
(type_identifier [22, 11] - [22, 21]))))
body: (statement_block [22, 23] - [37, 1]
(if_statement [23, 2] - [26, 3]
condition: (parenthesized_expression [23, 5] - [23, 26]
(binary_expression [23, 6] - [23, 25]
left: (member_expression [23, 6] - [23, 19]
object: (identifier [23, 6] - [23, 12])
property: (property_identifier [23, 13] - [23, 19]))
right: (number [23, 24] - [23, 25])))
consequence: (statement_block [23, 27] - [26, 3]
(lexical_declaration [24, 4] - [24, 80]
(variable_declarator [24, 10] - [24, 79]
name: (identifier [24, 10] - [24, 20])
value: (await_expression [24, 23] - [24, 79]
(call_expression [24, 29] - [24, 79]
function: (member_expression [24, 29] - [24, 49]
object: (member_expression [24, 29] - [24, 42]
object: (identifier [24, 29] - [24, 35])
property: (property_identifier [24, 36] - [24, 42]))
property: (property_identifier [24, 43] - [24, 49]))
arguments: (arguments [24, 49] - [24, 79]
(string [24, 50] - [24, 59]
(string_fragment [24, 51] - [24, 58]))
(new_expression [24, 61] - [24, 78]
constructor: (identifier [24, 65] - [24, 75])
arguments: (arguments [24, 75] - [24, 78]
(number [24, 76] - [24, 77]))))))))
(return_statement [25, 4] - [25, 38]
(new_expression [25, 11] - [25, 37]
constructor: (identifier [25, 15] - [25, 25])
arguments: (arguments [25, 25] - [25, 37]
(identifier [25, 26] - [25, 36]))))))
(if_statement [28, 2] - [30, 3]
condition: (parenthesized_expression [28, 5] - [28, 26]
(binary_expression [28, 6] - [28, 25]
left: (member_expression [28, 6] - [28, 19]
object: (identifier [28, 6] - [28, 12])
property: (property_identifier [28, 13] - [28, 19]))
right: (number [28, 24] - [28, 25])))
consequence: (statement_block [28, 27] - [30, 3]
(return_statement [29, 4] - [29, 21]
(subscript_expression [29, 11] - [29, 20]
object: (identifier [29, 11] - [29, 17])
index: (number [29, 18] - [29, 19])))))
(lexical_declaration [32, 2] - [32, 66]
(variable_declarator [32, 8] - [32, 65]
name: (identifier [32, 8] - [32, 9])
value: (call_expression [32, 12] - [32, 65]
function: (member_expression [32, 12] - [32, 20]
object: (identifier [32, 12] - [32, 16])
property: (property_identifier [32, 17] - [32, 20]))
arguments: (arguments [32, 20] - [32, 65]
(number [32, 21] - [32, 22])
(call_expression [32, 24] - [32, 64]
function: (member_expression [32, 24] - [32, 34]
object: (identifier [32, 24] - [32, 28])
property: (property_identifier [32, 29] - [32, 34]))
arguments: (arguments [32, 34] - [32, 64]
(call_expression [32, 35] - [32, 63]
function: (member_expression [32, 35] - [32, 44]
object: (identifier [32, 35] - [32, 39])
property: (property_identifier [32, 40] - [32, 44]))
arguments: (arguments [32, 44] - [32, 63]
(binary_expression [32, 45] - [32, 62]
left: (member_expression [32, 45] - [32, 58]
object: (identifier [32, 45] - [32, 51])
property: (property_identifier [32, 52] - [32, 58]))
right: (number [32, 61] - [32, 62]))))))))))
(lexical_declaration [33, 2] - [33, 61]
(variable_declarator [33, 8] - [33, 60]
name: (identifier [33, 8] - [33, 16])
value: (await_expression [33, 19] - [33, 60]
(call_expression [33, 25] - [33, 60]
function: (identifier [33, 25] - [33, 40])
arguments: (arguments [33, 40] - [33, 60]
(call_expression [33, 41] - [33, 59]
function: (member_expression [33, 41] - [33, 53]
object: (identifier [33, 41] - [33, 47])
property: (property_identifier [33, 48] - [33, 53]))
arguments: (arguments [33, 53] - [33, 59]
(number [33, 54] - [33, 55])
(identifier [33, 57] - [33, 58]))))))))
(lexical_declaration [34, 2] - [34, 59]
(variable_declarator [34, 8] - [34, 58]
name: (identifier [34, 8] - [34, 17])
value: (await_expression [34, 20] - [34, 58]
(call_expression [34, 26] - [34, 58]
function: (identifier [34, 26] - [34, 41])
arguments: (arguments [34, 41] - [34, 58]
(call_expression [34, 42] - [34, 57]
function: (member_expression [34, 42] - [34, 54]
object: (identifier [34, 42] - [34, 48])
property: (property_identifier [34, 49] - [34, 54]))
arguments: (arguments [34, 54] - [34, 57]
(identifier [34, 55] - [34, 56]))))))))
(return_statement [36, 2] - [36, 45]
(await_expression [36, 9] - [36, 44]
(call_expression [36, 15] - [36, 44]
function: (identifier [36, 15] - [36, 23])
arguments: (arguments [36, 23] - [36, 44]
(identifier [36, 24] - [36, 32])
(identifier [36, 34] - [36, 43]))))))))
(export_statement [39, 0] - [71, 1]
declaration: (function_declaration [39, 7] - [71, 1]
name: (identifier [39, 22] - [39, 42])
parameters: (formal_parameters [39, 42] - [45, 1]
(required_parameter [40, 2] - [40, 18]
pattern: (identifier [40, 2] - [40, 6])
type: (type_annotation [40, 6] - [40, 18]
(type_identifier [40, 8] - [40, 18])))
(required_parameter [41, 2] - [41, 21]
pattern: (identifier [41, 2] - [41, 7])
type: (type_annotation [41, 7] - [41, 21]
(array_type [41, 9] - [41, 21]
(type_identifier [41, 9] - [41, 19]))))
(required_parameter [42, 2] - [42, 15]
pattern: (identifier [42, 2] - [42, 7])
type: (type_annotation [42, 7] - [42, 15]
(predefined_type [42, 9] - [42, 15])))
(required_parameter [43, 2] - [43, 18]
pattern: (identifier [43, 2] - [43, 10])
type: (type_annotation [43, 10] - [43, 18]
(predefined_type [43, 12] - [43, 18])))
(required_parameter [44, 2] - [44, 26]
pattern: (identifier [44, 2] - [44, 14])
type: (type_annotation [44, 14] - [44, 26]
(type_identifier [44, 16] - [44, 26]))))
return_type: (type_annotation [45, 1] - [45, 19]
(generic_type [45, 3] - [45, 19]
name: (type_identifier [45, 3] - [45, 10])
type_arguments: (type_arguments [45, 10] - [45, 19]
(predefined_type [45, 11] - [45, 18]))))
body: (statement_block [45, 20] - [71, 1]
(lexical_declaration [46, 2] - [46, 25]
(variable_declarator [46, 6] - [46, 24]
name: (identifier [46, 6] - [46, 17])
value: (identifier [46, 20] - [46, 24])))
(lexical_declaration [47, 2] - [47, 27]
(variable_declarator [47, 6] - [47, 26]
name: (identifier [47, 6] - [47, 18])
value: (identifier [47, 21] - [47, 26])))
(lexical_declaration [48, 2] - [48, 27]
(variable_declarator [48, 6] - [48, 26]
name: (identifier [48, 6] - [48, 11])
value: (binary_expression [48, 14] - [48, 26]
left: (identifier [48, 14] - [48, 22])
right: (number [48, 25] - [48, 26]))))
(for_in_statement [50, 2] - [62, 3]
left: (identifier [50, 13] - [50, 24])
right: (identifier [50, 28] - [50, 33])
body: (statement_block [50, 35] - [62, 3]
(if_statement [51, 4] - [59, 5]
condition: (parenthesized_expression [51, 7] - [51, 31]
(binary_expression [51, 8] - [51, 30]
left: (binary_expression [51, 8] - [51, 24]
left: (identifier [51, 8] - [51, 20])
right: (number [51, 23] - [51, 24]))
right: (number [51, 29] - [51, 30])))
consequence: (statement_block [51, 32] - [53, 5]
(expression_statement [52, 6] - [52, 61]
(assignment_expression [52, 6] - [52, 60]
left: (identifier [52, 6] - [52, 17])
right: (await_expression [52, 20] - [52, 60]
(call_expression [52, 26] - [52, 60]
function: (identifier [52, 26] - [52, 34])
arguments: (arguments [52, 34] - [52, 60]
(identifier [52, 35] - [52, 46])
(identifier [52, 48] - [52, 59])))))))
alternative: (else_clause [53, 6] - [59, 5]
(statement_block [53, 11] - [59, 5]
(if_statement [54, 6] - [58, 7]
condition: (parenthesized_expression [54, 9] - [54, 33]
(binary_expression [54, 10] - [54, 32]
left: (identifier [54, 10] - [54, 22])
right: (identifier [54, 27] - [54, 32])))
consequence: (statement_block [54, 34] - [56, 7]
(expression_statement [55, 8] - [55, 63]
(assignment_expression [55, 8] - [55, 62]
left: (identifier [55, 8] - [55, 19])
right: (await_expression [55, 22] - [55, 62]
(call_expression [55, 28] - [55, 62]
function: (identifier [55, 28] - [55, 36])
arguments: (arguments [55, 36] - [55, 62]
(identifier [55, 37] - [55, 48])
(identifier [55, 50] - [55, 61])))))))
alternative: (else_clause [56, 8] - [58, 7]
(statement_block [56, 13] - [58, 7]
(expression_statement [57, 8] - [57, 63]
(assignment_expression [57, 8] - [57, 62]
left: (identifier [57, 8] - [57, 19])
right: (await_expression [57, 22] - [57, 62]
(call_expression [57, 28] - [57, 62]
function: (identifier [57, 28] - [57, 36])
arguments: (arguments [57, 36] - [57, 62]
(identifier [57, 37] - [57, 48])
(identifier [57, 50] - [57, 61]))))))))))))
(expression_statement [60, 4] - [60, 48]
(assignment_expression [60, 4] - [60, 47]
left: (identifier [60, 4] - [60, 16])
right: (call_expression [60, 19] - [60, 47]
function: (member_expression [60, 19] - [60, 29]
object: (identifier [60, 19] - [60, 23])
property: (property_identifier [60, 24] - [60, 29]))
arguments: (arguments [60, 29] - [60, 47]
(binary_expression [60, 30] - [60, 46]
left: (identifier [60, 30] - [60, 42])
right: (number [60, 45] - [60, 46]))))))
(expression_statement [61, 4] - [61, 34]
(assignment_expression [61, 4] - [61, 33]
left: (identifier [61, 4] - [61, 9])
right: (call_expression [61, 12] - [61, 33]
function: (member_expression [61, 12] - [61, 22]
object: (identifier [61, 12] - [61, 16])
property: (property_identifier [61, 17] - [61, 22]))
arguments: (arguments [61, 22] - [61, 33]
(binary_expression [61, 23] - [61, 32]
left: (identifier [61, 23] - [61, 28])
right: (number [61, 31] - [61, 32]))))))))
(lexical_declaration [64, 2] - [66, 13]
(variable_declarator [64, 8] - [66, 12]
name: (identifier [64, 8] - [64, 22])
value: (call_expression [64, 25] - [66, 12]
function: (member_expression [64, 25] - [66, 8]
object: (call_expression [64, 25] - [66, 3]
function: (member_expression [64, 25] - [64, 52]
object: (call_expression [64, 25] - [64, 48]
function: (member_expression [64, 25] - [64, 35]
object: (identifier [64, 25] - [64, 30])
property: (property_identifier [64, 31] - [64, 35]))
arguments: (arguments [64, 35] - [64, 48]
(identifier [64, 36] - [64, 47])))
property: (property_identifier [64, 49] - [64, 52]))
arguments: (arguments [64, 52] - [66, 3]
(arrow_function [64, 53] - [65, 35]
parameters: (formal_parameters [64, 53] - [64, 56]
(required_parameter [64, 54] - [64, 55]
pattern: (identifier [64, 54] - [64, 55])))
body: (call_expression [65, 4] - [65, 35]
function: (member_expression [65, 4] - [65, 27]
object: (call_expression [65, 4] - [65, 18]
function: (member_expression [65, 4] - [65, 14]
object: (identifier [65, 4] - [65, 5])
property: (property_identifier [65, 6] - [65, 14]))
arguments: (arguments [65, 14] - [65, 18]
(number [65, 15] - [65, 17])))
property: (property_identifier [65, 19] - [65, 27]))
arguments: (arguments [65, 27] - [65, 35]
(number [65, 28] - [65, 29])
(string [65, 31] - [65, 34]
(string_fragment [65, 32] - [65, 33])))))))
property: (property_identifier [66, 4] - [66, 8]))
arguments: (arguments [66, 8] - [66, 12]
(string [66, 9] - [66, 11])))))
(lexical_declaration [67, 2] - [69, 13]
(variable_declarator [67, 8] - [69, 12]
name: (identifier [67, 8] - [67, 23])
value: (call_expression [67, 26] - [69, 12]
function: (member_expression [67, 26] - [69, 8]
object: (call_expression [67, 26] - [69, 3]
function: (member_expression [67, 26] - [67, 54]
object: (call_expression [67, 26] - [67, 50]
function: (member_expression [67, 26] - [67, 36]
object: (identifier [67, 26] - [67, 31])
property: (property_identifier [67, 32] - [67, 36]))
arguments: (arguments [67, 36] - [67, 50]
(identifier [67, 37] - [67, 49])))
property: (property_identifier [67, 51] - [67, 54]))
arguments: (arguments [67, 54] - [69, 3]
(arrow_function [67, 55] - [68, 35]
parameters: (formal_parameters [67, 55] - [67, 58]
(required_parameter [67, 56] - [67, 57]
pattern: (identifier [67, 56] - [67, 57])))
body: (call_expression [68, 4] - [68, 35]
function: (member_expression [68, 4] - [68, 27]
object: (call_expression [68, 4] - [68, 18]
function: (member_expression [68, 4] - [68, 14]
object: (identifier [68, 4] - [68, 5])
property: (property_identifier [68, 6] - [68, 14]))
arguments: (arguments [68, 14] - [68, 18]
(number [68, 15] - [68, 17])))
property: (property_identifier [68, 19] - [68, 27]))
arguments: (arguments [68, 27] - [68, 35]
(number [68, 28] - [68, 29])
(string [68, 31] - [68, 34]
(string_fragment [68, 32] - [68, 33])))))))
property: (property_identifier [69, 4] - [69, 8]))
arguments: (arguments [69, 8] - [69, 12]
(string [69, 9] - [69, 11])))))
(return_statement [70, 2] - [70, 44]
(binary_expression [70, 9] - [70, 43]
left: (identifier [70, 9] - [70, 23])
right: (identifier [70, 28] - [70, 43])))))))

View File

@ -1,570 +0,0 @@
(program [0, 0] - [93, 0]
(import_statement [0, 0] - [0, 44]
(import_clause [0, 7] - [0, 15]
(named_imports [0, 7] - [0, 15]
(import_specifier [0, 9] - [0, 13]
name: (identifier [0, 9] - [0, 13]))))
source: (string [0, 21] - [0, 43]
(string_fragment [0, 22] - [0, 42])))
(import_statement [1, 0] - [1, 41]
(import_clause [1, 7] - [1, 17]
(named_imports [1, 7] - [1, 17]
(import_specifier [1, 9] - [1, 15]
name: (identifier [1, 9] - [1, 15]))))
source: (string [1, 23] - [1, 40]
(string_fragment [1, 24] - [1, 39])))
(import_statement [2, 0] - [2, 40]
(import_clause [2, 7] - [2, 15]
(named_imports [2, 7] - [2, 15]
(import_specifier [2, 9] - [2, 13]
name: (identifier [2, 9] - [2, 13]))))
source: (string [2, 21] - [2, 39]
(string_fragment [2, 22] - [2, 38])))
(import_statement [3, 0] - [3, 42]
(import_clause [3, 7] - [3, 21]
(named_imports [3, 7] - [3, 21]
(import_specifier [3, 9] - [3, 19]
name: (identifier [3, 9] - [3, 19]))))
source: (string [3, 27] - [3, 41]
(string_fragment [3, 28] - [3, 40])))
(import_statement [4, 0] - [4, 46]
(import_clause [4, 7] - [4, 21]
(named_imports [4, 7] - [4, 21]
(import_specifier [4, 9] - [4, 19]
name: (identifier [4, 9] - [4, 19]))))
source: (string [4, 27] - [4, 45]
(string_fragment [4, 28] - [4, 44])))
(import_statement [5, 0] - [5, 60]
(import_clause [5, 7] - [5, 27]
(named_imports [5, 7] - [5, 27]
(import_specifier [5, 9] - [5, 25]
name: (identifier [5, 9] - [5, 25]))))
source: (string [5, 33] - [5, 59]
(string_fragment [5, 34] - [5, 58])))
(import_statement [6, 0] - [6, 46]
(import_clause [6, 7] - [6, 17]
(named_imports [6, 7] - [6, 17]
(import_specifier [6, 9] - [6, 15]
name: (identifier [6, 9] - [6, 15]))))
source: (string [6, 23] - [6, 45]
(string_fragment [6, 24] - [6, 44])))
(expression_statement [8, 0] - [23, 3]
(call_expression [8, 0] - [23, 2]
function: (identifier [8, 0] - [8, 4])
arguments: (arguments [8, 4] - [23, 2]
(string [8, 5] - [8, 42]
(string_fragment [8, 6] - [8, 41]))
(arrow_function [8, 44] - [23, 1]
parameters: (formal_parameters [8, 50] - [8, 52])
body: (statement_block [8, 56] - [23, 1]
(lexical_declaration [9, 2] - [9, 25]
(variable_declarator [9, 8] - [9, 24]
name: (identifier [9, 8] - [9, 11])
value: (new_expression [9, 14] - [9, 24]
constructor: (identifier [9, 18] - [9, 22])
arguments: (arguments [9, 22] - [9, 24]))))
(expression_statement [10, 2] - [10, 29]
(call_expression [10, 2] - [10, 28]
function: (member_expression [10, 2] - [10, 11]
object: (identifier [10, 2] - [10, 5])
property: (property_identifier [10, 6] - [10, 11]))
arguments: (arguments [10, 11] - [10, 28]
(string [10, 12] - [10, 15]
(string_fragment [10, 13] - [10, 14]))
(identifier [10, 17] - [10, 27]))))
(lexical_declaration [12, 2] - [12, 40]
(variable_declarator [12, 6] - [12, 39]
name: (identifier [12, 6] - [12, 9])
value: (await_expression [12, 12] - [12, 39]
(call_expression [12, 18] - [12, 39]
function: (member_expression [12, 18] - [12, 29]
object: (identifier [12, 18] - [12, 21])
property: (property_identifier [12, 22] - [12, 29]))
arguments: (arguments [12, 29] - [12, 39]
(string [12, 30] - [12, 38]
(string_fragment [12, 31] - [12, 37])))))))
(expression_statement [13, 2] - [13, 31]
(call_expression [13, 2] - [13, 30]
function: (member_expression [13, 2] - [13, 25]
object: (call_expression [13, 2] - [13, 20]
function: (identifier [13, 2] - [13, 8])
arguments: (arguments [13, 8] - [13, 20]
(member_expression [13, 9] - [13, 19]
object: (identifier [13, 9] - [13, 12])
property: (property_identifier [13, 13] - [13, 19]))))
property: (property_identifier [13, 21] - [13, 25]))
arguments: (arguments [13, 25] - [13, 30]
(number [13, 26] - [13, 29]))))
(expression_statement [14, 2] - [14, 65]
(call_expression [14, 2] - [14, 64]
function: (member_expression [14, 2] - [14, 51]
object: (call_expression [14, 2] - [14, 41]
function: (identifier [14, 2] - [14, 8])
arguments: (arguments [14, 8] - [14, 41]
(call_expression [14, 9] - [14, 40]
function: (member_expression [14, 9] - [14, 24]
object: (member_expression [14, 9] - [14, 20]
object: (identifier [14, 9] - [14, 12])
property: (property_identifier [14, 13] - [14, 20]))
property: (property_identifier [14, 21] - [14, 24]))
arguments: (arguments [14, 24] - [14, 40]
(string [14, 25] - [14, 39]
(string_fragment [14, 26] - [14, 38]))))))
property: (property_identifier [14, 42] - [14, 51]))
arguments: (arguments [14, 51] - [14, 64]
(string [14, 52] - [14, 63]
(string_fragment [14, 53] - [14, 62])))))
(expression_statement [16, 2] - [16, 39]
(assignment_expression [16, 2] - [16, 38]
left: (identifier [16, 2] - [16, 5])
right: (await_expression [16, 8] - [16, 38]
(call_expression [16, 14] - [16, 38]
function: (member_expression [16, 14] - [16, 25]
object: (identifier [16, 14] - [16, 17])
property: (property_identifier [16, 18] - [16, 25]))
arguments: (arguments [16, 25] - [16, 38]
(string [16, 26] - [16, 37]
(string_fragment [16, 27] - [16, 36])))))))
(expression_statement [17, 2] - [17, 31]
(call_expression [17, 2] - [17, 30]
function: (member_expression [17, 2] - [17, 25]
object: (call_expression [17, 2] - [17, 20]
function: (identifier [17, 2] - [17, 8])
arguments: (arguments [17, 8] - [17, 20]
(member_expression [17, 9] - [17, 19]
object: (identifier [17, 9] - [17, 12])
property: (property_identifier [17, 13] - [17, 19]))))
property: (property_identifier [17, 21] - [17, 25]))
arguments: (arguments [17, 25] - [17, 30]
(number [17, 26] - [17, 29]))))
(expression_statement [18, 2] - [18, 65]
(call_expression [18, 2] - [18, 64]
function: (member_expression [18, 2] - [18, 51]
object: (call_expression [18, 2] - [18, 41]
function: (identifier [18, 2] - [18, 8])
arguments: (arguments [18, 8] - [18, 41]
(call_expression [18, 9] - [18, 40]
function: (member_expression [18, 9] - [18, 24]
object: (member_expression [18, 9] - [18, 20]
object: (identifier [18, 9] - [18, 12])
property: (property_identifier [18, 13] - [18, 20]))
property: (property_identifier [18, 21] - [18, 24]))
arguments: (arguments [18, 24] - [18, 40]
(string [18, 25] - [18, 39]
(string_fragment [18, 26] - [18, 38]))))))
property: (property_identifier [18, 42] - [18, 51]))
arguments: (arguments [18, 51] - [18, 64]
(string [18, 52] - [18, 63]
(string_fragment [18, 53] - [18, 62])))))
(expression_statement [20, 2] - [20, 39]
(assignment_expression [20, 2] - [20, 38]
left: (identifier [20, 2] - [20, 5])
right: (await_expression [20, 8] - [20, 38]
(call_expression [20, 14] - [20, 38]
function: (member_expression [20, 14] - [20, 25]
object: (identifier [20, 14] - [20, 17])
property: (property_identifier [20, 18] - [20, 25]))
arguments: (arguments [20, 25] - [20, 38]
(string [20, 26] - [20, 37]
(string_fragment [20, 27] - [20, 36])))))))
(expression_statement [21, 2] - [21, 31]
(call_expression [21, 2] - [21, 30]
function: (member_expression [21, 2] - [21, 25]
object: (call_expression [21, 2] - [21, 20]
function: (identifier [21, 2] - [21, 8])
arguments: (arguments [21, 8] - [21, 20]
(member_expression [21, 9] - [21, 19]
object: (identifier [21, 9] - [21, 12])
property: (property_identifier [21, 13] - [21, 19]))))
property: (property_identifier [21, 21] - [21, 25]))
arguments: (arguments [21, 25] - [21, 30]
(number [21, 26] - [21, 29]))))
(expression_statement [22, 2] - [22, 65]
(call_expression [22, 2] - [22, 64]
function: (member_expression [22, 2] - [22, 51]
object: (call_expression [22, 2] - [22, 41]
function: (identifier [22, 2] - [22, 8])
arguments: (arguments [22, 8] - [22, 41]
(call_expression [22, 9] - [22, 40]
function: (member_expression [22, 9] - [22, 24]
object: (member_expression [22, 9] - [22, 20]
object: (identifier [22, 9] - [22, 12])
property: (property_identifier [22, 13] - [22, 20]))
property: (property_identifier [22, 21] - [22, 24]))
arguments: (arguments [22, 24] - [22, 40]
(string [22, 25] - [22, 39]
(string_fragment [22, 26] - [22, 38]))))))
property: (property_identifier [22, 42] - [22, 51]))
arguments: (arguments [22, 51] - [22, 64]
(string [22, 52] - [22, 63]
(string_fragment [22, 53] - [22, 62]))))))))))
(expression_statement [25, 0] - [92, 3]
(call_expression [25, 0] - [92, 2]
function: (identifier [25, 0] - [25, 4])
arguments: (arguments [25, 4] - [92, 2]
(string [25, 5] - [25, 77]
(string_fragment [25, 6] - [25, 76]))
(arrow_function [25, 79] - [92, 1]
parameters: (formal_parameters [25, 85] - [25, 87])
body: (statement_block [25, 91] - [92, 1]
(lexical_declaration [26, 2] - [26, 37]
(variable_declarator [26, 8] - [26, 36]
name: (identifier [26, 8] - [26, 19])
value: (member_expression [26, 22] - [26, 36]
object: (identifier [26, 22] - [26, 32])
property: (property_identifier [26, 33] - [26, 36]))))
(lexical_declaration [27, 2] - [27, 60]
(variable_declarator [27, 8] - [27, 59]
name: (identifier [27, 8] - [27, 25])
value: (member_expression [27, 28] - [27, 59]
object: (identifier [27, 28] - [27, 44])
property: (property_identifier [27, 45] - [27, 59]))))
(lexical_declaration [28, 2] - [28, 43]
(variable_declarator [28, 8] - [28, 42]
name: (identifier [28, 8] - [28, 27])
value: (member_expression [28, 30] - [28, 42]
object: (identifier [28, 30] - [28, 36])
property: (property_identifier [28, 37] - [28, 42]))))
(lexical_declaration [29, 2] - [29, 45]
(variable_declarator [29, 8] - [29, 44]
name: (identifier [29, 8] - [29, 20])
value: (call_expression [29, 23] - [29, 44]
function: (member_expression [29, 23] - [29, 35]
object: (member_expression [29, 23] - [29, 31]
object: (identifier [29, 23] - [29, 27])
property: (property_identifier [29, 28] - [29, 31]))
property: (property_identifier [29, 32] - [29, 35]))
arguments: (arguments [29, 35] - [29, 44]
(string [29, 36] - [29, 43]
(string_fragment [29, 37] - [29, 42]))))))
(try_statement [31, 2] - [91, 3]
body: (statement_block [31, 6] - [84, 3]
(expression_statement [32, 4] - [32, 39]
(call_expression [32, 4] - [32, 38]
function: (member_expression [32, 4] - [32, 16]
object: (member_expression [32, 4] - [32, 12]
object: (identifier [32, 4] - [32, 8])
property: (property_identifier [32, 9] - [32, 12]))
property: (property_identifier [32, 13] - [32, 16]))
arguments: (arguments [32, 16] - [32, 38]
(string [32, 17] - [32, 24]
(string_fragment [32, 18] - [32, 23]))
(string [32, 26] - [32, 37]
(string_fragment [32, 27] - [32, 36])))))
(comment [34, 4] - [34, 21])
(expression_statement [35, 4] - [35, 66]
(assignment_expression [35, 4] - [35, 65]
left: (member_expression [35, 4] - [35, 35]
object: (identifier [35, 4] - [35, 20])
property: (property_identifier [35, 21] - [35, 35]))
right: (arrow_function [35, 38] - [35, 65]
parameters: (formal_parameters [35, 38] - [35, 40])
body: (call_expression [35, 44] - [35, 65]
function: (member_expression [35, 44] - [35, 59]
object: (identifier [35, 44] - [35, 51])
property: (property_identifier [35, 52] - [35, 59]))
arguments: (arguments [35, 59] - [35, 65]
(true [35, 60] - [35, 64]))))))
(expression_statement [36, 4] - [36, 56]
(assignment_expression [36, 4] - [36, 55]
left: (member_expression [36, 4] - [36, 16]
object: (identifier [36, 4] - [36, 10])
property: (property_identifier [36, 11] - [36, 16]))
right: (as_expression [36, 19] - [36, 55]
(parenthesized_expression [36, 19] - [36, 48]
(arrow_function [36, 20] - [36, 47]
parameters: (formal_parameters [36, 20] - [36, 22])
body: (call_expression [36, 26] - [36, 47]
function: (member_expression [36, 26] - [36, 41]
object: (identifier [36, 26] - [36, 33])
property: (property_identifier [36, 34] - [36, 41]))
arguments: (arguments [36, 41] - [36, 47]
(string [36, 42] - [36, 46]
(string_fragment [36, 43] - [36, 45]))))))
(predefined_type [36, 52] - [36, 55]))))
(lexical_declaration [38, 4] - [42, 6]
(variable_declarator [38, 10] - [42, 5]
name: (identifier [38, 10] - [38, 18])
value: (object [38, 21] - [42, 5]
(pair [39, 6] - [39, 25]
key: (property_identifier [39, 6] - [39, 8])
value: (string [39, 10] - [39, 25]
(string_fragment [39, 11] - [39, 24])))
(pair [40, 6] - [40, 23]
key: (property_identifier [40, 6] - [40, 14])
value: (string [40, 16] - [40, 23]
(string_fragment [40, 17] - [40, 22])))
(pair [41, 6] - [41, 30]
key: (property_identifier [41, 6] - [41, 20])
value: (string [41, 22] - [41, 30]
(string_fragment [41, 23] - [41, 29]))))))
(lexical_declaration [44, 4] - [52, 6]
(variable_declarator [44, 10] - [52, 5]
name: (identifier [44, 10] - [44, 21])
value: (object [44, 24] - [52, 5]
(pair [45, 6] - [45, 26]
key: (property_identifier [45, 6] - [45, 8])
value: (string [45, 10] - [45, 26]
(string_fragment [45, 11] - [45, 25])))
(pair [46, 6] - [46, 39]
key: (property_identifier [46, 6] - [46, 19])
value: (string [46, 21] - [46, 39]
(string_fragment [46, 22] - [46, 38])))
(pair [47, 6] - [47, 43]
key: (property_identifier [47, 6] - [47, 16])
value: (new_expression [47, 18] - [47, 43]
constructor: (identifier [47, 22] - [47, 32])
arguments: (arguments [47, 32] - [47, 43]
(array [47, 33] - [47, 42]
(number [47, 34] - [47, 35])
(number [47, 37] - [47, 38])
(number [47, 40] - [47, 41])))))
(pair [48, 6] - [48, 16]
key: (property_identifier [48, 6] - [48, 13])
value: (number [48, 15] - [48, 16]))
(pair [49, 6] - [49, 30]
key: (property_identifier [49, 6] - [49, 16])
value: (array [49, 18] - [49, 30]
(string [49, 19] - [49, 29]
(string_fragment [49, 20] - [49, 28]))))
(pair [50, 6] - [50, 30]
key: (property_identifier [50, 6] - [50, 13])
value: (string [50, 15] - [50, 30]
(string_fragment [50, 16] - [50, 29])))
(pair [51, 6] - [51, 24]
key: (property_identifier [51, 6] - [51, 17])
value: (false [51, 19] - [51, 24])))))
(expression_statement [54, 4] - [65, 14]
(assignment_expression [54, 4] - [65, 13]
left: (member_expression [54, 4] - [54, 18]
object: (identifier [54, 4] - [54, 14])
property: (property_identifier [54, 15] - [54, 18]))
right: (as_expression [54, 21] - [65, 13]
(parenthesized_expression [54, 21] - [65, 6]
(arrow_function [54, 22] - [65, 5]
parameters: (formal_parameters [54, 22] - [54, 55]
(required_parameter [54, 23] - [54, 35]
pattern: (identifier [54, 23] - [54, 30])
type: (type_annotation [54, 30] - [54, 35]
(predefined_type [54, 32] - [54, 35])))
(required_parameter [54, 37] - [54, 54]
pattern: (rest_pattern [54, 37] - [54, 47]
(identifier [54, 40] - [54, 47]))
type: (type_annotation [54, 47] - [54, 54]
(array_type [54, 49] - [54, 54]
(predefined_type [54, 49] - [54, 52])))))
body: (statement_block [54, 59] - [65, 5]
(lexical_declaration [55, 6] - [55, 38]
(variable_declarator [55, 12] - [55, 37]
name: (identifier [55, 12] - [55, 17])
value: (call_expression [55, 20] - [55, 37]
function: (member_expression [55, 20] - [55, 32]
object: (identifier [55, 20] - [55, 27])
property: (property_identifier [55, 28] - [55, 32]))
arguments: (arguments [55, 32] - [55, 37]
(string [55, 33] - [55, 36]
(string_fragment [55, 34] - [55, 35]))))))
(if_statement [56, 6] - [60, 7]
condition: (parenthesized_expression [56, 9] - [58, 7]
(call_expression [57, 8] - [57, 79]
function: (member_expression [57, 8] - [57, 22]
object: (identifier [57, 8] - [57, 13])
property: (property_identifier [57, 14] - [57, 22]))
arguments: (arguments [57, 22] - [57, 79]
(string [57, 23] - [57, 78]
(string_fragment [57, 24] - [57, 77])))))
consequence: (statement_block [58, 8] - [60, 7]
(return_statement [59, 8] - [59, 43]
(call_expression [59, 15] - [59, 42]
function: (member_expression [59, 15] - [59, 30]
object: (identifier [59, 15] - [59, 22])
property: (property_identifier [59, 23] - [59, 30]))
arguments: (arguments [59, 30] - [59, 42]
(array [59, 31] - [59, 41]
(identifier [59, 32] - [59, 40])))))))
(if_statement [61, 6] - [63, 7]
condition: (parenthesized_expression [61, 9] - [61, 58]
(call_expression [61, 10] - [61, 57]
function: (member_expression [61, 10] - [61, 24]
object: (identifier [61, 10] - [61, 15])
property: (property_identifier [61, 16] - [61, 24]))
arguments: (arguments [61, 24] - [61, 57]
(string [61, 25] - [61, 56]
(string_fragment [61, 26] - [61, 55])))))
consequence: (statement_block [61, 59] - [63, 7]
(return_statement [62, 8] - [62, 46]
(call_expression [62, 15] - [62, 45]
function: (member_expression [62, 15] - [62, 30]
object: (identifier [62, 15] - [62, 22])
property: (property_identifier [62, 23] - [62, 30]))
arguments: (arguments [62, 30] - [62, 45]
(array [62, 31] - [62, 44]
(identifier [62, 32] - [62, 43])))))))
(return_statement [64, 6] - [64, 33]
(call_expression [64, 13] - [64, 32]
function: (member_expression [64, 13] - [64, 28]
object: (identifier [64, 13] - [64, 20])
property: (property_identifier [64, 21] - [64, 28]))
arguments: (arguments [64, 28] - [64, 32]
(array [64, 29] - [64, 31])))))))
(predefined_type [65, 10] - [65, 13]))))
(lexical_declaration [67, 4] - [67, 27]
(variable_declarator [67, 10] - [67, 26]
name: (identifier [67, 10] - [67, 13])
value: (new_expression [67, 16] - [67, 26]
constructor: (identifier [67, 20] - [67, 24])
arguments: (arguments [67, 24] - [67, 26]))))
(expression_statement [68, 4] - [68, 31]
(call_expression [68, 4] - [68, 30]
function: (member_expression [68, 4] - [68, 13]
object: (identifier [68, 4] - [68, 7])
property: (property_identifier [68, 8] - [68, 13]))
arguments: (arguments [68, 13] - [68, 30]
(string [68, 14] - [68, 17]
(string_fragment [68, 15] - [68, 16]))
(identifier [68, 19] - [68, 29]))))
(lexical_declaration [70, 4] - [76, 7]
(variable_declarator [70, 10] - [76, 6]
name: (identifier [70, 10] - [70, 13])
value: (await_expression [70, 16] - [76, 6]
(call_expression [70, 22] - [76, 6]
function: (member_expression [70, 22] - [70, 33]
object: (identifier [70, 22] - [70, 25])
property: (property_identifier [70, 26] - [70, 33]))
arguments: (arguments [70, 33] - [76, 6]
(string [70, 34] - [70, 56]
(string_fragment [70, 35] - [70, 55]))
(object [70, 58] - [76, 5]
(pair [71, 6] - [71, 20]
key: (property_identifier [71, 6] - [71, 12])
value: (string [71, 14] - [71, 20]
(string_fragment [71, 15] - [71, 19])))
(pair [72, 6] - [74, 7]
key: (property_identifier [72, 6] - [72, 13])
value: (object [72, 15] - [74, 7]
(pair [73, 8] - [73, 42]
key: (string [73, 8] - [73, 22]
(string_fragment [73, 9] - [73, 21]))
value: (string [73, 24] - [73, 42]
(string_fragment [73, 25] - [73, 41])))))
(pair [75, 6] - [75, 49]
key: (property_identifier [75, 6] - [75, 10])
value: (call_expression [75, 12] - [75, 49]
function: (member_expression [75, 12] - [75, 26]
object: (identifier [75, 12] - [75, 16])
property: (property_identifier [75, 17] - [75, 26]))
arguments: (arguments [75, 26] - [75, 49]
(object [75, 27] - [75, 48]
(pair [75, 29] - [75, 46]
key: (property_identifier [75, 29] - [75, 37])
value: (string [75, 39] - [75, 46]
(string_fragment [75, 40] - [75, 45])))))))))))))
(expression_statement [78, 4] - [78, 33]
(call_expression [78, 4] - [78, 32]
function: (member_expression [78, 4] - [78, 27]
object: (call_expression [78, 4] - [78, 22]
function: (identifier [78, 4] - [78, 10])
arguments: (arguments [78, 10] - [78, 22]
(member_expression [78, 11] - [78, 21]
object: (identifier [78, 11] - [78, 14])
property: (property_identifier [78, 15] - [78, 21]))))
property: (property_identifier [78, 23] - [78, 27]))
arguments: (arguments [78, 27] - [78, 32]
(number [78, 28] - [78, 31]))))
(lexical_declaration [79, 4] - [79, 34]
(variable_declarator [79, 10] - [79, 33]
name: (identifier [79, 10] - [79, 14])
value: (await_expression [79, 17] - [79, 33]
(call_expression [79, 23] - [79, 33]
function: (member_expression [79, 23] - [79, 31]
object: (identifier [79, 23] - [79, 26])
property: (property_identifier [79, 27] - [79, 31]))
arguments: (arguments [79, 31] - [79, 33])))))
(expression_statement [80, 4] - [80, 39]
(call_expression [80, 4] - [80, 38]
function: (member_expression [80, 4] - [80, 36]
object: (call_expression [80, 4] - [80, 24]
function: (identifier [80, 4] - [80, 10])
arguments: (arguments [80, 10] - [80, 24]
(member_expression [80, 11] - [80, 23]
object: (identifier [80, 11] - [80, 15])
property: (property_identifier [80, 16] - [80, 23]))))
property: (property_identifier [80, 25] - [80, 36]))
arguments: (arguments [80, 36] - [80, 38])))
(expression_statement [81, 4] - [81, 49]
(call_expression [81, 4] - [81, 48]
function: (member_expression [81, 4] - [81, 46]
object: (call_expression [81, 4] - [81, 34]
function: (identifier [81, 4] - [81, 10])
arguments: (arguments [81, 10] - [81, 34]
(member_expression [81, 11] - [81, 33]
object: (member_expression [81, 11] - [81, 23]
object: (identifier [81, 11] - [81, 15])
property: (property_identifier [81, 16] - [81, 23]))
property: (property_identifier [81, 24] - [81, 33]))))
property: (property_identifier [81, 35] - [81, 46]))
arguments: (arguments [81, 46] - [81, 48])))
(expression_statement [82, 4] - [82, 56]
(call_expression [82, 4] - [82, 55]
function: (member_expression [82, 4] - [82, 53]
object: (call_expression [82, 4] - [82, 41]
function: (identifier [82, 4] - [82, 10])
arguments: (arguments [82, 10] - [82, 41]
(member_expression [82, 11] - [82, 40]
object: (member_expression [82, 11] - [82, 23]
object: (identifier [82, 11] - [82, 15])
property: (property_identifier [82, 16] - [82, 23]))
property: (property_identifier [82, 24] - [82, 40]))))
property: (property_identifier [82, 42] - [82, 53]))
arguments: (arguments [82, 53] - [82, 55])))
(expression_statement [83, 4] - [83, 57]
(call_expression [83, 4] - [83, 56]
function: (member_expression [83, 4] - [83, 53]
object: (call_expression [83, 4] - [83, 48]
function: (identifier [83, 4] - [83, 10])
arguments: (arguments [83, 10] - [83, 48]
(member_expression [83, 11] - [83, 47]
object: (member_expression [83, 11] - [83, 40]
object: (member_expression [83, 11] - [83, 23]
object: (identifier [83, 11] - [83, 15])
property: (property_identifier [83, 16] - [83, 23]))
property: (property_identifier [83, 24] - [83, 40]))
property: (property_identifier [83, 41] - [83, 47]))))
property: (property_identifier [83, 49] - [83, 53]))
arguments: (arguments [83, 53] - [83, 56]
(number [83, 54] - [83, 55])))))
finalizer: (finally_clause [84, 4] - [91, 3]
body: (statement_block [84, 12] - [91, 3]
(expression_statement [85, 4] - [85, 33]
(assignment_expression [85, 4] - [85, 32]
left: (member_expression [85, 4] - [85, 18]
object: (identifier [85, 4] - [85, 14])
property: (property_identifier [85, 15] - [85, 18]))
right: (identifier [85, 21] - [85, 32])))
(expression_statement [86, 4] - [86, 56]
(assignment_expression [86, 4] - [86, 55]
left: (member_expression [86, 4] - [86, 35]
object: (identifier [86, 4] - [86, 20])
property: (property_identifier [86, 21] - [86, 35]))
right: (identifier [86, 38] - [86, 55])))
(expression_statement [87, 4] - [87, 39]
(assignment_expression [87, 4] - [87, 38]
left: (member_expression [87, 4] - [87, 16]
object: (identifier [87, 4] - [87, 10])
property: (property_identifier [87, 11] - [87, 16]))
right: (identifier [87, 19] - [87, 38])))
(if_statement [88, 4] - [90, 5]
condition: (parenthesized_expression [88, 7] - [88, 21]
(identifier [88, 8] - [88, 20]))
consequence: (statement_block [88, 22] - [90, 5]
(expression_statement [89, 6] - [89, 42]
(call_expression [89, 6] - [89, 41]
function: (member_expression [89, 6] - [89, 18]
object: (member_expression [89, 6] - [89, 14]
object: (identifier [89, 6] - [89, 10])
property: (property_identifier [89, 11] - [89, 14]))
property: (property_identifier [89, 15] - [89, 18]))
arguments: (arguments [89, 18] - [89, 41]
(string [89, 19] - [89, 26]
(string_fragment [89, 20] - [89, 25]))
(identifier [89, 28] - [89, 40])))))))))))))))

View File

@ -1,74 +0,0 @@
(program [0, 0] - [16, 0]
(import_statement [0, 0] - [0, 47]
(import_clause [0, 7] - [0, 23]
(named_imports [0, 7] - [0, 23]
(import_specifier [0, 9] - [0, 21]
name: (identifier [0, 9] - [0, 21]))))
source: (string [0, 29] - [0, 46]
(string_fragment [0, 30] - [0, 45])))
(import_statement [1, 0] - [1, 63]
(import_clause [1, 7] - [1, 30]
(named_imports [1, 7] - [1, 30]
(import_specifier [1, 9] - [1, 28]
name: (identifier [1, 9] - [1, 28]))))
source: (string [1, 36] - [1, 62]
(string_fragment [1, 37] - [1, 61])))
(import_statement [2, 0] - [2, 48]
(import_clause [2, 12] - [2, 23]
(named_imports [2, 12] - [2, 23]
(import_specifier [2, 14] - [2, 21]
name: (identifier [2, 14] - [2, 21]))))
source: (string [2, 29] - [2, 47]
(string_fragment [2, 30] - [2, 46])))
(expression_statement [4, 0] - [15, 3]
(call_expression [4, 0] - [15, 2]
function: (member_expression [4, 0] - [4, 9]
object: (identifier [4, 0] - [4, 4])
property: (property_identifier [4, 5] - [4, 9]))
arguments: (arguments [4, 9] - [15, 2]
(string [4, 10] - [4, 63]
(string_fragment [4, 11] - [4, 62]))
(arrow_function [4, 65] - [15, 1]
parameters: (formal_parameters [4, 65] - [4, 67])
body: (statement_block [4, 71] - [15, 1]
(lexical_declaration [5, 2] - [12, 26]
(variable_declarator [5, 8] - [12, 25]
name: (identifier [5, 8] - [5, 19])
value: (as_expression [5, 22] - [12, 25]
(as_expression [5, 22] - [12, 14]
(object [5, 22] - [12, 3]
(pair [6, 4] - [11, 5]
key: (property_identifier [6, 4] - [6, 7])
value: (object [6, 9] - [11, 5]
(pair [7, 6] - [10, 7]
key: (property_identifier [7, 6] - [7, 12])
value: (arrow_function [7, 14] - [10, 7]
parameters: (formal_parameters [7, 14] - [7, 28]
(required_parameter [7, 15] - [7, 27]
pattern: (identifier [7, 15] - [7, 19])
type: (type_annotation [7, 19] - [7, 27]
(predefined_type [7, 21] - [7, 27]))))
body: (statement_block [7, 32] - [10, 7]
(if_statement [8, 8] - [8, 55]
condition: (parenthesized_expression [8, 11] - [8, 40]
(binary_expression [8, 12] - [8, 39]
left: (identifier [8, 12] - [8, 16])
right: (string [8, 21] - [8, 39]
(string_fragment [8, 22] - [8, 38]))))
consequence: (return_statement [8, 41] - [8, 55]
(string [8, 48] - [8, 54]
(string_fragment [8, 49] - [8, 53]))))
(return_statement [9, 8] - [9, 18]
(string [9, 15] - [9, 17]))))))))
(predefined_type [12, 7] - [12, 14]))
(type_identifier [12, 18] - [12, 25]))))
(expression_statement [14, 2] - [14, 61]
(call_expression [14, 2] - [14, 60]
function: (identifier [14, 2] - [14, 14])
arguments: (arguments [14, 14] - [14, 60]
(call_expression [14, 15] - [14, 47]
function: (identifier [14, 15] - [14, 34])
arguments: (arguments [14, 34] - [14, 47]
(identifier [14, 35] - [14, 46])))
(string [14, 49] - [14, 59]
(string_fragment [14, 50] - [14, 58])))))))))))

View File

@ -1,429 +0,0 @@
(program [0, 0] - [102, 0]
(import_statement [0, 0] - [0, 54]
(import_clause [0, 12] - [0, 29]
(named_imports [0, 12] - [0, 29]
(import_specifier [0, 14] - [0, 21]
name: (identifier [0, 14] - [0, 21]))
(import_specifier [0, 23] - [0, 27]
name: (identifier [0, 23] - [0, 27]))))
source: (string [0, 35] - [0, 53]
(string_fragment [0, 36] - [0, 52])))
(import_statement [1, 0] - [1, 64]
(import_clause [1, 7] - [1, 24]
(named_imports [1, 7] - [1, 24]
(import_specifier [1, 9] - [1, 22]
name: (identifier [1, 9] - [1, 22]))))
source: (string [1, 30] - [1, 63]
(string_fragment [1, 31] - [1, 62])))
(import_statement [2, 0] - [2, 37]
(import_clause [2, 7] - [2, 17]
(named_imports [2, 7] - [2, 17]
(import_specifier [2, 9] - [2, 15]
name: (identifier [2, 9] - [2, 15]))))
source: (string [2, 23] - [2, 36]
(string_fragment [2, 24] - [2, 35])))
(lexical_declaration [4, 0] - [4, 32]
(variable_declarator [4, 6] - [4, 31]
name: (identifier [4, 6] - [4, 19])
value: (binary_expression [4, 22] - [4, 31]
left: (number [4, 22] - [4, 24])
right: (number [4, 27] - [4, 31]))))
(comment [4, 33] - [4, 40])
(export_statement [6, 0] - [16, 1]
declaration: (function_declaration [6, 7] - [16, 1]
name: (identifier [6, 22] - [6, 37])
parameters: (formal_parameters [6, 37] - [6, 61]
(required_parameter [6, 38] - [6, 48]
pattern: (identifier [6, 38] - [6, 39])
type: (type_annotation [6, 39] - [6, 48]
(type_identifier [6, 41] - [6, 48])))
(required_parameter [6, 50] - [6, 60]
pattern: (identifier [6, 50] - [6, 54])
type: (type_annotation [6, 54] - [6, 60]
(type_identifier [6, 56] - [6, 60]))))
body: (statement_block [6, 62] - [16, 1]
(lexical_declaration [7, 2] - [7, 55]
(variable_declarator [7, 8] - [7, 54]
name: (identifier [7, 8] - [7, 21])
value: (call_expression [7, 24] - [7, 54]
function: (member_expression [7, 24] - [7, 36]
object: (member_expression [7, 24] - [7, 29]
object: (identifier [7, 24] - [7, 25])
property: (property_identifier [7, 26] - [7, 29]))
property: (property_identifier [7, 30] - [7, 36]))
arguments: (arguments [7, 36] - [7, 54]
(string [7, 37] - [7, 53]
(string_fragment [7, 38] - [7, 52]))))))
(if_statement [8, 2] - [12, 3]
condition: (parenthesized_expression [8, 5] - [8, 67]
(binary_expression [8, 6] - [8, 66]
left: (identifier [8, 6] - [8, 19])
right: (binary_expression [8, 23] - [8, 66]
left: (call_expression [8, 23] - [8, 50]
function: (identifier [8, 23] - [8, 31])
arguments: (arguments [8, 31] - [8, 50]
(identifier [8, 32] - [8, 45])
(number [8, 47] - [8, 49])))
right: (identifier [8, 53] - [8, 66]))))
consequence: (statement_block [8, 68] - [12, 3]
(throw_statement [9, 4] - [11, 7]
(new_expression [9, 10] - [11, 6]
constructor: (identifier [9, 14] - [9, 27])
arguments: (arguments [9, 27] - [11, 6]
(number [9, 28] - [9, 31])
(object [9, 33] - [11, 5]
(pair [10, 6] - [10, 53]
key: (property_identifier [10, 6] - [10, 13])
value: (string [10, 15] - [10, 53]
(string_fragment [10, 16] - [10, 52])))))))))
(comment [14, 2] - [14, 136])
(expression_statement [15, 2] - [15, 15]
(await_expression [15, 2] - [15, 14]
(call_expression [15, 8] - [15, 14]
function: (identifier [15, 8] - [15, 12])
arguments: (arguments [15, 12] - [15, 14])))))))
(export_statement [18, 0] - [72, 1]
declaration: (function_declaration [18, 7] - [72, 1]
name: (identifier [18, 16] - [18, 31])
parameters: (formal_parameters [18, 31] - [18, 57]
(required_parameter [18, 32] - [18, 56]
pattern: (identifier [18, 32] - [18, 46])
type: (type_annotation [18, 46] - [18, 56]
(array_type [18, 48] - [18, 56]
(predefined_type [18, 48] - [18, 54])))))
body: (statement_block [18, 58] - [72, 1]
(return_statement [19, 2] - [71, 4]
(arrow_function [19, 9] - [71, 3]
parameters: (formal_parameters [19, 15] - [19, 39]
(required_parameter [19, 16] - [19, 26]
pattern: (identifier [19, 16] - [19, 17])
type: (type_annotation [19, 17] - [19, 26]
(type_identifier [19, 19] - [19, 26])))
(required_parameter [19, 28] - [19, 38]
pattern: (identifier [19, 28] - [19, 32])
type: (type_annotation [19, 32] - [19, 38]
(type_identifier [19, 34] - [19, 38]))))
body: (statement_block [19, 43] - [71, 3]
(comment [20, 4] - [20, 34])
(if_statement [21, 4] - [69, 5]
condition: (parenthesized_expression [21, 7] - [21, 66]
(call_expression [21, 8] - [21, 65]
function: (member_expression [21, 8] - [21, 51]
object: (array [21, 8] - [21, 42]
(string [21, 9] - [21, 15]
(string_fragment [21, 10] - [21, 14]))
(string [21, 17] - [21, 22]
(string_fragment [21, 18] - [21, 21]))
(string [21, 24] - [21, 31]
(string_fragment [21, 25] - [21, 30]))
(string [21, 33] - [21, 41]
(string_fragment [21, 34] - [21, 40])))
property: (property_identifier [21, 43] - [21, 51]))
arguments: (arguments [21, 51] - [21, 65]
(member_expression [21, 52] - [21, 64]
object: (member_expression [21, 52] - [21, 57]
object: (identifier [21, 52] - [21, 53])
property: (property_identifier [21, 54] - [21, 57]))
property: (property_identifier [21, 58] - [21, 64])))))
consequence: (statement_block [21, 67] - [69, 5]
(lexical_declaration [22, 6] - [22, 44]
(variable_declarator [22, 12] - [22, 43]
name: (identifier [22, 12] - [22, 18])
value: (call_expression [22, 21] - [22, 43]
function: (member_expression [22, 21] - [22, 33]
object: (member_expression [22, 21] - [22, 26]
object: (identifier [22, 21] - [22, 22])
property: (property_identifier [22, 23] - [22, 26]))
property: (property_identifier [22, 27] - [22, 33]))
arguments: (arguments [22, 33] - [22, 43]
(string [22, 34] - [22, 42]
(string_fragment [22, 35] - [22, 41]))))))
(lexical_declaration [23, 6] - [23, 46]
(variable_declarator [23, 12] - [23, 45]
name: (identifier [23, 12] - [23, 19])
value: (call_expression [23, 22] - [23, 45]
function: (member_expression [23, 22] - [23, 34]
object: (member_expression [23, 22] - [23, 27]
object: (identifier [23, 22] - [23, 23])
property: (property_identifier [23, 24] - [23, 27]))
property: (property_identifier [23, 28] - [23, 34]))
arguments: (arguments [23, 34] - [23, 45]
(string [23, 35] - [23, 44]
(string_fragment [23, 36] - [23, 43]))))))
(lexical_declaration [24, 6] - [24, 40]
(variable_declarator [24, 12] - [24, 39]
name: (identifier [24, 12] - [24, 16])
value: (call_expression [24, 19] - [24, 39]
function: (member_expression [24, 19] - [24, 31]
object: (member_expression [24, 19] - [24, 24]
object: (identifier [24, 19] - [24, 20])
property: (property_identifier [24, 21] - [24, 24]))
property: (property_identifier [24, 25] - [24, 31]))
arguments: (arguments [24, 31] - [24, 39]
(string [24, 32] - [24, 38]
(string_fragment [24, 33] - [24, 37]))))))
(comment [26, 6] - [26, 89])
(if_statement [27, 6] - [68, 7]
condition: (parenthesized_expression [27, 9] - [27, 17]
(identifier [27, 10] - [27, 16]))
consequence: (statement_block [27, 18] - [44, 7]
(lexical_declaration [28, 8] - [28, 30]
(variable_declarator [28, 12] - [28, 29]
name: (identifier [28, 12] - [28, 21])
value: (false [28, 24] - [28, 29])))
(try_statement [29, 8] - [38, 9]
body: (statement_block [29, 12] - [36, 9]
(lexical_declaration [30, 10] - [30, 44]
(variable_declarator [30, 16] - [30, 43]
name: (identifier [30, 16] - [30, 25])
value: (new_expression [30, 28] - [30, 43]
constructor: (identifier [30, 32] - [30, 35])
arguments: (arguments [30, 35] - [30, 43]
(identifier [30, 36] - [30, 42])))))
(if_statement [31, 10] - [35, 11]
condition: (parenthesized_expression [31, 13] - [33, 11]
(binary_expression [32, 12] - [32, 80]
left: (call_expression [32, 12] - [32, 53]
function: (member_expression [32, 12] - [32, 35]
object: (identifier [32, 12] - [32, 26])
property: (property_identifier [32, 27] - [32, 35]))
arguments: (arguments [32, 35] - [32, 53]
(member_expression [32, 36] - [32, 52]
object: (identifier [32, 36] - [32, 45])
property: (property_identifier [32, 46] - [32, 52]))))
right: (binary_expression [32, 57] - [32, 80]
left: (member_expression [32, 57] - [32, 71]
object: (identifier [32, 57] - [32, 66])
property: (property_identifier [32, 67] - [32, 71]))
right: (identifier [32, 76] - [32, 80]))))
consequence: (statement_block [33, 12] - [35, 11]
(expression_statement [34, 12] - [34, 29]
(assignment_expression [34, 12] - [34, 28]
left: (identifier [34, 12] - [34, 21])
right: (true [34, 24] - [34, 28]))))))
handler: (catch_clause [36, 10] - [38, 9]
parameter: (identifier [36, 17] - [36, 19])
body: (statement_block [36, 21] - [38, 9]
(comment [37, 10] - [37, 24]))))
(if_statement [39, 8] - [43, 9]
condition: (parenthesized_expression [39, 11] - [39, 23]
(unary_expression [39, 12] - [39, 22]
argument: (identifier [39, 13] - [39, 22])))
consequence: (statement_block [39, 24] - [43, 9]
(throw_statement [40, 10] - [42, 13]
(new_expression [40, 16] - [42, 12]
constructor: (identifier [40, 20] - [40, 33])
arguments: (arguments [40, 33] - [42, 12]
(number [40, 34] - [40, 37])
(object [40, 39] - [42, 11]
(pair [41, 12] - [41, 69]
key: (property_identifier [41, 12] - [41, 19])
value: (string [41, 21] - [41, 69]
(string_fragment [41, 22] - [41, 68]))))))))))
alternative: (else_clause [44, 8] - [68, 7]
(if_statement [44, 13] - [68, 7]
condition: (parenthesized_expression [44, 16] - [44, 25]
(identifier [44, 17] - [44, 24]))
consequence: (statement_block [44, 26] - [62, 7]
(try_statement [45, 8] - [61, 9]
body: (statement_block [45, 12] - [57, 9]
(lexical_declaration [46, 10] - [46, 46]
(variable_declarator [46, 16] - [46, 45]
name: (identifier [46, 16] - [46, 26])
value: (new_expression [46, 29] - [46, 45]
constructor: (identifier [46, 33] - [46, 36])
arguments: (arguments [46, 36] - [46, 45]
(identifier [46, 37] - [46, 44])))))
(if_statement [47, 10] - [56, 11]
condition: (parenthesized_expression [47, 13] - [50, 11]
(binary_expression [48, 12] - [49, 36]
left: (call_expression [48, 12] - [48, 54]
function: (member_expression [48, 12] - [48, 35]
object: (identifier [48, 12] - [48, 26])
property: (property_identifier [48, 27] - [48, 35]))
arguments: (arguments [48, 35] - [48, 54]
(member_expression [48, 36] - [48, 53]
object: (identifier [48, 36] - [48, 46])
property: (property_identifier [48, 47] - [48, 53]))))
right: (binary_expression [49, 12] - [49, 36]
left: (member_expression [49, 12] - [49, 27]
object: (identifier [49, 12] - [49, 22])
property: (property_identifier [49, 23] - [49, 27]))
right: (identifier [49, 32] - [49, 36]))))
consequence: (statement_block [50, 12] - [52, 11]
(comment [51, 12] - [51, 22]))
alternative: (else_clause [52, 12] - [56, 11]
(statement_block [52, 17] - [56, 11]
(throw_statement [53, 12] - [55, 15]
(new_expression [53, 18] - [55, 14]
constructor: (identifier [53, 22] - [53, 35])
arguments: (arguments [53, 35] - [55, 14]
(number [53, 36] - [53, 39])
(object [53, 41] - [55, 13]
(pair [54, 14] - [54, 72]
key: (property_identifier [54, 14] - [54, 21])
value: (string [54, 23] - [54, 72]
(string_fragment [54, 24] - [54, 71])))))))))))
handler: (catch_clause [57, 10] - [61, 9]
parameter: (identifier [57, 17] - [57, 19])
body: (statement_block [57, 21] - [61, 9]
(throw_statement [58, 10] - [60, 13]
(new_expression [58, 16] - [60, 12]
constructor: (identifier [58, 20] - [58, 33])
arguments: (arguments [58, 33] - [60, 12]
(number [58, 34] - [58, 37])
(object [58, 39] - [60, 11]
(pair [59, 12] - [59, 70]
key: (property_identifier [59, 12] - [59, 19])
value: (string [59, 21] - [59, 70]
(string_fragment [59, 22] - [59, 69])))))))))))
alternative: (else_clause [62, 8] - [68, 7]
(statement_block [62, 13] - [68, 7]
(comment [63, 8] - [63, 94])
(throw_statement [64, 8] - [67, 11]
(new_expression [64, 14] - [67, 10]
constructor: (identifier [64, 18] - [64, 31])
arguments: (arguments [64, 31] - [67, 10]
(number [64, 32] - [64, 35])
(object [64, 37] - [67, 9]
(pair [65, 10] - [66, 79]
key: (property_identifier [65, 10] - [65, 17])
value: (string [66, 12] - [66, 79]
(string_fragment [66, 13] - [66, 78]))))))))))))))
(expression_statement [70, 4] - [70, 17]
(await_expression [70, 4] - [70, 16]
(call_expression [70, 10] - [70, 16]
function: (identifier [70, 10] - [70, 14])
arguments: (arguments [70, 14] - [70, 16]))))))))))
(export_statement [74, 0] - [101, 1]
declaration: (function_declaration [74, 7] - [101, 1]
name: (identifier [74, 16] - [74, 30])
parameters: (formal_parameters [74, 30] - [78, 1]
(required_parameter [75, 2] - [75, 15]
pattern: (identifier [75, 2] - [75, 7])
type: (type_annotation [75, 7] - [75, 15]
(predefined_type [75, 9] - [75, 15])))
(required_parameter [76, 2] - [76, 20]
pattern: (identifier [76, 2] - [76, 12])
type: (type_annotation [76, 12] - [76, 20]
(predefined_type [76, 14] - [76, 20])))
(required_parameter [77, 2] - [77, 19]
pattern: (identifier [77, 2] - [77, 11])
type: (type_annotation [77, 11] - [77, 19]
(predefined_type [77, 13] - [77, 19]))))
body: (statement_block [78, 2] - [101, 1]
(return_statement [79, 2] - [100, 4]
(arrow_function [79, 9] - [100, 3]
parameters: (formal_parameters [79, 15] - [79, 39]
(required_parameter [79, 16] - [79, 26]
pattern: (identifier [79, 16] - [79, 17])
type: (type_annotation [79, 17] - [79, 26]
(type_identifier [79, 19] - [79, 26])))
(required_parameter [79, 28] - [79, 38]
pattern: (identifier [79, 28] - [79, 32])
type: (type_annotation [79, 32] - [79, 38]
(type_identifier [79, 34] - [79, 38]))))
body: (statement_block [79, 43] - [100, 3]
(comment [80, 4] - [80, 73])
(lexical_declaration [81, 4] - [81, 78]
(variable_declarator [81, 10] - [81, 77]
name: (identifier [81, 10] - [81, 12])
value: (binary_expression [81, 15] - [81, 77]
left: (subscript_expression [81, 15] - [81, 61]
object: (call_expression [81, 15] - [81, 58]
function: (member_expression [81, 15] - [81, 53]
object: (call_expression [81, 15] - [81, 46]
function: (member_expression [81, 15] - [81, 27]
object: (member_expression [81, 15] - [81, 20]
object: (identifier [81, 15] - [81, 16])
property: (property_identifier [81, 17] - [81, 20]))
property: (property_identifier [81, 21] - [81, 27]))
arguments: (arguments [81, 27] - [81, 46]
(string [81, 28] - [81, 45]
(string_fragment [81, 29] - [81, 44]))))
optional_chain: (optional_chain [81, 46] - [81, 48])
property: (property_identifier [81, 48] - [81, 53]))
arguments: (arguments [81, 53] - [81, 58]
(string [81, 54] - [81, 57]
(string_fragment [81, 55] - [81, 56]))))
index: (number [81, 59] - [81, 60]))
right: (string [81, 65] - [81, 77]
(string_fragment [81, 66] - [81, 76])))))
(lexical_declaration [82, 4] - [82, 47]
(variable_declarator [82, 10] - [82, 46]
name: (identifier [82, 10] - [82, 13])
value: (template_string [82, 16] - [82, 46]
(string_fragment [82, 17] - [82, 27])
(template_substitution [82, 27] - [82, 39]
(identifier [82, 29] - [82, 38]))
(string_fragment [82, 39] - [82, 40])
(template_substitution [82, 40] - [82, 45]
(identifier [82, 42] - [82, 44])))))
(try_statement [84, 4] - [97, 5]
body: (statement_block [84, 8] - [93, 5]
(lexical_declaration [85, 6] - [85, 45]
(variable_declarator [85, 12] - [85, 44]
name: (identifier [85, 12] - [85, 19])
value: (await_expression [85, 22] - [85, 44]
(call_expression [85, 28] - [85, 44]
function: (member_expression [85, 28] - [85, 39]
object: (identifier [85, 28] - [85, 34])
property: (property_identifier [85, 35] - [85, 39]))
arguments: (arguments [85, 39] - [85, 44]
(identifier [85, 40] - [85, 43]))))))
(if_statement [86, 6] - [88, 7]
condition: (parenthesized_expression [86, 9] - [86, 24]
(binary_expression [86, 10] - [86, 23]
left: (identifier [86, 10] - [86, 17])
right: (number [86, 22] - [86, 23])))
consequence: (statement_block [86, 25] - [88, 7]
(expression_statement [87, 8] - [87, 45]
(await_expression [87, 8] - [87, 44]
(call_expression [87, 14] - [87, 44]
function: (member_expression [87, 14] - [87, 27]
object: (identifier [87, 14] - [87, 20])
property: (property_identifier [87, 21] - [87, 27]))
arguments: (arguments [87, 27] - [87, 44]
(identifier [87, 28] - [87, 31])
(identifier [87, 33] - [87, 43])))))))
(if_statement [90, 6] - [92, 7]
condition: (parenthesized_expression [90, 9] - [90, 26]
(binary_expression [90, 10] - [90, 25]
left: (identifier [90, 10] - [90, 17])
right: (identifier [90, 20] - [90, 25])))
consequence: (statement_block [90, 27] - [92, 7]
(throw_statement [91, 8] - [91, 71]
(new_expression [91, 14] - [91, 70]
constructor: (identifier [91, 18] - [91, 31])
arguments: (arguments [91, 31] - [91, 70]
(number [91, 32] - [91, 35])
(object [91, 37] - [91, 69]
(pair [91, 39] - [91, 67]
key: (property_identifier [91, 39] - [91, 46])
value: (string [91, 48] - [91, 67]
(string_fragment [91, 49] - [91, 66]))))))))))
handler: (catch_clause [93, 6] - [97, 5]
parameter: (identifier [93, 13] - [93, 16])
body: (statement_block [93, 18] - [97, 5]
(if_statement [94, 6] - [94, 50]
condition: (parenthesized_expression [94, 9] - [94, 39]
(binary_expression [94, 10] - [94, 38]
left: (identifier [94, 10] - [94, 13])
right: (identifier [94, 25] - [94, 38])))
consequence: (throw_statement [94, 40] - [94, 50]
(identifier [94, 46] - [94, 49])))
(comment [95, 6] - [95, 75])
(expression_statement [96, 6] - [96, 53]
(call_expression [96, 6] - [96, 52]
function: (member_expression [96, 6] - [96, 18]
object: (identifier [96, 6] - [96, 13])
property: (property_identifier [96, 14] - [96, 18]))
arguments: (arguments [96, 18] - [96, 52]
(string [96, 19] - [96, 46]
(string_fragment [96, 20] - [96, 45]))
(identifier [96, 48] - [96, 51])))))))
(expression_statement [99, 4] - [99, 17]
(await_expression [99, 4] - [99, 16]
(call_expression [99, 10] - [99, 16]
function: (identifier [99, 10] - [99, 14])
arguments: (arguments [99, 14] - [99, 16])))))))))))

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +0,0 @@
(program [0, 0] - [129, 0]
(export_statement [0, 0] - [128, 2]
declaration: (lexical_declaration [0, 7] - [128, 2]
(variable_declarator [0, 13] - [128, 1]
name: (identifier [0, 13] - [0, 30])
value: (template_string [0, 33] - [128, 1]
(string_fragment [0, 34] - [128, 0]))))))

View File

@ -1,251 +0,0 @@
(program [0, 0] - [43, 0]
(import_statement [0, 0] - [0, 49]
(import_clause [0, 7] - [0, 23]
(named_imports [0, 7] - [0, 23]
(import_specifier [0, 9] - [0, 21]
name: (identifier [0, 9] - [0, 21]))))
source: (string [0, 29] - [0, 48]
(string_fragment [0, 30] - [0, 47])))
(import_statement [1, 0] - [1, 72]
(import_clause [1, 7] - [1, 30]
(named_imports [1, 7] - [1, 30]
(import_specifier [1, 9] - [1, 28]
name: (identifier [1, 9] - [1, 28]))))
source: (string [1, 36] - [1, 71]
(string_fragment [1, 37] - [1, 70])))
(import_statement [2, 0] - [2, 40]
(import_clause [2, 7] - [2, 15]
(named_imports [2, 7] - [2, 15]
(import_specifier [2, 9] - [2, 13]
name: (identifier [2, 9] - [2, 13]))))
source: (string [2, 21] - [2, 39]
(string_fragment [2, 22] - [2, 38])))
(expression_statement [4, 0] - [42, 3]
(call_expression [4, 0] - [42, 2]
function: (member_expression [4, 0] - [4, 9]
object: (identifier [4, 0] - [4, 4])
property: (property_identifier [4, 5] - [4, 9]))
arguments: (arguments [4, 9] - [42, 2]
(string [4, 10] - [4, 100]
(string_fragment [4, 11] - [4, 99]))
(arrow_function [4, 102] - [42, 1]
parameters: (formal_parameters [4, 108] - [4, 110])
body: (statement_block [4, 114] - [42, 1]
(lexical_declaration [5, 2] - [5, 29]
(variable_declarator [5, 8] - [5, 28]
name: (identifier [5, 8] - [5, 15])
value: (new_expression [5, 18] - [5, 28]
constructor: (identifier [5, 22] - [5, 26])
arguments: (arguments [5, 26] - [5, 28]))))
(expression_statement [6, 2] - [9, 5]
(call_expression [6, 2] - [9, 4]
function: (member_expression [6, 2] - [6, 13]
object: (identifier [6, 2] - [6, 9])
property: (property_identifier [6, 10] - [6, 13]))
arguments: (arguments [6, 13] - [9, 4]
(string [6, 14] - [6, 31]
(string_fragment [6, 15] - [6, 30]))
(arrow_function [6, 33] - [9, 3]
parameters: (formal_parameters [6, 33] - [6, 36]
(required_parameter [6, 34] - [6, 35]
pattern: (identifier [6, 34] - [6, 35])))
body: (statement_block [6, 40] - [9, 3]
(lexical_declaration [7, 4] - [7, 46]
(variable_declarator [7, 10] - [7, 45]
name: (identifier [7, 10] - [7, 20])
value: (call_expression [7, 23] - [7, 45]
function: (identifier [7, 23] - [7, 42])
arguments: (arguments [7, 42] - [7, 45]
(identifier [7, 43] - [7, 44])))))
(return_statement [8, 4] - [8, 34]
(call_expression [8, 11] - [8, 33]
function: (member_expression [8, 11] - [8, 17]
object: (identifier [8, 11] - [8, 12])
property: (property_identifier [8, 13] - [8, 17]))
arguments: (arguments [8, 17] - [8, 33]
(object [8, 18] - [8, 32]
(shorthand_property_identifier [8, 20] - [8, 30]))))))))))
(comment [11, 2] - [11, 29])
(lexical_declaration [12, 2] - [14, 5]
(variable_declarator [12, 8] - [14, 4]
name: (identifier [12, 8] - [12, 19])
value: (new_expression [12, 22] - [14, 4]
constructor: (identifier [12, 26] - [12, 33])
arguments: (arguments [12, 33] - [14, 4]
(string [12, 34] - [12, 67]
(string_fragment [12, 35] - [12, 66]))
(object [12, 69] - [14, 3]
(pair [13, 4] - [13, 43]
key: (property_identifier [13, 4] - [13, 11])
value: (object [13, 13] - [13, 43]
(pair [13, 15] - [13, 41]
key: (string [13, 15] - [13, 33]
(string_fragment [13, 16] - [13, 32]))
value: (string [13, 35] - [13, 41]
(string_fragment [13, 36] - [13, 40]))))))))))
(lexical_declaration [15, 2] - [15, 55]
(variable_declarator [15, 8] - [15, 54]
name: (identifier [15, 8] - [15, 19])
value: (await_expression [15, 22] - [15, 54]
(call_expression [15, 28] - [15, 54]
function: (member_expression [15, 28] - [15, 41]
object: (identifier [15, 28] - [15, 35])
property: (property_identifier [15, 36] - [15, 41]))
arguments: (arguments [15, 41] - [15, 54]
(identifier [15, 42] - [15, 53]))))))
(lexical_declaration [16, 2] - [16, 48]
(variable_declarator [16, 8] - [16, 47]
name: (identifier [16, 8] - [16, 20])
value: (await_expression [16, 23] - [16, 47]
(call_expression [16, 29] - [16, 47]
function: (member_expression [16, 29] - [16, 45]
object: (identifier [16, 29] - [16, 40])
property: (property_identifier [16, 41] - [16, 45]))
arguments: (arguments [16, 45] - [16, 47])))))
(expression_statement [17, 2] - [17, 52]
(call_expression [17, 2] - [17, 51]
function: (identifier [17, 2] - [17, 14])
arguments: (arguments [17, 14] - [17, 51]
(member_expression [17, 15] - [17, 38]
object: (identifier [17, 15] - [17, 27])
property: (property_identifier [17, 28] - [17, 38]))
(string [17, 40] - [17, 50]
(string_fragment [17, 41] - [17, 49])))))
(comment [19, 2] - [19, 42])
(lexical_declaration [20, 2] - [22, 5]
(variable_declarator [20, 8] - [22, 4]
name: (identifier [20, 8] - [20, 18])
value: (new_expression [20, 21] - [22, 4]
constructor: (identifier [20, 25] - [20, 32])
arguments: (arguments [20, 32] - [22, 4]
(string [20, 33] - [20, 66]
(string_fragment [20, 34] - [20, 65]))
(object [20, 68] - [22, 3]
(pair [21, 4] - [21, 38]
key: (property_identifier [21, 4] - [21, 11])
value: (object [21, 13] - [21, 38]
(pair [21, 15] - [21, 36]
key: (string [21, 15] - [21, 23]
(string_fragment [21, 16] - [21, 22]))
value: (string [21, 25] - [21, 36]
(string_fragment [21, 26] - [21, 35]))))))))))
(lexical_declaration [23, 2] - [23, 53]
(variable_declarator [23, 8] - [23, 52]
name: (identifier [23, 8] - [23, 18])
value: (await_expression [23, 21] - [23, 52]
(call_expression [23, 27] - [23, 52]
function: (member_expression [23, 27] - [23, 40]
object: (identifier [23, 27] - [23, 34])
property: (property_identifier [23, 35] - [23, 40]))
arguments: (arguments [23, 40] - [23, 52]
(identifier [23, 41] - [23, 51]))))))
(lexical_declaration [24, 2] - [24, 46]
(variable_declarator [24, 8] - [24, 45]
name: (identifier [24, 8] - [24, 19])
value: (await_expression [24, 22] - [24, 45]
(call_expression [24, 28] - [24, 45]
function: (member_expression [24, 28] - [24, 43]
object: (identifier [24, 28] - [24, 38])
property: (property_identifier [24, 39] - [24, 43]))
arguments: (arguments [24, 43] - [24, 45])))))
(expression_statement [25, 2] - [25, 50]
(call_expression [25, 2] - [25, 49]
function: (identifier [25, 2] - [25, 14])
arguments: (arguments [25, 14] - [25, 49]
(member_expression [25, 15] - [25, 37]
object: (identifier [25, 15] - [25, 26])
property: (property_identifier [25, 27] - [25, 37]))
(string [25, 39] - [25, 48]
(string_fragment [25, 40] - [25, 47])))))
(comment [27, 2] - [27, 46])
(lexical_declaration [28, 2] - [30, 5]
(variable_declarator [28, 8] - [30, 4]
name: (identifier [28, 8] - [28, 16])
value: (new_expression [28, 19] - [30, 4]
constructor: (identifier [28, 23] - [28, 30])
arguments: (arguments [28, 30] - [30, 4]
(string [28, 31] - [28, 64]
(string_fragment [28, 32] - [28, 63]))
(object [28, 66] - [30, 3]
(pair [29, 4] - [29, 44]
key: (property_identifier [29, 4] - [29, 11])
value: (object [29, 13] - [29, 44]
(pair [29, 15] - [29, 42]
key: (string [29, 15] - [29, 27]
(string_fragment [29, 16] - [29, 26]))
value: (string [29, 29] - [29, 42]
(string_fragment [29, 30] - [29, 41]))))))))))
(lexical_declaration [31, 2] - [31, 49]
(variable_declarator [31, 8] - [31, 48]
name: (identifier [31, 8] - [31, 16])
value: (await_expression [31, 19] - [31, 48]
(call_expression [31, 25] - [31, 48]
function: (member_expression [31, 25] - [31, 38]
object: (identifier [31, 25] - [31, 32])
property: (property_identifier [31, 33] - [31, 38]))
arguments: (arguments [31, 38] - [31, 48]
(identifier [31, 39] - [31, 47]))))))
(lexical_declaration [32, 2] - [32, 42]
(variable_declarator [32, 8] - [32, 41]
name: (identifier [32, 8] - [32, 17])
value: (await_expression [32, 20] - [32, 41]
(call_expression [32, 26] - [32, 41]
function: (member_expression [32, 26] - [32, 39]
object: (identifier [32, 26] - [32, 34])
property: (property_identifier [32, 35] - [32, 39]))
arguments: (arguments [32, 39] - [32, 41])))))
(expression_statement [33, 2] - [33, 46]
(call_expression [33, 2] - [33, 45]
function: (identifier [33, 2] - [33, 14])
arguments: (arguments [33, 14] - [33, 45]
(member_expression [33, 15] - [33, 35]
object: (identifier [33, 15] - [33, 24])
property: (property_identifier [33, 25] - [33, 35]))
(string [33, 37] - [33, 44]
(string_fragment [33, 38] - [33, 43])))))
(comment [35, 2] - [35, 38])
(lexical_declaration [36, 2] - [38, 5]
(variable_declarator [36, 8] - [38, 4]
name: (identifier [36, 8] - [36, 15])
value: (new_expression [36, 18] - [38, 4]
constructor: (identifier [36, 22] - [36, 29])
arguments: (arguments [36, 29] - [38, 4]
(string [36, 30] - [36, 63]
(string_fragment [36, 31] - [36, 62]))
(object [36, 65] - [38, 3]
(pair [37, 4] - [37, 45]
key: (property_identifier [37, 4] - [37, 11])
value: (object [37, 13] - [37, 45]
(pair [37, 15] - [37, 43]
key: (string [37, 15] - [37, 23]
(string_fragment [37, 16] - [37, 22]))
value: (string [37, 25] - [37, 43]
(string_fragment [37, 26] - [37, 42]))))))))))
(lexical_declaration [39, 2] - [39, 47]
(variable_declarator [39, 8] - [39, 46]
name: (identifier [39, 8] - [39, 15])
value: (await_expression [39, 18] - [39, 46]
(call_expression [39, 24] - [39, 46]
function: (member_expression [39, 24] - [39, 37]
object: (identifier [39, 24] - [39, 31])
property: (property_identifier [39, 32] - [39, 37]))
arguments: (arguments [39, 37] - [39, 46]
(identifier [39, 38] - [39, 45]))))))
(lexical_declaration [40, 2] - [40, 40]
(variable_declarator [40, 8] - [40, 39]
name: (identifier [40, 8] - [40, 16])
value: (await_expression [40, 19] - [40, 39]
(call_expression [40, 25] - [40, 39]
function: (member_expression [40, 25] - [40, 37]
object: (identifier [40, 25] - [40, 32])
property: (property_identifier [40, 33] - [40, 37]))
arguments: (arguments [40, 37] - [40, 39])))))
(expression_statement [41, 2] - [41, 43]
(call_expression [41, 2] - [41, 42]
function: (identifier [41, 2] - [41, 14])
arguments: (arguments [41, 14] - [41, 42]
(member_expression [41, 15] - [41, 34]
object: (identifier [41, 15] - [41, 23])
property: (property_identifier [41, 24] - [41, 34]))
(string [41, 36] - [41, 41]
(string_fragment [41, 37] - [41, 40])))))))))))

View File

@ -1,184 +0,0 @@
(program [0, 0] - [39, 0]
(import_statement [0, 0] - [0, 54]
(import_clause [0, 12] - [0, 29]
(named_imports [0, 12] - [0, 29]
(import_specifier [0, 14] - [0, 21]
name: (identifier [0, 14] - [0, 21]))
(import_specifier [0, 23] - [0, 27]
name: (identifier [0, 23] - [0, 27]))))
source: (string [0, 35] - [0, 53]
(string_fragment [0, 36] - [0, 52])))
(export_statement [2, 0] - [2, 66]
declaration: (type_alias_declaration [2, 7] - [2, 66]
name: (type_identifier [2, 12] - [2, 22])
value: (union_type [2, 25] - [2, 65]
(union_type [2, 25] - [2, 53]
(union_type [2, 25] - [2, 43]
(literal_type [2, 25] - [2, 35]
(string [2, 25] - [2, 35]
(string_fragment [2, 26] - [2, 34])))
(literal_type [2, 38] - [2, 43]
(string [2, 38] - [2, 43]
(string_fragment [2, 39] - [2, 42]))))
(literal_type [2, 46] - [2, 53]
(string [2, 46] - [2, 53]
(string_fragment [2, 47] - [2, 52]))))
(literal_type [2, 56] - [2, 65]
(string [2, 56] - [2, 65]
(string_fragment [2, 57] - [2, 64]))))))
(export_statement [4, 0] - [30, 1]
declaration: (function_declaration [4, 7] - [30, 1]
name: (identifier [4, 16] - [4, 35])
parameters: (formal_parameters [4, 35] - [4, 47]
(required_parameter [4, 36] - [4, 46]
pattern: (identifier [4, 36] - [4, 37])
type: (type_annotation [4, 37] - [4, 46]
(type_identifier [4, 39] - [4, 46]))))
return_type: (type_annotation [4, 47] - [4, 59]
(type_identifier [4, 49] - [4, 59]))
body: (statement_block [4, 60] - [30, 1]
(lexical_declaration [5, 2] - [5, 46]
(variable_declarator [5, 8] - [5, 45]
name: (identifier [5, 8] - [5, 14])
value: (binary_expression [5, 17] - [5, 45]
left: (call_expression [5, 17] - [5, 39]
function: (member_expression [5, 17] - [5, 29]
object: (member_expression [5, 17] - [5, 22]
object: (identifier [5, 17] - [5, 18])
property: (property_identifier [5, 19] - [5, 22]))
property: (property_identifier [5, 23] - [5, 29]))
arguments: (arguments [5, 29] - [5, 39]
(string [5, 30] - [5, 38]
(string_fragment [5, 31] - [5, 37]))))
right: (string [5, 43] - [5, 45]))))
(lexical_declaration [6, 2] - [6, 53]
(variable_declarator [6, 8] - [6, 52]
name: (identifier [6, 8] - [6, 17])
value: (binary_expression [6, 20] - [6, 52]
left: (call_expression [6, 20] - [6, 46]
function: (member_expression [6, 20] - [6, 32]
object: (member_expression [6, 20] - [6, 25]
object: (identifier [6, 20] - [6, 21])
property: (property_identifier [6, 22] - [6, 25]))
property: (property_identifier [6, 26] - [6, 32]))
arguments: (arguments [6, 32] - [6, 46]
(string [6, 33] - [6, 45]
(string_fragment [6, 34] - [6, 44]))))
right: (string [6, 50] - [6, 52]))))
(if_statement [8, 2] - [10, 3]
condition: (parenthesized_expression [8, 5] - [8, 50]
(binary_expression [8, 6] - [8, 49]
left: (call_expression [8, 6] - [8, 38]
function: (member_expression [8, 6] - [8, 18]
object: (member_expression [8, 6] - [8, 11]
object: (identifier [8, 6] - [8, 7])
property: (property_identifier [8, 8] - [8, 11]))
property: (property_identifier [8, 12] - [8, 18]))
arguments: (arguments [8, 18] - [8, 38]
(string [8, 19] - [8, 37]
(string_fragment [8, 20] - [8, 36]))))
right: (string [8, 43] - [8, 49]
(string_fragment [8, 44] - [8, 48]))))
consequence: (statement_block [8, 51] - [10, 3]
(return_statement [9, 4] - [9, 22]
(string [9, 11] - [9, 21]
(string_fragment [9, 12] - [9, 20])))))
(if_statement [12, 2] - [22, 3]
condition: (parenthesized_expression [12, 5] - [15, 3]
(binary_expression [13, 4] - [14, 36]
left: (binary_expression [13, 4] - [13, 69]
left: (call_expression [13, 4] - [13, 39]
function: (member_expression [13, 4] - [13, 19]
object: (identifier [13, 4] - [13, 10])
property: (property_identifier [13, 11] - [13, 19]))
arguments: (arguments [13, 19] - [13, 39]
(string [13, 20] - [13, 38]
(string_fragment [13, 21] - [13, 37]))))
right: (call_expression [13, 43] - [13, 69]
function: (member_expression [13, 43] - [13, 61]
object: (identifier [13, 43] - [13, 52])
property: (property_identifier [13, 53] - [13, 61]))
arguments: (arguments [13, 61] - [13, 69]
(string [13, 62] - [13, 68]
(string_fragment [13, 63] - [13, 67])))))
right: (call_expression [14, 4] - [14, 36]
function: (member_expression [14, 4] - [14, 22]
object: (identifier [14, 4] - [14, 13])
property: (property_identifier [14, 14] - [14, 22]))
arguments: (arguments [14, 22] - [14, 36]
(string [14, 23] - [14, 35]
(string_fragment [14, 24] - [14, 34]))))))
consequence: (statement_block [15, 4] - [22, 3]
(comment [16, 4] - [16, 86])
(if_statement [17, 4] - [19, 5]
condition: (parenthesized_expression [17, 7] - [17, 44]
(call_expression [17, 8] - [17, 43]
function: (member_expression [17, 8] - [17, 23]
object: (identifier [17, 8] - [17, 14])
property: (property_identifier [17, 15] - [17, 23]))
arguments: (arguments [17, 23] - [17, 43]
(string [17, 24] - [17, 42]
(string_fragment [17, 25] - [17, 41])))))
consequence: (statement_block [17, 45] - [19, 5]
(return_statement [18, 6] - [18, 19]
(string [18, 13] - [18, 18]
(string_fragment [18, 14] - [18, 17])))))
(comment [20, 4] - [20, 81])
(return_statement [21, 4] - [21, 19]
(string [21, 11] - [21, 18]
(string_fragment [21, 12] - [21, 17])))))
(if_statement [24, 2] - [26, 3]
condition: (parenthesized_expression [24, 5] - [24, 35]
(call_expression [24, 6] - [24, 34]
function: (member_expression [24, 6] - [24, 21]
object: (identifier [24, 6] - [24, 12])
property: (property_identifier [24, 13] - [24, 21]))
arguments: (arguments [24, 21] - [24, 34]
(string [24, 22] - [24, 33]
(string_fragment [24, 23] - [24, 32])))))
consequence: (statement_block [24, 36] - [26, 3]
(return_statement [25, 4] - [25, 21]
(string [25, 11] - [25, 20]
(string_fragment [25, 12] - [25, 19])))))
(comment [28, 2] - [28, 35])
(return_statement [29, 2] - [29, 15]
(string [29, 9] - [29, 14]
(string_fragment [29, 10] - [29, 13]))))))
(export_statement [32, 0] - [38, 1]
declaration: (function_declaration [32, 7] - [38, 1]
name: (identifier [32, 16] - [32, 34])
parameters: (formal_parameters [32, 34] - [32, 36])
body: (statement_block [32, 37] - [38, 1]
(return_statement [33, 2] - [37, 4]
(arrow_function [33, 9] - [37, 3]
parameters: (formal_parameters [33, 15] - [33, 39]
(required_parameter [33, 16] - [33, 26]
pattern: (identifier [33, 16] - [33, 17])
type: (type_annotation [33, 17] - [33, 26]
(type_identifier [33, 19] - [33, 26])))
(required_parameter [33, 28] - [33, 38]
pattern: (identifier [33, 28] - [33, 32])
type: (type_annotation [33, 32] - [33, 38]
(type_identifier [33, 34] - [33, 38]))))
body: (statement_block [33, 43] - [37, 3]
(lexical_declaration [34, 4] - [34, 46]
(variable_declarator [34, 10] - [34, 45]
name: (identifier [34, 10] - [34, 20])
value: (call_expression [34, 23] - [34, 45]
function: (identifier [34, 23] - [34, 42])
arguments: (arguments [34, 42] - [34, 45]
(identifier [34, 43] - [34, 44])))))
(expression_statement [35, 4] - [35, 36]
(call_expression [35, 4] - [35, 35]
function: (member_expression [35, 4] - [35, 9]
object: (identifier [35, 4] - [35, 5])
property: (property_identifier [35, 6] - [35, 9]))
arguments: (arguments [35, 9] - [35, 35]
(string [35, 10] - [35, 22]
(string_fragment [35, 11] - [35, 21]))
(identifier [35, 24] - [35, 34]))))
(expression_statement [36, 4] - [36, 17]
(await_expression [36, 4] - [36, 16]
(call_expression [36, 10] - [36, 16]
function: (identifier [36, 10] - [36, 14])
arguments: (arguments [36, 14] - [36, 16])))))))))))

View File

@ -1,678 +0,0 @@
(program [0, 0] - [364, 0]
(import_statement [0, 0] - [0, 38]
(import_clause [0, 7] - [0, 15]
(identifier [0, 7] - [0, 15]))
source: (string [0, 21] - [0, 37]
(string_fragment [0, 22] - [0, 36])))
(comment [2, 0] - [2, 82])
(lexical_declaration [3, 0] - [4, 40]
(variable_declarator [3, 6] - [4, 39]
name: (identifier [3, 6] - [3, 10])
value: (binary_expression [3, 13] - [4, 39]
left: (call_expression [3, 13] - [3, 42]
function: (member_expression [3, 13] - [3, 25]
object: (member_expression [3, 13] - [3, 21]
object: (identifier [3, 13] - [3, 17])
property: (property_identifier [3, 18] - [3, 21]))
property: (property_identifier [3, 22] - [3, 25]))
arguments: (arguments [3, 25] - [3, 42]
(string [3, 26] - [3, 41]
(string_fragment [3, 27] - [3, 40]))))
right: (parenthesized_expression [4, 2] - [4, 39]
(ternary_expression [4, 3] - [4, 38]
condition: (member_expression [4, 3] - [4, 19]
object: (meta_property [4, 3] - [4, 14])
property: (property_identifier [4, 15] - [4, 19]))
consequence: (string [4, 22] - [4, 24])
alternative: (string [4, 27] - [4, 38]
(string_fragment [4, 28] - [4, 37])))))))
(lexical_declaration [5, 0] - [6, 39]
(variable_declarator [5, 6] - [6, 38]
name: (identifier [5, 6] - [5, 10])
value: (binary_expression [5, 13] - [6, 38]
left: (call_expression [5, 13] - [5, 42]
function: (member_expression [5, 13] - [5, 25]
object: (member_expression [5, 13] - [5, 21]
object: (identifier [5, 13] - [5, 17])
property: (property_identifier [5, 18] - [5, 21]))
property: (property_identifier [5, 22] - [5, 25]))
arguments: (arguments [5, 25] - [5, 42]
(string [5, 26] - [5, 41]
(string_fragment [5, 27] - [5, 40]))))
right: (parenthesized_expression [6, 2] - [6, 38]
(ternary_expression [6, 3] - [6, 37]
condition: (member_expression [6, 3] - [6, 19]
object: (meta_property [6, 3] - [6, 14])
property: (property_identifier [6, 15] - [6, 19]))
consequence: (string [6, 22] - [6, 24])
alternative: (string [6, 27] - [6, 37]
(string_fragment [6, 28] - [6, 36])))))))
(lexical_declaration [7, 0] - [8, 39]
(variable_declarator [7, 6] - [8, 38]
name: (identifier [7, 6] - [7, 14])
value: (binary_expression [7, 17] - [8, 38]
left: (call_expression [7, 17] - [7, 50]
function: (member_expression [7, 17] - [7, 29]
object: (member_expression [7, 17] - [7, 25]
object: (identifier [7, 17] - [7, 21])
property: (property_identifier [7, 22] - [7, 25]))
property: (property_identifier [7, 26] - [7, 29]))
arguments: (arguments [7, 29] - [7, 50]
(string [7, 30] - [7, 49]
(string_fragment [7, 31] - [7, 48]))))
right: (parenthesized_expression [8, 2] - [8, 38]
(ternary_expression [8, 3] - [8, 37]
condition: (member_expression [8, 3] - [8, 19]
object: (meta_property [8, 3] - [8, 14])
property: (property_identifier [8, 15] - [8, 19]))
consequence: (string [8, 22] - [8, 24])
alternative: (string [8, 27] - [8, 37]
(string_fragment [8, 28] - [8, 36])))))))
(lexical_declaration [9, 0] - [9, 79]
(variable_declarator [9, 6] - [9, 78]
name: (identifier [9, 6] - [9, 8])
value: (binary_expression [9, 11] - [9, 78]
left: (call_expression [9, 11] - [9, 38]
function: (member_expression [9, 11] - [9, 23]
object: (member_expression [9, 11] - [9, 19]
object: (identifier [9, 11] - [9, 15])
property: (property_identifier [9, 16] - [9, 19]))
property: (property_identifier [9, 20] - [9, 23]))
arguments: (arguments [9, 23] - [9, 38]
(string [9, 24] - [9, 37]
(string_fragment [9, 25] - [9, 36]))))
right: (parenthesized_expression [9, 42] - [9, 78]
(ternary_expression [9, 43] - [9, 77]
condition: (member_expression [9, 43] - [9, 59]
object: (meta_property [9, 43] - [9, 54])
property: (property_identifier [9, 55] - [9, 59]))
consequence: (string [9, 62] - [9, 64])
alternative: (string [9, 67] - [9, 77]
(string_fragment [9, 68] - [9, 76])))))))
(lexical_declaration [10, 0] - [10, 53]
(variable_declarator [10, 6] - [10, 52]
name: (identifier [10, 6] - [10, 10])
value: (binary_expression [10, 13] - [10, 52]
left: (call_expression [10, 13] - [10, 42]
function: (member_expression [10, 13] - [10, 25]
object: (member_expression [10, 13] - [10, 21]
object: (identifier [10, 13] - [10, 17])
property: (property_identifier [10, 18] - [10, 21]))
property: (property_identifier [10, 22] - [10, 25]))
arguments: (arguments [10, 25] - [10, 42]
(string [10, 26] - [10, 41]
(string_fragment [10, 27] - [10, 40]))))
right: (string [10, 46] - [10, 52]
(string_fragment [10, 47] - [10, 51])))))
(if_statement [12, 0] - [16, 1]
condition: (parenthesized_expression [12, 3] - [12, 61]
(binary_expression [12, 4] - [12, 60]
left: (member_expression [12, 4] - [12, 20]
object: (meta_property [12, 4] - [12, 15])
property: (property_identifier [12, 16] - [12, 20]))
right: (parenthesized_expression [12, 24] - [12, 60]
(binary_expression [12, 25] - [12, 59]
left: (binary_expression [12, 25] - [12, 52]
left: (binary_expression [12, 25] - [12, 39]
left: (unary_expression [12, 25] - [12, 30]
argument: (identifier [12, 26] - [12, 30]))
right: (unary_expression [12, 34] - [12, 39]
argument: (identifier [12, 35] - [12, 39])))
right: (unary_expression [12, 43] - [12, 52]
argument: (identifier [12, 44] - [12, 52])))
right: (unary_expression [12, 56] - [12, 59]
argument: (identifier [12, 57] - [12, 59]))))))
consequence: (statement_block [12, 62] - [16, 1]
(throw_statement [13, 2] - [15, 4]
(new_expression [13, 8] - [15, 3]
constructor: (identifier [13, 12] - [13, 17])
arguments: (arguments [13, 17] - [15, 3]
(string [14, 4] - [14, 126]
(string_fragment [14, 5] - [14, 125])))))))
(lexical_declaration [18, 0] - [18, 80]
(variable_declarator [18, 6] - [18, 79]
name: (identifier [18, 6] - [18, 22])
value: (template_string [18, 25] - [18, 79]
(string_fragment [18, 26] - [18, 37])
(template_substitution [18, 37] - [18, 44]
(identifier [18, 39] - [18, 43]))
(string_fragment [18, 44] - [18, 45])
(template_substitution [18, 45] - [18, 56]
(identifier [18, 47] - [18, 55]))
(string_fragment [18, 56] - [18, 57])
(template_substitution [18, 57] - [18, 64]
(identifier [18, 59] - [18, 63]))
(string_fragment [18, 64] - [18, 65])
(template_substitution [18, 65] - [18, 72]
(identifier [18, 67] - [18, 71]))
(string_fragment [18, 72] - [18, 73])
(template_substitution [18, 73] - [18, 78]
(identifier [18, 75] - [18, 77])))))
(comment [20, 0] - [20, 50])
(export_statement [21, 0] - [21, 44]
declaration: (lexical_declaration [21, 7] - [21, 44]
(variable_declarator [21, 11] - [21, 43]
name: (identifier [21, 11] - [21, 14])
value: (call_expression [21, 17] - [21, 43]
function: (identifier [21, 17] - [21, 25])
arguments: (arguments [21, 25] - [21, 43]
(identifier [21, 26] - [21, 42]))))))
(comment [23, 0] - [25, 3])
(export_statement [26, 0] - [354, 1]
declaration: (function_declaration [26, 7] - [354, 1]
name: (identifier [26, 22] - [26, 28])
parameters: (formal_parameters [26, 28] - [26, 30])
return_type: (type_annotation [26, 30] - [26, 45]
(generic_type [26, 32] - [26, 45]
name: (type_identifier [26, 32] - [26, 39])
type_arguments: (type_arguments [26, 39] - [26, 45]
(predefined_type [26, 40] - [26, 44]))))
body: (statement_block [26, 46] - [354, 1]
(expression_statement [27, 2] - [27, 76]
(call_expression [27, 2] - [27, 75]
function: (member_expression [27, 2] - [27, 13]
object: (identifier [27, 2] - [27, 9])
property: (property_identifier [27, 10] - [27, 13]))
arguments: (arguments [27, 13] - [27, 75]
(string [27, 14] - [27, 74]
(string_fragment [27, 15] - [27, 73])))))
(comment [29, 2] - [29, 94])
(comment [30, 2] - [30, 62])
(expression_statement [31, 2] - [39, 4]
(await_expression [31, 2] - [39, 3]
(call_expression [31, 8] - [39, 3]
function: (identifier [31, 8] - [31, 11])
arguments: (template_string [31, 11] - [39, 3]
(string_fragment [31, 12] - [39, 2])))))
(try_statement [41, 2] - [46, 3]
body: (statement_block [41, 6] - [44, 3]
(expression_statement [42, 4] - [42, 83]
(await_expression [42, 4] - [42, 82]
(call_expression [42, 10] - [42, 82]
function: (identifier [42, 10] - [42, 13])
arguments: (template_string [42, 13] - [42, 82]
(string_fragment [42, 14] - [42, 81])))))
(expression_statement [43, 4] - [43, 108]
(await_expression [43, 4] - [43, 107]
(call_expression [43, 10] - [43, 107]
function: (identifier [43, 10] - [43, 13])
arguments: (template_string [43, 13] - [43, 107]
(string_fragment [43, 14] - [43, 106]))))))
handler: (catch_clause [44, 4] - [46, 3]
body: (statement_block [44, 10] - [46, 3]
(comment [45, 4] - [45, 28]))))
(expression_statement [48, 2] - [56, 4]
(await_expression [48, 2] - [56, 3]
(call_expression [48, 8] - [56, 3]
function: (identifier [48, 8] - [48, 11])
arguments: (template_string [48, 11] - [56, 3]
(string_fragment [48, 12] - [56, 2])))))
(comment [58, 2] - [58, 63])
(try_statement [59, 2] - [64, 3]
body: (statement_block [59, 6] - [61, 3]
(expression_statement [60, 4] - [60, 80]
(await_expression [60, 4] - [60, 79]
(call_expression [60, 10] - [60, 79]
function: (identifier [60, 10] - [60, 13])
arguments: (template_string [60, 13] - [60, 79]
(string_fragment [60, 14] - [60, 78]))))))
handler: (catch_clause [61, 4] - [64, 3]
body: (statement_block [61, 10] - [64, 3]
(comment [62, 4] - [62, 43])
(comment [63, 4] - [63, 28]))))
(comment [66, 2] - [66, 63])
(try_statement [67, 2] - [71, 3]
body: (statement_block [67, 6] - [69, 3]
(expression_statement [68, 4] - [68, 76]
(await_expression [68, 4] - [68, 75]
(call_expression [68, 10] - [68, 75]
function: (identifier [68, 10] - [68, 13])
arguments: (template_string [68, 13] - [68, 75]
(string_fragment [68, 14] - [68, 74]))))))
handler: (catch_clause [69, 4] - [71, 3]
body: (statement_block [69, 10] - [71, 3]
(comment [70, 4] - [70, 43]))))
(comment [73, 2] - [73, 27])
(try_statement [74, 2] - [80, 3]
body: (statement_block [74, 6] - [78, 3]
(expression_statement [75, 4] - [75, 89]
(await_expression [75, 4] - [75, 88]
(call_expression [75, 10] - [75, 88]
function: (identifier [75, 10] - [75, 13])
arguments: (template_string [75, 13] - [75, 88]
(string_fragment [75, 14] - [75, 87])))))
(expression_statement [76, 4] - [76, 90]
(await_expression [76, 4] - [76, 89]
(call_expression [76, 10] - [76, 89]
function: (identifier [76, 10] - [76, 13])
arguments: (template_string [76, 13] - [76, 89]
(string_fragment [76, 14] - [76, 88])))))
(expression_statement [77, 4] - [77, 91]
(await_expression [77, 4] - [77, 90]
(call_expression [77, 10] - [77, 90]
function: (identifier [77, 10] - [77, 13])
arguments: (template_string [77, 13] - [77, 90]
(string_fragment [77, 14] - [77, 89]))))))
handler: (catch_clause [78, 4] - [80, 3]
body: (statement_block [78, 10] - [80, 3]
(comment [79, 4] - [79, 43]))))
(expression_statement [82, 2] - [91, 4]
(await_expression [82, 2] - [91, 3]
(call_expression [82, 8] - [91, 3]
function: (identifier [82, 8] - [82, 11])
arguments: (template_string [82, 11] - [91, 3]
(string_fragment [82, 12] - [91, 2])))))
(comment [93, 2] - [93, 49])
(try_statement [94, 2] - [109, 3]
body: (statement_block [94, 6] - [107, 3]
(lexical_declaration [95, 4] - [96, 41]
(variable_declarator [95, 10] - [96, 40]
name: (identifier [95, 10] - [95, 23])
value: (await_expression [95, 26] - [96, 40]
(call_expression [95, 32] - [96, 40]
function: (member_expression [95, 32] - [96, 11]
object: (call_expression [95, 32] - [95, 77]
function: (identifier [95, 32] - [95, 35])
arguments: (template_string [95, 35] - [95, 77]
(string_fragment [95, 36] - [95, 76])))
property: (property_identifier [96, 7] - [96, 11]))
arguments: (arguments [96, 11] - [96, 40]
(arrow_function [96, 12] - [96, 39]
parameters: (formal_parameters [96, 12] - [96, 17]
(required_parameter [96, 13] - [96, 16]
pattern: (identifier [96, 13] - [96, 16])))
body: (binary_expression [96, 21] - [96, 39]
left: (member_expression [96, 21] - [96, 34]
object: (subscript_expression [96, 21] - [96, 27]
object: (identifier [96, 21] - [96, 24])
index: (number [96, 25] - [96, 26]))
optional_chain: (optional_chain [96, 27] - [96, 29])
property: (property_identifier [96, 29] - [96, 34]))
right: (number [96, 38] - [96, 39]))))))))
(if_statement [97, 4] - [106, 5]
condition: (parenthesized_expression [97, 7] - [97, 28]
(binary_expression [97, 8] - [97, 27]
left: (identifier [97, 8] - [97, 21])
right: (number [97, 26] - [97, 27])))
consequence: (statement_block [97, 29] - [106, 5]
(expression_statement [98, 6] - [105, 8]
(await_expression [98, 6] - [105, 7]
(call_expression [98, 12] - [105, 7]
function: (identifier [98, 12] - [98, 15])
arguments: (template_string [98, 15] - [105, 7]
(string_fragment [98, 16] - [105, 6]))))))))
handler: (catch_clause [107, 4] - [109, 3]
body: (statement_block [107, 10] - [109, 3]
(comment [108, 4] - [108, 44]))))
(expression_statement [111, 2] - [120, 4]
(await_expression [111, 2] - [120, 3]
(call_expression [111, 8] - [120, 3]
function: (identifier [111, 8] - [111, 11])
arguments: (template_string [111, 11] - [120, 3]
(string_fragment [111, 12] - [120, 2])))))
(expression_statement [122, 2] - [137, 4]
(await_expression [122, 2] - [137, 3]
(call_expression [122, 8] - [137, 3]
function: (identifier [122, 8] - [122, 11])
arguments: (template_string [122, 11] - [137, 3]
(string_fragment [122, 12] - [137, 2])))))
(comment [139, 2] - [139, 42])
(try_statement [140, 2] - [146, 3]
body: (statement_block [140, 6] - [144, 3]
(expression_statement [141, 4] - [141, 83]
(await_expression [141, 4] - [141, 82]
(call_expression [141, 10] - [141, 82]
function: (identifier [141, 10] - [141, 13])
arguments: (template_string [141, 13] - [141, 82]
(string_fragment [141, 14] - [141, 81])))))
(expression_statement [142, 4] - [142, 85]
(await_expression [142, 4] - [142, 84]
(call_expression [142, 10] - [142, 84]
function: (identifier [142, 10] - [142, 13])
arguments: (template_string [142, 13] - [142, 84]
(string_fragment [142, 14] - [142, 83])))))
(expression_statement [143, 4] - [143, 95]
(await_expression [143, 4] - [143, 94]
(call_expression [143, 10] - [143, 94]
function: (identifier [143, 10] - [143, 13])
arguments: (template_string [143, 13] - [143, 94]
(string_fragment [143, 14] - [143, 93]))))))
handler: (catch_clause [144, 4] - [146, 3]
body: (statement_block [144, 10] - [146, 3]
(comment [145, 4] - [145, 37]))))
(expression_statement [148, 2] - [155, 4]
(await_expression [148, 2] - [155, 3]
(call_expression [148, 8] - [155, 3]
function: (identifier [148, 8] - [148, 11])
arguments: (template_string [148, 11] - [155, 3]
(string_fragment [148, 12] - [155, 2])))))
(expression_statement [157, 2] - [164, 4]
(await_expression [157, 2] - [164, 3]
(call_expression [157, 8] - [164, 3]
function: (identifier [157, 8] - [157, 11])
arguments: (template_string [157, 11] - [164, 3]
(string_fragment [157, 12] - [164, 2])))))
(expression_statement [166, 2] - [176, 4]
(await_expression [166, 2] - [176, 3]
(call_expression [166, 8] - [176, 3]
function: (identifier [166, 8] - [166, 11])
arguments: (template_string [166, 11] - [176, 3]
(string_fragment [166, 12] - [176, 2])))))
(expression_statement [178, 2] - [187, 4]
(await_expression [178, 2] - [187, 3]
(call_expression [178, 8] - [187, 3]
function: (identifier [178, 8] - [178, 11])
arguments: (template_string [178, 11] - [187, 3]
(string_fragment [178, 12] - [187, 2])))))
(expression_statement [189, 2] - [200, 4]
(await_expression [189, 2] - [200, 3]
(call_expression [189, 8] - [200, 3]
function: (identifier [189, 8] - [189, 11])
arguments: (template_string [189, 11] - [200, 3]
(string_fragment [189, 12] - [200, 2])))))
(try_statement [202, 2] - [206, 3]
body: (statement_block [202, 6] - [204, 3]
(expression_statement [203, 4] - [203, 81]
(await_expression [203, 4] - [203, 80]
(call_expression [203, 10] - [203, 80]
function: (identifier [203, 10] - [203, 13])
arguments: (template_string [203, 13] - [203, 80]
(string_fragment [203, 14] - [203, 79]))))))
handler: (catch_clause [204, 4] - [206, 3]
body: (statement_block [204, 10] - [206, 3]
(comment [205, 4] - [205, 37]))))
(expression_statement [208, 2] - [225, 4]
(await_expression [208, 2] - [225, 3]
(call_expression [208, 8] - [225, 3]
function: (identifier [208, 8] - [208, 11])
arguments: (template_string [208, 11] - [225, 3]
(string_fragment [208, 12] - [225, 2])))))
(try_statement [227, 2] - [242, 3]
body: (statement_block [227, 6] - [240, 3]
(expression_statement [228, 4] - [228, 97]
(await_expression [228, 4] - [228, 96]
(call_expression [228, 10] - [228, 96]
function: (identifier [228, 10] - [228, 13])
arguments: (template_string [228, 13] - [228, 96]
(string_fragment [228, 14] - [228, 95])))))
(expression_statement [229, 4] - [229, 123]
(await_expression [229, 4] - [229, 122]
(call_expression [229, 10] - [229, 122]
function: (identifier [229, 10] - [229, 13])
arguments: (template_string [229, 13] - [229, 122]
(string_fragment [229, 14] - [229, 121])))))
(comment [231, 4] - [231, 88])
(expression_statement [232, 4] - [239, 6]
(await_expression [232, 4] - [239, 5]
(call_expression [232, 10] - [239, 5]
function: (identifier [232, 10] - [232, 13])
arguments: (template_string [232, 13] - [239, 5]
(string_fragment [232, 14] - [238, 52])
(escape_sequence [238, 52] - [238, 54])
(string_fragment [238, 54] - [239, 4]))))))
handler: (catch_clause [240, 4] - [242, 3]
body: (statement_block [240, 10] - [242, 3]
(comment [241, 4] - [241, 37]))))
(expression_statement [244, 2] - [252, 4]
(await_expression [244, 2] - [252, 3]
(call_expression [244, 8] - [252, 3]
function: (identifier [244, 8] - [244, 11])
arguments: (template_string [244, 11] - [252, 3]
(string_fragment [244, 12] - [252, 2])))))
(expression_statement [254, 2] - [264, 4]
(await_expression [254, 2] - [264, 3]
(call_expression [254, 8] - [264, 3]
function: (identifier [254, 8] - [254, 11])
arguments: (template_string [254, 11] - [264, 3]
(string_fragment [254, 12] - [264, 2])))))
(comment [266, 2] - [266, 29])
(try_statement [267, 2] - [272, 3]
body: (statement_block [267, 6] - [270, 3]
(expression_statement [268, 4] - [268, 95]
(await_expression [268, 4] - [268, 94]
(call_expression [268, 10] - [268, 94]
function: (identifier [268, 10] - [268, 13])
arguments: (template_string [268, 13] - [268, 94]
(string_fragment [268, 14] - [268, 93])))))
(expression_statement [269, 4] - [269, 75]
(await_expression [269, 4] - [269, 74]
(call_expression [269, 10] - [269, 74]
function: (identifier [269, 10] - [269, 13])
arguments: (template_string [269, 13] - [269, 74]
(string_fragment [269, 14] - [269, 73]))))))
handler: (catch_clause [270, 4] - [272, 3]
body: (statement_block [270, 10] - [272, 3]
(comment [271, 4] - [271, 37]))))
(expression_statement [274, 2] - [287, 4]
(await_expression [274, 2] - [287, 3]
(call_expression [274, 8] - [287, 3]
function: (identifier [274, 8] - [274, 11])
arguments: (template_string [274, 11] - [287, 3]
(string_fragment [274, 12] - [287, 2])))))
(try_statement [289, 2] - [298, 3]
body: (statement_block [289, 6] - [296, 3]
(expression_statement [290, 4] - [290, 72]
(await_expression [290, 4] - [290, 71]
(call_expression [290, 10] - [290, 71]
function: (identifier [290, 10] - [290, 13])
arguments: (template_string [290, 13] - [290, 71]
(string_fragment [290, 14] - [290, 70])))))
(expression_statement [291, 4] - [291, 92]
(await_expression [291, 4] - [291, 91]
(call_expression [291, 10] - [291, 91]
function: (identifier [291, 10] - [291, 13])
arguments: (template_string [291, 13] - [291, 91]
(string_fragment [291, 14] - [291, 90])))))
(expression_statement [292, 4] - [292, 82]
(await_expression [292, 4] - [292, 81]
(call_expression [292, 10] - [292, 81]
function: (identifier [292, 10] - [292, 13])
arguments: (template_string [292, 13] - [292, 81]
(string_fragment [292, 14] - [292, 80])))))
(expression_statement [293, 4] - [293, 117]
(await_expression [293, 4] - [293, 116]
(call_expression [293, 10] - [293, 116]
function: (identifier [293, 10] - [293, 13])
arguments: (template_string [293, 13] - [293, 116]
(string_fragment [293, 14] - [293, 115])))))
(expression_statement [294, 4] - [294, 87]
(await_expression [294, 4] - [294, 86]
(call_expression [294, 10] - [294, 86]
function: (identifier [294, 10] - [294, 13])
arguments: (template_string [294, 13] - [294, 86]
(string_fragment [294, 14] - [294, 85])))))
(expression_statement [295, 4] - [295, 93]
(await_expression [295, 4] - [295, 92]
(call_expression [295, 10] - [295, 92]
function: (identifier [295, 10] - [295, 13])
arguments: (template_string [295, 13] - [295, 92]
(string_fragment [295, 14] - [295, 91]))))))
handler: (catch_clause [296, 4] - [298, 3]
body: (statement_block [296, 10] - [298, 3]
(comment [297, 4] - [297, 37]))))
(expression_statement [300, 2] - [308, 4]
(await_expression [300, 2] - [308, 3]
(call_expression [300, 8] - [308, 3]
function: (identifier [300, 8] - [300, 11])
arguments: (template_string [300, 11] - [308, 3]
(string_fragment [300, 12] - [308, 2])))))
(comment [310, 2] - [310, 55])
(expression_statement [311, 2] - [315, 4]
(await_expression [311, 2] - [315, 3]
(call_expression [311, 8] - [315, 3]
function: (identifier [311, 8] - [311, 11])
arguments: (template_string [311, 11] - [315, 3]
(string_fragment [311, 12] - [315, 2])))))
(comment [317, 2] - [317, 71])
(expression_statement [318, 2] - [322, 4]
(await_expression [318, 2] - [322, 3]
(call_expression [318, 8] - [322, 3]
function: (identifier [318, 8] - [318, 11])
arguments: (template_string [318, 11] - [322, 3]
(string_fragment [318, 12] - [322, 2])))))
(comment [324, 2] - [324, 74])
(try_statement [325, 2] - [351, 3]
body: (statement_block [325, 6] - [349, 3]
(lexical_declaration [326, 4] - [328, 6]
(variable_declarator [326, 10] - [328, 5]
name: (identifier [326, 10] - [326, 19])
value: (await_expression [326, 22] - [328, 5]
(call_expression [326, 28] - [328, 5]
function: (member_expression [326, 28] - [326, 78]
object: (call_expression [326, 28] - [326, 73]
function: (identifier [326, 28] - [326, 31])
arguments: (template_string [326, 31] - [326, 73]
(string_fragment [326, 32] - [326, 72])))
property: (property_identifier [326, 74] - [326, 78]))
arguments: (arguments [326, 78] - [328, 5]
(arrow_function [327, 6] - [327, 33]
parameters: (formal_parameters [327, 6] - [327, 11]
(required_parameter [327, 7] - [327, 10]
pattern: (identifier [327, 7] - [327, 10])))
body: (binary_expression [327, 15] - [327, 33]
left: (member_expression [327, 15] - [327, 28]
object: (subscript_expression [327, 15] - [327, 21]
object: (identifier [327, 15] - [327, 18])
index: (number [327, 19] - [327, 20]))
optional_chain: (optional_chain [327, 21] - [327, 23])
property: (property_identifier [327, 23] - [327, 28]))
right: (number [327, 32] - [327, 33]))))))))
(if_statement [329, 4] - [348, 5]
condition: (parenthesized_expression [329, 7] - [329, 24]
(binary_expression [329, 8] - [329, 23]
left: (identifier [329, 8] - [329, 17])
right: (number [329, 22] - [329, 23])))
consequence: (statement_block [329, 25] - [348, 5]
(lexical_declaration [330, 6] - [333, 42]
(variable_declarator [330, 12] - [333, 41]
name: (identifier [330, 12] - [330, 23])
value: (await_expression [330, 26] - [333, 41]
(call_expression [330, 32] - [333, 41]
function: (member_expression [330, 32] - [333, 12]
object: (call_expression [330, 32] - [333, 7]
function: (identifier [330, 32] - [330, 35])
arguments: (template_string [330, 35] - [333, 7]
(string_fragment [330, 36] - [333, 6])))
property: (property_identifier [333, 8] - [333, 12]))
arguments: (arguments [333, 12] - [333, 41]
(arrow_function [333, 13] - [333, 40]
parameters: (formal_parameters [333, 13] - [333, 18]
(required_parameter [333, 14] - [333, 17]
pattern: (identifier [333, 14] - [333, 17])))
body: (binary_expression [333, 22] - [333, 40]
left: (member_expression [333, 22] - [333, 35]
object: (subscript_expression [333, 22] - [333, 28]
object: (identifier [333, 22] - [333, 25])
index: (number [333, 26] - [333, 27]))
optional_chain: (optional_chain [333, 28] - [333, 30])
property: (property_identifier [333, 30] - [333, 35]))
right: (number [333, 39] - [333, 40]))))))))
(if_statement [335, 6] - [347, 7]
condition: (parenthesized_expression [335, 9] - [335, 28]
(binary_expression [335, 10] - [335, 27]
left: (identifier [335, 10] - [335, 21])
right: (number [335, 26] - [335, 27])))
consequence: (statement_block [335, 29] - [347, 7]
(lexical_declaration [336, 8] - [337, 28]
(variable_declarator [336, 14] - [337, 27]
name: (identifier [336, 14] - [336, 27])
value: (binary_expression [336, 30] - [337, 27]
left: (call_expression [336, 30] - [336, 67]
function: (member_expression [336, 30] - [336, 42]
object: (member_expression [336, 30] - [336, 38]
object: (identifier [336, 30] - [336, 34])
property: (property_identifier [336, 35] - [336, 38]))
property: (property_identifier [336, 39] - [336, 42]))
arguments: (arguments [336, 42] - [336, 67]
(string [336, 43] - [336, 66]
(string_fragment [336, 44] - [336, 65]))))
right: (string [337, 10] - [337, 27]
(string_fragment [337, 11] - [337, 26])))))
(lexical_declaration [338, 8] - [338, 74]
(variable_declarator [338, 14] - [338, 73]
name: (identifier [338, 14] - [338, 23])
value: (new_expression [338, 26] - [338, 73]
constructor: (identifier [338, 30] - [338, 34])
arguments: (arguments [338, 34] - [338, 73]
(binary_expression [338, 35] - [338, 72]
left: (call_expression [338, 35] - [338, 45]
function: (member_expression [338, 35] - [338, 43]
object: (identifier [338, 35] - [338, 39])
property: (property_identifier [338, 40] - [338, 43]))
arguments: (arguments [338, 43] - [338, 45]))
right: (binary_expression [338, 48] - [338, 72]
left: (binary_expression [338, 48] - [338, 65]
left: (binary_expression [338, 48] - [338, 60]
left: (binary_expression [338, 48] - [338, 55]
left: (number [338, 48] - [338, 50])
right: (number [338, 53] - [338, 55]))
right: (number [338, 58] - [338, 60]))
right: (number [338, 63] - [338, 65]))
right: (number [338, 68] - [338, 72])))))))
(comment [338, 75] - [338, 85])
(expression_statement [339, 8] - [343, 10]
(await_expression [339, 8] - [343, 9]
(call_expression [339, 14] - [343, 9]
function: (identifier [339, 14] - [339, 17])
arguments: (template_string [339, 17] - [343, 9]
(string_fragment [339, 18] - [341, 18])
(template_substitution [341, 18] - [341, 34]
(identifier [341, 20] - [341, 33]))
(string_fragment [341, 34] - [341, 63])
(template_substitution [341, 63] - [341, 75]
(identifier [341, 65] - [341, 74]))
(string_fragment [341, 75] - [343, 8])))))
(expression_statement [344, 8] - [346, 10]
(call_expression [344, 8] - [346, 9]
function: (member_expression [344, 8] - [344, 19]
object: (identifier [344, 8] - [344, 15])
property: (property_identifier [344, 16] - [344, 19]))
arguments: (arguments [344, 19] - [346, 9]
(template_string [345, 10] - [345, 84]
(string_fragment [345, 11] - [345, 66])
(template_substitution [345, 66] - [345, 82]
(identifier [345, 68] - [345, 81]))
(string_fragment [345, 82] - [345, 83]))))))))))
handler: (catch_clause [349, 4] - [351, 3]
parameter: (identifier [349, 11] - [349, 14])
body: (statement_block [349, 16] - [351, 3]
(expression_statement [350, 4] - [350, 67]
(call_expression [350, 4] - [350, 66]
function: (member_expression [350, 4] - [350, 16]
object: (identifier [350, 4] - [350, 11])
property: (property_identifier [350, 12] - [350, 16]))
arguments: (arguments [350, 16] - [350, 66]
(string [350, 17] - [350, 60]
(string_fragment [350, 18] - [350, 59]))
(identifier [350, 62] - [350, 65])))))))
(expression_statement [353, 2] - [353, 73]
(call_expression [353, 2] - [353, 72]
function: (member_expression [353, 2] - [353, 13]
object: (identifier [353, 2] - [353, 9])
property: (property_identifier [353, 10] - [353, 13]))
arguments: (arguments [353, 13] - [353, 72]
(string [353, 14] - [353, 71]
(string_fragment [353, 15] - [353, 70]))))))))
(export_statement [356, 0] - [363, 2]
declaration: (lexical_declaration [356, 7] - [363, 2]
(variable_declarator [356, 13] - [363, 1]
name: (identifier [356, 13] - [356, 23])
value: (object [356, 26] - [363, 1]
(method_definition [357, 2] - [359, 3]
name: (property_identifier [357, 6] - [357, 9])
parameters: (formal_parameters [357, 9] - [357, 11])
body: (statement_block [357, 12] - [359, 3]
(return_statement [358, 4] - [358, 15]
(identifier [358, 11] - [358, 14]))))
(method_definition [360, 2] - [362, 3]
name: (property_identifier [360, 6] - [360, 9])
parameters: (formal_parameters [360, 9] - [360, 19]
(required_parameter [360, 10] - [360, 18]
pattern: (identifier [360, 10] - [360, 13])
type: (type_annotation [360, 13] - [360, 18]
(predefined_type [360, 15] - [360, 18]))))
body: (statement_block [360, 20] - [362, 3]
(expression_statement [361, 4] - [361, 14]
(assignment_expression [361, 4] - [361, 13]
left: (identifier [361, 4] - [361, 7])
right: (identifier [361, 10] - [361, 13]))))))))))

View File

@ -1,980 +0,0 @@
(program [0, 0] - [229, 0]
(export_statement [0, 0] - [228, 2]
declaration: (lexical_declaration [0, 7] - [228, 2]
(variable_declarator [0, 13] - [228, 1]
name: (identifier [0, 13] - [0, 32])
value: (arrow_function [0, 35] - [228, 1]
parameters: (formal_parameters [0, 35] - [8, 2]
(required_parameter [0, 36] - [8, 1]
pattern: (object_pattern [0, 36] - [4, 1]
(shorthand_property_identifier_pattern [1, 2] - [1, 10])
(shorthand_property_identifier_pattern [2, 2] - [2, 18])
(object_assignment_pattern [3, 2] - [3, 18]
left: (shorthand_property_identifier_pattern [3, 2] - [3, 13])
right: (array [3, 16] - [3, 18])))
type: (type_annotation [4, 1] - [8, 1]
(object_type [4, 3] - [8, 1]
(property_signature [5, 2] - [5, 17]
name: (property_identifier [5, 2] - [5, 10])
type: (type_annotation [5, 10] - [5, 17]
(array_type [5, 12] - [5, 17]
(predefined_type [5, 12] - [5, 15]))))
(property_signature [6, 2] - [6, 26]
name: (property_identifier [6, 2] - [6, 18])
type: (type_annotation [6, 18] - [6, 26]
(predefined_type [6, 20] - [6, 26])))
(property_signature [7, 2] - [7, 21]
name: (property_identifier [7, 2] - [7, 13])
type: (type_annotation [7, 14] - [7, 21]
(array_type [7, 16] - [7, 21]
(predefined_type [7, 16] - [7, 19]))))))))
body: (statement_block [8, 6] - [228, 1]
(lexical_declaration [9, 2] - [11, 4]
(variable_declarator [9, 8] - [11, 3]
name: (identifier [9, 8] - [9, 20])
value: (call_expression [9, 23] - [11, 3]
function: (member_expression [9, 23] - [9, 49]
object: (parenthesized_expression [9, 23] - [9, 42]
(binary_expression [9, 24] - [9, 41]
left: (identifier [9, 24] - [9, 35])
right: (array [9, 39] - [9, 41])))
property: (property_identifier [9, 43] - [9, 49]))
arguments: (arguments [9, 49] - [11, 3]
(arrow_function [10, 4] - [10, 73]
parameters: (formal_parameters [10, 4] - [10, 7]
(required_parameter [10, 5] - [10, 6]
pattern: (identifier [10, 5] - [10, 6])))
body: (binary_expression [10, 11] - [10, 73]
left: (unary_expression [10, 11] - [10, 24]
argument: (member_expression [10, 12] - [10, 24]
object: (identifier [10, 12] - [10, 13])
property: (property_identifier [10, 14] - [10, 24])))
right: (binary_expression [10, 28] - [10, 73]
left: (call_expression [10, 28] - [10, 60]
function: (member_expression [10, 28] - [10, 58]
object: (new_expression [10, 28] - [10, 50]
constructor: (identifier [10, 32] - [10, 36])
arguments: (arguments [10, 36] - [10, 50]
(member_expression [10, 37] - [10, 49]
object: (identifier [10, 37] - [10, 38])
property: (property_identifier [10, 39] - [10, 49]))))
property: (property_identifier [10, 51] - [10, 58]))
arguments: (arguments [10, 58] - [10, 60]))
right: (call_expression [10, 63] - [10, 73]
function: (member_expression [10, 63] - [10, 71]
object: (identifier [10, 63] - [10, 67])
property: (property_identifier [10, 68] - [10, 71]))
arguments: (arguments [10, 71] - [10, 73])))))))))
(lexical_declaration [12, 2] - [12, 66]
(variable_declarator [12, 8] - [12, 65]
name: (identifier [12, 8] - [12, 16])
value: (binary_expression [12, 19] - [12, 65]
left: (binary_expression [12, 19] - [12, 38]
left: (member_expression [12, 19] - [12, 34]
object: (identifier [12, 19] - [12, 27])
property: (property_identifier [12, 28] - [12, 34]))
right: (number [12, 37] - [12, 38]))
right: (binary_expression [12, 42] - [12, 65]
left: (member_expression [12, 42] - [12, 61]
object: (identifier [12, 42] - [12, 54])
property: (property_identifier [12, 55] - [12, 61]))
right: (number [12, 64] - [12, 65])))))
(return_statement [14, 2] - [227, 4]
(parenthesized_expression [14, 9] - [227, 3]
(jsx_element [15, 4] - [226, 10]
open_tag: (jsx_opening_element [15, 4] - [18, 5]
name: (identifier [15, 5] - [15, 8])
attribute: (jsx_attribute [16, 6] - [16, 25]
(property_identifier [16, 6] - [16, 11])
(string [16, 12] - [16, 25]
(string_fragment [16, 13] - [16, 24])))
attribute: (jsx_attribute [17, 6] - [17, 63]
(property_identifier [17, 6] - [17, 11])
(string [17, 12] - [17, 63]
(string_fragment [17, 13] - [17, 62]))))
(jsx_expression [19, 6] - [225, 10]
(ternary_expression [19, 7] - [225, 9]
condition: (unary_expression [19, 7] - [19, 16]
argument: (identifier [19, 8] - [19, 16]))
consequence: (parenthesized_expression [20, 10] - [26, 9]
(jsx_element [21, 10] - [25, 16]
open_tag: (jsx_opening_element [21, 10] - [21, 71]
name: (identifier [21, 11] - [21, 14])
attribute: (jsx_attribute [21, 15] - [21, 27]
(property_identifier [21, 15] - [21, 20])
(string [21, 21] - [21, 27]
(string_fragment [21, 22] - [21, 26])))
attribute: (jsx_attribute [21, 28] - [21, 70]
(property_identifier [21, 28] - [21, 33])
(string [21, 34] - [21, 70]
(string_fragment [21, 35] - [21, 69]))))
(jsx_element [22, 12] - [24, 16]
open_tag: (jsx_opening_element [22, 12] - [22, 60]
name: (identifier [22, 13] - [22, 14])
attribute: (jsx_attribute [22, 15] - [22, 59]
(property_identifier [22, 15] - [22, 20])
(string [22, 21] - [22, 59]
(string_fragment [22, 22] - [22, 58]))))
(jsx_text [22, 60] - [24, 12])
close_tag: (jsx_closing_element [24, 12] - [24, 16]
name: (identifier [24, 14] - [24, 15])))
close_tag: (jsx_closing_element [25, 10] - [25, 16]
name: (identifier [25, 12] - [25, 15]))))
alternative: (parenthesized_expression [27, 10] - [225, 9]
(jsx_element [28, 10] - [224, 13]
open_tag: (jsx_opening_element [28, 10] - [28, 12])
(jsx_expression [29, 12] - [29, 40]
(comment [29, 13] - [29, 39]))
(jsx_expression [30, 12] - [123, 15]
(call_expression [30, 13] - [123, 14]
function: (member_expression [30, 13] - [30, 29]
object: (identifier [30, 13] - [30, 25])
property: (property_identifier [30, 26] - [30, 29]))
arguments: (arguments [30, 29] - [123, 14]
(arrow_function [30, 30] - [123, 13]
parameters: (formal_parameters [30, 30] - [30, 37]
(required_parameter [30, 31] - [30, 36]
pattern: (identifier [30, 31] - [30, 36])))
body: (statement_block [30, 41] - [123, 13]
(lexical_declaration [31, 14] - [31, 63]
(variable_declarator [31, 20] - [31, 62]
name: (identifier [31, 20] - [31, 27])
value: (binary_expression [31, 30] - [31, 62]
left: (call_expression [31, 30] - [31, 57]
function: (identifier [31, 30] - [31, 36])
arguments: (arguments [31, 36] - [31, 57]
(member_expression [31, 37] - [31, 56]
object: (identifier [31, 37] - [31, 42])
property: (property_identifier [31, 43] - [31, 56]))))
right: (number [31, 61] - [31, 62]))))
(lexical_declaration [32, 14] - [32, 60]
(variable_declarator [32, 20] - [32, 59]
name: (identifier [32, 20] - [32, 28])
value: (binary_expression [32, 31] - [32, 59]
left: (call_expression [32, 31] - [32, 54]
function: (identifier [32, 31] - [32, 37])
arguments: (arguments [32, 37] - [32, 54]
(member_expression [32, 38] - [32, 53]
object: (identifier [32, 38] - [32, 43])
property: (property_identifier [32, 44] - [32, 53]))))
right: (number [32, 58] - [32, 59]))))
(lexical_declaration [33, 14] - [35, 35]
(variable_declarator [33, 20] - [35, 34]
name: (identifier [33, 20] - [33, 31])
value: (ternary_expression [33, 34] - [35, 34]
condition: (binary_expression [33, 34] - [33, 46]
left: (identifier [33, 34] - [33, 42])
right: (number [33, 45] - [33, 46]))
consequence: (template_string [34, 18] - [34, 42]
(template_substitution [34, 19] - [34, 29]
(identifier [34, 21] - [34, 28]))
(string_fragment [34, 29] - [34, 30])
(template_substitution [34, 30] - [34, 41]
(identifier [34, 32] - [34, 40])))
alternative: (template_string [35, 18] - [35, 34]
(template_substitution [35, 19] - [35, 29]
(identifier [35, 21] - [35, 28]))
(string_fragment [35, 29] - [35, 33])))))
(return_statement [37, 14] - [122, 16]
(parenthesized_expression [37, 21] - [122, 15]
(jsx_element [38, 16] - [121, 22]
open_tag: (jsx_opening_element [38, 16] - [42, 17]
name: (identifier [38, 17] - [38, 20])
attribute: (jsx_attribute [39, 18] - [39, 30]
(property_identifier [39, 18] - [39, 23])
(string [39, 24] - [39, 30]
(string_fragment [39, 25] - [39, 29])))
attribute: (jsx_attribute [40, 18] - [40, 43]
(property_identifier [40, 18] - [40, 21])
(jsx_expression [40, 22] - [40, 43]
(template_string [40, 23] - [40, 42]
(string_fragment [40, 24] - [40, 30])
(template_substitution [40, 30] - [40, 41]
(member_expression [40, 32] - [40, 40]
object: (identifier [40, 32] - [40, 37])
property: (property_identifier [40, 38] - [40, 40]))))))
attribute: (jsx_attribute [41, 18] - [41, 82]
(property_identifier [41, 18] - [41, 23])
(string [41, 24] - [41, 82]
(string_fragment [41, 25] - [41, 81]))))
(jsx_element [43, 18] - [70, 24]
open_tag: (jsx_opening_element [43, 18] - [43, 123]
name: (identifier [43, 19] - [43, 22])
attribute: (jsx_attribute [43, 23] - [43, 122]
(property_identifier [43, 23] - [43, 28])
(string [43, 29] - [43, 122]
(string_fragment [43, 30] - [43, 121]))))
(jsx_element [44, 20] - [56, 26]
open_tag: (jsx_opening_element [44, 20] - [44, 83]
name: (identifier [44, 21] - [44, 24])
attribute: (jsx_attribute [44, 25] - [44, 82]
(property_identifier [44, 25] - [44, 30])
(string [44, 31] - [44, 82]
(string_fragment [44, 32] - [44, 81]))))
(jsx_element [45, 22] - [47, 28]
open_tag: (jsx_opening_element [45, 22] - [45, 209]
name: (identifier [45, 23] - [45, 26])
attribute: (jsx_attribute [45, 27] - [45, 208]
(property_identifier [45, 27] - [45, 32])
(string [45, 33] - [45, 208]
(string_fragment [45, 34] - [45, 207]))))
(jsx_text [45, 209] - [47, 22])
close_tag: (jsx_closing_element [47, 22] - [47, 28]
name: (identifier [47, 24] - [47, 27])))
(jsx_element [48, 22] - [55, 28]
open_tag: (jsx_opening_element [48, 22] - [48, 27]
name: (identifier [48, 23] - [48, 26]))
(jsx_element [49, 24] - [51, 30]
open_tag: (jsx_opening_element [49, 24] - [49, 103]
name: (identifier [49, 25] - [49, 28])
attribute: (jsx_attribute [49, 29] - [49, 102]
(property_identifier [49, 29] - [49, 34])
(string [49, 35] - [49, 102]
(string_fragment [49, 36] - [49, 101]))))
(jsx_expression [50, 26] - [50, 38]
(member_expression [50, 27] - [50, 37]
object: (identifier [50, 27] - [50, 32])
property: (property_identifier [50, 33] - [50, 37])))
close_tag: (jsx_closing_element [51, 24] - [51, 30]
name: (identifier [51, 26] - [51, 29])))
(jsx_element [52, 24] - [54, 30]
open_tag: (jsx_opening_element [52, 24] - [52, 107]
name: (identifier [52, 25] - [52, 28])
attribute: (jsx_attribute [52, 29] - [52, 106]
(property_identifier [52, 29] - [52, 34])
(string [52, 35] - [52, 106]
(string_fragment [52, 36] - [52, 105]))))
(jsx_text [52, 107] - [53, 31])
(jsx_expression [53, 31] - [53, 56]
(binary_expression [53, 32] - [53, 55]
left: (member_expression [53, 32] - [53, 46]
object: (identifier [53, 32] - [53, 37])
property: (property_identifier [53, 38] - [53, 46]))
right: (string [53, 50] - [53, 55]
(string_fragment [53, 51] - [53, 54]))))
(jsx_text [53, 56] - [53, 60])
(jsx_expression [53, 60] - [53, 72]
(member_expression [53, 61] - [53, 71]
object: (identifier [53, 61] - [53, 66])
property: (property_identifier [53, 67] - [53, 71])))
close_tag: (jsx_closing_element [54, 24] - [54, 30]
name: (identifier [54, 26] - [54, 29])))
close_tag: (jsx_closing_element [55, 22] - [55, 28]
name: (identifier [55, 24] - [55, 27])))
close_tag: (jsx_closing_element [56, 20] - [56, 26]
name: (identifier [56, 22] - [56, 25])))
(jsx_element [58, 20] - [69, 26]
open_tag: (jsx_opening_element [58, 20] - [58, 82]
name: (identifier [58, 21] - [58, 24])
attribute: (jsx_attribute [58, 25] - [58, 81]
(property_identifier [58, 25] - [58, 30])
(string [58, 31] - [58, 81]
(string_fragment [58, 32] - [58, 80]))))
(jsx_element [59, 22] - [59, 65]
open_tag: (jsx_opening_element [59, 22] - [59, 53]
name: (identifier [59, 23] - [59, 27])
attribute: (jsx_attribute [59, 28] - [59, 52]
(property_identifier [59, 28] - [59, 33])
(string [59, 34] - [59, 52]
(string_fragment [59, 35] - [59, 51]))))
(jsx_text [59, 53] - [59, 58])
close_tag: (jsx_closing_element [59, 58] - [59, 65]
name: (identifier [59, 60] - [59, 64])))
(jsx_element [60, 22] - [68, 31]
open_tag: (jsx_opening_element [60, 22] - [66, 23]
name: (identifier [60, 23] - [60, 29])
attribute: (jsx_attribute [61, 24] - [61, 37]
(property_identifier [61, 24] - [61, 28])
(string [61, 29] - [61, 37]
(string_fragment [61, 30] - [61, 36])))
attribute: (jsx_attribute [62, 24] - [62, 56]
(property_identifier [62, 24] - [62, 29])
(string [62, 30] - [62, 56]
(string_fragment [62, 31] - [62, 55])))
attribute: (jsx_attribute [63, 24] - [63, 48]
(property_identifier [63, 24] - [63, 37])
(jsx_expression [63, 38] - [63, 48]
(member_expression [63, 39] - [63, 47]
object: (identifier [63, 39] - [63, 44])
property: (property_identifier [63, 45] - [63, 47]))))
attribute: (jsx_attribute [64, 24] - [64, 52]
(property_identifier [64, 24] - [64, 39])
(jsx_expression [64, 40] - [64, 52]
(member_expression [64, 41] - [64, 51]
object: (identifier [64, 41] - [64, 46])
property: (property_identifier [64, 47] - [64, 51]))))
attribute: (jsx_attribute [65, 24] - [65, 127]
(property_identifier [65, 24] - [65, 29])
(string [65, 30] - [65, 127]
(string_fragment [65, 31] - [65, 126]))))
(jsx_text [66, 23] - [68, 22])
close_tag: (jsx_closing_element [68, 22] - [68, 31]
name: (identifier [68, 24] - [68, 30])))
close_tag: (jsx_closing_element [69, 20] - [69, 26]
name: (identifier [69, 22] - [69, 25])))
close_tag: (jsx_closing_element [70, 18] - [70, 24]
name: (identifier [70, 20] - [70, 23])))
(jsx_element [72, 18] - [91, 24]
open_tag: (jsx_opening_element [72, 18] - [72, 119]
name: (identifier [72, 19] - [72, 22])
attribute: (jsx_attribute [72, 23] - [72, 118]
(property_identifier [72, 23] - [72, 28])
(string [72, 29] - [72, 118]
(string_fragment [72, 30] - [72, 117]))))
(jsx_element [73, 20] - [78, 26]
open_tag: (jsx_opening_element [73, 20] - [73, 57]
name: (identifier [73, 21] - [73, 24])
attribute: (jsx_attribute [73, 25] - [73, 56]
(property_identifier [73, 25] - [73, 30])
(string [73, 31] - [73, 56]
(string_fragment [73, 32] - [73, 55]))))
(jsx_element [74, 22] - [74, 53]
open_tag: (jsx_opening_element [74, 22] - [74, 30]
name: (identifier [74, 23] - [74, 29]))
(jsx_text [74, 30] - [74, 36])
(ERROR [74, 36] - [74, 44]
(identifier [74, 38] - [74, 43]))
close_tag: (jsx_closing_element [74, 44] - [74, 53]
name: (identifier [74, 46] - [74, 52])))
(jsx_text [74, 53] - [74, 54])
(jsx_expression [74, 54] - [76, 55]
(ternary_expression [74, 55] - [76, 54]
condition: (member_expression [74, 55] - [74, 69]
object: (identifier [74, 55] - [74, 60])
property: (property_identifier [74, 61] - [74, 69]))
consequence: (template_string [75, 26] - [75, 73]
(template_substitution [75, 27] - [75, 44]
(member_expression [75, 29] - [75, 43]
object: (identifier [75, 29] - [75, 34])
property: (property_identifier [75, 35] - [75, 43])))
(string_fragment [75, 44] - [75, 46])
(template_substitution [75, 46] - [75, 71]
(binary_expression [75, 48] - [75, 70]
left: (member_expression [75, 48] - [75, 58]
object: (identifier [75, 48] - [75, 53])
property: (property_identifier [75, 54] - [75, 58]))
right: (string [75, 62] - [75, 70]
(string_fragment [75, 63] - [75, 69]))))
(string_fragment [75, 71] - [75, 72]))
alternative: (parenthesized_expression [76, 26] - [76, 54]
(binary_expression [76, 27] - [76, 53]
left: (member_expression [76, 27] - [76, 37]
object: (identifier [76, 27] - [76, 32])
property: (property_identifier [76, 33] - [76, 37]))
right: (string [76, 41] - [76, 53]
(string_fragment [76, 42] - [76, 52]))))))
(jsx_text [76, 55] - [76, 58])
(jsx_expression [76, 58] - [76, 63]
(string [76, 59] - [76, 62]
(string_fragment [76, 60] - [76, 61])))
(jsx_element [77, 22] - [77, 60]
open_tag: (jsx_opening_element [77, 22] - [77, 30]
name: (identifier [77, 23] - [77, 29]))
(jsx_expression [77, 30] - [77, 43]
(identifier [77, 31] - [77, 42]))
(jsx_text [77, 43] - [77, 51])
close_tag: (jsx_closing_element [77, 51] - [77, 60]
name: (identifier [77, 53] - [77, 59])))
close_tag: (jsx_closing_element [78, 20] - [78, 26]
name: (identifier [78, 22] - [78, 25])))
(jsx_element [79, 20] - [90, 26]
open_tag: (jsx_opening_element [79, 20] - [79, 25]
name: (identifier [79, 21] - [79, 24]))
(jsx_element [80, 22] - [89, 29]
open_tag: (jsx_opening_element [80, 22] - [83, 23]
name: (identifier [80, 23] - [80, 27])
attribute: (jsx_attribute [81, 24] - [81, 46]
(property_identifier [81, 24] - [81, 29])
(string [81, 30] - [81, 46]
(string_fragment [81, 31] - [81, 45])))
attribute: (jsx_attribute [82, 24] - [82, 58]
(property_identifier [82, 24] - [82, 39])
(jsx_expression [82, 40] - [82, 58]
(member_expression [82, 41] - [82, 57]
object: (identifier [82, 41] - [82, 46])
property: (property_identifier [82, 47] - [82, 57])))))
(jsx_text [83, 23] - [84, 50])
(jsx_expression [84, 50] - [84, 55]
(string [84, 51] - [84, 54]
(string_fragment [84, 52] - [84, 53])))
(jsx_expression [85, 24] - [88, 27]
(call_expression [85, 25] - [88, 26]
function: (member_expression [85, 25] - [85, 70]
object: (new_expression [85, 25] - [85, 51]
constructor: (identifier [85, 29] - [85, 33])
arguments: (arguments [85, 33] - [85, 51]
(member_expression [85, 34] - [85, 50]
object: (identifier [85, 34] - [85, 39])
property: (property_identifier [85, 40] - [85, 50]))))
property: (property_identifier [85, 52] - [85, 70]))
arguments: (arguments [85, 70] - [88, 26]
(array [85, 71] - [85, 73])
(object [85, 75] - [88, 25]
(pair [86, 26] - [86, 41]
key: (property_identifier [86, 26] - [86, 30])
value: (string [86, 32] - [86, 41]
(string_fragment [86, 33] - [86, 40])))
(pair [87, 26] - [87, 43]
key: (property_identifier [87, 26] - [87, 32])
value: (string [87, 34] - [87, 43]
(string_fragment [87, 35] - [87, 42])))))))
(jsx_text [88, 27] - [89, 22])
close_tag: (jsx_closing_element [89, 22] - [89, 29]
name: (identifier [89, 24] - [89, 28])))
close_tag: (jsx_closing_element [90, 20] - [90, 26]
name: (identifier [90, 22] - [90, 25])))
close_tag: (jsx_closing_element [91, 18] - [91, 24]
name: (identifier [91, 20] - [91, 23])))
(jsx_element [93, 18] - [120, 24]
open_tag: (jsx_opening_element [93, 18] - [93, 76]
name: (identifier [93, 19] - [93, 22])
attribute: (jsx_attribute [93, 23] - [93, 75]
(property_identifier [93, 23] - [93, 28])
(string [93, 29] - [93, 75]
(string_fragment [93, 30] - [93, 74]))))
(jsx_element [94, 20] - [103, 29]
open_tag: (jsx_opening_element [94, 20] - [101, 21]
name: (identifier [94, 21] - [94, 27])
attribute: (jsx_attribute [95, 22] - [95, 35]
(property_identifier [95, 22] - [95, 26])
(string [95, 27] - [95, 35]
(string_fragment [95, 28] - [95, 34])))
attribute: (jsx_attribute [96, 22] - [96, 41]
(property_identifier [96, 22] - [96, 27])
(string [96, 28] - [96, 41]
(string_fragment [96, 29] - [96, 40])))
attribute: (jsx_attribute [97, 22] - [97, 100]
(property_identifier [97, 22] - [97, 27])
(string [97, 28] - [97, 100]
(string_fragment [97, 29] - [97, 99])))
attribute: (jsx_attribute [98, 22] - [100, 27]
(property_identifier [98, 22] - [98, 29])
(jsx_expression [98, 30] - [100, 27]
(template_string [98, 31] - [100, 26]
(string_fragment [98, 32] - [98, 53])
(template_substitution [98, 53] - [98, 64]
(member_expression [98, 55] - [98, 63]
object: (identifier [98, 55] - [98, 60])
property: (property_identifier [98, 61] - [98, 63])))
(string_fragment [98, 64] - [98, 68])
(template_substitution [98, 68] - [100, 23]
(call_expression [99, 24] - [99, 54]
function: (identifier [99, 24] - [99, 42])
arguments: (arguments [99, 42] - [99, 54]
(member_expression [99, 43] - [99, 53]
object: (identifier [99, 43] - [99, 48])
property: (property_identifier [99, 49] - [99, 53])))))
(string_fragment [100, 23] - [100, 25])))))
(jsx_text [101, 21] - [102, 35])
(jsx_expression [102, 35] - [102, 44]
(identifier [102, 36] - [102, 43]))
(jsx_text [102, 44] - [103, 20])
close_tag: (jsx_closing_element [103, 20] - [103, 29]
name: (identifier [103, 22] - [103, 28])))
(jsx_element [104, 20] - [111, 29]
open_tag: (jsx_opening_element [104, 20] - [109, 21]
name: (identifier [104, 21] - [104, 27])
attribute: (jsx_attribute [105, 22] - [105, 35]
(property_identifier [105, 22] - [105, 26])
(string [105, 27] - [105, 35]
(string_fragment [105, 28] - [105, 34])))
attribute: (jsx_attribute [106, 22] - [106, 41]
(property_identifier [106, 22] - [106, 27])
(string [106, 28] - [106, 41]
(string_fragment [106, 29] - [106, 40])))
attribute: (jsx_attribute [107, 22] - [107, 100]
(property_identifier [107, 22] - [107, 27])
(string [107, 28] - [107, 100]
(string_fragment [107, 29] - [107, 99])))
attribute: (jsx_attribute [108, 22] - [108, 58]
(property_identifier [108, 22] - [108, 29])
(jsx_expression [108, 30] - [108, 58]
(template_string [108, 31] - [108, 57]
(string_fragment [108, 32] - [108, 43])
(template_substitution [108, 43] - [108, 54]
(member_expression [108, 45] - [108, 53]
object: (identifier [108, 45] - [108, 50])
property: (property_identifier [108, 51] - [108, 53])))
(string_fragment [108, 54] - [108, 56])))))
(jsx_text [109, 21] - [111, 20])
close_tag: (jsx_closing_element [111, 20] - [111, 29]
name: (identifier [111, 22] - [111, 28])))
(jsx_element [112, 20] - [119, 29]
open_tag: (jsx_opening_element [112, 20] - [117, 21]
name: (identifier [112, 21] - [112, 27])
attribute: (jsx_attribute [113, 22] - [113, 35]
(property_identifier [113, 22] - [113, 26])
(string [113, 27] - [113, 35]
(string_fragment [113, 28] - [113, 34])))
attribute: (jsx_attribute [114, 22] - [114, 58]
(property_identifier [114, 22] - [114, 27])
(string [114, 28] - [114, 58]
(string_fragment [114, 29] - [114, 57])))
attribute: (jsx_attribute [115, 22] - [115, 46]
(property_identifier [115, 22] - [115, 35])
(jsx_expression [115, 36] - [115, 46]
(member_expression [115, 37] - [115, 45]
object: (identifier [115, 37] - [115, 42])
property: (property_identifier [115, 43] - [115, 45]))))
attribute: (jsx_attribute [116, 22] - [116, 100]
(property_identifier [116, 22] - [116, 27])
(string [116, 28] - [116, 100]
(string_fragment [116, 29] - [116, 99]))))
(jsx_text [117, 21] - [119, 20])
close_tag: (jsx_closing_element [119, 20] - [119, 29]
name: (identifier [119, 22] - [119, 28])))
close_tag: (jsx_closing_element [120, 18] - [120, 24]
name: (identifier [120, 20] - [120, 23])))
close_tag: (jsx_closing_element [121, 16] - [121, 22]
name: (identifier [121, 18] - [121, 21]))))))))))
(jsx_expression [125, 12] - [125, 65]
(comment [125, 13] - [125, 64]))
(jsx_expression [126, 12] - [223, 15]
(call_expression [126, 13] - [223, 14]
function: (member_expression [126, 13] - [126, 25]
object: (identifier [126, 13] - [126, 21])
property: (property_identifier [126, 22] - [126, 25]))
arguments: (arguments [126, 25] - [223, 14]
(arrow_function [126, 26] - [223, 13]
parameters: (formal_parameters [126, 26] - [126, 35]
(required_parameter [126, 27] - [126, 34]
pattern: (identifier [126, 27] - [126, 34])))
body: (statement_block [126, 39] - [223, 13]
(lexical_declaration [127, 14] - [127, 64]
(variable_declarator [127, 20] - [127, 63]
name: (identifier [127, 20] - [127, 29])
value: (binary_expression [127, 32] - [127, 63]
left: (member_expression [127, 32] - [127, 42]
object: (identifier [127, 32] - [127, 39])
property: (property_identifier [127, 40] - [127, 42]))
right: (identifier [127, 47] - [127, 63]))))
(lexical_declaration [128, 14] - [128, 49]
(variable_declarator [128, 20] - [128, 48]
name: (identifier [128, 20] - [128, 27])
value: (unary_expression [128, 30] - [128, 48]
argument: (unary_expression [128, 31] - [128, 48]
argument: (member_expression [128, 32] - [128, 48]
object: (identifier [128, 32] - [128, 39])
property: (property_identifier [128, 40] - [128, 48]))))))
(lexical_declaration [129, 14] - [131, 21]
(variable_declarator [129, 20] - [131, 20]
name: (identifier [129, 20] - [129, 26])
value: (ternary_expression [129, 29] - [131, 20]
condition: (call_expression [129, 29] - [129, 65]
function: (member_expression [129, 29] - [129, 42]
object: (identifier [129, 29] - [129, 34])
property: (property_identifier [129, 35] - [129, 42]))
arguments: (arguments [129, 42] - [129, 65]
(member_expression [129, 43] - [129, 64]
object: (identifier [129, 43] - [129, 50])
property: (property_identifier [129, 51] - [129, 64]))))
consequence: (member_expression [130, 18] - [130, 39]
object: (identifier [130, 18] - [130, 25])
property: (property_identifier [130, 26] - [130, 39]))
alternative: (array [131, 18] - [131, 20]))))
(return_statement [133, 14] - [222, 16]
(parenthesized_expression [133, 21] - [222, 15]
(jsx_element [134, 16] - [221, 22]
open_tag: (jsx_opening_element [134, 16] - [134, 77]
name: (identifier [134, 17] - [134, 20])
attribute: (jsx_attribute [134, 21] - [134, 33]
(property_identifier [134, 21] - [134, 26])
(string [134, 27] - [134, 33]
(string_fragment [134, 28] - [134, 32])))
attribute: (jsx_attribute [134, 34] - [134, 50]
(property_identifier [134, 34] - [134, 37])
(jsx_expression [134, 38] - [134, 50]
(member_expression [134, 39] - [134, 49]
object: (identifier [134, 39] - [134, 46])
property: (property_identifier [134, 47] - [134, 49]))))
attribute: (jsx_attribute [134, 51] - [134, 76]
(property_identifier [134, 51] - [134, 56])
(string [134, 57] - [134, 76]
(string_fragment [134, 58] - [134, 75]))))
(jsx_element [135, 18] - [168, 24]
open_tag: (jsx_opening_element [135, 18] - [135, 123]
name: (identifier [135, 19] - [135, 22])
attribute: (jsx_attribute [135, 23] - [135, 122]
(property_identifier [135, 23] - [135, 28])
(string [135, 29] - [135, 122]
(string_fragment [135, 30] - [135, 121]))))
(jsx_element [136, 20] - [149, 26]
open_tag: (jsx_opening_element [136, 20] - [136, 83]
name: (identifier [136, 21] - [136, 24])
attribute: (jsx_attribute [136, 25] - [136, 82]
(property_identifier [136, 25] - [136, 30])
(string [136, 31] - [136, 82]
(string_fragment [136, 32] - [136, 81]))))
(jsx_element [137, 22] - [139, 28]
open_tag: (jsx_opening_element [137, 22] - [137, 209]
name: (identifier [137, 23] - [137, 26])
attribute: (jsx_attribute [137, 27] - [137, 208]
(property_identifier [137, 27] - [137, 32])
(string [137, 33] - [137, 208]
(string_fragment [137, 34] - [137, 207]))))
(jsx_expression [138, 24] - [138, 72]
(ternary_expression [138, 25] - [138, 71]
condition: (identifier [138, 25] - [138, 32])
consequence: (string [138, 35] - [138, 41]
(string_fragment [138, 36] - [138, 40]))
alternative: (ternary_expression [138, 44] - [138, 71]
condition: (identifier [138, 44] - [138, 53])
consequence: (string [138, 56] - [138, 62]
(string_fragment [138, 57] - [138, 61]))
alternative: (string [138, 65] - [138, 71]
(string_fragment [138, 66] - [138, 70])))))
close_tag: (jsx_closing_element [139, 22] - [139, 28]
name: (identifier [139, 24] - [139, 27])))
(jsx_element [140, 22] - [148, 28]
open_tag: (jsx_opening_element [140, 22] - [140, 27]
name: (identifier [140, 23] - [140, 26]))
(jsx_element [141, 24] - [144, 30]
open_tag: (jsx_opening_element [141, 24] - [141, 103]
name: (identifier [141, 25] - [141, 28])
attribute: (jsx_attribute [141, 29] - [141, 102]
(property_identifier [141, 29] - [141, 34])
(string [141, 35] - [141, 102]
(string_fragment [141, 36] - [141, 101]))))
(jsx_expression [142, 26] - [143, 74]
(binary_expression [142, 27] - [143, 73]
left: (member_expression [142, 27] - [142, 40]
object: (identifier [142, 27] - [142, 34])
property: (property_identifier [142, 35] - [142, 40]))
right: (parenthesized_expression [143, 28] - [143, 73]
(ternary_expression [143, 29] - [143, 72]
condition: (identifier [143, 29] - [143, 38])
consequence: (string [143, 41] - [143, 54]
(string_fragment [143, 42] - [143, 53]))
alternative: (string [143, 57] - [143, 72]
(string_fragment [143, 58] - [143, 71]))))))
close_tag: (jsx_closing_element [144, 24] - [144, 30]
name: (identifier [144, 26] - [144, 29])))
(jsx_element [145, 24] - [147, 30]
open_tag: (jsx_opening_element [145, 24] - [145, 107]
name: (identifier [145, 25] - [145, 28])
attribute: (jsx_attribute [145, 29] - [145, 106]
(property_identifier [145, 29] - [145, 34])
(string [145, 35] - [145, 106]
(string_fragment [145, 36] - [145, 105]))))
(jsx_expression [146, 26] - [146, 55]
(call_expression [146, 27] - [146, 54]
function: (member_expression [146, 27] - [146, 47]
object: (member_expression [146, 27] - [146, 37]
object: (identifier [146, 27] - [146, 34])
property: (property_identifier [146, 35] - [146, 37]))
property: (property_identifier [146, 38] - [146, 47]))
arguments: (arguments [146, 47] - [146, 54]
(number [146, 48] - [146, 49])
(number [146, 51] - [146, 53]))))
(jsx_text [146, 55] - [147, 24])
close_tag: (jsx_closing_element [147, 24] - [147, 30]
name: (identifier [147, 26] - [147, 29])))
close_tag: (jsx_closing_element [148, 22] - [148, 28]
name: (identifier [148, 24] - [148, 27])))
close_tag: (jsx_closing_element [149, 20] - [149, 26]
name: (identifier [149, 22] - [149, 25])))
(jsx_element [151, 20] - [167, 26]
open_tag: (jsx_opening_element [151, 20] - [151, 82]
name: (identifier [151, 21] - [151, 24])
attribute: (jsx_attribute [151, 25] - [151, 81]
(property_identifier [151, 25] - [151, 30])
(string [151, 31] - [151, 81]
(string_fragment [151, 32] - [151, 80]))))
(jsx_expression [152, 22] - [156, 76]
(ternary_expression [152, 23] - [156, 75]
condition: (identifier [152, 23] - [152, 30])
consequence: (jsx_element [153, 26] - [153, 73]
open_tag: (jsx_opening_element [153, 26] - [153, 57]
name: (identifier [153, 27] - [153, 31])
attribute: (jsx_attribute [153, 32] - [153, 56]
(property_identifier [153, 32] - [153, 37])
(string [153, 38] - [153, 56]
(string_fragment [153, 39] - [153, 55]))))
(jsx_text [153, 57] - [153, 66])
close_tag: (jsx_closing_element [153, 66] - [153, 73]
name: (identifier [153, 68] - [153, 72])))
alternative: (ternary_expression [154, 26] - [156, 75]
condition: (identifier [154, 26] - [154, 35])
consequence: (jsx_element [155, 26] - [155, 77]
open_tag: (jsx_opening_element [155, 26] - [155, 60]
name: (identifier [155, 27] - [155, 31])
attribute: (jsx_attribute [155, 32] - [155, 59]
(property_identifier [155, 32] - [155, 37])
(string [155, 38] - [155, 59]
(string_fragment [155, 39] - [155, 58]))))
(jsx_text [155, 60] - [155, 70])
close_tag: (jsx_closing_element [155, 70] - [155, 77]
name: (identifier [155, 72] - [155, 76])))
alternative: (jsx_element [156, 26] - [156, 75]
open_tag: (jsx_opening_element [156, 26] - [156, 62]
name: (identifier [156, 27] - [156, 31])
attribute: (jsx_attribute [156, 32] - [156, 61]
(property_identifier [156, 32] - [156, 37])
(string [156, 38] - [156, 61]
(string_fragment [156, 39] - [156, 60]))))
(jsx_text [156, 62] - [156, 68])
close_tag: (jsx_closing_element [156, 68] - [156, 75]
name: (identifier [156, 70] - [156, 74]))))))
(jsx_expression [157, 22] - [166, 24]
(binary_expression [157, 23] - [166, 23]
left: (unary_expression [157, 23] - [157, 33]
argument: (identifier [157, 24] - [157, 33]))
right: (parenthesized_expression [157, 37] - [166, 23]
(jsx_element [158, 24] - [165, 33]
open_tag: (jsx_opening_element [158, 24] - [163, 25]
name: (identifier [158, 25] - [158, 31])
attribute: (jsx_attribute [159, 26] - [159, 39]
(property_identifier [159, 26] - [159, 30])
(string [159, 31] - [159, 39]
(string_fragment [159, 32] - [159, 38])))
attribute: (jsx_attribute [160, 26] - [160, 55]
(property_identifier [160, 26] - [160, 31])
(string [160, 32] - [160, 55]
(string_fragment [160, 33] - [160, 54])))
attribute: (jsx_attribute [161, 26] - [161, 54]
(property_identifier [161, 26] - [161, 41])
(jsx_expression [161, 42] - [161, 54]
(member_expression [161, 43] - [161, 53]
object: (identifier [161, 43] - [161, 50])
property: (property_identifier [161, 51] - [161, 53]))))
attribute: (jsx_attribute [162, 26] - [162, 129]
(property_identifier [162, 26] - [162, 31])
(string [162, 32] - [162, 129]
(string_fragment [162, 33] - [162, 128]))))
(jsx_text [163, 25] - [165, 24])
close_tag: (jsx_closing_element [165, 24] - [165, 33]
name: (identifier [165, 26] - [165, 32]))))))
close_tag: (jsx_closing_element [167, 20] - [167, 26]
name: (identifier [167, 22] - [167, 25])))
close_tag: (jsx_closing_element [168, 18] - [168, 24]
name: (identifier [168, 20] - [168, 23])))
(jsx_element [170, 18] - [197, 24]
open_tag: (jsx_opening_element [170, 18] - [170, 119]
name: (identifier [170, 19] - [170, 22])
attribute: (jsx_attribute [170, 23] - [170, 118]
(property_identifier [170, 23] - [170, 28])
(string [170, 29] - [170, 118]
(string_fragment [170, 30] - [170, 117]))))
(jsx_expression [171, 20] - [176, 22]
(binary_expression [171, 21] - [176, 21]
left: (identifier [171, 21] - [171, 28])
right: (parenthesized_expression [171, 32] - [176, 21]
(jsx_element [172, 22] - [175, 28]
open_tag: (jsx_opening_element [172, 22] - [172, 59]
name: (identifier [172, 23] - [172, 26])
attribute: (jsx_attribute [172, 27] - [172, 58]
(property_identifier [172, 27] - [172, 32])
(string [172, 33] - [172, 58]
(string_fragment [172, 34] - [172, 57]))))
(jsx_element [173, 24] - [173, 48]
open_tag: (jsx_opening_element [173, 24] - [173, 32]
name: (identifier [173, 25] - [173, 31]))
(jsx_text [173, 32] - [173, 39])
close_tag: (jsx_closing_element [173, 39] - [173, 48]
name: (identifier [173, 41] - [173, 47])))
(jsx_expression [173, 48] - [173, 53]
(string [173, 49] - [173, 52]
(string_fragment [173, 50] - [173, 51])))
(jsx_expression [174, 24] - [174, 77]
(ternary_expression [174, 25] - [174, 76]
condition: (binary_expression [174, 25] - [174, 42]
left: (member_expression [174, 25] - [174, 38]
object: (identifier [174, 25] - [174, 31])
property: (property_identifier [174, 32] - [174, 38]))
right: (number [174, 41] - [174, 42]))
consequence: (call_expression [174, 45] - [174, 62]
function: (member_expression [174, 45] - [174, 56]
object: (identifier [174, 45] - [174, 51])
property: (property_identifier [174, 52] - [174, 56]))
arguments: (arguments [174, 56] - [174, 62]
(string [174, 57] - [174, 61]
(string_fragment [174, 58] - [174, 60]))))
alternative: (string [174, 65] - [174, 76]
(string_fragment [174, 66] - [174, 75]))))
close_tag: (jsx_closing_element [175, 22] - [175, 28]
name: (identifier [175, 24] - [175, 27]))))))
(jsx_element [177, 20] - [188, 26]
open_tag: (jsx_opening_element [177, 20] - [177, 25]
name: (identifier [177, 21] - [177, 24]))
(jsx_element [178, 22] - [187, 29]
open_tag: (jsx_opening_element [178, 22] - [181, 23]
name: (identifier [178, 23] - [178, 27])
attribute: (jsx_attribute [179, 24] - [179, 46]
(property_identifier [179, 24] - [179, 29])
(string [179, 30] - [179, 46]
(string_fragment [179, 31] - [179, 45])))
attribute: (jsx_attribute [180, 24] - [180, 60]
(property_identifier [180, 24] - [180, 39])
(jsx_expression [180, 40] - [180, 60]
(member_expression [180, 41] - [180, 59]
object: (identifier [180, 41] - [180, 48])
property: (property_identifier [180, 49] - [180, 59])))))
(jsx_text [181, 23] - [182, 50])
(jsx_expression [182, 50] - [182, 55]
(string [182, 51] - [182, 54]
(string_fragment [182, 52] - [182, 53])))
(jsx_expression [183, 24] - [186, 27]
(call_expression [183, 25] - [186, 26]
function: (member_expression [183, 25] - [183, 72]
object: (new_expression [183, 25] - [183, 53]
constructor: (identifier [183, 29] - [183, 33])
arguments: (arguments [183, 33] - [183, 53]
(member_expression [183, 34] - [183, 52]
object: (identifier [183, 34] - [183, 41])
property: (property_identifier [183, 42] - [183, 52]))))
property: (property_identifier [183, 54] - [183, 72]))
arguments: (arguments [183, 72] - [186, 26]
(array [183, 73] - [183, 75])
(object [183, 77] - [186, 25]
(pair [184, 26] - [184, 41]
key: (property_identifier [184, 26] - [184, 30])
value: (string [184, 32] - [184, 41]
(string_fragment [184, 33] - [184, 40])))
(pair [185, 26] - [185, 43]
key: (property_identifier [185, 26] - [185, 32])
value: (string [185, 34] - [185, 43]
(string_fragment [185, 35] - [185, 42])))))))
(jsx_text [186, 27] - [187, 22])
close_tag: (jsx_closing_element [187, 22] - [187, 29]
name: (identifier [187, 24] - [187, 28])))
close_tag: (jsx_closing_element [188, 20] - [188, 26]
name: (identifier [188, 22] - [188, 25])))
(jsx_expression [189, 20] - [196, 22]
(binary_expression [189, 21] - [196, 21]
left: (member_expression [189, 21] - [189, 49]
object: (identifier [189, 21] - [189, 28])
property: (property_identifier [189, 29] - [189, 49]))
right: (parenthesized_expression [189, 53] - [196, 21]
(jsx_element [190, 22] - [195, 28]
open_tag: (jsx_opening_element [190, 22] - [190, 27]
name: (identifier [190, 23] - [190, 26]))
(jsx_element [191, 24] - [191, 53]
open_tag: (jsx_opening_element [191, 24] - [191, 32]
name: (identifier [191, 25] - [191, 31]))
(jsx_text [191, 32] - [191, 44])
close_tag: (jsx_closing_element [191, 44] - [191, 53]
name: (identifier [191, 46] - [191, 52])))
(jsx_expression [191, 53] - [191, 58]
(string [191, 54] - [191, 57]
(string_fragment [191, 55] - [191, 56])))
(jsx_expression [192, 24] - [192, 54]
(member_expression [192, 25] - [192, 53]
object: (identifier [192, 25] - [192, 32])
property: (property_identifier [192, 33] - [192, 53])))
(jsx_text [192, 54] - [192, 56])
(jsx_expression [192, 56] - [194, 47]
(call_expression [192, 57] - [194, 46]
function: (member_expression [192, 57] - [194, 44]
object: (new_expression [192, 57] - [194, 25]
constructor: (identifier [192, 61] - [192, 65])
arguments: (arguments [192, 65] - [194, 25]
(binary_expression [193, 26] - [193, 72]
left: (member_expression [193, 26] - [193, 50]
object: (identifier [193, 26] - [193, 33])
property: (property_identifier [193, 34] - [193, 50]))
right: (member_expression [193, 54] - [193, 72]
object: (identifier [193, 54] - [193, 61])
property: (property_identifier [193, 62] - [193, 72])))))
property: (property_identifier [194, 26] - [194, 44]))
arguments: (arguments [194, 44] - [194, 46])))
(jsx_text [194, 47] - [195, 22])
close_tag: (jsx_closing_element [195, 22] - [195, 28]
name: (identifier [195, 24] - [195, 27]))))))
close_tag: (jsx_closing_element [197, 18] - [197, 24]
name: (identifier [197, 20] - [197, 23])))
(jsx_expression [199, 18] - [220, 20]
(binary_expression [199, 19] - [220, 19]
left: (identifier [199, 19] - [199, 26])
right: (parenthesized_expression [199, 30] - [220, 19]
(jsx_element [200, 20] - [219, 26]
open_tag: (jsx_opening_element [200, 20] - [200, 61]
name: (identifier [200, 21] - [200, 24])
attribute: (jsx_attribute [200, 25] - [200, 60]
(property_identifier [200, 25] - [200, 30])
(string [200, 31] - [200, 60]
(string_fragment [200, 32] - [200, 59]))))
(jsx_element [201, 22] - [208, 31]
open_tag: (jsx_opening_element [201, 22] - [206, 23]
name: (identifier [201, 23] - [201, 29])
attribute: (jsx_attribute [202, 24] - [202, 37]
(property_identifier [202, 24] - [202, 28])
(string [202, 29] - [202, 37]
(string_fragment [202, 30] - [202, 36])))
attribute: (jsx_attribute [203, 24] - [203, 43]
(property_identifier [203, 24] - [203, 29])
(string [203, 30] - [203, 43]
(string_fragment [203, 31] - [203, 42])))
attribute: (jsx_attribute [204, 24] - [204, 102]
(property_identifier [204, 24] - [204, 29])
(string [204, 30] - [204, 102]
(string_fragment [204, 31] - [204, 101])))
attribute: (jsx_attribute [205, 24] - [205, 69]
(property_identifier [205, 24] - [205, 31])
(jsx_expression [205, 32] - [205, 69]
(template_string [205, 33] - [205, 68]
(string_fragment [205, 34] - [205, 49])
(template_substitution [205, 49] - [205, 62]
(member_expression [205, 51] - [205, 61]
object: (identifier [205, 51] - [205, 58])
property: (property_identifier [205, 59] - [205, 61])))
(string_fragment [205, 62] - [205, 67])))))
(jsx_text [206, 23] - [208, 22])
close_tag: (jsx_closing_element [208, 22] - [208, 31]
name: (identifier [208, 24] - [208, 30])))
(jsx_element [209, 22] - [218, 31]
open_tag: (jsx_opening_element [209, 22] - [216, 23]
name: (identifier [209, 23] - [209, 29])
attribute: (jsx_attribute [210, 24] - [210, 37]
(property_identifier [210, 24] - [210, 28])
(string [210, 29] - [210, 37]
(string_fragment [210, 30] - [210, 36])))
attribute: (jsx_attribute [211, 24] - [211, 43]
(property_identifier [211, 24] - [211, 29])
(string [211, 30] - [211, 43]
(string_fragment [211, 31] - [211, 42])))
attribute: (jsx_attribute [212, 24] - [212, 102]
(property_identifier [212, 24] - [212, 29])
(string [212, 30] - [212, 102]
(string_fragment [212, 31] - [212, 101])))
attribute: (jsx_attribute [213, 24] - [215, 72]
(property_identifier [213, 24] - [213, 31])
(jsx_expression [213, 32] - [215, 72]
(template_string [213, 33] - [215, 71]
(string_fragment [213, 34] - [213, 55])
(template_substitution [213, 55] - [213, 68]
(member_expression [213, 57] - [213, 67]
object: (identifier [213, 57] - [213, 64])
property: (property_identifier [213, 65] - [213, 67])))
(string_fragment [213, 68] - [213, 72])
(template_substitution [213, 72] - [215, 25]
(binary_expression [214, 26] - [214, 54]
left: (member_expression [214, 26] - [214, 39]
object: (identifier [214, 26] - [214, 33])
property: (property_identifier [214, 34] - [214, 39]))
right: (string [214, 43] - [214, 54]
(string_fragment [214, 44] - [214, 53]))))
(string_fragment [215, 25] - [215, 28])
(template_substitution [215, 28] - [215, 69]
(call_expression [215, 30] - [215, 68]
function: (member_expression [215, 30] - [215, 44]
object: (identifier [215, 30] - [215, 34])
property: (property_identifier [215, 35] - [215, 44]))
arguments: (arguments [215, 44] - [215, 68]
(call_expression [215, 45] - [215, 67]
function: (member_expression [215, 45] - [215, 59]
object: (identifier [215, 45] - [215, 49])
property: (property_identifier [215, 50] - [215, 59]))
arguments: (arguments [215, 59] - [215, 67]
(identifier [215, 60] - [215, 66]))))))
(string_fragment [215, 69] - [215, 70])))))
(jsx_text [216, 23] - [218, 22])
close_tag: (jsx_closing_element [218, 22] - [218, 31]
name: (identifier [218, 24] - [218, 30])))
close_tag: (jsx_closing_element [219, 20] - [219, 26]
name: (identifier [219, 22] - [219, 25]))))))
close_tag: (jsx_closing_element [221, 16] - [221, 22]
name: (identifier [221, 18] - [221, 21]))))))))))
close_tag: (jsx_closing_element [224, 10] - [224, 13])))))
close_tag: (jsx_closing_element [226, 4] - [226, 10]
name: (identifier [226, 6] - [226, 9])))))))))))
/home/tylerg/p/data/auth-yes/src/features/sessions/deck_fragments.tsx Parse: 0.63 ms 15918 bytes/ms (ERROR [74, 36] - [74, 44])

File diff suppressed because it is too large Load Diff

View File

@ -1,154 +0,0 @@
(program [0, 0] - [28, 0]
(import_statement [0, 0] - [0, 71]
(import_clause [0, 7] - [0, 45]
(named_imports [0, 7] - [0, 45]
(import_specifier [0, 9] - [0, 21]
name: (identifier [0, 9] - [0, 21]))
(import_specifier [0, 23] - [0, 43]
name: (identifier [0, 23] - [0, 43]))))
source: (string [0, 51] - [0, 70]
(string_fragment [0, 52] - [0, 69])))
(import_statement [1, 0] - [1, 74]
(import_clause [1, 7] - [1, 35]
(named_imports [1, 7] - [1, 35]
(import_specifier [1, 9] - [1, 33]
name: (identifier [1, 9] - [1, 33]))))
source: (string [1, 41] - [1, 73]
(string_fragment [1, 42] - [1, 72])))
(import_statement [2, 0] - [2, 32]
(import_clause [2, 7] - [2, 10]
(identifier [2, 7] - [2, 10]))
source: (string [2, 16] - [2, 31]
(string_fragment [2, 17] - [2, 30])))
(expression_statement [4, 0] - [12, 3]
(call_expression [4, 0] - [12, 2]
function: (member_expression [4, 0] - [4, 9]
object: (identifier [4, 0] - [4, 4])
property: (property_identifier [4, 5] - [4, 9]))
arguments: (arguments [4, 9] - [12, 2]
(string [4, 10] - [4, 104]
(string_fragment [4, 11] - [4, 103]))
(arrow_function [4, 106] - [12, 1]
parameters: (formal_parameters [4, 112] - [4, 114])
body: (statement_block [4, 118] - [12, 1]
(lexical_declaration [5, 2] - [5, 68]
(variable_declarator [5, 8] - [5, 67]
name: (identifier [5, 8] - [5, 20])
value: (string [5, 23] - [5, 67]
(string_fragment [5, 24] - [5, 66]))))
(lexical_declaration [6, 2] - [6, 58]
(variable_declarator [6, 8] - [6, 57]
name: (identifier [6, 8] - [6, 16])
value: (call_expression [6, 19] - [6, 57]
function: (identifier [6, 19] - [6, 43])
arguments: (arguments [6, 43] - [6, 57]
(identifier [6, 44] - [6, 56])))))
(lexical_declaration [7, 2] - [7, 38]
(variable_declarator [7, 8] - [7, 37]
name: (identifier [7, 8] - [7, 12])
value: (call_expression [7, 15] - [7, 37]
function: (identifier [7, 15] - [7, 21])
arguments: (arguments [7, 21] - [7, 37]
(await_expression [7, 22] - [7, 36]
(identifier [7, 28] - [7, 36]))))))
(expression_statement [9, 2] - [9, 51]
(call_expression [9, 2] - [9, 50]
function: (identifier [9, 2] - [9, 22])
arguments: (arguments [9, 22] - [9, 50]
(identifier [9, 23] - [9, 27])
(string [9, 29] - [9, 49]
(string_fragment [9, 30] - [9, 48])))))
(expression_statement [10, 2] - [10, 43]
(call_expression [10, 2] - [10, 42]
function: (identifier [10, 2] - [10, 22])
arguments: (arguments [10, 22] - [10, 42]
(identifier [10, 23] - [10, 27])
(identifier [10, 29] - [10, 41]))))
(expression_statement [11, 2] - [11, 48]
(call_expression [11, 2] - [11, 47]
function: (identifier [11, 2] - [11, 22])
arguments: (arguments [11, 22] - [11, 47]
(identifier [11, 23] - [11, 27])
(string [11, 29] - [11, 46]
(string_fragment [11, 30] - [11, 45]))))))))))
(expression_statement [14, 0] - [27, 3]
(call_expression [14, 0] - [27, 2]
function: (member_expression [14, 0] - [14, 9]
object: (identifier [14, 0] - [14, 4])
property: (property_identifier [14, 5] - [14, 9]))
arguments: (arguments [14, 9] - [27, 2]
(string [14, 10] - [14, 91]
(string_fragment [14, 11] - [14, 90]))
(arrow_function [14, 93] - [27, 1]
parameters: (formal_parameters [14, 99] - [14, 101])
body: (statement_block [14, 105] - [27, 1]
(lexical_declaration [15, 2] - [19, 5]
(variable_declarator [15, 8] - [19, 4]
name: (identifier [15, 8] - [15, 11])
value: (new_expression [15, 14] - [19, 4]
constructor: (identifier [15, 18] - [15, 25])
arguments: (arguments [15, 25] - [19, 4]
(string [15, 26] - [15, 53]
(string_fragment [15, 27] - [15, 52]))
(object [15, 55] - [19, 3]
(pair [16, 4] - [16, 18]
key: (property_identifier [16, 4] - [16, 10])
value: (string [16, 12] - [16, 18]
(string_fragment [16, 13] - [16, 17])))
(pair [17, 4] - [17, 51]
key: (property_identifier [17, 4] - [17, 11])
value: (object [17, 13] - [17, 51]
(pair [17, 15] - [17, 49]
key: (string [17, 15] - [17, 29]
(string_fragment [17, 16] - [17, 28]))
value: (string [17, 31] - [17, 49]
(string_fragment [17, 32] - [17, 48])))))
(pair [18, 4] - [18, 28]
key: (property_identifier [18, 4] - [18, 8])
value: (call_expression [18, 10] - [18, 28]
function: (member_expression [18, 10] - [18, 24]
object: (identifier [18, 10] - [18, 14])
property: (property_identifier [18, 15] - [18, 24]))
arguments: (arguments [18, 24] - [18, 28]
(object [18, 25] - [18, 27])))))))))
(lexical_declaration [21, 2] - [21, 35]
(variable_declarator [21, 8] - [21, 34]
name: (identifier [21, 8] - [21, 11])
value: (await_expression [21, 14] - [21, 34]
(call_expression [21, 20] - [21, 34]
function: (member_expression [21, 20] - [21, 29]
object: (identifier [21, 20] - [21, 23])
property: (property_identifier [21, 24] - [21, 29]))
arguments: (arguments [21, 29] - [21, 34]
(identifier [21, 30] - [21, 33]))))))
(expression_statement [22, 2] - [22, 32]
(call_expression [22, 2] - [22, 31]
function: (identifier [22, 2] - [22, 14])
arguments: (arguments [22, 14] - [22, 31]
(member_expression [22, 15] - [22, 25]
object: (identifier [22, 15] - [22, 18])
property: (property_identifier [22, 19] - [22, 25]))
(number [22, 27] - [22, 30]))))
(lexical_declaration [24, 2] - [24, 32]
(variable_declarator [24, 8] - [24, 31]
name: (identifier [24, 8] - [24, 12])
value: (await_expression [24, 15] - [24, 31]
(call_expression [24, 21] - [24, 31]
function: (member_expression [24, 21] - [24, 29]
object: (identifier [24, 21] - [24, 24])
property: (property_identifier [24, 25] - [24, 29]))
arguments: (arguments [24, 29] - [24, 31])))))
(expression_statement [25, 2] - [25, 51]
(call_expression [25, 2] - [25, 50]
function: (identifier [25, 2] - [25, 22])
arguments: (arguments [25, 22] - [25, 50]
(identifier [25, 23] - [25, 27])
(string [25, 29] - [25, 49]
(string_fragment [25, 30] - [25, 48])))))
(expression_statement [26, 2] - [26, 62]
(call_expression [26, 2] - [26, 61]
function: (identifier [26, 2] - [26, 22])
arguments: (arguments [26, 22] - [26, 61]
(identifier [26, 23] - [26, 27])
(string [26, 29] - [26, 60]
(string_fragment [26, 30] - [26, 59])))))))))))

View File

@ -1,79 +0,0 @@
(program [0, 0] - [43, 0]
(import_statement [0, 0] - [0, 45]
(import_clause [0, 7] - [0, 15]
(named_imports [0, 7] - [0, 15]
(import_specifier [0, 9] - [0, 13]
name: (identifier [0, 9] - [0, 13]))))
source: (string [0, 21] - [0, 44]
(string_fragment [0, 22] - [0, 43])))
(export_statement [2, 0] - [31, 1]
declaration: (function_declaration [2, 7] - [31, 1]
name: (identifier [2, 16] - [2, 40])
parameters: (formal_parameters [2, 40] - [2, 73]
(required_parameter [2, 41] - [2, 56]
pattern: (identifier [2, 41] - [2, 48])
type: (type_annotation [2, 48] - [2, 56]
(predefined_type [2, 50] - [2, 56])))
(required_parameter [2, 58] - [2, 72]
pattern: (identifier [2, 58] - [2, 65])
value: (true [2, 68] - [2, 72])))
body: (statement_block [2, 74] - [31, 1]
(lexical_declaration [3, 2] - [3, 58]
(variable_declarator [3, 8] - [3, 57]
name: (identifier [3, 8] - [3, 15])
value: (ternary_expression [3, 18] - [3, 57]
condition: (identifier [3, 18] - [3, 25])
consequence: (string [3, 28] - [3, 40]
(string_fragment [3, 29] - [3, 39]))
alternative: (string [3, 43] - [3, 57]
(string_fragment [3, 44] - [3, 56])))))
(lexical_declaration [4, 2] - [4, 42]
(variable_declarator [4, 8] - [4, 41]
name: (identifier [4, 8] - [4, 12])
value: (ternary_expression [4, 15] - [4, 41]
condition: (identifier [4, 15] - [4, 22])
consequence: (string [4, 25] - [4, 33]
(string_fragment [4, 26] - [4, 32]))
alternative: (string [4, 36] - [4, 41]
(string_fragment [4, 37] - [4, 40])))))
(comment [6, 2] - [6, 90])
(return_statement [7, 2] - [30, 4]
(call_expression [7, 9] - [30, 3]
function: (identifier [7, 9] - [7, 13])
arguments: (template_string [7, 13] - [30, 3]
(string_fragment [7, 14] - [11, 39])
(template_substitution [11, 39] - [11, 49]
(identifier [11, 41] - [11, 48]))
(string_fragment [11, 49] - [13, 14])
(template_substitution [13, 14] - [13, 21]
(identifier [13, 16] - [13, 20]))
(string_fragment [13, 21] - [14, 34])
(template_substitution [14, 34] - [14, 44]
(identifier [14, 36] - [14, 43]))
(string_fragment [14, 44] - [30, 2])))))))
(export_statement [33, 0] - [42, 1]
declaration: (function_declaration [33, 7] - [42, 1]
name: (identifier [33, 16] - [33, 40])
parameters: (formal_parameters [33, 40] - [33, 75]
(required_parameter [33, 41] - [33, 56]
pattern: (identifier [33, 41] - [33, 48])
type: (type_annotation [33, 48] - [33, 56]
(predefined_type [33, 50] - [33, 56])))
(required_parameter [33, 58] - [33, 74]
pattern: (identifier [33, 58] - [33, 66])
type: (type_annotation [33, 66] - [33, 74]
(predefined_type [33, 68] - [33, 74]))))
body: (statement_block [33, 76] - [42, 1]
(comment [34, 2] - [34, 62])
(comment [35, 2] - [35, 93])
(return_statement [36, 2] - [41, 4]
(call_expression [36, 9] - [41, 3]
function: (identifier [36, 9] - [36, 13])
arguments: (template_string [36, 13] - [41, 3]
(string_fragment [36, 14] - [37, 11])
(template_substitution [37, 11] - [37, 21]
(identifier [37, 13] - [37, 20]))
(string_fragment [37, 21] - [39, 6])
(template_substitution [39, 6] - [39, 17]
(identifier [39, 8] - [39, 16]))
(string_fragment [39, 17] - [41, 2]))))))))

View File

@ -1,555 +0,0 @@
(program [0, 0] - [95, 0]
(import_statement [0, 0] - [0, 71]
(import_clause [0, 7] - [0, 45]
(named_imports [0, 7] - [0, 45]
(import_specifier [0, 9] - [0, 21]
name: (identifier [0, 9] - [0, 21]))
(import_specifier [0, 23] - [0, 43]
name: (identifier [0, 23] - [0, 43]))))
source: (string [0, 51] - [0, 70]
(string_fragment [0, 52] - [0, 69])))
(import_statement [1, 0] - [1, 40]
(import_clause [1, 7] - [1, 15]
(named_imports [1, 7] - [1, 15]
(import_specifier [1, 9] - [1, 13]
name: (identifier [1, 9] - [1, 13]))))
source: (string [1, 21] - [1, 39]
(string_fragment [1, 22] - [1, 38])))
(import_statement [2, 0] - [2, 44]
(import_clause [2, 7] - [2, 23]
(named_imports [2, 7] - [2, 23]
(import_specifier [2, 9] - [2, 21]
name: (identifier [2, 9] - [2, 21]))))
source: (string [2, 29] - [2, 43]
(string_fragment [2, 30] - [2, 42])))
(import_statement [3, 0] - [3, 65]
(import_clause [3, 7] - [3, 34]
(named_imports [3, 7] - [3, 34]
(import_specifier [3, 9] - [3, 32]
name: (identifier [3, 9] - [3, 32]))))
source: (string [3, 40] - [3, 64]
(string_fragment [3, 41] - [3, 63])))
(expression_statement [5, 0] - [13, 3]
(call_expression [5, 0] - [13, 2]
function: (member_expression [5, 0] - [5, 9]
object: (identifier [5, 0] - [5, 4])
property: (property_identifier [5, 5] - [5, 9]))
arguments: (arguments [5, 9] - [13, 2]
(string [5, 10] - [5, 57]
(string_fragment [5, 11] - [5, 56]))
(arrow_function [5, 59] - [13, 1]
parameters: (formal_parameters [5, 65] - [5, 67])
body: (statement_block [5, 71] - [13, 1]
(lexical_declaration [6, 2] - [6, 51]
(variable_declarator [6, 8] - [6, 50]
name: (identifier [6, 8] - [6, 11])
value: (new_expression [6, 14] - [6, 50]
constructor: (identifier [6, 18] - [6, 25])
arguments: (arguments [6, 25] - [6, 50]
(string [6, 26] - [6, 49]
(string_fragment [6, 27] - [6, 48]))))))
(lexical_declaration [7, 2] - [7, 44]
(variable_declarator [7, 8] - [7, 43]
name: (identifier [7, 8] - [7, 11])
value: (await_expression [7, 14] - [7, 43]
(call_expression [7, 20] - [7, 43]
function: (member_expression [7, 20] - [7, 38]
object: (identifier [7, 20] - [7, 32])
property: (property_identifier [7, 33] - [7, 38]))
arguments: (arguments [7, 38] - [7, 43]
(identifier [7, 39] - [7, 42]))))))
(expression_statement [9, 2] - [9, 32]
(call_expression [9, 2] - [9, 31]
function: (identifier [9, 2] - [9, 14])
arguments: (arguments [9, 14] - [9, 31]
(member_expression [9, 15] - [9, 25]
object: (identifier [9, 15] - [9, 18])
property: (property_identifier [9, 19] - [9, 25]))
(number [9, 27] - [9, 30]))))
(lexical_declaration [10, 2] - [10, 32]
(variable_declarator [10, 8] - [10, 31]
name: (identifier [10, 8] - [10, 12])
value: (await_expression [10, 15] - [10, 31]
(call_expression [10, 21] - [10, 31]
function: (member_expression [10, 21] - [10, 29]
object: (identifier [10, 21] - [10, 24])
property: (property_identifier [10, 25] - [10, 29]))
arguments: (arguments [10, 29] - [10, 31])))))
(expression_statement [11, 2] - [11, 55]
(call_expression [11, 2] - [11, 54]
function: (identifier [11, 2] - [11, 22])
arguments: (arguments [11, 22] - [11, 54]
(identifier [11, 23] - [11, 27])
(string [11, 29] - [11, 53]
(string_fragment [11, 30] - [11, 52])))))
(expression_statement [12, 2] - [12, 61]
(call_expression [12, 2] - [12, 60]
function: (identifier [12, 2] - [12, 22])
arguments: (arguments [12, 22] - [12, 60]
(identifier [12, 23] - [12, 27])
(string [12, 29] - [12, 59]
(string_fragment [12, 30] - [12, 58]))))))))))
(expression_statement [15, 0] - [27, 3]
(call_expression [15, 0] - [27, 2]
function: (member_expression [15, 0] - [15, 9]
object: (identifier [15, 0] - [15, 4])
property: (property_identifier [15, 5] - [15, 9]))
arguments: (arguments [15, 9] - [27, 2]
(string [15, 10] - [15, 76]
(string_fragment [15, 11] - [15, 75]))
(arrow_function [15, 78] - [27, 1]
parameters: (formal_parameters [15, 84] - [15, 86])
body: (statement_block [15, 90] - [27, 1]
(lexical_declaration [16, 2] - [20, 5]
(variable_declarator [16, 8] - [20, 4]
name: (identifier [16, 8] - [16, 11])
value: (new_expression [16, 14] - [20, 4]
constructor: (identifier [16, 18] - [16, 25])
arguments: (arguments [16, 25] - [20, 4]
(string [16, 26] - [16, 53]
(string_fragment [16, 27] - [16, 52]))
(object [16, 55] - [20, 3]
(pair [17, 4] - [17, 18]
key: (property_identifier [17, 4] - [17, 10])
value: (string [17, 12] - [17, 18]
(string_fragment [17, 13] - [17, 17])))
(pair [18, 4] - [18, 51]
key: (property_identifier [18, 4] - [18, 11])
value: (object [18, 13] - [18, 51]
(pair [18, 15] - [18, 49]
key: (string [18, 15] - [18, 29]
(string_fragment [18, 16] - [18, 28]))
value: (string [18, 31] - [18, 49]
(string_fragment [18, 32] - [18, 48])))))
(pair [19, 4] - [19, 28]
key: (property_identifier [19, 4] - [19, 8])
value: (call_expression [19, 10] - [19, 28]
function: (member_expression [19, 10] - [19, 24]
object: (identifier [19, 10] - [19, 14])
property: (property_identifier [19, 15] - [19, 24]))
arguments: (arguments [19, 24] - [19, 28]
(object [19, 25] - [19, 27])))))))))
(lexical_declaration [22, 2] - [22, 44]
(variable_declarator [22, 8] - [22, 43]
name: (identifier [22, 8] - [22, 11])
value: (await_expression [22, 14] - [22, 43]
(call_expression [22, 20] - [22, 43]
function: (member_expression [22, 20] - [22, 38]
object: (identifier [22, 20] - [22, 32])
property: (property_identifier [22, 33] - [22, 38]))
arguments: (arguments [22, 38] - [22, 43]
(identifier [22, 39] - [22, 42]))))))
(expression_statement [23, 2] - [23, 32]
(call_expression [23, 2] - [23, 31]
function: (identifier [23, 2] - [23, 14])
arguments: (arguments [23, 14] - [23, 31]
(member_expression [23, 15] - [23, 25]
object: (identifier [23, 15] - [23, 18])
property: (property_identifier [23, 19] - [23, 25]))
(number [23, 27] - [23, 30]))))
(lexical_declaration [24, 2] - [24, 32]
(variable_declarator [24, 8] - [24, 31]
name: (identifier [24, 8] - [24, 12])
value: (await_expression [24, 15] - [24, 31]
(call_expression [24, 21] - [24, 31]
function: (member_expression [24, 21] - [24, 29]
object: (identifier [24, 21] - [24, 24])
property: (property_identifier [24, 25] - [24, 29]))
arguments: (arguments [24, 29] - [24, 31])))))
(expression_statement [25, 2] - [25, 51]
(call_expression [25, 2] - [25, 50]
function: (identifier [25, 2] - [25, 22])
arguments: (arguments [25, 22] - [25, 50]
(identifier [25, 23] - [25, 27])
(string [25, 29] - [25, 49]
(string_fragment [25, 30] - [25, 48])))))
(expression_statement [26, 2] - [26, 62]
(call_expression [26, 2] - [26, 61]
function: (identifier [26, 2] - [26, 22])
arguments: (arguments [26, 22] - [26, 61]
(identifier [26, 23] - [26, 27])
(string [26, 29] - [26, 60]
(string_fragment [26, 30] - [26, 59]))))))))))
(expression_statement [29, 0] - [50, 3]
(call_expression [29, 0] - [50, 2]
function: (member_expression [29, 0] - [29, 9]
object: (identifier [29, 0] - [29, 4])
property: (property_identifier [29, 5] - [29, 9]))
arguments: (arguments [29, 9] - [50, 2]
(string [29, 10] - [29, 79]
(string_fragment [29, 11] - [29, 78]))
(arrow_function [29, 81] - [50, 1]
parameters: (formal_parameters [29, 87] - [29, 89])
body: (statement_block [29, 93] - [50, 1]
(lexical_declaration [30, 2] - [37, 4]
(variable_declarator [30, 8] - [37, 3]
name: (identifier [30, 8] - [30, 17])
value: (object [30, 20] - [37, 3]
(pair [31, 4] - [31, 31]
key: (property_identifier [31, 4] - [31, 8])
value: (string [31, 10] - [31, 31]
(string_fragment [31, 11] - [31, 30])))
(pair [32, 4] - [32, 36]
key: (property_identifier [32, 4] - [32, 8])
value: (string [32, 10] - [32, 36]
(string_fragment [32, 11] - [32, 35])))
(pair [33, 4] - [33, 23]
key: (property_identifier [33, 4] - [33, 12])
value: (string [33, 14] - [33, 23]
(string_fragment [33, 15] - [33, 22])))
(pair [34, 4] - [34, 17]
key: (property_identifier [34, 4] - [34, 13])
value: (number [34, 15] - [34, 17]))
(pair [35, 4] - [35, 21]
key: (property_identifier [35, 4] - [35, 17])
value: (number [35, 19] - [35, 21]))
(pair [36, 4] - [36, 21]
key: (property_identifier [36, 4] - [36, 18])
value: (number [36, 20] - [36, 21])))))
(lexical_declaration [39, 2] - [39, 29]
(variable_declarator [39, 8] - [39, 28]
name: (identifier [39, 8] - [39, 15])
value: (new_expression [39, 18] - [39, 28]
constructor: (identifier [39, 22] - [39, 26])
arguments: (arguments [39, 26] - [39, 28]))))
(expression_statement [40, 2] - [43, 4]
(call_expression [40, 2] - [43, 3]
function: (member_expression [40, 2] - [40, 13]
object: (identifier [40, 2] - [40, 9])
property: (property_identifier [40, 10] - [40, 13]))
arguments: (arguments [40, 13] - [43, 3]
(string [41, 4] - [41, 11]
(string_fragment [41, 5] - [41, 10]))
(arrow_function [42, 4] - [42, 64]
parameters: (formal_parameters [42, 4] - [42, 7]
(required_parameter [42, 5] - [42, 6]
pattern: (identifier [42, 5] - [42, 6])))
body: (call_expression [42, 11] - [42, 64]
function: (member_expression [42, 11] - [42, 17]
object: (identifier [42, 11] - [42, 12])
property: (property_identifier [42, 13] - [42, 17]))
arguments: (arguments [42, 17] - [42, 64]
(call_expression [42, 18] - [42, 63]
function: (identifier [42, 18] - [42, 41])
arguments: (arguments [42, 41] - [42, 63]
(object [42, 42] - [42, 62]
(pair [42, 44] - [42, 60]
key: (property_identifier [42, 44] - [42, 49])
value: (identifier [42, 51] - [42, 60])))))))))))
(lexical_declaration [44, 2] - [44, 72]
(variable_declarator [44, 8] - [44, 71]
name: (identifier [44, 8] - [44, 11])
value: (await_expression [44, 14] - [44, 71]
(call_expression [44, 20] - [44, 71]
function: (member_expression [44, 20] - [44, 33]
object: (identifier [44, 20] - [44, 27])
property: (property_identifier [44, 28] - [44, 33]))
arguments: (arguments [44, 33] - [44, 71]
(new_expression [44, 34] - [44, 70]
constructor: (identifier [44, 38] - [44, 45])
arguments: (arguments [44, 45] - [44, 70]
(string [44, 46] - [44, 69]
(string_fragment [44, 47] - [44, 68])))))))))
(lexical_declaration [45, 2] - [45, 38]
(variable_declarator [45, 8] - [45, 37]
name: (identifier [45, 8] - [45, 18])
value: (await_expression [45, 21] - [45, 37]
(call_expression [45, 27] - [45, 37]
function: (member_expression [45, 27] - [45, 35]
object: (identifier [45, 27] - [45, 30])
property: (property_identifier [45, 31] - [45, 35]))
arguments: (arguments [45, 35] - [45, 37])))))
(expression_statement [46, 2] - [46, 58]
(call_expression [46, 2] - [46, 57]
function: (identifier [46, 2] - [46, 22])
arguments: (arguments [46, 22] - [46, 57]
(identifier [46, 23] - [46, 33])
(string [46, 35] - [46, 56]
(string_fragment [46, 36] - [46, 55])))))
(expression_statement [47, 2] - [47, 65]
(call_expression [47, 2] - [47, 64]
function: (identifier [47, 2] - [47, 22])
arguments: (arguments [47, 22] - [47, 64]
(identifier [47, 23] - [47, 33])
(string [47, 35] - [47, 63]
(string_fragment [47, 36] - [47, 62])))))
(expression_statement [48, 2] - [48, 46]
(call_expression [48, 2] - [48, 45]
function: (identifier [48, 2] - [48, 22])
arguments: (arguments [48, 22] - [48, 45]
(identifier [48, 23] - [48, 33])
(string [48, 35] - [48, 44]
(string_fragment [48, 36] - [48, 43])))))
(expression_statement [49, 2] - [49, 56]
(call_expression [49, 2] - [49, 55]
function: (identifier [49, 2] - [49, 22])
arguments: (arguments [49, 22] - [49, 55]
(identifier [49, 23] - [49, 33])
(string [49, 35] - [49, 54]
(string_fragment [49, 36] - [49, 53]))))))))))
(expression_statement [52, 0] - [79, 3]
(call_expression [52, 0] - [79, 2]
function: (member_expression [52, 0] - [52, 9]
object: (identifier [52, 0] - [52, 4])
property: (property_identifier [52, 5] - [52, 9]))
arguments: (arguments [52, 9] - [79, 2]
(string [52, 10] - [52, 55]
(string_fragment [52, 11] - [52, 54]))
(arrow_function [52, 57] - [79, 1]
parameters: (formal_parameters [52, 63] - [52, 65])
body: (statement_block [52, 69] - [79, 1]
(lexical_declaration [53, 2] - [68, 4]
(variable_declarator [53, 8] - [68, 3]
name: (identifier [53, 8] - [53, 17])
value: (array [53, 20] - [68, 3]
(object [54, 4] - [54, 67]
(pair [54, 6] - [54, 20]
key: (property_identifier [54, 6] - [54, 12])
value: (string [54, 14] - [54, 20]
(string_fragment [54, 15] - [54, 19])))
(pair [54, 22] - [54, 41]
key: (property_identifier [54, 22] - [54, 26])
value: (string [54, 28] - [54, 41]
(string_fragment [54, 29] - [54, 40])))
(pair [54, 43] - [54, 65]
key: (property_identifier [54, 43] - [54, 47])
value: (object [54, 49] - [54, 65]
(pair [54, 51] - [54, 63]
key: (property_identifier [54, 51] - [54, 55])
value: (string [54, 57] - [54, 63]
(string_fragment [54, 58] - [54, 62]))))))
(object [55, 4] - [59, 5]
(pair [56, 6] - [56, 20]
key: (property_identifier [56, 6] - [56, 12])
value: (string [56, 14] - [56, 20]
(string_fragment [56, 15] - [56, 19])))
(pair [57, 6] - [57, 39]
key: (property_identifier [57, 6] - [57, 10])
value: (string [57, 12] - [57, 39]
(string_fragment [57, 13] - [57, 38])))
(pair [58, 6] - [58, 30]
key: (property_identifier [58, 6] - [58, 10])
value: (object [58, 12] - [58, 30]
(pair [58, 14] - [58, 28]
key: (property_identifier [58, 14] - [58, 25])
value: (number [58, 27] - [58, 28])))))
(object [60, 4] - [60, 71]
(pair [60, 6] - [60, 20]
key: (property_identifier [60, 6] - [60, 12])
value: (string [60, 14] - [60, 20]
(string_fragment [60, 15] - [60, 19])))
(pair [60, 22] - [60, 59]
key: (property_identifier [60, 22] - [60, 26])
value: (string [60, 28] - [60, 59]
(string_fragment [60, 29] - [60, 58])))
(pair [60, 61] - [60, 69]
key: (property_identifier [60, 61] - [60, 65])
value: (object [60, 67] - [60, 69])))
(object [61, 4] - [65, 5]
(pair [62, 6] - [62, 20]
key: (property_identifier [62, 6] - [62, 12])
value: (string [62, 14] - [62, 20]
(string_fragment [62, 15] - [62, 19])))
(pair [63, 6] - [63, 39]
key: (property_identifier [63, 6] - [63, 10])
value: (string [63, 12] - [63, 39]
(string_fragment [63, 13] - [63, 38])))
(pair [64, 6] - [64, 27]
key: (property_identifier [64, 6] - [64, 10])
value: (object [64, 12] - [64, 27]
(pair [64, 14] - [64, 25]
key: (property_identifier [64, 14] - [64, 22])
value: (number [64, 24] - [64, 25])))))
(object [66, 4] - [66, 71]
(pair [66, 6] - [66, 19]
key: (property_identifier [66, 6] - [66, 12])
value: (string [66, 14] - [66, 19]
(string_fragment [66, 15] - [66, 18])))
(pair [66, 21] - [66, 57]
key: (property_identifier [66, 21] - [66, 25])
value: (string [66, 27] - [66, 57]
(string_fragment [66, 28] - [66, 56])))
(pair [66, 59] - [66, 69]
key: (property_identifier [66, 59] - [66, 63])
value: (null [66, 65] - [66, 69])))
(object [67, 4] - [67, 64]
(pair [67, 6] - [67, 20]
key: (property_identifier [67, 6] - [67, 12])
value: (string [67, 14] - [67, 20]
(string_fragment [67, 15] - [67, 19])))
(pair [67, 22] - [67, 52]
key: (property_identifier [67, 22] - [67, 26])
value: (string [67, 28] - [67, 52]
(string_fragment [67, 29] - [67, 51])))
(pair [67, 54] - [67, 62]
key: (property_identifier [67, 54] - [67, 58])
value: (object [67, 60] - [67, 62]))))))
(for_in_statement [70, 2] - [78, 3]
left: (identifier [70, 13] - [70, 15])
right: (identifier [70, 19] - [70, 28])
body: (statement_block [70, 30] - [78, 3]
(lexical_declaration [71, 4] - [75, 7]
(variable_declarator [71, 10] - [75, 6]
name: (identifier [71, 10] - [71, 13])
value: (new_expression [71, 16] - [75, 6]
constructor: (identifier [71, 20] - [71, 27])
arguments: (arguments [71, 27] - [75, 6]
(template_string [71, 28] - [71, 56]
(string_fragment [71, 29] - [71, 45])
(template_substitution [71, 45] - [71, 55]
(member_expression [71, 47] - [71, 54]
object: (identifier [71, 47] - [71, 49])
property: (property_identifier [71, 50] - [71, 54]))))
(object [71, 58] - [75, 5]
(pair [72, 6] - [72, 23]
key: (property_identifier [72, 6] - [72, 12])
value: (member_expression [72, 14] - [72, 23]
object: (identifier [72, 14] - [72, 16])
property: (property_identifier [72, 17] - [72, 23])))
(pair [73, 6] - [73, 53]
key: (property_identifier [73, 6] - [73, 13])
value: (object [73, 15] - [73, 53]
(pair [73, 17] - [73, 51]
key: (string [73, 17] - [73, 31]
(string_fragment [73, 18] - [73, 30]))
value: (string [73, 33] - [73, 51]
(string_fragment [73, 34] - [73, 50])))))
(pair [74, 6] - [74, 52]
key: (property_identifier [74, 6] - [74, 10])
value: (ternary_expression [74, 12] - [74, 52]
condition: (member_expression [74, 12] - [74, 19]
object: (identifier [74, 12] - [74, 14])
property: (property_identifier [74, 15] - [74, 19]))
consequence: (call_expression [74, 22] - [74, 45]
function: (member_expression [74, 22] - [74, 36]
object: (identifier [74, 22] - [74, 26])
property: (property_identifier [74, 27] - [74, 36]))
arguments: (arguments [74, 36] - [74, 45]
(member_expression [74, 37] - [74, 44]
object: (identifier [74, 37] - [74, 39])
property: (property_identifier [74, 40] - [74, 44]))))
alternative: (null [74, 48] - [74, 52]))))))))
(lexical_declaration [76, 4] - [76, 46]
(variable_declarator [76, 10] - [76, 45]
name: (identifier [76, 10] - [76, 13])
value: (await_expression [76, 16] - [76, 45]
(call_expression [76, 22] - [76, 45]
function: (member_expression [76, 22] - [76, 40]
object: (identifier [76, 22] - [76, 34])
property: (property_identifier [76, 35] - [76, 40]))
arguments: (arguments [76, 40] - [76, 45]
(identifier [76, 41] - [76, 44]))))))
(expression_statement [77, 4] - [77, 77]
(call_expression [77, 4] - [77, 76]
function: (identifier [77, 4] - [77, 16])
arguments: (arguments [77, 16] - [77, 76]
(member_expression [77, 17] - [77, 27]
object: (identifier [77, 17] - [77, 20])
property: (property_identifier [77, 21] - [77, 27]))
(number [77, 29] - [77, 32])
(template_string [77, 34] - [77, 75]
(string_fragment [77, 35] - [77, 44])
(template_substitution [77, 44] - [77, 54]
(member_expression [77, 46] - [77, 53]
object: (identifier [77, 46] - [77, 48])
property: (property_identifier [77, 49] - [77, 53])))
(string_fragment [77, 54] - [77, 74]))))))))))))
(expression_statement [81, 0] - [94, 3]
(call_expression [81, 0] - [94, 2]
function: (member_expression [81, 0] - [81, 9]
object: (identifier [81, 0] - [81, 4])
property: (property_identifier [81, 5] - [81, 9]))
arguments: (arguments [81, 9] - [94, 2]
(string [81, 10] - [81, 82]
(string_fragment [81, 11] - [81, 81]))
(arrow_function [81, 84] - [94, 1]
parameters: (formal_parameters [81, 90] - [81, 92])
body: (statement_block [81, 96] - [94, 1]
(lexical_declaration [82, 2] - [82, 80]
(variable_declarator [82, 8] - [82, 79]
name: (identifier [82, 8] - [82, 21])
value: (await_expression [82, 24] - [82, 79]
(call_expression [82, 30] - [82, 79]
function: (member_expression [82, 30] - [82, 47]
object: (identifier [82, 30] - [82, 34])
property: (property_identifier [82, 35] - [82, 47]))
arguments: (arguments [82, 47] - [82, 79]
(string [82, 48] - [82, 78]
(string_fragment [82, 49] - [82, 77])))))))
(expression_statement [83, 2] - [83, 67]
(call_expression [83, 2] - [83, 66]
function: (identifier [83, 2] - [83, 22])
arguments: (arguments [83, 22] - [83, 66]
(identifier [83, 23] - [83, 36])
(string [83, 38] - [83, 65]
(string_fragment [83, 39] - [83, 64])))))
(expression_statement [84, 2] - [84, 68]
(call_expression [84, 2] - [84, 67]
function: (identifier [84, 2] - [84, 22])
arguments: (arguments [84, 22] - [84, 67]
(identifier [84, 23] - [84, 36])
(string [84, 38] - [84, 66]
(string_fragment [84, 39] - [84, 65])))))
(expression_statement [85, 2] - [85, 68]
(call_expression [85, 2] - [85, 67]
function: (identifier [85, 2] - [85, 22])
arguments: (arguments [85, 22] - [85, 67]
(identifier [85, 23] - [85, 36])
(string [85, 38] - [85, 66]
(string_fragment [85, 39] - [85, 65])))))
(expression_statement [86, 2] - [86, 70]
(call_expression [86, 2] - [86, 69]
function: (identifier [86, 2] - [86, 22])
arguments: (arguments [86, 22] - [86, 69]
(identifier [86, 23] - [86, 36])
(string [86, 38] - [86, 68]
(string_fragment [86, 39] - [86, 67])))))
(expression_statement [87, 2] - [87, 60]
(call_expression [87, 2] - [87, 59]
function: (identifier [87, 2] - [87, 22])
arguments: (arguments [87, 22] - [87, 59]
(identifier [87, 23] - [87, 36])
(string [87, 38] - [87, 58]
(string_fragment [87, 39] - [87, 57])))))
(expression_statement [88, 2] - [88, 62]
(call_expression [88, 2] - [88, 61]
function: (identifier [88, 2] - [88, 22])
arguments: (arguments [88, 22] - [88, 61]
(identifier [88, 23] - [88, 36])
(string [88, 38] - [88, 60]
(string_fragment [88, 39] - [88, 59])))))
(expression_statement [89, 2] - [89, 64]
(call_expression [89, 2] - [89, 63]
function: (identifier [89, 2] - [89, 22])
arguments: (arguments [89, 22] - [89, 63]
(identifier [89, 23] - [89, 36])
(string [89, 38] - [89, 62]
(string_fragment [89, 39] - [89, 61])))))
(expression_statement [90, 2] - [90, 70]
(call_expression [90, 2] - [90, 69]
function: (identifier [90, 2] - [90, 22])
arguments: (arguments [90, 22] - [90, 69]
(identifier [90, 23] - [90, 36])
(string [90, 38] - [90, 68]
(string_fragment [90, 39] - [90, 67])))))
(expression_statement [91, 2] - [91, 59]
(call_expression [91, 2] - [91, 58]
function: (identifier [91, 2] - [91, 22])
arguments: (arguments [91, 22] - [91, 58]
(identifier [91, 23] - [91, 36])
(string [91, 38] - [91, 57]
(string_fragment [91, 39] - [91, 56])))))
(expression_statement [92, 2] - [92, 56]
(call_expression [92, 2] - [92, 55]
function: (identifier [92, 2] - [92, 22])
arguments: (arguments [92, 22] - [92, 55]
(identifier [92, 23] - [92, 36])
(string [92, 38] - [92, 54]
(string_fragment [92, 39] - [92, 53])))))
(expression_statement [93, 2] - [93, 53]
(call_expression [93, 2] - [93, 52]
function: (identifier [93, 2] - [93, 22])
arguments: (arguments [93, 22] - [93, 52]
(identifier [93, 23] - [93, 36])
(string [93, 38] - [93, 51]
(string_fragment [93, 39] - [93, 50])))))))))))

File diff suppressed because it is too large Load Diff

View File

@ -1,208 +0,0 @@
(program [0, 0] - [31, 0]
(import_statement [0, 0] - [0, 49]
(import_clause [0, 7] - [0, 23]
(named_imports [0, 7] - [0, 23]
(import_specifier [0, 9] - [0, 21]
name: (identifier [0, 9] - [0, 21]))))
source: (string [0, 29] - [0, 48]
(string_fragment [0, 30] - [0, 47])))
(import_statement [1, 0] - [1, 32]
(import_clause [1, 7] - [1, 10]
(identifier [1, 7] - [1, 10]))
source: (string [1, 16] - [1, 31]
(string_fragment [1, 17] - [1, 30])))
(import_statement [2, 0] - [6, 36]
(import_clause [2, 7] - [6, 1]
(named_imports [2, 7] - [6, 1]
(import_specifier [3, 2] - [3, 13]
name: (identifier [3, 2] - [3, 13]))
(import_specifier [4, 2] - [4, 16]
name: (identifier [4, 2] - [4, 16]))
(import_specifier [5, 2] - [5, 19]
name: (identifier [5, 2] - [5, 19]))))
source: (string [6, 7] - [6, 35]
(string_fragment [6, 8] - [6, 34])))
(expression_statement [8, 0] - [11, 3]
(call_expression [8, 0] - [11, 2]
function: (member_expression [8, 0] - [8, 9]
object: (identifier [8, 0] - [8, 4])
property: (property_identifier [8, 5] - [8, 9]))
arguments: (arguments [8, 9] - [11, 2]
(string [8, 10] - [8, 72]
(string_fragment [8, 11] - [8, 71]))
(arrow_function [8, 74] - [11, 1]
parameters: (formal_parameters [8, 80] - [8, 82])
body: (statement_block [8, 86] - [11, 1]
(lexical_declaration [9, 2] - [9, 80]
(variable_declarator [9, 8] - [9, 79]
name: (identifier [9, 8] - [9, 11])
value: (await_expression [9, 14] - [9, 79]
(call_expression [9, 20] - [9, 79]
function: (member_expression [9, 20] - [9, 29]
object: (identifier [9, 20] - [9, 23])
property: (property_identifier [9, 24] - [9, 29]))
arguments: (arguments [9, 29] - [9, 79]
(new_expression [9, 30] - [9, 78]
constructor: (identifier [9, 34] - [9, 41])
arguments: (arguments [9, 41] - [9, 78]
(string [9, 42] - [9, 77]
(string_fragment [9, 43] - [9, 76])))))))))
(expression_statement [10, 2] - [10, 32]
(call_expression [10, 2] - [10, 31]
function: (identifier [10, 2] - [10, 14])
arguments: (arguments [10, 14] - [10, 31]
(member_expression [10, 15] - [10, 25]
object: (identifier [10, 15] - [10, 18])
property: (property_identifier [10, 19] - [10, 25]))
(number [10, 27] - [10, 30])))))))))
(expression_statement [13, 0] - [17, 3]
(call_expression [13, 0] - [17, 2]
function: (member_expression [13, 0] - [13, 9]
object: (identifier [13, 0] - [13, 4])
property: (property_identifier [13, 5] - [13, 9]))
arguments: (arguments [13, 9] - [17, 2]
(string [13, 10] - [13, 76]
(string_fragment [13, 11] - [13, 75]))
(arrow_function [13, 78] - [17, 1]
parameters: (formal_parameters [13, 78] - [13, 80])
body: (statement_block [13, 84] - [17, 1]
(expression_statement [14, 2] - [14, 74]
(call_expression [14, 2] - [14, 73]
function: (identifier [14, 2] - [14, 14])
arguments: (arguments [14, 14] - [14, 73]
(call_expression [14, 15] - [14, 66]
function: (identifier [14, 15] - [14, 29])
arguments: (arguments [14, 29] - [14, 66]
(string [14, 30] - [14, 50]
(string_fragment [14, 31] - [14, 49]))
(array [14, 52] - [14, 65]
(string [14, 53] - [14, 64]
(string_fragment [14, 54] - [14, 63])))))
(true [14, 68] - [14, 72]))))
(expression_statement [15, 2] - [15, 71]
(call_expression [15, 2] - [15, 70]
function: (identifier [15, 2] - [15, 14])
arguments: (arguments [15, 14] - [15, 70]
(call_expression [15, 15] - [15, 63]
function: (identifier [15, 15] - [15, 29])
arguments: (arguments [15, 29] - [15, 63]
(string [15, 30] - [15, 44]
(string_fragment [15, 31] - [15, 43]))
(array [15, 46] - [15, 62]
(string [15, 47] - [15, 61]
(string_fragment [15, 48] - [15, 60])))))
(true [15, 65] - [15, 69]))))
(expression_statement [16, 2] - [16, 63]
(call_expression [16, 2] - [16, 62]
function: (identifier [16, 2] - [16, 14])
arguments: (arguments [16, 14] - [16, 62]
(call_expression [16, 15] - [16, 54]
function: (identifier [16, 15] - [16, 29])
arguments: (arguments [16, 29] - [16, 54]
(string [16, 30] - [16, 38]
(string_fragment [16, 31] - [16, 37]))
(array [16, 40] - [16, 53]
(string [16, 41] - [16, 52]
(string_fragment [16, 42] - [16, 51])))))
(false [16, 56] - [16, 61])))))))))
(expression_statement [19, 0] - [23, 3]
(call_expression [19, 0] - [23, 2]
function: (member_expression [19, 0] - [19, 9]
object: (identifier [19, 0] - [19, 4])
property: (property_identifier [19, 5] - [19, 9]))
arguments: (arguments [19, 9] - [23, 2]
(string [19, 10] - [19, 73]
(string_fragment [19, 11] - [19, 72]))
(arrow_function [19, 75] - [23, 1]
parameters: (formal_parameters [19, 75] - [19, 77])
body: (statement_block [19, 81] - [23, 1]
(expression_statement [20, 2] - [20, 70]
(call_expression [20, 2] - [20, 69]
function: (identifier [20, 2] - [20, 14])
arguments: (arguments [20, 14] - [20, 69]
(call_expression [20, 15] - [20, 62]
function: (identifier [20, 15] - [20, 26])
arguments: (arguments [20, 26] - [20, 62]
(string [20, 27] - [20, 41]
(string_fragment [20, 28] - [20, 40]))
(array [20, 43] - [20, 61]
(string [20, 44] - [20, 60]
(string_fragment [20, 45] - [20, 59])))))
(true [20, 64] - [20, 68]))))
(expression_statement [21, 2] - [21, 67]
(call_expression [21, 2] - [21, 66]
function: (identifier [21, 2] - [21, 14])
arguments: (arguments [21, 14] - [21, 66]
(call_expression [21, 15] - [21, 58]
function: (identifier [21, 15] - [21, 26])
arguments: (arguments [21, 26] - [21, 58]
(string [21, 27] - [21, 37]
(string_fragment [21, 28] - [21, 36]))
(array [21, 39] - [21, 57]
(string [21, 40] - [21, 56]
(string_fragment [21, 41] - [21, 55])))))
(false [21, 60] - [21, 65]))))
(expression_statement [22, 2] - [22, 62]
(call_expression [22, 2] - [22, 61]
function: (identifier [22, 2] - [22, 14])
arguments: (arguments [22, 14] - [22, 61]
(call_expression [22, 15] - [22, 54]
function: (identifier [22, 15] - [22, 26])
arguments: (arguments [22, 26] - [22, 54]
(string [22, 27] - [22, 38]
(string_fragment [22, 28] - [22, 37]))
(array [22, 40] - [22, 53]
(string [22, 41] - [22, 52]
(string_fragment [22, 42] - [22, 51])))))
(true [22, 56] - [22, 60])))))))))
(expression_statement [25, 0] - [30, 3]
(call_expression [25, 0] - [30, 2]
function: (member_expression [25, 0] - [25, 9]
object: (identifier [25, 0] - [25, 4])
property: (property_identifier [25, 5] - [25, 9]))
arguments: (arguments [25, 9] - [30, 2]
(string [25, 10] - [25, 82]
(string_fragment [25, 11] - [25, 81]))
(arrow_function [25, 84] - [30, 1]
parameters: (formal_parameters [25, 84] - [25, 86])
body: (statement_block [25, 90] - [30, 1]
(expression_statement [26, 2] - [26, 54]
(call_expression [26, 2] - [26, 53]
function: (identifier [26, 2] - [26, 14])
arguments: (arguments [26, 14] - [26, 53]
(call_expression [26, 15] - [26, 46]
function: (identifier [26, 15] - [26, 32])
arguments: (arguments [26, 32] - [26, 46]
(string [26, 33] - [26, 45]
(string_fragment [26, 34] - [26, 44]))))
(true [26, 48] - [26, 52]))))
(expression_statement [27, 2] - [27, 71]
(call_expression [27, 2] - [27, 70]
function: (identifier [27, 2] - [27, 14])
arguments: (arguments [27, 14] - [27, 70]
(call_expression [27, 15] - [27, 63]
function: (identifier [27, 15] - [27, 32])
arguments: (arguments [27, 32] - [27, 63]
(string [27, 33] - [27, 62]
(string_fragment [27, 34] - [27, 61]))))
(true [27, 65] - [27, 69]))))
(expression_statement [28, 2] - [28, 61]
(call_expression [28, 2] - [28, 60]
function: (identifier [28, 2] - [28, 14])
arguments: (arguments [28, 14] - [28, 60]
(call_expression [28, 15] - [28, 52]
function: (identifier [28, 15] - [28, 32])
arguments: (arguments [28, 32] - [28, 52]
(string [28, 33] - [28, 51]
(string_fragment [28, 34] - [28, 50]))))
(false [28, 54] - [28, 59]))))
(expression_statement [29, 2] - [29, 55]
(call_expression [29, 2] - [29, 54]
function: (identifier [29, 2] - [29, 14])
arguments: (arguments [29, 14] - [29, 54]
(call_expression [29, 15] - [29, 46]
function: (identifier [29, 15] - [29, 32])
arguments: (arguments [29, 32] - [29, 46]
(string [29, 33] - [29, 45]
(string_fragment [29, 34] - [29, 44]))))
(false [29, 48] - [29, 53]))))))))))

View File

@ -1,424 +0,0 @@
(program [0, 0] - [98, 0]
(comment [0, 0] - [2, 3])
(export_statement [3, 0] - [20, 1]
declaration: (function_declaration [3, 7] - [20, 1]
name: (identifier [3, 16] - [3, 30])
parameters: (formal_parameters [3, 30] - [6, 1]
(required_parameter [4, 2] - [4, 21]
pattern: (identifier [4, 2] - [4, 13])
type: (type_annotation [4, 13] - [4, 21]
(predefined_type [4, 15] - [4, 21])))
(optional_parameter [5, 2] - [5, 24]
pattern: (identifier [5, 2] - [5, 13])
type: (type_annotation [5, 14] - [5, 24]
(array_type [5, 16] - [5, 24]
(predefined_type [5, 16] - [5, 22])))))
return_type: (type_annotation [6, 1] - [6, 10]
(predefined_type [6, 3] - [6, 10]))
body: (statement_block [6, 11] - [20, 1]
(if_statement [7, 2] - [7, 61]
condition: (parenthesized_expression [7, 5] - [7, 47]
(binary_expression [7, 6] - [7, 46]
left: (unary_expression [7, 6] - [7, 18]
argument: (identifier [7, 7] - [7, 18]))
right: (binary_expression [7, 22] - [7, 46]
left: (member_expression [7, 22] - [7, 40]
object: (identifier [7, 22] - [7, 33])
property: (property_identifier [7, 34] - [7, 40]))
right: (number [7, 45] - [7, 46]))))
consequence: (return_statement [7, 48] - [7, 61]
(false [7, 55] - [7, 60])))
(for_in_statement [9, 2] - [17, 3]
left: (identifier [9, 13] - [9, 20])
right: (identifier [9, 24] - [9, 35])
body: (statement_block [9, 37] - [17, 3]
(if_statement [10, 4] - [10, 45]
condition: (parenthesized_expression [10, 7] - [10, 32]
(binary_expression [10, 8] - [10, 31]
left: (identifier [10, 8] - [10, 15])
right: (identifier [10, 20] - [10, 31])))
consequence: (return_statement [10, 33] - [10, 45]
(true [10, 40] - [10, 44])))
(if_statement [11, 4] - [16, 5]
condition: (parenthesized_expression [11, 7] - [11, 31]
(call_expression [11, 8] - [11, 30]
function: (member_expression [11, 8] - [11, 24]
object: (identifier [11, 8] - [11, 15])
property: (property_identifier [11, 16] - [11, 24]))
arguments: (arguments [11, 24] - [11, 30]
(string [11, 25] - [11, 29]
(string_fragment [11, 26] - [11, 28])))))
consequence: (statement_block [11, 32] - [16, 5]
(lexical_declaration [12, 6] - [12, 42]
(variable_declarator [12, 12] - [12, 41]
name: (identifier [12, 12] - [12, 18])
value: (call_expression [12, 21] - [12, 41]
function: (member_expression [12, 21] - [12, 34]
object: (identifier [12, 21] - [12, 28])
property: (property_identifier [12, 29] - [12, 34]))
arguments: (arguments [12, 34] - [12, 41]
(number [12, 35] - [12, 36])
(unary_expression [12, 38] - [12, 40]
argument: (number [12, 39] - [12, 40]))))))
(if_statement [13, 6] - [15, 7]
condition: (parenthesized_expression [13, 9] - [13, 73]
(binary_expression [13, 10] - [13, 72]
left: (binary_expression [13, 10] - [13, 32]
left: (identifier [13, 10] - [13, 21])
right: (identifier [13, 26] - [13, 32]))
right: (call_expression [13, 36] - [13, 72]
function: (member_expression [13, 36] - [13, 58]
object: (identifier [13, 36] - [13, 47])
property: (property_identifier [13, 48] - [13, 58]))
arguments: (arguments [13, 58] - [13, 72]
(binary_expression [13, 59] - [13, 71]
left: (identifier [13, 59] - [13, 65])
right: (string [13, 68] - [13, 71]
(string_fragment [13, 69] - [13, 70])))))))
consequence: (statement_block [13, 74] - [15, 7]
(return_statement [14, 8] - [14, 20]
(true [14, 15] - [14, 19]))))))))
(return_statement [19, 2] - [19, 15]
(false [19, 9] - [19, 14])))))
(comment [22, 0] - [24, 3])
(export_statement [25, 0] - [65, 1]
declaration: (function_declaration [25, 7] - [65, 1]
name: (identifier [25, 16] - [25, 27])
parameters: (formal_parameters [25, 27] - [28, 1]
(required_parameter [26, 2] - [26, 18]
pattern: (identifier [26, 2] - [26, 10])
type: (type_annotation [26, 10] - [26, 18]
(predefined_type [26, 12] - [26, 18])))
(optional_parameter [27, 2] - [27, 25]
pattern: (identifier [27, 2] - [27, 14])
type: (type_annotation [27, 15] - [27, 25]
(array_type [27, 17] - [27, 25]
(predefined_type [27, 17] - [27, 23])))))
return_type: (type_annotation [28, 1] - [28, 10]
(predefined_type [28, 3] - [28, 10]))
body: (statement_block [28, 11] - [65, 1]
(if_statement [29, 2] - [29, 63]
condition: (parenthesized_expression [29, 5] - [29, 49]
(binary_expression [29, 6] - [29, 48]
left: (unary_expression [29, 6] - [29, 19]
argument: (identifier [29, 7] - [29, 19]))
right: (binary_expression [29, 23] - [29, 48]
left: (member_expression [29, 23] - [29, 42]
object: (identifier [29, 23] - [29, 35])
property: (property_identifier [29, 36] - [29, 42]))
right: (number [29, 47] - [29, 48]))))
consequence: (return_statement [29, 50] - [29, 63]
(false [29, 57] - [29, 62])))
(lexical_declaration [31, 2] - [36, 4]
(variable_declarator [31, 8] - [36, 3]
name: (identifier [31, 8] - [31, 16])
value: (arrow_function [31, 19] - [36, 3]
parameters: (formal_parameters [31, 19] - [31, 31]
(required_parameter [31, 20] - [31, 30]
pattern: (identifier [31, 20] - [31, 22])
type: (type_annotation [31, 22] - [31, 30]
(predefined_type [31, 24] - [31, 30]))))
body: (statement_block [31, 35] - [36, 3]
(lexical_declaration [32, 4] - [32, 32]
(variable_declarator [32, 10] - [32, 31]
name: (identifier [32, 10] - [32, 15])
value: (call_expression [32, 18] - [32, 31]
function: (member_expression [32, 18] - [32, 26]
object: (identifier [32, 18] - [32, 20])
property: (property_identifier [32, 21] - [32, 26]))
arguments: (arguments [32, 26] - [32, 31]
(string [32, 27] - [32, 30]
(string_fragment [32, 28] - [32, 29]))))))
(if_statement [33, 4] - [33, 40]
condition: (parenthesized_expression [33, 7] - [33, 27]
(binary_expression [33, 8] - [33, 26]
left: (member_expression [33, 8] - [33, 20]
object: (identifier [33, 8] - [33, 13])
property: (property_identifier [33, 14] - [33, 20]))
right: (number [33, 25] - [33, 26])))
consequence: (return_statement [33, 28] - [33, 40]
(null [33, 35] - [33, 39])))
(return_statement [34, 4] - [35, 8]
(binary_expression [34, 11] - [35, 7]
left: (call_expression [34, 11] - [34, 76]
function: (member_expression [34, 11] - [34, 23]
object: (identifier [34, 11] - [34, 16])
property: (property_identifier [34, 17] - [34, 23]))
arguments: (arguments [34, 23] - [34, 76]
(arrow_function [34, 24] - [34, 72]
parameters: (formal_parameters [34, 24] - [34, 36]
(required_parameter [34, 25] - [34, 28]
pattern: (identifier [34, 25] - [34, 28]))
(required_parameter [34, 30] - [34, 35]
pattern: (identifier [34, 30] - [34, 35])))
body: (binary_expression [34, 40] - [34, 72]
left: (parenthesized_expression [34, 40] - [34, 50]
(binary_expression [34, 41] - [34, 49]
left: (identifier [34, 41] - [34, 44])
right: (number [34, 48] - [34, 49])))
right: (call_expression [34, 53] - [34, 72]
function: (identifier [34, 53] - [34, 61])
arguments: (arguments [34, 61] - [34, 72]
(identifier [34, 62] - [34, 67])
(number [34, 69] - [34, 71])))))
(number [34, 74] - [34, 75])))
right: (number [35, 6] - [35, 7])))))))
(lexical_declaration [38, 2] - [38, 50]
(variable_declarator [38, 8] - [38, 49]
name: (identifier [38, 8] - [38, 17])
value: (call_expression [38, 20] - [38, 49]
function: (member_expression [38, 20] - [38, 47]
object: (subscript_expression [38, 20] - [38, 42]
object: (call_expression [38, 20] - [38, 39]
function: (member_expression [38, 20] - [38, 34]
object: (identifier [38, 20] - [38, 28])
property: (property_identifier [38, 29] - [38, 34]))
arguments: (arguments [38, 34] - [38, 39]
(string [38, 35] - [38, 38]
(string_fragment [38, 36] - [38, 37]))))
index: (number [38, 40] - [38, 41]))
property: (property_identifier [38, 43] - [38, 47]))
arguments: (arguments [38, 47] - [38, 49]))))
(lexical_declaration [39, 2] - [39, 36]
(variable_declarator [39, 8] - [39, 35]
name: (identifier [39, 8] - [39, 13])
value: (call_expression [39, 16] - [39, 35]
function: (identifier [39, 16] - [39, 24])
arguments: (arguments [39, 24] - [39, 35]
(identifier [39, 25] - [39, 34])))))
(for_in_statement [41, 2] - [62, 3]
left: (identifier [41, 13] - [41, 17])
right: (identifier [41, 21] - [41, 33])
body: (statement_block [41, 35] - [62, 3]
(lexical_declaration [42, 4] - [42, 46]
(variable_declarator [42, 10] - [42, 45]
name: (array_pattern [42, 10] - [42, 27]
(identifier [42, 11] - [42, 17])
(identifier [42, 19] - [42, 26]))
value: (call_expression [42, 30] - [42, 45]
function: (member_expression [42, 30] - [42, 40]
object: (identifier [42, 30] - [42, 34])
property: (property_identifier [42, 35] - [42, 40]))
arguments: (arguments [42, 40] - [42, 45]
(string [42, 41] - [42, 44]
(string_fragment [42, 42] - [42, 43]))))))
(if_statement [43, 4] - [46, 5]
condition: (parenthesized_expression [43, 7] - [43, 17]
(unary_expression [43, 8] - [43, 16]
argument: (identifier [43, 9] - [43, 16])))
consequence: (statement_block [43, 18] - [46, 5]
(if_statement [44, 6] - [44, 44]
condition: (parenthesized_expression [44, 9] - [44, 31]
(binary_expression [44, 10] - [44, 30]
left: (identifier [44, 10] - [44, 16])
right: (identifier [44, 21] - [44, 30])))
consequence: (return_statement [44, 32] - [44, 44]
(true [44, 39] - [44, 43])))
(continue_statement [45, 6] - [45, 15])))
(if_statement [48, 4] - [61, 5]
condition: (parenthesized_expression [48, 7] - [48, 47]
(binary_expression [48, 8] - [48, 46]
left: (binary_expression [48, 8] - [48, 22]
left: (identifier [48, 8] - [48, 13])
right: (null [48, 18] - [48, 22]))
right: (call_expression [48, 26] - [48, 46]
function: (member_expression [48, 26] - [48, 41]
object: (identifier [48, 26] - [48, 32])
property: (property_identifier [48, 33] - [48, 41]))
arguments: (arguments [48, 41] - [48, 46]
(string [48, 42] - [48, 45]
(string_fragment [48, 43] - [48, 44]))))))
consequence: (statement_block [48, 48] - [59, 5]
(lexical_declaration [49, 6] - [49, 41]
(variable_declarator [49, 12] - [49, 40]
name: (identifier [49, 12] - [49, 21])
value: (call_expression [49, 24] - [49, 40]
function: (identifier [49, 24] - [49, 32])
arguments: (arguments [49, 32] - [49, 40]
(identifier [49, 33] - [49, 39])))))
(if_statement [50, 6] - [58, 7]
condition: (parenthesized_expression [50, 9] - [50, 29]
(binary_expression [50, 10] - [50, 28]
left: (identifier [50, 10] - [50, 19])
right: (null [50, 24] - [50, 28])))
consequence: (statement_block [50, 30] - [58, 7]
(lexical_declaration [51, 8] - [51, 47]
(variable_declarator [51, 14] - [51, 46]
name: (identifier [51, 14] - [51, 22])
value: (call_expression [51, 25] - [51, 46]
function: (identifier [51, 25] - [51, 33])
arguments: (arguments [51, 33] - [51, 46]
(identifier [51, 34] - [51, 41])
(number [51, 43] - [51, 45])))))
(lexical_declaration [52, 8] - [54, 52]
(variable_declarator [52, 14] - [54, 51]
name: (identifier [52, 14] - [52, 18])
value: (ternary_expression [52, 21] - [54, 51]
condition: (binary_expression [52, 21] - [52, 35]
left: (identifier [52, 21] - [52, 29])
right: (number [52, 34] - [52, 35]))
consequence: (number [53, 12] - [53, 13])
alternative: (parenthesized_expression [54, 12] - [54, 51]
(binary_expression [54, 13] - [54, 50]
left: (parenthesized_expression [54, 13] - [54, 44]
(binary_expression [54, 14] - [54, 43]
left: (number [54, 14] - [54, 24])
right: (parenthesized_expression [54, 28] - [54, 43]
(binary_expression [54, 29] - [54, 42]
left: (number [54, 29] - [54, 31])
right: (identifier [54, 34] - [54, 42])))))
right: (number [54, 49] - [54, 50]))))))
(if_statement [55, 8] - [57, 9]
condition: (parenthesized_expression [55, 11] - [55, 50]
(binary_expression [55, 12] - [55, 49]
left: (parenthesized_expression [55, 12] - [55, 26]
(binary_expression [55, 13] - [55, 25]
left: (identifier [55, 13] - [55, 18])
right: (identifier [55, 21] - [55, 25])))
right: (parenthesized_expression [55, 31] - [55, 49]
(binary_expression [55, 32] - [55, 48]
left: (identifier [55, 32] - [55, 41])
right: (identifier [55, 44] - [55, 48])))))
consequence: (statement_block [55, 51] - [57, 9]
(return_statement [56, 10] - [56, 22]
(true [56, 17] - [56, 21])))))))
alternative: (else_clause [59, 6] - [61, 5]
(if_statement [59, 11] - [61, 5]
condition: (parenthesized_expression [59, 14] - [59, 35]
(binary_expression [59, 15] - [59, 34]
left: (identifier [59, 15] - [59, 21])
right: (identifier [59, 26] - [59, 34])))
consequence: (statement_block [59, 36] - [61, 5]
(return_statement [60, 6] - [60, 18]
(true [60, 13] - [60, 17]))))))))
(return_statement [64, 2] - [64, 15]
(false [64, 9] - [64, 14])))))
(comment [67, 0] - [69, 3])
(export_statement [70, 0] - [97, 1]
declaration: (function_declaration [70, 7] - [97, 1]
name: (identifier [70, 16] - [70, 33])
parameters: (formal_parameters [70, 33] - [73, 1]
(required_parameter [71, 2] - [71, 16]
pattern: (identifier [71, 2] - [71, 8])
type: (type_annotation [71, 8] - [71, 16]
(predefined_type [71, 10] - [71, 16])))
(optional_parameter [72, 2] - [72, 23]
pattern: (identifier [72, 2] - [72, 14])
type: (type_annotation [72, 15] - [72, 23]
(predefined_type [72, 17] - [72, 23]))))
return_type: (type_annotation [73, 1] - [73, 10]
(predefined_type [73, 3] - [73, 10]))
body: (statement_block [73, 11] - [97, 1]
(if_statement [74, 2] - [74, 28]
condition: (parenthesized_expression [74, 5] - [74, 14]
(unary_expression [74, 6] - [74, 13]
argument: (identifier [74, 7] - [74, 13])))
consequence: (return_statement [74, 15] - [74, 28]
(false [74, 22] - [74, 27])))
(if_statement [75, 2] - [77, 3]
condition: (parenthesized_expression [75, 5] - [75, 57]
(binary_expression [75, 6] - [75, 56]
left: (call_expression [75, 6] - [75, 28]
function: (member_expression [75, 6] - [75, 23]
object: (identifier [75, 6] - [75, 12])
property: (property_identifier [75, 13] - [75, 23]))
arguments: (arguments [75, 23] - [75, 28]
(string [75, 24] - [75, 27]
(string_fragment [75, 25] - [75, 26]))))
right: (unary_expression [75, 32] - [75, 56]
argument: (call_expression [75, 33] - [75, 56]
function: (member_expression [75, 33] - [75, 50]
object: (identifier [75, 33] - [75, 39])
property: (property_identifier [75, 40] - [75, 50]))
arguments: (arguments [75, 50] - [75, 56]
(string [75, 51] - [75, 55]
(string_fragment [75, 52] - [75, 54])))))))
consequence: (statement_block [75, 58] - [77, 3]
(return_statement [76, 4] - [76, 16]
(true [76, 11] - [76, 15]))))
(try_statement [78, 2] - [95, 3]
body: (statement_block [78, 6] - [93, 3]
(lexical_declaration [79, 4] - [79, 35]
(variable_declarator [79, 10] - [79, 34]
name: (identifier [79, 10] - [79, 16])
value: (new_expression [79, 19] - [79, 34]
constructor: (identifier [79, 23] - [79, 26])
arguments: (arguments [79, 26] - [79, 34]
(identifier [79, 27] - [79, 33])))))
(lexical_declaration [80, 4] - [80, 33]
(variable_declarator [80, 10] - [80, 32]
name: (identifier [80, 10] - [80, 14])
value: (member_expression [80, 17] - [80, 32]
object: (identifier [80, 17] - [80, 23])
property: (property_identifier [80, 24] - [80, 32]))))
(lexical_declaration [81, 4] - [81, 69]
(variable_declarator [81, 10] - [81, 68]
name: (identifier [81, 10] - [81, 14])
value: (binary_expression [81, 17] - [81, 68]
left: (binary_expression [81, 17] - [81, 54]
left: (identifier [81, 17] - [81, 29])
right: (call_expression [81, 33] - [81, 54]
function: (member_expression [81, 33] - [81, 45]
object: (member_expression [81, 33] - [81, 41]
object: (identifier [81, 33] - [81, 37])
property: (property_identifier [81, 38] - [81, 41]))
property: (property_identifier [81, 42] - [81, 45]))
arguments: (arguments [81, 45] - [81, 54]
(string [81, 46] - [81, 53]
(string_fragment [81, 47] - [81, 52])))))
right: (string [81, 58] - [81, 68]
(string_fragment [81, 59] - [81, 67])))))
(lexical_declaration [82, 4] - [82, 46]
(variable_declarator [82, 10] - [82, 45]
name: (identifier [82, 10] - [82, 19])
value: (call_expression [82, 22] - [82, 45]
function: (member_expression [82, 22] - [82, 34]
object: (identifier [82, 22] - [82, 26])
property: (property_identifier [82, 27] - [82, 34]))
arguments: (arguments [82, 34] - [82, 45]
(regex [82, 35] - [82, 40]
pattern: (regex_pattern [82, 36] - [82, 39]))
(string [82, 42] - [82, 44])))))
(if_statement [84, 4] - [92, 5]
condition: (parenthesized_expression [84, 7] - [90, 5]
(binary_expression [85, 6] - [89, 36]
left: (binary_expression [85, 6] - [88, 24]
left: (binary_expression [85, 6] - [87, 32]
left: (binary_expression [85, 6] - [86, 25]
left: (binary_expression [85, 6] - [85, 26]
left: (identifier [85, 6] - [85, 10])
right: (string [85, 15] - [85, 26]
(string_fragment [85, 16] - [85, 25])))
right: (binary_expression [86, 6] - [86, 25]
left: (identifier [86, 6] - [86, 10])
right: (string [86, 15] - [86, 25]
(string_fragment [86, 16] - [86, 24]))))
right: (call_expression [87, 6] - [87, 32]
function: (member_expression [87, 6] - [87, 19]
object: (identifier [87, 6] - [87, 10])
property: (property_identifier [87, 11] - [87, 19]))
arguments: (arguments [87, 19] - [87, 32]
(string [87, 20] - [87, 31]
(string_fragment [87, 21] - [87, 30])))))
right: (binary_expression [88, 6] - [88, 24]
left: (identifier [88, 6] - [88, 10])
right: (identifier [88, 15] - [88, 24])))
right: (call_expression [89, 6] - [89, 36]
function: (member_expression [89, 6] - [89, 19]
object: (identifier [89, 6] - [89, 10])
property: (property_identifier [89, 11] - [89, 19]))
arguments: (arguments [89, 19] - [89, 36]
(template_string [89, 20] - [89, 35]
(string_fragment [89, 21] - [89, 22])
(template_substitution [89, 22] - [89, 34]
(identifier [89, 24] - [89, 33])))))))
consequence: (statement_block [90, 6] - [92, 5]
(return_statement [91, 6] - [91, 18]
(true [91, 13] - [91, 17])))))
handler: (catch_clause [93, 4] - [95, 3]
parameter: (identifier [93, 11] - [93, 13])
body: (statement_block [93, 15] - [95, 3]
(return_statement [94, 4] - [94, 17]
(false [94, 11] - [94, 16])))))
(return_statement [96, 2] - [96, 15]
(false [96, 9] - [96, 14]))))))

View File

@ -1,23 +0,0 @@
(program [0, 0] - [7, 0]
(export_statement [0, 0] - [4, 32]
(export_clause [0, 7] - [4, 1]
(export_specifier [1, 2] - [1, 29]
name: (identifier [1, 2] - [1, 29]))
(export_specifier [2, 2] - [2, 20]
name: (identifier [2, 2] - [2, 20]))
(export_specifier [3, 2] - [3, 16]
name: (identifier [3, 2] - [3, 16])))
source: (string [4, 7] - [4, 31]
(string_fragment [4, 8] - [4, 30])))
(export_statement [5, 0] - [5, 56]
(export_clause [5, 7] - [5, 25]
(export_specifier [5, 9] - [5, 23]
name: (identifier [5, 9] - [5, 23])))
source: (string [5, 31] - [5, 55]
(string_fragment [5, 32] - [5, 54])))
(export_statement [6, 0] - [6, 67]
(export_clause [6, 7] - [6, 30]
(export_specifier [6, 9] - [6, 28]
name: (identifier [6, 9] - [6, 28])))
source: (string [6, 36] - [6, 66]
(string_fragment [6, 37] - [6, 65]))))

View File

@ -1,963 +0,0 @@
(program [0, 0] - [180, 0]
(import_statement [0, 0] - [0, 37]
(import_clause [0, 7] - [0, 17]
(named_imports [0, 7] - [0, 17]
(import_specifier [0, 9] - [0, 15]
name: (identifier [0, 9] - [0, 15]))))
source: (string [0, 23] - [0, 36]
(string_fragment [0, 24] - [0, 35])))
(comment [2, 0] - [5, 3])
(export_statement [6, 0] - [19, 1]
declaration: (function_declaration [6, 7] - [19, 1]
name: (identifier [6, 22] - [6, 42])
parameters: (formal_parameters [6, 42] - [8, 1]
(required_parameter [7, 2] - [7, 46]
pattern: (identifier [7, 2] - [7, 5])
type: (type_annotation [7, 5] - [7, 46]
(object_type [7, 7] - [7, 46]
(property_signature [7, 9] - [7, 20]
name: (property_identifier [7, 9] - [7, 12])
type: (type_annotation [7, 12] - [7, 20]
(predefined_type [7, 14] - [7, 20])))
(property_signature [7, 22] - [7, 33]
name: (property_identifier [7, 22] - [7, 25])
type: (type_annotation [7, 25] - [7, 33]
(predefined_type [7, 27] - [7, 33])))
(property_signature [7, 35] - [7, 44]
name: (property_identifier [7, 35] - [7, 36])
type: (type_annotation [7, 36] - [7, 44]
(predefined_type [7, 38] - [7, 44])))))))
return_type: (type_annotation [8, 1] - [8, 18]
(generic_type [8, 3] - [8, 18]
name: (type_identifier [8, 3] - [8, 10])
type_arguments: (type_arguments [8, 10] - [8, 18]
(predefined_type [8, 11] - [8, 17]))))
body: (statement_block [8, 19] - [19, 1]
(if_statement [9, 2] - [11, 3]
condition: (parenthesized_expression [9, 5] - [9, 59]
(binary_expression [9, 6] - [9, 58]
left: (binary_expression [9, 6] - [9, 48]
left: (binary_expression [9, 6] - [9, 23]
left: (member_expression [9, 6] - [9, 13]
object: (identifier [9, 6] - [9, 9])
property: (property_identifier [9, 10] - [9, 13]))
right: (string [9, 18] - [9, 23]
(string_fragment [9, 19] - [9, 22])))
right: (binary_expression [9, 27] - [9, 48]
left: (member_expression [9, 27] - [9, 34]
object: (identifier [9, 27] - [9, 30])
property: (property_identifier [9, 31] - [9, 34]))
right: (string [9, 39] - [9, 48]
(string_fragment [9, 40] - [9, 47]))))
right: (unary_expression [9, 52] - [9, 58]
argument: (member_expression [9, 53] - [9, 58]
object: (identifier [9, 53] - [9, 56])
property: (property_identifier [9, 57] - [9, 58])))))
consequence: (statement_block [9, 60] - [11, 3]
(throw_statement [10, 4] - [10, 43]
(new_expression [10, 10] - [10, 42]
constructor: (identifier [10, 14] - [10, 19])
arguments: (arguments [10, 19] - [10, 42]
(string [10, 20] - [10, 41]
(string_fragment [10, 21] - [10, 40])))))))
(lexical_declaration [13, 2] - [13, 70]
(variable_declarator [13, 8] - [13, 69]
name: (identifier [13, 8] - [13, 20])
value: (template_string [13, 23] - [13, 69]
(string_fragment [13, 24] - [13, 58])
(template_substitution [13, 58] - [13, 66]
(member_expression [13, 60] - [13, 65]
object: (identifier [13, 60] - [13, 63])
property: (property_identifier [13, 64] - [13, 65])))
(string_fragment [13, 66] - [13, 68]))))
(lexical_declaration [14, 2] - [14, 54]
(variable_declarator [14, 8] - [14, 53]
name: (identifier [14, 8] - [14, 12])
value: (call_expression [14, 15] - [14, 53]
function: (member_expression [14, 15] - [14, 39]
object: (new_expression [14, 15] - [14, 32]
constructor: (identifier [14, 19] - [14, 30])
arguments: (arguments [14, 30] - [14, 32]))
property: (property_identifier [14, 33] - [14, 39]))
arguments: (arguments [14, 39] - [14, 53]
(identifier [14, 40] - [14, 52])))))
(lexical_declaration [15, 2] - [15, 65]
(variable_declarator [15, 8] - [15, 64]
name: (identifier [15, 8] - [15, 18])
value: (await_expression [15, 21] - [15, 64]
(call_expression [15, 27] - [15, 64]
function: (member_expression [15, 27] - [15, 47]
object: (member_expression [15, 27] - [15, 40]
object: (identifier [15, 27] - [15, 33])
property: (property_identifier [15, 34] - [15, 40]))
property: (property_identifier [15, 41] - [15, 47]))
arguments: (arguments [15, 47] - [15, 64]
(string [15, 48] - [15, 57]
(string_fragment [15, 49] - [15, 56]))
(identifier [15, 59] - [15, 63]))))))
(lexical_declaration [16, 2] - [16, 59]
(variable_declarator [16, 8] - [16, 58]
name: (identifier [16, 8] - [16, 17])
value: (call_expression [16, 20] - [16, 58]
function: (member_expression [16, 20] - [16, 30]
object: (identifier [16, 20] - [16, 25])
property: (property_identifier [16, 26] - [16, 30]))
arguments: (arguments [16, 30] - [16, 58]
(new_expression [16, 31] - [16, 57]
constructor: (identifier [16, 35] - [16, 45])
arguments: (arguments [16, 45] - [16, 57]
(identifier [16, 46] - [16, 56])))))))
(lexical_declaration [17, 2] - [17, 77]
(variable_declarator [17, 8] - [17, 76]
name: (identifier [17, 8] - [17, 11])
value: (call_expression [17, 14] - [17, 76]
function: (member_expression [17, 14] - [17, 72]
object: (call_expression [17, 14] - [17, 67]
function: (member_expression [17, 14] - [17, 27]
object: (identifier [17, 14] - [17, 23])
property: (property_identifier [17, 24] - [17, 27]))
arguments: (arguments [17, 27] - [17, 67]
(arrow_function [17, 28] - [17, 66]
parameters: (formal_parameters [17, 28] - [17, 31]
(required_parameter [17, 29] - [17, 30]
pattern: (identifier [17, 29] - [17, 30])))
body: (call_expression [17, 35] - [17, 66]
function: (member_expression [17, 35] - [17, 58]
object: (call_expression [17, 35] - [17, 49]
function: (member_expression [17, 35] - [17, 45]
object: (identifier [17, 35] - [17, 36])
property: (property_identifier [17, 37] - [17, 45]))
arguments: (arguments [17, 45] - [17, 49]
(number [17, 46] - [17, 48])))
property: (property_identifier [17, 50] - [17, 58]))
arguments: (arguments [17, 58] - [17, 66]
(number [17, 59] - [17, 60])
(string [17, 62] - [17, 65]
(string_fragment [17, 63] - [17, 64])))))))
property: (property_identifier [17, 68] - [17, 72]))
arguments: (arguments [17, 72] - [17, 76]
(string [17, 73] - [17, 75])))))
(return_statement [18, 2] - [18, 13]
(identifier [18, 9] - [18, 12])))))
(comment [21, 0] - [24, 3])
(export_statement [25, 0] - [179, 1]
declaration: (function_declaration [25, 7] - [179, 1]
name: (identifier [25, 22] - [25, 41])
parameters: (formal_parameters [25, 41] - [25, 55]
(required_parameter [25, 42] - [25, 54]
pattern: (identifier [25, 42] - [25, 45])
type: (type_annotation [25, 45] - [25, 54]
(type_identifier [25, 47] - [25, 54]))))
return_type: (type_annotation [25, 55] - [25, 72]
(generic_type [25, 57] - [25, 72]
name: (type_identifier [25, 57] - [25, 64])
type_arguments: (type_arguments [25, 64] - [25, 72]
(predefined_type [25, 65] - [25, 71]))))
body: (statement_block [25, 73] - [179, 1]
(lexical_declaration [26, 2] - [26, 60]
(variable_declarator [26, 8] - [26, 59]
name: (identifier [26, 8] - [26, 22])
value: (call_expression [26, 25] - [26, 59]
function: (member_expression [26, 25] - [26, 40]
object: (member_expression [26, 25] - [26, 36]
object: (identifier [26, 25] - [26, 28])
property: (property_identifier [26, 29] - [26, 36]))
property: (property_identifier [26, 37] - [26, 40]))
arguments: (arguments [26, 40] - [26, 59]
(string [26, 41] - [26, 58]
(string_fragment [26, 42] - [26, 57]))))))
(lexical_declaration [27, 2] - [27, 49]
(variable_declarator [27, 8] - [27, 48]
name: (identifier [27, 8] - [27, 17])
value: (call_expression [27, 20] - [27, 48]
function: (member_expression [27, 20] - [27, 35]
object: (member_expression [27, 20] - [27, 31]
object: (identifier [27, 20] - [27, 23])
property: (property_identifier [27, 24] - [27, 31]))
property: (property_identifier [27, 32] - [27, 35]))
arguments: (arguments [27, 35] - [27, 48]
(string [27, 36] - [27, 47]
(string_fragment [27, 37] - [27, 46]))))))
(if_statement [29, 2] - [31, 3]
condition: (parenthesized_expression [29, 5] - [29, 36]
(binary_expression [29, 6] - [29, 35]
left: (unary_expression [29, 6] - [29, 21]
argument: (identifier [29, 7] - [29, 21]))
right: (unary_expression [29, 25] - [29, 35]
argument: (identifier [29, 26] - [29, 35]))))
consequence: (statement_block [29, 37] - [31, 3]
(throw_statement [30, 4] - [30, 62]
(new_expression [30, 10] - [30, 61]
constructor: (identifier [30, 14] - [30, 19])
arguments: (arguments [30, 19] - [30, 61]
(string [30, 20] - [30, 60]
(string_fragment [30, 21] - [30, 59])))))))
(lexical_declaration [33, 2] - [33, 64]
(variable_declarator [33, 8] - [33, 63]
name: (identifier [33, 8] - [33, 16])
value: (call_expression [33, 19] - [33, 63]
function: (member_expression [33, 19] - [33, 39]
object: (identifier [33, 19] - [33, 33])
property: (property_identifier [33, 34] - [33, 39]))
arguments: (arguments [33, 39] - [33, 63]
(regex [33, 40] - [33, 62]
pattern: (regex_pattern [33, 41] - [33, 61]))))))
(if_statement [34, 2] - [36, 3]
condition: (parenthesized_expression [34, 5] - [34, 16]
(unary_expression [34, 6] - [34, 15]
argument: (identifier [34, 7] - [34, 15])))
consequence: (statement_block [34, 17] - [36, 3]
(throw_statement [35, 4] - [35, 54]
(new_expression [35, 10] - [35, 53]
constructor: (identifier [35, 14] - [35, 19])
arguments: (arguments [35, 19] - [35, 53]
(string [35, 20] - [35, 52]
(string_fragment [35, 21] - [35, 51])))))))
(lexical_declaration [38, 2] - [38, 36]
(variable_declarator [38, 8] - [38, 35]
name: (identifier [38, 8] - [38, 21])
value: (subscript_expression [38, 24] - [38, 35]
object: (identifier [38, 24] - [38, 32])
index: (number [38, 33] - [38, 34]))))
(lexical_declaration [39, 2] - [39, 32]
(variable_declarator [39, 8] - [39, 31]
name: (identifier [39, 8] - [39, 17])
value: (subscript_expression [39, 20] - [39, 31]
object: (identifier [39, 20] - [39, 28])
index: (number [39, 29] - [39, 30]))))
(lexical_declaration [41, 2] - [41, 78]
(variable_declarator [41, 8] - [41, 77]
name: (identifier [41, 8] - [41, 18])
value: (call_expression [41, 21] - [41, 77]
function: (member_expression [41, 21] - [41, 49]
object: (call_expression [41, 21] - [41, 45]
function: (member_expression [41, 21] - [41, 40]
object: (identifier [41, 21] - [41, 34])
property: (property_identifier [41, 35] - [41, 40]))
arguments: (arguments [41, 40] - [41, 45]
(string [41, 41] - [41, 44]
(string_fragment [41, 42] - [41, 43]))))
property: (property_identifier [41, 46] - [41, 49]))
arguments: (arguments [41, 49] - [41, 77]
(arrow_function [41, 50] - [41, 76]
parameters: (formal_parameters [41, 50] - [41, 53]
(required_parameter [41, 51] - [41, 52]
pattern: (identifier [41, 51] - [41, 52])))
body: (call_expression [41, 57] - [41, 76]
function: (member_expression [41, 57] - [41, 66]
object: (identifier [41, 57] - [41, 58])
property: (property_identifier [41, 59] - [41, 66]))
arguments: (arguments [41, 66] - [41, 76]
(regex [41, 67] - [41, 71]
pattern: (regex_pattern [41, 68] - [41, 69])
flags: (regex_flags [41, 70] - [41, 71]))
(string [41, 73] - [41, 75]))))))))
(lexical_declaration [43, 2] - [43, 43]
(variable_declarator [43, 8] - [43, 42]
name: (identifier [43, 8] - [43, 14])
value: (new_expression [43, 17] - [43, 42]
constructor: (identifier [43, 21] - [43, 24])
type_arguments: (type_arguments [43, 24] - [43, 40]
(predefined_type [43, 25] - [43, 31])
(predefined_type [43, 33] - [43, 39]))
arguments: (arguments [43, 40] - [43, 42]))))
(lexical_declaration [44, 2] - [44, 42]
(variable_declarator [44, 8] - [44, 41]
name: (identifier [44, 8] - [44, 18])
value: (regex [44, 21] - [44, 41]
pattern: (regex_pattern [44, 22] - [44, 39])
flags: (regex_flags [44, 40] - [44, 41]))))
(lexical_declaration [45, 2] - [45, 12]
(variable_declarator [45, 6] - [45, 11]
name: (identifier [45, 6] - [45, 11])))
(while_statement [46, 2] - [52, 3]
condition: (parenthesized_expression [46, 8] - [46, 55]
(binary_expression [46, 9] - [46, 54]
left: (parenthesized_expression [46, 9] - [46, 45]
(assignment_expression [46, 10] - [46, 44]
left: (identifier [46, 10] - [46, 15])
right: (call_expression [46, 18] - [46, 44]
function: (member_expression [46, 18] - [46, 33]
object: (identifier [46, 18] - [46, 28])
property: (property_identifier [46, 29] - [46, 33]))
arguments: (arguments [46, 33] - [46, 44]
(identifier [46, 34] - [46, 43])))))
right: (null [46, 50] - [46, 54])))
body: (statement_block [46, 56] - [52, 3]
(lexical_declaration [47, 4] - [47, 23]
(variable_declarator [47, 8] - [47, 22]
name: (identifier [47, 8] - [47, 11])
value: (subscript_expression [47, 14] - [47, 22]
object: (identifier [47, 14] - [47, 19])
index: (number [47, 20] - [47, 21]))))
(if_statement [48, 4] - [50, 5]
condition: (parenthesized_expression [48, 7] - [48, 49]
(binary_expression [48, 8] - [48, 48]
left: (call_expression [48, 8] - [48, 27]
function: (member_expression [48, 8] - [48, 22]
object: (identifier [48, 8] - [48, 11])
property: (property_identifier [48, 12] - [48, 22]))
arguments: (arguments [48, 22] - [48, 27]
(string [48, 23] - [48, 26]
(string_fragment [48, 24] - [48, 25]))))
right: (call_expression [48, 31] - [48, 48]
function: (member_expression [48, 31] - [48, 43]
object: (identifier [48, 31] - [48, 34])
property: (property_identifier [48, 35] - [48, 43]))
arguments: (arguments [48, 43] - [48, 48]
(string [48, 44] - [48, 47]
(string_fragment [48, 45] - [48, 46]))))))
consequence: (statement_block [48, 50] - [50, 5]
(expression_statement [49, 6] - [49, 29]
(assignment_expression [49, 6] - [49, 28]
left: (identifier [49, 6] - [49, 9])
right: (call_expression [49, 12] - [49, 28]
function: (member_expression [49, 12] - [49, 21]
object: (identifier [49, 12] - [49, 15])
property: (property_identifier [49, 16] - [49, 21]))
arguments: (arguments [49, 21] - [49, 28]
(number [49, 22] - [49, 23])
(unary_expression [49, 25] - [49, 27]
argument: (number [49, 26] - [49, 27]))))))))
(expression_statement [51, 4] - [51, 30]
(call_expression [51, 4] - [51, 29]
function: (member_expression [51, 4] - [51, 14]
object: (identifier [51, 4] - [51, 10])
property: (property_identifier [51, 11] - [51, 14]))
arguments: (arguments [51, 14] - [51, 29]
(subscript_expression [51, 15] - [51, 23]
object: (identifier [51, 15] - [51, 20])
index: (number [51, 21] - [51, 22]))
(identifier [51, 25] - [51, 28]))))))
(comment [54, 2] - [54, 30])
(lexical_declaration [55, 2] - [55, 61]
(variable_declarator [55, 8] - [55, 60]
name: (identifier [55, 8] - [55, 15])
value: (call_expression [55, 18] - [55, 60]
function: (identifier [55, 18] - [55, 26])
arguments: (arguments [55, 26] - [55, 60]
(binary_expression [55, 27] - [55, 55]
left: (call_expression [55, 27] - [55, 48]
function: (member_expression [55, 27] - [55, 37]
object: (identifier [55, 27] - [55, 33])
property: (property_identifier [55, 34] - [55, 37]))
arguments: (arguments [55, 37] - [55, 48]
(string [55, 38] - [55, 47]
(string_fragment [55, 39] - [55, 46]))))
right: (string [55, 52] - [55, 55]
(string_fragment [55, 53] - [55, 54])))
(number [55, 57] - [55, 59])))))
(lexical_declaration [56, 2] - [56, 61]
(variable_declarator [56, 8] - [56, 60]
name: (identifier [56, 8] - [56, 15])
value: (call_expression [56, 18] - [56, 60]
function: (identifier [56, 18] - [56, 26])
arguments: (arguments [56, 26] - [56, 60]
(binary_expression [56, 27] - [56, 55]
left: (call_expression [56, 27] - [56, 48]
function: (member_expression [56, 27] - [56, 37]
object: (identifier [56, 27] - [56, 33])
property: (property_identifier [56, 34] - [56, 37]))
arguments: (arguments [56, 37] - [56, 48]
(string [56, 38] - [56, 47]
(string_fragment [56, 39] - [56, 46]))))
right: (string [56, 52] - [56, 55]
(string_fragment [56, 53] - [56, 54])))
(number [56, 57] - [56, 59])))))
(if_statement [58, 2] - [60, 3]
condition: (parenthesized_expression [58, 5] - [58, 27]
(binary_expression [58, 6] - [58, 26]
left: (unary_expression [58, 6] - [58, 14]
argument: (identifier [58, 7] - [58, 14]))
right: (unary_expression [58, 18] - [58, 26]
argument: (identifier [58, 19] - [58, 26]))))
consequence: (statement_block [58, 28] - [60, 3]
(throw_statement [59, 4] - [59, 60]
(new_expression [59, 10] - [59, 59]
constructor: (identifier [59, 14] - [59, 19])
arguments: (arguments [59, 19] - [59, 59]
(string [59, 20] - [59, 58]
(string_fragment [59, 21] - [59, 57])))))))
(lexical_declaration [62, 2] - [62, 44]
(variable_declarator [62, 8] - [62, 43]
name: (identifier [62, 8] - [62, 11])
value: (call_expression [62, 14] - [62, 43]
function: (member_expression [62, 14] - [62, 24]
object: (identifier [62, 14] - [62, 18])
property: (property_identifier [62, 19] - [62, 24]))
arguments: (arguments [62, 24] - [62, 43]
(binary_expression [62, 25] - [62, 42]
left: (call_expression [62, 25] - [62, 35]
function: (member_expression [62, 25] - [62, 33]
object: (identifier [62, 25] - [62, 29])
property: (property_identifier [62, 30] - [62, 33]))
arguments: (arguments [62, 33] - [62, 35]))
right: (number [62, 38] - [62, 42]))))))
(if_statement [63, 2] - [65, 3]
condition: (parenthesized_expression [63, 5] - [63, 35]
(binary_expression [63, 6] - [63, 34]
left: (call_expression [63, 6] - [63, 29]
function: (member_expression [63, 6] - [63, 14]
object: (identifier [63, 6] - [63, 10])
property: (property_identifier [63, 11] - [63, 14]))
arguments: (arguments [63, 14] - [63, 29]
(binary_expression [63, 15] - [63, 28]
left: (identifier [63, 15] - [63, 18])
right: (identifier [63, 21] - [63, 28]))))
right: (number [63, 32] - [63, 34])))
consequence: (statement_block [63, 36] - [65, 3]
(throw_statement [64, 4] - [64, 71]
(new_expression [64, 10] - [64, 70]
constructor: (identifier [64, 14] - [64, 19])
arguments: (arguments [64, 19] - [64, 70]
(string [64, 20] - [64, 69]
(string_fragment [64, 21] - [64, 68])))))))
(if_statement [66, 2] - [68, 3]
condition: (parenthesized_expression [66, 5] - [66, 20]
(binary_expression [66, 6] - [66, 19]
left: (identifier [66, 6] - [66, 9])
right: (identifier [66, 12] - [66, 19])))
consequence: (statement_block [66, 21] - [68, 3]
(throw_statement [67, 4] - [67, 41]
(new_expression [67, 10] - [67, 40]
constructor: (identifier [67, 14] - [67, 19])
arguments: (arguments [67, 19] - [67, 40]
(string [67, 20] - [67, 39]
(string_fragment [67, 21] - [67, 38])))))))
(comment [70, 2] - [70, 17])
(lexical_declaration [71, 2] - [71, 38]
(variable_declarator [71, 8] - [71, 37]
name: (identifier [71, 8] - [71, 17])
value: (call_expression [71, 20] - [71, 37]
function: (member_expression [71, 20] - [71, 30]
object: (identifier [71, 20] - [71, 26])
property: (property_identifier [71, 27] - [71, 30]))
arguments: (arguments [71, 30] - [71, 37]
(string [71, 31] - [71, 36]
(string_fragment [71, 32] - [71, 35]))))))
(if_statement [72, 2] - [74, 3]
condition: (parenthesized_expression [72, 5] - [72, 17]
(unary_expression [72, 6] - [72, 16]
argument: (identifier [72, 7] - [72, 16])))
consequence: (statement_block [72, 18] - [74, 3]
(throw_statement [73, 4] - [73, 52]
(new_expression [73, 10] - [73, 51]
constructor: (identifier [73, 14] - [73, 19])
arguments: (arguments [73, 19] - [73, 51]
(string [73, 20] - [73, 50]
(string_fragment [73, 21] - [73, 49])))))))
(lexical_declaration [76, 2] - [76, 10]
(variable_declarator [76, 6] - [76, 9]
name: (identifier [76, 6] - [76, 9])))
(try_statement [77, 2] - [82, 3]
body: (statement_block [77, 6] - [80, 3]
(lexical_declaration [78, 4] - [78, 74]
(variable_declarator [78, 10] - [78, 73]
name: (identifier [78, 10] - [78, 17])
value: (call_expression [78, 20] - [78, 73]
function: (identifier [78, 20] - [78, 24])
arguments: (arguments [78, 24] - [78, 73]
(call_expression [78, 25] - [78, 72]
function: (member_expression [78, 25] - [78, 61]
object: (call_expression [78, 25] - [78, 53]
function: (member_expression [78, 25] - [78, 42]
object: (identifier [78, 25] - [78, 34])
property: (property_identifier [78, 35] - [78, 42]))
arguments: (arguments [78, 42] - [78, 53]
(regex [78, 43] - [78, 47]
pattern: (regex_pattern [78, 44] - [78, 45])
flags: (regex_flags [78, 46] - [78, 47]))
(string [78, 49] - [78, 52]
(string_fragment [78, 50] - [78, 51]))))
property: (property_identifier [78, 54] - [78, 61]))
arguments: (arguments [78, 61] - [78, 72]
(regex [78, 62] - [78, 66]
pattern: (regex_pattern [78, 63] - [78, 64])
flags: (regex_flags [78, 65] - [78, 66]))
(string [78, 68] - [78, 71]
(string_fragment [78, 69] - [78, 70]))))))))
(expression_statement [79, 4] - [79, 30]
(assignment_expression [79, 4] - [79, 29]
left: (identifier [79, 4] - [79, 7])
right: (call_expression [79, 10] - [79, 29]
function: (member_expression [79, 10] - [79, 20]
object: (identifier [79, 10] - [79, 14])
property: (property_identifier [79, 15] - [79, 20]))
arguments: (arguments [79, 20] - [79, 29]
(identifier [79, 21] - [79, 28]))))))
handler: (catch_clause [80, 4] - [82, 3]
parameter: (identifier [80, 11] - [80, 15])
body: (statement_block [80, 17] - [82, 3]
(throw_statement [81, 4] - [81, 66]
(new_expression [81, 10] - [81, 65]
constructor: (identifier [81, 14] - [81, 19])
arguments: (arguments [81, 19] - [81, 65]
(string [81, 20] - [81, 64]
(string_fragment [81, 21] - [81, 63]))))))))
(if_statement [84, 2] - [86, 3]
condition: (parenthesized_expression [84, 5] - [84, 59]
(binary_expression [84, 6] - [84, 58]
left: (binary_expression [84, 6] - [84, 48]
left: (binary_expression [84, 6] - [84, 23]
left: (member_expression [84, 6] - [84, 13]
object: (identifier [84, 6] - [84, 9])
property: (property_identifier [84, 10] - [84, 13]))
right: (string [84, 18] - [84, 23]
(string_fragment [84, 19] - [84, 22])))
right: (binary_expression [84, 27] - [84, 48]
left: (member_expression [84, 27] - [84, 34]
object: (identifier [84, 27] - [84, 30])
property: (property_identifier [84, 31] - [84, 34]))
right: (string [84, 39] - [84, 48]
(string_fragment [84, 40] - [84, 47]))))
right: (unary_expression [84, 52] - [84, 58]
argument: (member_expression [84, 53] - [84, 58]
object: (identifier [84, 53] - [84, 56])
property: (property_identifier [84, 57] - [84, 58])))))
consequence: (statement_block [84, 60] - [86, 3]
(throw_statement [85, 4] - [85, 59]
(new_expression [85, 10] - [85, 58]
constructor: (identifier [85, 14] - [85, 19])
arguments: (arguments [85, 19] - [85, 58]
(string [85, 20] - [85, 57]
(string_fragment [85, 21] - [85, 56])))))))
(lexical_declaration [88, 2] - [88, 54]
(variable_declarator [88, 8] - [88, 53]
name: (identifier [88, 8] - [88, 19])
value: (await_expression [88, 22] - [88, 53]
(call_expression [88, 28] - [88, 53]
function: (identifier [88, 28] - [88, 48])
arguments: (arguments [88, 48] - [88, 53]
(identifier [88, 49] - [88, 52]))))))
(comment [90, 2] - [90, 40])
(try_statement [91, 2] - [105, 3]
body: (statement_block [91, 6] - [99, 3]
(lexical_declaration [92, 4] - [95, 6]
(variable_declarator [92, 10] - [95, 5]
name: (identifier [92, 10] - [92, 18])
value: (await_expression [92, 21] - [95, 5]
(call_expression [92, 27] - [95, 5]
function: (member_expression [92, 27] - [92, 43]
object: (identifier [92, 27] - [92, 33])
property: (property_identifier [92, 34] - [92, 43]))
arguments: (arguments [92, 43] - [95, 5]
(string [93, 6] - [93, 29]
(string_fragment [93, 7] - [93, 28]))
(identifier [94, 6] - [94, 17]))))))
(if_statement [96, 4] - [98, 5]
condition: (parenthesized_expression [96, 7] - [96, 23]
(binary_expression [96, 8] - [96, 22]
left: (identifier [96, 8] - [96, 16])
right: (number [96, 21] - [96, 22])))
consequence: (statement_block [96, 24] - [98, 5]
(throw_statement [97, 6] - [97, 52]
(new_expression [97, 12] - [97, 51]
constructor: (identifier [97, 16] - [97, 21])
arguments: (arguments [97, 21] - [97, 51]
(string [97, 22] - [97, 50]
(string_fragment [97, 23] - [97, 49]))))))))
handler: (catch_clause [99, 4] - [105, 3]
parameter: (identifier [99, 11] - [99, 14])
type: (type_annotation [99, 14] - [99, 19]
(predefined_type [99, 16] - [99, 19]))
body: (statement_block [99, 21] - [105, 3]
(if_statement [100, 4] - [102, 5]
condition: (parenthesized_expression [100, 7] - [100, 60]
(call_expression [100, 8] - [100, 59]
function: (member_expression [100, 8] - [100, 29]
object: (member_expression [100, 8] - [100, 19]
object: (identifier [100, 8] - [100, 11])
property: (property_identifier [100, 12] - [100, 19]))
optional_chain: (optional_chain [100, 19] - [100, 21])
property: (property_identifier [100, 21] - [100, 29]))
arguments: (arguments [100, 29] - [100, 59]
(string [100, 30] - [100, 58]
(string_fragment [100, 31] - [100, 57])))))
consequence: (statement_block [100, 61] - [102, 5]
(throw_statement [101, 6] - [101, 16]
(identifier [101, 12] - [101, 15]))))
(expression_statement [103, 4] - [103, 70]
(call_expression [103, 4] - [103, 69]
function: (member_expression [103, 4] - [103, 17]
object: (identifier [103, 4] - [103, 11])
property: (property_identifier [103, 12] - [103, 17]))
arguments: (arguments [103, 17] - [103, 69]
(string [103, 18] - [103, 63]
(string_fragment [103, 19] - [103, 62]))
(identifier [103, 65] - [103, 68]))))
(throw_statement [104, 4] - [104, 45]
(new_expression [104, 10] - [104, 44]
constructor: (identifier [104, 14] - [104, 19])
arguments: (arguments [104, 19] - [104, 44]
(string [104, 20] - [104, 43]
(string_fragment [104, 21] - [104, 42]))))))))
(comment [107, 2] - [107, 38])
(lexical_declaration [108, 2] - [108, 31]
(variable_declarator [108, 8] - [108, 30]
name: (identifier [108, 8] - [108, 11])
value: (new_expression [108, 14] - [108, 30]
constructor: (identifier [108, 18] - [108, 21])
arguments: (arguments [108, 21] - [108, 30]
(member_expression [108, 22] - [108, 29]
object: (identifier [108, 22] - [108, 25])
property: (property_identifier [108, 26] - [108, 29]))))))
(lexical_declaration [109, 2] - [109, 25]
(variable_declarator [109, 6] - [109, 24]
name: (identifier [109, 6] - [109, 19])
value: (string [109, 22] - [109, 24])))
(lexical_declaration [111, 2] - [111, 65]
(variable_declarator [111, 8] - [111, 64]
name: (identifier [111, 8] - [111, 24])
value: (call_expression [111, 27] - [111, 64]
function: (member_expression [111, 27] - [111, 42]
object: (member_expression [111, 27] - [111, 38]
object: (identifier [111, 27] - [111, 30])
property: (property_identifier [111, 31] - [111, 38]))
property: (property_identifier [111, 39] - [111, 42]))
arguments: (arguments [111, 42] - [111, 64]
(string [111, 43] - [111, 63]
(string_fragment [111, 44] - [111, 62]))))))
(lexical_declaration [112, 2] - [112, 59]
(variable_declarator [112, 8] - [112, 58]
name: (identifier [112, 8] - [112, 21])
value: (call_expression [112, 24] - [112, 58]
function: (member_expression [112, 24] - [112, 39]
object: (member_expression [112, 24] - [112, 35]
object: (identifier [112, 24] - [112, 27])
property: (property_identifier [112, 28] - [112, 35]))
property: (property_identifier [112, 36] - [112, 39]))
arguments: (arguments [112, 39] - [112, 58]
(string [112, 40] - [112, 57]
(string_fragment [112, 41] - [112, 56]))))))
(lexical_declaration [113, 2] - [113, 61]
(variable_declarator [113, 8] - [113, 60]
name: (identifier [113, 8] - [113, 22])
value: (call_expression [113, 25] - [113, 60]
function: (member_expression [113, 25] - [113, 40]
object: (member_expression [113, 25] - [113, 36]
object: (identifier [113, 25] - [113, 28])
property: (property_identifier [113, 29] - [113, 36]))
property: (property_identifier [113, 37] - [113, 40]))
arguments: (arguments [113, 40] - [113, 60]
(string [113, 41] - [113, 59]
(string_fragment [113, 42] - [113, 58]))))))
(lexical_declaration [115, 2] - [115, 56]
(variable_declarator [115, 8] - [115, 55]
name: (identifier [115, 8] - [115, 22])
value: (binary_expression [115, 25] - [115, 55]
left: (identifier [115, 25] - [115, 41])
right: (member_expression [115, 45] - [115, 55]
object: (identifier [115, 45] - [115, 48])
property: (property_identifier [115, 49] - [115, 55])))))
(lexical_declaration [116, 2] - [119, 32]
(variable_declarator [116, 8] - [119, 31]
name: (identifier [116, 8] - [116, 20])
value: (ternary_expression [116, 23] - [119, 31]
condition: (identifier [116, 23] - [116, 36])
consequence: (binary_expression [117, 6] - [118, 55]
left: (member_expression [117, 6] - [117, 57]
object: (new_expression [117, 6] - [117, 48]
constructor: (identifier [117, 10] - [117, 13])
arguments: (arguments [117, 13] - [117, 48]
(identifier [117, 14] - [117, 27])
(string [117, 29] - [117, 47]
(string_fragment [117, 30] - [117, 46]))))
property: (property_identifier [117, 49] - [117, 57]))
right: (member_expression [118, 6] - [118, 55]
object: (new_expression [118, 6] - [118, 48]
constructor: (identifier [118, 10] - [118, 13])
arguments: (arguments [118, 13] - [118, 48]
(identifier [118, 14] - [118, 27])
(string [118, 29] - [118, 47]
(string_fragment [118, 30] - [118, 46]))))
property: (property_identifier [118, 49] - [118, 55])))
alternative: (binary_expression [119, 6] - [119, 31]
left: (member_expression [119, 6] - [119, 18]
object: (identifier [119, 6] - [119, 9])
property: (property_identifier [119, 10] - [119, 18]))
right: (member_expression [119, 21] - [119, 31]
object: (identifier [119, 21] - [119, 24])
property: (property_identifier [119, 25] - [119, 31]))))))
(lexical_declaration [120, 2] - [120, 77]
(variable_declarator [120, 8] - [120, 76]
name: (identifier [120, 8] - [120, 20])
value: (binary_expression [120, 23] - [120, 76]
left: (binary_expression [120, 23] - [120, 64]
left: (identifier [120, 23] - [120, 37])
right: (call_expression [120, 41] - [120, 64]
function: (member_expression [120, 41] - [120, 56]
object: (member_expression [120, 41] - [120, 52]
object: (identifier [120, 41] - [120, 44])
property: (property_identifier [120, 45] - [120, 52]))
property: (property_identifier [120, 53] - [120, 56]))
arguments: (arguments [120, 56] - [120, 64]
(string [120, 57] - [120, 63]
(string_fragment [120, 58] - [120, 62])))))
right: (member_expression [120, 68] - [120, 76]
object: (identifier [120, 68] - [120, 71])
property: (property_identifier [120, 72] - [120, 76])))))
(for_in_statement [122, 2] - [136, 3]
left: (identifier [122, 13] - [122, 17])
right: (identifier [122, 21] - [122, 31])
body: (statement_block [122, 33] - [136, 3]
(if_statement [123, 4] - [135, 5]
condition: (parenthesized_expression [123, 7] - [123, 27]
(binary_expression [123, 8] - [123, 26]
left: (identifier [123, 8] - [123, 12])
right: (string [123, 17] - [123, 26]
(string_fragment [123, 18] - [123, 25]))))
consequence: (statement_block [123, 28] - [125, 5]
(expression_statement [124, 6] - [124, 70]
(augmented_assignment_expression [124, 6] - [124, 69]
left: (identifier [124, 6] - [124, 19])
right: (template_string [124, 23] - [124, 69]
(string_fragment [124, 24] - [124, 35])
(template_substitution [124, 35] - [124, 66]
(call_expression [124, 37] - [124, 65]
function: (member_expression [124, 37] - [124, 63]
object: (identifier [124, 37] - [124, 51])
property: (property_identifier [124, 52] - [124, 63]))
arguments: (arguments [124, 63] - [124, 65])))
(escape_sequence [124, 66] - [124, 68])))))
alternative: (else_clause [125, 6] - [135, 5]
(if_statement [125, 11] - [135, 5]
condition: (parenthesized_expression [125, 14] - [125, 32]
(binary_expression [125, 15] - [125, 31]
left: (identifier [125, 15] - [125, 19])
right: (string [125, 24] - [125, 31]
(string_fragment [125, 25] - [125, 30]))))
consequence: (statement_block [125, 33] - [127, 5]
(expression_statement [126, 6] - [126, 52]
(augmented_assignment_expression [126, 6] - [126, 51]
left: (identifier [126, 6] - [126, 19])
right: (template_string [126, 23] - [126, 51]
(string_fragment [126, 24] - [126, 33])
(template_substitution [126, 33] - [126, 48]
(identifier [126, 35] - [126, 47]))
(escape_sequence [126, 48] - [126, 50])))))
alternative: (else_clause [127, 6] - [135, 5]
(if_statement [127, 11] - [135, 5]
condition: (parenthesized_expression [127, 14] - [127, 37]
(binary_expression [127, 15] - [127, 36]
left: (identifier [127, 15] - [127, 19])
right: (string [127, 24] - [127, 36]
(string_fragment [127, 25] - [127, 35]))))
consequence: (statement_block [127, 38] - [129, 5]
(expression_statement [128, 6] - [128, 57]
(augmented_assignment_expression [128, 6] - [128, 56]
left: (identifier [128, 6] - [128, 19])
right: (template_string [128, 23] - [128, 56]
(string_fragment [128, 24] - [128, 38])
(template_substitution [128, 38] - [128, 53]
(identifier [128, 40] - [128, 52]))
(escape_sequence [128, 53] - [128, 55])))))
alternative: (else_clause [129, 6] - [135, 5]
(statement_block [129, 11] - [135, 5]
(lexical_declaration [130, 6] - [130, 46]
(variable_declarator [130, 12] - [130, 45]
name: (identifier [130, 12] - [130, 21])
value: (call_expression [130, 24] - [130, 45]
function: (member_expression [130, 24] - [130, 39]
object: (member_expression [130, 24] - [130, 35]
object: (identifier [130, 24] - [130, 27])
property: (property_identifier [130, 28] - [130, 35]))
property: (property_identifier [130, 36] - [130, 39]))
arguments: (arguments [130, 39] - [130, 45]
(identifier [130, 40] - [130, 44])))))
(if_statement [131, 6] - [133, 7]
condition: (parenthesized_expression [131, 9] - [131, 29]
(binary_expression [131, 10] - [131, 28]
left: (identifier [131, 10] - [131, 19])
right: (null [131, 24] - [131, 28])))
consequence: (statement_block [131, 30] - [133, 7]
(throw_statement [132, 8] - [132, 73]
(new_expression [132, 14] - [132, 72]
constructor: (identifier [132, 18] - [132, 23])
arguments: (arguments [132, 23] - [132, 72]
(template_string [132, 24] - [132, 71]
(string_fragment [132, 25] - [132, 63])
(template_substitution [132, 63] - [132, 70]
(identifier [132, 65] - [132, 69]))))))))
(expression_statement [134, 6] - [134, 51]
(augmented_assignment_expression [134, 6] - [134, 50]
left: (identifier [134, 6] - [134, 19])
right: (template_string [134, 23] - [134, 50]
(string_fragment [134, 24] - [134, 25])
(template_substitution [134, 25] - [134, 32]
(identifier [134, 27] - [134, 31]))
(string_fragment [134, 32] - [134, 35])
(template_substitution [134, 35] - [134, 47]
(identifier [134, 37] - [134, 46]))
(escape_sequence [134, 47] - [134, 49])))))))))))))
(expression_statement [138, 2] - [138, 73]
(augmented_assignment_expression [138, 2] - [138, 72]
left: (identifier [138, 2] - [138, 15])
right: (template_string [138, 19] - [138, 72]
(string_fragment [138, 20] - [138, 42])
(template_substitution [138, 42] - [138, 58]
(identifier [138, 44] - [138, 57]))
(string_fragment [138, 58] - [138, 59])
(template_substitution [138, 59] - [138, 71]
(identifier [138, 61] - [138, 70])))))
(comment [140, 2] - [140, 28])
(lexical_declaration [141, 2] - [141, 58]
(variable_declarator [141, 8] - [141, 57]
name: (identifier [141, 8] - [141, 21])
value: (call_expression [141, 24] - [141, 57]
function: (member_expression [141, 24] - [141, 39]
object: (identifier [141, 24] - [141, 33])
property: (property_identifier [141, 34] - [141, 39]))
arguments: (arguments [141, 39] - [141, 57]
(regex [141, 40] - [141, 56]
pattern: (regex_pattern [141, 41] - [141, 55]))))))
(if_statement [142, 2] - [144, 3]
condition: (parenthesized_expression [142, 5] - [142, 21]
(unary_expression [142, 6] - [142, 20]
argument: (identifier [142, 7] - [142, 20])))
consequence: (statement_block [142, 22] - [144, 3]
(throw_statement [143, 4] - [143, 55]
(new_expression [143, 10] - [143, 54]
constructor: (identifier [143, 14] - [143, 19])
arguments: (arguments [143, 19] - [143, 54]
(string [143, 20] - [143, 53]
(string_fragment [143, 21] - [143, 52])))))))
(lexical_declaration [146, 2] - [146, 39]
(variable_declarator [146, 8] - [146, 38]
name: (identifier [146, 8] - [146, 19])
value: (subscript_expression [146, 22] - [146, 38]
object: (identifier [146, 22] - [146, 35])
index: (number [146, 36] - [146, 37]))))
(lexical_declaration [147, 2] - [147, 15]
(variable_declarator [147, 6] - [147, 14]
name: (identifier [147, 6] - [147, 14])))
(try_statement [148, 2] - [156, 3]
body: (statement_block [148, 6] - [154, 3]
(lexical_declaration [149, 4] - [149, 75]
(variable_declarator [149, 10] - [149, 74]
name: (identifier [149, 10] - [149, 16])
value: (call_expression [149, 19] - [149, 74]
function: (identifier [149, 19] - [149, 23])
arguments: (arguments [149, 23] - [149, 74]
(call_expression [149, 24] - [149, 73]
function: (member_expression [149, 24] - [149, 62]
object: (call_expression [149, 24] - [149, 54]
function: (member_expression [149, 24] - [149, 43]
object: (identifier [149, 24] - [149, 35])
property: (property_identifier [149, 36] - [149, 43]))
arguments: (arguments [149, 43] - [149, 54]
(regex [149, 44] - [149, 48]
pattern: (regex_pattern [149, 45] - [149, 46])
flags: (regex_flags [149, 47] - [149, 48]))
(string [149, 50] - [149, 53]
(string_fragment [149, 51] - [149, 52]))))
property: (property_identifier [149, 55] - [149, 62]))
arguments: (arguments [149, 62] - [149, 73]
(regex [149, 63] - [149, 67]
pattern: (regex_pattern [149, 64] - [149, 65])
flags: (regex_flags [149, 66] - [149, 67]))
(string [149, 69] - [149, 72]
(string_fragment [149, 70] - [149, 71]))))))))
(expression_statement [150, 4] - [150, 45]
(assignment_expression [150, 4] - [150, 44]
left: (identifier [150, 4] - [150, 12])
right: (new_expression [150, 15] - [150, 44]
constructor: (identifier [150, 19] - [150, 29])
arguments: (arguments [150, 29] - [150, 44]
(member_expression [150, 30] - [150, 43]
object: (identifier [150, 30] - [150, 36])
property: (property_identifier [150, 37] - [150, 43]))))))
(for_statement [151, 4] - [153, 5]
initializer: (lexical_declaration [151, 9] - [151, 19]
(variable_declarator [151, 13] - [151, 18]
name: (identifier [151, 13] - [151, 14])
value: (number [151, 17] - [151, 18])))
condition: (binary_expression [151, 20] - [151, 37]
left: (identifier [151, 20] - [151, 21])
right: (member_expression [151, 24] - [151, 37]
object: (identifier [151, 24] - [151, 30])
property: (property_identifier [151, 31] - [151, 37])))
increment: (update_expression [151, 39] - [151, 42]
argument: (identifier [151, 39] - [151, 40]))
body: (statement_block [151, 44] - [153, 5]
(expression_statement [152, 6] - [152, 41]
(assignment_expression [152, 6] - [152, 40]
left: (subscript_expression [152, 6] - [152, 17]
object: (identifier [152, 6] - [152, 14])
index: (identifier [152, 15] - [152, 16]))
right: (call_expression [152, 20] - [152, 40]
function: (member_expression [152, 20] - [152, 37]
object: (identifier [152, 20] - [152, 26])
property: (property_identifier [152, 27] - [152, 37]))
arguments: (arguments [152, 37] - [152, 40]
(identifier [152, 38] - [152, 39]))))))))
handler: (catch_clause [154, 4] - [156, 3]
body: (statement_block [154, 10] - [156, 3]
(throw_statement [155, 4] - [155, 60]
(new_expression [155, 10] - [155, 59]
constructor: (identifier [155, 14] - [155, 19])
arguments: (arguments [155, 19] - [155, 59]
(string [155, 20] - [155, 58]
(string_fragment [155, 21] - [155, 57]))))))))
(lexical_declaration [158, 2] - [164, 4]
(variable_declarator [158, 8] - [164, 3]
name: (identifier [158, 8] - [158, 19])
value: (await_expression [158, 22] - [164, 3]
(call_expression [158, 28] - [164, 3]
function: (member_expression [158, 28] - [158, 51]
object: (member_expression [158, 28] - [158, 41]
object: (identifier [158, 28] - [158, 34])
property: (property_identifier [158, 35] - [158, 41]))
property: (property_identifier [158, 42] - [158, 51]))
arguments: (arguments [158, 51] - [164, 3]
(string [159, 4] - [159, 9]
(string_fragment [159, 5] - [159, 8]))
(identifier [160, 4] - [160, 7])
(object [161, 4] - [161, 23]
(pair [161, 6] - [161, 21]
key: (property_identifier [161, 6] - [161, 10])
value: (string [161, 12] - [161, 21]
(string_fragment [161, 13] - [161, 20]))))
(false [162, 4] - [162, 9])
(array [163, 4] - [163, 14]
(string [163, 5] - [163, 13]
(string_fragment [163, 6] - [163, 12]))))))))
(lexical_declaration [166, 2] - [166, 59]
(variable_declarator [166, 8] - [166, 58]
name: (identifier [166, 8] - [166, 16])
value: (call_expression [166, 19] - [166, 58]
function: (member_expression [166, 19] - [166, 43]
object: (new_expression [166, 19] - [166, 36]
constructor: (identifier [166, 23] - [166, 34])
arguments: (arguments [166, 34] - [166, 36]))
property: (property_identifier [166, 37] - [166, 43]))
arguments: (arguments [166, 43] - [166, 58]
(identifier [166, 44] - [166, 57])))))
(lexical_declaration [167, 2] - [172, 4]
(variable_declarator [167, 8] - [172, 3]
name: (identifier [167, 8] - [167, 15])
value: (await_expression [167, 18] - [172, 3]
(call_expression [167, 24] - [172, 3]
function: (member_expression [167, 24] - [167, 44]
object: (member_expression [167, 24] - [167, 37]
object: (identifier [167, 24] - [167, 30])
property: (property_identifier [167, 31] - [167, 37]))
property: (property_identifier [167, 38] - [167, 44]))
arguments: (arguments [167, 44] - [172, 3]
(string [168, 4] - [168, 13]
(string_fragment [168, 5] - [168, 12]))
(identifier [169, 4] - [169, 15])
(identifier [170, 4] - [170, 12])
(identifier [171, 4] - [171, 12]))))))
(if_statement [174, 2] - [176, 3]
condition: (parenthesized_expression [174, 5] - [174, 15]
(unary_expression [174, 6] - [174, 14]
argument: (identifier [174, 7] - [174, 14])))
consequence: (statement_block [174, 16] - [176, 3]
(throw_statement [175, 4] - [175, 55]
(new_expression [175, 10] - [175, 54]
constructor: (identifier [175, 14] - [175, 19])
arguments: (arguments [175, 19] - [175, 54]
(string [175, 20] - [175, 53]
(string_fragment [175, 21] - [175, 52])))))))
(return_statement [178, 2] - [178, 21]
(identifier [178, 9] - [178, 20]))))))

View File

@ -1,724 +0,0 @@
(program [0, 0] - [190, 0]
(import_statement [0, 0] - [0, 68]
(import_clause [0, 7] - [0, 30]
(named_imports [0, 7] - [0, 30]
(import_specifier [0, 9] - [0, 28]
name: (identifier [0, 9] - [0, 28]))))
source: (string [0, 36] - [0, 67]
(string_fragment [0, 37] - [0, 66])))
(export_statement [2, 0] - [189, 2]
declaration: (lexical_declaration [2, 7] - [189, 2]
(variable_declarator [2, 13] - [189, 1]
name: (identifier [2, 13] - [2, 37])
value: (arrow_function [2, 40] - [189, 1]
parameters: (formal_parameters [2, 40] - [10, 2]
(required_parameter [2, 41] - [10, 1]
pattern: (object_pattern [2, 41] - [6, 1]
(object_assignment_pattern [3, 2] - [3, 14]
left: (shorthand_property_identifier_pattern [3, 2] - [3, 9])
right: (array [3, 12] - [3, 14]))
(object_assignment_pattern [4, 2] - [4, 11]
left: (shorthand_property_identifier_pattern [4, 2] - [4, 6])
right: (array [4, 9] - [4, 11]))
(object_assignment_pattern [5, 2] - [5, 15]
left: (shorthand_property_identifier_pattern [5, 2] - [5, 10])
right: (array [5, 13] - [5, 15])))
type: (type_annotation [6, 1] - [10, 1]
(object_type [6, 3] - [10, 1]
(property_signature [7, 2] - [7, 17]
name: (property_identifier [7, 2] - [7, 9])
type: (type_annotation [7, 10] - [7, 17]
(array_type [7, 12] - [7, 17]
(predefined_type [7, 12] - [7, 15]))))
(property_signature [8, 2] - [8, 14]
name: (property_identifier [8, 2] - [8, 6])
type: (type_annotation [8, 7] - [8, 14]
(array_type [8, 9] - [8, 14]
(predefined_type [8, 9] - [8, 12]))))
(property_signature [9, 2] - [9, 18]
name: (property_identifier [9, 2] - [9, 10])
type: (type_annotation [9, 11] - [9, 18]
(array_type [9, 13] - [9, 18]
(predefined_type [9, 13] - [9, 16]))))))))
body: (statement_block [10, 6] - [189, 1]
(return_statement [11, 2] - [188, 4]
(parenthesized_expression [11, 9] - [188, 3]
(jsx_element [12, 4] - [187, 26]
open_tag: (jsx_opening_element [12, 4] - [15, 5]
name: (identifier [12, 5] - [12, 24])
attribute: (jsx_attribute [13, 6] - [13, 40]
(property_identifier [13, 6] - [13, 11])
(string [13, 12] - [13, 40]
(string_fragment [13, 13] - [13, 39])))
attribute: (jsx_attribute [14, 6] - [14, 34]
(property_identifier [14, 6] - [14, 17])
(string [14, 18] - [14, 34]
(string_fragment [14, 19] - [14, 33]))))
(jsx_element [16, 6] - [34, 12]
open_tag: (jsx_opening_element [16, 6] - [16, 142]
name: (identifier [16, 7] - [16, 10])
attribute: (jsx_attribute [16, 11] - [16, 141]
(property_identifier [16, 11] - [16, 16])
(string [16, 17] - [16, 141]
(string_fragment [16, 18] - [16, 140]))))
(jsx_element [17, 8] - [24, 14]
open_tag: (jsx_opening_element [17, 8] - [17, 13]
name: (identifier [17, 9] - [17, 12]))
(jsx_element [18, 10] - [20, 15]
open_tag: (jsx_opening_element [18, 10] - [18, 110]
name: (identifier [18, 11] - [18, 13])
attribute: (jsx_attribute [18, 14] - [18, 109]
(property_identifier [18, 14] - [18, 19])
(string [18, 20] - [18, 109]
(string_fragment [18, 21] - [18, 108]))))
(jsx_text [18, 110] - [19, 19])
(ERROR [19, 19] - [19, 38]
(identifier [19, 21] - [19, 31])
(identifier [19, 32] - [19, 38]))
close_tag: (jsx_closing_element [20, 10] - [20, 15]
name: (identifier [20, 12] - [20, 14])))
(jsx_element [21, 10] - [23, 14]
open_tag: (jsx_opening_element [21, 10] - [21, 82]
name: (identifier [21, 11] - [21, 12])
attribute: (jsx_attribute [21, 13] - [21, 81]
(property_identifier [21, 13] - [21, 18])
(string [21, 19] - [21, 81]
(string_fragment [21, 20] - [21, 80]))))
(jsx_text [21, 82] - [23, 10])
close_tag: (jsx_closing_element [23, 10] - [23, 14]
name: (identifier [23, 12] - [23, 13])))
close_tag: (jsx_closing_element [24, 8] - [24, 14]
name: (identifier [24, 10] - [24, 13])))
(jsx_element [26, 8] - [33, 17]
open_tag: (jsx_opening_element [26, 8] - [31, 9]
name: (identifier [26, 9] - [26, 15])
attribute: (jsx_attribute [27, 10] - [27, 23]
(property_identifier [27, 10] - [27, 14])
(string [27, 15] - [27, 23]
(string_fragment [27, 16] - [27, 22])))
attribute: (jsx_attribute [28, 10] - [28, 29]
(property_identifier [28, 10] - [28, 15])
(string [28, 16] - [28, 29]
(string_fragment [28, 17] - [28, 28])))
attribute: (jsx_attribute [29, 10] - [29, 35]
(property_identifier [29, 10] - [29, 15])
(string [29, 16] - [29, 35]
(string_fragment [29, 17] - [29, 34])))
attribute: (jsx_attribute [30, 10] - [30, 44]
(property_identifier [30, 10] - [30, 17])
(string [30, 18] - [30, 44]
(string_fragment [30, 19] - [30, 43]))))
(jsx_text [31, 9] - [33, 8])
close_tag: (jsx_closing_element [33, 8] - [33, 17]
name: (identifier [33, 10] - [33, 16])))
close_tag: (jsx_closing_element [34, 6] - [34, 12]
name: (identifier [34, 8] - [34, 11])))
(jsx_expression [36, 6] - [36, 38]
(comment [36, 7] - [36, 37]))
(jsx_element [37, 6] - [116, 12]
open_tag: (jsx_opening_element [37, 6] - [41, 7]
name: (identifier [37, 7] - [37, 10])
attribute: (jsx_attribute [38, 8] - [38, 25]
(property_identifier [38, 8] - [38, 10])
(string [38, 11] - [38, 25]
(string_fragment [38, 12] - [38, 24])))
attribute: (jsx_attribute [39, 8] - [39, 20]
(property_identifier [39, 8] - [39, 13])
(string [39, 14] - [39, 20]
(string_fragment [39, 15] - [39, 19])))
attribute: (jsx_attribute [40, 8] - [40, 92]
(property_identifier [40, 8] - [40, 13])
(string [40, 14] - [40, 92]
(string_fragment [40, 15] - [40, 91]))))
(jsx_element [42, 8] - [53, 14]
open_tag: (jsx_opening_element [42, 8] - [42, 110]
name: (identifier [42, 9] - [42, 12])
attribute: (jsx_attribute [42, 13] - [42, 109]
(property_identifier [42, 13] - [42, 18])
(string [42, 19] - [42, 109]
(string_fragment [42, 20] - [42, 108]))))
(jsx_element [43, 10] - [45, 15]
open_tag: (jsx_opening_element [43, 10] - [43, 61]
name: (identifier [43, 11] - [43, 13])
attribute: (jsx_attribute [43, 14] - [43, 60]
(property_identifier [43, 14] - [43, 19])
(string [43, 20] - [43, 60]
(string_fragment [43, 21] - [43, 59]))))
(jsx_text [43, 61] - [45, 10])
close_tag: (jsx_closing_element [45, 10] - [45, 15]
name: (identifier [45, 12] - [45, 14])))
(jsx_element [46, 10] - [52, 19]
open_tag: (jsx_opening_element [46, 10] - [50, 11]
name: (identifier [46, 11] - [46, 17])
attribute: (jsx_attribute [47, 12] - [47, 25]
(property_identifier [47, 12] - [47, 16])
(string [47, 17] - [47, 25]
(string_fragment [47, 18] - [47, 24])))
attribute: (jsx_attribute [48, 12] - [48, 46]
(property_identifier [48, 12] - [48, 19])
(string [48, 20] - [48, 46]
(string_fragment [48, 21] - [48, 45])))
attribute: (jsx_attribute [49, 12] - [49, 114]
(property_identifier [49, 12] - [49, 17])
(string [49, 18] - [49, 114]
(string_fragment [49, 19] - [49, 113]))))
(html_character_reference [51, 12] - [51, 19])
close_tag: (jsx_closing_element [52, 10] - [52, 19]
name: (identifier [52, 12] - [52, 18])))
close_tag: (jsx_closing_element [53, 8] - [53, 14]
name: (identifier [53, 10] - [53, 13])))
(jsx_element [55, 8] - [115, 15]
open_tag: (jsx_opening_element [55, 8] - [55, 73]
name: (identifier [55, 9] - [55, 13])
attribute: (jsx_attribute [55, 14] - [55, 35]
(property_identifier [55, 14] - [55, 16])
(string [55, 17] - [55, 35]
(string_fragment [55, 18] - [55, 34])))
attribute: (jsx_attribute [55, 36] - [55, 72]
(property_identifier [55, 36] - [55, 44])
(string [55, 45] - [55, 72]
(string_fragment [55, 46] - [55, 71]))))
(jsx_element [56, 10] - [100, 16]
open_tag: (jsx_opening_element [56, 10] - [56, 131]
name: (identifier [56, 11] - [56, 14])
attribute: (jsx_attribute [56, 15] - [56, 130]
(property_identifier [56, 15] - [56, 20])
(string [56, 21] - [56, 130]
(string_fragment [56, 22] - [56, 129]))))
(jsx_element [57, 12] - [72, 18]
open_tag: (jsx_opening_element [57, 12] - [57, 17]
name: (identifier [57, 13] - [57, 16]))
(jsx_element [58, 14] - [60, 22]
open_tag: (jsx_opening_element [58, 14] - [58, 137]
name: (identifier [58, 15] - [58, 20])
attribute: (jsx_attribute [58, 21] - [58, 136]
(property_identifier [58, 21] - [58, 26])
(string [58, 27] - [58, 136]
(string_fragment [58, 28] - [58, 135]))))
(jsx_text [58, 137] - [60, 14])
close_tag: (jsx_closing_element [60, 14] - [60, 22]
name: (identifier [60, 16] - [60, 21])))
(jsx_element [61, 14] - [71, 23]
open_tag: (jsx_opening_element [61, 14] - [64, 15]
name: (identifier [61, 15] - [61, 21])
attribute: (jsx_attribute [62, 16] - [62, 36]
(property_identifier [62, 16] - [62, 18])
(string [62, 19] - [62, 36]
(string_fragment [62, 20] - [62, 35])))
attribute: (jsx_attribute [63, 16] - [63, 195]
(property_identifier [63, 16] - [63, 21])
(string [63, 22] - [63, 195]
(string_fragment [63, 23] - [63, 194]))))
(jsx_element [65, 16] - [65, 68]
open_tag: (jsx_opening_element [65, 16] - [65, 33]
name: (identifier [65, 17] - [65, 23])
attribute: (jsx_attribute [65, 24] - [65, 32]
(property_identifier [65, 24] - [65, 29])
(string [65, 30] - [65, 32])))
(jsx_text [65, 33] - [65, 59])
close_tag: (jsx_closing_element [65, 59] - [65, 68]
name: (identifier [65, 61] - [65, 67])))
(jsx_expression [66, 16] - [70, 19]
(call_expression [66, 17] - [70, 18]
function: (member_expression [66, 17] - [66, 25]
object: (identifier [66, 17] - [66, 21])
property: (property_identifier [66, 22] - [66, 25]))
arguments: (arguments [66, 25] - [70, 18]
(arrow_function [66, 26] - [70, 17]
parameters: (formal_parameters [66, 26] - [66, 36]
(required_parameter [66, 27] - [66, 35]
pattern: (identifier [66, 27] - [66, 30])
type: (type_annotation [66, 30] - [66, 35]
(predefined_type [66, 32] - [66, 35]))))
body: (parenthesized_expression [66, 40] - [70, 17]
(jsx_element [67, 18] - [69, 27]
open_tag: (jsx_opening_element [67, 18] - [67, 54]
name: (identifier [67, 19] - [67, 25])
attribute: (jsx_attribute [67, 26] - [67, 40]
(property_identifier [67, 26] - [67, 31])
(jsx_expression [67, 32] - [67, 40]
(member_expression [67, 33] - [67, 39]
object: (identifier [67, 33] - [67, 36])
property: (property_identifier [67, 37] - [67, 39]))))
attribute: (jsx_attribute [67, 41] - [67, 53]
(property_identifier [67, 41] - [67, 44])
(jsx_expression [67, 45] - [67, 53]
(member_expression [67, 46] - [67, 52]
object: (identifier [67, 46] - [67, 49])
property: (property_identifier [67, 50] - [67, 52])))))
(jsx_expression [68, 20] - [68, 30]
(member_expression [68, 21] - [68, 29]
object: (identifier [68, 21] - [68, 24])
property: (property_identifier [68, 25] - [68, 29])))
(jsx_text [68, 30] - [68, 32])
(jsx_expression [68, 32] - [68, 58]
(binary_expression [68, 33] - [68, 57]
left: (member_expression [68, 33] - [68, 43]
object: (identifier [68, 33] - [68, 36])
property: (property_identifier [68, 37] - [68, 43]))
right: (string [68, 47] - [68, 57]
(string_fragment [68, 48] - [68, 56]))))
(jsx_text [68, 58] - [69, 18])
close_tag: (jsx_closing_element [69, 18] - [69, 27]
name: (identifier [69, 20] - [69, 26]))))))))
close_tag: (jsx_closing_element [71, 14] - [71, 23]
name: (identifier [71, 16] - [71, 22])))
close_tag: (jsx_closing_element [72, 12] - [72, 18]
name: (identifier [72, 14] - [72, 17])))
(jsx_element [73, 12] - [87, 18]
open_tag: (jsx_opening_element [73, 12] - [73, 17]
name: (identifier [73, 13] - [73, 16]))
(jsx_element [74, 14] - [76, 22]
open_tag: (jsx_opening_element [74, 14] - [74, 137]
name: (identifier [74, 15] - [74, 20])
attribute: (jsx_attribute [74, 21] - [74, 136]
(property_identifier [74, 21] - [74, 26])
(string [74, 27] - [74, 136]
(string_fragment [74, 28] - [74, 135]))))
(jsx_text [74, 137] - [76, 14])
close_tag: (jsx_closing_element [76, 14] - [76, 22]
name: (identifier [76, 16] - [76, 21])))
(jsx_element [77, 14] - [86, 23]
open_tag: (jsx_opening_element [77, 14] - [80, 15]
name: (identifier [77, 15] - [77, 21])
attribute: (jsx_attribute [78, 16] - [78, 37]
(property_identifier [78, 16] - [78, 18])
(string [78, 19] - [78, 37]
(string_fragment [78, 20] - [78, 36])))
attribute: (jsx_attribute [79, 16] - [79, 195]
(property_identifier [79, 16] - [79, 21])
(string [79, 22] - [79, 195]
(string_fragment [79, 23] - [79, 194]))))
(jsx_element [81, 16] - [81, 66]
open_tag: (jsx_opening_element [81, 16] - [81, 37]
name: (identifier [81, 17] - [81, 23])
attribute: (jsx_attribute [81, 24] - [81, 36]
(property_identifier [81, 24] - [81, 29])
(string [81, 30] - [81, 36]
(string_fragment [81, 31] - [81, 35]))))
(jsx_text [81, 37] - [81, 57])
close_tag: (jsx_closing_element [81, 57] - [81, 66]
name: (identifier [81, 59] - [81, 65])))
(jsx_element [82, 16] - [82, 68]
open_tag: (jsx_opening_element [82, 16] - [82, 38]
name: (identifier [82, 17] - [82, 23])
attribute: (jsx_attribute [82, 24] - [82, 37]
(property_identifier [82, 24] - [82, 29])
(string [82, 30] - [82, 37]
(string_fragment [82, 31] - [82, 36]))))
(jsx_text [82, 38] - [82, 59])
close_tag: (jsx_closing_element [82, 59] - [82, 68]
name: (identifier [82, 61] - [82, 67])))
(jsx_expression [83, 16] - [85, 19]
(call_expression [83, 17] - [85, 18]
function: (member_expression [83, 17] - [83, 29]
object: (identifier [83, 17] - [83, 25])
property: (property_identifier [83, 26] - [83, 29]))
arguments: (arguments [83, 29] - [85, 18]
(arrow_function [83, 30] - [85, 17]
parameters: (formal_parameters [83, 30] - [83, 38]
(required_parameter [83, 31] - [83, 37]
pattern: (identifier [83, 31] - [83, 32])
type: (type_annotation [83, 32] - [83, 37]
(predefined_type [83, 34] - [83, 37]))))
body: (parenthesized_expression [83, 42] - [85, 17]
(jsx_element [84, 18] - [84, 69]
open_tag: (jsx_opening_element [84, 18] - [84, 52]
name: (identifier [84, 19] - [84, 25])
attribute: (jsx_attribute [84, 26] - [84, 40]
(property_identifier [84, 26] - [84, 31])
(jsx_expression [84, 32] - [84, 40]
(member_expression [84, 33] - [84, 39]
object: (identifier [84, 33] - [84, 34])
property: (property_identifier [84, 35] - [84, 39]))))
attribute: (jsx_attribute [84, 41] - [84, 51]
(property_identifier [84, 41] - [84, 44])
(jsx_expression [84, 45] - [84, 51]
(member_expression [84, 46] - [84, 50]
object: (identifier [84, 46] - [84, 47])
property: (property_identifier [84, 48] - [84, 50])))))
(jsx_expression [84, 52] - [84, 60]
(member_expression [84, 53] - [84, 59]
object: (identifier [84, 53] - [84, 54])
property: (property_identifier [84, 55] - [84, 59])))
close_tag: (jsx_closing_element [84, 60] - [84, 69]
name: (identifier [84, 62] - [84, 68]))))))))
close_tag: (jsx_closing_element [86, 14] - [86, 23]
name: (identifier [86, 16] - [86, 22])))
close_tag: (jsx_closing_element [87, 12] - [87, 18]
name: (identifier [87, 14] - [87, 17])))
(jsx_element [88, 12] - [99, 18]
open_tag: (jsx_opening_element [88, 12] - [88, 17]
name: (identifier [88, 13] - [88, 16]))
(jsx_element [89, 14] - [91, 22]
open_tag: (jsx_opening_element [89, 14] - [89, 137]
name: (identifier [89, 15] - [89, 20])
attribute: (jsx_attribute [89, 21] - [89, 136]
(property_identifier [89, 21] - [89, 26])
(string [89, 27] - [89, 136]
(string_fragment [89, 28] - [89, 135]))))
(jsx_text [89, 137] - [91, 14])
close_tag: (jsx_closing_element [91, 14] - [91, 22]
name: (identifier [91, 16] - [91, 21])))
(jsx_self_closing_element [92, 14] - [98, 16]
name: (identifier [92, 15] - [92, 20])
attribute: (jsx_attribute [93, 16] - [93, 29]
(property_identifier [93, 16] - [93, 20])
(string [93, 21] - [93, 29]
(string_fragment [93, 22] - [93, 28])))
attribute: (jsx_attribute [94, 16] - [94, 39]
(property_identifier [94, 16] - [94, 18])
(string [94, 19] - [94, 39]
(string_fragment [94, 20] - [94, 38])))
attribute: (jsx_attribute [95, 16] - [95, 25]
(property_identifier [95, 16] - [95, 21])
(string [95, 22] - [95, 25]
(string_fragment [95, 23] - [95, 24])))
attribute: (jsx_attribute [96, 16] - [96, 23]
(property_identifier [96, 16] - [96, 19])
(string [96, 20] - [96, 23]
(string_fragment [96, 21] - [96, 22])))
attribute: (jsx_attribute [97, 16] - [97, 36]
(property_identifier [97, 16] - [97, 21])
(string [97, 22] - [97, 36]
(string_fragment [97, 23] - [97, 35]))))
close_tag: (jsx_closing_element [99, 12] - [99, 18]
name: (identifier [99, 14] - [99, 17])))
close_tag: (jsx_closing_element [100, 10] - [100, 16]
name: (identifier [100, 12] - [100, 15])))
(jsx_element [102, 10] - [114, 16]
open_tag: (jsx_opening_element [102, 10] - [102, 52]
name: (identifier [102, 11] - [102, 14])
attribute: (jsx_attribute [102, 15] - [102, 51]
(property_identifier [102, 15] - [102, 20])
(string [102, 21] - [102, 51]
(string_fragment [102, 22] - [102, 50]))))
(jsx_element [103, 12] - [105, 21]
open_tag: (jsx_opening_element [103, 12] - [103, 80]
name: (identifier [103, 13] - [103, 19])
attribute: (jsx_attribute [103, 20] - [103, 33]
(property_identifier [103, 20] - [103, 24])
(string [103, 25] - [103, 33]
(string_fragment [103, 26] - [103, 32])))
attribute: (jsx_attribute [103, 34] - [103, 53]
(property_identifier [103, 34] - [103, 39])
(string [103, 40] - [103, 53]
(string_fragment [103, 41] - [103, 52])))
attribute: (jsx_attribute [103, 54] - [103, 79]
(property_identifier [103, 54] - [103, 59])
(string [103, 60] - [103, 79]
(string_fragment [103, 61] - [103, 78]))))
(jsx_text [103, 80] - [105, 12])
close_tag: (jsx_closing_element [105, 12] - [105, 21]
name: (identifier [105, 14] - [105, 20])))
(jsx_element [106, 12] - [113, 21]
open_tag: (jsx_opening_element [106, 12] - [111, 13]
name: (identifier [106, 13] - [106, 19])
attribute: (jsx_attribute [107, 14] - [107, 27]
(property_identifier [107, 14] - [107, 18])
(string [107, 19] - [107, 27]
(string_fragment [107, 20] - [107, 26])))
attribute: (jsx_attribute [108, 14] - [108, 33]
(property_identifier [108, 14] - [108, 19])
(string [108, 20] - [108, 33]
(string_fragment [108, 21] - [108, 32])))
attribute: (jsx_attribute [109, 14] - [109, 48]
(property_identifier [109, 14] - [109, 21])
(string [109, 22] - [109, 48]
(string_fragment [109, 23] - [109, 47])))
attribute: (jsx_attribute [110, 14] - [110, 39]
(property_identifier [110, 14] - [110, 19])
(string [110, 20] - [110, 39]
(string_fragment [110, 21] - [110, 38]))))
(jsx_text [111, 13] - [113, 12])
close_tag: (jsx_closing_element [113, 12] - [113, 21]
name: (identifier [113, 14] - [113, 20])))
close_tag: (jsx_closing_element [114, 10] - [114, 16]
name: (identifier [114, 12] - [114, 15])))
close_tag: (jsx_closing_element [115, 8] - [115, 15]
name: (identifier [115, 10] - [115, 14])))
close_tag: (jsx_closing_element [116, 6] - [116, 12]
name: (identifier [116, 8] - [116, 11])))
(jsx_element [118, 6] - [185, 12]
open_tag: (jsx_opening_element [118, 6] - [118, 24]
name: (identifier [118, 7] - [118, 10])
attribute: (jsx_attribute [118, 11] - [118, 23]
(property_identifier [118, 11] - [118, 16])
(string [118, 17] - [118, 23]
(string_fragment [118, 18] - [118, 22]))))
(jsx_element [119, 8] - [184, 14]
open_tag: (jsx_opening_element [119, 8] - [119, 37]
name: (identifier [119, 9] - [119, 12])
attribute: (jsx_attribute [119, 13] - [119, 36]
(property_identifier [119, 13] - [119, 18])
(string [119, 19] - [119, 36]
(string_fragment [119, 20] - [119, 35]))))
(jsx_element [120, 10] - [183, 18]
open_tag: (jsx_opening_element [120, 10] - [120, 35]
name: (identifier [120, 11] - [120, 16])
attribute: (jsx_attribute [120, 17] - [120, 34]
(property_identifier [120, 17] - [120, 19])
(string [120, 20] - [120, 34]
(string_fragment [120, 21] - [120, 33]))))
(jsx_element [121, 12] - [130, 20]
open_tag: (jsx_opening_element [121, 12] - [121, 19]
name: (identifier [121, 13] - [121, 18]))
(jsx_element [122, 14] - [129, 19]
open_tag: (jsx_opening_element [122, 14] - [122, 18]
name: (identifier [122, 15] - [122, 17]))
(jsx_element [123, 16] - [123, 36]
open_tag: (jsx_opening_element [123, 16] - [123, 20]
name: (identifier [123, 17] - [123, 19]))
(jsx_text [123, 20] - [123, 31])
close_tag: (jsx_closing_element [123, 31] - [123, 36]
name: (identifier [123, 33] - [123, 35])))
(jsx_element [124, 16] - [124, 43]
open_tag: (jsx_opening_element [124, 16] - [124, 20]
name: (identifier [124, 17] - [124, 19]))
(jsx_text [124, 20] - [124, 38])
close_tag: (jsx_closing_element [124, 38] - [124, 43]
name: (identifier [124, 40] - [124, 42])))
(jsx_element [125, 16] - [125, 29]
open_tag: (jsx_opening_element [125, 16] - [125, 20]
name: (identifier [125, 17] - [125, 19]))
(jsx_text [125, 20] - [125, 24])
close_tag: (jsx_closing_element [125, 24] - [125, 29]
name: (identifier [125, 26] - [125, 28])))
(jsx_element [126, 16] - [126, 30]
open_tag: (jsx_opening_element [126, 16] - [126, 20]
name: (identifier [126, 17] - [126, 19]))
(jsx_text [126, 20] - [126, 25])
close_tag: (jsx_closing_element [126, 25] - [126, 30]
name: (identifier [126, 27] - [126, 29])))
(jsx_element [127, 16] - [127, 32]
open_tag: (jsx_opening_element [127, 16] - [127, 20]
name: (identifier [127, 17] - [127, 19]))
(jsx_text [127, 20] - [127, 27])
close_tag: (jsx_closing_element [127, 27] - [127, 32]
name: (identifier [127, 29] - [127, 31])))
(jsx_element [128, 16] - [128, 32]
open_tag: (jsx_opening_element [128, 16] - [128, 20]
name: (identifier [128, 17] - [128, 19]))
(jsx_text [128, 20] - [128, 27])
close_tag: (jsx_closing_element [128, 27] - [128, 32]
name: (identifier [128, 29] - [128, 31])))
close_tag: (jsx_closing_element [129, 14] - [129, 19]
name: (identifier [129, 16] - [129, 18])))
close_tag: (jsx_closing_element [130, 12] - [130, 20]
name: (identifier [130, 14] - [130, 19])))
(jsx_element [131, 12] - [182, 20]
open_tag: (jsx_opening_element [131, 12] - [131, 19]
name: (identifier [131, 13] - [131, 18]))
(jsx_expression [132, 14] - [181, 18]
(ternary_expression [132, 15] - [181, 17]
condition: (binary_expression [132, 15] - [132, 35]
left: (member_expression [132, 15] - [132, 29]
object: (identifier [132, 15] - [132, 22])
property: (property_identifier [132, 23] - [132, 29]))
right: (number [132, 34] - [132, 35]))
consequence: (parenthesized_expression [133, 18] - [142, 17]
(jsx_element [134, 18] - [141, 23]
open_tag: (jsx_opening_element [134, 18] - [134, 22]
name: (identifier [134, 19] - [134, 21]))
(jsx_element [135, 20] - [140, 25]
open_tag: (jsx_opening_element [135, 20] - [138, 21]
name: (identifier [135, 21] - [135, 23])
attribute: (jsx_attribute [136, 22] - [136, 33]
(property_identifier [136, 22] - [136, 29])
(jsx_expression [136, 30] - [136, 33]
(number [136, 31] - [136, 32])))
attribute: (jsx_attribute [137, 22] - [137, 90]
(property_identifier [137, 22] - [137, 27])
(string [137, 28] - [137, 90]
(string_fragment [137, 29] - [137, 89]))))
(jsx_text [138, 21] - [140, 20])
close_tag: (jsx_closing_element [140, 20] - [140, 25]
name: (identifier [140, 22] - [140, 24])))
close_tag: (jsx_closing_element [141, 18] - [141, 23]
name: (identifier [141, 20] - [141, 22]))))
alternative: (parenthesized_expression [143, 18] - [181, 17]
(call_expression [144, 18] - [180, 20]
function: (member_expression [144, 18] - [144, 29]
object: (identifier [144, 18] - [144, 25])
property: (property_identifier [144, 26] - [144, 29]))
arguments: (arguments [144, 29] - [180, 20]
(arrow_function [144, 30] - [180, 19]
parameters: (formal_parameters [144, 30] - [144, 40]
(required_parameter [144, 31] - [144, 39]
pattern: (identifier [144, 31] - [144, 34])
type: (type_annotation [144, 34] - [144, 39]
(predefined_type [144, 36] - [144, 39]))))
body: (parenthesized_expression [144, 44] - [180, 19]
(jsx_element [145, 20] - [179, 25]
open_tag: (jsx_opening_element [145, 20] - [145, 37]
name: (identifier [145, 21] - [145, 23])
attribute: (jsx_attribute [145, 24] - [145, 36]
(property_identifier [145, 24] - [145, 27])
(jsx_expression [145, 28] - [145, 36]
(member_expression [145, 29] - [145, 35]
object: (identifier [145, 29] - [145, 32])
property: (property_identifier [145, 33] - [145, 35])))))
(jsx_element [146, 22] - [150, 27]
open_tag: (jsx_opening_element [146, 22] - [146, 26]
name: (identifier [146, 23] - [146, 25]))
(jsx_element [147, 24] - [149, 31]
open_tag: (jsx_opening_element [147, 24] - [147, 195]
name: (identifier [147, 25] - [147, 29])
attribute: (jsx_attribute [147, 30] - [147, 194]
(property_identifier [147, 30] - [147, 35])
(string [147, 36] - [147, 194]
(string_fragment [147, 37] - [147, 193]))))
(jsx_expression [148, 26] - [148, 36]
(member_expression [148, 27] - [148, 35]
object: (identifier [148, 27] - [148, 30])
property: (property_identifier [148, 31] - [148, 35])))
close_tag: (jsx_closing_element [149, 24] - [149, 31]
name: (identifier [149, 26] - [149, 30])))
close_tag: (jsx_closing_element [150, 22] - [150, 27]
name: (identifier [150, 24] - [150, 26])))
(jsx_element [151, 22] - [159, 27]
open_tag: (jsx_opening_element [151, 22] - [151, 26]
name: (identifier [151, 23] - [151, 25]))
(jsx_expression [152, 24] - [158, 73]
(ternary_expression [152, 25] - [158, 72]
condition: (member_expression [152, 25] - [152, 37]
object: (identifier [152, 25] - [152, 28])
property: (property_identifier [152, 29] - [152, 37]))
consequence: (parenthesized_expression [153, 28] - [157, 27]
(jsx_element [154, 28] - [156, 35]
open_tag: (jsx_opening_element [154, 28] - [154, 62]
name: (identifier [154, 29] - [154, 33])
attribute: (jsx_attribute [154, 34] - [154, 61]
(property_identifier [154, 34] - [154, 39])
(string [154, 40] - [154, 61]
(string_fragment [154, 41] - [154, 60]))))
(jsx_expression [155, 30] - [155, 44]
(member_expression [155, 31] - [155, 43]
object: (identifier [155, 31] - [155, 34])
property: (property_identifier [155, 35] - [155, 43])))
close_tag: (jsx_closing_element [156, 28] - [156, 35]
name: (identifier [156, 30] - [156, 34]))))
alternative: (jsx_element [158, 28] - [158, 72]
open_tag: (jsx_opening_element [158, 28] - [158, 59]
name: (identifier [158, 29] - [158, 33])
attribute: (jsx_attribute [158, 34] - [158, 58]
(property_identifier [158, 34] - [158, 39])
(string [158, 40] - [158, 58]
(string_fragment [158, 41] - [158, 57]))))
(jsx_text [158, 59] - [158, 65])
close_tag: (jsx_closing_element [158, 65] - [158, 72]
name: (identifier [158, 67] - [158, 71])))))
close_tag: (jsx_closing_element [159, 22] - [159, 27]
name: (identifier [159, 24] - [159, 26])))
(jsx_element [160, 22] - [162, 27]
open_tag: (jsx_opening_element [160, 22] - [160, 26]
name: (identifier [160, 23] - [160, 25]))
(jsx_element [161, 24] - [161, 77]
open_tag: (jsx_opening_element [161, 24] - [161, 60]
name: (identifier [161, 25] - [161, 29])
attribute: (jsx_attribute [161, 30] - [161, 59]
(property_identifier [161, 30] - [161, 35])
(string [161, 36] - [161, 59]
(string_fragment [161, 37] - [161, 58]))))
(jsx_expression [161, 60] - [161, 70]
(member_expression [161, 61] - [161, 69]
object: (identifier [161, 61] - [161, 64])
property: (property_identifier [161, 65] - [161, 69])))
close_tag: (jsx_closing_element [161, 70] - [161, 77]
name: (identifier [161, 72] - [161, 76])))
close_tag: (jsx_closing_element [162, 22] - [162, 27]
name: (identifier [162, 24] - [162, 26])))
(jsx_element [163, 22] - [165, 27]
open_tag: (jsx_opening_element [163, 22] - [163, 26]
name: (identifier [163, 23] - [163, 25]))
(jsx_expression [164, 24] - [164, 45]
(binary_expression [164, 25] - [164, 44]
left: (member_expression [164, 25] - [164, 39]
object: (identifier [164, 25] - [164, 28])
property: (property_identifier [164, 29] - [164, 39]))
right: (number [164, 43] - [164, 44])))
(jsx_text [164, 45] - [164, 48])
(jsx_expression [164, 48] - [164, 71]
(binary_expression [164, 49] - [164, 70]
left: (member_expression [164, 49] - [164, 61]
object: (identifier [164, 49] - [164, 52])
property: (property_identifier [164, 53] - [164, 61]))
right: (string [164, 65] - [164, 70]
(string_fragment [164, 66] - [164, 69]))))
close_tag: (jsx_closing_element [165, 22] - [165, 27]
name: (identifier [165, 24] - [165, 26])))
(jsx_element [166, 22] - [168, 27]
open_tag: (jsx_opening_element [166, 22] - [166, 84]
name: (identifier [166, 23] - [166, 25])
attribute: (jsx_attribute [166, 26] - [166, 83]
(property_identifier [166, 26] - [166, 31])
(string [166, 32] - [166, 83]
(string_fragment [166, 33] - [166, 82]))))
(jsx_expression [167, 24] - [167, 71]
(call_expression [167, 25] - [167, 70]
function: (member_expression [167, 25] - [167, 68]
object: (new_expression [167, 25] - [167, 49]
constructor: (identifier [167, 29] - [167, 33])
arguments: (arguments [167, 33] - [167, 49]
(member_expression [167, 34] - [167, 48]
object: (identifier [167, 34] - [167, 37])
property: (property_identifier [167, 38] - [167, 48]))))
property: (property_identifier [167, 50] - [167, 68]))
arguments: (arguments [167, 68] - [167, 70])))
close_tag: (jsx_closing_element [168, 22] - [168, 27]
name: (identifier [168, 24] - [168, 26])))
(jsx_element [169, 22] - [178, 27]
open_tag: (jsx_opening_element [169, 22] - [169, 26]
name: (identifier [169, 23] - [169, 25]))
(jsx_element [170, 24] - [177, 33]
open_tag: (jsx_opening_element [170, 24] - [175, 25]
name: (identifier [170, 25] - [170, 31])
attribute: (jsx_attribute [171, 26] - [171, 39]
(property_identifier [171, 26] - [171, 30])
(string [171, 31] - [171, 39]
(string_fragment [171, 32] - [171, 38])))
attribute: (jsx_attribute [172, 26] - [172, 44]
(property_identifier [172, 26] - [172, 31])
(string [172, 32] - [172, 44]
(string_fragment [172, 33] - [172, 43])))
attribute: (jsx_attribute [173, 26] - [173, 96]
(property_identifier [173, 26] - [173, 31])
(string [173, 32] - [173, 96]
(string_fragment [173, 33] - [173, 95])))
attribute: (jsx_attribute [174, 26] - [174, 63]
(property_identifier [174, 26] - [174, 33])
(jsx_expression [174, 34] - [174, 63]
(template_string [174, 35] - [174, 62]
(string_fragment [174, 36] - [174, 50])
(template_substitution [174, 50] - [174, 59]
(member_expression [174, 52] - [174, 58]
object: (identifier [174, 52] - [174, 55])
property: (property_identifier [174, 56] - [174, 58])))
(string_fragment [174, 59] - [174, 61])))))
(jsx_text [175, 25] - [177, 24])
close_tag: (jsx_closing_element [177, 24] - [177, 33]
name: (identifier [177, 26] - [177, 32])))
close_tag: (jsx_closing_element [178, 22] - [178, 27]
name: (identifier [178, 24] - [178, 26])))
close_tag: (jsx_closing_element [179, 20] - [179, 25]
name: (identifier [179, 22] - [179, 24]))))))))))
close_tag: (jsx_closing_element [182, 12] - [182, 20]
name: (identifier [182, 14] - [182, 19])))
close_tag: (jsx_closing_element [183, 10] - [183, 18]
name: (identifier [183, 12] - [183, 17])))
close_tag: (jsx_closing_element [184, 8] - [184, 14]
name: (identifier [184, 10] - [184, 13])))
close_tag: (jsx_closing_element [185, 6] - [185, 12]
name: (identifier [185, 8] - [185, 11])))
(jsx_element [186, 6] - [186, 54]
open_tag: (jsx_opening_element [186, 6] - [186, 45]
name: (identifier [186, 7] - [186, 13])
attribute: (jsx_attribute [186, 14] - [186, 44]
(property_identifier [186, 14] - [186, 17])
(string [186, 18] - [186, 44]
(string_fragment [186, 19] - [186, 43]))))
close_tag: (jsx_closing_element [186, 45] - [186, 54]
name: (identifier [186, 47] - [186, 53])))
close_tag: (jsx_closing_element [187, 4] - [187, 26]
name: (identifier [187, 6] - [187, 25])))))))))))
/home/tylerg/p/data/auth-yes/src/features/admin/invites_fragments.tsx Parse: 0.49 ms 14772 bytes/ms (ERROR [19, 19] - [19, 38])

View File

@ -1,268 +0,0 @@
(program [0, 0] - [80, 0]
(import_statement [0, 0] - [0, 67]
(import_clause [0, 7] - [0, 29]
(named_imports [0, 7] - [0, 29]
(import_specifier [0, 9] - [0, 27]
name: (identifier [0, 9] - [0, 27]))))
source: (string [0, 35] - [0, 66]
(string_fragment [0, 36] - [0, 65])))
(export_statement [2, 0] - [79, 2]
declaration: (lexical_declaration [2, 7] - [79, 2]
(variable_declarator [2, 13] - [79, 1]
name: (identifier [2, 13] - [2, 34])
value: (arrow_function [2, 37] - [79, 1]
parameters: (formal_parameters [2, 37] - [2, 39])
body: (statement_block [2, 43] - [79, 1]
(return_statement [3, 2] - [78, 4]
(parenthesized_expression [3, 9] - [78, 3]
(jsx_element [4, 4] - [77, 25]
open_tag: (jsx_opening_element [4, 4] - [4, 43]
name: (identifier [4, 5] - [4, 23])
attribute: (jsx_attribute [4, 24] - [4, 42]
(property_identifier [4, 24] - [4, 29])
(string [4, 30] - [4, 42]
(string_fragment [4, 31] - [4, 41]))))
(jsx_element [5, 6] - [74, 12]
open_tag: (jsx_opening_element [5, 6] - [5, 11]
name: (identifier [5, 7] - [5, 10]))
(jsx_element [6, 8] - [32, 14]
open_tag: (jsx_opening_element [6, 8] - [6, 34]
name: (identifier [6, 9] - [6, 12])
attribute: (jsx_attribute [6, 13] - [6, 33]
(property_identifier [6, 13] - [6, 18])
(string [6, 19] - [6, 33]
(string_fragment [6, 20] - [6, 32]))))
(jsx_element [7, 10] - [27, 16]
open_tag: (jsx_opening_element [7, 10] - [10, 11]
name: (identifier [7, 11] - [7, 14])
attribute: (jsx_attribute [8, 12] - [8, 30]
(property_identifier [8, 12] - [8, 17])
(string [8, 18] - [8, 30]
(string_fragment [8, 19] - [8, 29])))
attribute: (jsx_attribute [9, 12] - [9, 76]
(property_identifier [9, 12] - [9, 17])
(string [9, 18] - [9, 76]
(string_fragment [9, 19] - [9, 75]))))
(jsx_element [11, 12] - [26, 18]
open_tag: (jsx_opening_element [11, 12] - [20, 13]
name: (identifier [11, 13] - [11, 16])
attribute: (jsx_attribute [12, 14] - [12, 24]
(property_identifier [12, 14] - [12, 19])
(string [12, 20] - [12, 24]
(string_fragment [12, 21] - [12, 23])))
attribute: (jsx_attribute [13, 14] - [13, 25]
(property_identifier [13, 14] - [13, 20])
(string [13, 21] - [13, 25]
(string_fragment [13, 22] - [13, 24])))
attribute: (jsx_attribute [14, 14] - [14, 33]
(property_identifier [14, 14] - [14, 21])
(string [14, 22] - [14, 33]
(string_fragment [14, 23] - [14, 32])))
attribute: (jsx_attribute [15, 14] - [15, 25]
(property_identifier [15, 14] - [15, 18])
(string [15, 19] - [15, 25]
(string_fragment [15, 20] - [15, 24])))
attribute: (jsx_attribute [16, 14] - [16, 35]
(property_identifier [16, 14] - [16, 20])
(string [16, 21] - [16, 35]
(string_fragment [16, 22] - [16, 34])))
attribute: (jsx_attribute [17, 14] - [17, 32]
(property_identifier [17, 14] - [17, 26])
(string [17, 27] - [17, 32]
(string_fragment [17, 28] - [17, 31])))
attribute: (jsx_attribute [18, 14] - [18, 36]
(property_identifier [18, 14] - [18, 28])
(string [18, 29] - [18, 36]
(string_fragment [18, 30] - [18, 35])))
attribute: (jsx_attribute [19, 14] - [19, 37]
(property_identifier [19, 14] - [19, 29])
(string [19, 30] - [19, 37]
(string_fragment [19, 31] - [19, 36]))))
(jsx_element [21, 14] - [22, 21]
open_tag: (jsx_opening_element [21, 14] - [21, 126]
name: (identifier [21, 15] - [21, 19])
attribute: (jsx_attribute [21, 20] - [21, 125]
(property_identifier [21, 20] - [21, 21])
(string [21, 22] - [21, 125]
(string_fragment [21, 23] - [21, 124]))))
close_tag: (jsx_closing_element [22, 14] - [22, 21]
name: (identifier [22, 16] - [22, 20])))
(jsx_element [23, 14] - [23, 39]
open_tag: (jsx_opening_element [23, 14] - [23, 32]
name: (identifier [23, 15] - [23, 19])
attribute: (jsx_attribute [23, 20] - [23, 31]
(property_identifier [23, 20] - [23, 21])
(string [23, 22] - [23, 31]
(string_fragment [23, 23] - [23, 30]))))
close_tag: (jsx_closing_element [23, 32] - [23, 39]
name: (identifier [23, 34] - [23, 38])))
(jsx_element [24, 14] - [24, 40]
open_tag: (jsx_opening_element [24, 14] - [24, 33]
name: (identifier [24, 15] - [24, 19])
attribute: (jsx_attribute [24, 20] - [24, 32]
(property_identifier [24, 20] - [24, 21])
(string [24, 22] - [24, 32]
(string_fragment [24, 23] - [24, 31]))))
close_tag: (jsx_closing_element [24, 33] - [24, 40]
name: (identifier [24, 35] - [24, 39])))
(jsx_element [25, 14] - [25, 40]
open_tag: (jsx_opening_element [25, 14] - [25, 33]
name: (identifier [25, 15] - [25, 19])
attribute: (jsx_attribute [25, 20] - [25, 32]
(property_identifier [25, 20] - [25, 21])
(string [25, 22] - [25, 32]
(string_fragment [25, 23] - [25, 31]))))
close_tag: (jsx_closing_element [25, 33] - [25, 40]
name: (identifier [25, 35] - [25, 39])))
close_tag: (jsx_closing_element [26, 12] - [26, 18]
name: (identifier [26, 14] - [26, 17])))
close_tag: (jsx_closing_element [27, 10] - [27, 16]
name: (identifier [27, 12] - [27, 15])))
(jsx_element [28, 10] - [28, 41]
open_tag: (jsx_opening_element [28, 10] - [28, 14]
name: (identifier [28, 11] - [28, 13]))
(jsx_text [28, 14] - [28, 36])
close_tag: (jsx_closing_element [28, 36] - [28, 41]
name: (identifier [28, 38] - [28, 40])))
(jsx_element [29, 10] - [31, 14]
open_tag: (jsx_opening_element [29, 10] - [29, 30]
name: (identifier [29, 11] - [29, 12])
attribute: (jsx_attribute [29, 13] - [29, 29]
(property_identifier [29, 13] - [29, 18])
(string [29, 19] - [29, 29]
(string_fragment [29, 20] - [29, 28]))))
(jsx_text [29, 30] - [31, 10])
close_tag: (jsx_closing_element [31, 10] - [31, 14]
name: (identifier [31, 12] - [31, 13])))
close_tag: (jsx_closing_element [32, 8] - [32, 14]
name: (identifier [32, 10] - [32, 13])))
(jsx_element [34, 8] - [63, 15]
open_tag: (jsx_opening_element [34, 8] - [34, 57]
name: (identifier [34, 9] - [34, 13])
attribute: (jsx_attribute [34, 14] - [34, 27]
(property_identifier [34, 14] - [34, 16])
(string [34, 17] - [34, 27]
(string_fragment [34, 18] - [34, 26])))
attribute: (jsx_attribute [34, 28] - [34, 56]
(property_identifier [34, 28] - [34, 36])
(string [34, 37] - [34, 56]
(string_fragment [34, 38] - [34, 55]))))
(jsx_element [35, 10] - [48, 16]
open_tag: (jsx_opening_element [35, 10] - [35, 47]
name: (identifier [35, 11] - [35, 14])
attribute: (jsx_attribute [35, 15] - [35, 46]
(property_identifier [35, 15] - [35, 20])
(string [35, 21] - [35, 46]
(string_fragment [35, 22] - [35, 45]))))
(jsx_element [36, 12] - [38, 20]
open_tag: (jsx_opening_element [36, 12] - [36, 136]
name: (identifier [36, 13] - [36, 18])
attribute: (jsx_attribute [36, 19] - [36, 135]
(property_identifier [36, 19] - [36, 24])
(string [36, 25] - [36, 135]
(string_fragment [36, 26] - [36, 134]))))
(jsx_text [36, 136] - [38, 12])
close_tag: (jsx_closing_element [38, 12] - [38, 20]
name: (identifier [38, 14] - [38, 19])))
(jsx_self_closing_element [39, 12] - [47, 14]
name: (identifier [39, 13] - [39, 18])
attribute: (jsx_attribute [40, 14] - [40, 25]
(property_identifier [40, 14] - [40, 18])
(string [40, 19] - [40, 25]
(string_fragment [40, 20] - [40, 24])))
attribute: (jsx_attribute [41, 14] - [41, 25]
(property_identifier [41, 14] - [41, 18])
(string [41, 19] - [41, 25]
(string_fragment [41, 20] - [41, 24])))
attribute: (jsx_attribute [42, 14] - [42, 28]
(property_identifier [42, 14] - [42, 16])
(string [42, 17] - [42, 28]
(string_fragment [42, 18] - [42, 27])))
attribute: (jsx_attribute [43, 14] - [43, 52]
(property_identifier [43, 14] - [43, 25])
(string [43, 26] - [43, 52]
(string_fragment [43, 27] - [43, 51])))
attribute: (jsx_attribute [44, 14] - [44, 22]
(property_identifier [44, 14] - [44, 22]))
attribute: (jsx_attribute [45, 14] - [45, 23]
(property_identifier [45, 14] - [45, 23]))
attribute: (jsx_attribute [46, 14] - [46, 133]
(property_identifier [46, 14] - [46, 19])
(string [46, 20] - [46, 133]
(string_fragment [46, 21] - [46, 132]))))
close_tag: (jsx_closing_element [48, 10] - [48, 16]
name: (identifier [48, 12] - [48, 15])))
(jsx_self_closing_element [50, 10] - [53, 12]
name: (identifier [50, 11] - [50, 14])
attribute: (jsx_attribute [51, 12] - [51, 27]
(property_identifier [51, 12] - [51, 14])
(string [51, 15] - [51, 27]
(string_fragment [51, 16] - [51, 26])))
attribute: (jsx_attribute [52, 12] - [52, 130]
(property_identifier [52, 12] - [52, 17])
(string [52, 18] - [52, 130]
(string_fragment [52, 19] - [52, 129]))))
(jsx_element [55, 10] - [62, 19]
open_tag: (jsx_opening_element [55, 10] - [60, 11]
name: (identifier [55, 11] - [55, 17])
attribute: (jsx_attribute [56, 12] - [56, 25]
(property_identifier [56, 12] - [56, 16])
(string [56, 17] - [56, 25]
(string_fragment [56, 18] - [56, 24])))
attribute: (jsx_attribute [57, 12] - [57, 24]
(property_identifier [57, 12] - [57, 14])
(string [57, 15] - [57, 24]
(string_fragment [57, 16] - [57, 23])))
attribute: (jsx_attribute [58, 12] - [58, 31]
(property_identifier [58, 12] - [58, 17])
(string [58, 18] - [58, 31]
(string_fragment [58, 19] - [58, 30])))
attribute: (jsx_attribute [59, 12] - [59, 67]
(property_identifier [59, 12] - [59, 17])
(string [59, 18] - [59, 67]
(string_fragment [59, 19] - [59, 66]))))
(jsx_text [60, 11] - [62, 10])
close_tag: (jsx_closing_element [62, 10] - [62, 19]
name: (identifier [62, 12] - [62, 18])))
close_tag: (jsx_closing_element [63, 8] - [63, 15]
name: (identifier [63, 10] - [63, 14])))
(jsx_element [65, 8] - [73, 14]
open_tag: (jsx_opening_element [65, 8] - [65, 107]
name: (identifier [65, 9] - [65, 12])
attribute: (jsx_attribute [65, 13] - [65, 106]
(property_identifier [65, 13] - [65, 18])
(string [65, 19] - [65, 106]
(string_fragment [65, 20] - [65, 105]))))
(jsx_text [65, 107] - [66, 39])
(jsx_expression [66, 39] - [66, 44]
(string [66, 40] - [66, 43]
(string_fragment [66, 41] - [66, 42])))
(jsx_element [67, 10] - [72, 14]
open_tag: (jsx_opening_element [67, 10] - [70, 11]
name: (identifier [67, 11] - [67, 12])
attribute: (jsx_attribute [68, 12] - [68, 25]
(property_identifier [68, 12] - [68, 16])
(string [68, 17] - [68, 25]
(string_fragment [68, 18] - [68, 24])))
attribute: (jsx_attribute [69, 12] - [69, 83]
(property_identifier [69, 12] - [69, 17])
(string [69, 18] - [69, 83]
(string_fragment [69, 19] - [69, 82]))))
(jsx_text [70, 11] - [72, 10])
close_tag: (jsx_closing_element [72, 10] - [72, 14]
name: (identifier [72, 12] - [72, 13])))
close_tag: (jsx_closing_element [73, 8] - [73, 14]
name: (identifier [73, 10] - [73, 13])))
close_tag: (jsx_closing_element [74, 6] - [74, 12]
name: (identifier [74, 8] - [74, 11])))
(jsx_element [76, 6] - [76, 57]
open_tag: (jsx_opening_element [76, 6] - [76, 48]
name: (identifier [76, 7] - [76, 13])
attribute: (jsx_attribute [76, 14] - [76, 47]
(property_identifier [76, 14] - [76, 17])
(string [76, 18] - [76, 47]
(string_fragment [76, 19] - [76, 46]))))
close_tag: (jsx_closing_element [76, 48] - [76, 57]
name: (identifier [76, 50] - [76, 56])))
close_tag: (jsx_closing_element [77, 4] - [77, 25]
name: (identifier [77, 6] - [77, 24])))))))))))

View File

@ -1,532 +0,0 @@
(program [0, 0] - [136, 0]
(import_statement [0, 0] - [0, 83]
(import_clause [0, 7] - [0, 38]
(named_imports [0, 7] - [0, 38]
(import_specifier [0, 9] - [0, 36]
name: (identifier [0, 9] - [0, 36]))))
source: (string [0, 44] - [0, 82]
(string_fragment [0, 45] - [0, 81])))
(export_statement [2, 0] - [8, 1]
declaration: (interface_declaration [2, 7] - [8, 1]
name: (type_identifier [2, 17] - [2, 24])
body: (interface_body [2, 25] - [8, 1]
(property_signature [3, 2] - [3, 12]
name: (property_identifier [3, 2] - [3, 4])
type: (type_annotation [3, 4] - [3, 12]
(predefined_type [3, 6] - [3, 12])))
(property_signature [4, 2] - [4, 14]
name: (property_identifier [4, 2] - [4, 6])
type: (type_annotation [4, 6] - [4, 14]
(predefined_type [4, 8] - [4, 14])))
(property_signature [5, 2] - [5, 21]
name: (property_identifier [5, 2] - [5, 13])
type: (type_annotation [5, 13] - [5, 21]
(predefined_type [5, 15] - [5, 21])))
(property_signature [6, 2] - [6, 16]
name: (property_identifier [6, 2] - [6, 8])
type: (type_annotation [6, 8] - [6, 16]
(predefined_type [6, 10] - [6, 16])))
(property_signature [7, 2] - [7, 14]
name: (property_identifier [7, 2] - [7, 6])
type: (type_annotation [7, 6] - [7, 14]
(predefined_type [7, 8] - [7, 14]))))))
(export_statement [10, 0] - [135, 2]
declaration: (lexical_declaration [10, 7] - [135, 2]
(variable_declarator [10, 13] - [135, 1]
name: (identifier [10, 13] - [10, 37])
value: (arrow_function [10, 40] - [135, 1]
parameters: (formal_parameters [10, 40] - [16, 2]
(required_parameter [10, 41] - [16, 1]
pattern: (object_pattern [10, 41] - [13, 1]
(shorthand_property_identifier_pattern [11, 2] - [11, 6])
(object_assignment_pattern [12, 2] - [12, 17]
left: (shorthand_property_identifier_pattern [12, 2] - [12, 9])
right: (false [12, 12] - [12, 17])))
type: (type_annotation [13, 1] - [16, 1]
(object_type [13, 3] - [16, 1]
(property_signature [14, 2] - [14, 17]
name: (property_identifier [14, 2] - [14, 6])
type: (type_annotation [14, 6] - [14, 17]
(array_type [14, 8] - [14, 17]
(type_identifier [14, 8] - [14, 15]))))
(property_signature [15, 2] - [15, 19]
name: (property_identifier [15, 2] - [15, 9])
type: (type_annotation [15, 10] - [15, 19]
(predefined_type [15, 12] - [15, 19])))))))
body: (statement_block [16, 6] - [135, 1]
(return_statement [17, 2] - [134, 4]
(parenthesized_expression [17, 9] - [134, 3]
(jsx_element [18, 4] - [133, 34]
open_tag: (jsx_opening_element [18, 4] - [22, 5]
name: (identifier [18, 5] - [18, 32])
attribute: (jsx_attribute [19, 6] - [19, 23]
(property_identifier [19, 6] - [19, 11])
(string [19, 12] - [19, 23]
(string_fragment [19, 13] - [19, 22])))
attribute: (jsx_attribute [20, 6] - [20, 30]
(property_identifier [20, 6] - [20, 17])
(string [20, 18] - [20, 30]
(string_fragment [20, 19] - [20, 29])))
attribute: (jsx_attribute [21, 6] - [21, 23]
(property_identifier [21, 6] - [21, 13])
(jsx_expression [21, 14] - [21, 23]
(identifier [21, 15] - [21, 22]))))
(jsx_element [23, 6] - [30, 12]
open_tag: (jsx_opening_element [23, 6] - [23, 40]
name: (identifier [23, 7] - [23, 10])
attribute: (jsx_attribute [23, 11] - [23, 39]
(property_identifier [23, 11] - [23, 16])
(string [23, 17] - [23, 39]
(string_fragment [23, 18] - [23, 38]))))
(jsx_element [24, 8] - [26, 13]
open_tag: (jsx_opening_element [24, 8] - [24, 108]
name: (identifier [24, 9] - [24, 11])
attribute: (jsx_attribute [24, 12] - [24, 107]
(property_identifier [24, 12] - [24, 17])
(string [24, 18] - [24, 107]
(string_fragment [24, 19] - [24, 106]))))
(jsx_text [24, 108] - [26, 8])
close_tag: (jsx_closing_element [26, 8] - [26, 13]
name: (identifier [26, 10] - [26, 12])))
(jsx_element [27, 8] - [29, 12]
open_tag: (jsx_opening_element [27, 8] - [27, 80]
name: (identifier [27, 9] - [27, 10])
attribute: (jsx_attribute [27, 11] - [27, 79]
(property_identifier [27, 11] - [27, 16])
(string [27, 17] - [27, 79]
(string_fragment [27, 18] - [27, 78]))))
(jsx_text [27, 80] - [29, 8])
close_tag: (jsx_closing_element [29, 8] - [29, 12]
name: (identifier [29, 10] - [29, 11])))
close_tag: (jsx_closing_element [30, 6] - [30, 12]
name: (identifier [30, 8] - [30, 11])))
(jsx_element [32, 6] - [132, 12]
open_tag: (jsx_opening_element [32, 6] - [32, 110]
name: (identifier [32, 7] - [32, 10])
attribute: (jsx_attribute [32, 11] - [32, 109]
(property_identifier [32, 11] - [32, 16])
(string [32, 17] - [32, 109]
(string_fragment [32, 18] - [32, 108]))))
(jsx_expression [33, 8] - [131, 12]
(ternary_expression [33, 9] - [131, 11]
condition: (binary_expression [33, 9] - [33, 26]
left: (member_expression [33, 9] - [33, 20]
object: (identifier [33, 9] - [33, 13])
property: (property_identifier [33, 14] - [33, 20]))
right: (number [33, 25] - [33, 26]))
consequence: (parenthesized_expression [34, 12] - [62, 11]
(jsx_element [35, 12] - [61, 18]
open_tag: (jsx_opening_element [35, 12] - [38, 13]
name: (identifier [35, 13] - [35, 16])
attribute: (jsx_attribute [36, 14] - [36, 26]
(property_identifier [36, 14] - [36, 19])
(string [36, 20] - [36, 26]
(string_fragment [36, 21] - [36, 25])))
attribute: (jsx_attribute [37, 14] - [37, 84]
(property_identifier [37, 14] - [37, 19])
(string [37, 20] - [37, 84]
(string_fragment [37, 21] - [37, 83]))))
(jsx_element [39, 14] - [54, 20]
open_tag: (jsx_opening_element [39, 14] - [39, 238]
name: (identifier [39, 15] - [39, 18])
attribute: (jsx_attribute [39, 19] - [39, 237]
(property_identifier [39, 19] - [39, 24])
(string [39, 25] - [39, 237]
(string_fragment [39, 26] - [39, 236]))))
(jsx_element [40, 16] - [53, 22]
open_tag: (jsx_opening_element [40, 16] - [49, 17]
name: (identifier [40, 17] - [40, 20])
attribute: (jsx_attribute [41, 18] - [41, 28]
(property_identifier [41, 18] - [41, 23])
(string [41, 24] - [41, 28]
(string_fragment [41, 25] - [41, 27])))
attribute: (jsx_attribute [42, 18] - [42, 29]
(property_identifier [42, 18] - [42, 24])
(string [42, 25] - [42, 29]
(string_fragment [42, 26] - [42, 28])))
attribute: (jsx_attribute [43, 18] - [43, 37]
(property_identifier [43, 18] - [43, 25])
(string [43, 26] - [43, 37]
(string_fragment [43, 27] - [43, 36])))
attribute: (jsx_attribute [44, 18] - [44, 29]
(property_identifier [44, 18] - [44, 22])
(string [44, 23] - [44, 29]
(string_fragment [44, 24] - [44, 28])))
attribute: (jsx_attribute [45, 18] - [45, 39]
(property_identifier [45, 18] - [45, 24])
(string [45, 25] - [45, 39]
(string_fragment [45, 26] - [45, 38])))
attribute: (jsx_attribute [46, 18] - [46, 34]
(property_identifier [46, 18] - [46, 30])
(string [46, 31] - [46, 34]
(string_fragment [46, 32] - [46, 33])))
attribute: (jsx_attribute [47, 18] - [47, 40]
(property_identifier [47, 18] - [47, 32])
(string [47, 33] - [47, 40]
(string_fragment [47, 34] - [47, 39])))
attribute: (jsx_attribute [48, 18] - [48, 41]
(property_identifier [48, 18] - [48, 33])
(string [48, 34] - [48, 41]
(string_fragment [48, 35] - [48, 40]))))
(jsx_element [50, 18] - [50, 58]
open_tag: (jsx_opening_element [50, 18] - [50, 49]
name: (identifier [50, 19] - [50, 25])
attribute: (jsx_attribute [50, 26] - [50, 33]
(property_identifier [50, 26] - [50, 28])
(string [50, 29] - [50, 33]
(string_fragment [50, 30] - [50, 32])))
attribute: (jsx_attribute [50, 34] - [50, 41]
(property_identifier [50, 34] - [50, 36])
(string [50, 37] - [50, 41]
(string_fragment [50, 38] - [50, 40])))
attribute: (jsx_attribute [50, 42] - [50, 48]
(property_identifier [50, 42] - [50, 43])
(string [50, 44] - [50, 48]
(string_fragment [50, 45] - [50, 47]))))
close_tag: (jsx_closing_element [50, 49] - [50, 58]
name: (identifier [50, 51] - [50, 57])))
(jsx_element [51, 18] - [51, 62]
open_tag: (jsx_opening_element [51, 18] - [51, 55]
name: (identifier [51, 19] - [51, 23])
attribute: (jsx_attribute [51, 24] - [51, 31]
(property_identifier [51, 24] - [51, 26])
(string [51, 27] - [51, 31]
(string_fragment [51, 28] - [51, 30])))
attribute: (jsx_attribute [51, 32] - [51, 38]
(property_identifier [51, 32] - [51, 34])
(string [51, 35] - [51, 38]
(string_fragment [51, 36] - [51, 37])))
attribute: (jsx_attribute [51, 39] - [51, 46]
(property_identifier [51, 39] - [51, 41])
(string [51, 42] - [51, 46]
(string_fragment [51, 43] - [51, 45])))
attribute: (jsx_attribute [51, 47] - [51, 54]
(property_identifier [51, 47] - [51, 49])
(string [51, 50] - [51, 54]
(string_fragment [51, 51] - [51, 53]))))
close_tag: (jsx_closing_element [51, 55] - [51, 62]
name: (identifier [51, 57] - [51, 61])))
(jsx_element [52, 18] - [52, 66]
open_tag: (jsx_opening_element [52, 18] - [52, 59]
name: (identifier [52, 19] - [52, 23])
attribute: (jsx_attribute [52, 24] - [52, 31]
(property_identifier [52, 24] - [52, 26])
(string [52, 27] - [52, 31]
(string_fragment [52, 28] - [52, 30])))
attribute: (jsx_attribute [52, 32] - [52, 39]
(property_identifier [52, 32] - [52, 34])
(string [52, 35] - [52, 39]
(string_fragment [52, 36] - [52, 38])))
attribute: (jsx_attribute [52, 40] - [52, 50]
(property_identifier [52, 40] - [52, 42])
(string [52, 43] - [52, 50]
(string_fragment [52, 44] - [52, 49])))
attribute: (jsx_attribute [52, 51] - [52, 58]
(property_identifier [52, 51] - [52, 53])
(string [52, 54] - [52, 58]
(string_fragment [52, 55] - [52, 57]))))
close_tag: (jsx_closing_element [52, 59] - [52, 66]
name: (identifier [52, 61] - [52, 65])))
close_tag: (jsx_closing_element [53, 16] - [53, 22]
name: (identifier [53, 18] - [53, 21])))
close_tag: (jsx_closing_element [54, 14] - [54, 20]
name: (identifier [54, 16] - [54, 19])))
(jsx_element [55, 14] - [57, 19]
open_tag: (jsx_opening_element [55, 14] - [55, 76]
name: (identifier [55, 15] - [55, 17])
attribute: (jsx_attribute [55, 18] - [55, 75]
(property_identifier [55, 18] - [55, 23])
(string [55, 24] - [55, 75]
(string_fragment [55, 25] - [55, 74]))))
(jsx_text [55, 76] - [57, 14])
close_tag: (jsx_closing_element [57, 14] - [57, 19]
name: (identifier [57, 16] - [57, 18])))
(jsx_element [58, 14] - [60, 18]
open_tag: (jsx_opening_element [58, 14] - [58, 81]
name: (identifier [58, 15] - [58, 16])
attribute: (jsx_attribute [58, 17] - [58, 80]
(property_identifier [58, 17] - [58, 22])
(string [58, 23] - [58, 80]
(string_fragment [58, 24] - [58, 79]))))
(jsx_text [58, 81] - [60, 14])
close_tag: (jsx_closing_element [60, 14] - [60, 18]
name: (identifier [60, 16] - [60, 17])))
close_tag: (jsx_closing_element [61, 12] - [61, 18]
name: (identifier [61, 14] - [61, 17]))))
alternative: (parenthesized_expression [63, 12] - [131, 11]
(call_expression [64, 12] - [130, 14]
function: (member_expression [64, 12] - [64, 20]
object: (identifier [64, 12] - [64, 16])
property: (property_identifier [64, 17] - [64, 20]))
arguments: (arguments [64, 20] - [130, 14]
(arrow_function [64, 21] - [130, 13]
parameters: (formal_parameters [64, 21] - [64, 26]
(required_parameter [64, 22] - [64, 25]
pattern: (identifier [64, 22] - [64, 25])))
body: (statement_block [64, 30] - [130, 13]
(lexical_declaration [65, 14] - [66, 44]
(variable_declarator [65, 20] - [66, 43]
name: (identifier [65, 20] - [65, 31])
value: (binary_expression [65, 34] - [66, 43]
left: (binary_expression [65, 34] - [65, 54]
left: (member_expression [65, 34] - [65, 42]
object: (identifier [65, 34] - [65, 37])
property: (property_identifier [65, 38] - [65, 42]))
right: (string [65, 47] - [65, 54]
(string_fragment [65, 48] - [65, 53])))
right: (binary_expression [66, 16] - [66, 43]
left: (member_expression [66, 16] - [66, 24]
object: (identifier [66, 16] - [66, 19])
property: (property_identifier [66, 20] - [66, 24]))
right: (string [66, 29] - [66, 43]
(string_fragment [66, 30] - [66, 42]))))))
(lexical_declaration [67, 14] - [69, 42]
(variable_declarator [67, 20] - [69, 41]
name: (identifier [67, 20] - [67, 29])
value: (ternary_expression [67, 32] - [69, 41]
condition: (call_expression [67, 32] - [67, 61]
function: (member_expression [67, 32] - [67, 53]
object: (member_expression [67, 32] - [67, 42]
object: (identifier [67, 32] - [67, 35])
property: (property_identifier [67, 36] - [67, 42]))
property: (property_identifier [67, 43] - [67, 53]))
arguments: (arguments [67, 53] - [67, 61]
(string [67, 54] - [67, 60]
(string_fragment [67, 55] - [67, 59]))))
consequence: (member_expression [68, 18] - [68, 28]
object: (identifier [68, 18] - [68, 21])
property: (property_identifier [68, 22] - [68, 28]))
alternative: (template_string [69, 18] - [69, 41]
(string_fragment [69, 19] - [69, 27])
(template_substitution [69, 27] - [69, 40]
(member_expression [69, 29] - [69, 39]
object: (identifier [69, 29] - [69, 32])
property: (property_identifier [69, 33] - [69, 39])))))))
(return_statement [71, 14] - [129, 16]
(parenthesized_expression [71, 21] - [129, 15]
(jsx_element [72, 16] - [128, 22]
open_tag: (jsx_opening_element [72, 16] - [76, 17]
name: (identifier [72, 17] - [72, 20])
attribute: (jsx_attribute [73, 18] - [73, 30]
(property_identifier [73, 18] - [73, 23])
(string [73, 24] - [73, 30]
(string_fragment [73, 25] - [73, 29])))
attribute: (jsx_attribute [74, 18] - [74, 30]
(property_identifier [74, 18] - [74, 21])
(jsx_expression [74, 22] - [74, 30]
(member_expression [74, 23] - [74, 29]
object: (identifier [74, 23] - [74, 26])
property: (property_identifier [74, 27] - [74, 29]))))
attribute: (jsx_attribute [75, 18] - [75, 171]
(property_identifier [75, 18] - [75, 23])
(string [75, 24] - [75, 171]
(string_fragment [75, 25] - [75, 170]))))
(jsx_element [77, 18] - [106, 24]
open_tag: (jsx_opening_element [77, 18] - [77, 23]
name: (identifier [77, 19] - [77, 22]))
(jsx_element [78, 20] - [100, 26]
open_tag: (jsx_opening_element [78, 20] - [78, 142]
name: (identifier [78, 21] - [78, 24])
attribute: (jsx_attribute [78, 25] - [78, 141]
(property_identifier [78, 25] - [78, 30])
(string [78, 31] - [78, 141]
(string_fragment [78, 32] - [78, 140]))))
(jsx_element [79, 22] - [91, 28]
open_tag: (jsx_opening_element [79, 22] - [79, 85]
name: (identifier [79, 23] - [79, 26])
attribute: (jsx_attribute [79, 27] - [79, 84]
(property_identifier [79, 27] - [79, 32])
(string [79, 33] - [79, 84]
(string_fragment [79, 34] - [79, 83]))))
(jsx_element [80, 24] - [82, 30]
open_tag: (jsx_opening_element [80, 24] - [80, 250]
name: (identifier [80, 25] - [80, 28])
attribute: (jsx_attribute [80, 29] - [80, 249]
(property_identifier [80, 29] - [80, 34])
(string [80, 35] - [80, 249]
(string_fragment [80, 36] - [80, 248]))))
(jsx_expression [81, 26] - [81, 60]
(call_expression [81, 27] - [81, 59]
function: (member_expression [81, 27] - [81, 57]
object: (call_expression [81, 27] - [81, 45]
function: (member_expression [81, 27] - [81, 42]
object: (member_expression [81, 27] - [81, 35]
object: (identifier [81, 27] - [81, 30])
property: (property_identifier [81, 31] - [81, 35]))
property: (property_identifier [81, 36] - [81, 42]))
arguments: (arguments [81, 42] - [81, 45]
(number [81, 43] - [81, 44])))
property: (property_identifier [81, 46] - [81, 57]))
arguments: (arguments [81, 57] - [81, 59])))
close_tag: (jsx_closing_element [82, 24] - [82, 30]
name: (identifier [82, 26] - [82, 29])))
(jsx_element [83, 24] - [90, 30]
open_tag: (jsx_opening_element [83, 24] - [83, 29]
name: (identifier [83, 25] - [83, 28]))
(jsx_element [84, 26] - [86, 31]
open_tag: (jsx_opening_element [84, 26] - [84, 96]
name: (identifier [84, 27] - [84, 29])
attribute: (jsx_attribute [84, 30] - [84, 95]
(property_identifier [84, 30] - [84, 35])
(string [84, 36] - [84, 95]
(string_fragment [84, 37] - [84, 94]))))
(jsx_expression [85, 28] - [85, 38]
(member_expression [85, 29] - [85, 37]
object: (identifier [85, 29] - [85, 32])
property: (property_identifier [85, 33] - [85, 37])))
close_tag: (jsx_closing_element [86, 26] - [86, 31]
name: (identifier [86, 28] - [86, 30])))
(jsx_element [87, 26] - [89, 33]
open_tag: (jsx_opening_element [87, 26] - [87, 109]
name: (identifier [87, 27] - [87, 31])
attribute: (jsx_attribute [87, 32] - [87, 108]
(property_identifier [87, 32] - [87, 37])
(string [87, 38] - [87, 108]
(string_fragment [87, 39] - [87, 107]))))
(jsx_expression [88, 28] - [88, 40]
(member_expression [88, 29] - [88, 39]
object: (identifier [88, 29] - [88, 32])
property: (property_identifier [88, 33] - [88, 39])))
close_tag: (jsx_closing_element [89, 26] - [89, 33]
name: (identifier [89, 28] - [89, 32])))
close_tag: (jsx_closing_element [90, 24] - [90, 30]
name: (identifier [90, 26] - [90, 29])))
close_tag: (jsx_closing_element [91, 22] - [91, 28]
name: (identifier [91, 24] - [91, 27])))
(jsx_element [93, 22] - [99, 29]
open_tag: (jsx_opening_element [93, 22] - [97, 23]
name: (identifier [93, 23] - [93, 27])
attribute: (jsx_attribute [94, 24] - [96, 27]
(property_identifier [94, 24] - [94, 29])
(jsx_expression [94, 30] - [96, 27]
(template_string [94, 31] - [96, 26]
(string_fragment [94, 32] - [94, 38])
(template_substitution [94, 38] - [96, 25]
(ternary_expression [95, 26] - [95, 70]
condition: (identifier [95, 26] - [95, 37])
consequence: (string [95, 40] - [95, 55]
(string_fragment [95, 41] - [95, 54]))
alternative: (string [95, 58] - [95, 70]
(string_fragment [95, 59] - [95, 69]))))))))
(jsx_expression [98, 24] - [98, 34]
(member_expression [98, 25] - [98, 33]
object: (identifier [98, 25] - [98, 28])
property: (property_identifier [98, 29] - [98, 33])))
close_tag: (jsx_closing_element [99, 22] - [99, 29]
name: (identifier [99, 24] - [99, 28])))
close_tag: (jsx_closing_element [100, 20] - [100, 26]
name: (identifier [100, 22] - [100, 25])))
(jsx_element [102, 20] - [105, 24]
open_tag: (jsx_opening_element [102, 20] - [102, 132]
name: (identifier [102, 21] - [102, 22])
attribute: (jsx_attribute [102, 23] - [102, 131]
(property_identifier [102, 23] - [102, 28])
(string [102, 29] - [102, 131]
(string_fragment [102, 30] - [102, 130]))))
(jsx_expression [103, 22] - [104, 67]
(binary_expression [103, 23] - [104, 66]
left: (member_expression [103, 23] - [103, 38]
object: (identifier [103, 23] - [103, 26])
property: (property_identifier [103, 27] - [103, 38]))
right: (string [104, 24] - [104, 66]
(string_fragment [104, 25] - [104, 65]))))
close_tag: (jsx_closing_element [105, 20] - [105, 24]
name: (identifier [105, 22] - [105, 23])))
close_tag: (jsx_closing_element [106, 18] - [106, 24]
name: (identifier [106, 20] - [106, 23])))
(jsx_element [108, 18] - [127, 22]
open_tag: (jsx_opening_element [108, 18] - [112, 19]
name: (identifier [108, 19] - [108, 20])
attribute: (jsx_attribute [109, 20] - [109, 36]
(property_identifier [109, 20] - [109, 24])
(jsx_expression [109, 25] - [109, 36]
(identifier [109, 26] - [109, 35])))
attribute: (jsx_attribute [110, 20] - [110, 39]
(property_identifier [110, 20] - [110, 25])
(string [110, 26] - [110, 39]
(string_fragment [110, 27] - [110, 38])))
attribute: (jsx_attribute [111, 20] - [111, 162]
(property_identifier [111, 20] - [111, 25])
(string [111, 26] - [111, 162]
(string_fragment [111, 27] - [111, 161]))))
(jsx_element [113, 20] - [113, 43]
open_tag: (jsx_opening_element [113, 20] - [113, 26]
name: (identifier [113, 21] - [113, 25]))
(jsx_text [113, 26] - [113, 36])
close_tag: (jsx_closing_element [113, 36] - [113, 43]
name: (identifier [113, 38] - [113, 42])))
(jsx_element [114, 20] - [126, 26]
open_tag: (jsx_opening_element [114, 20] - [123, 21]
name: (identifier [114, 21] - [114, 24])
attribute: (jsx_attribute [115, 22] - [115, 32]
(property_identifier [115, 22] - [115, 27])
(string [115, 28] - [115, 32]
(string_fragment [115, 29] - [115, 31])))
attribute: (jsx_attribute [116, 22] - [116, 33]
(property_identifier [116, 22] - [116, 28])
(string [116, 29] - [116, 33]
(string_fragment [116, 30] - [116, 32])))
attribute: (jsx_attribute [117, 22] - [117, 41]
(property_identifier [117, 22] - [117, 29])
(string [117, 30] - [117, 41]
(string_fragment [117, 31] - [117, 40])))
attribute: (jsx_attribute [118, 22] - [118, 33]
(property_identifier [118, 22] - [118, 26])
(string [118, 27] - [118, 33]
(string_fragment [118, 28] - [118, 32])))
attribute: (jsx_attribute [119, 22] - [119, 43]
(property_identifier [119, 22] - [119, 28])
(string [119, 29] - [119, 43]
(string_fragment [119, 30] - [119, 42])))
attribute: (jsx_attribute [120, 22] - [120, 40]
(property_identifier [120, 22] - [120, 34])
(string [120, 35] - [120, 40]
(string_fragment [120, 36] - [120, 39])))
attribute: (jsx_attribute [121, 22] - [121, 44]
(property_identifier [121, 22] - [121, 36])
(string [121, 37] - [121, 44]
(string_fragment [121, 38] - [121, 43])))
attribute: (jsx_attribute [122, 22] - [122, 45]
(property_identifier [122, 22] - [122, 37])
(string [122, 38] - [122, 45]
(string_fragment [122, 39] - [122, 44]))))
(jsx_element [124, 22] - [124, 65]
open_tag: (jsx_opening_element [124, 22] - [124, 58]
name: (identifier [124, 23] - [124, 27])
attribute: (jsx_attribute [124, 28] - [124, 34]
(property_identifier [124, 28] - [124, 30])
(string [124, 31] - [124, 34]
(string_fragment [124, 32] - [124, 33])))
attribute: (jsx_attribute [124, 35] - [124, 42]
(property_identifier [124, 35] - [124, 37])
(string [124, 38] - [124, 42]
(string_fragment [124, 39] - [124, 41])))
attribute: (jsx_attribute [124, 43] - [124, 50]
(property_identifier [124, 43] - [124, 45])
(string [124, 46] - [124, 50]
(string_fragment [124, 47] - [124, 49])))
attribute: (jsx_attribute [124, 51] - [124, 57]
(property_identifier [124, 51] - [124, 53])
(string [124, 54] - [124, 57]
(string_fragment [124, 55] - [124, 56]))))
close_tag: (jsx_closing_element [124, 58] - [124, 65]
name: (identifier [124, 60] - [124, 64])))
(jsx_element [125, 22] - [125, 67]
open_tag: (jsx_opening_element [125, 22] - [125, 56]
name: (identifier [125, 23] - [125, 31])
attribute: (jsx_attribute [125, 32] - [125, 55]
(property_identifier [125, 32] - [125, 38])
(string [125, 39] - [125, 55]
(string_fragment [125, 40] - [125, 54]))))
close_tag: (jsx_closing_element [125, 56] - [125, 67]
name: (identifier [125, 58] - [125, 66])))
close_tag: (jsx_closing_element [126, 20] - [126, 26]
name: (identifier [126, 22] - [126, 25])))
close_tag: (jsx_closing_element [127, 18] - [127, 22]
name: (identifier [127, 20] - [127, 21])))
close_tag: (jsx_closing_element [128, 16] - [128, 22]
name: (identifier [128, 18] - [128, 21]))))))))))))
close_tag: (jsx_closing_element [132, 6] - [132, 12]
name: (identifier [132, 8] - [132, 11])))
close_tag: (jsx_closing_element [133, 4] - [133, 34]
name: (identifier [133, 6] - [133, 33])))))))))))

View File

@ -1,281 +0,0 @@
(program [0, 0] - [88, 0]
(import_statement [0, 0] - [0, 47]
(import_clause [0, 7] - [0, 21]
(named_imports [0, 7] - [0, 21]
(import_specifier [0, 9] - [0, 19]
name: (identifier [0, 9] - [0, 19]))))
source: (string [0, 27] - [0, 46]
(string_fragment [0, 28] - [0, 45])))
(import_statement [1, 0] - [1, 48]
(import_clause [1, 7] - [1, 21]
(named_imports [1, 7] - [1, 21]
(import_specifier [1, 9] - [1, 19]
name: (identifier [1, 9] - [1, 19]))))
source: (string [1, 27] - [1, 47]
(string_fragment [1, 28] - [1, 46])))
(import_statement [2, 0] - [2, 56]
(import_clause [2, 7] - [2, 25]
(named_imports [2, 7] - [2, 25]
(import_specifier [2, 9] - [2, 23]
name: (identifier [2, 9] - [2, 23]))))
source: (string [2, 31] - [2, 55]
(string_fragment [2, 32] - [2, 54])))
(export_statement [4, 0] - [43, 2]
declaration: (lexical_declaration [4, 7] - [43, 2]
(variable_declarator [4, 13] - [43, 1]
name: (identifier [4, 13] - [4, 27])
value: (arrow_function [4, 30] - [43, 1]
parameters: (formal_parameters [4, 30] - [10, 2]
(required_parameter [4, 31] - [10, 1]
pattern: (object_pattern [4, 31] - [7, 1]
(shorthand_property_identifier_pattern [5, 2] - [5, 10])
(shorthand_property_identifier_pattern [6, 2] - [6, 7]))
type: (type_annotation [7, 1] - [10, 1]
(object_type [7, 3] - [10, 1]
(property_signature [8, 2] - [8, 15]
name: (property_identifier [8, 2] - [8, 10])
type: (type_annotation [8, 10] - [8, 15]
(predefined_type [8, 12] - [8, 15])))
(property_signature [9, 2] - [9, 15]
name: (property_identifier [9, 2] - [9, 7])
type: (type_annotation [9, 7] - [9, 15]
(predefined_type [9, 9] - [9, 15])))))))
body: (statement_block [10, 6] - [43, 1]
(return_statement [11, 2] - [42, 4]
(parenthesized_expression [11, 9] - [42, 3]
(jsx_element [12, 4] - [41, 11]
open_tag: (jsx_opening_element [12, 4] - [12, 20]
name: (identifier [12, 5] - [12, 9])
attribute: (jsx_attribute [12, 10] - [12, 19]
(property_identifier [12, 10] - [12, 14])
(string [12, 15] - [12, 19]
(string_fragment [12, 16] - [12, 18]))))
(jsx_element [13, 6] - [36, 13]
open_tag: (jsx_opening_element [13, 6] - [13, 12]
name: (identifier [13, 7] - [13, 11]))
(jsx_self_closing_element [14, 8] - [14, 32]
name: (identifier [14, 9] - [14, 13])
attribute: (jsx_attribute [14, 14] - [14, 29]
(property_identifier [14, 14] - [14, 21])
(string [14, 22] - [14, 29]
(string_fragment [14, 23] - [14, 28]))))
(jsx_self_closing_element [15, 8] - [18, 10]
name: (identifier [15, 9] - [15, 13])
attribute: (jsx_attribute [16, 10] - [16, 25]
(property_identifier [16, 10] - [16, 14])
(string [16, 15] - [16, 25]
(string_fragment [16, 16] - [16, 24])))
attribute: (jsx_attribute [17, 10] - [17, 94]
(property_identifier [17, 10] - [17, 17])
(string [17, 18] - [17, 94]
(string_fragment [17, 19] - [17, 93]))))
(jsx_self_closing_element [19, 8] - [19, 53]
name: (identifier [19, 9] - [19, 13])
attribute: (jsx_attribute [19, 14] - [19, 32]
(property_identifier [19, 14] - [19, 18])
(string [19, 19] - [19, 32]
(string_fragment [19, 20] - [19, 31])))
attribute: (jsx_attribute [19, 33] - [19, 50]
(property_identifier [19, 33] - [19, 40])
(string [19, 41] - [19, 50]
(string_fragment [19, 42] - [19, 49]))))
(jsx_element [20, 8] - [20, 41]
open_tag: (jsx_opening_element [20, 8] - [20, 15]
name: (identifier [20, 9] - [20, 14]))
(jsx_expression [20, 15] - [20, 22]
(identifier [20, 16] - [20, 21]))
(jsx_text [20, 22] - [20, 33])
close_tag: (jsx_closing_element [20, 33] - [20, 41]
name: (identifier [20, 35] - [20, 40])))
(jsx_element [21, 8] - [26, 16]
open_tag: (jsx_opening_element [21, 8] - [21, 15]
name: (identifier [21, 9] - [21, 14]))
(jsx_expression [22, 10] - [25, 12]
(template_string [22, 11] - [25, 11]
(string_fragment [22, 12] - [23, 12])
(template_substitution [23, 12] - [23, 25]
(identifier [23, 14] - [23, 24]))
(string_fragment [23, 25] - [24, 12])
(template_substitution [24, 12] - [24, 25]
(identifier [24, 14] - [24, 24]))
(string_fragment [24, 25] - [25, 10])))
close_tag: (jsx_closing_element [26, 8] - [26, 16]
name: (identifier [26, 10] - [26, 15])))
(jsx_expression [27, 8] - [27, 31]
(comment [27, 9] - [27, 30]))
(jsx_element [28, 8] - [32, 17]
open_tag: (jsx_opening_element [28, 8] - [31, 9]
name: (identifier [28, 9] - [28, 15])
attribute: (jsx_attribute [29, 10] - [29, 23]
(property_identifier [29, 10] - [29, 14])
(string [29, 15] - [29, 23]
(string_fragment [29, 16] - [29, 22])))
attribute: (jsx_attribute [30, 10] - [30, 101]
(property_identifier [30, 10] - [30, 13])
(string [30, 14] - [30, 101]
(string_fragment [30, 15] - [30, 100]))))
close_tag: (jsx_closing_element [32, 8] - [32, 17]
name: (identifier [32, 10] - [32, 16])))
(jsx_expression [33, 8] - [33, 93]
(comment [33, 9] - [33, 92]))
(jsx_element [34, 8] - [35, 17]
open_tag: (jsx_opening_element [34, 8] - [34, 93]
name: (identifier [34, 9] - [34, 15])
attribute: (jsx_attribute [34, 16] - [34, 92]
(property_identifier [34, 16] - [34, 19])
(string [34, 20] - [34, 92]
(string_fragment [34, 21] - [34, 91]))))
close_tag: (jsx_closing_element [35, 8] - [35, 17]
name: (identifier [35, 10] - [35, 16])))
close_tag: (jsx_closing_element [36, 6] - [36, 13]
name: (identifier [36, 8] - [36, 12])))
(jsx_element [37, 6] - [40, 13]
open_tag: (jsx_opening_element [37, 6] - [37, 12]
name: (identifier [37, 7] - [37, 11]))
(jsx_element [38, 8] - [38, 38]
open_tag: (jsx_opening_element [38, 8] - [38, 32]
name: (identifier [38, 9] - [38, 12])
attribute: (jsx_attribute [38, 13] - [38, 31]
(property_identifier [38, 13] - [38, 15])
(string [38, 16] - [38, 31]
(string_fragment [38, 17] - [38, 30]))))
close_tag: (jsx_closing_element [38, 32] - [38, 38]
name: (identifier [38, 34] - [38, 37])))
(jsx_expression [39, 8] - [39, 18]
(identifier [39, 9] - [39, 17]))
close_tag: (jsx_closing_element [40, 6] - [40, 13]
name: (identifier [40, 8] - [40, 12])))
close_tag: (jsx_closing_element [41, 4] - [41, 11]
name: (identifier [41, 6] - [41, 10]))))))))))
(export_statement [45, 0] - [61, 2]
declaration: (lexical_declaration [45, 7] - [61, 2]
(variable_declarator [45, 13] - [61, 1]
name: (identifier [45, 13] - [45, 31])
value: (arrow_function [45, 34] - [61, 1]
parameters: (formal_parameters [45, 34] - [51, 2]
(required_parameter [45, 35] - [51, 1]
pattern: (object_pattern [45, 35] - [48, 1]
(shorthand_property_identifier_pattern [46, 2] - [46, 10])
(shorthand_property_identifier_pattern [47, 2] - [47, 7]))
type: (type_annotation [48, 1] - [51, 1]
(object_type [48, 3] - [51, 1]
(property_signature [49, 2] - [49, 15]
name: (property_identifier [49, 2] - [49, 10])
type: (type_annotation [49, 10] - [49, 15]
(predefined_type [49, 12] - [49, 15])))
(property_signature [50, 2] - [50, 15]
name: (property_identifier [50, 2] - [50, 7])
type: (type_annotation [50, 7] - [50, 15]
(predefined_type [50, 9] - [50, 15])))))))
body: (statement_block [51, 6] - [61, 1]
(return_statement [52, 2] - [60, 4]
(parenthesized_expression [52, 9] - [60, 3]
(jsx_element [53, 4] - [59, 21]
open_tag: (jsx_opening_element [53, 4] - [53, 34]
name: (identifier [53, 5] - [53, 19])
attribute: (jsx_attribute [53, 20] - [53, 33]
(property_identifier [53, 20] - [53, 25])
(jsx_expression [53, 26] - [53, 33]
(identifier [53, 27] - [53, 32]))))
(jsx_element [54, 6] - [58, 12]
open_tag: (jsx_opening_element [54, 6] - [54, 39]
name: (identifier [54, 7] - [54, 10])
attribute: (jsx_attribute [54, 11] - [54, 38]
(property_identifier [54, 11] - [54, 16])
(string [54, 17] - [54, 38]
(string_fragment [54, 18] - [54, 37]))))
(jsx_element [55, 8] - [57, 14]
open_tag: (jsx_opening_element [55, 8] - [55, 43]
name: (identifier [55, 9] - [55, 12])
attribute: (jsx_attribute [55, 13] - [55, 30]
(property_identifier [55, 13] - [55, 18])
(string [55, 19] - [55, 30]
(string_fragment [55, 20] - [55, 29])))
attribute: (jsx_attribute [55, 31] - [55, 42]
(property_identifier [55, 31] - [55, 42])))
(jsx_expression [56, 10] - [56, 20]
(identifier [56, 11] - [56, 19]))
close_tag: (jsx_closing_element [57, 8] - [57, 14]
name: (identifier [57, 10] - [57, 13])))
close_tag: (jsx_closing_element [58, 6] - [58, 12]
name: (identifier [58, 8] - [58, 11])))
close_tag: (jsx_closing_element [59, 4] - [59, 21]
name: (identifier [59, 6] - [59, 20]))))))))))
(export_statement [63, 0] - [87, 2]
declaration: (lexical_declaration [63, 7] - [87, 2]
(variable_declarator [63, 13] - [87, 1]
name: (identifier [63, 13] - [63, 40])
value: (arrow_function [63, 43] - [87, 1]
parameters: (formal_parameters [63, 43] - [73, 2]
(required_parameter [63, 44] - [73, 1]
pattern: (object_pattern [63, 44] - [68, 1]
(shorthand_property_identifier_pattern [64, 2] - [64, 10])
(shorthand_property_identifier_pattern [65, 2] - [65, 7])
(shorthand_property_identifier_pattern [66, 2] - [66, 13])
(object_assignment_pattern [67, 2] - [67, 17]
left: (shorthand_property_identifier_pattern [67, 2] - [67, 9])
right: (false [67, 12] - [67, 17])))
type: (type_annotation [68, 1] - [73, 1]
(object_type [68, 3] - [73, 1]
(property_signature [69, 2] - [69, 15]
name: (property_identifier [69, 2] - [69, 10])
type: (type_annotation [69, 10] - [69, 15]
(predefined_type [69, 12] - [69, 15])))
(property_signature [70, 2] - [70, 15]
name: (property_identifier [70, 2] - [70, 7])
type: (type_annotation [70, 7] - [70, 15]
(predefined_type [70, 9] - [70, 15])))
(property_signature [71, 2] - [71, 21]
name: (property_identifier [71, 2] - [71, 13])
type: (type_annotation [71, 13] - [71, 21]
(predefined_type [71, 15] - [71, 21])))
(property_signature [72, 2] - [72, 19]
name: (property_identifier [72, 2] - [72, 9])
type: (type_annotation [72, 10] - [72, 19]
(predefined_type [72, 12] - [72, 19])))))))
body: (statement_block [73, 6] - [87, 1]
(return_statement [74, 2] - [86, 4]
(parenthesized_expression [74, 9] - [86, 3]
(jsx_element [75, 4] - [85, 21]
open_tag: (jsx_opening_element [75, 4] - [75, 34]
name: (identifier [75, 5] - [75, 19])
attribute: (jsx_attribute [75, 20] - [75, 33]
(property_identifier [75, 20] - [75, 25])
(jsx_expression [75, 26] - [75, 33]
(identifier [75, 27] - [75, 32]))))
(jsx_element [76, 6] - [84, 12]
open_tag: (jsx_opening_element [76, 6] - [76, 29]
name: (identifier [76, 7] - [76, 10])
attribute: (jsx_attribute [76, 11] - [76, 28]
(property_identifier [76, 11] - [76, 16])
(string [76, 17] - [76, 28]
(string_fragment [76, 18] - [76, 27]))))
(jsx_expression [77, 8] - [77, 26]
(comment [77, 9] - [77, 25]))
(jsx_self_closing_element [78, 8] - [78, 70]
name: (identifier [78, 9] - [78, 23])
attribute: (jsx_attribute [78, 24] - [78, 49]
(property_identifier [78, 24] - [78, 35])
(jsx_expression [78, 36] - [78, 49]
(identifier [78, 37] - [78, 48])))
attribute: (jsx_attribute [78, 50] - [78, 67]
(property_identifier [78, 50] - [78, 57])
(jsx_expression [78, 58] - [78, 67]
(identifier [78, 59] - [78, 66]))))
(jsx_expression [80, 8] - [80, 25]
(comment [80, 9] - [80, 24]))
(jsx_element [81, 8] - [83, 15]
open_tag: (jsx_opening_element [81, 8] - [81, 35]
name: (identifier [81, 9] - [81, 13])
attribute: (jsx_attribute [81, 14] - [81, 34]
(property_identifier [81, 14] - [81, 19])
(string [81, 20] - [81, 34]
(string_fragment [81, 21] - [81, 33]))))
(jsx_expression [82, 10] - [82, 20]
(identifier [82, 11] - [82, 19]))
close_tag: (jsx_closing_element [83, 8] - [83, 15]
name: (identifier [83, 10] - [83, 14])))
close_tag: (jsx_closing_element [84, 6] - [84, 12]
name: (identifier [84, 8] - [84, 11])))
close_tag: (jsx_closing_element [85, 4] - [85, 21]
name: (identifier [85, 6] - [85, 20])))))))))))

View File

@ -1,7 +0,0 @@
(program [0, 0] - [341, 0]
(export_statement [0, 0] - [340, 2]
declaration: (lexical_declaration [0, 7] - [340, 2]
(variable_declarator [0, 13] - [340, 1]
name: (identifier [0, 13] - [0, 23])
value: (template_string [0, 26] - [340, 1]
(string_fragment [0, 27] - [340, 0]))))))

View File

@ -1,501 +0,0 @@
(program [0, 0] - [137, 0]
(import_statement [0, 0] - [0, 67]
(import_clause [0, 7] - [0, 29]
(named_imports [0, 7] - [0, 29]
(import_specifier [0, 9] - [0, 27]
name: (identifier [0, 9] - [0, 27]))))
source: (string [0, 35] - [0, 66]
(string_fragment [0, 36] - [0, 65])))
(export_statement [2, 0] - [136, 2]
declaration: (lexical_declaration [2, 7] - [136, 2]
(variable_declarator [2, 13] - [136, 1]
name: (identifier [2, 13] - [2, 30])
value: (arrow_function [2, 33] - [136, 1]
parameters: (formal_parameters [2, 33] - [2, 35])
body: (statement_block [2, 39] - [136, 1]
(return_statement [3, 2] - [135, 4]
(parenthesized_expression [3, 9] - [135, 3]
(jsx_element [4, 4] - [134, 25]
open_tag: (jsx_opening_element [4, 4] - [4, 40]
name: (identifier [4, 5] - [4, 23])
attribute: (jsx_attribute [4, 24] - [4, 39]
(property_identifier [4, 24] - [4, 29])
(string [4, 30] - [4, 39]
(string_fragment [4, 31] - [4, 38]))))
(jsx_element [5, 6] - [133, 12]
open_tag: (jsx_opening_element [5, 6] - [5, 11]
name: (identifier [5, 7] - [5, 10]))
(jsx_element [6, 8] - [26, 14]
open_tag: (jsx_opening_element [6, 8] - [6, 34]
name: (identifier [6, 9] - [6, 12])
attribute: (jsx_attribute [6, 13] - [6, 33]
(property_identifier [6, 13] - [6, 18])
(string [6, 19] - [6, 33]
(string_fragment [6, 20] - [6, 32]))))
(jsx_element [7, 10] - [21, 16]
open_tag: (jsx_opening_element [7, 10] - [7, 34]
name: (identifier [7, 11] - [7, 14])
attribute: (jsx_attribute [7, 15] - [7, 33]
(property_identifier [7, 15] - [7, 20])
(string [7, 21] - [7, 33]
(string_fragment [7, 22] - [7, 32]))))
(jsx_element [8, 12] - [20, 18]
open_tag: (jsx_opening_element [8, 12] - [17, 13]
name: (identifier [8, 13] - [8, 16])
attribute: (jsx_attribute [9, 14] - [9, 24]
(property_identifier [9, 14] - [9, 19])
(string [9, 20] - [9, 24]
(string_fragment [9, 21] - [9, 23])))
attribute: (jsx_attribute [10, 14] - [10, 25]
(property_identifier [10, 14] - [10, 20])
(string [10, 21] - [10, 25]
(string_fragment [10, 22] - [10, 24])))
attribute: (jsx_attribute [11, 14] - [11, 33]
(property_identifier [11, 14] - [11, 21])
(string [11, 22] - [11, 33]
(string_fragment [11, 23] - [11, 32])))
attribute: (jsx_attribute [12, 14] - [12, 25]
(property_identifier [12, 14] - [12, 18])
(string [12, 19] - [12, 25]
(string_fragment [12, 20] - [12, 24])))
attribute: (jsx_attribute [13, 14] - [13, 35]
(property_identifier [13, 14] - [13, 20])
(string [13, 21] - [13, 35]
(string_fragment [13, 22] - [13, 34])))
attribute: (jsx_attribute [14, 14] - [14, 32]
(property_identifier [14, 14] - [14, 26])
(string [14, 27] - [14, 32]
(string_fragment [14, 28] - [14, 31])))
attribute: (jsx_attribute [15, 14] - [15, 36]
(property_identifier [15, 14] - [15, 28])
(string [15, 29] - [15, 36]
(string_fragment [15, 30] - [15, 35])))
attribute: (jsx_attribute [16, 14] - [16, 37]
(property_identifier [16, 14] - [16, 29])
(string [16, 30] - [16, 37]
(string_fragment [16, 31] - [16, 36]))))
(jsx_element [18, 14] - [18, 77]
open_tag: (jsx_opening_element [18, 14] - [18, 70]
name: (identifier [18, 15] - [18, 19])
attribute: (jsx_attribute [18, 20] - [18, 25]
(property_identifier [18, 20] - [18, 21])
(string [18, 22] - [18, 25]
(string_fragment [18, 23] - [18, 24])))
attribute: (jsx_attribute [18, 26] - [18, 32]
(property_identifier [18, 26] - [18, 27])
(string [18, 28] - [18, 32]
(string_fragment [18, 29] - [18, 31])))
attribute: (jsx_attribute [18, 33] - [18, 43]
(property_identifier [18, 33] - [18, 38])
(string [18, 39] - [18, 43]
(string_fragment [18, 40] - [18, 42])))
attribute: (jsx_attribute [18, 44] - [18, 55]
(property_identifier [18, 44] - [18, 50])
(string [18, 51] - [18, 55]
(string_fragment [18, 52] - [18, 54])))
attribute: (jsx_attribute [18, 56] - [18, 62]
(property_identifier [18, 56] - [18, 58])
(string [18, 59] - [18, 62]
(string_fragment [18, 60] - [18, 61])))
attribute: (jsx_attribute [18, 63] - [18, 69]
(property_identifier [18, 63] - [18, 65])
(string [18, 66] - [18, 69]
(string_fragment [18, 67] - [18, 68]))))
close_tag: (jsx_closing_element [18, 70] - [18, 77]
name: (identifier [18, 72] - [18, 76])))
(jsx_element [19, 14] - [19, 56]
open_tag: (jsx_opening_element [19, 14] - [19, 49]
name: (identifier [19, 15] - [19, 19])
attribute: (jsx_attribute [19, 20] - [19, 48]
(property_identifier [19, 20] - [19, 21])
(string [19, 22] - [19, 48]
(string_fragment [19, 23] - [19, 47]))))
close_tag: (jsx_closing_element [19, 49] - [19, 56]
name: (identifier [19, 51] - [19, 55])))
close_tag: (jsx_closing_element [20, 12] - [20, 18]
name: (identifier [20, 14] - [20, 17])))
close_tag: (jsx_closing_element [21, 10] - [21, 16]
name: (identifier [21, 12] - [21, 15])))
(jsx_element [22, 10] - [22, 31]
open_tag: (jsx_opening_element [22, 10] - [22, 14]
name: (identifier [22, 11] - [22, 13]))
(jsx_text [22, 14] - [22, 26])
close_tag: (jsx_closing_element [22, 26] - [22, 31]
name: (identifier [22, 28] - [22, 30])))
(jsx_element [23, 10] - [25, 14]
open_tag: (jsx_opening_element [23, 10] - [23, 30]
name: (identifier [23, 11] - [23, 12])
attribute: (jsx_attribute [23, 13] - [23, 29]
(property_identifier [23, 13] - [23, 18])
(string [23, 19] - [23, 29]
(string_fragment [23, 20] - [23, 28]))))
(jsx_text [23, 30] - [25, 10])
close_tag: (jsx_closing_element [25, 10] - [25, 14]
name: (identifier [25, 12] - [25, 13])))
close_tag: (jsx_closing_element [26, 8] - [26, 14]
name: (identifier [26, 10] - [26, 13])))
(jsx_expression [28, 8] - [28, 45]
(comment [28, 9] - [28, 44]))
(jsx_element [29, 8] - [50, 17]
open_tag: (jsx_opening_element [29, 8] - [34, 9]
name: (identifier [29, 9] - [29, 15])
attribute: (jsx_attribute [30, 10] - [30, 23]
(property_identifier [30, 10] - [30, 14])
(string [30, 15] - [30, 23]
(string_fragment [30, 16] - [30, 22])))
attribute: (jsx_attribute [31, 10] - [31, 23]
(property_identifier [31, 10] - [31, 12])
(string [31, 13] - [31, 23]
(string_fragment [31, 14] - [31, 22])))
attribute: (jsx_attribute [32, 10] - [32, 29]
(property_identifier [32, 10] - [32, 15])
(string [32, 16] - [32, 29]
(string_fragment [32, 17] - [32, 28])))
attribute: (jsx_attribute [33, 10] - [33, 131]
(property_identifier [33, 10] - [33, 15])
(string [33, 16] - [33, 131]
(string_fragment [33, 17] - [33, 130]))))
(jsx_element [35, 10] - [48, 16]
open_tag: (jsx_opening_element [35, 10] - [44, 11]
name: (identifier [35, 11] - [35, 14])
attribute: (jsx_attribute [36, 12] - [36, 22]
(property_identifier [36, 12] - [36, 17])
(string [36, 18] - [36, 22]
(string_fragment [36, 19] - [36, 21])))
attribute: (jsx_attribute [37, 12] - [37, 23]
(property_identifier [37, 12] - [37, 18])
(string [37, 19] - [37, 23]
(string_fragment [37, 20] - [37, 22])))
attribute: (jsx_attribute [38, 12] - [38, 31]
(property_identifier [38, 12] - [38, 19])
(string [38, 20] - [38, 31]
(string_fragment [38, 21] - [38, 30])))
attribute: (jsx_attribute [39, 12] - [39, 23]
(property_identifier [39, 12] - [39, 16])
(string [39, 17] - [39, 23]
(string_fragment [39, 18] - [39, 22])))
attribute: (jsx_attribute [40, 12] - [40, 33]
(property_identifier [40, 12] - [40, 18])
(string [40, 19] - [40, 33]
(string_fragment [40, 20] - [40, 32])))
attribute: (jsx_attribute [41, 12] - [41, 28]
(property_identifier [41, 12] - [41, 24])
(string [41, 25] - [41, 28]
(string_fragment [41, 26] - [41, 27])))
attribute: (jsx_attribute [42, 12] - [42, 34]
(property_identifier [42, 12] - [42, 26])
(string [42, 27] - [42, 34]
(string_fragment [42, 28] - [42, 33])))
attribute: (jsx_attribute [43, 12] - [43, 35]
(property_identifier [43, 12] - [43, 27])
(string [43, 28] - [43, 35]
(string_fragment [43, 29] - [43, 34]))))
(jsx_element [45, 12] - [45, 56]
open_tag: (jsx_opening_element [45, 12] - [45, 47]
name: (identifier [45, 13] - [45, 19])
attribute: (jsx_attribute [45, 20] - [45, 28]
(property_identifier [45, 20] - [45, 22])
(string [45, 23] - [45, 28]
(string_fragment [45, 24] - [45, 27])))
attribute: (jsx_attribute [45, 29] - [45, 38]
(property_identifier [45, 29] - [45, 31])
(string [45, 32] - [45, 38]
(string_fragment [45, 33] - [45, 37])))
attribute: (jsx_attribute [45, 39] - [45, 46]
(property_identifier [45, 39] - [45, 40])
(string [45, 41] - [45, 46]
(string_fragment [45, 42] - [45, 45]))))
close_tag: (jsx_closing_element [45, 47] - [45, 56]
name: (identifier [45, 49] - [45, 55])))
(jsx_element [46, 12] - [46, 43]
open_tag: (jsx_opening_element [46, 12] - [46, 36]
name: (identifier [46, 13] - [46, 17])
attribute: (jsx_attribute [46, 18] - [46, 35]
(property_identifier [46, 18] - [46, 19])
(string [46, 20] - [46, 35]
(string_fragment [46, 21] - [46, 34]))))
close_tag: (jsx_closing_element [46, 36] - [46, 43]
name: (identifier [46, 38] - [46, 42])))
(jsx_element [47, 12] - [47, 53]
open_tag: (jsx_opening_element [47, 12] - [47, 46]
name: (identifier [47, 13] - [47, 17])
attribute: (jsx_attribute [47, 18] - [47, 45]
(property_identifier [47, 18] - [47, 19])
(string [47, 20] - [47, 45]
(string_fragment [47, 21] - [47, 44]))))
close_tag: (jsx_closing_element [47, 46] - [47, 53]
name: (identifier [47, 48] - [47, 52])))
close_tag: (jsx_closing_element [48, 10] - [48, 16]
name: (identifier [48, 12] - [48, 15])))
(jsx_element [49, 10] - [49, 43]
open_tag: (jsx_opening_element [49, 10] - [49, 16]
name: (identifier [49, 11] - [49, 15]))
(jsx_text [49, 16] - [49, 36])
close_tag: (jsx_closing_element [49, 36] - [49, 43]
name: (identifier [49, 38] - [49, 42])))
close_tag: (jsx_closing_element [50, 8] - [50, 17]
name: (identifier [50, 10] - [50, 16])))
(jsx_expression [52, 8] - [52, 33]
(comment [52, 9] - [52, 32]))
(jsx_element [53, 8] - [78, 14]
open_tag: (jsx_opening_element [53, 8] - [56, 9]
name: (identifier [53, 9] - [53, 12])
attribute: (jsx_attribute [54, 10] - [54, 31]
(property_identifier [54, 10] - [54, 12])
(string [54, 13] - [54, 31]
(string_fragment [54, 14] - [54, 30])))
attribute: (jsx_attribute [55, 10] - [55, 133]
(property_identifier [55, 10] - [55, 15])
(string [55, 16] - [55, 133]
(string_fragment [55, 17] - [55, 132]))))
(jsx_element [57, 10] - [77, 16]
open_tag: (jsx_opening_element [57, 10] - [57, 79]
name: (identifier [57, 11] - [57, 14])
attribute: (jsx_attribute [57, 15] - [57, 78]
(property_identifier [57, 15] - [57, 20])
(string [57, 21] - [57, 78]
(string_fragment [57, 22] - [57, 77]))))
(jsx_element [58, 12] - [75, 18]
open_tag: (jsx_opening_element [58, 12] - [66, 13]
name: (identifier [58, 13] - [58, 16])
attribute: (jsx_attribute [59, 14] - [59, 57]
(property_identifier [59, 14] - [59, 19])
(string [59, 20] - [59, 57]
(string_fragment [59, 21] - [59, 56])))
attribute: (jsx_attribute [60, 14] - [60, 24]
(property_identifier [60, 14] - [60, 19])
(string [60, 20] - [60, 24]
(string_fragment [60, 21] - [60, 23])))
attribute: (jsx_attribute [61, 14] - [61, 25]
(property_identifier [61, 14] - [61, 20])
(string [61, 21] - [61, 25]
(string_fragment [61, 22] - [61, 24])))
attribute: (jsx_attribute [62, 14] - [62, 33]
(property_identifier [62, 14] - [62, 21])
(string [62, 22] - [62, 33]
(string_fragment [62, 23] - [62, 32])))
attribute: (jsx_attribute [63, 14] - [63, 25]
(property_identifier [63, 14] - [63, 18])
(string [63, 19] - [63, 25]
(string_fragment [63, 20] - [63, 24])))
attribute: (jsx_attribute [64, 14] - [64, 35]
(property_identifier [64, 14] - [64, 20])
(string [64, 21] - [64, 35]
(string_fragment [64, 22] - [64, 34])))
attribute: (jsx_attribute [65, 14] - [65, 32]
(property_identifier [65, 14] - [65, 26])
(string [65, 27] - [65, 32]
(string_fragment [65, 28] - [65, 31]))))
(jsx_element [67, 14] - [74, 23]
open_tag: (jsx_opening_element [67, 14] - [73, 15]
name: (identifier [67, 15] - [67, 21])
attribute: (jsx_attribute [68, 16] - [68, 23]
(property_identifier [68, 16] - [68, 18])
(string [68, 19] - [68, 23]
(string_fragment [68, 20] - [68, 22])))
attribute: (jsx_attribute [69, 16] - [69, 23]
(property_identifier [69, 16] - [69, 18])
(string [69, 19] - [69, 23]
(string_fragment [69, 20] - [69, 22])))
attribute: (jsx_attribute [70, 16] - [70, 22]
(property_identifier [70, 16] - [70, 17])
(string [70, 18] - [70, 22]
(string_fragment [70, 19] - [70, 21])))
attribute: (jsx_attribute [71, 16] - [71, 37]
(property_identifier [71, 16] - [71, 32])
(string [71, 33] - [71, 37]
(string_fragment [71, 34] - [71, 36])))
attribute: (jsx_attribute [72, 16] - [72, 38]
(property_identifier [72, 16] - [72, 33])
(string [72, 34] - [72, 38]
(string_fragment [72, 35] - [72, 37]))))
close_tag: (jsx_closing_element [74, 14] - [74, 23]
name: (identifier [74, 16] - [74, 22])))
close_tag: (jsx_closing_element [75, 12] - [75, 18]
name: (identifier [75, 14] - [75, 17])))
(jsx_element [76, 12] - [76, 66]
open_tag: (jsx_opening_element [76, 12] - [76, 18]
name: (identifier [76, 13] - [76, 17]))
(jsx_text [76, 18] - [76, 59])
close_tag: (jsx_closing_element [76, 59] - [76, 66]
name: (identifier [76, 61] - [76, 65])))
close_tag: (jsx_closing_element [77, 10] - [77, 16]
name: (identifier [77, 12] - [77, 15])))
close_tag: (jsx_closing_element [78, 8] - [78, 14]
name: (identifier [78, 10] - [78, 13])))
(jsx_element [80, 8] - [80, 38]
open_tag: (jsx_opening_element [80, 8] - [80, 32]
name: (identifier [80, 9] - [80, 12])
attribute: (jsx_attribute [80, 13] - [80, 31]
(property_identifier [80, 13] - [80, 15])
(string [80, 16] - [80, 31]
(string_fragment [80, 17] - [80, 30]))))
close_tag: (jsx_closing_element [80, 32] - [80, 38]
name: (identifier [80, 34] - [80, 37])))
(jsx_expression [82, 8] - [82, 71]
(comment [82, 9] - [82, 70]))
(jsx_element [83, 8] - [114, 18]
open_tag: (jsx_opening_element [83, 8] - [83, 127]
name: (identifier [83, 9] - [83, 16])
attribute: (jsx_attribute [83, 17] - [83, 126]
(property_identifier [83, 17] - [83, 22])
(string [83, 23] - [83, 126]
(string_fragment [83, 24] - [83, 125]))))
(jsx_element [84, 10] - [86, 20]
open_tag: (jsx_opening_element [84, 10] - [84, 132]
name: (identifier [84, 11] - [84, 18])
attribute: (jsx_attribute [84, 19] - [84, 131]
(property_identifier [84, 19] - [84, 24])
(string [84, 25] - [84, 131]
(string_fragment [84, 26] - [84, 130]))))
(jsx_text [84, 132] - [85, 21])
(ERROR [85, 21] - [85, 39]
(identifier [85, 23] - [85, 31])
(identifier [85, 32] - [85, 39]))
close_tag: (jsx_closing_element [86, 10] - [86, 20]
name: (identifier [86, 12] - [86, 19])))
(jsx_element [87, 10] - [113, 16]
open_tag: (jsx_opening_element [87, 10] - [87, 41]
name: (identifier [87, 11] - [87, 14])
attribute: (jsx_attribute [87, 15] - [87, 40]
(property_identifier [87, 15] - [87, 20])
(string [87, 21] - [87, 40]
(string_fragment [87, 22] - [87, 39]))))
(jsx_element [88, 12] - [93, 20]
open_tag: (jsx_opening_element [88, 12] - [91, 13]
name: (identifier [88, 13] - [88, 18])
attribute: (jsx_attribute [89, 14] - [89, 33]
(property_identifier [89, 14] - [89, 17])
(string [89, 18] - [89, 33]
(string_fragment [89, 19] - [89, 32])))
attribute: (jsx_attribute [90, 14] - [90, 128]
(property_identifier [90, 14] - [90, 19])
(string [90, 20] - [90, 128]
(string_fragment [90, 21] - [90, 127]))))
(jsx_text [91, 13] - [93, 12])
close_tag: (jsx_closing_element [93, 12] - [93, 20]
name: (identifier [93, 14] - [93, 19])))
(jsx_self_closing_element [94, 12] - [100, 14]
name: (identifier [94, 13] - [94, 18])
attribute: (jsx_attribute [95, 14] - [95, 25]
(property_identifier [95, 14] - [95, 18])
(string [95, 19] - [95, 25]
(string_fragment [95, 20] - [95, 24])))
attribute: (jsx_attribute [96, 14] - [96, 32]
(property_identifier [96, 14] - [96, 16])
(string [96, 17] - [96, 32]
(string_fragment [96, 18] - [96, 31])))
attribute: (jsx_attribute [97, 14] - [97, 46]
(property_identifier [97, 14] - [97, 26])
(string [97, 27] - [97, 46]
(string_fragment [97, 28] - [97, 45])))
attribute: (jsx_attribute [98, 14] - [98, 44]
(property_identifier [98, 14] - [98, 25])
(string [98, 26] - [98, 44]
(string_fragment [98, 27] - [98, 43])))
attribute: (jsx_attribute [99, 14] - [99, 45]
(property_identifier [99, 14] - [99, 19])
(string [99, 20] - [99, 45]
(string_fragment [99, 21] - [99, 44]))))
(jsx_element [101, 12] - [103, 16]
open_tag: (jsx_opening_element [101, 12] - [101, 88]
name: (identifier [101, 13] - [101, 14])
attribute: (jsx_attribute [101, 15] - [101, 87]
(property_identifier [101, 15] - [101, 20])
(string [101, 21] - [101, 87]
(string_fragment [101, 22] - [101, 86]))))
(jsx_text [101, 88] - [103, 12])
close_tag: (jsx_closing_element [103, 12] - [103, 16]
name: (identifier [103, 14] - [103, 15])))
(jsx_element [105, 12] - [112, 18]
open_tag: (jsx_opening_element [105, 12] - [105, 112]
name: (identifier [105, 13] - [105, 16])
attribute: (jsx_attribute [105, 17] - [105, 111]
(property_identifier [105, 17] - [105, 22])
(string [105, 23] - [105, 111]
(string_fragment [105, 24] - [105, 110]))))
(jsx_element [106, 14] - [111, 18]
open_tag: (jsx_opening_element [106, 14] - [109, 15]
name: (identifier [106, 15] - [106, 16])
attribute: (jsx_attribute [107, 16] - [107, 32]
(property_identifier [107, 16] - [107, 20])
(string [107, 21] - [107, 32]
(string_fragment [107, 22] - [107, 31])))
attribute: (jsx_attribute [108, 16] - [108, 114]
(property_identifier [108, 16] - [108, 21])
(string [108, 22] - [108, 114]
(string_fragment [108, 23] - [108, 113]))))
(jsx_text [109, 15] - [111, 14])
close_tag: (jsx_closing_element [111, 14] - [111, 18]
name: (identifier [111, 16] - [111, 17])))
close_tag: (jsx_closing_element [112, 12] - [112, 18]
name: (identifier [112, 14] - [112, 17])))
close_tag: (jsx_closing_element [113, 10] - [113, 16]
name: (identifier [113, 12] - [113, 15])))
close_tag: (jsx_closing_element [114, 8] - [114, 18]
name: (identifier [114, 10] - [114, 17])))
(jsx_element [116, 8] - [120, 14]
open_tag: (jsx_opening_element [116, 8] - [116, 27]
name: (identifier [116, 9] - [116, 12])
attribute: (jsx_attribute [116, 13] - [116, 26]
(property_identifier [116, 13] - [116, 18])
(string [116, 19] - [116, 26]
(string_fragment [116, 20] - [116, 25]))))
(jsx_text [116, 27] - [117, 33])
(jsx_element [117, 33] - [117, 77]
open_tag: (jsx_opening_element [117, 33] - [117, 53]
name: (identifier [117, 34] - [117, 35])
attribute: (jsx_attribute [117, 36] - [117, 52]
(property_identifier [117, 36] - [117, 40])
(string [117, 41] - [117, 52]
(string_fragment [117, 42] - [117, 51]))))
(jsx_text [117, 53] - [117, 73])
close_tag: (jsx_closing_element [117, 73] - [117, 77]
name: (identifier [117, 75] - [117, 76])))
(jsx_text [117, 77] - [118, 10])
(jsx_expression [118, 10] - [118, 15]
(string [118, 11] - [118, 14]
(string_fragment [118, 12] - [118, 13])))
(jsx_element [119, 10] - [119, 43]
open_tag: (jsx_opening_element [119, 10] - [119, 26]
name: (identifier [119, 11] - [119, 12])
attribute: (jsx_attribute [119, 13] - [119, 25]
(property_identifier [119, 13] - [119, 17])
(string [119, 18] - [119, 25]
(string_fragment [119, 19] - [119, 24]))))
(jsx_text [119, 26] - [119, 39])
close_tag: (jsx_closing_element [119, 39] - [119, 43]
name: (identifier [119, 41] - [119, 42])))
close_tag: (jsx_closing_element [120, 8] - [120, 14]
name: (identifier [120, 10] - [120, 13])))
(jsx_element [122, 8] - [129, 16]
open_tag: (jsx_opening_element [122, 8] - [122, 15]
name: (identifier [122, 9] - [122, 14]))
(jsx_expression [123, 10] - [128, 12]
(template_string [123, 11] - [128, 11]
(string_fragment [123, 12] - [128, 10])))
close_tag: (jsx_closing_element [129, 8] - [129, 16]
name: (identifier [129, 10] - [129, 15])))
(jsx_element [131, 8] - [131, 58]
open_tag: (jsx_opening_element [131, 8] - [131, 49]
name: (identifier [131, 9] - [131, 15])
attribute: (jsx_attribute [131, 16] - [131, 48]
(property_identifier [131, 16] - [131, 19])
(string [131, 20] - [131, 48]
(string_fragment [131, 21] - [131, 47]))))
close_tag: (jsx_closing_element [131, 49] - [131, 58]
name: (identifier [131, 51] - [131, 57])))
(jsx_element [132, 8] - [132, 57]
open_tag: (jsx_opening_element [132, 8] - [132, 48]
name: (identifier [132, 9] - [132, 15])
attribute: (jsx_attribute [132, 16] - [132, 47]
(property_identifier [132, 16] - [132, 19])
(string [132, 20] - [132, 47]
(string_fragment [132, 21] - [132, 46]))))
close_tag: (jsx_closing_element [132, 48] - [132, 57]
name: (identifier [132, 50] - [132, 56])))
close_tag: (jsx_closing_element [133, 6] - [133, 12]
name: (identifier [133, 8] - [133, 11])))
close_tag: (jsx_closing_element [134, 4] - [134, 25]
name: (identifier [134, 6] - [134, 24])))))))))))
/home/tylerg/p/data/auth-yes/src/features/auth/login_fragments.tsx Parse: 0.35 ms 13356 bytes/ms (ERROR [85, 21] - [85, 39])

File diff suppressed because it is too large Load Diff

View File

@ -1,681 +0,0 @@
(program [0, 0] - [138, 0]
(import_statement [0, 0] - [0, 40]
(import_clause [0, 7] - [0, 15]
(named_imports [0, 7] - [0, 15]
(import_specifier [0, 9] - [0, 13]
name: (identifier [0, 9] - [0, 13]))))
source: (string [0, 21] - [0, 39]
(string_fragment [0, 22] - [0, 38])))
(import_statement [1, 0] - [1, 52]
(import_clause [1, 7] - [1, 22]
(named_imports [1, 7] - [1, 22]
(import_specifier [1, 9] - [1, 20]
name: (identifier [1, 9] - [1, 20]))))
source: (string [1, 28] - [1, 51]
(string_fragment [1, 29] - [1, 50])))
(import_statement [2, 0] - [2, 55]
(import_clause [2, 7] - [2, 23]
(named_imports [2, 7] - [2, 23]
(import_specifier [2, 9] - [2, 21]
name: (identifier [2, 9] - [2, 21]))))
source: (string [2, 29] - [2, 54]
(string_fragment [2, 30] - [2, 53])))
(import_statement [3, 0] - [3, 64]
(import_clause [3, 7] - [3, 26]
(named_imports [3, 7] - [3, 26]
(import_specifier [3, 9] - [3, 24]
name: (identifier [3, 9] - [3, 24]))))
source: (string [3, 32] - [3, 63]
(string_fragment [3, 33] - [3, 62])))
(import_statement [5, 0] - [5, 50]
(import_clause [5, 7] - [5, 29]
(named_imports [5, 7] - [5, 29]
(import_specifier [5, 9] - [5, 15]
name: (identifier [5, 9] - [5, 15]))
(import_specifier [5, 17] - [5, 27]
name: (identifier [5, 17] - [5, 27]))))
source: (string [5, 35] - [5, 49]
(string_fragment [5, 36] - [5, 48])))
(import_statement [6, 0] - [6, 54]
(import_clause [6, 7] - [6, 29]
(named_imports [6, 7] - [6, 29]
(import_specifier [6, 9] - [6, 19]
name: (identifier [6, 9] - [6, 19]))
(import_specifier [6, 21] - [6, 27]
name: (identifier [6, 21] - [6, 27]))))
source: (string [6, 35] - [6, 53]
(string_fragment [6, 36] - [6, 52])))
(import_statement [7, 0] - [7, 67]
(import_clause [7, 7] - [7, 29]
(named_imports [7, 7] - [7, 29]
(import_specifier [7, 9] - [7, 27]
name: (identifier [7, 9] - [7, 27]))))
source: (string [7, 35] - [7, 66]
(string_fragment [7, 36] - [7, 65])))
(import_statement [8, 0] - [8, 56]
(import_clause [8, 7] - [8, 26]
(named_imports [8, 7] - [8, 26]
(import_specifier [8, 9] - [8, 24]
name: (identifier [8, 9] - [8, 24]))))
source: (string [8, 32] - [8, 55]
(string_fragment [8, 33] - [8, 54])))
(import_statement [9, 0] - [9, 54]
(import_clause [9, 7] - [9, 32]
(named_imports [9, 7] - [9, 32]
(import_specifier [9, 9] - [9, 30]
name: (identifier [9, 9] - [9, 30]))))
source: (string [9, 38] - [9, 53]
(string_fragment [9, 39] - [9, 52])))
(import_statement [10, 0] - [14, 27]
(import_clause [10, 7] - [14, 1]
(named_imports [10, 7] - [14, 1]
(import_specifier [11, 2] - [11, 22]
name: (identifier [11, 2] - [11, 22]))
(import_specifier [12, 2] - [12, 22]
name: (identifier [12, 2] - [12, 22]))
(import_specifier [13, 2] - [13, 17]
name: (identifier [13, 2] - [13, 17]))))
source: (string [14, 7] - [14, 26]
(string_fragment [14, 8] - [14, 25])))
(import_statement [15, 0] - [15, 59]
(import_clause [15, 7] - [15, 28]
(named_imports [15, 7] - [15, 28]
(import_specifier [15, 9] - [15, 26]
name: (identifier [15, 9] - [15, 26]))))
source: (string [15, 34] - [15, 58]
(string_fragment [15, 35] - [15, 57])))
(import_statement [16, 0] - [16, 47]
(import_clause [16, 7] - [16, 23]
(named_imports [16, 7] - [16, 23]
(import_specifier [16, 9] - [16, 21]
name: (identifier [16, 9] - [16, 21]))))
source: (string [16, 29] - [16, 46]
(string_fragment [16, 30] - [16, 45])))
(import_statement [18, 0] - [18, 56]
(import_clause [18, 7] - [18, 21]
(named_imports [18, 7] - [18, 21]
(import_specifier [18, 9] - [18, 19]
name: (identifier [18, 9] - [18, 19]))))
source: (string [18, 27] - [18, 55]
(string_fragment [18, 28] - [18, 54])))
(import_statement [19, 0] - [19, 58]
(import_clause [19, 7] - [19, 22]
(named_imports [19, 7] - [19, 22]
(import_specifier [19, 9] - [19, 20]
name: (identifier [19, 9] - [19, 20]))))
source: (string [19, 28] - [19, 57]
(string_fragment [19, 29] - [19, 56])))
(import_statement [20, 0] - [20, 60]
(import_clause [20, 7] - [20, 23]
(named_imports [20, 7] - [20, 23]
(import_specifier [20, 9] - [20, 21]
name: (identifier [20, 9] - [20, 21]))))
source: (string [20, 29] - [20, 59]
(string_fragment [20, 30] - [20, 58])))
(import_statement [21, 0] - [21, 63]
(import_clause [21, 7] - [21, 24]
(named_imports [21, 7] - [21, 24]
(import_specifier [21, 9] - [21, 22]
name: (identifier [21, 9] - [21, 22]))))
source: (string [21, 30] - [21, 62]
(string_fragment [21, 31] - [21, 61])))
(import_statement [22, 0] - [22, 64]
(import_clause [22, 7] - [22, 21]
(named_imports [22, 7] - [22, 21]
(import_specifier [22, 9] - [22, 19]
name: (identifier [22, 9] - [22, 19]))))
source: (string [22, 27] - [22, 63]
(string_fragment [22, 28] - [22, 62])))
(import_statement [23, 0] - [23, 70]
(import_clause [23, 7] - [23, 28]
(named_imports [23, 7] - [23, 28]
(import_specifier [23, 9] - [23, 26]
name: (identifier [23, 9] - [23, 26]))))
source: (string [23, 34] - [23, 69]
(string_fragment [23, 35] - [23, 68])))
(lexical_declaration [25, 0] - [25, 29]
(variable_declarator [25, 6] - [25, 28]
name: (identifier [25, 6] - [25, 9])
type: (type_annotation [25, 9] - [25, 15]
(type_identifier [25, 11] - [25, 15]))
value: (new_expression [25, 18] - [25, 28]
constructor: (identifier [25, 22] - [25, 26])
arguments: (arguments [25, 26] - [25, 28]))))
(expression_statement [27, 0] - [27, 30]
(call_expression [27, 0] - [27, 29]
function: (member_expression [27, 0] - [27, 7]
object: (identifier [27, 0] - [27, 3])
property: (property_identifier [27, 4] - [27, 7]))
arguments: (arguments [27, 7] - [27, 29]
(string [27, 8] - [27, 11]
(string_fragment [27, 9] - [27, 10]))
(identifier [27, 13] - [27, 28]))))
(expression_statement [28, 0] - [28, 35]
(call_expression [28, 0] - [28, 34]
function: (member_expression [28, 0] - [28, 7]
object: (identifier [28, 0] - [28, 3])
property: (property_identifier [28, 4] - [28, 7]))
arguments: (arguments [28, 7] - [28, 34]
(string [28, 8] - [28, 11]
(string_fragment [28, 9] - [28, 10]))
(call_expression [28, 13] - [28, 33]
function: (identifier [28, 13] - [28, 31])
arguments: (arguments [28, 31] - [28, 33])))))
(comment [30, 0] - [30, 81])
(expression_statement [31, 0] - [31, 50]
(call_expression [31, 0] - [31, 49]
function: (member_expression [31, 0] - [31, 7]
object: (identifier [31, 0] - [31, 3])
property: (property_identifier [31, 4] - [31, 7]))
arguments: (arguments [31, 7] - [31, 49]
(string [31, 8] - [31, 19]
(string_fragment [31, 9] - [31, 18]))
(call_expression [31, 21] - [31, 48]
function: (identifier [31, 21] - [31, 32])
arguments: (arguments [31, 32] - [31, 48]
(object [31, 33] - [31, 47]
(pair [31, 35] - [31, 45]
key: (property_identifier [31, 35] - [31, 39])
value: (string [31, 41] - [31, 45]
(string_fragment [31, 42] - [31, 44])))))))))
(comment [33, 0] - [33, 38])
(expression_statement [34, 0] - [41, 3]
(call_expression [34, 0] - [41, 2]
function: (member_expression [34, 0] - [34, 7]
object: (identifier [34, 0] - [34, 3])
property: (property_identifier [34, 4] - [34, 7]))
arguments: (arguments [34, 7] - [41, 2]
(string [34, 8] - [34, 11]
(string_fragment [34, 9] - [34, 10]))
(arrow_function [34, 13] - [41, 1]
parameters: (formal_parameters [34, 19] - [34, 22]
(required_parameter [34, 20] - [34, 21]
pattern: (identifier [34, 20] - [34, 21])))
body: (statement_block [34, 26] - [41, 1]
(expression_statement [35, 2] - [35, 78]
(call_expression [35, 2] - [35, 77]
function: (member_expression [35, 2] - [35, 10]
object: (identifier [35, 2] - [35, 3])
property: (property_identifier [35, 4] - [35, 10]))
arguments: (arguments [35, 10] - [35, 77]
(string [35, 11] - [35, 26]
(string_fragment [35, 12] - [35, 25]))
(string [35, 28] - [35, 76]
(string_fragment [35, 29] - [35, 75])))))
(lexical_declaration [36, 2] - [36, 45]
(variable_declarator [36, 8] - [36, 44]
name: (identifier [36, 8] - [36, 12])
value: (await_expression [36, 15] - [36, 44]
(call_expression [36, 21] - [36, 44]
function: (identifier [36, 21] - [36, 41])
arguments: (arguments [36, 41] - [36, 44]
(identifier [36, 42] - [36, 43]))))))
(if_statement [37, 2] - [39, 3]
condition: (parenthesized_expression [37, 5] - [37, 11]
(identifier [37, 6] - [37, 10]))
consequence: (statement_block [37, 12] - [39, 3]
(return_statement [38, 4] - [38, 36]
(call_expression [38, 11] - [38, 35]
function: (member_expression [38, 11] - [38, 21]
object: (identifier [38, 11] - [38, 12])
property: (property_identifier [38, 13] - [38, 21]))
arguments: (arguments [38, 21] - [38, 35]
(string [38, 22] - [38, 34]
(string_fragment [38, 23] - [38, 33])))))))
(return_statement [40, 2] - [40, 30]
(call_expression [40, 9] - [40, 29]
function: (member_expression [40, 9] - [40, 19]
object: (identifier [40, 9] - [40, 10])
property: (property_identifier [40, 11] - [40, 19]))
arguments: (arguments [40, 19] - [40, 29]
(string [40, 20] - [40, 28]
(string_fragment [40, 21] - [40, 27]))))))))))
(expression_statement [43, 0] - [90, 3]
(call_expression [43, 0] - [90, 2]
function: (member_expression [43, 0] - [43, 7]
object: (identifier [43, 0] - [43, 3])
property: (property_identifier [43, 4] - [43, 7]))
arguments: (arguments [43, 7] - [90, 2]
(string [43, 8] - [43, 17]
(string_fragment [43, 9] - [43, 16]))
(arrow_function [43, 19] - [90, 1]
parameters: (formal_parameters [43, 25] - [43, 28]
(required_parameter [43, 26] - [43, 27]
pattern: (identifier [43, 26] - [43, 27])))
body: (statement_block [43, 32] - [90, 1]
(lexical_declaration [44, 2] - [44, 45]
(variable_declarator [44, 8] - [44, 44]
name: (identifier [44, 8] - [44, 18])
value: (call_expression [44, 21] - [44, 44]
function: (identifier [44, 21] - [44, 41])
arguments: (arguments [44, 41] - [44, 44]
(identifier [44, 42] - [44, 43])))))
(lexical_declaration [45, 2] - [45, 46]
(variable_declarator [45, 8] - [45, 45]
name: (identifier [45, 8] - [45, 19])
value: (call_expression [45, 22] - [45, 45]
function: (member_expression [45, 22] - [45, 33]
object: (member_expression [45, 22] - [45, 27]
object: (identifier [45, 22] - [45, 23])
property: (property_identifier [45, 24] - [45, 27]))
property: (property_identifier [45, 28] - [45, 33]))
arguments: (arguments [45, 33] - [45, 45]
(string [45, 34] - [45, 44]
(string_fragment [45, 35] - [45, 43]))))))
(lexical_declaration [46, 2] - [46, 26]
(variable_declarator [46, 6] - [46, 25]
name: (identifier [46, 6] - [46, 18])
value: (null [46, 21] - [46, 25])))
(lexical_declaration [47, 2] - [47, 64]
(variable_declarator [47, 8] - [47, 63]
name: (identifier [47, 8] - [47, 14])
value: (binary_expression [47, 17] - [47, 63]
left: (call_expression [47, 17] - [47, 48]
function: (member_expression [47, 17] - [47, 29]
object: (member_expression [47, 17] - [47, 22]
object: (identifier [47, 17] - [47, 18])
property: (property_identifier [47, 19] - [47, 22]))
property: (property_identifier [47, 23] - [47, 29]))
arguments: (arguments [47, 29] - [47, 48]
(string [47, 30] - [47, 47]
(string_fragment [47, 31] - [47, 46]))))
right: (string [47, 52] - [47, 63]
(string_fragment [47, 53] - [47, 62])))))
(lexical_declaration [48, 2] - [48, 20]
(variable_declarator [48, 6] - [48, 19]
name: (identifier [48, 6] - [48, 12])
value: (null [48, 15] - [48, 19])))
(if_statement [50, 2] - [63, 3]
condition: (parenthesized_expression [50, 5] - [50, 28]
(binary_expression [50, 6] - [50, 27]
left: (member_expression [50, 6] - [50, 23]
object: (identifier [50, 6] - [50, 16])
property: (property_identifier [50, 17] - [50, 23]))
right: (number [50, 26] - [50, 27])))
consequence: (statement_block [50, 29] - [63, 3]
(try_statement [51, 4] - [62, 19]
body: (statement_block [51, 8] - [62, 5]
(lexical_declaration [52, 6] - [52, 53]
(variable_declarator [52, 12] - [52, 52]
name: (identifier [52, 12] - [52, 20])
value: (await_expression [52, 23] - [52, 52]
(call_expression [52, 29] - [52, 52]
function: (identifier [52, 29] - [52, 49])
arguments: (arguments [52, 49] - [52, 52]
(identifier [52, 50] - [52, 51]))))))
(if_statement [53, 6] - [55, 7]
condition: (parenthesized_expression [53, 9] - [53, 19]
(identifier [53, 10] - [53, 18]))
consequence: (statement_block [53, 20] - [55, 7]
(expression_statement [54, 8] - [54, 33]
(assignment_expression [54, 8] - [54, 32]
left: (identifier [54, 8] - [54, 14])
right: (member_expression [54, 17] - [54, 32]
object: (identifier [54, 17] - [54, 25])
property: (property_identifier [54, 26] - [54, 32]))))))
(for_in_statement [56, 6] - [61, 7]
left: (identifier [56, 17] - [56, 20])
right: (identifier [56, 24] - [56, 34])
body: (statement_block [56, 36] - [61, 7]
(try_statement [57, 8] - [60, 23]
body: (statement_block [57, 12] - [60, 9]
(expression_statement [58, 10] - [58, 32]
(await_expression [58, 10] - [58, 31]
(call_expression [58, 16] - [58, 31]
function: (member_expression [58, 16] - [58, 26]
object: (identifier [58, 16] - [58, 22])
property: (property_identifier [58, 23] - [58, 26]))
arguments: (arguments [58, 26] - [58, 31]
(identifier [58, 27] - [58, 30])))))
(expression_statement [59, 10] - [59, 71]
(await_expression [59, 10] - [59, 70]
(call_expression [59, 16] - [59, 70]
function: (member_expression [59, 16] - [59, 30]
object: (identifier [59, 16] - [59, 26])
property: (property_identifier [59, 27] - [59, 30]))
arguments: (template_string [59, 30] - [59, 70]
(string_fragment [59, 31] - [59, 63])
(template_substitution [59, 63] - [59, 69]
(identifier [59, 65] - [59, 68])))))))
handler: (catch_clause [60, 10] - [60, 23]
parameter: (identifier [60, 17] - [60, 19])
body: (statement_block [60, 21] - [60, 23]))))))
handler: (catch_clause [62, 6] - [62, 19]
parameter: (identifier [62, 13] - [62, 15])
body: (statement_block [62, 17] - [62, 19])))))
(if_statement [65, 2] - [67, 3]
condition: (parenthesized_expression [65, 5] - [65, 52]
(binary_expression [65, 6] - [65, 51]
left: (identifier [65, 6] - [65, 17])
right: (call_expression [65, 21] - [65, 51]
function: (identifier [65, 21] - [65, 38])
arguments: (arguments [65, 38] - [65, 51]
(identifier [65, 39] - [65, 50])))))
consequence: (statement_block [65, 53] - [67, 3]
(expression_statement [66, 4] - [66, 31]
(assignment_expression [66, 4] - [66, 30]
left: (identifier [66, 4] - [66, 16])
right: (identifier [66, 19] - [66, 30])))))
(expression_statement [69, 2] - [69, 75]
(call_expression [69, 2] - [69, 74]
function: (member_expression [69, 2] - [69, 23]
object: (identifier [69, 2] - [69, 14])
property: (property_identifier [69, 15] - [69, 23]))
arguments: (arguments [69, 23] - [69, 74]
(identifier [69, 24] - [69, 30])
(string [69, 32] - [69, 48]
(string_fragment [69, 33] - [69, 47]))
(string [69, 50] - [69, 59]
(string_fragment [69, 51] - [69, 58]))
(null [69, 61] - [69, 65])
(identifier [69, 67] - [69, 73]))))
(lexical_declaration [71, 2] - [71, 41]
(variable_declarator [71, 8] - [71, 40]
name: (identifier [71, 8] - [71, 20])
value: (call_expression [71, 23] - [71, 40]
function: (identifier [71, 23] - [71, 38])
arguments: (arguments [71, 38] - [71, 40]))))
(if_statement [72, 2] - [80, 3]
condition: (parenthesized_expression [72, 5] - [72, 19]
(identifier [72, 6] - [72, 18]))
consequence: (statement_block [72, 20] - [80, 3]
(expression_statement [73, 4] - [79, 7]
(call_expression [73, 4] - [79, 6]
function: (identifier [73, 4] - [73, 16])
arguments: (arguments [73, 16] - [79, 6]
(identifier [73, 17] - [73, 18])
(string [73, 20] - [73, 32]
(string_fragment [73, 21] - [73, 31]))
(object [73, 34] - [79, 5]
(pair [74, 6] - [74, 26]
key: (property_identifier [74, 6] - [74, 12])
value: (identifier [74, 14] - [74, 26]))
(pair [75, 6] - [75, 15]
key: (property_identifier [75, 6] - [75, 10])
value: (string [75, 12] - [75, 15]
(string_fragment [75, 13] - [75, 14])))
(pair [76, 6] - [76, 20]
key: (property_identifier [76, 6] - [76, 14])
value: (true [76, 16] - [76, 20]))
(pair [77, 6] - [77, 18]
key: (property_identifier [77, 6] - [77, 12])
value: (true [77, 14] - [77, 18]))
(pair [78, 6] - [78, 21]
key: (property_identifier [78, 6] - [78, 14])
value: (string [78, 16] - [78, 21]
(string_fragment [78, 17] - [78, 20])))))))))
(expression_statement [81, 2] - [86, 5]
(call_expression [81, 2] - [86, 4]
function: (identifier [81, 2] - [81, 14])
arguments: (arguments [81, 14] - [86, 4]
(identifier [81, 15] - [81, 16])
(string [81, 18] - [81, 30]
(string_fragment [81, 19] - [81, 29]))
(object [81, 32] - [86, 3]
(pair [82, 4] - [82, 13]
key: (property_identifier [82, 4] - [82, 8])
value: (string [82, 10] - [82, 13]
(string_fragment [82, 11] - [82, 12])))
(pair [83, 4] - [83, 18]
key: (property_identifier [83, 4] - [83, 12])
value: (true [83, 14] - [83, 18]))
(pair [84, 4] - [84, 16]
key: (property_identifier [84, 4] - [84, 10])
value: (true [84, 12] - [84, 16]))
(pair [85, 4] - [85, 19]
key: (property_identifier [85, 4] - [85, 12])
value: (string [85, 14] - [85, 19]
(string_fragment [85, 15] - [85, 18])))))))
(expression_statement [88, 2] - [88, 78]
(call_expression [88, 2] - [88, 77]
function: (member_expression [88, 2] - [88, 10]
object: (identifier [88, 2] - [88, 3])
property: (property_identifier [88, 4] - [88, 10]))
arguments: (arguments [88, 10] - [88, 77]
(string [88, 11] - [88, 26]
(string_fragment [88, 12] - [88, 25]))
(string [88, 28] - [88, 76]
(string_fragment [88, 29] - [88, 75])))))
(return_statement [89, 2] - [89, 46]
(call_expression [89, 9] - [89, 45]
function: (member_expression [89, 9] - [89, 19]
object: (identifier [89, 9] - [89, 10])
property: (property_identifier [89, 11] - [89, 19]))
arguments: (arguments [89, 19] - [89, 45]
(binary_expression [89, 20] - [89, 44]
left: (identifier [89, 20] - [89, 32])
right: (string [89, 36] - [89, 44]
(string_fragment [89, 37] - [89, 43])))))))))))
(comment [92, 0] - [92, 39])
(expression_statement [93, 0] - [93, 31]
(call_expression [93, 0] - [93, 30]
function: (member_expression [93, 0] - [93, 9]
object: (identifier [93, 0] - [93, 3])
property: (property_identifier [93, 4] - [93, 9]))
arguments: (arguments [93, 9] - [93, 30]
(string [93, 10] - [93, 17]
(string_fragment [93, 11] - [93, 16]))
(identifier [93, 19] - [93, 29]))))
(expression_statement [94, 0] - [94, 34]
(call_expression [94, 0] - [94, 33]
function: (member_expression [94, 0] - [94, 9]
object: (identifier [94, 0] - [94, 3])
property: (property_identifier [94, 4] - [94, 9]))
arguments: (arguments [94, 9] - [94, 33]
(string [94, 10] - [94, 13]
(string_fragment [94, 11] - [94, 12]))
(identifier [94, 15] - [94, 32]))))
(expression_statement [95, 0] - [95, 27]
(call_expression [95, 0] - [95, 26]
function: (member_expression [95, 0] - [95, 9]
object: (identifier [95, 0] - [95, 3])
property: (property_identifier [95, 4] - [95, 9]))
arguments: (arguments [95, 9] - [95, 26]
(string [95, 10] - [95, 13]
(string_fragment [95, 11] - [95, 12]))
(identifier [95, 15] - [95, 25]))))
(expression_statement [96, 0] - [96, 29]
(call_expression [96, 0] - [96, 28]
function: (member_expression [96, 0] - [96, 9]
object: (identifier [96, 0] - [96, 3])
property: (property_identifier [96, 4] - [96, 9]))
arguments: (arguments [96, 9] - [96, 28]
(string [96, 10] - [96, 13]
(string_fragment [96, 11] - [96, 12]))
(identifier [96, 15] - [96, 27]))))
(expression_statement [97, 0] - [97, 30]
(call_expression [97, 0] - [97, 29]
function: (member_expression [97, 0] - [97, 9]
object: (identifier [97, 0] - [97, 3])
property: (property_identifier [97, 4] - [97, 9]))
arguments: (arguments [97, 9] - [97, 29]
(string [97, 10] - [97, 13]
(string_fragment [97, 11] - [97, 12]))
(identifier [97, 15] - [97, 28]))))
(expression_statement [98, 0] - [98, 33]
(call_expression [98, 0] - [98, 32]
function: (member_expression [98, 0] - [98, 9]
object: (identifier [98, 0] - [98, 3])
property: (property_identifier [98, 4] - [98, 9]))
arguments: (arguments [98, 9] - [98, 32]
(string [98, 10] - [98, 18]
(string_fragment [98, 11] - [98, 17]))
(identifier [98, 20] - [98, 31]))))
(expression_statement [99, 0] - [99, 37]
(call_expression [99, 0] - [99, 36]
function: (member_expression [99, 0] - [99, 9]
object: (identifier [99, 0] - [99, 3])
property: (property_identifier [99, 4] - [99, 9]))
arguments: (arguments [99, 9] - [99, 36]
(string [99, 10] - [99, 22]
(string_fragment [99, 11] - [99, 21]))
(identifier [99, 24] - [99, 35]))))
(comment [101, 0] - [101, 34])
(expression_statement [102, 0] - [102, 27]
(call_expression [102, 0] - [102, 26]
function: (identifier [102, 0] - [102, 21])
arguments: (arguments [102, 21] - [102, 26]
(identifier [102, 22] - [102, 25]))))
(comment [104, 0] - [104, 21])
(expression_statement [105, 0] - [105, 41]
(call_expression [105, 0] - [105, 40]
function: (member_expression [105, 0] - [105, 7]
object: (identifier [105, 0] - [105, 3])
property: (property_identifier [105, 4] - [105, 7]))
arguments: (arguments [105, 7] - [105, 40]
(string [105, 8] - [105, 18]
(string_fragment [105, 9] - [105, 17]))
(arrow_function [105, 20] - [105, 39]
parameters: (formal_parameters [105, 20] - [105, 23]
(required_parameter [105, 21] - [105, 22]
pattern: (identifier [105, 21] - [105, 22])))
body: (call_expression [105, 27] - [105, 39]
function: (member_expression [105, 27] - [105, 33]
object: (identifier [105, 27] - [105, 28])
property: (property_identifier [105, 29] - [105, 33]))
arguments: (arguments [105, 33] - [105, 39]
(string [105, 34] - [105, 38]
(string_fragment [105, 35] - [105, 37]))))))))
(if_statement [107, 0] - [135, 1]
condition: (parenthesized_expression [107, 3] - [107, 21]
(member_expression [107, 4] - [107, 20]
object: (meta_property [107, 4] - [107, 15])
property: (property_identifier [107, 16] - [107, 20])))
consequence: (statement_block [107, 22] - [135, 1]
(lexical_declaration [108, 2] - [108, 37]
(variable_declarator [108, 8] - [108, 36]
name: (identifier [108, 8] - [108, 12])
value: (call_expression [108, 15] - [108, 36]
function: (member_expression [108, 15] - [108, 27]
object: (member_expression [108, 15] - [108, 23]
object: (identifier [108, 15] - [108, 19])
property: (property_identifier [108, 20] - [108, 23]))
property: (property_identifier [108, 24] - [108, 27]))
arguments: (arguments [108, 27] - [108, 36]
(string [108, 28] - [108, 35]
(string_fragment [108, 29] - [108, 34]))))))
(lexical_declaration [109, 2] - [109, 40]
(variable_declarator [109, 8] - [109, 39]
name: (identifier [109, 8] - [109, 14])
value: (call_expression [109, 17] - [109, 39]
function: (member_expression [109, 17] - [109, 29]
object: (member_expression [109, 17] - [109, 25]
object: (identifier [109, 17] - [109, 21])
property: (property_identifier [109, 22] - [109, 25]))
property: (property_identifier [109, 26] - [109, 29]))
arguments: (arguments [109, 29] - [109, 39]
(string [109, 30] - [109, 38]
(string_fragment [109, 31] - [109, 37]))))))
(if_statement [111, 2] - [115, 3]
condition: (parenthesized_expression [111, 5] - [111, 23]
(binary_expression [111, 6] - [111, 22]
left: (unary_expression [111, 6] - [111, 11]
argument: (identifier [111, 7] - [111, 11]))
right: (unary_expression [111, 15] - [111, 22]
argument: (identifier [111, 16] - [111, 22]))))
consequence: (statement_block [111, 24] - [115, 3]
(expression_statement [112, 4] - [114, 6]
(call_expression [112, 4] - [114, 5]
function: (member_expression [112, 4] - [112, 16]
object: (identifier [112, 4] - [112, 11])
property: (property_identifier [112, 12] - [112, 16]))
arguments: (arguments [112, 16] - [114, 5]
(string [113, 6] - [113, 93]
(string_fragment [113, 7] - [113, 92])))))))
(expression_statement [117, 2] - [117, 68]
(call_expression [117, 2] - [117, 67]
function: (member_expression [117, 2] - [117, 13]
object: (identifier [117, 2] - [117, 9])
property: (property_identifier [117, 10] - [117, 13]))
arguments: (arguments [117, 13] - [117, 67]
(string [117, 14] - [117, 66]
(string_fragment [117, 15] - [117, 65])))))
(try_statement [118, 2] - [126, 3]
body: (statement_block [118, 6] - [121, 3]
(expression_statement [119, 4] - [119, 39]
(await_expression [119, 4] - [119, 38]
(call_expression [119, 10] - [119, 38]
function: (member_expression [119, 10] - [119, 36]
object: (identifier [119, 10] - [119, 25])
property: (property_identifier [119, 26] - [119, 36]))
arguments: (arguments [119, 36] - [119, 38]))))
(expression_statement [120, 4] - [120, 75]
(call_expression [120, 4] - [120, 74]
function: (member_expression [120, 4] - [120, 15]
object: (identifier [120, 4] - [120, 11])
property: (property_identifier [120, 12] - [120, 15]))
arguments: (arguments [120, 15] - [120, 74]
(string [120, 16] - [120, 73]
(string_fragment [120, 17] - [120, 72]))))))
handler: (catch_clause [121, 4] - [126, 3]
parameter: (identifier [121, 11] - [121, 16])
body: (statement_block [121, 18] - [126, 3]
(expression_statement [122, 4] - [125, 6]
(call_expression [122, 4] - [125, 5]
function: (member_expression [122, 4] - [122, 16]
object: (identifier [122, 4] - [122, 11])
property: (property_identifier [122, 12] - [122, 16]))
arguments: (arguments [122, 16] - [125, 5]
(string [123, 6] - [123, 79]
(string_fragment [123, 7] - [123, 78]))
(identifier [124, 6] - [124, 11])))))))
(expression_statement [128, 2] - [128, 63]
(call_expression [128, 2] - [128, 62]
function: (member_expression [128, 2] - [128, 13]
object: (identifier [128, 2] - [128, 9])
property: (property_identifier [128, 10] - [128, 13]))
arguments: (arguments [128, 13] - [128, 62]
(string [128, 14] - [128, 61]
(string_fragment [128, 15] - [128, 60])))))
(expression_statement [129, 2] - [129, 17]
(await_expression [129, 2] - [129, 16]
(call_expression [129, 8] - [129, 16]
function: (identifier [129, 8] - [129, 14])
arguments: (arguments [129, 14] - [129, 16]))))
(expression_statement [130, 2] - [130, 21]
(await_expression [130, 2] - [130, 20]
(call_expression [130, 8] - [130, 20]
function: (identifier [130, 8] - [130, 18])
arguments: (arguments [130, 18] - [130, 20]))))
(lexical_declaration [132, 2] - [132, 60]
(variable_declarator [132, 8] - [132, 59]
name: (identifier [132, 8] - [132, 12])
value: (call_expression [132, 15] - [132, 59]
function: (identifier [132, 15] - [132, 23])
arguments: (arguments [132, 23] - [132, 59]
(binary_expression [132, 24] - [132, 54]
left: (call_expression [132, 24] - [132, 44]
function: (member_expression [132, 24] - [132, 36]
object: (member_expression [132, 24] - [132, 32]
object: (identifier [132, 24] - [132, 28])
property: (property_identifier [132, 29] - [132, 32]))
property: (property_identifier [132, 33] - [132, 36]))
arguments: (arguments [132, 36] - [132, 44]
(string [132, 37] - [132, 43]
(string_fragment [132, 38] - [132, 42]))))
right: (string [132, 48] - [132, 54]
(string_fragment [132, 49] - [132, 53])))
(number [132, 56] - [132, 58])))))
(expression_statement [133, 2] - [133, 70]
(call_expression [133, 2] - [133, 69]
function: (member_expression [133, 2] - [133, 13]
object: (identifier [133, 2] - [133, 9])
property: (property_identifier [133, 10] - [133, 13]))
arguments: (arguments [133, 13] - [133, 69]
(template_string [133, 14] - [133, 68]
(string_fragment [133, 15] - [133, 60])
(template_substitution [133, 60] - [133, 67]
(identifier [133, 62] - [133, 66]))))))
(expression_statement [134, 2] - [134, 34]
(call_expression [134, 2] - [134, 33]
function: (member_expression [134, 2] - [134, 12]
object: (identifier [134, 2] - [134, 6])
property: (property_identifier [134, 7] - [134, 12]))
arguments: (arguments [134, 12] - [134, 33]
(object [134, 13] - [134, 21]
(shorthand_property_identifier [134, 15] - [134, 19]))
(member_expression [134, 23] - [134, 32]
object: (identifier [134, 23] - [134, 26])
property: (property_identifier [134, 27] - [134, 32])))))))
(export_statement [137, 0] - [137, 19]
value: (identifier [137, 15] - [137, 18])))

View File

@ -1,390 +0,0 @@
(program [0, 0] - [84, 0]
(import_statement [0, 0] - [0, 48]
(import_clause [0, 12] - [0, 23]
(named_imports [0, 12] - [0, 23]
(import_specifier [0, 14] - [0, 21]
name: (identifier [0, 14] - [0, 21]))))
source: (string [0, 29] - [0, 47]
(string_fragment [0, 30] - [0, 46])))
(import_statement [1, 0] - [1, 52]
(import_clause [1, 7] - [1, 31]
(named_imports [1, 7] - [1, 31]
(import_specifier [1, 9] - [1, 29]
name: (identifier [1, 9] - [1, 29]))))
source: (string [1, 37] - [1, 51]
(string_fragment [1, 38] - [1, 50])))
(import_statement [2, 0] - [2, 37]
(import_clause [2, 7] - [2, 17]
(named_imports [2, 7] - [2, 17]
(import_specifier [2, 9] - [2, 15]
name: (identifier [2, 9] - [2, 15]))))
source: (string [2, 23] - [2, 36]
(string_fragment [2, 24] - [2, 35])))
(comment [4, 0] - [6, 3])
(export_statement [7, 0] - [22, 1]
declaration: (function_declaration [7, 7] - [22, 1]
name: (identifier [7, 16] - [7, 27])
parameters: (formal_parameters [7, 27] - [7, 39]
(required_parameter [7, 28] - [7, 38]
pattern: (identifier [7, 28] - [7, 29])
type: (type_annotation [7, 29] - [7, 38]
(type_identifier [7, 31] - [7, 38]))))
return_type: (type_annotation [7, 39] - [7, 47]
(predefined_type [7, 41] - [7, 47]))
body: (statement_block [7, 48] - [22, 1]
(lexical_declaration [8, 2] - [8, 43]
(variable_declarator [8, 8] - [8, 42]
name: (identifier [8, 8] - [8, 14])
value: (call_expression [8, 17] - [8, 42]
function: (member_expression [8, 17] - [8, 29]
object: (member_expression [8, 17] - [8, 22]
object: (identifier [8, 17] - [8, 18])
property: (property_identifier [8, 19] - [8, 22]))
property: (property_identifier [8, 23] - [8, 29]))
arguments: (arguments [8, 29] - [8, 42]
(string [8, 30] - [8, 41]
(string_fragment [8, 31] - [8, 40]))))))
(if_statement [9, 2] - [11, 3]
condition: (parenthesized_expression [9, 5] - [9, 13]
(identifier [9, 6] - [9, 12]))
consequence: (statement_block [9, 14] - [11, 3]
(return_statement [10, 4] - [10, 25]
(call_expression [10, 11] - [10, 24]
function: (member_expression [10, 11] - [10, 22]
object: (identifier [10, 11] - [10, 17])
property: (property_identifier [10, 18] - [10, 22]))
arguments: (arguments [10, 22] - [10, 24])))))
(lexical_declaration [13, 2] - [13, 53]
(variable_declarator [13, 6] - [13, 52]
name: (identifier [13, 6] - [13, 18])
value: (call_expression [13, 21] - [13, 52]
function: (member_expression [13, 21] - [13, 33]
object: (member_expression [13, 21] - [13, 26]
object: (identifier [13, 21] - [13, 22])
property: (property_identifier [13, 23] - [13, 26]))
property: (property_identifier [13, 27] - [13, 33]))
arguments: (arguments [13, 33] - [13, 52]
(string [13, 34] - [13, 51]
(string_fragment [13, 35] - [13, 50]))))))
(if_statement [14, 2] - [20, 3]
condition: (parenthesized_expression [14, 5] - [14, 19]
(identifier [14, 6] - [14, 18]))
consequence: (statement_block [14, 20] - [20, 3]
(if_statement [15, 4] - [17, 5]
condition: (parenthesized_expression [15, 7] - [15, 34]
(binary_expression [15, 8] - [15, 33]
left: (member_expression [15, 8] - [15, 27]
object: (identifier [15, 8] - [15, 20])
property: (property_identifier [15, 21] - [15, 27]))
right: (number [15, 30] - [15, 33])))
consequence: (statement_block [15, 35] - [17, 5]
(expression_statement [16, 6] - [16, 52]
(assignment_expression [16, 6] - [16, 51]
left: (identifier [16, 6] - [16, 18])
right: (call_expression [16, 21] - [16, 51]
function: (member_expression [16, 21] - [16, 43]
object: (identifier [16, 21] - [16, 33])
property: (property_identifier [16, 34] - [16, 43]))
arguments: (arguments [16, 43] - [16, 51]
(number [16, 44] - [16, 45])
(number [16, 47] - [16, 50])))))))
(lexical_declaration [18, 4] - [18, 42]
(variable_declarator [18, 10] - [18, 41]
name: (identifier [18, 10] - [18, 15])
value: (call_expression [18, 18] - [18, 41]
function: (member_expression [18, 18] - [18, 36]
object: (identifier [18, 18] - [18, 30])
property: (property_identifier [18, 31] - [18, 36]))
arguments: (arguments [18, 36] - [18, 41]
(string [18, 37] - [18, 40]
(string_fragment [18, 38] - [18, 39]))))))
(return_statement [19, 4] - [19, 42]
(call_expression [19, 11] - [19, 41]
function: (member_expression [19, 11] - [19, 39]
object: (subscript_expression [19, 11] - [19, 34]
object: (identifier [19, 11] - [19, 16])
index: (binary_expression [19, 17] - [19, 33]
left: (member_expression [19, 17] - [19, 29]
object: (identifier [19, 17] - [19, 22])
property: (property_identifier [19, 23] - [19, 29]))
right: (number [19, 32] - [19, 33])))
property: (property_identifier [19, 35] - [19, 39]))
arguments: (arguments [19, 39] - [19, 41])))))
(return_statement [21, 2] - [21, 22]
(string [21, 9] - [21, 21]
(string_fragment [21, 10] - [21, 20]))))))
(export_statement [24, 0] - [39, 1]
declaration: (function_declaration [24, 7] - [39, 1]
name: (identifier [24, 22] - [24, 36])
parameters: (formal_parameters [24, 36] - [28, 1]
(required_parameter [25, 2] - [25, 13]
pattern: (identifier [25, 2] - [25, 5])
type: (type_annotation [25, 5] - [25, 13]
(predefined_type [25, 7] - [25, 13])))
(required_parameter [26, 2] - [26, 15]
pattern: (identifier [26, 2] - [26, 7])
type: (type_annotation [26, 7] - [26, 15]
(predefined_type [26, 9] - [26, 15])))
(required_parameter [27, 2] - [27, 18]
pattern: (identifier [27, 2] - [27, 10])
type: (type_annotation [27, 10] - [27, 18]
(predefined_type [27, 12] - [27, 18]))))
return_type: (type_annotation [28, 1] - [28, 19]
(generic_type [28, 3] - [28, 19]
name: (type_identifier [28, 3] - [28, 10])
type_arguments: (type_arguments [28, 10] - [28, 19]
(predefined_type [28, 11] - [28, 18]))))
body: (statement_block [28, 20] - [39, 1]
(try_statement [29, 2] - [38, 3]
body: (statement_block [29, 6] - [35, 3]
(lexical_declaration [30, 4] - [30, 43]
(variable_declarator [30, 10] - [30, 42]
name: (identifier [30, 10] - [30, 17])
value: (await_expression [30, 20] - [30, 42]
(call_expression [30, 26] - [30, 42]
function: (member_expression [30, 26] - [30, 37]
object: (identifier [30, 26] - [30, 32])
property: (property_identifier [30, 33] - [30, 37]))
arguments: (arguments [30, 37] - [30, 42]
(identifier [30, 38] - [30, 41]))))))
(if_statement [31, 4] - [33, 5]
condition: (parenthesized_expression [31, 7] - [31, 22]
(binary_expression [31, 8] - [31, 21]
left: (identifier [31, 8] - [31, 15])
right: (number [31, 20] - [31, 21])))
consequence: (statement_block [31, 23] - [33, 5]
(expression_statement [32, 6] - [32, 42]
(await_expression [32, 6] - [32, 41]
(call_expression [32, 12] - [32, 41]
function: (member_expression [32, 12] - [32, 26]
object: (identifier [32, 12] - [32, 18])
property: (property_identifier [32, 19] - [32, 26]))
arguments: (arguments [32, 26] - [32, 41]
(identifier [32, 27] - [32, 30])
(identifier [32, 32] - [32, 40])))))))
(return_statement [34, 4] - [34, 28]
(binary_expression [34, 11] - [34, 27]
left: (identifier [34, 11] - [34, 18])
right: (identifier [34, 22] - [34, 27]))))
handler: (catch_clause [35, 4] - [38, 3]
parameter: (identifier [35, 11] - [35, 14])
body: (statement_block [35, 16] - [38, 3]
(expression_statement [36, 4] - [36, 54]
(call_expression [36, 4] - [36, 53]
function: (member_expression [36, 4] - [36, 16]
object: (identifier [36, 4] - [36, 11])
property: (property_identifier [36, 12] - [36, 16]))
arguments: (arguments [36, 16] - [36, 53]
(string [36, 17] - [36, 47]
(string_fragment [36, 18] - [36, 46]))
(identifier [36, 49] - [36, 52]))))
(return_statement [37, 4] - [37, 16]
(true [37, 11] - [37, 15]))
(comment [37, 17] - [37, 44])))))))
(export_statement [41, 0] - [51, 2]
declaration: (lexical_declaration [41, 7] - [51, 2]
(variable_declarator [41, 13] - [51, 1]
name: (identifier [41, 13] - [41, 29])
value: (object [41, 32] - [51, 1]
(shorthand_property_identifier [42, 2] - [42, 16])
(method_definition [43, 2] - [50, 3]
name: (property_identifier [43, 8] - [43, 21])
parameters: (formal_parameters [43, 21] - [47, 3]
(required_parameter [44, 4] - [44, 15]
pattern: (identifier [44, 4] - [44, 7])
type: (type_annotation [44, 7] - [44, 15]
(predefined_type [44, 9] - [44, 15])))
(required_parameter [45, 4] - [45, 17]
pattern: (identifier [45, 4] - [45, 9])
type: (type_annotation [45, 9] - [45, 17]
(predefined_type [45, 11] - [45, 17])))
(required_parameter [46, 4] - [46, 20]
pattern: (identifier [46, 4] - [46, 12])
type: (type_annotation [46, 12] - [46, 20]
(predefined_type [46, 14] - [46, 20]))))
return_type: (type_annotation [47, 3] - [47, 21]
(generic_type [47, 5] - [47, 21]
name: (type_identifier [47, 5] - [47, 12])
type_arguments: (type_arguments [47, 12] - [47, 21]
(predefined_type [47, 13] - [47, 20]))))
body: (statement_block [47, 22] - [50, 3]
(lexical_declaration [48, 4] - [48, 63]
(variable_declarator [48, 10] - [48, 62]
name: (identifier [48, 10] - [48, 17])
value: (await_expression [48, 20] - [48, 62]
(call_expression [48, 26] - [48, 62]
function: (identifier [48, 26] - [48, 40])
arguments: (arguments [48, 40] - [48, 62]
(identifier [48, 41] - [48, 44])
(identifier [48, 46] - [48, 51])
(identifier [48, 53] - [48, 61]))))))
(return_statement [49, 4] - [49, 20]
(unary_expression [49, 11] - [49, 19]
argument: (identifier [49, 12] - [49, 19])))))))))
(export_statement [53, 0] - [64, 2]
declaration: (lexical_declaration [53, 7] - [64, 2]
(variable_declarator [53, 13] - [64, 1]
name: (identifier [53, 13] - [53, 30])
value: (arrow_function [53, 33] - [64, 1]
parameters: (formal_parameters [53, 39] - [56, 1]
(required_parameter [54, 2] - [54, 12]
pattern: (identifier [54, 2] - [54, 3])
type: (type_annotation [54, 3] - [54, 12]
(type_identifier [54, 5] - [54, 12])))
(required_parameter [55, 2] - [55, 27]
pattern: (identifier [55, 2] - [55, 6])
type: (type_annotation [55, 6] - [55, 27]
(function_type [55, 8] - [55, 27]
parameters: (formal_parameters [55, 8] - [55, 10])
return_type: (generic_type [55, 14] - [55, 27]
name: (type_identifier [55, 14] - [55, 21])
type_arguments: (type_arguments [55, 21] - [55, 27]
(predefined_type [55, 22] - [55, 26])))))))
body: (statement_block [56, 5] - [64, 1]
(lexical_declaration [57, 2] - [57, 28]
(variable_declarator [57, 8] - [57, 27]
name: (identifier [57, 8] - [57, 10])
value: (call_expression [57, 13] - [57, 27]
function: (identifier [57, 13] - [57, 24])
arguments: (arguments [57, 24] - [57, 27]
(identifier [57, 25] - [57, 26])))))
(lexical_declaration [58, 2] - [58, 39]
(variable_declarator [58, 8] - [58, 38]
name: (identifier [58, 8] - [58, 11])
value: (template_string [58, 14] - [58, 38]
(string_fragment [58, 15] - [58, 32])
(template_substitution [58, 32] - [58, 37]
(identifier [58, 34] - [58, 36])))))
(lexical_declaration [59, 2] - [59, 72]
(variable_declarator [59, 8] - [59, 71]
name: (identifier [59, 8] - [59, 15])
value: (await_expression [59, 18] - [59, 71]
(call_expression [59, 24] - [59, 71]
function: (member_expression [59, 24] - [59, 55]
object: (identifier [59, 24] - [59, 40])
property: (property_identifier [59, 41] - [59, 55]))
arguments: (arguments [59, 55] - [59, 71]
(identifier [59, 56] - [59, 59])
(number [59, 61] - [59, 63])
(number [59, 65] - [59, 70]))))))
(if_statement [60, 2] - [62, 3]
condition: (parenthesized_expression [60, 5] - [60, 15]
(unary_expression [60, 6] - [60, 14]
argument: (identifier [60, 7] - [60, 14])))
consequence: (statement_block [60, 16] - [62, 3]
(return_statement [61, 4] - [61, 55]
(call_expression [61, 11] - [61, 54]
function: (member_expression [61, 11] - [61, 17]
object: (identifier [61, 11] - [61, 12])
property: (property_identifier [61, 13] - [61, 17]))
arguments: (arguments [61, 17] - [61, 54]
(object [61, 18] - [61, 48]
(pair [61, 20] - [61, 46]
key: (property_identifier [61, 20] - [61, 25])
value: (string [61, 27] - [61, 46]
(string_fragment [61, 28] - [61, 45]))))
(number [61, 50] - [61, 53]))))))
(expression_statement [63, 2] - [63, 15]
(await_expression [63, 2] - [63, 14]
(call_expression [63, 8] - [63, 14]
function: (identifier [63, 8] - [63, 12])
arguments: (arguments [63, 12] - [63, 14])))))))))
(export_statement [66, 0] - [83, 2]
declaration: (lexical_declaration [66, 7] - [83, 2]
(variable_declarator [66, 13] - [83, 1]
name: (identifier [66, 13] - [66, 29])
value: (arrow_function [66, 32] - [83, 1]
parameters: (formal_parameters [66, 38] - [69, 1]
(required_parameter [67, 2] - [67, 12]
pattern: (identifier [67, 2] - [67, 3])
type: (type_annotation [67, 3] - [67, 12]
(type_identifier [67, 5] - [67, 12])))
(required_parameter [68, 2] - [68, 27]
pattern: (identifier [68, 2] - [68, 6])
type: (type_annotation [68, 6] - [68, 27]
(function_type [68, 8] - [68, 27]
parameters: (formal_parameters [68, 8] - [68, 10])
return_type: (generic_type [68, 14] - [68, 27]
name: (type_identifier [68, 14] - [68, 21])
type_arguments: (type_arguments [68, 21] - [68, 27]
(predefined_type [68, 22] - [68, 26])))))))
body: (statement_block [69, 5] - [83, 1]
(lexical_declaration [70, 2] - [70, 45]
(variable_declarator [70, 8] - [70, 44]
name: (identifier [70, 8] - [70, 12])
value: (await_expression [70, 15] - [70, 44]
(call_expression [70, 21] - [70, 44]
function: (identifier [70, 21] - [70, 41])
arguments: (arguments [70, 41] - [70, 44]
(identifier [70, 42] - [70, 43]))))))
(if_statement [71, 2] - [73, 3]
condition: (parenthesized_expression [71, 5] - [71, 12]
(unary_expression [71, 6] - [71, 11]
argument: (identifier [71, 7] - [71, 11])))
consequence: (statement_block [71, 13] - [73, 3]
(return_statement [72, 4] - [72, 64]
(call_expression [72, 11] - [72, 63]
function: (member_expression [72, 11] - [72, 17]
object: (identifier [72, 11] - [72, 12])
property: (property_identifier [72, 13] - [72, 17]))
arguments: (arguments [72, 17] - [72, 63]
(object [72, 18] - [72, 57]
(pair [72, 20] - [72, 55]
key: (property_identifier [72, 20] - [72, 25])
value: (string [72, 27] - [72, 55]
(string_fragment [72, 28] - [72, 54]))))
(number [72, 59] - [72, 62]))))))
(lexical_declaration [75, 2] - [75, 47]
(variable_declarator [75, 8] - [75, 46]
name: (identifier [75, 8] - [75, 11])
value: (template_string [75, 14] - [75, 46]
(string_fragment [75, 15] - [75, 31])
(template_substitution [75, 31] - [75, 45]
(member_expression [75, 33] - [75, 44]
object: (identifier [75, 33] - [75, 37])
property: (property_identifier [75, 38] - [75, 44]))))))
(lexical_declaration [76, 2] - [76, 72]
(variable_declarator [76, 8] - [76, 71]
name: (identifier [76, 8] - [76, 15])
value: (await_expression [76, 18] - [76, 71]
(call_expression [76, 24] - [76, 71]
function: (member_expression [76, 24] - [76, 55]
object: (identifier [76, 24] - [76, 40])
property: (property_identifier [76, 41] - [76, 55]))
arguments: (arguments [76, 55] - [76, 71]
(identifier [76, 56] - [76, 59])
(number [76, 61] - [76, 63])
(number [76, 65] - [76, 70]))))))
(if_statement [77, 2] - [79, 3]
condition: (parenthesized_expression [77, 5] - [77, 15]
(unary_expression [77, 6] - [77, 14]
argument: (identifier [77, 7] - [77, 14])))
consequence: (statement_block [77, 16] - [79, 3]
(return_statement [78, 4] - [78, 55]
(call_expression [78, 11] - [78, 54]
function: (member_expression [78, 11] - [78, 17]
object: (identifier [78, 11] - [78, 12])
property: (property_identifier [78, 13] - [78, 17]))
arguments: (arguments [78, 17] - [78, 54]
(object [78, 18] - [78, 48]
(pair [78, 20] - [78, 46]
key: (property_identifier [78, 20] - [78, 25])
value: (string [78, 27] - [78, 46]
(string_fragment [78, 28] - [78, 45]))))
(number [78, 50] - [78, 53]))))))
(expression_statement [81, 2] - [81, 31]
(call_expression [81, 2] - [81, 30]
function: (member_expression [81, 2] - [81, 7]
object: (identifier [81, 2] - [81, 3])
property: (property_identifier [81, 4] - [81, 7]))
arguments: (arguments [81, 7] - [81, 30]
(string [81, 8] - [81, 16]
(string_fragment [81, 9] - [81, 15]))
(member_expression [81, 18] - [81, 29]
object: (identifier [81, 18] - [81, 22])
property: (property_identifier [81, 23] - [81, 29])))))
(expression_statement [82, 2] - [82, 15]
(await_expression [82, 2] - [82, 14]
(call_expression [82, 8] - [82, 14]
function: (identifier [82, 8] - [82, 12])
arguments: (arguments [82, 12] - [82, 14]))))))))))

View File

@ -1,298 +0,0 @@
(program [0, 0] - [86, 0]
(export_statement [0, 0] - [85, 2]
declaration: (lexical_declaration [0, 7] - [85, 2]
(variable_declarator [0, 13] - [85, 1]
name: (identifier [0, 13] - [0, 31])
value: (arrow_function [0, 34] - [85, 1]
parameters: (formal_parameters [0, 34] - [0, 67]
(required_parameter [0, 35] - [0, 66]
pattern: (object_pattern [0, 35] - [0, 48]
(object_assignment_pattern [0, 37] - [0, 46]
left: (shorthand_property_identifier_pattern [0, 37] - [0, 41])
right: (array [0, 44] - [0, 46])))
type: (type_annotation [0, 48] - [0, 66]
(object_type [0, 50] - [0, 66]
(property_signature [0, 52] - [0, 64]
name: (property_identifier [0, 52] - [0, 56])
type: (type_annotation [0, 57] - [0, 64]
(array_type [0, 59] - [0, 64]
(predefined_type [0, 59] - [0, 62]))))))))
body: (statement_block [0, 71] - [85, 1]
(return_statement [1, 2] - [84, 4]
(parenthesized_expression [1, 9] - [84, 3]
(jsx_element [2, 4] - [83, 10]
open_tag: (jsx_opening_element [2, 4] - [5, 5]
name: (identifier [2, 5] - [2, 8])
attribute: (jsx_attribute [3, 6] - [3, 26]
(property_identifier [3, 6] - [3, 8])
(string [3, 9] - [3, 26]
(string_fragment [3, 10] - [3, 25])))
attribute: (jsx_attribute [4, 6] - [4, 181]
(property_identifier [4, 6] - [4, 11])
(string [4, 12] - [4, 181]
(string_fragment [4, 13] - [4, 180]))))
(jsx_element [6, 6] - [82, 12]
open_tag: (jsx_opening_element [6, 6] - [6, 202]
name: (identifier [6, 7] - [6, 10])
attribute: (jsx_attribute [6, 11] - [6, 201]
(property_identifier [6, 11] - [6, 16])
(string [6, 17] - [6, 201]
(string_fragment [6, 18] - [6, 200]))))
(jsx_element [7, 8] - [19, 14]
open_tag: (jsx_opening_element [7, 8] - [7, 110]
name: (identifier [7, 9] - [7, 12])
attribute: (jsx_attribute [7, 13] - [7, 109]
(property_identifier [7, 13] - [7, 18])
(string [7, 19] - [7, 109]
(string_fragment [7, 20] - [7, 108]))))
(jsx_element [8, 10] - [11, 15]
open_tag: (jsx_opening_element [8, 10] - [8, 80]
name: (identifier [8, 11] - [8, 13])
attribute: (jsx_attribute [8, 14] - [8, 79]
(property_identifier [8, 14] - [8, 19])
(string [8, 20] - [8, 79]
(string_fragment [8, 21] - [8, 78]))))
(jsx_text [8, 80] - [9, 30])
(jsx_expression [9, 30] - [9, 35]
(string [9, 31] - [9, 34]
(string_fragment [9, 32] - [9, 33])))
(jsx_element [10, 12] - [10, 77]
open_tag: (jsx_opening_element [10, 12] - [10, 70]
name: (identifier [10, 13] - [10, 17])
attribute: (jsx_attribute [10, 18] - [10, 38]
(property_identifier [10, 18] - [10, 20])
(string [10, 21] - [10, 38]
(string_fragment [10, 22] - [10, 37])))
attribute: (jsx_attribute [10, 39] - [10, 69]
(property_identifier [10, 39] - [10, 44])
(string [10, 45] - [10, 69]
(string_fragment [10, 46] - [10, 68]))))
close_tag: (jsx_closing_element [10, 70] - [10, 77]
name: (identifier [10, 72] - [10, 76])))
close_tag: (jsx_closing_element [11, 10] - [11, 15]
name: (identifier [11, 12] - [11, 14])))
(jsx_element [12, 10] - [18, 19]
open_tag: (jsx_opening_element [12, 10] - [16, 11]
name: (identifier [12, 11] - [12, 17])
attribute: (jsx_attribute [13, 12] - [13, 25]
(property_identifier [13, 12] - [13, 16])
(string [13, 17] - [13, 25]
(string_fragment [13, 18] - [13, 24])))
attribute: (jsx_attribute [14, 12] - [14, 44]
(property_identifier [14, 12] - [14, 19])
(string [14, 20] - [14, 44]
(string_fragment [14, 21] - [14, 43])))
attribute: (jsx_attribute [15, 12] - [15, 113]
(property_identifier [15, 12] - [15, 17])
(string [15, 18] - [15, 113]
(string_fragment [15, 19] - [15, 112]))))
(html_character_reference [17, 12] - [17, 19])
close_tag: (jsx_closing_element [18, 10] - [18, 19]
name: (identifier [18, 12] - [18, 18])))
close_tag: (jsx_closing_element [19, 8] - [19, 14]
name: (identifier [19, 10] - [19, 13])))
(jsx_self_closing_element [21, 8] - [21, 65]
name: (identifier [21, 9] - [21, 14])
attribute: (jsx_attribute [21, 15] - [21, 28]
(property_identifier [21, 15] - [21, 19])
(string [21, 20] - [21, 28]
(string_fragment [21, 21] - [21, 27])))
attribute: (jsx_attribute [21, 29] - [21, 53]
(property_identifier [21, 29] - [21, 31])
(string [21, 32] - [21, 53]
(string_fragment [21, 33] - [21, 52])))
attribute: (jsx_attribute [21, 54] - [21, 62]
(property_identifier [21, 54] - [21, 59])
(string [21, 60] - [21, 62])))
(jsx_element [23, 8] - [64, 14]
open_tag: (jsx_opening_element [23, 8] - [23, 97]
name: (identifier [23, 9] - [23, 12])
attribute: (jsx_attribute [23, 13] - [23, 96]
(property_identifier [23, 13] - [23, 18])
(string [23, 19] - [23, 96]
(string_fragment [23, 20] - [23, 95]))))
(jsx_element [24, 10] - [32, 18]
open_tag: (jsx_opening_element [24, 10] - [24, 139]
name: (identifier [24, 11] - [24, 16])
attribute: (jsx_attribute [24, 17] - [24, 138]
(property_identifier [24, 17] - [24, 22])
(string [24, 23] - [24, 138]
(string_fragment [24, 24] - [24, 137]))))
(jsx_self_closing_element [25, 12] - [30, 14]
name: (identifier [25, 13] - [25, 18])
attribute: (jsx_attribute [26, 14] - [26, 29]
(property_identifier [26, 14] - [26, 18])
(string [26, 19] - [26, 29]
(string_fragment [26, 20] - [26, 28])))
attribute: (jsx_attribute [27, 14] - [27, 35]
(property_identifier [27, 14] - [27, 16])
(string [27, 17] - [27, 35]
(string_fragment [27, 18] - [27, 34])))
attribute: (jsx_attribute [28, 14] - [28, 36]
(property_identifier [28, 14] - [28, 19])
(string [28, 20] - [28, 36]
(string_fragment [28, 21] - [28, 35])))
attribute: (jsx_attribute [29, 14] - [29, 32]
(property_identifier [29, 14] - [29, 19])
(string [29, 20] - [29, 32]
(string_fragment [29, 21] - [29, 31]))))
(jsx_text [30, 14] - [32, 10])
close_tag: (jsx_closing_element [32, 10] - [32, 18]
name: (identifier [32, 12] - [32, 17])))
(jsx_element [33, 10] - [41, 18]
open_tag: (jsx_opening_element [33, 10] - [33, 139]
name: (identifier [33, 11] - [33, 16])
attribute: (jsx_attribute [33, 17] - [33, 138]
(property_identifier [33, 17] - [33, 22])
(string [33, 23] - [33, 138]
(string_fragment [33, 24] - [33, 137]))))
(jsx_self_closing_element [34, 12] - [39, 14]
name: (identifier [34, 13] - [34, 18])
attribute: (jsx_attribute [35, 14] - [35, 29]
(property_identifier [35, 14] - [35, 18])
(string [35, 19] - [35, 29]
(string_fragment [35, 20] - [35, 28])))
attribute: (jsx_attribute [36, 14] - [36, 35]
(property_identifier [36, 14] - [36, 16])
(string [36, 17] - [36, 35]
(string_fragment [36, 18] - [36, 34])))
attribute: (jsx_attribute [37, 14] - [37, 36]
(property_identifier [37, 14] - [37, 19])
(string [37, 20] - [37, 36]
(string_fragment [37, 21] - [37, 35])))
attribute: (jsx_attribute [38, 14] - [38, 32]
(property_identifier [38, 14] - [38, 19])
(string [38, 20] - [38, 32]
(string_fragment [38, 21] - [38, 31]))))
(jsx_text [39, 14] - [41, 10])
close_tag: (jsx_closing_element [41, 10] - [41, 18]
name: (identifier [41, 12] - [41, 17])))
(jsx_element [42, 10] - [50, 18]
open_tag: (jsx_opening_element [42, 10] - [42, 139]
name: (identifier [42, 11] - [42, 16])
attribute: (jsx_attribute [42, 17] - [42, 138]
(property_identifier [42, 17] - [42, 22])
(string [42, 23] - [42, 138]
(string_fragment [42, 24] - [42, 137]))))
(jsx_self_closing_element [43, 12] - [48, 14]
name: (identifier [43, 13] - [43, 18])
attribute: (jsx_attribute [44, 14] - [44, 29]
(property_identifier [44, 14] - [44, 18])
(string [44, 19] - [44, 29]
(string_fragment [44, 20] - [44, 28])))
attribute: (jsx_attribute [45, 14] - [45, 34]
(property_identifier [45, 14] - [45, 16])
(string [45, 17] - [45, 34]
(string_fragment [45, 18] - [45, 33])))
attribute: (jsx_attribute [46, 14] - [46, 36]
(property_identifier [46, 14] - [46, 19])
(string [46, 20] - [46, 36]
(string_fragment [46, 21] - [46, 35])))
attribute: (jsx_attribute [47, 14] - [47, 31]
(property_identifier [47, 14] - [47, 19])
(string [47, 20] - [47, 31]
(string_fragment [47, 21] - [47, 30]))))
(jsx_text [48, 14] - [50, 10])
close_tag: (jsx_closing_element [50, 10] - [50, 18]
name: (identifier [50, 12] - [50, 17])))
(jsx_expression [51, 10] - [63, 13]
(call_expression [51, 11] - [63, 12]
function: (member_expression [51, 11] - [51, 19]
object: (identifier [51, 11] - [51, 15])
property: (property_identifier [51, 16] - [51, 19]))
arguments: (arguments [51, 19] - [63, 12]
(arrow_function [51, 20] - [63, 11]
parameters: (formal_parameters [51, 20] - [51, 25]
(required_parameter [51, 21] - [51, 24]
pattern: (identifier [51, 21] - [51, 24])))
body: (parenthesized_expression [51, 29] - [63, 11]
(jsx_element [52, 12] - [62, 20]
open_tag: (jsx_opening_element [52, 12] - [55, 13]
name: (identifier [52, 13] - [52, 18])
attribute: (jsx_attribute [53, 14] - [53, 26]
(property_identifier [53, 14] - [53, 17])
(jsx_expression [53, 18] - [53, 26]
(member_expression [53, 19] - [53, 25]
object: (identifier [53, 19] - [53, 22])
property: (property_identifier [53, 23] - [53, 25]))))
attribute: (jsx_attribute [54, 14] - [54, 135]
(property_identifier [54, 14] - [54, 19])
(string [54, 20] - [54, 135]
(string_fragment [54, 21] - [54, 134]))))
(jsx_self_closing_element [56, 14] - [60, 16]
name: (identifier [56, 15] - [56, 20])
attribute: (jsx_attribute [57, 16] - [57, 31]
(property_identifier [57, 16] - [57, 20])
(string [57, 21] - [57, 31]
(string_fragment [57, 22] - [57, 30])))
attribute: (jsx_attribute [58, 16] - [58, 38]
(property_identifier [58, 16] - [58, 21])
(string [58, 22] - [58, 38]
(string_fragment [58, 23] - [58, 37])))
attribute: (jsx_attribute [59, 16] - [59, 41]
(property_identifier [59, 16] - [59, 21])
(jsx_expression [59, 22] - [59, 41]
(template_string [59, 23] - [59, 40]
(string_fragment [59, 24] - [59, 28])
(template_substitution [59, 28] - [59, 39]
(member_expression [59, 30] - [59, 38]
object: (identifier [59, 30] - [59, 33])
property: (property_identifier [59, 34] - [59, 38])))))))
(jsx_text [60, 16] - [61, 21])
(jsx_expression [61, 21] - [61, 31]
(member_expression [61, 22] - [61, 30]
object: (identifier [61, 22] - [61, 25])
property: (property_identifier [61, 26] - [61, 30])))
close_tag: (jsx_closing_element [62, 12] - [62, 20]
name: (identifier [62, 14] - [62, 19]))))))))
close_tag: (jsx_closing_element [64, 8] - [64, 14]
name: (identifier [64, 10] - [64, 13])))
(jsx_element [66, 8] - [81, 14]
open_tag: (jsx_opening_element [66, 8] - [66, 76]
name: (identifier [66, 9] - [66, 12])
attribute: (jsx_attribute [66, 13] - [66, 75]
(property_identifier [66, 13] - [66, 18])
(string [66, 19] - [66, 75]
(string_fragment [66, 20] - [66, 74]))))
(jsx_element [67, 10] - [73, 19]
open_tag: (jsx_opening_element [67, 10] - [71, 11]
name: (identifier [67, 11] - [67, 17])
attribute: (jsx_attribute [68, 12] - [68, 25]
(property_identifier [68, 12] - [68, 16])
(string [68, 17] - [68, 25]
(string_fragment [68, 18] - [68, 24])))
attribute: (jsx_attribute [69, 12] - [69, 31]
(property_identifier [69, 12] - [69, 17])
(string [69, 18] - [69, 31]
(string_fragment [69, 19] - [69, 30])))
attribute: (jsx_attribute [70, 12] - [70, 44]
(property_identifier [70, 12] - [70, 19])
(string [70, 20] - [70, 44]
(string_fragment [70, 21] - [70, 43]))))
(jsx_text [71, 11] - [73, 10])
close_tag: (jsx_closing_element [73, 10] - [73, 19]
name: (identifier [73, 12] - [73, 18])))
(jsx_element [74, 10] - [80, 19]
open_tag: (jsx_opening_element [74, 10] - [78, 11]
name: (identifier [74, 11] - [74, 17])
attribute: (jsx_attribute [75, 12] - [75, 25]
(property_identifier [75, 12] - [75, 16])
(string [75, 17] - [75, 25]
(string_fragment [75, 18] - [75, 24])))
attribute: (jsx_attribute [76, 12] - [76, 31]
(property_identifier [76, 12] - [76, 17])
(string [76, 18] - [76, 31]
(string_fragment [76, 19] - [76, 30])))
attribute: (jsx_attribute [77, 12] - [77, 41]
(property_identifier [77, 12] - [77, 19])
(string [77, 20] - [77, 41]
(string_fragment [77, 21] - [77, 40]))))
(jsx_text [78, 11] - [80, 10])
close_tag: (jsx_closing_element [80, 10] - [80, 19]
name: (identifier [80, 12] - [80, 18])))
close_tag: (jsx_closing_element [81, 8] - [81, 14]
name: (identifier [81, 10] - [81, 13])))
close_tag: (jsx_closing_element [82, 6] - [82, 12]
name: (identifier [82, 8] - [82, 11])))
close_tag: (jsx_closing_element [83, 4] - [83, 10]
name: (identifier [83, 6] - [83, 9])))))))))))

View File

@ -1,258 +0,0 @@
(program [0, 0] - [63, 0]
(export_statement [0, 0] - [62, 2]
declaration: (lexical_declaration [0, 7] - [62, 2]
(variable_declarator [0, 13] - [62, 1]
name: (identifier [0, 13] - [0, 27])
value: (arrow_function [0, 30] - [62, 1]
parameters: (formal_parameters [0, 30] - [2, 1]
(required_parameter [1, 2] - [1, 70]
pattern: (object_pattern [1, 2] - [1, 26]
(shorthand_property_identifier_pattern [1, 4] - [1, 15])
(shorthand_property_identifier_pattern [1, 17] - [1, 24]))
type: (type_annotation [1, 26] - [1, 70]
(object_type [1, 28] - [1, 70]
(property_signature [1, 30] - [1, 49]
name: (property_identifier [1, 30] - [1, 41])
type: (type_annotation [1, 41] - [1, 49]
(predefined_type [1, 43] - [1, 49])))
(property_signature [1, 51] - [1, 68]
name: (property_identifier [1, 51] - [1, 58])
type: (type_annotation [1, 59] - [1, 68]
(predefined_type [1, 61] - [1, 68])))))))
body: (statement_block [2, 5] - [62, 1]
(return_statement [3, 2] - [61, 4]
(parenthesized_expression [3, 9] - [61, 3]
(jsx_element [4, 4] - [60, 13]
open_tag: (jsx_opening_element [4, 4] - [4, 28]
name: (identifier [4, 5] - [4, 11])
attribute: (jsx_attribute [4, 12] - [4, 27]
(property_identifier [4, 12] - [4, 17])
(string [4, 18] - [4, 27]
(string_fragment [4, 19] - [4, 26]))))
(jsx_element [5, 6] - [44, 12]
open_tag: (jsx_opening_element [5, 6] - [5, 55]
name: (identifier [5, 7] - [5, 10])
attribute: (jsx_attribute [5, 11] - [5, 54]
(property_identifier [5, 11] - [5, 16])
(string [5, 17] - [5, 54]
(string_fragment [5, 18] - [5, 53]))))
(jsx_element [6, 8] - [9, 12]
open_tag: (jsx_opening_element [6, 8] - [6, 43]
name: (identifier [6, 9] - [6, 10])
attribute: (jsx_attribute [6, 11] - [6, 28]
(property_identifier [6, 11] - [6, 15])
(string [6, 16] - [6, 28]
(string_fragment [6, 17] - [6, 27])))
attribute: (jsx_attribute [6, 29] - [6, 42]
(property_identifier [6, 29] - [6, 34])
(string [6, 35] - [6, 42]
(string_fragment [6, 36] - [6, 41]))))
(jsx_element [7, 10] - [7, 45]
open_tag: (jsx_opening_element [7, 10] - [7, 36]
name: (identifier [7, 11] - [7, 15])
attribute: (jsx_attribute [7, 16] - [7, 35]
(property_identifier [7, 16] - [7, 21])
(string [7, 22] - [7, 35]
(string_fragment [7, 23] - [7, 34]))))
(jsx_text [7, 36] - [7, 38])
close_tag: (jsx_closing_element [7, 38] - [7, 45]
name: (identifier [7, 40] - [7, 44])))
(jsx_element [8, 10] - [8, 31]
open_tag: (jsx_opening_element [8, 10] - [8, 16]
name: (identifier [8, 11] - [8, 15]))
(jsx_text [8, 16] - [8, 24])
close_tag: (jsx_closing_element [8, 24] - [8, 31]
name: (identifier [8, 26] - [8, 30])))
close_tag: (jsx_closing_element [9, 8] - [9, 12]
name: (identifier [9, 10] - [9, 11])))
(jsx_expression [11, 8] - [11, 33]
(comment [11, 9] - [11, 32]))
(jsx_element [12, 8] - [43, 14]
open_tag: (jsx_opening_element [12, 8] - [12, 33]
name: (identifier [12, 9] - [12, 12])
attribute: (jsx_attribute [12, 13] - [12, 32]
(property_identifier [12, 13] - [12, 18])
(string [12, 19] - [12, 32]
(string_fragment [12, 20] - [12, 31]))))
(jsx_element [13, 10] - [18, 14]
open_tag: (jsx_opening_element [13, 10] - [16, 11]
name: (identifier [13, 11] - [13, 12])
attribute: (jsx_attribute [14, 12] - [14, 29]
(property_identifier [14, 12] - [14, 16])
(string [14, 17] - [14, 29]
(string_fragment [14, 18] - [14, 28])))
attribute: (jsx_attribute [15, 12] - [15, 64]
(property_identifier [15, 12] - [15, 17])
(jsx_expression [15, 18] - [15, 64]
(ternary_expression [15, 19] - [15, 63]
condition: (binary_expression [15, 19] - [15, 47]
left: (identifier [15, 19] - [15, 30])
right: (string [15, 35] - [15, 47]
(string_fragment [15, 36] - [15, 46])))
consequence: (string [15, 50] - [15, 58]
(string_fragment [15, 51] - [15, 57]))
alternative: (string [15, 61] - [15, 63])))))
(jsx_element [17, 12] - [17, 34]
open_tag: (jsx_opening_element [17, 12] - [17, 18]
name: (identifier [17, 13] - [17, 17]))
(jsx_text [17, 18] - [17, 27])
close_tag: (jsx_closing_element [17, 27] - [17, 34]
name: (identifier [17, 29] - [17, 33])))
close_tag: (jsx_closing_element [18, 10] - [18, 14]
name: (identifier [18, 12] - [18, 13])))
(jsx_element [19, 10] - [26, 14]
open_tag: (jsx_opening_element [19, 10] - [24, 11]
name: (identifier [19, 11] - [19, 12])
attribute: (jsx_attribute [20, 12] - [20, 38]
(property_identifier [20, 12] - [20, 16])
(string [20, 17] - [20, 38]
(string_fragment [20, 18] - [20, 37])))
attribute: (jsx_attribute [21, 12] - [23, 19]
(property_identifier [21, 12] - [21, 17])
(jsx_expression [21, 18] - [23, 19]
(ternary_expression [21, 19] - [23, 18]
condition: (call_expression [21, 19] - [21, 64]
function: (member_expression [21, 19] - [21, 41]
object: (identifier [21, 19] - [21, 30])
property: (property_identifier [21, 31] - [21, 41]))
arguments: (arguments [21, 41] - [21, 64]
(string [21, 42] - [21, 63]
(string_fragment [21, 43] - [21, 62]))))
consequence: (string [22, 16] - [22, 24]
(string_fragment [22, 17] - [22, 23]))
alternative: (string [23, 16] - [23, 18])))))
(jsx_element [25, 12] - [25, 33]
open_tag: (jsx_opening_element [25, 12] - [25, 18]
name: (identifier [25, 13] - [25, 17]))
(jsx_text [25, 18] - [25, 26])
close_tag: (jsx_closing_element [25, 26] - [25, 33]
name: (identifier [25, 28] - [25, 32])))
close_tag: (jsx_closing_element [26, 10] - [26, 14]
name: (identifier [26, 12] - [26, 13])))
(jsx_element [27, 10] - [34, 14]
open_tag: (jsx_opening_element [27, 10] - [32, 11]
name: (identifier [27, 11] - [27, 12])
attribute: (jsx_attribute [28, 12] - [28, 38]
(property_identifier [28, 12] - [28, 16])
(string [28, 17] - [28, 38]
(string_fragment [28, 18] - [28, 37])))
attribute: (jsx_attribute [29, 12] - [31, 19]
(property_identifier [29, 12] - [29, 17])
(jsx_expression [29, 18] - [31, 19]
(ternary_expression [29, 19] - [31, 18]
condition: (call_expression [29, 19] - [29, 64]
function: (member_expression [29, 19] - [29, 41]
object: (identifier [29, 19] - [29, 30])
property: (property_identifier [29, 31] - [29, 41]))
arguments: (arguments [29, 41] - [29, 64]
(string [29, 42] - [29, 63]
(string_fragment [29, 43] - [29, 62]))))
consequence: (string [30, 16] - [30, 24]
(string_fragment [30, 17] - [30, 23]))
alternative: (string [31, 16] - [31, 18])))))
(jsx_element [33, 12] - [33, 33]
open_tag: (jsx_opening_element [33, 12] - [33, 18]
name: (identifier [33, 13] - [33, 17]))
(jsx_text [33, 18] - [33, 26])
close_tag: (jsx_closing_element [33, 26] - [33, 33]
name: (identifier [33, 28] - [33, 32])))
close_tag: (jsx_closing_element [34, 10] - [34, 14]
name: (identifier [34, 12] - [34, 13])))
(jsx_expression [35, 10] - [42, 12]
(binary_expression [35, 11] - [42, 11]
left: (identifier [35, 11] - [35, 18])
right: (parenthesized_expression [35, 22] - [42, 11]
(jsx_element [36, 12] - [41, 16]
open_tag: (jsx_opening_element [36, 12] - [39, 13]
name: (identifier [36, 13] - [36, 14])
attribute: (jsx_attribute [37, 14] - [37, 33]
(property_identifier [37, 14] - [37, 18])
(string [37, 19] - [37, 33]
(string_fragment [37, 20] - [37, 32])))
attribute: (jsx_attribute [38, 14] - [38, 70]
(property_identifier [38, 14] - [38, 19])
(jsx_expression [38, 20] - [38, 70]
(ternary_expression [38, 21] - [38, 69]
condition: (call_expression [38, 21] - [38, 53]
function: (member_expression [38, 21] - [38, 43]
object: (identifier [38, 21] - [38, 32])
property: (property_identifier [38, 33] - [38, 43]))
arguments: (arguments [38, 43] - [38, 53]
(string [38, 44] - [38, 52]
(string_fragment [38, 45] - [38, 51]))))
consequence: (string [38, 56] - [38, 64]
(string_fragment [38, 57] - [38, 63]))
alternative: (string [38, 67] - [38, 69])))))
(jsx_element [40, 14] - [40, 32]
open_tag: (jsx_opening_element [40, 14] - [40, 20]
name: (identifier [40, 15] - [40, 19]))
(jsx_text [40, 20] - [40, 25])
close_tag: (jsx_closing_element [40, 25] - [40, 32]
name: (identifier [40, 27] - [40, 31])))
close_tag: (jsx_closing_element [41, 12] - [41, 16]
name: (identifier [41, 14] - [41, 15]))))))
close_tag: (jsx_closing_element [43, 8] - [43, 14]
name: (identifier [43, 10] - [43, 13])))
close_tag: (jsx_closing_element [44, 6] - [44, 12]
name: (identifier [44, 8] - [44, 11])))
(jsx_element [46, 6] - [59, 12]
open_tag: (jsx_opening_element [46, 6] - [46, 34]
name: (identifier [46, 7] - [46, 10])
attribute: (jsx_attribute [46, 11] - [46, 33]
(property_identifier [46, 11] - [46, 16])
(string [46, 17] - [46, 33]
(string_fragment [46, 18] - [46, 32]))))
(jsx_expression [47, 8] - [55, 10]
(binary_expression [47, 9] - [55, 9]
left: (identifier [47, 9] - [47, 16])
right: (parenthesized_expression [47, 20] - [55, 9]
(jsx_element [48, 10] - [54, 14]
open_tag: (jsx_opening_element [48, 10] - [52, 11]
name: (identifier [48, 11] - [48, 12])
attribute: (jsx_attribute [49, 12] - [49, 31]
(property_identifier [49, 12] - [49, 16])
(string [49, 17] - [49, 31]
(string_fragment [49, 18] - [49, 30])))
attribute: (jsx_attribute [50, 12] - [50, 31]
(property_identifier [50, 12] - [50, 17])
(string [50, 18] - [50, 31]
(string_fragment [50, 19] - [50, 30])))
attribute: (jsx_attribute [51, 12] - [51, 225]
(property_identifier [51, 12] - [51, 17])
(string [51, 18] - [51, 225]
(string_fragment [51, 19] - [51, 224]))))
(jsx_element [53, 12] - [53, 38]
open_tag: (jsx_opening_element [53, 12] - [53, 18]
name: (identifier [53, 13] - [53, 17]))
(jsx_text [53, 18] - [53, 31])
close_tag: (jsx_closing_element [53, 31] - [53, 38]
name: (identifier [53, 33] - [53, 37])))
close_tag: (jsx_closing_element [54, 10] - [54, 14]
name: (identifier [54, 12] - [54, 13]))))))
(jsx_element [56, 8] - [58, 12]
open_tag: (jsx_opening_element [56, 8] - [56, 79]
name: (identifier [56, 9] - [56, 10])
attribute: (jsx_attribute [56, 11] - [56, 25]
(property_identifier [56, 11] - [56, 15])
(string [56, 16] - [56, 25]
(string_fragment [56, 17] - [56, 24])))
attribute: (jsx_attribute [56, 26] - [56, 45]
(property_identifier [56, 26] - [56, 31])
(string [56, 32] - [56, 45]
(string_fragment [56, 33] - [56, 44])))
attribute: (jsx_attribute [56, 46] - [56, 78]
(property_identifier [56, 46] - [56, 51])
(string [56, 52] - [56, 78]
(string_fragment [56, 53] - [56, 77]))))
(jsx_element [57, 10] - [57, 29]
open_tag: (jsx_opening_element [57, 10] - [57, 16]
name: (identifier [57, 11] - [57, 15]))
(jsx_text [57, 16] - [57, 22])
close_tag: (jsx_closing_element [57, 22] - [57, 29]
name: (identifier [57, 24] - [57, 28])))
close_tag: (jsx_closing_element [58, 8] - [58, 12]
name: (identifier [58, 10] - [58, 11])))
close_tag: (jsx_closing_element [59, 6] - [59, 12]
name: (identifier [59, 8] - [59, 11])))
close_tag: (jsx_closing_element [60, 4] - [60, 13]
name: (identifier [60, 6] - [60, 12])))))))))))

View File

@ -1,67 +0,0 @@
(program [0, 0] - [13, 0]
(import_statement [0, 0] - [0, 49]
(import_clause [0, 7] - [0, 23]
(named_imports [0, 7] - [0, 23]
(import_specifier [0, 9] - [0, 21]
name: (identifier [0, 9] - [0, 21]))))
source: (string [0, 29] - [0, 48]
(string_fragment [0, 30] - [0, 47])))
(import_statement [1, 0] - [1, 32]
(import_clause [1, 7] - [1, 10]
(identifier [1, 7] - [1, 10]))
source: (string [1, 16] - [1, 31]
(string_fragment [1, 17] - [1, 30])))
(expression_statement [3, 0] - [12, 3]
(call_expression [3, 0] - [12, 2]
function: (member_expression [3, 0] - [3, 9]
object: (identifier [3, 0] - [3, 4])
property: (property_identifier [3, 5] - [3, 9]))
arguments: (arguments [3, 9] - [12, 2]
(string [3, 10] - [3, 94]
(string_fragment [3, 11] - [3, 93]))
(arrow_function [3, 96] - [12, 1]
parameters: (formal_parameters [3, 102] - [3, 104])
body: (statement_block [3, 108] - [12, 1]
(lexical_declaration [4, 2] - [4, 68]
(variable_declarator [4, 8] - [4, 67]
name: (identifier [4, 8] - [4, 11])
value: (await_expression [4, 14] - [4, 67]
(call_expression [4, 20] - [4, 67]
function: (member_expression [4, 20] - [4, 29]
object: (identifier [4, 20] - [4, 23])
property: (property_identifier [4, 24] - [4, 29]))
arguments: (arguments [4, 29] - [4, 67]
(new_expression [4, 30] - [4, 66]
constructor: (identifier [4, 34] - [4, 41])
arguments: (arguments [4, 41] - [4, 66]
(string [4, 42] - [4, 65]
(string_fragment [4, 43] - [4, 64])))))))))
(expression_statement [5, 2] - [5, 32]
(call_expression [5, 2] - [5, 31]
function: (identifier [5, 2] - [5, 14])
arguments: (arguments [5, 14] - [5, 31]
(member_expression [5, 15] - [5, 25]
object: (identifier [5, 15] - [5, 18])
property: (property_identifier [5, 19] - [5, 25]))
(number [5, 27] - [5, 30]))))
(expression_statement [6, 2] - [11, 4]
(call_expression [6, 2] - [11, 3]
function: (identifier [6, 2] - [6, 14])
arguments: (arguments [6, 14] - [11, 3]
(call_expression [7, 4] - [9, 5]
function: (member_expression [7, 4] - [7, 41]
object: (call_expression [7, 4] - [7, 31]
function: (member_expression [7, 4] - [7, 19]
object: (member_expression [7, 4] - [7, 15]
object: (identifier [7, 4] - [7, 7])
property: (property_identifier [7, 8] - [7, 15]))
property: (property_identifier [7, 16] - [7, 19]))
arguments: (arguments [7, 19] - [7, 31]
(string [7, 20] - [7, 30]
(string_fragment [7, 21] - [7, 29]))))
optional_chain: (optional_chain [7, 31] - [7, 33])
property: (property_identifier [7, 33] - [7, 41]))
arguments: (arguments [7, 41] - [9, 5]
(string [8, 6] - [8, 44]
(string_fragment [8, 7] - [8, 43]))))
(true [10, 4] - [10, 8]))))))))))

View File

@ -1,617 +0,0 @@
(program [0, 0] - [129, 0]
(import_statement [0, 0] - [0, 40]
(import_clause [0, 7] - [0, 15]
(named_imports [0, 7] - [0, 15]
(import_specifier [0, 9] - [0, 13]
name: (identifier [0, 9] - [0, 13]))))
source: (string [0, 21] - [0, 39]
(string_fragment [0, 22] - [0, 38])))
(import_statement [1, 0] - [1, 66]
(import_clause [1, 7] - [1, 34]
(named_imports [1, 7] - [1, 34]
(import_specifier [1, 9] - [1, 21]
name: (identifier [1, 9] - [1, 21]))
(import_specifier [1, 23] - [1, 32]
name: (identifier [1, 23] - [1, 32]))))
source: (string [1, 40] - [1, 65]
(string_fragment [1, 41] - [1, 64])))
(import_statement [2, 0] - [2, 46]
(import_clause [2, 7] - [2, 17]
(named_imports [2, 7] - [2, 17]
(import_specifier [2, 9] - [2, 15]
name: (identifier [2, 9] - [2, 15]))))
source: (string [2, 23] - [2, 45]
(string_fragment [2, 24] - [2, 44])))
(import_statement [3, 0] - [3, 46]
(import_clause [3, 7] - [3, 21]
(named_imports [3, 7] - [3, 21]
(import_specifier [3, 9] - [3, 19]
name: (identifier [3, 9] - [3, 19]))))
source: (string [3, 27] - [3, 45]
(string_fragment [3, 28] - [3, 44])))
(import_statement [4, 0] - [4, 56]
(import_clause [4, 7] - [4, 26]
(named_imports [4, 7] - [4, 26]
(import_specifier [4, 9] - [4, 24]
name: (identifier [4, 9] - [4, 24]))))
source: (string [4, 32] - [4, 55]
(string_fragment [4, 33] - [4, 54])))
(export_statement [6, 0] - [6, 37]
declaration: (lexical_declaration [6, 7] - [6, 37]
(variable_declarator [6, 13] - [6, 36]
name: (identifier [6, 13] - [6, 23])
value: (new_expression [6, 26] - [6, 36]
constructor: (identifier [6, 30] - [6, 34])
arguments: (arguments [6, 34] - [6, 36])))))
(comment [8, 0] - [8, 60])
(comment [9, 0] - [9, 50])
(comment [10, 0] - [10, 60])
(expression_statement [12, 0] - [128, 3]
(call_expression [12, 0] - [128, 2]
function: (member_expression [12, 0] - [12, 14]
object: (identifier [12, 0] - [12, 10])
property: (property_identifier [12, 11] - [12, 14]))
arguments: (arguments [12, 14] - [128, 2]
(string [12, 15] - [12, 18]
(string_fragment [12, 16] - [12, 17]))
(arrow_function [12, 20] - [128, 1]
parameters: (formal_parameters [12, 26] - [12, 29]
(required_parameter [12, 27] - [12, 28]
pattern: (identifier [12, 27] - [12, 28])))
body: (statement_block [12, 33] - [128, 1]
(lexical_declaration [13, 2] - [13, 37]
(variable_declarator [13, 8] - [13, 36]
name: (identifier [13, 8] - [13, 13])
value: (call_expression [13, 16] - [13, 36]
function: (member_expression [13, 16] - [13, 27]
object: (member_expression [13, 16] - [13, 21]
object: (identifier [13, 16] - [13, 17])
property: (property_identifier [13, 18] - [13, 21]))
property: (property_identifier [13, 22] - [13, 27]))
arguments: (arguments [13, 27] - [13, 36]
(string [13, 28] - [13, 35]
(string_fragment [13, 29] - [13, 34]))))))
(if_statement [14, 2] - [16, 3]
condition: (parenthesized_expression [14, 5] - [14, 13]
(unary_expression [14, 6] - [14, 12]
argument: (identifier [14, 7] - [14, 12])))
consequence: (statement_block [14, 14] - [16, 3]
(return_statement [15, 4] - [15, 67]
(call_expression [15, 11] - [15, 66]
function: (member_expression [15, 11] - [15, 21]
object: (identifier [15, 11] - [15, 12])
property: (property_identifier [15, 13] - [15, 21]))
arguments: (arguments [15, 21] - [15, 66]
(string [15, 22] - [15, 60]
(string_fragment [15, 23] - [15, 59]))
(number [15, 62] - [15, 65]))))))
(comment [18, 2] - [18, 55])
(lexical_declaration [19, 2] - [19, 28]
(variable_declarator [19, 6] - [19, 27]
name: (identifier [19, 6] - [19, 20])
value: (null [19, 23] - [19, 27])))
(try_statement [20, 2] - [22, 19]
body: (statement_block [20, 6] - [22, 3]
(expression_statement [21, 4] - [21, 45]
(assignment_expression [21, 4] - [21, 44]
left: (identifier [21, 4] - [21, 18])
right: (await_expression [21, 21] - [21, 44]
(call_expression [21, 27] - [21, 44]
function: (member_expression [21, 27] - [21, 37]
object: (identifier [21, 27] - [21, 33])
property: (property_identifier [21, 34] - [21, 37]))
arguments: (arguments [21, 37] - [21, 44]
(identifier [21, 38] - [21, 43])))))))
handler: (catch_clause [22, 4] - [22, 19]
parameter: (identifier [22, 11] - [22, 15])
body: (statement_block [22, 17] - [22, 19])))
(lexical_declaration [24, 2] - [24, 30]
(variable_declarator [24, 6] - [24, 29]
name: (identifier [24, 6] - [24, 17])
type: (type_annotation [24, 17] - [24, 22]
(predefined_type [24, 19] - [24, 22]))
value: (null [24, 25] - [24, 29])))
(if_statement [25, 2] - [29, 3]
condition: (parenthesized_expression [25, 5] - [25, 21]
(identifier [25, 6] - [25, 20]))
consequence: (statement_block [25, 22] - [29, 3]
(try_statement [26, 4] - [28, 21]
body: (statement_block [26, 8] - [28, 5]
(expression_statement [27, 6] - [27, 47]
(assignment_expression [27, 6] - [27, 46]
left: (identifier [27, 6] - [27, 17])
right: (call_expression [27, 20] - [27, 46]
function: (member_expression [27, 20] - [27, 30]
object: (identifier [27, 20] - [27, 24])
property: (property_identifier [27, 25] - [27, 30]))
arguments: (arguments [27, 30] - [27, 46]
(identifier [27, 31] - [27, 45]))))))
handler: (catch_clause [28, 6] - [28, 21]
parameter: (identifier [28, 13] - [28, 17])
body: (statement_block [28, 19] - [28, 21])))))
(lexical_declaration [31, 2] - [31, 40]
(variable_declarator [31, 6] - [31, 39]
name: (identifier [31, 6] - [31, 19])
type: (type_annotation [31, 19] - [31, 32]
(union_type [31, 21] - [31, 32]
(type_identifier [31, 21] - [31, 25])
(literal_type [31, 28] - [31, 32]
(null [31, 28] - [31, 32]))))
value: (null [31, 35] - [31, 39])))
(lexical_declaration [32, 2] - [32, 34]
(variable_declarator [32, 6] - [32, 33]
name: (identifier [32, 6] - [32, 18])
type: (type_annotation [32, 18] - [32, 28]
(array_type [32, 20] - [32, 28]
(predefined_type [32, 20] - [32, 26])))
value: (array [32, 31] - [32, 33])))
(if_statement [34, 2] - [80, 3]
condition: (parenthesized_expression [34, 5] - [34, 40]
(binary_expression [34, 6] - [34, 39]
left: (unary_expression [34, 6] - [34, 18]
argument: (identifier [34, 7] - [34, 18]))
right: (unary_expression [34, 22] - [34, 39]
argument: (member_expression [34, 23] - [34, 39]
object: (identifier [34, 23] - [34, 34])
property: (property_identifier [34, 35] - [34, 39])))))
consequence: (statement_block [34, 41] - [68, 3]
(try_statement [35, 4] - [67, 5]
body: (statement_block [35, 8] - [65, 5]
(lexical_declaration [36, 6] - [36, 46]
(variable_declarator [36, 12] - [36, 45]
name: (identifier [36, 12] - [36, 18])
value: (call_expression [36, 21] - [36, 45]
function: (member_expression [36, 21] - [36, 43]
object: (new_expression [36, 21] - [36, 31]
constructor: (identifier [36, 25] - [36, 29])
arguments: (arguments [36, 29] - [36, 31]))
property: (property_identifier [36, 32] - [36, 43]))
arguments: (arguments [36, 43] - [36, 45]))))
(lexical_declaration [37, 6] - [42, 35]
(variable_declarator [37, 12] - [42, 34]
name: (identifier [37, 12] - [37, 19])
value: (await_expression [37, 22] - [42, 34]
(call_expression [37, 28] - [42, 34]
function: (member_expression [37, 28] - [42, 12]
object: (call_expression [37, 28] - [42, 7]
function: (member_expression [37, 28] - [37, 42]
object: (identifier [37, 28] - [37, 38])
property: (property_identifier [37, 39] - [37, 42]))
arguments: (template_string [37, 42] - [42, 7]
(string_fragment [37, 43] - [41, 21])
(template_substitution [41, 21] - [41, 29]
(identifier [41, 23] - [41, 28]))
(string_fragment [41, 29] - [41, 49])
(template_substitution [41, 49] - [41, 58]
(identifier [41, 51] - [41, 57]))
(string_fragment [41, 58] - [42, 6])))
property: (property_identifier [42, 8] - [42, 12]))
arguments: (arguments [42, 12] - [42, 34]
(arrow_function [42, 13] - [42, 33]
parameters: (formal_parameters [42, 13] - [42, 23]
(required_parameter [42, 14] - [42, 22]
pattern: (identifier [42, 14] - [42, 17])
type: (type_annotation [42, 17] - [42, 22]
(predefined_type [42, 19] - [42, 22]))))
body: (subscript_expression [42, 27] - [42, 33]
object: (identifier [42, 27] - [42, 30])
index: (number [42, 31] - [42, 32]))))))))
(if_statement [44, 6] - [46, 7]
condition: (parenthesized_expression [44, 9] - [44, 19]
(unary_expression [44, 10] - [44, 18]
argument: (identifier [44, 11] - [44, 18])))
consequence: (statement_block [44, 20] - [46, 7]
(return_statement [45, 8] - [45, 71]
(call_expression [45, 15] - [45, 70]
function: (member_expression [45, 15] - [45, 25]
object: (identifier [45, 15] - [45, 16])
property: (property_identifier [45, 17] - [45, 25]))
arguments: (arguments [45, 25] - [45, 70]
(string [45, 26] - [45, 64]
(string_fragment [45, 27] - [45, 63]))
(number [45, 66] - [45, 69]))))))
(expression_statement [48, 6] - [54, 8]
(assignment_expression [48, 6] - [54, 7]
left: (identifier [48, 6] - [48, 17])
right: (object [48, 20] - [54, 7]
(pair [49, 8] - [49, 29]
key: (property_identifier [49, 8] - [49, 12])
value: (member_expression [49, 14] - [49, 29]
object: (identifier [49, 14] - [49, 21])
property: (property_identifier [49, 22] - [49, 29])))
(pair [50, 8] - [50, 34]
key: (property_identifier [50, 8] - [50, 16])
value: (member_expression [50, 18] - [50, 34]
object: (identifier [50, 18] - [50, 25])
property: (property_identifier [50, 26] - [50, 34])))
(pair [51, 8] - [51, 28]
key: (property_identifier [51, 8] - [51, 13])
value: (member_expression [51, 15] - [51, 28]
object: (identifier [51, 15] - [51, 22])
property: (property_identifier [51, 23] - [51, 28])))
(pair [52, 8] - [52, 33]
key: (property_identifier [52, 8] - [52, 15])
value: (member_expression [52, 17] - [52, 33]
object: (identifier [52, 17] - [52, 24])
property: (property_identifier [52, 25] - [52, 33])))
(pair [53, 8] - [53, 43]
key: (property_identifier [53, 8] - [53, 20])
value: (member_expression [53, 22] - [53, 43]
object: (identifier [53, 22] - [53, 29])
property: (property_identifier [53, 30] - [53, 43]))))))
(expression_statement [55, 6] - [55, 51]
(assignment_expression [55, 6] - [55, 50]
left: (identifier [55, 6] - [55, 19])
right: (new_expression [55, 22] - [55, 50]
constructor: (identifier [55, 26] - [55, 30])
arguments: (arguments [55, 30] - [55, 50]
(member_expression [55, 31] - [55, 49]
object: (identifier [55, 31] - [55, 38])
property: (property_identifier [55, 39] - [55, 49]))))))
(expression_statement [56, 6] - [56, 49]
(assignment_expression [56, 6] - [56, 48]
left: (identifier [56, 6] - [56, 18])
right: (binary_expression [56, 21] - [56, 48]
left: (member_expression [56, 21] - [56, 42]
object: (identifier [56, 21] - [56, 28])
property: (property_identifier [56, 29] - [56, 42]))
right: (array [56, 46] - [56, 48]))))
(try_statement [58, 6] - [64, 21]
body: (statement_block [58, 10] - [64, 7]
(lexical_declaration [59, 8] - [62, 10]
(variable_declarator [59, 14] - [62, 9]
name: (identifier [59, 14] - [59, 24])
value: (call_expression [59, 27] - [62, 9]
function: (member_expression [59, 27] - [59, 35]
object: (identifier [59, 27] - [59, 31])
property: (property_identifier [59, 32] - [59, 35]))
arguments: (arguments [59, 35] - [62, 9]
(number [60, 10] - [60, 11])
(call_expression [61, 10] - [61, 67]
function: (member_expression [61, 10] - [61, 20]
object: (identifier [61, 10] - [61, 14])
property: (property_identifier [61, 15] - [61, 20]))
arguments: (arguments [61, 20] - [61, 67]
(binary_expression [61, 21] - [61, 66]
left: (parenthesized_expression [61, 21] - [61, 59]
(binary_expression [61, 22] - [61, 58]
left: (call_expression [61, 22] - [61, 45]
function: (member_expression [61, 22] - [61, 43]
object: (identifier [61, 22] - [61, 35])
property: (property_identifier [61, 36] - [61, 43]))
arguments: (arguments [61, 43] - [61, 45]))
right: (call_expression [61, 48] - [61, 58]
function: (member_expression [61, 48] - [61, 56]
object: (identifier [61, 48] - [61, 52])
property: (property_identifier [61, 53] - [61, 56]))
arguments: (arguments [61, 56] - [61, 58]))))
right: (number [61, 62] - [61, 66]))))))))
(expression_statement [63, 8] - [63, 75]
(await_expression [63, 8] - [63, 74]
(call_expression [63, 14] - [63, 74]
function: (member_expression [63, 14] - [63, 26]
object: (identifier [63, 14] - [63, 20])
property: (property_identifier [63, 21] - [63, 26]))
arguments: (arguments [63, 26] - [63, 74]
(identifier [63, 27] - [63, 32])
(identifier [63, 34] - [63, 44])
(call_expression [63, 46] - [63, 73]
function: (member_expression [63, 46] - [63, 60]
object: (identifier [63, 46] - [63, 50])
property: (property_identifier [63, 51] - [63, 60]))
arguments: (arguments [63, 60] - [63, 73]
(identifier [63, 61] - [63, 72]))))))))
handler: (catch_clause [64, 8] - [64, 21]
parameter: (identifier [64, 15] - [64, 17])
body: (statement_block [64, 19] - [64, 21]))))
handler: (catch_clause [65, 6] - [67, 5]
parameter: (identifier [65, 13] - [65, 17])
body: (statement_block [65, 19] - [67, 5]
(return_statement [66, 6] - [66, 69]
(call_expression [66, 13] - [66, 68]
function: (member_expression [66, 13] - [66, 23]
object: (identifier [66, 13] - [66, 14])
property: (property_identifier [66, 15] - [66, 23]))
arguments: (arguments [66, 23] - [66, 68]
(string [66, 24] - [66, 62]
(string_fragment [66, 25] - [66, 61]))
(number [66, 64] - [66, 67]))))))))
alternative: (else_clause [68, 4] - [80, 3]
(statement_block [68, 9] - [80, 3]
(try_statement [69, 4] - [79, 5]
body: (statement_block [69, 8] - [77, 5]
(lexical_declaration [70, 6] - [70, 42]
(variable_declarator [70, 12] - [70, 41]
name: (identifier [70, 12] - [70, 15])
value: (await_expression [70, 18] - [70, 41]
(call_expression [70, 24] - [70, 41]
function: (member_expression [70, 24] - [70, 34]
object: (identifier [70, 24] - [70, 30])
property: (property_identifier [70, 31] - [70, 34]))
arguments: (arguments [70, 34] - [70, 41]
(identifier [70, 35] - [70, 40]))))))
(if_statement [71, 6] - [73, 7]
condition: (parenthesized_expression [71, 9] - [71, 19]
(binary_expression [71, 10] - [71, 18]
left: (identifier [71, 10] - [71, 13])
right: (number [71, 17] - [71, 18])))
consequence: (statement_block [71, 20] - [73, 7]
(return_statement [72, 8] - [72, 71]
(call_expression [72, 15] - [72, 70]
function: (member_expression [72, 15] - [72, 25]
object: (identifier [72, 15] - [72, 16])
property: (property_identifier [72, 17] - [72, 25]))
arguments: (arguments [72, 25] - [72, 70]
(string [72, 26] - [72, 64]
(string_fragment [72, 27] - [72, 63]))
(number [72, 66] - [72, 69]))))))
(expression_statement [74, 6] - [74, 56]
(assignment_expression [74, 6] - [74, 55]
left: (identifier [74, 6] - [74, 19])
right: (new_expression [74, 22] - [74, 55]
constructor: (identifier [74, 26] - [74, 30])
arguments: (arguments [74, 30] - [74, 55]
(binary_expression [74, 31] - [74, 54]
left: (call_expression [74, 31] - [74, 41]
function: (member_expression [74, 31] - [74, 39]
object: (identifier [74, 31] - [74, 35])
property: (property_identifier [74, 36] - [74, 39]))
arguments: (arguments [74, 39] - [74, 41]))
right: (binary_expression [74, 44] - [74, 54]
left: (identifier [74, 44] - [74, 47])
right: (number [74, 50] - [74, 54])))))))
(expression_statement [75, 6] - [76, 11]
(assignment_expression [75, 6] - [76, 10]
left: (identifier [75, 6] - [75, 18])
right: (binary_expression [75, 21] - [76, 10]
left: (binary_expression [75, 21] - [75, 74]
left: (member_expression [75, 21] - [75, 45]
object: (identifier [75, 21] - [75, 32])
property: (property_identifier [75, 33] - [75, 45]))
right: (member_expression [75, 49] - [75, 74]
object: (identifier [75, 49] - [75, 60])
property: (property_identifier [75, 61] - [75, 74])))
right: (array [76, 8] - [76, 10])))))
handler: (catch_clause [77, 6] - [79, 5]
parameter: (identifier [77, 13] - [77, 17])
body: (statement_block [77, 19] - [79, 5]
(return_statement [78, 6] - [78, 69]
(call_expression [78, 13] - [78, 68]
function: (member_expression [78, 13] - [78, 23]
object: (identifier [78, 13] - [78, 14])
property: (property_identifier [78, 15] - [78, 23]))
arguments: (arguments [78, 23] - [78, 68]
(string [78, 24] - [78, 62]
(string_fragment [78, 25] - [78, 61]))
(number [78, 64] - [78, 67]))))))))))
(if_statement [82, 2] - [84, 3]
condition: (parenthesized_expression [82, 5] - [82, 37]
(binary_expression [82, 6] - [82, 36]
left: (unary_expression [82, 6] - [82, 18]
argument: (identifier [82, 7] - [82, 18]))
right: (unary_expression [82, 22] - [82, 36]
argument: (identifier [82, 23] - [82, 36]))))
consequence: (statement_block [82, 38] - [84, 3]
(return_statement [83, 4] - [83, 67]
(call_expression [83, 11] - [83, 66]
function: (member_expression [83, 11] - [83, 21]
object: (identifier [83, 11] - [83, 12])
property: (property_identifier [83, 13] - [83, 21]))
arguments: (arguments [83, 21] - [83, 66]
(string [83, 22] - [83, 60]
(string_fragment [83, 23] - [83, 59]))
(number [83, 62] - [83, 65]))))))
(comment [86, 2] - [86, 22])
(expression_statement [87, 2] - [87, 47]
(call_expression [87, 2] - [87, 46]
function: (identifier [87, 2] - [87, 14])
arguments: (arguments [87, 14] - [87, 46]
(identifier [87, 15] - [87, 16])
(string [87, 18] - [87, 30]
(string_fragment [87, 19] - [87, 29]))
(object [87, 32] - [87, 45]
(pair [87, 34] - [87, 43]
key: (property_identifier [87, 34] - [87, 38])
value: (string [87, 40] - [87, 43]
(string_fragment [87, 41] - [87, 42])))))))
(lexical_declaration [89, 2] - [89, 37]
(variable_declarator [89, 8] - [89, 36]
name: (identifier [89, 8] - [89, 12])
value: (call_expression [89, 15] - [89, 36]
function: (member_expression [89, 15] - [89, 27]
object: (member_expression [89, 15] - [89, 23]
object: (identifier [89, 15] - [89, 19])
property: (property_identifier [89, 20] - [89, 23]))
property: (property_identifier [89, 24] - [89, 27]))
arguments: (arguments [89, 27] - [89, 36]
(string [89, 28] - [89, 35]
(string_fragment [89, 29] - [89, 34]))))))
(lexical_declaration [90, 2] - [90, 45]
(variable_declarator [90, 8] - [90, 44]
name: (identifier [90, 8] - [90, 20])
value: (call_expression [90, 23] - [90, 44]
function: (identifier [90, 23] - [90, 38])
arguments: (arguments [90, 38] - [90, 44]
(identifier [90, 39] - [90, 43])))))
(lexical_declaration [91, 2] - [94, 4]
(variable_declarator [91, 8] - [94, 3]
name: (identifier [91, 8] - [91, 18])
value: (call_expression [91, 21] - [94, 3]
function: (member_expression [91, 21] - [91, 29]
object: (identifier [91, 21] - [91, 25])
property: (property_identifier [91, 26] - [91, 29]))
arguments: (arguments [91, 29] - [94, 3]
(number [92, 4] - [92, 5])
(call_expression [93, 4] - [93, 61]
function: (member_expression [93, 4] - [93, 14]
object: (identifier [93, 4] - [93, 8])
property: (property_identifier [93, 9] - [93, 14]))
arguments: (arguments [93, 14] - [93, 61]
(binary_expression [93, 15] - [93, 60]
left: (parenthesized_expression [93, 15] - [93, 53]
(binary_expression [93, 16] - [93, 52]
left: (call_expression [93, 16] - [93, 39]
function: (member_expression [93, 16] - [93, 37]
object: (identifier [93, 16] - [93, 29])
property: (property_identifier [93, 30] - [93, 37]))
arguments: (arguments [93, 37] - [93, 39]))
right: (call_expression [93, 42] - [93, 52]
function: (member_expression [93, 42] - [93, 50]
object: (identifier [93, 42] - [93, 46])
property: (property_identifier [93, 47] - [93, 50]))
arguments: (arguments [93, 50] - [93, 52]))))
right: (number [93, 56] - [93, 60]))))))))
(expression_statement [95, 2] - [102, 5]
(call_expression [95, 2] - [102, 4]
function: (identifier [95, 2] - [95, 11])
arguments: (arguments [95, 11] - [102, 4]
(identifier [95, 12] - [95, 13])
(string [95, 15] - [95, 27]
(string_fragment [95, 16] - [95, 26]))
(identifier [95, 29] - [95, 34])
(object [95, 36] - [102, 3]
(pair [96, 4] - [96, 13]
key: (property_identifier [96, 4] - [96, 8])
value: (string [96, 10] - [96, 13]
(string_fragment [96, 11] - [96, 12])))
(pair [97, 4] - [97, 24]
key: (property_identifier [97, 4] - [97, 10])
value: (identifier [97, 12] - [97, 24]))
(pair [98, 4] - [98, 18]
key: (property_identifier [98, 4] - [98, 12])
value: (true [98, 14] - [98, 18]))
(pair [99, 4] - [99, 16]
key: (property_identifier [99, 4] - [99, 10])
value: (true [99, 12] - [99, 16]))
(pair [100, 4] - [100, 19]
key: (property_identifier [100, 4] - [100, 12])
value: (string [100, 14] - [100, 19]
(string_fragment [100, 15] - [100, 18])))
(pair [101, 4] - [101, 22]
key: (property_identifier [101, 4] - [101, 10])
value: (identifier [101, 12] - [101, 22]))))))
(comment [104, 2] - [104, 31])
(lexical_declaration [105, 2] - [105, 26]
(variable_declarator [105, 6] - [105, 25]
name: (identifier [105, 6] - [105, 18])
value: (null [105, 21] - [105, 25])))
(if_statement [106, 2] - [121, 3]
condition: (parenthesized_expression [106, 5] - [106, 34]
(call_expression [106, 6] - [106, 33]
function: (member_expression [106, 6] - [106, 19]
object: (identifier [106, 6] - [106, 11])
property: (property_identifier [106, 12] - [106, 19]))
arguments: (arguments [106, 19] - [106, 33]
(identifier [106, 20] - [106, 32]))))
consequence: (statement_block [106, 35] - [121, 3]
(lexical_declaration [107, 4] - [109, 6]
(variable_declarator [107, 10] - [109, 5]
name: (identifier [107, 10] - [107, 18])
value: (call_expression [107, 21] - [109, 5]
function: (member_expression [107, 21] - [107, 38]
object: (identifier [107, 21] - [107, 33])
property: (property_identifier [107, 34] - [107, 38]))
arguments: (arguments [107, 38] - [109, 5]
(arrow_function [107, 39] - [108, 51]
parameters: (formal_parameters [107, 39] - [107, 50]
(required_parameter [107, 40] - [107, 49]
pattern: (identifier [107, 40] - [107, 41])
type: (type_annotation [107, 41] - [107, 49]
(predefined_type [107, 43] - [107, 49]))))
body: (binary_expression [108, 6] - [108, 51]
left: (binary_expression [108, 6] - [108, 27]
left: (unary_expression [108, 6] - [108, 14]
argument: (identifier [108, 13] - [108, 14]))
right: (string [108, 19] - [108, 27]
(string_fragment [108, 20] - [108, 26])))
right: (call_expression [108, 31] - [108, 51]
function: (member_expression [108, 31] - [108, 43]
object: (identifier [108, 31] - [108, 32])
property: (property_identifier [108, 33] - [108, 43]))
arguments: (arguments [108, 43] - [108, 51]
(string [108, 44] - [108, 50]
(string_fragment [108, 45] - [108, 49]))))))))))
(if_statement [110, 4] - [120, 5]
condition: (parenthesized_expression [110, 7] - [110, 17]
(identifier [110, 8] - [110, 16]))
consequence: (statement_block [110, 18] - [120, 5]
(lexical_declaration [111, 6] - [111, 44]
(variable_declarator [111, 12] - [111, 43]
name: (identifier [111, 12] - [111, 19])
value: (call_expression [111, 22] - [111, 43]
function: (member_expression [111, 22] - [111, 40]
object: (identifier [111, 22] - [111, 30])
property: (property_identifier [111, 31] - [111, 40]))
arguments: (arguments [111, 40] - [111, 43]
(number [111, 41] - [111, 42])))))
(try_statement [112, 6] - [119, 23]
body: (statement_block [112, 10] - [119, 7]
(lexical_declaration [113, 8] - [115, 37]
(variable_declarator [113, 14] - [115, 36]
name: (identifier [113, 14] - [113, 23])
value: (await_expression [113, 26] - [115, 36]
(call_expression [113, 32] - [115, 36]
function: (member_expression [113, 32] - [115, 14]
object: (call_expression [113, 32] - [115, 9]
function: (member_expression [113, 32] - [113, 46]
object: (identifier [113, 32] - [113, 42])
property: (property_identifier [113, 43] - [113, 46]))
arguments: (template_string [113, 46] - [115, 9]
(string_fragment [113, 47] - [114, 47])
(template_substitution [114, 47] - [114, 57]
(identifier [114, 49] - [114, 56]))
(string_fragment [114, 57] - [115, 8])))
property: (property_identifier [115, 10] - [115, 14]))
arguments: (arguments [115, 14] - [115, 36]
(arrow_function [115, 15] - [115, 35]
parameters: (formal_parameters [115, 15] - [115, 25]
(required_parameter [115, 16] - [115, 24]
pattern: (identifier [115, 16] - [115, 19])
type: (type_annotation [115, 19] - [115, 24]
(predefined_type [115, 21] - [115, 24]))))
body: (subscript_expression [115, 29] - [115, 35]
object: (identifier [115, 29] - [115, 32])
index: (number [115, 33] - [115, 34]))))))))
(if_statement [116, 8] - [118, 9]
condition: (parenthesized_expression [116, 11] - [116, 42]
(binary_expression [116, 12] - [116, 41]
left: (identifier [116, 12] - [116, 21])
right: (member_expression [116, 25] - [116, 41]
object: (identifier [116, 25] - [116, 34])
property: (property_identifier [116, 35] - [116, 41]))))
consequence: (statement_block [116, 43] - [118, 9]
(expression_statement [117, 10] - [117, 42]
(assignment_expression [117, 10] - [117, 41]
left: (identifier [117, 10] - [117, 22])
right: (member_expression [117, 25] - [117, 41]
object: (identifier [117, 25] - [117, 34])
property: (property_identifier [117, 35] - [117, 41])))))))
handler: (catch_clause [119, 8] - [119, 23]
parameter: (identifier [119, 15] - [119, 19])
body: (statement_block [119, 21] - [119, 23])))))))
(if_statement [123, 2] - [127, 3]
condition: (parenthesized_expression [123, 5] - [123, 19]
(identifier [123, 6] - [123, 18]))
consequence: (statement_block [123, 20] - [125, 3]
(return_statement [124, 4] - [124, 54]
(call_expression [124, 11] - [124, 53]
function: (member_expression [124, 11] - [124, 21]
object: (identifier [124, 11] - [124, 12])
property: (property_identifier [124, 13] - [124, 21]))
arguments: (arguments [124, 21] - [124, 53]
(template_string [124, 22] - [124, 47]
(string_fragment [124, 23] - [124, 31])
(template_substitution [124, 31] - [124, 46]
(identifier [124, 33] - [124, 45])))
(number [124, 49] - [124, 52])))))
alternative: (else_clause [125, 4] - [127, 3]
(statement_block [125, 9] - [127, 3]
(return_statement [126, 4] - [126, 41]
(call_expression [126, 11] - [126, 40]
function: (member_expression [126, 11] - [126, 21]
object: (identifier [126, 11] - [126, 12])
property: (property_identifier [126, 13] - [126, 21]))
arguments: (arguments [126, 21] - [126, 40]
(string [126, 22] - [126, 34]
(string_fragment [126, 23] - [126, 33]))
(number [126, 36] - [126, 39])))))))))))))

View File

@ -1,447 +0,0 @@
(program [0, 0] - [127, 0]
(import_statement [0, 0] - [0, 83]
(import_clause [0, 7] - [0, 38]
(named_imports [0, 7] - [0, 38]
(import_specifier [0, 9] - [0, 36]
name: (identifier [0, 9] - [0, 36]))))
source: (string [0, 44] - [0, 82]
(string_fragment [0, 45] - [0, 81])))
(export_statement [2, 0] - [126, 2]
declaration: (lexical_declaration [2, 7] - [126, 2]
(variable_declarator [2, 13] - [126, 1]
name: (identifier [2, 13] - [2, 33])
value: (arrow_function [2, 36] - [126, 1]
parameters: (formal_parameters [2, 36] - [8, 2]
(required_parameter [2, 37] - [8, 1]
pattern: (object_pattern [2, 37] - [5, 1]
(shorthand_property_identifier_pattern [3, 2] - [3, 10])
(object_assignment_pattern [4, 2] - [4, 17]
left: (shorthand_property_identifier_pattern [4, 2] - [4, 9])
right: (false [4, 12] - [4, 17])))
type: (type_annotation [5, 1] - [8, 1]
(object_type [5, 3] - [8, 1]
(property_signature [6, 2] - [6, 17]
name: (property_identifier [6, 2] - [6, 10])
type: (type_annotation [6, 10] - [6, 17]
(array_type [6, 12] - [6, 17]
(predefined_type [6, 12] - [6, 15]))))
(property_signature [7, 2] - [7, 19]
name: (property_identifier [7, 2] - [7, 9])
type: (type_annotation [7, 10] - [7, 19]
(predefined_type [7, 12] - [7, 19])))))))
body: (statement_block [8, 6] - [126, 1]
(return_statement [9, 2] - [125, 4]
(parenthesized_expression [9, 9] - [125, 3]
(jsx_element [10, 4] - [124, 34]
open_tag: (jsx_opening_element [10, 4] - [14, 5]
name: (identifier [10, 5] - [10, 32])
attribute: (jsx_attribute [11, 6] - [11, 22]
(property_identifier [11, 6] - [11, 11])
(string [11, 12] - [11, 22]
(string_fragment [11, 13] - [11, 21])))
attribute: (jsx_attribute [12, 6] - [12, 39]
(property_identifier [12, 6] - [12, 17])
(string [12, 18] - [12, 39]
(string_fragment [12, 19] - [12, 38])))
attribute: (jsx_attribute [13, 6] - [13, 23]
(property_identifier [13, 6] - [13, 13])
(jsx_expression [13, 14] - [13, 23]
(identifier [13, 15] - [13, 22]))))
(jsx_element [15, 6] - [24, 12]
open_tag: (jsx_opening_element [15, 6] - [15, 142]
name: (identifier [15, 7] - [15, 10])
attribute: (jsx_attribute [15, 11] - [15, 141]
(property_identifier [15, 11] - [15, 16])
(string [15, 17] - [15, 141]
(string_fragment [15, 18] - [15, 140]))))
(jsx_element [16, 8] - [23, 14]
open_tag: (jsx_opening_element [16, 8] - [16, 13]
name: (identifier [16, 9] - [16, 12]))
(jsx_element [17, 10] - [19, 15]
open_tag: (jsx_opening_element [17, 10] - [17, 110]
name: (identifier [17, 11] - [17, 13])
attribute: (jsx_attribute [17, 14] - [17, 109]
(property_identifier [17, 14] - [17, 19])
(string [17, 20] - [17, 109]
(string_fragment [17, 21] - [17, 108]))))
(jsx_text [17, 110] - [19, 10])
close_tag: (jsx_closing_element [19, 10] - [19, 15]
name: (identifier [19, 12] - [19, 14])))
(jsx_element [20, 10] - [22, 14]
open_tag: (jsx_opening_element [20, 10] - [20, 82]
name: (identifier [20, 11] - [20, 12])
attribute: (jsx_attribute [20, 13] - [20, 81]
(property_identifier [20, 13] - [20, 18])
(string [20, 19] - [20, 81]
(string_fragment [20, 20] - [20, 80]))))
(jsx_text [20, 82] - [22, 10])
close_tag: (jsx_closing_element [22, 10] - [22, 14]
name: (identifier [22, 12] - [22, 13])))
close_tag: (jsx_closing_element [23, 8] - [23, 14]
name: (identifier [23, 10] - [23, 13])))
close_tag: (jsx_closing_element [24, 6] - [24, 12]
name: (identifier [24, 8] - [24, 11])))
(jsx_expression [26, 6] - [26, 32]
(comment [26, 7] - [26, 31]))
(jsx_element [27, 6] - [77, 12]
open_tag: (jsx_opening_element [27, 6] - [27, 55]
name: (identifier [27, 7] - [27, 10])
attribute: (jsx_attribute [27, 11] - [27, 23]
(property_identifier [27, 11] - [27, 16])
(string [27, 17] - [27, 23]
(string_fragment [27, 18] - [27, 22])))
attribute: (jsx_attribute [27, 24] - [27, 54]
(property_identifier [27, 24] - [27, 29])
(string [27, 30] - [27, 54]
(string_fragment [27, 31] - [27, 53]))))
(jsx_element [28, 8] - [76, 14]
open_tag: (jsx_opening_element [28, 8] - [28, 37]
name: (identifier [28, 9] - [28, 12])
attribute: (jsx_attribute [28, 13] - [28, 36]
(property_identifier [28, 13] - [28, 18])
(string [28, 19] - [28, 36]
(string_fragment [28, 20] - [28, 35]))))
(jsx_element [29, 10] - [75, 18]
open_tag: (jsx_opening_element [29, 10] - [29, 17]
name: (identifier [29, 11] - [29, 16]))
(jsx_element [30, 12] - [37, 20]
open_tag: (jsx_opening_element [30, 12] - [30, 19]
name: (identifier [30, 13] - [30, 18]))
(jsx_element [31, 14] - [36, 19]
open_tag: (jsx_opening_element [31, 14] - [31, 18]
name: (identifier [31, 15] - [31, 17]))
(jsx_element [32, 16] - [32, 38]
open_tag: (jsx_opening_element [32, 16] - [32, 20]
name: (identifier [32, 17] - [32, 19]))
(jsx_text [32, 20] - [32, 33])
close_tag: (jsx_closing_element [32, 33] - [32, 38]
name: (identifier [32, 35] - [32, 37])))
(jsx_element [33, 16] - [33, 37]
open_tag: (jsx_opening_element [33, 16] - [33, 20]
name: (identifier [33, 17] - [33, 19]))
(jsx_text [33, 20] - [33, 32])
close_tag: (jsx_closing_element [33, 32] - [33, 37]
name: (identifier [33, 34] - [33, 36])))
(jsx_element [34, 16] - [34, 38]
open_tag: (jsx_opening_element [34, 16] - [34, 20]
name: (identifier [34, 17] - [34, 19]))
(jsx_text [34, 20] - [34, 33])
close_tag: (jsx_closing_element [34, 33] - [34, 38]
name: (identifier [34, 35] - [34, 37])))
(jsx_element [35, 16] - [35, 31]
open_tag: (jsx_opening_element [35, 16] - [35, 20]
name: (identifier [35, 17] - [35, 19]))
(jsx_text [35, 20] - [35, 26])
close_tag: (jsx_closing_element [35, 26] - [35, 31]
name: (identifier [35, 28] - [35, 30])))
close_tag: (jsx_closing_element [36, 14] - [36, 19]
name: (identifier [36, 16] - [36, 18])))
close_tag: (jsx_closing_element [37, 12] - [37, 20]
name: (identifier [37, 14] - [37, 19])))
(jsx_element [38, 12] - [74, 20]
open_tag: (jsx_opening_element [38, 12] - [38, 19]
name: (identifier [38, 13] - [38, 18]))
(jsx_expression [39, 14] - [73, 18]
(ternary_expression [39, 15] - [73, 17]
condition: (binary_expression [39, 15] - [39, 36]
left: (member_expression [39, 15] - [39, 30]
object: (identifier [39, 15] - [39, 23])
property: (property_identifier [39, 24] - [39, 30]))
right: (number [39, 35] - [39, 36]))
consequence: (parenthesized_expression [40, 18] - [49, 17]
(jsx_element [41, 18] - [48, 23]
open_tag: (jsx_opening_element [41, 18] - [41, 22]
name: (identifier [41, 19] - [41, 21]))
(jsx_element [42, 20] - [47, 25]
open_tag: (jsx_opening_element [42, 20] - [45, 21]
name: (identifier [42, 21] - [42, 23])
attribute: (jsx_attribute [43, 22] - [43, 33]
(property_identifier [43, 22] - [43, 29])
(jsx_expression [43, 30] - [43, 33]
(number [43, 31] - [43, 32])))
attribute: (jsx_attribute [44, 22] - [44, 90]
(property_identifier [44, 22] - [44, 27])
(string [44, 28] - [44, 90]
(string_fragment [44, 29] - [44, 89]))))
(jsx_text [45, 21] - [47, 20])
close_tag: (jsx_closing_element [47, 20] - [47, 25]
name: (identifier [47, 22] - [47, 24])))
close_tag: (jsx_closing_element [48, 18] - [48, 23]
name: (identifier [48, 20] - [48, 22]))))
alternative: (parenthesized_expression [50, 18] - [73, 17]
(call_expression [51, 18] - [72, 20]
function: (member_expression [51, 18] - [51, 30]
object: (identifier [51, 18] - [51, 26])
property: (property_identifier [51, 27] - [51, 30]))
arguments: (arguments [51, 30] - [72, 20]
(arrow_function [51, 31] - [72, 19]
parameters: (formal_parameters [51, 31] - [51, 45]
(required_parameter [51, 32] - [51, 44]
pattern: (identifier [51, 32] - [51, 39])
type: (type_annotation [51, 39] - [51, 44]
(predefined_type [51, 41] - [51, 44]))))
body: (parenthesized_expression [51, 49] - [72, 19]
(jsx_element [52, 20] - [71, 25]
open_tag: (jsx_opening_element [52, 20] - [52, 41]
name: (identifier [52, 21] - [52, 23])
attribute: (jsx_attribute [52, 24] - [52, 40]
(property_identifier [52, 24] - [52, 27])
(jsx_expression [52, 28] - [52, 40]
(member_expression [52, 29] - [52, 39]
object: (identifier [52, 29] - [52, 36])
property: (property_identifier [52, 37] - [52, 39])))))
(jsx_element [53, 22] - [59, 27]
open_tag: (jsx_opening_element [53, 22] - [53, 26]
name: (identifier [53, 23] - [53, 25]))
(jsx_element [54, 24] - [58, 31]
open_tag: (jsx_opening_element [54, 24] - [54, 173]
name: (identifier [54, 25] - [54, 29])
attribute: (jsx_attribute [54, 30] - [54, 172]
(property_identifier [54, 30] - [54, 35])
(string [54, 36] - [54, 172]
(string_fragment [54, 37] - [54, 171]))))
(jsx_expression [55, 26] - [57, 41]
(ternary_expression [55, 27] - [57, 40]
condition: (member_expression [55, 27] - [55, 48]
object: (identifier [55, 27] - [55, 34])
property: (property_identifier [55, 35] - [55, 48]))
consequence: (template_string [56, 30] - [56, 76]
(template_substitution [56, 31] - [56, 72]
(call_expression [56, 33] - [56, 71]
function: (member_expression [56, 33] - [56, 64]
object: (member_expression [56, 33] - [56, 54]
object: (identifier [56, 33] - [56, 40])
property: (property_identifier [56, 41] - [56, 54]))
property: (property_identifier [56, 55] - [56, 64]))
arguments: (arguments [56, 64] - [56, 71]
(number [56, 65] - [56, 66])
(number [56, 68] - [56, 70]))))
(string_fragment [56, 72] - [56, 75]))
alternative: (member_expression [57, 30] - [57, 40]
object: (identifier [57, 30] - [57, 37])
property: (property_identifier [57, 38] - [57, 40]))))
close_tag: (jsx_closing_element [58, 24] - [58, 31]
name: (identifier [58, 26] - [58, 30])))
close_tag: (jsx_closing_element [59, 22] - [59, 27]
name: (identifier [59, 24] - [59, 26])))
(jsx_element [60, 22] - [62, 27]
open_tag: (jsx_opening_element [60, 22] - [60, 64]
name: (identifier [60, 23] - [60, 25])
attribute: (jsx_attribute [60, 26] - [60, 63]
(property_identifier [60, 26] - [60, 31])
(string [60, 32] - [60, 63]
(string_fragment [60, 33] - [60, 62]))))
(jsx_expression [61, 24] - [61, 41]
(member_expression [61, 25] - [61, 40]
object: (identifier [61, 25] - [61, 32])
property: (property_identifier [61, 33] - [61, 40])))
close_tag: (jsx_closing_element [62, 22] - [62, 27]
name: (identifier [62, 24] - [62, 26])))
(jsx_element [63, 22] - [67, 27]
open_tag: (jsx_opening_element [63, 22] - [63, 26]
name: (identifier [63, 23] - [63, 25]))
(jsx_element [64, 24] - [66, 31]
open_tag: (jsx_opening_element [64, 24] - [64, 55]
name: (identifier [64, 25] - [64, 29])
attribute: (jsx_attribute [64, 30] - [64, 54]
(property_identifier [64, 30] - [64, 35])
(string [64, 36] - [64, 54]
(string_fragment [64, 37] - [64, 53]))))
(jsx_expression [65, 26] - [65, 79]
(ternary_expression [65, 27] - [65, 78]
condition: (member_expression [65, 27] - [65, 46]
object: (identifier [65, 27] - [65, 34])
property: (property_identifier [65, 35] - [65, 46]))
consequence: (string [65, 49] - [65, 64]
(string_fragment [65, 50] - [65, 63]))
alternative: (string [65, 67] - [65, 78]
(string_fragment [65, 68] - [65, 77]))))
close_tag: (jsx_closing_element [66, 24] - [66, 31]
name: (identifier [66, 26] - [66, 30])))
close_tag: (jsx_closing_element [67, 22] - [67, 27]
name: (identifier [67, 24] - [67, 26])))
(jsx_element [68, 22] - [70, 27]
open_tag: (jsx_opening_element [68, 22] - [68, 26]
name: (identifier [68, 23] - [68, 25]))
(jsx_element [69, 24] - [69, 71]
open_tag: (jsx_opening_element [69, 24] - [69, 58]
name: (identifier [69, 25] - [69, 29])
attribute: (jsx_attribute [69, 30] - [69, 57]
(property_identifier [69, 30] - [69, 35])
(string [69, 36] - [69, 57]
(string_fragment [69, 37] - [69, 56]))))
(jsx_text [69, 58] - [69, 64])
close_tag: (jsx_closing_element [69, 64] - [69, 71]
name: (identifier [69, 66] - [69, 70])))
close_tag: (jsx_closing_element [70, 22] - [70, 27]
name: (identifier [70, 24] - [70, 26])))
close_tag: (jsx_closing_element [71, 20] - [71, 25]
name: (identifier [71, 22] - [71, 24]))))))))))
close_tag: (jsx_closing_element [74, 12] - [74, 20]
name: (identifier [74, 14] - [74, 19])))
close_tag: (jsx_closing_element [75, 10] - [75, 18]
name: (identifier [75, 12] - [75, 17])))
close_tag: (jsx_closing_element [76, 8] - [76, 14]
name: (identifier [76, 10] - [76, 13])))
close_tag: (jsx_closing_element [77, 6] - [77, 12]
name: (identifier [77, 8] - [77, 11])))
(jsx_expression [79, 6] - [79, 47]
(comment [79, 7] - [79, 46]))
(jsx_element [80, 6] - [123, 12]
open_tag: (jsx_opening_element [80, 6] - [80, 71]
name: (identifier [80, 7] - [80, 10])
attribute: (jsx_attribute [80, 11] - [80, 23]
(property_identifier [80, 11] - [80, 16])
(string [80, 17] - [80, 23]
(string_fragment [80, 18] - [80, 22])))
attribute: (jsx_attribute [80, 24] - [80, 70]
(property_identifier [80, 24] - [80, 29])
(string [80, 30] - [80, 70]
(string_fragment [80, 31] - [80, 69]))))
(jsx_element [81, 8] - [106, 14]
open_tag: (jsx_opening_element [81, 8] - [81, 145]
name: (identifier [81, 9] - [81, 12])
attribute: (jsx_attribute [81, 13] - [81, 144]
(property_identifier [81, 13] - [81, 18])
(string [81, 19] - [81, 144]
(string_fragment [81, 20] - [81, 143]))))
(jsx_element [82, 10] - [103, 16]
open_tag: (jsx_opening_element [82, 10] - [82, 73]
name: (identifier [82, 11] - [82, 14])
attribute: (jsx_attribute [82, 15] - [82, 72]
(property_identifier [82, 15] - [82, 20])
(string [82, 21] - [82, 72]
(string_fragment [82, 22] - [82, 71]))))
(jsx_element [83, 12] - [94, 18]
open_tag: (jsx_opening_element [83, 12] - [83, 205]
name: (identifier [83, 13] - [83, 16])
attribute: (jsx_attribute [83, 17] - [83, 204]
(property_identifier [83, 17] - [83, 22])
(string [83, 23] - [83, 204]
(string_fragment [83, 24] - [83, 203]))))
(jsx_element [84, 14] - [93, 20]
open_tag: (jsx_opening_element [84, 14] - [91, 15]
name: (identifier [84, 15] - [84, 18])
attribute: (jsx_attribute [85, 16] - [85, 26]
(property_identifier [85, 16] - [85, 21])
(string [85, 22] - [85, 26]
(string_fragment [85, 23] - [85, 25])))
attribute: (jsx_attribute [86, 16] - [86, 27]
(property_identifier [86, 16] - [86, 22])
(string [86, 23] - [86, 27]
(string_fragment [86, 24] - [86, 26])))
attribute: (jsx_attribute [87, 16] - [87, 35]
(property_identifier [87, 16] - [87, 23])
(string [87, 24] - [87, 35]
(string_fragment [87, 25] - [87, 34])))
attribute: (jsx_attribute [88, 16] - [88, 27]
(property_identifier [88, 16] - [88, 20])
(string [88, 21] - [88, 27]
(string_fragment [88, 22] - [88, 26])))
attribute: (jsx_attribute [89, 16] - [89, 37]
(property_identifier [89, 16] - [89, 22])
(string [89, 23] - [89, 37]
(string_fragment [89, 24] - [89, 36])))
attribute: (jsx_attribute [90, 16] - [90, 32]
(property_identifier [90, 16] - [90, 28])
(string [90, 29] - [90, 32]
(string_fragment [90, 30] - [90, 31]))))
(jsx_element [92, 16] - [92, 77]
open_tag: (jsx_opening_element [92, 16] - [92, 70]
name: (identifier [92, 17] - [92, 21])
attribute: (jsx_attribute [92, 22] - [92, 69]
(property_identifier [92, 22] - [92, 23])
(string [92, 24] - [92, 69]
(string_fragment [92, 25] - [92, 68]))))
close_tag: (jsx_closing_element [92, 70] - [92, 77]
name: (identifier [92, 72] - [92, 76])))
close_tag: (jsx_closing_element [93, 14] - [93, 20]
name: (identifier [93, 16] - [93, 19])))
close_tag: (jsx_closing_element [94, 12] - [94, 18]
name: (identifier [94, 14] - [94, 17])))
(jsx_element [95, 12] - [102, 18]
open_tag: (jsx_opening_element [95, 12] - [95, 17]
name: (identifier [95, 13] - [95, 16]))
(jsx_element [96, 14] - [98, 19]
open_tag: (jsx_opening_element [96, 14] - [96, 84]
name: (identifier [96, 15] - [96, 17])
attribute: (jsx_attribute [96, 18] - [96, 83]
(property_identifier [96, 18] - [96, 23])
(string [96, 24] - [96, 83]
(string_fragment [96, 25] - [96, 82]))))
(jsx_text [96, 84] - [98, 14])
close_tag: (jsx_closing_element [98, 14] - [98, 19]
name: (identifier [98, 16] - [98, 18])))
(jsx_element [99, 14] - [101, 18]
open_tag: (jsx_opening_element [99, 14] - [99, 86]
name: (identifier [99, 15] - [99, 16])
attribute: (jsx_attribute [99, 17] - [99, 85]
(property_identifier [99, 17] - [99, 22])
(string [99, 23] - [99, 85]
(string_fragment [99, 24] - [99, 84]))))
(jsx_text [99, 86] - [100, 54])
(ERROR [100, 54] - [100, 76]
(identifier [100, 56] - [100, 60])
(number [100, 61] - [100, 63])
(identifier [100, 64] - [100, 68])
(identifier [100, 69] - [100, 76]))
close_tag: (jsx_closing_element [101, 14] - [101, 18]
name: (identifier [101, 16] - [101, 17])))
close_tag: (jsx_closing_element [102, 12] - [102, 18]
name: (identifier [102, 14] - [102, 17])))
close_tag: (jsx_closing_element [103, 10] - [103, 16]
name: (identifier [103, 12] - [103, 15])))
(jsx_element [105, 10] - [105, 68]
open_tag: (jsx_opening_element [105, 10] - [105, 44]
name: (identifier [105, 11] - [105, 15])
attribute: (jsx_attribute [105, 16] - [105, 43]
(property_identifier [105, 16] - [105, 21])
(string [105, 22] - [105, 43]
(string_fragment [105, 23] - [105, 42]))))
(jsx_text [105, 44] - [105, 61])
close_tag: (jsx_closing_element [105, 61] - [105, 68]
name: (identifier [105, 63] - [105, 67])))
close_tag: (jsx_closing_element [106, 8] - [106, 14]
name: (identifier [106, 10] - [106, 13])))
(jsx_element [108, 8] - [112, 12]
open_tag: (jsx_opening_element [108, 8] - [108, 111]
name: (identifier [108, 9] - [108, 10])
attribute: (jsx_attribute [108, 11] - [108, 110]
(property_identifier [108, 11] - [108, 16])
(string [108, 17] - [108, 110]
(string_fragment [108, 18] - [108, 109]))))
(jsx_text [108, 111] - [112, 8])
close_tag: (jsx_closing_element [112, 8] - [112, 12]
name: (identifier [112, 10] - [112, 11])))
(jsx_element [114, 8] - [122, 14]
open_tag: (jsx_opening_element [114, 8] - [114, 67]
name: (identifier [114, 9] - [114, 12])
attribute: (jsx_attribute [114, 13] - [114, 66]
(property_identifier [114, 13] - [114, 18])
(string [114, 19] - [114, 66]
(string_fragment [114, 20] - [114, 65]))))
(jsx_element [115, 10] - [121, 14]
open_tag: (jsx_opening_element [115, 10] - [119, 11]
name: (identifier [115, 11] - [115, 12])
attribute: (jsx_attribute [116, 12] - [116, 28]
(property_identifier [116, 12] - [116, 16])
(string [116, 17] - [116, 28]
(string_fragment [116, 18] - [116, 27])))
attribute: (jsx_attribute [117, 12] - [117, 31]
(property_identifier [117, 12] - [117, 17])
(string [117, 18] - [117, 31]
(string_fragment [117, 19] - [117, 30])))
attribute: (jsx_attribute [118, 12] - [118, 62]
(property_identifier [118, 12] - [118, 17])
(string [118, 18] - [118, 62]
(string_fragment [118, 19] - [118, 61]))))
(jsx_text [119, 11] - [121, 10])
close_tag: (jsx_closing_element [121, 10] - [121, 14]
name: (identifier [121, 12] - [121, 13])))
close_tag: (jsx_closing_element [122, 8] - [122, 14]
name: (identifier [122, 10] - [122, 13])))
close_tag: (jsx_closing_element [123, 6] - [123, 12]
name: (identifier [123, 8] - [123, 11])))
close_tag: (jsx_closing_element [124, 4] - [124, 34]
name: (identifier [124, 6] - [124, 33])))))))))))
/home/tylerg/p/data/auth-yes/src/features/sessions/passkeys_fragments.tsx Parse: 0.49 ms 9764 bytes/ms (ERROR [100, 54] - [100, 76])

View File

@ -1,158 +0,0 @@
(program [0, 0] - [29, 0]
(import_statement [0, 0] - [0, 49]
(import_clause [0, 7] - [0, 23]
(named_imports [0, 7] - [0, 23]
(import_specifier [0, 9] - [0, 21]
name: (identifier [0, 9] - [0, 21]))))
source: (string [0, 29] - [0, 48]
(string_fragment [0, 30] - [0, 47])))
(import_statement [1, 0] - [1, 40]
(import_clause [1, 7] - [1, 15]
(named_imports [1, 7] - [1, 15]
(import_specifier [1, 9] - [1, 13]
name: (identifier [1, 9] - [1, 13]))))
source: (string [1, 21] - [1, 39]
(string_fragment [1, 22] - [1, 38])))
(import_statement [2, 0] - [2, 59]
(import_clause [2, 7] - [2, 25]
(named_imports [2, 7] - [2, 25]
(import_specifier [2, 9] - [2, 23]
name: (identifier [2, 9] - [2, 23]))))
source: (string [2, 31] - [2, 58]
(string_fragment [2, 32] - [2, 57])))
(expression_statement [4, 0] - [28, 3]
(call_expression [4, 0] - [28, 2]
function: (member_expression [4, 0] - [4, 9]
object: (identifier [4, 0] - [4, 4])
property: (property_identifier [4, 5] - [4, 9]))
arguments: (arguments [4, 9] - [28, 2]
(string [4, 10] - [4, 79]
(string_fragment [4, 11] - [4, 78]))
(arrow_function [4, 81] - [28, 1]
parameters: (formal_parameters [4, 87] - [4, 89])
body: (statement_block [4, 93] - [28, 1]
(lexical_declaration [5, 2] - [5, 29]
(variable_declarator [5, 8] - [5, 28]
name: (identifier [5, 8] - [5, 15])
value: (new_expression [5, 18] - [5, 28]
constructor: (identifier [5, 22] - [5, 26])
arguments: (arguments [5, 26] - [5, 28]))))
(expression_statement [6, 2] - [13, 5]
(call_expression [6, 2] - [13, 4]
function: (member_expression [6, 2] - [6, 13]
object: (identifier [6, 2] - [6, 9])
property: (property_identifier [6, 10] - [6, 13]))
arguments: (arguments [6, 13] - [13, 4]
(string [6, 14] - [6, 29]
(string_fragment [6, 15] - [6, 28]))
(arrow_function [6, 31] - [13, 3]
parameters: (formal_parameters [6, 31] - [6, 34]
(required_parameter [6, 32] - [6, 33]
pattern: (identifier [6, 32] - [6, 33])))
body: (statement_block [6, 38] - [13, 3]
(return_statement [7, 4] - [12, 7]
(call_expression [7, 11] - [12, 6]
function: (identifier [7, 11] - [7, 25])
arguments: (arguments [7, 25] - [12, 6]
(identifier [7, 26] - [7, 27])
(arrow_function [7, 29] - [12, 5]
parameters: (formal_parameters [7, 35] - [7, 43]
(required_parameter [7, 36] - [7, 42]
pattern: (identifier [7, 36] - [7, 42])))
body: (statement_block [7, 47] - [12, 5]
(expression_statement [8, 6] - [11, 9]
(await_expression [8, 6] - [11, 8]
(call_expression [8, 12] - [11, 8]
function: (member_expression [8, 12] - [8, 24]
object: (identifier [8, 12] - [8, 18])
property: (property_identifier [8, 19] - [8, 24]))
arguments: (arguments [8, 24] - [11, 8]
(object [8, 25] - [11, 7]
(pair [9, 8] - [9, 34]
key: (property_identifier [9, 8] - [9, 13])
value: (string [9, 15] - [9, 34]
(string_fragment [9, 16] - [9, 33])))
(pair [10, 8] - [10, 47]
key: (property_identifier [10, 8] - [10, 12])
value: (string [10, 14] - [10, 47]
(string_fragment [10, 15] - [10, 46]))))))))))))))))))
(lexical_declaration [15, 2] - [15, 80]
(variable_declarator [15, 8] - [15, 79]
name: (identifier [15, 8] - [15, 11])
value: (await_expression [15, 14] - [15, 79]
(call_expression [15, 20] - [15, 79]
function: (member_expression [15, 20] - [15, 33]
object: (identifier [15, 20] - [15, 27])
property: (property_identifier [15, 28] - [15, 33]))
arguments: (arguments [15, 33] - [15, 79]
(new_expression [15, 34] - [15, 78]
constructor: (identifier [15, 38] - [15, 45])
arguments: (arguments [15, 45] - [15, 78]
(string [15, 46] - [15, 77]
(string_fragment [15, 47] - [15, 76])))))))))
(expression_statement [16, 2] - [16, 32]
(call_expression [16, 2] - [16, 31]
function: (identifier [16, 2] - [16, 14])
arguments: (arguments [16, 14] - [16, 31]
(member_expression [16, 15] - [16, 25]
object: (identifier [16, 15] - [16, 18])
property: (property_identifier [16, 19] - [16, 25]))
(number [16, 27] - [16, 30]))))
(comment [18, 2] - [18, 80])
(expression_statement [19, 2] - [19, 59]
(call_expression [19, 2] - [19, 58]
function: (identifier [19, 2] - [19, 14])
arguments: (arguments [19, 14] - [19, 58]
(call_expression [19, 15] - [19, 51]
function: (member_expression [19, 15] - [19, 30]
object: (member_expression [19, 15] - [19, 26]
object: (identifier [19, 15] - [19, 18])
property: (property_identifier [19, 19] - [19, 26]))
property: (property_identifier [19, 27] - [19, 30]))
arguments: (arguments [19, 30] - [19, 51]
(string [19, 31] - [19, 50]
(string_fragment [19, 32] - [19, 49]))))
(string [19, 53] - [19, 57]
(string_fragment [19, 54] - [19, 56])))))
(expression_statement [20, 2] - [23, 4]
(call_expression [20, 2] - [23, 3]
function: (identifier [20, 2] - [20, 14])
arguments: (arguments [20, 14] - [23, 3]
(call_expression [21, 4] - [21, 66]
function: (member_expression [21, 4] - [21, 45]
object: (call_expression [21, 4] - [21, 35]
function: (member_expression [21, 4] - [21, 19]
object: (member_expression [21, 4] - [21, 15]
object: (identifier [21, 4] - [21, 7])
property: (property_identifier [21, 8] - [21, 15]))
property: (property_identifier [21, 16] - [21, 19]))
arguments: (arguments [21, 19] - [21, 35]
(string [21, 20] - [21, 34]
(string_fragment [21, 21] - [21, 33]))))
optional_chain: (optional_chain [21, 35] - [21, 37])
property: (property_identifier [21, 37] - [21, 45]))
arguments: (arguments [21, 45] - [21, 66]
(string [21, 46] - [21, 65]
(string_fragment [21, 47] - [21, 64]))))
(true [22, 4] - [22, 8]))))
(expression_statement [24, 2] - [27, 4]
(call_expression [24, 2] - [27, 3]
function: (identifier [24, 2] - [24, 14])
arguments: (arguments [24, 14] - [27, 3]
(call_expression [25, 4] - [25, 58]
function: (member_expression [25, 4] - [25, 46]
object: (call_expression [25, 4] - [25, 36]
function: (member_expression [25, 4] - [25, 19]
object: (member_expression [25, 4] - [25, 15]
object: (identifier [25, 4] - [25, 7])
property: (property_identifier [25, 8] - [25, 15]))
property: (property_identifier [25, 16] - [25, 19]))
arguments: (arguments [25, 19] - [25, 36]
(string [25, 20] - [25, 35]
(string_fragment [25, 21] - [25, 34]))))
optional_chain: (optional_chain [25, 36] - [25, 38])
property: (property_identifier [25, 38] - [25, 46]))
arguments: (arguments [25, 46] - [25, 58]
(string [25, 47] - [25, 57]
(string_fragment [25, 48] - [25, 56]))))
(true [26, 4] - [26, 8]))))))))))

View File

@ -1,328 +0,0 @@
(program [0, 0] - [92, 0]
(import_statement [0, 0] - [0, 46]
(import_clause [0, 7] - [0, 21]
(named_imports [0, 7] - [0, 21]
(import_specifier [0, 9] - [0, 19]
name: (identifier [0, 9] - [0, 19]))))
source: (string [0, 27] - [0, 45]
(string_fragment [0, 28] - [0, 44])))
(export_statement [2, 0] - [10, 1]
declaration: (function_declaration [2, 7] - [10, 1]
name: (identifier [2, 22] - [2, 39])
parameters: (formal_parameters [2, 39] - [2, 55]
(required_parameter [2, 40] - [2, 54]
pattern: (identifier [2, 40] - [2, 46])
type: (type_annotation [2, 46] - [2, 54]
(predefined_type [2, 48] - [2, 54]))))
body: (statement_block [2, 56] - [10, 1]
(lexical_declaration [3, 2] - [8, 6]
(variable_declarator [3, 8] - [8, 5]
name: (identifier [3, 8] - [3, 16])
value: (await_expression [3, 19] - [8, 5]
(call_expression [3, 25] - [8, 5]
function: (member_expression [3, 25] - [3, 39]
object: (identifier [3, 25] - [3, 35])
property: (property_identifier [3, 36] - [3, 39]))
arguments: (template_string [3, 39] - [8, 5]
(string_fragment [3, 40] - [6, 24])
(template_substitution [6, 24] - [6, 33]
(identifier [6, 26] - [6, 32]))
(string_fragment [6, 33] - [8, 4]))))))
(return_statement [9, 2] - [9, 18]
(identifier [9, 9] - [9, 17])))))
(export_statement [12, 0] - [23, 1]
declaration: (function_declaration [12, 7] - [23, 1]
name: (identifier [12, 22] - [12, 37])
parameters: (formal_parameters [12, 37] - [18, 1]
(required_parameter [13, 2] - [13, 19]
pattern: (identifier [13, 2] - [13, 11])
type: (type_annotation [13, 11] - [13, 19]
(predefined_type [13, 13] - [13, 19])))
(required_parameter [14, 2] - [14, 16]
pattern: (identifier [14, 2] - [14, 8])
type: (type_annotation [14, 8] - [14, 16]
(predefined_type [14, 10] - [14, 16])))
(required_parameter [15, 2] - [15, 15]
pattern: (identifier [15, 2] - [15, 7])
type: (type_annotation [15, 7] - [15, 15]
(predefined_type [15, 9] - [15, 15])))
(required_parameter [16, 2] - [16, 24]
pattern: (identifier [16, 2] - [16, 14])
type: (type_annotation [16, 14] - [16, 24]
(array_type [16, 16] - [16, 24]
(predefined_type [16, 16] - [16, 22]))))
(required_parameter [17, 2] - [17, 17]
pattern: (identifier [17, 2] - [17, 11])
type: (type_annotation [17, 11] - [17, 17]
(type_identifier [17, 13] - [17, 17]))))
body: (statement_block [18, 2] - [23, 1]
(expression_statement [19, 2] - [22, 6]
(await_expression [19, 2] - [22, 5]
(call_expression [19, 8] - [22, 5]
function: (member_expression [19, 8] - [19, 22]
object: (identifier [19, 8] - [19, 18])
property: (property_identifier [19, 19] - [19, 22]))
arguments: (template_string [19, 22] - [22, 5]
(string_fragment [19, 23] - [21, 16])
(template_substitution [21, 16] - [21, 28]
(identifier [21, 18] - [21, 27]))
(string_fragment [21, 28] - [21, 30])
(template_substitution [21, 30] - [21, 39]
(identifier [21, 32] - [21, 38]))
(string_fragment [21, 39] - [21, 41])
(template_substitution [21, 41] - [21, 49]
(identifier [21, 43] - [21, 48]))
(string_fragment [21, 49] - [21, 57])
(template_substitution [21, 57] - [21, 72]
(identifier [21, 59] - [21, 71]))
(string_fragment [21, 72] - [21, 74])
(template_substitution [21, 74] - [21, 100]
(call_expression [21, 76] - [21, 99]
function: (member_expression [21, 76] - [21, 97]
object: (identifier [21, 76] - [21, 85])
property: (property_identifier [21, 86] - [21, 97]))
arguments: (arguments [21, 97] - [21, 99])))
(string_fragment [21, 100] - [22, 4]))))))))
(export_statement [25, 0] - [34, 1]
declaration: (function_declaration [25, 7] - [34, 1]
name: (identifier [25, 22] - [25, 45])
parameters: (formal_parameters [25, 45] - [28, 1]
(required_parameter [26, 2] - [26, 19]
pattern: (identifier [26, 2] - [26, 11])
type: (type_annotation [26, 11] - [26, 19]
(predefined_type [26, 13] - [26, 19])))
(required_parameter [27, 2] - [27, 16]
pattern: (identifier [27, 2] - [27, 8])
type: (type_annotation [27, 8] - [27, 16]
(predefined_type [27, 10] - [27, 16]))))
body: (statement_block [28, 2] - [34, 1]
(lexical_declaration [29, 2] - [31, 6]
(variable_declarator [29, 8] - [31, 5]
name: (identifier [29, 8] - [29, 15])
value: (await_expression [29, 18] - [31, 5]
(call_expression [29, 24] - [31, 5]
function: (member_expression [29, 24] - [29, 38]
object: (identifier [29, 24] - [29, 34])
property: (property_identifier [29, 35] - [29, 38]))
arguments: (template_string [29, 38] - [31, 5]
(string_fragment [29, 39] - [30, 65])
(template_substitution [30, 65] - [30, 77]
(identifier [30, 67] - [30, 76]))
(string_fragment [30, 77] - [30, 92])
(template_substitution [30, 92] - [30, 101]
(identifier [30, 94] - [30, 100]))
(string_fragment [30, 101] - [31, 4]))))))
(if_statement [32, 2] - [32, 52]
condition: (parenthesized_expression [32, 5] - [32, 39]
(binary_expression [32, 6] - [32, 38]
left: (unary_expression [32, 6] - [32, 14]
argument: (identifier [32, 7] - [32, 14]))
right: (binary_expression [32, 18] - [32, 38]
left: (member_expression [32, 18] - [32, 32]
object: (identifier [32, 18] - [32, 25])
property: (property_identifier [32, 26] - [32, 32]))
right: (number [32, 37] - [32, 38]))))
consequence: (return_statement [32, 40] - [32, 52]
(null [32, 47] - [32, 51])))
(return_statement [33, 2] - [33, 20]
(subscript_expression [33, 9] - [33, 19]
object: (identifier [33, 9] - [33, 16])
index: (number [33, 17] - [33, 18]))))))
(export_statement [36, 0] - [43, 1]
declaration: (function_declaration [36, 7] - [43, 1]
name: (identifier [36, 22] - [36, 41])
parameters: (formal_parameters [36, 41] - [39, 1]
(required_parameter [37, 2] - [37, 19]
pattern: (identifier [37, 2] - [37, 11])
type: (type_annotation [37, 11] - [37, 19]
(predefined_type [37, 13] - [37, 19])))
(required_parameter [38, 2] - [38, 24]
pattern: (identifier [38, 2] - [38, 14])
type: (type_annotation [38, 14] - [38, 24]
(array_type [38, 16] - [38, 24]
(predefined_type [38, 16] - [38, 22])))))
body: (statement_block [39, 2] - [43, 1]
(expression_statement [40, 2] - [42, 6]
(await_expression [40, 2] - [42, 5]
(call_expression [40, 8] - [42, 5]
function: (member_expression [40, 8] - [40, 22]
object: (identifier [40, 8] - [40, 18])
property: (property_identifier [40, 19] - [40, 22]))
arguments: (template_string [40, 22] - [42, 5]
(string_fragment [40, 23] - [41, 44])
(template_substitution [41, 44] - [41, 59]
(identifier [41, 46] - [41, 58]))
(string_fragment [41, 59] - [41, 71])
(template_substitution [41, 71] - [41, 83]
(identifier [41, 73] - [41, 82]))
(string_fragment [41, 83] - [42, 4]))))))))
(export_statement [45, 0] - [51, 1]
declaration: (function_declaration [45, 7] - [51, 1]
name: (identifier [45, 22] - [45, 36])
parameters: (formal_parameters [45, 36] - [45, 55]
(required_parameter [45, 37] - [45, 54]
pattern: (identifier [45, 37] - [45, 46])
type: (type_annotation [45, 46] - [45, 54]
(predefined_type [45, 48] - [45, 54]))))
body: (statement_block [45, 56] - [51, 1]
(lexical_declaration [46, 2] - [48, 6]
(variable_declarator [46, 8] - [48, 5]
name: (identifier [46, 8] - [46, 15])
value: (await_expression [46, 18] - [48, 5]
(call_expression [46, 24] - [48, 5]
function: (member_expression [46, 24] - [46, 38]
object: (identifier [46, 24] - [46, 34])
property: (property_identifier [46, 35] - [46, 38]))
arguments: (template_string [46, 38] - [48, 5]
(string_fragment [46, 39] - [47, 43])
(template_substitution [47, 43] - [47, 55]
(identifier [47, 45] - [47, 54]))
(string_fragment [47, 55] - [48, 4]))))))
(if_statement [49, 2] - [49, 52]
condition: (parenthesized_expression [49, 5] - [49, 39]
(binary_expression [49, 6] - [49, 38]
left: (unary_expression [49, 6] - [49, 14]
argument: (identifier [49, 7] - [49, 14]))
right: (binary_expression [49, 18] - [49, 38]
left: (member_expression [49, 18] - [49, 32]
object: (identifier [49, 18] - [49, 25])
property: (property_identifier [49, 26] - [49, 32]))
right: (number [49, 37] - [49, 38]))))
consequence: (return_statement [49, 40] - [49, 52]
(null [49, 47] - [49, 51])))
(return_statement [50, 2] - [50, 20]
(subscript_expression [50, 9] - [50, 19]
object: (identifier [50, 9] - [50, 16])
index: (number [50, 17] - [50, 18]))))))
(export_statement [53, 0] - [57, 1]
declaration: (function_declaration [53, 7] - [57, 1]
name: (identifier [53, 22] - [53, 38])
parameters: (formal_parameters [53, 38] - [53, 76]
(required_parameter [53, 39] - [53, 56]
pattern: (identifier [53, 39] - [53, 48])
type: (type_annotation [53, 48] - [53, 56]
(predefined_type [53, 50] - [53, 56])))
(required_parameter [53, 58] - [53, 75]
pattern: (identifier [53, 58] - [53, 66])
type: (type_annotation [53, 66] - [53, 75]
(predefined_type [53, 68] - [53, 75]))))
body: (statement_block [53, 77] - [57, 1]
(expression_statement [54, 2] - [56, 6]
(await_expression [54, 2] - [56, 5]
(call_expression [54, 8] - [56, 5]
function: (member_expression [54, 8] - [54, 22]
object: (identifier [54, 8] - [54, 18])
property: (property_identifier [54, 19] - [54, 22]))
arguments: (template_string [54, 22] - [56, 5]
(string_fragment [54, 23] - [55, 40])
(template_substitution [55, 40] - [55, 51]
(identifier [55, 42] - [55, 50]))
(string_fragment [55, 51] - [55, 63])
(template_substitution [55, 63] - [55, 75]
(identifier [55, 65] - [55, 74]))
(string_fragment [55, 75] - [56, 4]))))))))
(export_statement [59, 0] - [63, 1]
declaration: (function_declaration [59, 7] - [63, 1]
name: (identifier [59, 22] - [59, 41])
parameters: (formal_parameters [59, 41] - [59, 77]
(required_parameter [59, 42] - [59, 59]
pattern: (identifier [59, 42] - [59, 51])
type: (type_annotation [59, 51] - [59, 59]
(predefined_type [59, 53] - [59, 59])))
(required_parameter [59, 61] - [59, 76]
pattern: (identifier [59, 61] - [59, 70])
type: (type_annotation [59, 70] - [59, 76]
(type_identifier [59, 72] - [59, 76]))))
body: (statement_block [59, 78] - [63, 1]
(expression_statement [60, 2] - [62, 6]
(await_expression [60, 2] - [62, 5]
(call_expression [60, 8] - [62, 5]
function: (member_expression [60, 8] - [60, 22]
object: (identifier [60, 8] - [60, 18])
property: (property_identifier [60, 19] - [60, 22]))
arguments: (template_string [60, 22] - [62, 5]
(string_fragment [60, 23] - [61, 41])
(template_substitution [61, 41] - [61, 67]
(call_expression [61, 43] - [61, 66]
function: (member_expression [61, 43] - [61, 64]
object: (identifier [61, 43] - [61, 52])
property: (property_identifier [61, 53] - [61, 64]))
arguments: (arguments [61, 64] - [61, 66])))
(string_fragment [61, 67] - [61, 79])
(template_substitution [61, 79] - [61, 91]
(identifier [61, 81] - [61, 90]))
(string_fragment [61, 91] - [62, 4]))))))))
(export_statement [65, 0] - [67, 1]
declaration: (function_declaration [65, 7] - [67, 1]
name: (identifier [65, 22] - [65, 35])
parameters: (formal_parameters [65, 35] - [65, 54]
(required_parameter [65, 36] - [65, 53]
pattern: (identifier [65, 36] - [65, 45])
type: (type_annotation [65, 45] - [65, 53]
(predefined_type [65, 47] - [65, 53]))))
body: (statement_block [65, 55] - [67, 1]
(expression_statement [66, 2] - [66, 69]
(await_expression [66, 2] - [66, 68]
(call_expression [66, 8] - [66, 68]
function: (member_expression [66, 8] - [66, 22]
object: (identifier [66, 8] - [66, 18])
property: (property_identifier [66, 19] - [66, 22]))
arguments: (template_string [66, 22] - [66, 68]
(string_fragment [66, 23] - [66, 55])
(template_substitution [66, 55] - [66, 67]
(identifier [66, 57] - [66, 66])))))))))
(export_statement [69, 0] - [91, 1]
declaration: (function_declaration [69, 7] - [91, 1]
name: (identifier [69, 22] - [69, 50])
parameters: (formal_parameters [69, 50] - [73, 1]
(required_parameter [70, 2] - [70, 19]
pattern: (identifier [70, 2] - [70, 11])
type: (type_annotation [70, 11] - [70, 19]
(predefined_type [70, 13] - [70, 19])))
(required_parameter [71, 2] - [71, 16]
pattern: (identifier [71, 2] - [71, 8])
type: (type_annotation [71, 8] - [71, 16]
(predefined_type [71, 10] - [71, 16])))
(required_parameter [72, 2] - [72, 18]
pattern: (identifier [72, 2] - [72, 9])
type: (type_annotation [72, 9] - [72, 18]
(predefined_type [72, 11] - [72, 18]))))
body: (statement_block [73, 2] - [91, 1]
(lexical_declaration [74, 2] - [88, 6]
(variable_declarator [74, 8] - [88, 5]
name: (identifier [74, 8] - [74, 15])
value: (await_expression [74, 18] - [88, 5]
(call_expression [74, 24] - [88, 5]
function: (member_expression [74, 24] - [74, 38]
object: (identifier [74, 24] - [74, 34])
property: (property_identifier [74, 35] - [74, 38]))
arguments: (template_string [74, 38] - [88, 5]
(string_fragment [74, 39] - [78, 21])
(template_substitution [78, 21] - [78, 33]
(identifier [78, 23] - [78, 32]))
(string_fragment [78, 33] - [80, 24])
(template_substitution [80, 24] - [80, 33]
(identifier [80, 26] - [80, 32]))
(string_fragment [80, 33] - [81, 15])
(template_substitution [81, 15] - [81, 25]
(identifier [81, 17] - [81, 24]))
(string_fragment [81, 25] - [84, 36])
(template_substitution [84, 36] - [84, 45]
(identifier [84, 38] - [84, 44]))
(string_fragment [84, 45] - [88, 4]))))))
(if_statement [89, 2] - [89, 52]
condition: (parenthesized_expression [89, 5] - [89, 39]
(binary_expression [89, 6] - [89, 38]
left: (unary_expression [89, 6] - [89, 14]
argument: (identifier [89, 7] - [89, 14]))
right: (binary_expression [89, 18] - [89, 38]
left: (member_expression [89, 18] - [89, 32]
object: (identifier [89, 18] - [89, 25])
property: (property_identifier [89, 26] - [89, 32]))
right: (number [89, 37] - [89, 38]))))
consequence: (return_statement [89, 40] - [89, 52]
(null [89, 47] - [89, 51])))
(return_statement [90, 2] - [90, 20]
(subscript_expression [90, 9] - [90, 19]
object: (identifier [90, 9] - [90, 16])
index: (number [90, 17] - [90, 18])))))))

View File

@ -1,395 +0,0 @@
(program [0, 0] - [93, 0]
(import_statement [0, 0] - [0, 67]
(import_clause [0, 7] - [0, 29]
(named_imports [0, 7] - [0, 29]
(import_specifier [0, 9] - [0, 27]
name: (identifier [0, 9] - [0, 27]))))
source: (string [0, 35] - [0, 66]
(string_fragment [0, 36] - [0, 65])))
(export_statement [2, 0] - [92, 2]
declaration: (lexical_declaration [2, 7] - [92, 2]
(variable_declarator [2, 13] - [92, 1]
name: (identifier [2, 13] - [2, 33])
value: (arrow_function [2, 36] - [92, 1]
parameters: (formal_parameters [2, 36] - [2, 38])
body: (statement_block [2, 42] - [92, 1]
(return_statement [3, 2] - [91, 4]
(parenthesized_expression [3, 9] - [91, 3]
(jsx_element [4, 4] - [90, 25]
open_tag: (jsx_opening_element [4, 4] - [4, 49]
name: (identifier [4, 5] - [4, 23])
attribute: (jsx_attribute [4, 24] - [4, 48]
(property_identifier [4, 24] - [4, 29])
(string [4, 30] - [4, 48]
(string_fragment [4, 31] - [4, 47]))))
(jsx_element [5, 6] - [89, 12]
open_tag: (jsx_opening_element [5, 6] - [5, 11]
name: (identifier [5, 7] - [5, 10]))
(jsx_element [6, 8] - [27, 14]
open_tag: (jsx_opening_element [6, 8] - [6, 34]
name: (identifier [6, 9] - [6, 12])
attribute: (jsx_attribute [6, 13] - [6, 33]
(property_identifier [6, 13] - [6, 18])
(string [6, 19] - [6, 33]
(string_fragment [6, 20] - [6, 32]))))
(jsx_element [7, 10] - [22, 16]
open_tag: (jsx_opening_element [7, 10] - [7, 34]
name: (identifier [7, 11] - [7, 14])
attribute: (jsx_attribute [7, 15] - [7, 33]
(property_identifier [7, 15] - [7, 20])
(string [7, 21] - [7, 33]
(string_fragment [7, 22] - [7, 32]))))
(jsx_element [8, 12] - [21, 18]
open_tag: (jsx_opening_element [8, 12] - [17, 13]
name: (identifier [8, 13] - [8, 16])
attribute: (jsx_attribute [9, 14] - [9, 24]
(property_identifier [9, 14] - [9, 19])
(string [9, 20] - [9, 24]
(string_fragment [9, 21] - [9, 23])))
attribute: (jsx_attribute [10, 14] - [10, 25]
(property_identifier [10, 14] - [10, 20])
(string [10, 21] - [10, 25]
(string_fragment [10, 22] - [10, 24])))
attribute: (jsx_attribute [11, 14] - [11, 33]
(property_identifier [11, 14] - [11, 21])
(string [11, 22] - [11, 33]
(string_fragment [11, 23] - [11, 32])))
attribute: (jsx_attribute [12, 14] - [12, 25]
(property_identifier [12, 14] - [12, 18])
(string [12, 19] - [12, 25]
(string_fragment [12, 20] - [12, 24])))
attribute: (jsx_attribute [13, 14] - [13, 35]
(property_identifier [13, 14] - [13, 20])
(string [13, 21] - [13, 35]
(string_fragment [13, 22] - [13, 34])))
attribute: (jsx_attribute [14, 14] - [14, 32]
(property_identifier [14, 14] - [14, 26])
(string [14, 27] - [14, 32]
(string_fragment [14, 28] - [14, 31])))
attribute: (jsx_attribute [15, 14] - [15, 36]
(property_identifier [15, 14] - [15, 28])
(string [15, 29] - [15, 36]
(string_fragment [15, 30] - [15, 35])))
attribute: (jsx_attribute [16, 14] - [16, 37]
(property_identifier [16, 14] - [16, 29])
(string [16, 30] - [16, 37]
(string_fragment [16, 31] - [16, 36]))))
(jsx_element [18, 14] - [18, 58]
open_tag: (jsx_opening_element [18, 14] - [18, 49]
name: (identifier [18, 15] - [18, 21])
attribute: (jsx_attribute [18, 22] - [18, 30]
(property_identifier [18, 22] - [18, 24])
(string [18, 25] - [18, 30]
(string_fragment [18, 26] - [18, 29])))
attribute: (jsx_attribute [18, 31] - [18, 40]
(property_identifier [18, 31] - [18, 33])
(string [18, 34] - [18, 40]
(string_fragment [18, 35] - [18, 39])))
attribute: (jsx_attribute [18, 41] - [18, 48]
(property_identifier [18, 41] - [18, 42])
(string [18, 43] - [18, 48]
(string_fragment [18, 44] - [18, 47]))))
close_tag: (jsx_closing_element [18, 49] - [18, 58]
name: (identifier [18, 51] - [18, 57])))
(jsx_element [19, 14] - [19, 45]
open_tag: (jsx_opening_element [19, 14] - [19, 38]
name: (identifier [19, 15] - [19, 19])
attribute: (jsx_attribute [19, 20] - [19, 37]
(property_identifier [19, 20] - [19, 21])
(string [19, 22] - [19, 37]
(string_fragment [19, 23] - [19, 36]))))
close_tag: (jsx_closing_element [19, 38] - [19, 45]
name: (identifier [19, 40] - [19, 44])))
(jsx_element [20, 14] - [20, 55]
open_tag: (jsx_opening_element [20, 14] - [20, 48]
name: (identifier [20, 15] - [20, 19])
attribute: (jsx_attribute [20, 20] - [20, 47]
(property_identifier [20, 20] - [20, 21])
(string [20, 22] - [20, 47]
(string_fragment [20, 23] - [20, 46]))))
close_tag: (jsx_closing_element [20, 48] - [20, 55]
name: (identifier [20, 50] - [20, 54])))
close_tag: (jsx_closing_element [21, 12] - [21, 18]
name: (identifier [21, 14] - [21, 17])))
close_tag: (jsx_closing_element [22, 10] - [22, 16]
name: (identifier [22, 12] - [22, 15])))
(jsx_element [23, 10] - [23, 35]
open_tag: (jsx_opening_element [23, 10] - [23, 14]
name: (identifier [23, 11] - [23, 13]))
(jsx_text [23, 14] - [23, 30])
close_tag: (jsx_closing_element [23, 30] - [23, 35]
name: (identifier [23, 32] - [23, 34])))
(jsx_element [24, 10] - [26, 14]
open_tag: (jsx_opening_element [24, 10] - [24, 30]
name: (identifier [24, 11] - [24, 12])
attribute: (jsx_attribute [24, 13] - [24, 29]
(property_identifier [24, 13] - [24, 18])
(string [24, 19] - [24, 29]
(string_fragment [24, 20] - [24, 28]))))
(jsx_text [24, 30] - [26, 10])
close_tag: (jsx_closing_element [26, 10] - [26, 14]
name: (identifier [26, 12] - [26, 13])))
close_tag: (jsx_closing_element [27, 8] - [27, 14]
name: (identifier [27, 10] - [27, 13])))
(jsx_element [29, 8] - [75, 15]
open_tag: (jsx_opening_element [29, 8] - [29, 59]
name: (identifier [29, 9] - [29, 13])
attribute: (jsx_attribute [29, 14] - [29, 32]
(property_identifier [29, 14] - [29, 16])
(string [29, 17] - [29, 32]
(string_fragment [29, 18] - [29, 31])))
attribute: (jsx_attribute [29, 33] - [29, 58]
(property_identifier [29, 33] - [29, 38])
(string [29, 39] - [29, 58]
(string_fragment [29, 40] - [29, 57]))))
(jsx_self_closing_element [30, 10] - [30, 64]
name: (identifier [30, 11] - [30, 16])
attribute: (jsx_attribute [30, 17] - [30, 30]
(property_identifier [30, 17] - [30, 21])
(string [30, 22] - [30, 30]
(string_fragment [30, 23] - [30, 29])))
attribute: (jsx_attribute [30, 31] - [30, 49]
(property_identifier [30, 31] - [30, 33])
(string [30, 34] - [30, 49]
(string_fragment [30, 35] - [30, 48])))
attribute: (jsx_attribute [30, 50] - [30, 61]
(property_identifier [30, 50] - [30, 54])
(string [30, 55] - [30, 61]
(string_fragment [30, 56] - [30, 60]))))
(jsx_element [32, 10] - [42, 16]
open_tag: (jsx_opening_element [32, 10] - [32, 47]
name: (identifier [32, 11] - [32, 14])
attribute: (jsx_attribute [32, 15] - [32, 46]
(property_identifier [32, 15] - [32, 20])
(string [32, 21] - [32, 46]
(string_fragment [32, 22] - [32, 45]))))
(jsx_element [33, 12] - [35, 20]
open_tag: (jsx_opening_element [33, 12] - [33, 135]
name: (identifier [33, 13] - [33, 18])
attribute: (jsx_attribute [33, 19] - [33, 134]
(property_identifier [33, 19] - [33, 24])
(string [33, 25] - [33, 134]
(string_fragment [33, 26] - [33, 133]))))
(jsx_text [33, 135] - [35, 12])
close_tag: (jsx_closing_element [35, 12] - [35, 20]
name: (identifier [35, 14] - [35, 19])))
(jsx_self_closing_element [36, 12] - [41, 14]
name: (identifier [36, 13] - [36, 18])
attribute: (jsx_attribute [37, 14] - [37, 29]
(property_identifier [37, 14] - [37, 18])
(string [37, 19] - [37, 29]
(string_fragment [37, 20] - [37, 28])))
attribute: (jsx_attribute [38, 14] - [38, 31]
(property_identifier [38, 14] - [38, 16])
(string [38, 17] - [38, 31]
(string_fragment [38, 18] - [38, 30])))
attribute: (jsx_attribute [39, 14] - [39, 58]
(property_identifier [39, 14] - [39, 25])
(string [39, 26] - [39, 58]
(string_fragment [39, 27] - [39, 57])))
attribute: (jsx_attribute [40, 14] - [40, 22]
(property_identifier [40, 14] - [40, 22])))
close_tag: (jsx_closing_element [42, 10] - [42, 16]
name: (identifier [42, 12] - [42, 15])))
(jsx_element [44, 10] - [52, 16]
open_tag: (jsx_opening_element [44, 10] - [44, 47]
name: (identifier [44, 11] - [44, 14])
attribute: (jsx_attribute [44, 15] - [44, 46]
(property_identifier [44, 15] - [44, 20])
(string [44, 21] - [44, 46]
(string_fragment [44, 22] - [44, 45]))))
(jsx_element [45, 12] - [47, 20]
open_tag: (jsx_opening_element [45, 12] - [45, 135]
name: (identifier [45, 13] - [45, 18])
attribute: (jsx_attribute [45, 19] - [45, 134]
(property_identifier [45, 19] - [45, 24])
(string [45, 25] - [45, 134]
(string_fragment [45, 26] - [45, 133]))))
(jsx_text [45, 135] - [47, 12])
close_tag: (jsx_closing_element [47, 12] - [47, 20]
name: (identifier [47, 14] - [47, 19])))
(jsx_element [48, 12] - [51, 21]
open_tag: (jsx_opening_element [48, 12] - [48, 41]
name: (identifier [48, 13] - [48, 19])
attribute: (jsx_attribute [48, 20] - [48, 40]
(property_identifier [48, 20] - [48, 22])
(string [48, 23] - [48, 40]
(string_fragment [48, 24] - [48, 39]))))
(jsx_element [49, 14] - [49, 78]
open_tag: (jsx_opening_element [49, 14] - [49, 38]
name: (identifier [49, 15] - [49, 21])
attribute: (jsx_attribute [49, 22] - [49, 37]
(property_identifier [49, 22] - [49, 27])
(string [49, 28] - [49, 37]
(string_fragment [49, 29] - [49, 36]))))
(jsx_text [49, 38] - [49, 69])
close_tag: (jsx_closing_element [49, 69] - [49, 78]
name: (identifier [49, 71] - [49, 77])))
(jsx_element [50, 14] - [50, 72]
open_tag: (jsx_opening_element [50, 14] - [50, 37]
name: (identifier [50, 15] - [50, 21])
attribute: (jsx_attribute [50, 22] - [50, 36]
(property_identifier [50, 22] - [50, 27])
(string [50, 28] - [50, 36]
(string_fragment [50, 29] - [50, 35]))))
(jsx_text [50, 37] - [50, 63])
close_tag: (jsx_closing_element [50, 63] - [50, 72]
name: (identifier [50, 65] - [50, 71])))
close_tag: (jsx_closing_element [51, 12] - [51, 21]
name: (identifier [51, 14] - [51, 20])))
close_tag: (jsx_closing_element [52, 10] - [52, 16]
name: (identifier [52, 12] - [52, 15])))
(jsx_element [54, 10] - [65, 16]
open_tag: (jsx_opening_element [54, 10] - [54, 67]
name: (identifier [54, 11] - [54, 14])
attribute: (jsx_attribute [54, 15] - [54, 35]
(property_identifier [54, 15] - [54, 17])
(string [54, 18] - [54, 35]
(string_fragment [54, 19] - [54, 34])))
attribute: (jsx_attribute [54, 36] - [54, 66]
(property_identifier [54, 36] - [54, 41])
(string [54, 42] - [54, 66]
(string_fragment [54, 43] - [54, 65]))))
(jsx_element [55, 12] - [57, 20]
open_tag: (jsx_opening_element [55, 12] - [55, 135]
name: (identifier [55, 13] - [55, 18])
attribute: (jsx_attribute [55, 19] - [55, 134]
(property_identifier [55, 19] - [55, 24])
(string [55, 25] - [55, 134]
(string_fragment [55, 26] - [55, 133]))))
(jsx_text [55, 135] - [57, 12])
close_tag: (jsx_closing_element [57, 12] - [57, 20]
name: (identifier [57, 14] - [57, 19])))
(jsx_element [58, 12] - [64, 23]
open_tag: (jsx_opening_element [58, 12] - [63, 13]
name: (identifier [58, 13] - [58, 21])
attribute: (jsx_attribute [59, 14] - [59, 35]
(property_identifier [59, 14] - [59, 16])
(string [59, 17] - [59, 35]
(string_fragment [59, 18] - [59, 34])))
attribute: (jsx_attribute [60, 14] - [60, 22]
(property_identifier [60, 14] - [60, 18])
(jsx_expression [60, 19] - [60, 22]
(number [60, 20] - [60, 21])))
attribute: (jsx_attribute [61, 14] - [61, 63]
(property_identifier [61, 14] - [61, 25])
(string [61, 26] - [61, 63]
(string_fragment [61, 27] - [61, 62])))
attribute: (jsx_attribute [62, 14] - [62, 64]
(property_identifier [62, 14] - [62, 19])
(string [62, 20] - [62, 64]
(string_fragment [62, 21] - [62, 63]))))
close_tag: (jsx_closing_element [64, 12] - [64, 23]
name: (identifier [64, 14] - [64, 22])))
close_tag: (jsx_closing_element [65, 10] - [65, 16]
name: (identifier [65, 12] - [65, 15])))
(jsx_element [67, 10] - [74, 19]
open_tag: (jsx_opening_element [67, 10] - [72, 11]
name: (identifier [67, 11] - [67, 17])
attribute: (jsx_attribute [68, 12] - [68, 25]
(property_identifier [68, 12] - [68, 16])
(string [68, 17] - [68, 25]
(string_fragment [68, 18] - [68, 24])))
attribute: (jsx_attribute [69, 12] - [69, 31]
(property_identifier [69, 12] - [69, 14])
(string [69, 15] - [69, 31]
(string_fragment [69, 16] - [69, 30])))
attribute: (jsx_attribute [70, 12] - [70, 31]
(property_identifier [70, 12] - [70, 17])
(string [70, 18] - [70, 31]
(string_fragment [70, 19] - [70, 30])))
attribute: (jsx_attribute [71, 12] - [71, 67]
(property_identifier [71, 12] - [71, 17])
(string [71, 18] - [71, 67]
(string_fragment [71, 19] - [71, 66]))))
(jsx_text [72, 11] - [73, 24])
(ERROR [73, 24] - [73, 42]
(identifier [73, 26] - [73, 30])
(identifier [73, 31] - [73, 34])
(identifier [73, 35] - [73, 42]))
close_tag: (jsx_closing_element [74, 10] - [74, 19]
name: (identifier [74, 12] - [74, 18])))
close_tag: (jsx_closing_element [75, 8] - [75, 15]
name: (identifier [75, 10] - [75, 14])))
(jsx_element [77, 8] - [77, 75]
open_tag: (jsx_opening_element [77, 8] - [77, 69]
name: (identifier [77, 9] - [77, 12])
attribute: (jsx_attribute [77, 13] - [77, 31]
(property_identifier [77, 13] - [77, 15])
(string [77, 16] - [77, 31]
(string_fragment [77, 17] - [77, 30])))
attribute: (jsx_attribute [77, 32] - [77, 45]
(property_identifier [77, 32] - [77, 37])
(string [77, 38] - [77, 45]
(string_fragment [77, 39] - [77, 44])))
attribute: (jsx_attribute [77, 46] - [77, 68]
(property_identifier [77, 46] - [77, 51])
(string [77, 52] - [77, 68]
(string_fragment [77, 53] - [77, 67]))))
close_tag: (jsx_closing_element [77, 69] - [77, 75]
name: (identifier [77, 71] - [77, 74])))
(jsx_element [78, 8] - [80, 14]
open_tag: (jsx_opening_element [78, 8] - [78, 73]
name: (identifier [78, 9] - [78, 12])
attribute: (jsx_attribute [78, 13] - [78, 33]
(property_identifier [78, 13] - [78, 15])
(string [78, 16] - [78, 33]
(string_fragment [78, 17] - [78, 32])))
attribute: (jsx_attribute [78, 34] - [78, 49]
(property_identifier [78, 34] - [78, 39])
(string [78, 40] - [78, 49]
(string_fragment [78, 41] - [78, 48])))
attribute: (jsx_attribute [78, 50] - [78, 72]
(property_identifier [78, 50] - [78, 55])
(string [78, 56] - [78, 72]
(string_fragment [78, 57] - [78, 71]))))
(jsx_text [78, 73] - [80, 8])
close_tag: (jsx_closing_element [80, 8] - [80, 14]
name: (identifier [80, 10] - [80, 13])))
(jsx_element [82, 8] - [84, 14]
open_tag: (jsx_opening_element [82, 8] - [82, 27]
name: (identifier [82, 9] - [82, 12])
attribute: (jsx_attribute [82, 13] - [82, 26]
(property_identifier [82, 13] - [82, 18])
(string [82, 19] - [82, 26]
(string_fragment [82, 20] - [82, 25]))))
(jsx_text [82, 27] - [83, 31])
(jsx_element [83, 31] - [83, 67]
open_tag: (jsx_opening_element [83, 31] - [83, 48]
name: (identifier [83, 32] - [83, 33])
attribute: (jsx_attribute [83, 34] - [83, 47]
(property_identifier [83, 34] - [83, 38])
(string [83, 39] - [83, 47]
(string_fragment [83, 40] - [83, 46]))))
(jsx_text [83, 48] - [83, 63])
close_tag: (jsx_closing_element [83, 63] - [83, 67]
name: (identifier [83, 65] - [83, 66])))
close_tag: (jsx_closing_element [84, 8] - [84, 14]
name: (identifier [84, 10] - [84, 13])))
(jsx_element [86, 8] - [87, 17]
open_tag: (jsx_opening_element [86, 8] - [86, 93]
name: (identifier [86, 9] - [86, 15])
attribute: (jsx_attribute [86, 16] - [86, 92]
(property_identifier [86, 16] - [86, 19])
(string [86, 20] - [86, 92]
(string_fragment [86, 21] - [86, 91]))))
close_tag: (jsx_closing_element [87, 8] - [87, 17]
name: (identifier [87, 10] - [87, 16])))
(jsx_element [88, 8] - [88, 74]
open_tag: (jsx_opening_element [88, 8] - [88, 65]
name: (identifier [88, 9] - [88, 15])
attribute: (jsx_attribute [88, 16] - [88, 29]
(property_identifier [88, 16] - [88, 20])
(string [88, 21] - [88, 29]
(string_fragment [88, 22] - [88, 28])))
attribute: (jsx_attribute [88, 30] - [88, 64]
(property_identifier [88, 30] - [88, 33])
(string [88, 34] - [88, 64]
(string_fragment [88, 35] - [88, 63]))))
close_tag: (jsx_closing_element [88, 65] - [88, 74]
name: (identifier [88, 67] - [88, 73])))
close_tag: (jsx_closing_element [89, 6] - [89, 12]
name: (identifier [89, 8] - [89, 11])))
close_tag: (jsx_closing_element [90, 4] - [90, 25]
name: (identifier [90, 6] - [90, 24])))))))))))
/home/tylerg/p/data/auth-yes/src/features/auth/recovery_fragments.tsx Parse: 0.48 ms 6928 bytes/ms (ERROR [73, 24] - [73, 42])

View File

@ -1,922 +0,0 @@
(program [0, 0] - [193, 0]
(import_statement [0, 0] - [0, 40]
(import_clause [0, 7] - [0, 15]
(named_imports [0, 7] - [0, 15]
(import_specifier [0, 9] - [0, 13]
name: (identifier [0, 9] - [0, 13]))))
source: (string [0, 21] - [0, 39]
(string_fragment [0, 22] - [0, 38])))
(import_statement [1, 0] - [1, 63]
(import_clause [1, 7] - [1, 31]
(named_imports [1, 7] - [1, 31]
(import_specifier [1, 9] - [1, 18]
name: (identifier [1, 9] - [1, 18]))
(import_specifier [1, 20] - [1, 29]
name: (identifier [1, 20] - [1, 29]))))
source: (string [1, 37] - [1, 62]
(string_fragment [1, 38] - [1, 61])))
(import_statement [2, 0] - [2, 64]
(import_clause [2, 7] - [2, 26]
(named_imports [2, 7] - [2, 26]
(import_specifier [2, 9] - [2, 24]
name: (identifier [2, 9] - [2, 24]))))
source: (string [2, 32] - [2, 63]
(string_fragment [2, 33] - [2, 62])))
(import_statement [3, 0] - [6, 39]
(import_clause [3, 7] - [6, 1]
(named_imports [3, 7] - [6, 1]
(import_specifier [4, 2] - [4, 29]
name: (identifier [4, 2] - [4, 29]))
(import_specifier [5, 2] - [5, 28]
name: (identifier [5, 2] - [5, 28]))))
source: (string [6, 7] - [6, 38]
(string_fragment [6, 8] - [6, 37])))
(import_statement [7, 0] - [7, 78]
(import_clause [7, 12] - [7, 40]
(named_imports [7, 12] - [7, 40]
(import_specifier [7, 14] - [7, 38]
name: (identifier [7, 14] - [7, 38]))))
source: (string [7, 46] - [7, 77]
(string_fragment [7, 47] - [7, 76])))
(import_statement [9, 0] - [9, 74]
(import_clause [9, 7] - [9, 41]
(named_imports [9, 7] - [9, 41]
(import_specifier [9, 9] - [9, 20]
name: (identifier [9, 9] - [9, 20]))
(import_specifier [9, 22] - [9, 39]
name: (identifier [9, 22] - [9, 39]))))
source: (string [9, 47] - [9, 73]
(string_fragment [9, 48] - [9, 72])))
(import_statement [10, 0] - [10, 51]
(import_clause [10, 7] - [10, 23]
(named_imports [10, 7] - [10, 23]
(import_specifier [10, 9] - [10, 21]
name: (identifier [10, 9] - [10, 21]))))
source: (string [10, 29] - [10, 50]
(string_fragment [10, 30] - [10, 49])))
(import_statement [12, 0] - [20, 22]
(import_clause [12, 7] - [20, 1]
(named_imports [12, 7] - [20, 1]
(import_specifier [13, 2] - [13, 13]
name: (identifier [13, 2] - [13, 13]))
(import_specifier [14, 2] - [14, 24]
name: (identifier [14, 2] - [14, 24]))
(import_specifier [15, 2] - [15, 30]
name: (identifier [15, 2] - [15, 30]))
(import_specifier [16, 2] - [16, 23]
name: (identifier [16, 2] - [16, 23]))
(import_specifier [17, 2] - [17, 26]
name: (identifier [17, 2] - [17, 26]))
(import_specifier [18, 2] - [18, 32]
name: (identifier [18, 2] - [18, 32]))
(import_specifier [19, 2] - [19, 22]
name: (identifier [19, 2] - [19, 22]))))
source: (string [20, 7] - [20, 21]
(string_fragment [20, 8] - [20, 20])))
(import_statement [21, 0] - [21, 64]
(import_clause [21, 7] - [21, 31]
(named_imports [21, 7] - [21, 31]
(import_specifier [21, 9] - [21, 29]
name: (identifier [21, 9] - [21, 29]))))
source: (string [21, 37] - [21, 63]
(string_fragment [21, 38] - [21, 62])))
(export_statement [23, 0] - [23, 41]
declaration: (lexical_declaration [23, 7] - [23, 41]
(variable_declarator [23, 13] - [23, 40]
name: (identifier [23, 13] - [23, 27])
value: (new_expression [23, 30] - [23, 40]
constructor: (identifier [23, 34] - [23, 38])
arguments: (arguments [23, 38] - [23, 40])))))
(lexical_declaration [25, 0] - [26, 47]
(variable_declarator [25, 6] - [26, 46]
name: (identifier [25, 6] - [25, 10])
value: (binary_expression [25, 13] - [26, 46]
left: (call_expression [25, 13] - [25, 34]
function: (member_expression [25, 13] - [25, 25]
object: (member_expression [25, 13] - [25, 21]
object: (identifier [25, 13] - [25, 17])
property: (property_identifier [25, 18] - [25, 21]))
property: (property_identifier [25, 22] - [25, 25]))
arguments: (arguments [25, 25] - [25, 34]
(string [25, 26] - [25, 33]
(string_fragment [25, 27] - [25, 32]))))
right: (parenthesized_expression [26, 2] - [26, 46]
(ternary_expression [26, 3] - [26, 45]
condition: (member_expression [26, 3] - [26, 19]
object: (meta_property [26, 3] - [26, 14])
property: (property_identifier [26, 15] - [26, 19]))
consequence: (undefined [26, 22] - [26, 31])
alternative: (string [26, 34] - [26, 45]
(string_fragment [26, 35] - [26, 44])))))))
(lexical_declaration [27, 0] - [28, 54]
(variable_declarator [27, 6] - [28, 53]
name: (identifier [27, 6] - [27, 12])
value: (binary_expression [27, 15] - [28, 53]
left: (call_expression [27, 15] - [27, 37]
function: (member_expression [27, 15] - [27, 27]
object: (member_expression [27, 15] - [27, 23]
object: (identifier [27, 15] - [27, 19])
property: (property_identifier [27, 20] - [27, 23]))
property: (property_identifier [27, 24] - [27, 27]))
arguments: (arguments [27, 27] - [27, 37]
(string [27, 28] - [27, 36]
(string_fragment [27, 29] - [27, 35]))))
right: (parenthesized_expression [28, 2] - [28, 53]
(ternary_expression [28, 3] - [28, 52]
condition: (member_expression [28, 3] - [28, 19]
object: (meta_property [28, 3] - [28, 14])
property: (property_identifier [28, 15] - [28, 19]))
consequence: (undefined [28, 22] - [28, 31])
alternative: (string [28, 34] - [28, 52]
(string_fragment [28, 35] - [28, 51])))))))
(function_declaration [30, 0] - [37, 1]
name: (identifier [30, 9] - [30, 28])
parameters: (formal_parameters [30, 28] - [30, 50]
(required_parameter [30, 29] - [30, 38]
pattern: (identifier [30, 29] - [30, 30])
type: (type_annotation [30, 30] - [30, 38]
(predefined_type [30, 32] - [30, 38])))
(required_parameter [30, 40] - [30, 49]
pattern: (identifier [30, 40] - [30, 41])
type: (type_annotation [30, 41] - [30, 49]
(predefined_type [30, 43] - [30, 49]))))
return_type: (type_annotation [30, 50] - [30, 59]
(predefined_type [30, 52] - [30, 59]))
body: (statement_block [30, 60] - [37, 1]
(if_statement [31, 2] - [31, 42]
condition: (parenthesized_expression [31, 5] - [31, 28]
(binary_expression [31, 6] - [31, 27]
left: (member_expression [31, 6] - [31, 14]
object: (identifier [31, 6] - [31, 7])
property: (property_identifier [31, 8] - [31, 14]))
right: (member_expression [31, 19] - [31, 27]
object: (identifier [31, 19] - [31, 20])
property: (property_identifier [31, 21] - [31, 27]))))
consequence: (return_statement [31, 29] - [31, 42]
(false [31, 36] - [31, 41])))
(lexical_declaration [32, 2] - [32, 17]
(variable_declarator [32, 6] - [32, 16]
name: (identifier [32, 6] - [32, 12])
value: (number [32, 15] - [32, 16])))
(for_statement [33, 2] - [35, 3]
initializer: (lexical_declaration [33, 7] - [33, 17]
(variable_declarator [33, 11] - [33, 16]
name: (identifier [33, 11] - [33, 12])
value: (number [33, 15] - [33, 16])))
condition: (binary_expression [33, 18] - [33, 30]
left: (identifier [33, 18] - [33, 19])
right: (member_expression [33, 22] - [33, 30]
object: (identifier [33, 22] - [33, 23])
property: (property_identifier [33, 24] - [33, 30])))
increment: (update_expression [33, 32] - [33, 35]
argument: (identifier [33, 32] - [33, 33]))
body: (statement_block [33, 37] - [35, 3]
(expression_statement [34, 4] - [34, 48]
(augmented_assignment_expression [34, 4] - [34, 47]
left: (identifier [34, 4] - [34, 10])
right: (binary_expression [34, 14] - [34, 47]
left: (call_expression [34, 14] - [34, 29]
function: (member_expression [34, 14] - [34, 26]
object: (identifier [34, 14] - [34, 15])
property: (property_identifier [34, 16] - [34, 26]))
arguments: (arguments [34, 26] - [34, 29]
(identifier [34, 27] - [34, 28])))
right: (call_expression [34, 32] - [34, 47]
function: (member_expression [34, 32] - [34, 44]
object: (identifier [34, 32] - [34, 33])
property: (property_identifier [34, 34] - [34, 44]))
arguments: (arguments [34, 44] - [34, 47]
(identifier [34, 45] - [34, 46]))))))))
(return_statement [36, 2] - [36, 22]
(binary_expression [36, 9] - [36, 21]
left: (identifier [36, 9] - [36, 15])
right: (number [36, 20] - [36, 21])))))
(comment [39, 0] - [39, 11])
(expression_statement [40, 0] - [42, 3]
(call_expression [40, 0] - [42, 2]
function: (member_expression [40, 0] - [40, 18]
object: (identifier [40, 0] - [40, 14])
property: (property_identifier [40, 15] - [40, 18]))
arguments: (arguments [40, 18] - [42, 2]
(string [40, 19] - [40, 30]
(string_fragment [40, 20] - [40, 29]))
(arrow_function [40, 32] - [42, 1]
parameters: (formal_parameters [40, 32] - [40, 35]
(required_parameter [40, 33] - [40, 34]
pattern: (identifier [40, 33] - [40, 34])))
body: (statement_block [40, 39] - [42, 1]
(return_statement [41, 2] - [41, 40]
(call_expression [41, 9] - [41, 39]
function: (member_expression [41, 9] - [41, 15]
object: (identifier [41, 9] - [41, 10])
property: (property_identifier [41, 11] - [41, 15]))
arguments: (arguments [41, 15] - [41, 39]
(call_expression [41, 16] - [41, 38]
function: (identifier [41, 16] - [41, 36])
arguments: (arguments [41, 36] - [41, 38]))))))))))
(comment [44, 0] - [44, 13])
(expression_statement [45, 0] - [45, 57]
(call_expression [45, 0] - [45, 56]
function: (member_expression [45, 0] - [45, 18]
object: (identifier [45, 0] - [45, 14])
property: (property_identifier [45, 15] - [45, 18]))
arguments: (arguments [45, 18] - [45, 56]
(string [45, 19] - [45, 36]
(string_fragment [45, 20] - [45, 35]))
(identifier [45, 38] - [45, 55]))))
(comment [47, 0] - [47, 21])
(expression_statement [48, 0] - [116, 3]
(call_expression [48, 0] - [116, 2]
function: (member_expression [48, 0] - [48, 19]
object: (identifier [48, 0] - [48, 14])
property: (property_identifier [48, 15] - [48, 19]))
arguments: (arguments [48, 19] - [116, 2]
(string [48, 20] - [48, 45]
(string_fragment [48, 21] - [48, 44]))
(arrow_function [48, 47] - [116, 1]
parameters: (formal_parameters [48, 53] - [48, 56]
(required_parameter [48, 54] - [48, 55]
pattern: (identifier [48, 54] - [48, 55])))
body: (statement_block [48, 60] - [116, 1]
(try_statement [49, 2] - [115, 3]
body: (statement_block [49, 6] - [112, 3]
(lexical_declaration [50, 4] - [50, 45]
(variable_declarator [50, 10] - [50, 44]
name: (object_pattern [50, 10] - [50, 23]
(shorthand_property_identifier_pattern [50, 12] - [50, 16])
(shorthand_property_identifier_pattern [50, 18] - [50, 21]))
value: (await_expression [50, 26] - [50, 44]
(call_expression [50, 32] - [50, 44]
function: (member_expression [50, 32] - [50, 42]
object: (member_expression [50, 32] - [50, 37]
object: (identifier [50, 32] - [50, 33])
property: (property_identifier [50, 34] - [50, 37]))
property: (property_identifier [50, 38] - [50, 42]))
arguments: (arguments [50, 42] - [50, 44])))))
(if_statement [51, 4] - [53, 5]
condition: (parenthesized_expression [51, 7] - [51, 22]
(binary_expression [51, 8] - [51, 21]
left: (unary_expression [51, 8] - [51, 13]
argument: (identifier [51, 9] - [51, 13]))
right: (unary_expression [51, 17] - [51, 21]
argument: (identifier [51, 18] - [51, 21]))))
consequence: (statement_block [51, 23] - [53, 5]
(return_statement [52, 6] - [52, 68]
(call_expression [52, 13] - [52, 67]
function: (member_expression [52, 13] - [52, 19]
object: (identifier [52, 13] - [52, 14])
property: (property_identifier [52, 15] - [52, 19]))
arguments: (arguments [52, 19] - [52, 67]
(object [52, 20] - [52, 61]
(pair [52, 22] - [52, 59]
key: (property_identifier [52, 22] - [52, 27])
value: (string [52, 29] - [52, 59]
(string_fragment [52, 30] - [52, 58]))))
(number [52, 63] - [52, 66]))))))
(lexical_declaration [55, 4] - [55, 51]
(variable_declarator [55, 10] - [55, 50]
name: (identifier [55, 10] - [55, 14])
value: (await_expression [55, 17] - [55, 50]
(call_expression [55, 23] - [55, 50]
function: (identifier [55, 23] - [55, 44])
arguments: (arguments [55, 44] - [55, 50]
(identifier [55, 45] - [55, 49]))))))
(if_statement [56, 4] - [61, 5]
condition: (parenthesized_expression [56, 7] - [56, 14]
(unary_expression [56, 8] - [56, 13]
argument: (identifier [56, 9] - [56, 13])))
consequence: (statement_block [56, 15] - [61, 5]
(return_statement [57, 6] - [60, 8]
(call_expression [57, 13] - [60, 7]
function: (member_expression [57, 13] - [57, 19]
object: (identifier [57, 13] - [57, 14])
property: (property_identifier [57, 15] - [57, 19]))
arguments: (arguments [57, 19] - [60, 7]
(object [58, 8] - [58, 68]
(pair [58, 10] - [58, 66]
key: (property_identifier [58, 10] - [58, 15])
value: (string [58, 17] - [58, 66]
(string_fragment [58, 18] - [58, 65]))))
(number [59, 8] - [59, 11]))))))
(lexical_declaration [63, 4] - [63, 69]
(variable_declarator [63, 10] - [63, 68]
name: (identifier [63, 10] - [63, 21])
value: (await_expression [63, 24] - [63, 68]
(call_expression [63, 30] - [63, 68]
function: (identifier [63, 30] - [63, 54])
arguments: (arguments [63, 54] - [63, 68]
(member_expression [63, 55] - [63, 67]
object: (identifier [63, 55] - [63, 59])
property: (property_identifier [63, 60] - [63, 67])))))))
(if_statement [64, 4] - [68, 5]
condition: (parenthesized_expression [64, 7] - [64, 21]
(unary_expression [64, 8] - [64, 20]
argument: (identifier [64, 9] - [64, 20])))
consequence: (statement_block [64, 22] - [68, 5]
(return_statement [65, 6] - [67, 14]
(call_expression [65, 13] - [67, 13]
function: (member_expression [65, 13] - [65, 19]
object: (identifier [65, 13] - [65, 14])
property: (property_identifier [65, 15] - [65, 19]))
arguments: (arguments [65, 19] - [67, 13]
(object [65, 20] - [67, 7]
(pair [66, 8] - [66, 66]
key: (property_identifier [66, 8] - [66, 13])
value: (string [66, 15] - [66, 66]
(string_fragment [66, 16] - [66, 65]))))
(number [67, 9] - [67, 12]))))))
(lexical_declaration [70, 4] - [70, 52]
(variable_declarator [70, 10] - [70, 51]
name: (identifier [70, 10] - [70, 19])
value: (call_expression [70, 22] - [70, 51]
function: (member_expression [70, 22] - [70, 46]
object: (new_expression [70, 22] - [70, 39]
constructor: (identifier [70, 26] - [70, 37])
arguments: (arguments [70, 37] - [70, 39]))
property: (property_identifier [70, 40] - [70, 46]))
arguments: (arguments [70, 46] - [70, 51]
(identifier [70, 47] - [70, 50])))))
(lexical_declaration [71, 4] - [71, 72]
(variable_declarator [71, 10] - [71, 71]
name: (identifier [71, 10] - [71, 20])
value: (await_expression [71, 23] - [71, 71]
(call_expression [71, 29] - [71, 71]
function: (member_expression [71, 29] - [71, 49]
object: (member_expression [71, 29] - [71, 42]
object: (identifier [71, 29] - [71, 35])
property: (property_identifier [71, 36] - [71, 42]))
property: (property_identifier [71, 43] - [71, 49]))
arguments: (arguments [71, 49] - [71, 71]
(string [71, 50] - [71, 59]
(string_fragment [71, 51] - [71, 58]))
(identifier [71, 61] - [71, 70]))))))
(lexical_declaration [72, 4] - [74, 15]
(variable_declarator [72, 10] - [74, 14]
name: (identifier [72, 10] - [72, 17])
value: (call_expression [72, 20] - [74, 14]
function: (member_expression [72, 20] - [74, 10]
object: (call_expression [72, 20] - [74, 5]
function: (member_expression [72, 20] - [72, 62]
object: (call_expression [72, 20] - [72, 58]
function: (member_expression [72, 20] - [72, 30]
object: (identifier [72, 20] - [72, 25])
property: (property_identifier [72, 26] - [72, 30]))
arguments: (arguments [72, 30] - [72, 58]
(new_expression [72, 31] - [72, 57]
constructor: (identifier [72, 35] - [72, 45])
arguments: (arguments [72, 45] - [72, 57]
(identifier [72, 46] - [72, 56])))))
property: (property_identifier [72, 59] - [72, 62]))
arguments: (arguments [72, 62] - [74, 5]
(arrow_function [72, 63] - [73, 37]
parameters: (formal_parameters [72, 63] - [72, 66]
(required_parameter [72, 64] - [72, 65]
pattern: (identifier [72, 64] - [72, 65])))
body: (call_expression [73, 6] - [73, 37]
function: (member_expression [73, 6] - [73, 29]
object: (call_expression [73, 6] - [73, 20]
function: (member_expression [73, 6] - [73, 16]
object: (identifier [73, 6] - [73, 7])
property: (property_identifier [73, 8] - [73, 16]))
arguments: (arguments [73, 16] - [73, 20]
(number [73, 17] - [73, 19])))
property: (property_identifier [73, 21] - [73, 29]))
arguments: (arguments [73, 29] - [73, 37]
(number [73, 30] - [73, 31])
(string [73, 33] - [73, 36]
(string_fragment [73, 34] - [73, 35])))))))
property: (property_identifier [74, 6] - [74, 10]))
arguments: (arguments [74, 10] - [74, 14]
(string [74, 11] - [74, 13])))))
(if_statement [76, 4] - [79, 5]
condition: (parenthesized_expression [76, 7] - [76, 60]
(unary_expression [76, 8] - [76, 59]
argument: (call_expression [76, 9] - [76, 59]
function: (identifier [76, 9] - [76, 28])
arguments: (arguments [76, 28] - [76, 59]
(identifier [76, 29] - [76, 36])
(member_expression [76, 38] - [76, 58]
object: (identifier [76, 38] - [76, 49])
property: (property_identifier [76, 50] - [76, 58]))))))
consequence: (statement_block [76, 61] - [79, 5]
(expression_statement [77, 6] - [77, 59]
(await_expression [77, 6] - [77, 58]
(call_expression [77, 12] - [77, 58]
function: (identifier [77, 12] - [77, 42])
arguments: (arguments [77, 42] - [77, 58]
(member_expression [77, 43] - [77, 57]
object: (identifier [77, 43] - [77, 54])
property: (property_identifier [77, 55] - [77, 57]))))))
(return_statement [78, 6] - [78, 60]
(call_expression [78, 13] - [78, 59]
function: (member_expression [78, 13] - [78, 19]
object: (identifier [78, 13] - [78, 14])
property: (property_identifier [78, 15] - [78, 19]))
arguments: (arguments [78, 19] - [78, 59]
(object [78, 20] - [78, 53]
(pair [78, 22] - [78, 51]
key: (property_identifier [78, 22] - [78, 27])
value: (string [78, 29] - [78, 51]
(string_fragment [78, 30] - [78, 50]))))
(number [78, 55] - [78, 58]))))))
(if_statement [81, 4] - [81, 50]
condition: (parenthesized_expression [81, 7] - [81, 14]
(unary_expression [81, 8] - [81, 13]
argument: (identifier [81, 9] - [81, 13])))
consequence: (throw_statement [81, 15] - [81, 50]
(new_expression [81, 21] - [81, 49]
constructor: (identifier [81, 25] - [81, 30])
arguments: (arguments [81, 30] - [81, 49]
(string [81, 31] - [81, 48]
(string_fragment [81, 32] - [81, 47]))))))
(lexical_declaration [83, 4] - [95, 7]
(variable_declarator [83, 10] - [95, 6]
name: (identifier [83, 10] - [83, 17])
value: (await_expression [83, 20] - [95, 6]
(call_expression [83, 26] - [95, 6]
function: (identifier [83, 26] - [83, 53])
arguments: (arguments [83, 53] - [95, 6]
(object [83, 54] - [95, 5]
(pair [84, 6] - [84, 42]
key: (property_identifier [84, 6] - [84, 12])
value: (string [84, 14] - [84, 42]
(string_fragment [84, 15] - [84, 41])))
(pair [85, 6] - [85, 26]
key: (property_identifier [85, 6] - [85, 10])
value: (as_expression [85, 12] - [85, 26]
(identifier [85, 12] - [85, 16])
(predefined_type [85, 20] - [85, 26])))
(pair [86, 6] - [86, 52]
key: (property_identifier [86, 6] - [86, 12])
value: (call_expression [86, 14] - [86, 52]
function: (member_expression [86, 14] - [86, 38]
object: (new_expression [86, 14] - [86, 31]
constructor: (identifier [86, 18] - [86, 29])
arguments: (arguments [86, 29] - [86, 31]))
property: (property_identifier [86, 32] - [86, 38]))
arguments: (arguments [86, 38] - [86, 52]
(member_expression [86, 39] - [86, 51]
object: (identifier [86, 39] - [86, 43])
property: (property_identifier [86, 44] - [86, 51])))))
(pair [87, 6] - [87, 28]
key: (property_identifier [87, 6] - [87, 14])
value: (member_expression [87, 16] - [87, 28]
object: (identifier [87, 16] - [87, 20])
property: (property_identifier [87, 21] - [87, 28])))
(pair [88, 6] - [88, 29]
key: (property_identifier [88, 6] - [88, 21])
value: (string [88, 23] - [88, 29]
(string_fragment [88, 24] - [88, 28])))
(pair [89, 6] - [92, 7]
key: (property_identifier [89, 6] - [89, 28])
value: (object [89, 30] - [92, 7]
(pair [90, 8] - [90, 37]
key: (property_identifier [90, 8] - [90, 24])
value: (string [90, 26] - [90, 37]
(string_fragment [90, 27] - [90, 36])))
(pair [91, 8] - [91, 31]
key: (property_identifier [91, 8] - [91, 19])
value: (string [91, 21] - [91, 31]
(string_fragment [91, 22] - [91, 30])))))
(pair [93, 6] - [93, 43]
key: (property_identifier [93, 6] - [93, 27])
value: (array [93, 29] - [93, 43]
(unary_expression [93, 30] - [93, 32]
argument: (number [93, 31] - [93, 32]))
(unary_expression [93, 34] - [93, 36]
argument: (number [93, 35] - [93, 36]))
(unary_expression [93, 38] - [93, 42]
argument: (number [93, 39] - [93, 42]))))
(pair [94, 6] - [94, 73]
key: (property_identifier [94, 6] - [94, 16])
value: (as_expression [94, 18] - [94, 73]
(object [94, 18] - [94, 66]
(pair [94, 20] - [94, 64]
key: (property_identifier [94, 20] - [94, 23])
value: (object [94, 25] - [94, 64]
(pair [94, 27] - [94, 62]
key: (property_identifier [94, 27] - [94, 31])
value: (object [94, 33] - [94, 62]
(pair [94, 35] - [94, 60]
key: (property_identifier [94, 35] - [94, 40])
value: (new_expression [94, 42] - [94, 60]
constructor: (identifier [94, 46] - [94, 56])
arguments: (arguments [94, 56] - [94, 60]
(number [94, 57] - [94, 59])))))))))
(predefined_type [94, 70] - [94, 73])))))))))
(expression_statement [97, 4] - [102, 7]
(call_expression [97, 4] - [102, 6]
function: (identifier [97, 4] - [97, 13])
arguments: (arguments [97, 13] - [102, 6]
(identifier [97, 14] - [97, 15])
(string [97, 17] - [97, 46]
(string_fragment [97, 18] - [97, 45]))
(member_expression [97, 48] - [97, 65]
object: (identifier [97, 48] - [97, 55])
property: (property_identifier [97, 56] - [97, 65]))
(object [97, 67] - [102, 5]
(pair [98, 6] - [98, 20]
key: (property_identifier [98, 6] - [98, 14])
value: (true [98, 16] - [98, 20]))
(pair [99, 6] - [99, 18]
key: (property_identifier [99, 6] - [99, 12])
value: (true [99, 14] - [99, 18]))
(pair [100, 6] - [100, 21]
key: (property_identifier [100, 6] - [100, 14])
value: (string [100, 16] - [100, 21]
(string_fragment [100, 17] - [100, 20])))
(pair [101, 6] - [101, 17]
key: (property_identifier [101, 6] - [101, 12])
value: (number [101, 14] - [101, 17]))))))
(expression_statement [104, 4] - [109, 7]
(call_expression [104, 4] - [109, 6]
function: (identifier [104, 4] - [104, 13])
arguments: (arguments [104, 13] - [109, 6]
(identifier [104, 14] - [104, 15])
(string [104, 17] - [104, 35]
(string_fragment [104, 18] - [104, 34]))
(member_expression [104, 37] - [104, 49]
object: (identifier [104, 37] - [104, 41])
property: (property_identifier [104, 42] - [104, 49]))
(object [104, 51] - [109, 5]
(pair [105, 6] - [105, 20]
key: (property_identifier [105, 6] - [105, 14])
value: (true [105, 16] - [105, 20]))
(pair [106, 6] - [106, 18]
key: (property_identifier [106, 6] - [106, 12])
value: (true [106, 14] - [106, 18]))
(pair [107, 6] - [107, 21]
key: (property_identifier [107, 6] - [107, 14])
value: (string [107, 16] - [107, 21]
(string_fragment [107, 17] - [107, 20])))
(pair [108, 6] - [108, 17]
key: (property_identifier [108, 6] - [108, 12])
value: (number [108, 14] - [108, 17]))))))
(return_statement [111, 4] - [111, 73]
(call_expression [111, 11] - [111, 72]
function: (member_expression [111, 11] - [111, 17]
object: (identifier [111, 11] - [111, 12])
property: (property_identifier [111, 13] - [111, 17]))
arguments: (arguments [111, 17] - [111, 72]
(object [111, 18] - [111, 71]
(shorthand_property_identifier [111, 20] - [111, 27])
(pair [111, 29] - [111, 69]
key: (property_identifier [111, 29] - [111, 43])
value: (member_expression [111, 45] - [111, 69]
object: (identifier [111, 45] - [111, 56])
property: (property_identifier [111, 57] - [111, 69]))))))))
handler: (catch_clause [112, 4] - [115, 3]
parameter: (identifier [112, 11] - [112, 16])
type: (type_annotation [112, 16] - [112, 21]
(predefined_type [112, 18] - [112, 21]))
body: (statement_block [112, 23] - [115, 3]
(expression_statement [113, 4] - [113, 65]
(call_expression [113, 4] - [113, 64]
function: (member_expression [113, 4] - [113, 17]
object: (identifier [113, 4] - [113, 11])
property: (property_identifier [113, 12] - [113, 17]))
arguments: (arguments [113, 17] - [113, 64]
(string [113, 18] - [113, 56]
(string_fragment [113, 19] - [113, 55]))
(identifier [113, 58] - [113, 63]))))
(return_statement [114, 4] - [114, 76]
(call_expression [114, 11] - [114, 75]
function: (member_expression [114, 11] - [114, 17]
object: (identifier [114, 11] - [114, 12])
property: (property_identifier [114, 13] - [114, 17]))
arguments: (arguments [114, 17] - [114, 75]
(object [114, 18] - [114, 69]
(pair [114, 20] - [114, 67]
key: (property_identifier [114, 20] - [114, 25])
value: (binary_expression [114, 27] - [114, 67]
left: (member_expression [114, 27] - [114, 40]
object: (identifier [114, 27] - [114, 32])
property: (property_identifier [114, 33] - [114, 40]))
right: (string [114, 44] - [114, 67]
(string_fragment [114, 45] - [114, 66])))))
(number [114, 71] - [114, 74]))))))))))))
(comment [118, 0] - [118, 18])
(expression_statement [119, 0] - [192, 3]
(call_expression [119, 0] - [192, 2]
function: (member_expression [119, 0] - [119, 19]
object: (identifier [119, 0] - [119, 14])
property: (property_identifier [119, 15] - [119, 19]))
arguments: (arguments [119, 19] - [192, 2]
(string [119, 20] - [119, 42]
(string_fragment [119, 21] - [119, 41]))
(arrow_function [119, 44] - [192, 1]
parameters: (formal_parameters [119, 50] - [119, 53]
(required_parameter [119, 51] - [119, 52]
pattern: (identifier [119, 51] - [119, 52])))
body: (statement_block [119, 57] - [192, 1]
(try_statement [120, 2] - [191, 3]
body: (statement_block [120, 6] - [188, 3]
(lexical_declaration [121, 4] - [121, 50]
(variable_declarator [121, 10] - [121, 49]
name: (object_pattern [121, 10] - [121, 28]
(shorthand_property_identifier_pattern [121, 12] - [121, 16])
(shorthand_property_identifier_pattern [121, 18] - [121, 26]))
value: (await_expression [121, 31] - [121, 49]
(call_expression [121, 37] - [121, 49]
function: (member_expression [121, 37] - [121, 47]
object: (member_expression [121, 37] - [121, 42]
object: (identifier [121, 37] - [121, 38])
property: (property_identifier [121, 39] - [121, 42]))
property: (property_identifier [121, 43] - [121, 47]))
arguments: (arguments [121, 47] - [121, 49])))))
(lexical_declaration [122, 4] - [122, 74]
(variable_declarator [122, 10] - [122, 73]
name: (identifier [122, 10] - [122, 27])
value: (call_expression [122, 30] - [122, 73]
function: (identifier [122, 30] - [122, 39])
arguments: (arguments [122, 39] - [122, 73]
(identifier [122, 40] - [122, 41])
(string [122, 43] - [122, 72]
(string_fragment [122, 44] - [122, 71]))))))
(lexical_declaration [123, 4] - [123, 60]
(variable_declarator [123, 10] - [123, 59]
name: (identifier [123, 10] - [123, 24])
value: (call_expression [123, 27] - [123, 59]
function: (identifier [123, 27] - [123, 36])
arguments: (arguments [123, 36] - [123, 59]
(identifier [123, 37] - [123, 38])
(string [123, 40] - [123, 58]
(string_fragment [123, 41] - [123, 57]))))))
(if_statement [125, 4] - [130, 5]
condition: (parenthesized_expression [125, 7] - [125, 46]
(binary_expression [125, 8] - [125, 45]
left: (unary_expression [125, 8] - [125, 26]
argument: (identifier [125, 9] - [125, 26]))
right: (unary_expression [125, 30] - [125, 45]
argument: (identifier [125, 31] - [125, 45]))))
consequence: (statement_block [125, 47] - [130, 5]
(return_statement [126, 6] - [129, 8]
(call_expression [126, 13] - [129, 7]
function: (member_expression [126, 13] - [126, 19]
object: (identifier [126, 13] - [126, 14])
property: (property_identifier [126, 15] - [126, 19]))
arguments: (arguments [126, 19] - [129, 7]
(object [127, 8] - [127, 66]
(pair [127, 10] - [127, 64]
key: (property_identifier [127, 10] - [127, 15])
value: (string [127, 17] - [127, 64]
(string_fragment [127, 18] - [127, 63]))))
(number [128, 8] - [128, 11]))))))
(lexical_declaration [132, 4] - [132, 51]
(variable_declarator [132, 10] - [132, 50]
name: (identifier [132, 10] - [132, 14])
value: (await_expression [132, 17] - [132, 50]
(call_expression [132, 23] - [132, 50]
function: (identifier [132, 23] - [132, 44])
arguments: (arguments [132, 44] - [132, 50]
(identifier [132, 45] - [132, 49]))))))
(if_statement [133, 4] - [135, 5]
condition: (parenthesized_expression [133, 7] - [133, 49]
(binary_expression [133, 8] - [133, 48]
left: (unary_expression [133, 8] - [133, 13]
argument: (identifier [133, 9] - [133, 13]))
right: (binary_expression [133, 17] - [133, 48]
left: (member_expression [133, 17] - [133, 29]
object: (identifier [133, 17] - [133, 21])
property: (property_identifier [133, 22] - [133, 29]))
right: (identifier [133, 34] - [133, 48]))))
consequence: (statement_block [133, 50] - [135, 5]
(return_statement [134, 6] - [134, 72]
(call_expression [134, 13] - [134, 71]
function: (member_expression [134, 13] - [134, 19]
object: (identifier [134, 13] - [134, 14])
property: (property_identifier [134, 15] - [134, 19]))
arguments: (arguments [134, 19] - [134, 71]
(object [134, 20] - [134, 65]
(pair [134, 22] - [134, 63]
key: (property_identifier [134, 22] - [134, 27])
value: (string [134, 29] - [134, 63]
(string_fragment [134, 30] - [134, 62]))))
(number [134, 67] - [134, 70]))))))
(if_statement [137, 4] - [137, 68]
condition: (parenthesized_expression [137, 7] - [137, 25]
(binary_expression [137, 8] - [137, 24]
left: (unary_expression [137, 8] - [137, 15]
argument: (identifier [137, 9] - [137, 15]))
right: (unary_expression [137, 19] - [137, 24]
argument: (identifier [137, 20] - [137, 24]))))
consequence: (throw_statement [137, 26] - [137, 68]
(new_expression [137, 32] - [137, 67]
constructor: (identifier [137, 36] - [137, 41])
arguments: (arguments [137, 41] - [137, 67]
(string [137, 42] - [137, 66]
(string_fragment [137, 43] - [137, 65]))))))
(lexical_declaration [139, 4] - [145, 7]
(variable_declarator [139, 10] - [145, 6]
name: (identifier [139, 10] - [139, 22])
value: (await_expression [139, 25] - [145, 6]
(call_expression [139, 31] - [145, 6]
function: (identifier [139, 31] - [139, 57])
arguments: (arguments [139, 57] - [145, 6]
(object [139, 58] - [145, 5]
(pair [140, 6] - [140, 52]
key: (property_identifier [140, 6] - [140, 14])
value: (as_expression [140, 16] - [140, 52]
(identifier [140, 16] - [140, 24])
(type_identifier [140, 28] - [140, 52])))
(shorthand_property_identifier [141, 6] - [141, 23])
(pair [142, 6] - [142, 38]
key: (property_identifier [142, 6] - [142, 20])
value: (as_expression [142, 22] - [142, 38]
(identifier [142, 22] - [142, 28])
(predefined_type [142, 32] - [142, 38])))
(pair [143, 6] - [143, 34]
key: (property_identifier [143, 6] - [143, 18])
value: (as_expression [143, 20] - [143, 34]
(identifier [143, 20] - [143, 24])
(predefined_type [143, 28] - [143, 34])))
(pair [144, 6] - [144, 36]
key: (property_identifier [144, 6] - [144, 29])
value: (false [144, 31] - [144, 36]))))))))
(if_statement [147, 4] - [187, 5]
condition: (parenthesized_expression [147, 7] - [147, 63]
(binary_expression [147, 8] - [147, 62]
left: (member_expression [147, 8] - [147, 29]
object: (identifier [147, 8] - [147, 20])
property: (property_identifier [147, 21] - [147, 29]))
right: (member_expression [147, 33] - [147, 62]
object: (identifier [147, 33] - [147, 45])
property: (property_identifier [147, 46] - [147, 62]))))
consequence: (statement_block [147, 64] - [182, 5]
(lexical_declaration [148, 6] - [149, 38]
(variable_declarator [148, 12] - [149, 37]
name: (object_pattern [148, 12] - [148, 68]
(shorthand_property_identifier_pattern [148, 14] - [148, 24])
(shorthand_property_identifier_pattern [148, 26] - [148, 46])
(shorthand_property_identifier_pattern [148, 48] - [148, 66]))
value: (member_expression [149, 8] - [149, 37]
object: (identifier [149, 8] - [149, 20])
property: (property_identifier [149, 21] - [149, 37]))))
(lexical_declaration [151, 6] - [151, 65]
(variable_declarator [151, 12] - [151, 64]
name: (identifier [151, 12] - [151, 24])
value: (call_expression [151, 27] - [151, 64]
function: (identifier [151, 27] - [151, 42])
arguments: (arguments [151, 42] - [151, 64]
(member_expression [151, 43] - [151, 63]
object: (identifier [151, 43] - [151, 53])
property: (property_identifier [151, 54] - [151, 63]))))))
(lexical_declaration [152, 6] - [153, 63]
(variable_declarator [152, 12] - [153, 62]
name: (identifier [152, 12] - [152, 18])
value: (binary_expression [152, 21] - [153, 62]
left: (binary_expression [152, 21] - [153, 54]
left: (member_expression [152, 21] - [152, 47]
object: (parenthesized_expression [152, 21] - [152, 40]
(as_expression [152, 22] - [152, 39]
(identifier [152, 22] - [152, 32])
(predefined_type [152, 36] - [152, 39])))
property: (property_identifier [152, 41] - [152, 47]))
right: (member_expression [153, 8] - [153, 54]
object: (parenthesized_expression [153, 8] - [153, 46]
(as_expression [153, 9] - [153, 45]
(member_expression [153, 9] - [153, 38]
object: (identifier [153, 9] - [153, 21])
property: (property_identifier [153, 22] - [153, 38]))
(predefined_type [153, 42] - [153, 45])))
optional_chain: (optional_chain [153, 46] - [153, 48])
property: (property_identifier [153, 48] - [153, 54])))
right: (null [153, 58] - [153, 62]))))
(expression_statement [155, 6] - [155, 49]
(await_expression [155, 6] - [155, 48]
(call_expression [155, 12] - [155, 48]
function: (identifier [155, 12] - [155, 34])
arguments: (arguments [155, 34] - [155, 48]
(member_expression [155, 35] - [155, 47]
object: (identifier [155, 35] - [155, 39])
property: (property_identifier [155, 40] - [155, 47]))))))
(expression_statement [156, 6] - [162, 8]
(await_expression [156, 6] - [162, 7]
(call_expression [156, 12] - [162, 7]
function: (identifier [156, 12] - [156, 23])
arguments: (arguments [156, 23] - [162, 7]
(member_expression [157, 8] - [157, 20]
object: (identifier [157, 8] - [157, 12])
property: (property_identifier [157, 13] - [157, 20]))
(member_expression [158, 8] - [158, 21]
object: (identifier [158, 8] - [158, 18])
property: (property_identifier [158, 19] - [158, 21]))
(identifier [159, 8] - [159, 20])
(member_expression [160, 8] - [160, 26]
object: (identifier [160, 8] - [160, 18])
property: (property_identifier [160, 19] - [160, 26]))
(identifier [161, 8] - [161, 14])))))
(expression_statement [163, 6] - [163, 42]
(await_expression [163, 6] - [163, 41]
(call_expression [163, 12] - [163, 41]
function: (identifier [163, 12] - [163, 32])
arguments: (arguments [163, 32] - [163, 41]
(member_expression [163, 33] - [163, 40]
object: (identifier [163, 33] - [163, 37])
property: (property_identifier [163, 38] - [163, 40]))))))
(expression_statement [164, 6] - [164, 55]
(await_expression [164, 6] - [164, 54]
(call_expression [164, 12] - [164, 54]
function: (identifier [164, 12] - [164, 40])
arguments: (arguments [164, 40] - [164, 54]
(member_expression [164, 41] - [164, 53]
object: (identifier [164, 41] - [164, 45])
property: (property_identifier [164, 46] - [164, 53]))))))
(expression_statement [166, 6] - [176, 8]
(call_expression [166, 6] - [176, 7]
function: (member_expression [166, 6] - [166, 27]
object: (identifier [166, 6] - [166, 18])
property: (property_identifier [166, 19] - [166, 27]))
arguments: (arguments [166, 27] - [176, 7]
(member_expression [167, 8] - [167, 20]
object: (identifier [167, 8] - [167, 12])
property: (property_identifier [167, 13] - [167, 20]))
(string [168, 8] - [168, 27]
(string_fragment [168, 9] - [168, 26]))
(null [169, 8] - [169, 12])
(object [170, 8] - [174, 9]
(shorthand_property_identifier [171, 10] - [171, 16])
(shorthand_property_identifier [172, 10] - [172, 30])
(shorthand_property_identifier [173, 10] - [173, 28]))
(call_expression [175, 8] - [175, 22]
function: (identifier [175, 8] - [175, 19])
arguments: (arguments [175, 19] - [175, 22]
(identifier [175, 20] - [175, 21]))))))
(expression_statement [178, 6] - [178, 69]
(call_expression [178, 6] - [178, 68]
function: (identifier [178, 6] - [178, 15])
arguments: (arguments [178, 15] - [178, 68]
(identifier [178, 16] - [178, 17])
(string [178, 19] - [178, 48]
(string_fragment [178, 20] - [178, 47]))
(string [178, 50] - [178, 52])
(object [178, 54] - [178, 67]
(pair [178, 56] - [178, 65]
key: (property_identifier [178, 56] - [178, 62])
value: (number [178, 64] - [178, 65]))))))
(expression_statement [179, 6] - [179, 58]
(call_expression [179, 6] - [179, 57]
function: (identifier [179, 6] - [179, 15])
arguments: (arguments [179, 15] - [179, 57]
(identifier [179, 16] - [179, 17])
(string [179, 19] - [179, 37]
(string_fragment [179, 20] - [179, 36]))
(string [179, 39] - [179, 41])
(object [179, 43] - [179, 56]
(pair [179, 45] - [179, 54]
key: (property_identifier [179, 45] - [179, 51])
value: (number [179, 53] - [179, 54]))))))
(return_statement [181, 6] - [181, 39]
(call_expression [181, 13] - [181, 38]
function: (member_expression [181, 13] - [181, 19]
object: (identifier [181, 13] - [181, 14])
property: (property_identifier [181, 15] - [181, 19]))
arguments: (arguments [181, 19] - [181, 38]
(object [181, 20] - [181, 37]
(pair [181, 22] - [181, 35]
key: (property_identifier [181, 22] - [181, 29])
value: (true [181, 31] - [181, 35])))))))
alternative: (else_clause [182, 6] - [187, 5]
(statement_block [182, 11] - [187, 5]
(return_statement [183, 6] - [186, 8]
(call_expression [183, 13] - [186, 7]
function: (member_expression [183, 13] - [183, 19]
object: (identifier [183, 13] - [183, 14])
property: (property_identifier [183, 15] - [183, 19]))
arguments: (arguments [183, 19] - [186, 7]
(object [184, 8] - [184, 64]
(pair [184, 10] - [184, 62]
key: (property_identifier [184, 10] - [184, 15])
value: (string [184, 17] - [184, 62]
(string_fragment [184, 18] - [184, 61]))))
(number [185, 8] - [185, 11]))))))))
handler: (catch_clause [188, 4] - [191, 3]
parameter: (identifier [188, 11] - [188, 16])
type: (type_annotation [188, 16] - [188, 21]
(predefined_type [188, 18] - [188, 21]))
body: (statement_block [188, 23] - [191, 3]
(expression_statement [189, 4] - [189, 62]
(call_expression [189, 4] - [189, 61]
function: (member_expression [189, 4] - [189, 17]
object: (identifier [189, 4] - [189, 11])
property: (property_identifier [189, 12] - [189, 17]))
arguments: (arguments [189, 17] - [189, 61]
(string [189, 18] - [189, 53]
(string_fragment [189, 19] - [189, 52]))
(identifier [189, 55] - [189, 60]))))
(return_statement [190, 4] - [190, 76]
(call_expression [190, 11] - [190, 75]
function: (member_expression [190, 11] - [190, 17]
object: (identifier [190, 11] - [190, 12])
property: (property_identifier [190, 13] - [190, 17]))
arguments: (arguments [190, 17] - [190, 75]
(object [190, 18] - [190, 69]
(pair [190, 20] - [190, 67]
key: (property_identifier [190, 20] - [190, 25])
value: (binary_expression [190, 27] - [190, 67]
left: (member_expression [190, 27] - [190, 40]
object: (identifier [190, 27] - [190, 32])
property: (property_identifier [190, 33] - [190, 40]))
right: (string [190, 44] - [190, 67]
(string_fragment [190, 45] - [190, 66])))))
(number [190, 71] - [190, 74])))))))))))))

View File

@ -1,714 +0,0 @@
(program [0, 0] - [220, 0]
(import_statement [0, 0] - [0, 67]
(import_clause [0, 7] - [0, 29]
(named_imports [0, 7] - [0, 29]
(import_specifier [0, 9] - [0, 27]
name: (identifier [0, 9] - [0, 27]))))
source: (string [0, 35] - [0, 66]
(string_fragment [0, 36] - [0, 65])))
(export_statement [2, 0] - [219, 2]
declaration: (lexical_declaration [2, 7] - [219, 2]
(variable_declarator [2, 13] - [219, 1]
name: (identifier [2, 13] - [2, 33])
value: (arrow_function [2, 36] - [219, 1]
parameters: (formal_parameters [2, 36] - [4, 1]
(required_parameter [3, 2] - [3, 48]
pattern: (object_pattern [3, 2] - [3, 22]
(object_assignment_pattern [3, 4] - [3, 20]
left: (shorthand_property_identifier_pattern [3, 4] - [3, 15])
right: (string [3, 18] - [3, 20])))
type: (type_annotation [3, 22] - [3, 48]
(object_type [3, 24] - [3, 48]
(property_signature [3, 26] - [3, 46]
name: (property_identifier [3, 26] - [3, 37])
type: (type_annotation [3, 38] - [3, 46]
(predefined_type [3, 40] - [3, 46])))))))
body: (statement_block [4, 5] - [219, 1]
(return_statement [5, 2] - [218, 4]
(parenthesized_expression [5, 9] - [218, 3]
(jsx_element [6, 4] - [217, 25]
open_tag: (jsx_opening_element [6, 4] - [6, 47]
name: (identifier [6, 5] - [6, 23])
attribute: (jsx_attribute [6, 24] - [6, 46]
(property_identifier [6, 24] - [6, 29])
(string [6, 30] - [6, 46]
(string_fragment [6, 31] - [6, 45]))))
(jsx_element [7, 6] - [216, 12]
open_tag: (jsx_opening_element [7, 6] - [7, 11]
name: (identifier [7, 7] - [7, 10]))
(jsx_element [8, 8] - [27, 14]
open_tag: (jsx_opening_element [8, 8] - [8, 34]
name: (identifier [8, 9] - [8, 12])
attribute: (jsx_attribute [8, 13] - [8, 33]
(property_identifier [8, 13] - [8, 18])
(string [8, 19] - [8, 33]
(string_fragment [8, 20] - [8, 32]))))
(jsx_element [9, 10] - [22, 16]
open_tag: (jsx_opening_element [9, 10] - [9, 34]
name: (identifier [9, 11] - [9, 14])
attribute: (jsx_attribute [9, 15] - [9, 33]
(property_identifier [9, 15] - [9, 20])
(string [9, 21] - [9, 33]
(string_fragment [9, 22] - [9, 32]))))
(jsx_element [10, 12] - [21, 18]
open_tag: (jsx_opening_element [10, 12] - [19, 13]
name: (identifier [10, 13] - [10, 16])
attribute: (jsx_attribute [11, 14] - [11, 24]
(property_identifier [11, 14] - [11, 19])
(string [11, 20] - [11, 24]
(string_fragment [11, 21] - [11, 23])))
attribute: (jsx_attribute [12, 14] - [12, 25]
(property_identifier [12, 14] - [12, 20])
(string [12, 21] - [12, 25]
(string_fragment [12, 22] - [12, 24])))
attribute: (jsx_attribute [13, 14] - [13, 33]
(property_identifier [13, 14] - [13, 21])
(string [13, 22] - [13, 33]
(string_fragment [13, 23] - [13, 32])))
attribute: (jsx_attribute [14, 14] - [14, 25]
(property_identifier [14, 14] - [14, 18])
(string [14, 19] - [14, 25]
(string_fragment [14, 20] - [14, 24])))
attribute: (jsx_attribute [15, 14] - [15, 35]
(property_identifier [15, 14] - [15, 20])
(string [15, 21] - [15, 35]
(string_fragment [15, 22] - [15, 34])))
attribute: (jsx_attribute [16, 14] - [16, 32]
(property_identifier [16, 14] - [16, 26])
(string [16, 27] - [16, 32]
(string_fragment [16, 28] - [16, 31])))
attribute: (jsx_attribute [17, 14] - [17, 36]
(property_identifier [17, 14] - [17, 28])
(string [17, 29] - [17, 36]
(string_fragment [17, 30] - [17, 35])))
attribute: (jsx_attribute [18, 14] - [18, 37]
(property_identifier [18, 14] - [18, 29])
(string [18, 30] - [18, 37]
(string_fragment [18, 31] - [18, 36]))))
(jsx_element [20, 14] - [20, 75]
open_tag: (jsx_opening_element [20, 14] - [20, 68]
name: (identifier [20, 15] - [20, 19])
attribute: (jsx_attribute [20, 20] - [20, 67]
(property_identifier [20, 20] - [20, 21])
(string [20, 22] - [20, 67]
(string_fragment [20, 23] - [20, 66]))))
close_tag: (jsx_closing_element [20, 68] - [20, 75]
name: (identifier [20, 70] - [20, 74])))
close_tag: (jsx_closing_element [21, 12] - [21, 18]
name: (identifier [21, 14] - [21, 17])))
close_tag: (jsx_closing_element [22, 10] - [22, 16]
name: (identifier [22, 12] - [22, 15])))
(jsx_element [23, 10] - [23, 52]
open_tag: (jsx_opening_element [23, 10] - [23, 33]
name: (identifier [23, 11] - [23, 13])
attribute: (jsx_attribute [23, 14] - [23, 32]
(property_identifier [23, 14] - [23, 16])
(string [23, 17] - [23, 32]
(string_fragment [23, 18] - [23, 31]))))
(jsx_text [23, 33] - [23, 47])
close_tag: (jsx_closing_element [23, 47] - [23, 52]
name: (identifier [23, 49] - [23, 51])))
(jsx_element [24, 10] - [26, 14]
open_tag: (jsx_opening_element [24, 10] - [24, 52]
name: (identifier [24, 11] - [24, 12])
attribute: (jsx_attribute [24, 13] - [24, 29]
(property_identifier [24, 13] - [24, 18])
(string [24, 19] - [24, 29]
(string_fragment [24, 20] - [24, 28])))
attribute: (jsx_attribute [24, 30] - [24, 51]
(property_identifier [24, 30] - [24, 32])
(string [24, 33] - [24, 51]
(string_fragment [24, 34] - [24, 50]))))
(jsx_text [24, 52] - [26, 10])
close_tag: (jsx_closing_element [26, 10] - [26, 14]
name: (identifier [26, 12] - [26, 13])))
close_tag: (jsx_closing_element [27, 8] - [27, 14]
name: (identifier [27, 10] - [27, 13])))
(jsx_expression [29, 8] - [29, 41]
(comment [29, 9] - [29, 40]))
(jsx_element [30, 8] - [120, 14]
open_tag: (jsx_opening_element [30, 8] - [30, 33]
name: (identifier [30, 9] - [30, 12])
attribute: (jsx_attribute [30, 13] - [30, 32]
(property_identifier [30, 13] - [30, 15])
(string [30, 16] - [30, 32]
(string_fragment [30, 17] - [30, 31]))))
(jsx_element [31, 10] - [46, 16]
open_tag: (jsx_opening_element [31, 10] - [31, 65]
name: (identifier [31, 11] - [31, 14])
attribute: (jsx_attribute [31, 15] - [31, 64]
(property_identifier [31, 15] - [31, 20])
(string [31, 21] - [31, 64]
(string_fragment [31, 22] - [31, 63]))))
(jsx_element [32, 12] - [37, 20]
open_tag: (jsx_opening_element [32, 12] - [35, 13]
name: (identifier [32, 13] - [32, 18])
attribute: (jsx_attribute [33, 14] - [33, 28]
(property_identifier [33, 14] - [33, 17])
(string [33, 18] - [33, 28]
(string_fragment [33, 19] - [33, 27])))
attribute: (jsx_attribute [34, 14] - [34, 129]
(property_identifier [34, 14] - [34, 19])
(string [34, 20] - [34, 129]
(string_fragment [34, 21] - [34, 128]))))
(jsx_text [35, 13] - [37, 12])
close_tag: (jsx_closing_element [37, 12] - [37, 20]
name: (identifier [37, 14] - [37, 19])))
(jsx_self_closing_element [38, 12] - [45, 14]
name: (identifier [38, 13] - [38, 18])
attribute: (jsx_attribute [39, 14] - [39, 25]
(property_identifier [39, 14] - [39, 18])
(string [39, 19] - [39, 25]
(string_fragment [39, 20] - [39, 24])))
attribute: (jsx_attribute [40, 14] - [40, 27]
(property_identifier [40, 14] - [40, 16])
(string [40, 17] - [40, 27]
(string_fragment [40, 18] - [40, 26])))
attribute: (jsx_attribute [41, 14] - [41, 37]
(property_identifier [41, 14] - [41, 26])
(string [41, 27] - [41, 37]
(string_fragment [41, 28] - [41, 36])))
attribute: (jsx_attribute [42, 14] - [42, 44]
(property_identifier [42, 14] - [42, 25])
(string [42, 26] - [42, 44]
(string_fragment [42, 27] - [42, 43])))
attribute: (jsx_attribute [43, 14] - [43, 22]
(property_identifier [43, 14] - [43, 22]))
attribute: (jsx_attribute [44, 14] - [44, 38]
(property_identifier [44, 14] - [44, 23])
(jsx_expression [44, 24] - [44, 38]
(unary_expression [44, 25] - [44, 37]
argument: (identifier [44, 26] - [44, 37])))))
close_tag: (jsx_closing_element [46, 10] - [46, 16]
name: (identifier [46, 12] - [46, 15])))
(jsx_element [48, 10] - [62, 16]
open_tag: (jsx_opening_element [48, 10] - [48, 64]
name: (identifier [48, 11] - [48, 14])
attribute: (jsx_attribute [48, 15] - [48, 63]
(property_identifier [48, 15] - [48, 20])
(string [48, 21] - [48, 63]
(string_fragment [48, 22] - [48, 62]))))
(jsx_element [49, 12] - [54, 20]
open_tag: (jsx_opening_element [49, 12] - [52, 13]
name: (identifier [49, 13] - [49, 18])
attribute: (jsx_attribute [50, 14] - [50, 30]
(property_identifier [50, 14] - [50, 17])
(string [50, 18] - [50, 30]
(string_fragment [50, 19] - [50, 29])))
attribute: (jsx_attribute [51, 14] - [51, 129]
(property_identifier [51, 14] - [51, 19])
(string [51, 20] - [51, 129]
(string_fragment [51, 21] - [51, 128]))))
(jsx_text [52, 13] - [54, 12])
close_tag: (jsx_closing_element [54, 12] - [54, 20]
name: (identifier [54, 14] - [54, 19])))
(jsx_self_closing_element [55, 12] - [61, 14]
name: (identifier [55, 13] - [55, 18])
attribute: (jsx_attribute [56, 14] - [56, 25]
(property_identifier [56, 14] - [56, 18])
(string [56, 19] - [56, 25]
(string_fragment [56, 20] - [56, 24])))
attribute: (jsx_attribute [57, 14] - [57, 29]
(property_identifier [57, 14] - [57, 16])
(string [57, 17] - [57, 29]
(string_fragment [57, 18] - [57, 28])))
attribute: (jsx_attribute [58, 14] - [58, 49]
(property_identifier [58, 14] - [58, 25])
(string [58, 26] - [58, 49]
(string_fragment [58, 27] - [58, 48])))
attribute: (jsx_attribute [59, 14] - [59, 33]
(property_identifier [59, 14] - [59, 19])
(jsx_expression [59, 20] - [59, 33]
(identifier [59, 21] - [59, 32])))
attribute: (jsx_attribute [60, 14] - [60, 22]
(property_identifier [60, 14] - [60, 22])))
close_tag: (jsx_closing_element [62, 10] - [62, 16]
name: (identifier [62, 12] - [62, 15])))
(jsx_element [64, 10] - [85, 19]
open_tag: (jsx_opening_element [64, 10] - [69, 11]
name: (identifier [64, 11] - [64, 17])
attribute: (jsx_attribute [65, 12] - [65, 25]
(property_identifier [65, 12] - [65, 16])
(string [65, 17] - [65, 25]
(string_fragment [65, 18] - [65, 24])))
attribute: (jsx_attribute [66, 12] - [66, 28]
(property_identifier [66, 12] - [66, 14])
(string [66, 15] - [66, 28]
(string_fragment [66, 16] - [66, 27])))
attribute: (jsx_attribute [67, 12] - [67, 31]
(property_identifier [67, 12] - [67, 17])
(string [67, 18] - [67, 31]
(string_fragment [67, 19] - [67, 30])))
attribute: (jsx_attribute [68, 12] - [68, 130]
(property_identifier [68, 12] - [68, 17])
(string [68, 18] - [68, 130]
(string_fragment [68, 19] - [68, 129]))))
(jsx_element [70, 12] - [83, 18]
open_tag: (jsx_opening_element [70, 12] - [79, 13]
name: (identifier [70, 13] - [70, 16])
attribute: (jsx_attribute [71, 14] - [71, 24]
(property_identifier [71, 14] - [71, 19])
(string [71, 20] - [71, 24]
(string_fragment [71, 21] - [71, 23])))
attribute: (jsx_attribute [72, 14] - [72, 25]
(property_identifier [72, 14] - [72, 20])
(string [72, 21] - [72, 25]
(string_fragment [72, 22] - [72, 24])))
attribute: (jsx_attribute [73, 14] - [73, 33]
(property_identifier [73, 14] - [73, 21])
(string [73, 22] - [73, 33]
(string_fragment [73, 23] - [73, 32])))
attribute: (jsx_attribute [74, 14] - [74, 25]
(property_identifier [74, 14] - [74, 18])
(string [74, 19] - [74, 25]
(string_fragment [74, 20] - [74, 24])))
attribute: (jsx_attribute [75, 14] - [75, 35]
(property_identifier [75, 14] - [75, 20])
(string [75, 21] - [75, 35]
(string_fragment [75, 22] - [75, 34])))
attribute: (jsx_attribute [76, 14] - [76, 30]
(property_identifier [76, 14] - [76, 26])
(string [76, 27] - [76, 30]
(string_fragment [76, 28] - [76, 29])))
attribute: (jsx_attribute [77, 14] - [77, 36]
(property_identifier [77, 14] - [77, 28])
(string [77, 29] - [77, 36]
(string_fragment [77, 30] - [77, 35])))
attribute: (jsx_attribute [78, 14] - [78, 37]
(property_identifier [78, 14] - [78, 29])
(string [78, 30] - [78, 37]
(string_fragment [78, 31] - [78, 36]))))
(jsx_element [80, 14] - [80, 58]
open_tag: (jsx_opening_element [80, 14] - [80, 49]
name: (identifier [80, 15] - [80, 21])
attribute: (jsx_attribute [80, 22] - [80, 30]
(property_identifier [80, 22] - [80, 24])
(string [80, 25] - [80, 30]
(string_fragment [80, 26] - [80, 29])))
attribute: (jsx_attribute [80, 31] - [80, 40]
(property_identifier [80, 31] - [80, 33])
(string [80, 34] - [80, 40]
(string_fragment [80, 35] - [80, 39])))
attribute: (jsx_attribute [80, 41] - [80, 48]
(property_identifier [80, 41] - [80, 42])
(string [80, 43] - [80, 48]
(string_fragment [80, 44] - [80, 47]))))
close_tag: (jsx_closing_element [80, 49] - [80, 58]
name: (identifier [80, 51] - [80, 57])))
(jsx_element [81, 14] - [81, 45]
open_tag: (jsx_opening_element [81, 14] - [81, 38]
name: (identifier [81, 15] - [81, 19])
attribute: (jsx_attribute [81, 20] - [81, 37]
(property_identifier [81, 20] - [81, 21])
(string [81, 22] - [81, 37]
(string_fragment [81, 23] - [81, 36]))))
close_tag: (jsx_closing_element [81, 38] - [81, 45]
name: (identifier [81, 40] - [81, 44])))
(jsx_element [82, 14] - [82, 55]
open_tag: (jsx_opening_element [82, 14] - [82, 48]
name: (identifier [82, 15] - [82, 19])
attribute: (jsx_attribute [82, 20] - [82, 47]
(property_identifier [82, 20] - [82, 21])
(string [82, 22] - [82, 47]
(string_fragment [82, 23] - [82, 46]))))
close_tag: (jsx_closing_element [82, 48] - [82, 55]
name: (identifier [82, 50] - [82, 54])))
close_tag: (jsx_closing_element [83, 12] - [83, 18]
name: (identifier [83, 14] - [83, 17])))
(jsx_element [84, 12] - [84, 48]
open_tag: (jsx_opening_element [84, 12] - [84, 18]
name: (identifier [84, 13] - [84, 17]))
(jsx_text [84, 18] - [84, 41])
close_tag: (jsx_closing_element [84, 41] - [84, 48]
name: (identifier [84, 43] - [84, 47])))
close_tag: (jsx_closing_element [85, 10] - [85, 19]
name: (identifier [85, 12] - [85, 18])))
(jsx_element [87, 10] - [112, 16]
open_tag: (jsx_opening_element [87, 10] - [90, 11]
name: (identifier [87, 11] - [87, 14])
attribute: (jsx_attribute [88, 12] - [88, 33]
(property_identifier [88, 12] - [88, 14])
(string [88, 15] - [88, 33]
(string_fragment [88, 16] - [88, 32])))
attribute: (jsx_attribute [89, 12] - [89, 135]
(property_identifier [89, 12] - [89, 17])
(string [89, 18] - [89, 135]
(string_fragment [89, 19] - [89, 134]))))
(jsx_element [91, 12] - [111, 18]
open_tag: (jsx_opening_element [91, 12] - [91, 81]
name: (identifier [91, 13] - [91, 16])
attribute: (jsx_attribute [91, 17] - [91, 80]
(property_identifier [91, 17] - [91, 22])
(string [91, 23] - [91, 80]
(string_fragment [91, 24] - [91, 79]))))
(jsx_element [92, 14] - [109, 20]
open_tag: (jsx_opening_element [92, 14] - [100, 15]
name: (identifier [92, 15] - [92, 18])
attribute: (jsx_attribute [93, 16] - [93, 59]
(property_identifier [93, 16] - [93, 21])
(string [93, 22] - [93, 59]
(string_fragment [93, 23] - [93, 58])))
attribute: (jsx_attribute [94, 16] - [94, 26]
(property_identifier [94, 16] - [94, 21])
(string [94, 22] - [94, 26]
(string_fragment [94, 23] - [94, 25])))
attribute: (jsx_attribute [95, 16] - [95, 27]
(property_identifier [95, 16] - [95, 22])
(string [95, 23] - [95, 27]
(string_fragment [95, 24] - [95, 26])))
attribute: (jsx_attribute [96, 16] - [96, 35]
(property_identifier [96, 16] - [96, 23])
(string [96, 24] - [96, 35]
(string_fragment [96, 25] - [96, 34])))
attribute: (jsx_attribute [97, 16] - [97, 27]
(property_identifier [97, 16] - [97, 20])
(string [97, 21] - [97, 27]
(string_fragment [97, 22] - [97, 26])))
attribute: (jsx_attribute [98, 16] - [98, 37]
(property_identifier [98, 16] - [98, 22])
(string [98, 23] - [98, 37]
(string_fragment [98, 24] - [98, 36])))
attribute: (jsx_attribute [99, 16] - [99, 34]
(property_identifier [99, 16] - [99, 28])
(string [99, 29] - [99, 34]
(string_fragment [99, 30] - [99, 33]))))
(jsx_element [101, 16] - [108, 25]
open_tag: (jsx_opening_element [101, 16] - [107, 17]
name: (identifier [101, 17] - [101, 23])
attribute: (jsx_attribute [102, 18] - [102, 25]
(property_identifier [102, 18] - [102, 20])
(string [102, 21] - [102, 25]
(string_fragment [102, 22] - [102, 24])))
attribute: (jsx_attribute [103, 18] - [103, 25]
(property_identifier [103, 18] - [103, 20])
(string [103, 21] - [103, 25]
(string_fragment [103, 22] - [103, 24])))
attribute: (jsx_attribute [104, 18] - [104, 24]
(property_identifier [104, 18] - [104, 19])
(string [104, 20] - [104, 24]
(string_fragment [104, 21] - [104, 23])))
attribute: (jsx_attribute [105, 18] - [105, 39]
(property_identifier [105, 18] - [105, 34])
(string [105, 35] - [105, 39]
(string_fragment [105, 36] - [105, 38])))
attribute: (jsx_attribute [106, 18] - [106, 40]
(property_identifier [106, 18] - [106, 35])
(string [106, 36] - [106, 40]
(string_fragment [106, 37] - [106, 39]))))
close_tag: (jsx_closing_element [108, 16] - [108, 25]
name: (identifier [108, 18] - [108, 24])))
close_tag: (jsx_closing_element [109, 14] - [109, 20]
name: (identifier [109, 16] - [109, 19])))
(jsx_element [110, 14] - [110, 65]
open_tag: (jsx_opening_element [110, 14] - [110, 20]
name: (identifier [110, 15] - [110, 19]))
(jsx_text [110, 20] - [110, 58])
close_tag: (jsx_closing_element [110, 58] - [110, 65]
name: (identifier [110, 60] - [110, 64])))
close_tag: (jsx_closing_element [111, 12] - [111, 18]
name: (identifier [111, 14] - [111, 17])))
close_tag: (jsx_closing_element [112, 10] - [112, 16]
name: (identifier [112, 12] - [112, 15])))
(jsx_element [114, 10] - [114, 40]
open_tag: (jsx_opening_element [114, 10] - [114, 34]
name: (identifier [114, 11] - [114, 14])
attribute: (jsx_attribute [114, 15] - [114, 33]
(property_identifier [114, 15] - [114, 17])
(string [114, 18] - [114, 33]
(string_fragment [114, 19] - [114, 32]))))
close_tag: (jsx_closing_element [114, 34] - [114, 40]
name: (identifier [114, 36] - [114, 39])))
(jsx_element [116, 10] - [119, 16]
open_tag: (jsx_opening_element [116, 10] - [116, 29]
name: (identifier [116, 11] - [116, 14])
attribute: (jsx_attribute [116, 15] - [116, 28]
(property_identifier [116, 15] - [116, 20])
(string [116, 21] - [116, 28]
(string_fragment [116, 22] - [116, 27]))))
(jsx_text [116, 29] - [117, 32])
(jsx_element [117, 32] - [117, 60]
open_tag: (jsx_opening_element [117, 32] - [117, 49]
name: (identifier [117, 33] - [117, 34])
attribute: (jsx_attribute [117, 35] - [117, 48]
(property_identifier [117, 35] - [117, 39])
(string [117, 40] - [117, 48]
(string_fragment [117, 41] - [117, 47]))))
(jsx_text [117, 49] - [117, 56])
close_tag: (jsx_closing_element [117, 56] - [117, 60]
name: (identifier [117, 58] - [117, 59])))
(jsx_text [117, 60] - [117, 62])
(jsx_expression [117, 62] - [117, 67]
(string [117, 63] - [117, 66]
(string_fragment [117, 64] - [117, 65])))
(jsx_element [118, 12] - [118, 45]
open_tag: (jsx_opening_element [118, 12] - [118, 28]
name: (identifier [118, 13] - [118, 14])
attribute: (jsx_attribute [118, 15] - [118, 27]
(property_identifier [118, 15] - [118, 19])
(string [118, 20] - [118, 27]
(string_fragment [118, 21] - [118, 26]))))
(jsx_text [118, 28] - [118, 41])
close_tag: (jsx_closing_element [118, 41] - [118, 45]
name: (identifier [118, 43] - [118, 44])))
close_tag: (jsx_closing_element [119, 10] - [119, 16]
name: (identifier [119, 12] - [119, 15])))
close_tag: (jsx_closing_element [120, 8] - [120, 14]
name: (identifier [120, 10] - [120, 13])))
(jsx_expression [122, 8] - [122, 58]
(comment [122, 9] - [122, 57]))
(jsx_element [123, 8] - [183, 14]
open_tag: (jsx_opening_element [123, 8] - [123, 74]
name: (identifier [123, 9] - [123, 12])
attribute: (jsx_attribute [123, 13] - [123, 32]
(property_identifier [123, 13] - [123, 15])
(string [123, 16] - [123, 32]
(string_fragment [123, 17] - [123, 31])))
attribute: (jsx_attribute [123, 33] - [123, 73]
(property_identifier [123, 33] - [123, 38])
(string [123, 39] - [123, 73]
(string_fragment [123, 40] - [123, 72]))))
(jsx_element [124, 10] - [142, 16]
open_tag: (jsx_opening_element [124, 10] - [124, 166]
name: (identifier [124, 11] - [124, 14])
attribute: (jsx_attribute [124, 15] - [124, 165]
(property_identifier [124, 15] - [124, 20])
(string [124, 21] - [124, 165]
(string_fragment [124, 22] - [124, 164]))))
(jsx_element [125, 12] - [137, 18]
open_tag: (jsx_opening_element [125, 12] - [125, 144]
name: (identifier [125, 13] - [125, 16])
attribute: (jsx_attribute [125, 17] - [125, 143]
(property_identifier [125, 17] - [125, 22])
(string [125, 23] - [125, 143]
(string_fragment [125, 24] - [125, 142]))))
(jsx_element [126, 14] - [135, 20]
open_tag: (jsx_opening_element [126, 14] - [133, 15]
name: (identifier [126, 15] - [126, 18])
attribute: (jsx_attribute [127, 16] - [127, 26]
(property_identifier [127, 16] - [127, 21])
(string [127, 22] - [127, 26]
(string_fragment [127, 23] - [127, 25])))
attribute: (jsx_attribute [128, 16] - [128, 27]
(property_identifier [128, 16] - [128, 22])
(string [128, 23] - [128, 27]
(string_fragment [128, 24] - [128, 26])))
attribute: (jsx_attribute [129, 16] - [129, 35]
(property_identifier [129, 16] - [129, 23])
(string [129, 24] - [129, 35]
(string_fragment [129, 25] - [129, 34])))
attribute: (jsx_attribute [130, 16] - [130, 27]
(property_identifier [130, 16] - [130, 20])
(string [130, 21] - [130, 27]
(string_fragment [130, 22] - [130, 26])))
attribute: (jsx_attribute [131, 16] - [131, 37]
(property_identifier [131, 16] - [131, 22])
(string [131, 23] - [131, 37]
(string_fragment [131, 24] - [131, 36])))
attribute: (jsx_attribute [132, 16] - [132, 32]
(property_identifier [132, 16] - [132, 28])
(string [132, 29] - [132, 32]
(string_fragment [132, 30] - [132, 31]))))
(jsx_element [134, 16] - [134, 61]
open_tag: (jsx_opening_element [134, 16] - [134, 50]
name: (identifier [134, 17] - [134, 25])
attribute: (jsx_attribute [134, 26] - [134, 49]
(property_identifier [134, 26] - [134, 32])
(string [134, 33] - [134, 49]
(string_fragment [134, 34] - [134, 48]))))
close_tag: (jsx_closing_element [134, 50] - [134, 61]
name: (identifier [134, 52] - [134, 60])))
close_tag: (jsx_closing_element [135, 14] - [135, 20]
name: (identifier [135, 16] - [135, 19])))
(jsx_element [136, 14] - [136, 44]
open_tag: (jsx_opening_element [136, 14] - [136, 20]
name: (identifier [136, 15] - [136, 19]))
(jsx_text [136, 20] - [136, 37])
close_tag: (jsx_closing_element [136, 37] - [136, 44]
name: (identifier [136, 39] - [136, 43])))
close_tag: (jsx_closing_element [137, 12] - [137, 18]
name: (identifier [137, 14] - [137, 17])))
(jsx_element [138, 12] - [141, 16]
open_tag: (jsx_opening_element [138, 12] - [138, 82]
name: (identifier [138, 13] - [138, 14])
attribute: (jsx_attribute [138, 15] - [138, 81]
(property_identifier [138, 15] - [138, 20])
(string [138, 21] - [138, 81]
(string_fragment [138, 22] - [138, 80]))))
(jsx_text [138, 82] - [141, 12])
close_tag: (jsx_closing_element [141, 12] - [141, 16]
name: (identifier [141, 14] - [141, 15])))
close_tag: (jsx_closing_element [142, 10] - [142, 16]
name: (identifier [142, 12] - [142, 15])))
(jsx_element [144, 10] - [146, 18]
open_tag: (jsx_opening_element [144, 10] - [144, 131]
name: (identifier [144, 11] - [144, 16])
attribute: (jsx_attribute [144, 17] - [144, 130]
(property_identifier [144, 17] - [144, 22])
(string [144, 23] - [144, 130]
(string_fragment [144, 24] - [144, 129]))))
(jsx_text [144, 131] - [146, 10])
close_tag: (jsx_closing_element [146, 10] - [146, 18]
name: (identifier [146, 12] - [146, 17])))
(jsx_element [148, 10] - [153, 16]
open_tag: (jsx_opening_element [148, 10] - [151, 11]
name: (identifier [148, 11] - [148, 14])
attribute: (jsx_attribute [149, 12] - [149, 25]
(property_identifier [149, 12] - [149, 14])
(string [149, 15] - [149, 25]
(string_fragment [149, 16] - [149, 24])))
attribute: (jsx_attribute [150, 12] - [150, 229]
(property_identifier [150, 12] - [150, 17])
(string [150, 18] - [150, 229]
(string_fragment [150, 19] - [150, 228]))))
(jsx_expression [152, 12] - [152, 41]
(comment [152, 13] - [152, 40]))
close_tag: (jsx_closing_element [153, 10] - [153, 16]
name: (identifier [153, 12] - [153, 15])))
(jsx_element [155, 10] - [174, 19]
open_tag: (jsx_opening_element [155, 10] - [160, 11]
name: (identifier [155, 11] - [155, 17])
attribute: (jsx_attribute [156, 12] - [156, 25]
(property_identifier [156, 12] - [156, 16])
(string [156, 17] - [156, 25]
(string_fragment [156, 18] - [156, 24])))
attribute: (jsx_attribute [157, 12] - [157, 29]
(property_identifier [157, 12] - [157, 14])
(string [157, 15] - [157, 29]
(string_fragment [157, 16] - [157, 28])))
attribute: (jsx_attribute [158, 12] - [158, 31]
(property_identifier [158, 12] - [158, 17])
(string [158, 18] - [158, 31]
(string_fragment [158, 19] - [158, 30])))
attribute: (jsx_attribute [159, 12] - [159, 55]
(property_identifier [159, 12] - [159, 17])
(string [159, 18] - [159, 55]
(string_fragment [159, 19] - [159, 54]))))
(jsx_element [161, 12] - [172, 18]
open_tag: (jsx_opening_element [161, 12] - [168, 13]
name: (identifier [161, 13] - [161, 16])
attribute: (jsx_attribute [162, 14] - [162, 24]
(property_identifier [162, 14] - [162, 19])
(string [162, 20] - [162, 24]
(string_fragment [162, 21] - [162, 23])))
attribute: (jsx_attribute [163, 14] - [163, 25]
(property_identifier [163, 14] - [163, 20])
(string [163, 21] - [163, 25]
(string_fragment [163, 22] - [163, 24])))
attribute: (jsx_attribute [164, 14] - [164, 33]
(property_identifier [164, 14] - [164, 21])
(string [164, 22] - [164, 33]
(string_fragment [164, 23] - [164, 32])))
attribute: (jsx_attribute [165, 14] - [165, 25]
(property_identifier [165, 14] - [165, 18])
(string [165, 19] - [165, 25]
(string_fragment [165, 20] - [165, 24])))
attribute: (jsx_attribute [166, 14] - [166, 35]
(property_identifier [166, 14] - [166, 20])
(string [166, 21] - [166, 35]
(string_fragment [166, 22] - [166, 34])))
attribute: (jsx_attribute [167, 14] - [167, 30]
(property_identifier [167, 14] - [167, 26])
(string [167, 27] - [167, 30]
(string_fragment [167, 28] - [167, 29]))))
(jsx_element [169, 14] - [169, 76]
open_tag: (jsx_opening_element [169, 14] - [169, 69]
name: (identifier [169, 15] - [169, 19])
attribute: (jsx_attribute [169, 20] - [169, 30]
(property_identifier [169, 20] - [169, 25])
(string [169, 26] - [169, 30]
(string_fragment [169, 27] - [169, 29])))
attribute: (jsx_attribute [169, 31] - [169, 42]
(property_identifier [169, 31] - [169, 37])
(string [169, 38] - [169, 42]
(string_fragment [169, 39] - [169, 41])))
attribute: (jsx_attribute [169, 43] - [169, 48]
(property_identifier [169, 43] - [169, 44])
(string [169, 45] - [169, 48]
(string_fragment [169, 46] - [169, 47])))
attribute: (jsx_attribute [169, 49] - [169, 54]
(property_identifier [169, 49] - [169, 50])
(string [169, 51] - [169, 54]
(string_fragment [169, 52] - [169, 53])))
attribute: (jsx_attribute [169, 55] - [169, 61]
(property_identifier [169, 55] - [169, 57])
(string [169, 58] - [169, 61]
(string_fragment [169, 59] - [169, 60])))
attribute: (jsx_attribute [169, 62] - [169, 68]
(property_identifier [169, 62] - [169, 64])
(string [169, 65] - [169, 68]
(string_fragment [169, 66] - [169, 67]))))
close_tag: (jsx_closing_element [169, 69] - [169, 76]
name: (identifier [169, 71] - [169, 75])))
(jsx_element [170, 14] - [171, 21]
open_tag: (jsx_opening_element [170, 14] - [170, 80]
name: (identifier [170, 15] - [170, 19])
attribute: (jsx_attribute [170, 20] - [170, 79]
(property_identifier [170, 20] - [170, 21])
(string [170, 22] - [170, 79]
(string_fragment [170, 23] - [170, 78]))))
close_tag: (jsx_closing_element [171, 14] - [171, 21]
name: (identifier [171, 16] - [171, 20])))
close_tag: (jsx_closing_element [172, 12] - [172, 18]
name: (identifier [172, 14] - [172, 17])))
(jsx_element [173, 12] - [173, 39]
open_tag: (jsx_opening_element [173, 12] - [173, 18]
name: (identifier [173, 13] - [173, 17]))
(jsx_text [173, 18] - [173, 32])
close_tag: (jsx_closing_element [173, 32] - [173, 39]
name: (identifier [173, 34] - [173, 38])))
close_tag: (jsx_closing_element [174, 10] - [174, 19]
name: (identifier [174, 12] - [174, 18])))
(jsx_element [176, 10] - [182, 14]
open_tag: (jsx_opening_element [176, 10] - [180, 11]
name: (identifier [176, 11] - [176, 12])
attribute: (jsx_attribute [177, 12] - [177, 29]
(property_identifier [177, 12] - [177, 16])
(string [177, 17] - [177, 29]
(string_fragment [177, 18] - [177, 28])))
attribute: (jsx_attribute [178, 12] - [178, 31]
(property_identifier [178, 12] - [178, 17])
(string [178, 18] - [178, 31]
(string_fragment [178, 19] - [178, 30])))
attribute: (jsx_attribute [179, 12] - [179, 73]
(property_identifier [179, 12] - [179, 17])
(string [179, 18] - [179, 73]
(string_fragment [179, 19] - [179, 72]))))
(jsx_text [180, 11] - [182, 10])
close_tag: (jsx_closing_element [182, 10] - [182, 14]
name: (identifier [182, 12] - [182, 13])))
close_tag: (jsx_closing_element [183, 8] - [183, 14]
name: (identifier [183, 10] - [183, 13])))
(jsx_element [185, 8] - [212, 16]
open_tag: (jsx_opening_element [185, 8] - [185, 15]
name: (identifier [185, 9] - [185, 14]))
(jsx_expression [186, 10] - [211, 12]
(template_string [186, 11] - [211, 11]
(string_fragment [186, 12] - [211, 10])))
close_tag: (jsx_closing_element [212, 8] - [212, 16]
name: (identifier [212, 10] - [212, 15])))
(jsx_element [214, 8] - [214, 58]
open_tag: (jsx_opening_element [214, 8] - [214, 49]
name: (identifier [214, 9] - [214, 15])
attribute: (jsx_attribute [214, 16] - [214, 48]
(property_identifier [214, 16] - [214, 19])
(string [214, 20] - [214, 48]
(string_fragment [214, 21] - [214, 47]))))
close_tag: (jsx_closing_element [214, 49] - [214, 58]
name: (identifier [214, 51] - [214, 57])))
(jsx_element [215, 8] - [215, 74]
open_tag: (jsx_opening_element [215, 8] - [215, 65]
name: (identifier [215, 9] - [215, 15])
attribute: (jsx_attribute [215, 16] - [215, 29]
(property_identifier [215, 16] - [215, 20])
(string [215, 21] - [215, 29]
(string_fragment [215, 22] - [215, 28])))
attribute: (jsx_attribute [215, 30] - [215, 64]
(property_identifier [215, 30] - [215, 33])
(string [215, 34] - [215, 64]
(string_fragment [215, 35] - [215, 63]))))
close_tag: (jsx_closing_element [215, 65] - [215, 74]
name: (identifier [215, 67] - [215, 73])))
close_tag: (jsx_closing_element [216, 6] - [216, 12]
name: (identifier [216, 8] - [216, 11])))
close_tag: (jsx_closing_element [217, 4] - [217, 25]
name: (identifier [217, 6] - [217, 24])))))))))))

File diff suppressed because it is too large Load Diff

View File

@ -1,710 +0,0 @@
(program [0, 0] - [200, 0]
(import_statement [0, 0] - [0, 68]
(import_clause [0, 7] - [0, 30]
(named_imports [0, 7] - [0, 30]
(import_specifier [0, 9] - [0, 28]
name: (identifier [0, 9] - [0, 28]))))
source: (string [0, 36] - [0, 67]
(string_fragment [0, 37] - [0, 66])))
(export_statement [2, 0] - [199, 2]
declaration: (lexical_declaration [2, 7] - [199, 2]
(variable_declarator [2, 13] - [199, 1]
name: (identifier [2, 13] - [2, 35])
value: (arrow_function [2, 38] - [199, 1]
parameters: (formal_parameters [2, 38] - [8, 2]
(required_parameter [2, 39] - [8, 1]
pattern: (object_pattern [2, 39] - [5, 1]
(object_assignment_pattern [3, 2] - [3, 12]
left: (shorthand_property_identifier_pattern [3, 2] - [3, 7])
right: (array [3, 10] - [3, 12]))
(object_assignment_pattern [4, 2] - [4, 11]
left: (shorthand_property_identifier_pattern [4, 2] - [4, 6])
right: (array [4, 9] - [4, 11])))
type: (type_annotation [5, 1] - [8, 1]
(object_type [5, 3] - [8, 1]
(property_signature [6, 2] - [6, 15]
name: (property_identifier [6, 2] - [6, 7])
type: (type_annotation [6, 8] - [6, 15]
(array_type [6, 10] - [6, 15]
(predefined_type [6, 10] - [6, 13]))))
(property_signature [7, 2] - [7, 14]
name: (property_identifier [7, 2] - [7, 6])
type: (type_annotation [7, 7] - [7, 14]
(array_type [7, 9] - [7, 14]
(predefined_type [7, 9] - [7, 12]))))))))
body: (statement_block [8, 6] - [199, 1]
(return_statement [9, 2] - [198, 4]
(parenthesized_expression [9, 9] - [198, 3]
(jsx_element [10, 4] - [197, 26]
open_tag: (jsx_opening_element [10, 4] - [13, 5]
name: (identifier [10, 5] - [10, 24])
attribute: (jsx_attribute [11, 6] - [11, 39]
(property_identifier [11, 6] - [11, 11])
(string [11, 12] - [11, 39]
(string_fragment [11, 13] - [11, 38])))
attribute: (jsx_attribute [12, 6] - [12, 32]
(property_identifier [12, 6] - [12, 17])
(string [12, 18] - [12, 32]
(string_fragment [12, 19] - [12, 31]))))
(jsx_element [14, 6] - [32, 12]
open_tag: (jsx_opening_element [14, 6] - [14, 142]
name: (identifier [14, 7] - [14, 10])
attribute: (jsx_attribute [14, 11] - [14, 141]
(property_identifier [14, 11] - [14, 16])
(string [14, 17] - [14, 141]
(string_fragment [14, 18] - [14, 140]))))
(jsx_element [15, 8] - [22, 14]
open_tag: (jsx_opening_element [15, 8] - [15, 13]
name: (identifier [15, 9] - [15, 12]))
(jsx_element [16, 10] - [18, 15]
open_tag: (jsx_opening_element [16, 10] - [16, 110]
name: (identifier [16, 11] - [16, 13])
attribute: (jsx_attribute [16, 14] - [16, 109]
(property_identifier [16, 14] - [16, 19])
(string [16, 20] - [16, 109]
(string_fragment [16, 21] - [16, 108]))))
(jsx_text [16, 110] - [17, 17])
(ERROR [17, 17] - [17, 37]
(identifier [17, 19] - [17, 29])
(identifier [17, 30] - [17, 37]))
close_tag: (jsx_closing_element [18, 10] - [18, 15]
name: (identifier [18, 12] - [18, 14])))
(jsx_element [19, 10] - [21, 14]
open_tag: (jsx_opening_element [19, 10] - [19, 82]
name: (identifier [19, 11] - [19, 12])
attribute: (jsx_attribute [19, 13] - [19, 81]
(property_identifier [19, 13] - [19, 18])
(string [19, 19] - [19, 81]
(string_fragment [19, 20] - [19, 80]))))
(jsx_text [19, 82] - [21, 10])
close_tag: (jsx_closing_element [21, 10] - [21, 14]
name: (identifier [21, 12] - [21, 13])))
close_tag: (jsx_closing_element [22, 8] - [22, 14]
name: (identifier [22, 10] - [22, 13])))
(jsx_element [24, 8] - [31, 17]
open_tag: (jsx_opening_element [24, 8] - [29, 9]
name: (identifier [24, 9] - [24, 15])
attribute: (jsx_attribute [25, 10] - [25, 23]
(property_identifier [25, 10] - [25, 14])
(string [25, 15] - [25, 23]
(string_fragment [25, 16] - [25, 22])))
attribute: (jsx_attribute [26, 10] - [26, 29]
(property_identifier [26, 10] - [26, 15])
(string [26, 16] - [26, 29]
(string_fragment [26, 17] - [26, 28])))
attribute: (jsx_attribute [27, 10] - [27, 35]
(property_identifier [27, 10] - [27, 15])
(string [27, 16] - [27, 35]
(string_fragment [27, 17] - [27, 34])))
attribute: (jsx_attribute [28, 10] - [28, 42]
(property_identifier [28, 10] - [28, 17])
(string [28, 18] - [28, 42]
(string_fragment [28, 19] - [28, 41]))))
(jsx_text [29, 9] - [31, 8])
close_tag: (jsx_closing_element [31, 8] - [31, 17]
name: (identifier [31, 10] - [31, 16])))
close_tag: (jsx_closing_element [32, 6] - [32, 12]
name: (identifier [32, 8] - [32, 11])))
(jsx_expression [34, 6] - [34, 44]
(comment [34, 7] - [34, 43]))
(jsx_element [35, 6] - [115, 12]
open_tag: (jsx_opening_element [35, 6] - [39, 7]
name: (identifier [35, 7] - [35, 10])
attribute: (jsx_attribute [36, 8] - [36, 23]
(property_identifier [36, 8] - [36, 10])
(string [36, 11] - [36, 23]
(string_fragment [36, 12] - [36, 22])))
attribute: (jsx_attribute [37, 8] - [37, 20]
(property_identifier [37, 8] - [37, 13])
(string [37, 14] - [37, 20]
(string_fragment [37, 15] - [37, 19])))
attribute: (jsx_attribute [38, 8] - [38, 92]
(property_identifier [38, 8] - [38, 13])
(string [38, 14] - [38, 92]
(string_fragment [38, 15] - [38, 91]))))
(jsx_element [40, 8] - [54, 14]
open_tag: (jsx_opening_element [40, 8] - [40, 110]
name: (identifier [40, 9] - [40, 12])
attribute: (jsx_attribute [40, 13] - [40, 109]
(property_identifier [40, 13] - [40, 18])
(string [40, 19] - [40, 109]
(string_fragment [40, 20] - [40, 108]))))
(jsx_element [41, 10] - [46, 15]
open_tag: (jsx_opening_element [41, 10] - [44, 11]
name: (identifier [41, 11] - [41, 13])
attribute: (jsx_attribute [42, 12] - [42, 32]
(property_identifier [42, 12] - [42, 14])
(string [42, 15] - [42, 32]
(string_fragment [42, 16] - [42, 31])))
attribute: (jsx_attribute [43, 12] - [43, 58]
(property_identifier [43, 12] - [43, 17])
(string [43, 18] - [43, 58]
(string_fragment [43, 19] - [43, 57]))))
(jsx_text [44, 11] - [46, 10])
close_tag: (jsx_closing_element [46, 10] - [46, 15]
name: (identifier [46, 12] - [46, 14])))
(jsx_element [47, 10] - [53, 19]
open_tag: (jsx_opening_element [47, 10] - [51, 11]
name: (identifier [47, 11] - [47, 17])
attribute: (jsx_attribute [48, 12] - [48, 25]
(property_identifier [48, 12] - [48, 16])
(string [48, 17] - [48, 25]
(string_fragment [48, 18] - [48, 24])))
attribute: (jsx_attribute [49, 12] - [49, 39]
(property_identifier [49, 12] - [49, 19])
(string [49, 20] - [49, 39]
(string_fragment [49, 21] - [49, 38])))
attribute: (jsx_attribute [50, 12] - [50, 114]
(property_identifier [50, 12] - [50, 17])
(string [50, 18] - [50, 114]
(string_fragment [50, 19] - [50, 113]))))
(html_character_reference [52, 12] - [52, 19])
close_tag: (jsx_closing_element [53, 10] - [53, 19]
name: (identifier [53, 12] - [53, 18])))
close_tag: (jsx_closing_element [54, 8] - [54, 14]
name: (identifier [54, 10] - [54, 13])))
(jsx_element [56, 8] - [114, 15]
open_tag: (jsx_opening_element [56, 8] - [56, 61]
name: (identifier [56, 9] - [56, 13])
attribute: (jsx_attribute [56, 14] - [56, 27]
(property_identifier [56, 14] - [56, 16])
(string [56, 17] - [56, 27]
(string_fragment [56, 18] - [56, 26])))
attribute: (jsx_attribute [56, 28] - [56, 60]
(property_identifier [56, 28] - [56, 36])
(string [56, 37] - [56, 60]
(string_fragment [56, 38] - [56, 59]))))
(jsx_self_closing_element [57, 10] - [57, 58]
name: (identifier [57, 11] - [57, 16])
attribute: (jsx_attribute [57, 17] - [57, 30]
(property_identifier [57, 17] - [57, 21])
(string [57, 22] - [57, 30]
(string_fragment [57, 23] - [57, 29])))
attribute: (jsx_attribute [57, 31] - [57, 46]
(property_identifier [57, 31] - [57, 33])
(string [57, 34] - [57, 46]
(string_fragment [57, 35] - [57, 45])))
attribute: (jsx_attribute [57, 47] - [57, 55]
(property_identifier [57, 47] - [57, 52])
(string [57, 53] - [57, 55])))
(jsx_element [58, 10] - [87, 16]
open_tag: (jsx_opening_element [58, 10] - [58, 131]
name: (identifier [58, 11] - [58, 14])
attribute: (jsx_attribute [58, 15] - [58, 130]
(property_identifier [58, 15] - [58, 20])
(string [58, 21] - [58, 130]
(string_fragment [58, 22] - [58, 129]))))
(jsx_element [59, 12] - [70, 18]
open_tag: (jsx_opening_element [59, 12] - [59, 17]
name: (identifier [59, 13] - [59, 16]))
(jsx_element [60, 14] - [62, 22]
open_tag: (jsx_opening_element [60, 14] - [60, 137]
name: (identifier [60, 15] - [60, 20])
attribute: (jsx_attribute [60, 21] - [60, 136]
(property_identifier [60, 21] - [60, 26])
(string [60, 27] - [60, 136]
(string_fragment [60, 28] - [60, 135]))))
(jsx_text [60, 137] - [62, 14])
close_tag: (jsx_closing_element [62, 14] - [62, 22]
name: (identifier [62, 16] - [62, 21])))
(jsx_self_closing_element [63, 14] - [69, 16]
name: (identifier [63, 15] - [63, 20])
attribute: (jsx_attribute [64, 16] - [64, 27]
(property_identifier [64, 16] - [64, 20])
(string [64, 21] - [64, 27]
(string_fragment [64, 22] - [64, 26])))
attribute: (jsx_attribute [65, 16] - [65, 34]
(property_identifier [65, 16] - [65, 18])
(string [65, 19] - [65, 34]
(string_fragment [65, 20] - [65, 33])))
attribute: (jsx_attribute [66, 16] - [66, 58]
(property_identifier [66, 16] - [66, 27])
(string [66, 28] - [66, 58]
(string_fragment [66, 29] - [66, 57])))
attribute: (jsx_attribute [67, 16] - [67, 24]
(property_identifier [67, 16] - [67, 24]))
attribute: (jsx_attribute [68, 16] - [68, 36]
(property_identifier [68, 16] - [68, 21])
(string [68, 22] - [68, 36]
(string_fragment [68, 23] - [68, 35]))))
close_tag: (jsx_closing_element [70, 12] - [70, 18]
name: (identifier [70, 14] - [70, 17])))
(jsx_element [71, 12] - [86, 18]
open_tag: (jsx_opening_element [71, 12] - [71, 17]
name: (identifier [71, 13] - [71, 16]))
(jsx_element [72, 14] - [74, 22]
open_tag: (jsx_opening_element [72, 14] - [72, 137]
name: (identifier [72, 15] - [72, 20])
attribute: (jsx_attribute [72, 21] - [72, 136]
(property_identifier [72, 21] - [72, 26])
(string [72, 27] - [72, 136]
(string_fragment [72, 28] - [72, 135]))))
(jsx_text [72, 137] - [74, 14])
close_tag: (jsx_closing_element [74, 14] - [74, 22]
name: (identifier [74, 16] - [74, 21])))
(jsx_element [75, 14] - [85, 23]
open_tag: (jsx_opening_element [75, 14] - [78, 15]
name: (identifier [75, 15] - [75, 21])
attribute: (jsx_attribute [76, 16] - [76, 34]
(property_identifier [76, 16] - [76, 18])
(string [76, 19] - [76, 34]
(string_fragment [76, 20] - [76, 33])))
attribute: (jsx_attribute [77, 16] - [77, 195]
(property_identifier [77, 16] - [77, 21])
(string [77, 22] - [77, 195]
(string_fragment [77, 23] - [77, 194]))))
(jsx_element [79, 16] - [79, 73]
open_tag: (jsx_opening_element [79, 16] - [79, 33]
name: (identifier [79, 17] - [79, 23])
attribute: (jsx_attribute [79, 24] - [79, 32]
(property_identifier [79, 24] - [79, 29])
(string [79, 30] - [79, 32])))
(jsx_text [79, 33] - [79, 64])
close_tag: (jsx_closing_element [79, 64] - [79, 73]
name: (identifier [79, 66] - [79, 72])))
(jsx_expression [80, 16] - [84, 19]
(call_expression [80, 17] - [84, 18]
function: (member_expression [80, 17] - [80, 25]
object: (identifier [80, 17] - [80, 21])
property: (property_identifier [80, 22] - [80, 25]))
arguments: (arguments [80, 25] - [84, 18]
(arrow_function [80, 26] - [84, 17]
parameters: (formal_parameters [80, 26] - [80, 36]
(required_parameter [80, 27] - [80, 35]
pattern: (identifier [80, 27] - [80, 30])
type: (type_annotation [80, 30] - [80, 35]
(predefined_type [80, 32] - [80, 35]))))
body: (parenthesized_expression [80, 40] - [84, 17]
(jsx_element [81, 18] - [83, 27]
open_tag: (jsx_opening_element [81, 18] - [81, 54]
name: (identifier [81, 19] - [81, 25])
attribute: (jsx_attribute [81, 26] - [81, 40]
(property_identifier [81, 26] - [81, 31])
(jsx_expression [81, 32] - [81, 40]
(member_expression [81, 33] - [81, 39]
object: (identifier [81, 33] - [81, 36])
property: (property_identifier [81, 37] - [81, 39]))))
attribute: (jsx_attribute [81, 41] - [81, 53]
(property_identifier [81, 41] - [81, 44])
(jsx_expression [81, 45] - [81, 53]
(member_expression [81, 46] - [81, 52]
object: (identifier [81, 46] - [81, 49])
property: (property_identifier [81, 50] - [81, 52])))))
(jsx_expression [82, 20] - [82, 30]
(member_expression [82, 21] - [82, 29]
object: (identifier [82, 21] - [82, 24])
property: (property_identifier [82, 25] - [82, 29])))
(jsx_text [82, 30] - [82, 32])
(jsx_expression [82, 32] - [82, 58]
(binary_expression [82, 33] - [82, 57]
left: (member_expression [82, 33] - [82, 43]
object: (identifier [82, 33] - [82, 36])
property: (property_identifier [82, 37] - [82, 43]))
right: (string [82, 47] - [82, 57]
(string_fragment [82, 48] - [82, 56]))))
(jsx_text [82, 58] - [83, 18])
close_tag: (jsx_closing_element [83, 18] - [83, 27]
name: (identifier [83, 20] - [83, 26]))))))))
close_tag: (jsx_closing_element [85, 14] - [85, 23]
name: (identifier [85, 16] - [85, 22])))
close_tag: (jsx_closing_element [86, 12] - [86, 18]
name: (identifier [86, 14] - [86, 17])))
close_tag: (jsx_closing_element [87, 10] - [87, 16]
name: (identifier [87, 12] - [87, 15])))
(jsx_element [89, 10] - [99, 16]
open_tag: (jsx_opening_element [89, 10] - [89, 47]
name: (identifier [89, 11] - [89, 14])
attribute: (jsx_attribute [89, 15] - [89, 46]
(property_identifier [89, 15] - [89, 20])
(string [89, 21] - [89, 46]
(string_fragment [89, 22] - [89, 45]))))
(jsx_element [90, 12] - [92, 20]
open_tag: (jsx_opening_element [90, 12] - [90, 135]
name: (identifier [90, 13] - [90, 18])
attribute: (jsx_attribute [90, 19] - [90, 134]
(property_identifier [90, 19] - [90, 24])
(string [90, 25] - [90, 134]
(string_fragment [90, 26] - [90, 133]))))
(jsx_text [90, 135] - [92, 12])
close_tag: (jsx_closing_element [92, 12] - [92, 20]
name: (identifier [92, 14] - [92, 19])))
(jsx_self_closing_element [93, 12] - [98, 14]
name: (identifier [93, 13] - [93, 18])
attribute: (jsx_attribute [94, 14] - [94, 25]
(property_identifier [94, 14] - [94, 18])
(string [94, 19] - [94, 25]
(string_fragment [94, 20] - [94, 24])))
attribute: (jsx_attribute [95, 14] - [95, 32]
(property_identifier [95, 14] - [95, 16])
(string [95, 17] - [95, 32]
(string_fragment [95, 18] - [95, 31])))
attribute: (jsx_attribute [96, 14] - [96, 71]
(property_identifier [96, 14] - [96, 25])
(string [96, 26] - [96, 71]
(string_fragment [96, 27] - [96, 70])))
attribute: (jsx_attribute [97, 14] - [97, 34]
(property_identifier [97, 14] - [97, 19])
(string [97, 20] - [97, 34]
(string_fragment [97, 21] - [97, 33]))))
close_tag: (jsx_closing_element [99, 10] - [99, 16]
name: (identifier [99, 12] - [99, 15])))
(jsx_element [101, 10] - [113, 16]
open_tag: (jsx_opening_element [101, 10] - [101, 52]
name: (identifier [101, 11] - [101, 14])
attribute: (jsx_attribute [101, 15] - [101, 51]
(property_identifier [101, 15] - [101, 20])
(string [101, 21] - [101, 51]
(string_fragment [101, 22] - [101, 50]))))
(jsx_element [102, 12] - [104, 21]
open_tag: (jsx_opening_element [102, 12] - [102, 80]
name: (identifier [102, 13] - [102, 19])
attribute: (jsx_attribute [102, 20] - [102, 33]
(property_identifier [102, 20] - [102, 24])
(string [102, 25] - [102, 33]
(string_fragment [102, 26] - [102, 32])))
attribute: (jsx_attribute [102, 34] - [102, 53]
(property_identifier [102, 34] - [102, 39])
(string [102, 40] - [102, 53]
(string_fragment [102, 41] - [102, 52])))
attribute: (jsx_attribute [102, 54] - [102, 79]
(property_identifier [102, 54] - [102, 59])
(string [102, 60] - [102, 79]
(string_fragment [102, 61] - [102, 78]))))
(jsx_text [102, 80] - [104, 12])
close_tag: (jsx_closing_element [104, 12] - [104, 21]
name: (identifier [104, 14] - [104, 20])))
(jsx_element [105, 12] - [112, 21]
open_tag: (jsx_opening_element [105, 12] - [110, 13]
name: (identifier [105, 13] - [105, 19])
attribute: (jsx_attribute [106, 14] - [106, 27]
(property_identifier [106, 14] - [106, 18])
(string [106, 19] - [106, 27]
(string_fragment [106, 20] - [106, 26])))
attribute: (jsx_attribute [107, 14] - [107, 33]
(property_identifier [107, 14] - [107, 19])
(string [107, 20] - [107, 33]
(string_fragment [107, 21] - [107, 32])))
attribute: (jsx_attribute [108, 14] - [108, 41]
(property_identifier [108, 14] - [108, 21])
(string [108, 22] - [108, 41]
(string_fragment [108, 23] - [108, 40])))
attribute: (jsx_attribute [109, 14] - [109, 39]
(property_identifier [109, 14] - [109, 19])
(string [109, 20] - [109, 39]
(string_fragment [109, 21] - [109, 38]))))
(jsx_text [110, 13] - [112, 12])
close_tag: (jsx_closing_element [112, 12] - [112, 21]
name: (identifier [112, 14] - [112, 20])))
close_tag: (jsx_closing_element [113, 10] - [113, 16]
name: (identifier [113, 12] - [113, 15])))
close_tag: (jsx_closing_element [114, 8] - [114, 15]
name: (identifier [114, 10] - [114, 14])))
close_tag: (jsx_closing_element [115, 6] - [115, 12]
name: (identifier [115, 8] - [115, 11])))
(jsx_element [117, 6] - [195, 12]
open_tag: (jsx_opening_element [117, 6] - [117, 24]
name: (identifier [117, 7] - [117, 10])
attribute: (jsx_attribute [117, 11] - [117, 23]
(property_identifier [117, 11] - [117, 16])
(string [117, 17] - [117, 23]
(string_fragment [117, 18] - [117, 22]))))
(jsx_element [118, 8] - [194, 14]
open_tag: (jsx_opening_element [118, 8] - [118, 37]
name: (identifier [118, 9] - [118, 12])
attribute: (jsx_attribute [118, 13] - [118, 36]
(property_identifier [118, 13] - [118, 18])
(string [118, 19] - [118, 36]
(string_fragment [118, 20] - [118, 35]))))
(jsx_element [119, 10] - [193, 18]
open_tag: (jsx_opening_element [119, 10] - [119, 33]
name: (identifier [119, 11] - [119, 16])
attribute: (jsx_attribute [119, 17] - [119, 32]
(property_identifier [119, 17] - [119, 19])
(string [119, 20] - [119, 32]
(string_fragment [119, 21] - [119, 31]))))
(jsx_element [120, 12] - [128, 20]
open_tag: (jsx_opening_element [120, 12] - [120, 19]
name: (identifier [120, 13] - [120, 18]))
(jsx_element [121, 14] - [127, 19]
open_tag: (jsx_opening_element [121, 14] - [121, 18]
name: (identifier [121, 15] - [121, 17]))
(jsx_element [122, 16] - [122, 40]
open_tag: (jsx_opening_element [122, 16] - [122, 20]
name: (identifier [122, 17] - [122, 19]))
(jsx_text [122, 20] - [122, 35])
close_tag: (jsx_closing_element [122, 35] - [122, 40]
name: (identifier [122, 37] - [122, 39])))
(jsx_element [123, 16] - [123, 30]
open_tag: (jsx_opening_element [123, 16] - [123, 20]
name: (identifier [123, 17] - [123, 19]))
(jsx_text [123, 20] - [123, 25])
close_tag: (jsx_closing_element [123, 25] - [123, 30]
name: (identifier [123, 27] - [123, 29])))
(jsx_element [124, 16] - [124, 36]
open_tag: (jsx_opening_element [124, 16] - [124, 20]
name: (identifier [124, 17] - [124, 19]))
(jsx_text [124, 20] - [124, 31])
close_tag: (jsx_closing_element [124, 31] - [124, 36]
name: (identifier [124, 33] - [124, 35])))
(jsx_element [125, 16] - [125, 32]
open_tag: (jsx_opening_element [125, 16] - [125, 20]
name: (identifier [125, 17] - [125, 19]))
(jsx_text [125, 20] - [125, 27])
close_tag: (jsx_closing_element [125, 27] - [125, 32]
name: (identifier [125, 29] - [125, 31])))
(jsx_element [126, 16] - [126, 32]
open_tag: (jsx_opening_element [126, 16] - [126, 20]
name: (identifier [126, 17] - [126, 19]))
(jsx_text [126, 20] - [126, 27])
close_tag: (jsx_closing_element [126, 27] - [126, 32]
name: (identifier [126, 29] - [126, 31])))
close_tag: (jsx_closing_element [127, 14] - [127, 19]
name: (identifier [127, 16] - [127, 18])))
close_tag: (jsx_closing_element [128, 12] - [128, 20]
name: (identifier [128, 14] - [128, 19])))
(jsx_element [129, 12] - [192, 20]
open_tag: (jsx_opening_element [129, 12] - [129, 19]
name: (identifier [129, 13] - [129, 18]))
(jsx_expression [130, 14] - [191, 18]
(ternary_expression [130, 15] - [191, 17]
condition: (binary_expression [130, 15] - [130, 33]
left: (member_expression [130, 15] - [130, 27]
object: (identifier [130, 15] - [130, 20])
property: (property_identifier [130, 21] - [130, 27]))
right: (number [130, 32] - [130, 33]))
consequence: (parenthesized_expression [131, 18] - [140, 17]
(jsx_element [132, 18] - [139, 23]
open_tag: (jsx_opening_element [132, 18] - [132, 22]
name: (identifier [132, 19] - [132, 21]))
(jsx_element [133, 20] - [138, 25]
open_tag: (jsx_opening_element [133, 20] - [136, 21]
name: (identifier [133, 21] - [133, 23])
attribute: (jsx_attribute [134, 22] - [134, 33]
(property_identifier [134, 22] - [134, 29])
(jsx_expression [134, 30] - [134, 33]
(number [134, 31] - [134, 32])))
attribute: (jsx_attribute [135, 22] - [135, 90]
(property_identifier [135, 22] - [135, 27])
(string [135, 28] - [135, 90]
(string_fragment [135, 29] - [135, 89]))))
(jsx_text [136, 21] - [138, 20])
close_tag: (jsx_closing_element [138, 20] - [138, 25]
name: (identifier [138, 22] - [138, 24])))
close_tag: (jsx_closing_element [139, 18] - [139, 23]
name: (identifier [139, 20] - [139, 22]))))
alternative: (parenthesized_expression [141, 18] - [191, 17]
(call_expression [142, 18] - [190, 20]
function: (member_expression [142, 18] - [142, 27]
object: (identifier [142, 18] - [142, 23])
property: (property_identifier [142, 24] - [142, 27]))
arguments: (arguments [142, 27] - [190, 20]
(arrow_function [142, 28] - [190, 19]
parameters: (formal_parameters [142, 28] - [142, 36]
(required_parameter [142, 29] - [142, 35]
pattern: (identifier [142, 29] - [142, 30])
type: (type_annotation [142, 30] - [142, 35]
(predefined_type [142, 32] - [142, 35]))))
body: (statement_block [142, 40] - [190, 19]
(lexical_declaration [143, 20] - [143, 47]
(variable_declarator [143, 26] - [143, 46]
name: (identifier [143, 26] - [143, 34])
value: (unary_expression [143, 37] - [143, 46]
argument: (member_expression [143, 38] - [143, 46]
object: (identifier [143, 38] - [143, 39])
property: (property_identifier [143, 40] - [143, 46])))))
(lexical_declaration [144, 20] - [144, 71]
(variable_declarator [144, 26] - [144, 70]
name: (identifier [144, 26] - [144, 37])
value: (binary_expression [144, 40] - [144, 70]
left: (identifier [144, 40] - [144, 48])
right: (binary_expression [144, 52] - [144, 70]
left: (member_expression [144, 52] - [144, 58]
object: (identifier [144, 52] - [144, 53])
property: (property_identifier [144, 54] - [144, 58]))
right: (string [144, 63] - [144, 70]
(string_fragment [144, 64] - [144, 69]))))))
(return_statement [146, 20] - [189, 22]
(parenthesized_expression [146, 27] - [189, 21]
(jsx_element [147, 22] - [188, 27]
open_tag: (jsx_opening_element [147, 22] - [147, 37]
name: (identifier [147, 23] - [147, 25])
attribute: (jsx_attribute [147, 26] - [147, 36]
(property_identifier [147, 26] - [147, 29])
(jsx_expression [147, 30] - [147, 36]
(member_expression [147, 31] - [147, 35]
object: (identifier [147, 31] - [147, 32])
property: (property_identifier [147, 33] - [147, 35])))))
(jsx_element [148, 24] - [152, 29]
open_tag: (jsx_opening_element [148, 24] - [148, 28]
name: (identifier [148, 25] - [148, 27]))
(jsx_element [149, 26] - [151, 35]
open_tag: (jsx_opening_element [149, 26] - [149, 114]
name: (identifier [149, 27] - [149, 33])
attribute: (jsx_attribute [149, 34] - [149, 113]
(property_identifier [149, 34] - [149, 39])
(string [149, 40] - [149, 113]
(string_fragment [149, 41] - [149, 112]))))
(jsx_expression [150, 28] - [150, 36]
(member_expression [150, 29] - [150, 35]
object: (identifier [150, 29] - [150, 30])
property: (property_identifier [150, 31] - [150, 35])))
close_tag: (jsx_closing_element [151, 26] - [151, 35]
name: (identifier [151, 28] - [151, 34])))
close_tag: (jsx_closing_element [152, 24] - [152, 29]
name: (identifier [152, 26] - [152, 28])))
(jsx_element [153, 24] - [161, 29]
open_tag: (jsx_opening_element [153, 24] - [153, 28]
name: (identifier [153, 25] - [153, 27]))
(jsx_expression [154, 26] - [160, 30]
(ternary_expression [154, 27] - [160, 29]
condition: (identifier [154, 27] - [154, 35])
consequence: (jsx_element [155, 30] - [155, 74]
open_tag: (jsx_opening_element [155, 30] - [155, 61]
name: (identifier [155, 31] - [155, 35])
attribute: (jsx_attribute [155, 36] - [155, 60]
(property_identifier [155, 36] - [155, 41])
(string [155, 42] - [155, 60]
(string_fragment [155, 43] - [155, 59]))))
(jsx_text [155, 61] - [155, 67])
close_tag: (jsx_closing_element [155, 67] - [155, 74]
name: (identifier [155, 69] - [155, 73])))
alternative: (parenthesized_expression [156, 30] - [160, 29]
(jsx_element [157, 30] - [159, 37]
open_tag: (jsx_opening_element [157, 30] - [157, 64]
name: (identifier [157, 31] - [157, 35])
attribute: (jsx_attribute [157, 36] - [157, 63]
(property_identifier [157, 36] - [157, 41])
(string [157, 42] - [157, 63]
(string_fragment [157, 43] - [157, 62]))))
(jsx_expression [158, 32] - [158, 62]
(binary_expression [158, 33] - [158, 61]
left: (member_expression [158, 33] - [158, 43]
object: (identifier [158, 33] - [158, 34])
property: (property_identifier [158, 35] - [158, 43]))
right: (string [158, 47] - [158, 61]
(string_fragment [158, 48] - [158, 60]))))
close_tag: (jsx_closing_element [159, 30] - [159, 37]
name: (identifier [159, 32] - [159, 36]))))))
close_tag: (jsx_closing_element [161, 24] - [161, 29]
name: (identifier [161, 26] - [161, 28])))
(jsx_element [162, 24] - [164, 29]
open_tag: (jsx_opening_element [162, 24] - [162, 86]
name: (identifier [162, 25] - [162, 27])
attribute: (jsx_attribute [162, 28] - [162, 85]
(property_identifier [162, 28] - [162, 33])
(string [162, 34] - [162, 85]
(string_fragment [162, 35] - [162, 84]))))
(jsx_expression [163, 26] - [163, 48]
(binary_expression [163, 27] - [163, 47]
left: (member_expression [163, 27] - [163, 40]
object: (identifier [163, 27] - [163, 28])
property: (property_identifier [163, 29] - [163, 40]))
right: (string [163, 44] - [163, 47]
(string_fragment [163, 45] - [163, 46]))))
close_tag: (jsx_closing_element [164, 24] - [164, 29]
name: (identifier [164, 26] - [164, 28])))
(jsx_element [165, 24] - [167, 29]
open_tag: (jsx_opening_element [165, 24] - [165, 86]
name: (identifier [165, 25] - [165, 27])
attribute: (jsx_attribute [165, 28] - [165, 85]
(property_identifier [165, 28] - [165, 33])
(string [165, 34] - [165, 85]
(string_fragment [165, 35] - [165, 84]))))
(jsx_expression [166, 26] - [166, 71]
(call_expression [166, 27] - [166, 70]
function: (member_expression [166, 27] - [166, 68]
object: (new_expression [166, 27] - [166, 49]
constructor: (identifier [166, 31] - [166, 35])
arguments: (arguments [166, 35] - [166, 49]
(member_expression [166, 36] - [166, 48]
object: (identifier [166, 36] - [166, 37])
property: (property_identifier [166, 38] - [166, 48]))))
property: (property_identifier [166, 50] - [166, 68]))
arguments: (arguments [166, 68] - [166, 70])))
close_tag: (jsx_closing_element [167, 24] - [167, 29]
name: (identifier [167, 26] - [167, 28])))
(jsx_element [168, 24] - [187, 29]
open_tag: (jsx_opening_element [168, 24] - [168, 28]
name: (identifier [168, 25] - [168, 27]))
(jsx_expression [169, 26] - [186, 30]
(ternary_expression [169, 27] - [186, 29]
condition: (unary_expression [169, 27] - [169, 39]
argument: (identifier [169, 28] - [169, 39]))
consequence: (parenthesized_expression [170, 30] - [181, 29]
(jsx_element [171, 30] - [180, 36]
open_tag: (jsx_opening_element [171, 30] - [171, 72]
name: (identifier [171, 31] - [171, 34])
attribute: (jsx_attribute [171, 35] - [171, 71]
(property_identifier [171, 35] - [171, 40])
(string [171, 41] - [171, 71]
(string_fragment [171, 42] - [171, 70]))))
(jsx_element [172, 32] - [179, 41]
open_tag: (jsx_opening_element [172, 32] - [177, 33]
name: (identifier [172, 33] - [172, 39])
attribute: (jsx_attribute [173, 34] - [173, 47]
(property_identifier [173, 34] - [173, 38])
(string [173, 39] - [173, 47]
(string_fragment [173, 40] - [173, 46])))
attribute: (jsx_attribute [174, 34] - [174, 52]
(property_identifier [174, 34] - [174, 39])
(string [174, 40] - [174, 52]
(string_fragment [174, 41] - [174, 51])))
attribute: (jsx_attribute [175, 34] - [175, 104]
(property_identifier [175, 34] - [175, 39])
(string [175, 40] - [175, 104]
(string_fragment [175, 41] - [175, 103])))
attribute: (jsx_attribute [176, 34] - [176, 80]
(property_identifier [176, 34] - [176, 41])
(jsx_expression [176, 42] - [176, 80]
(template_string [176, 43] - [176, 79]
(string_fragment [176, 44] - [176, 56])
(template_substitution [176, 56] - [176, 63]
(member_expression [176, 58] - [176, 62]
object: (identifier [176, 58] - [176, 59])
property: (property_identifier [176, 60] - [176, 62])))
(string_fragment [176, 63] - [176, 67])
(template_substitution [176, 67] - [176, 76]
(member_expression [176, 69] - [176, 75]
object: (identifier [176, 69] - [176, 70])
property: (property_identifier [176, 71] - [176, 75])))
(string_fragment [176, 76] - [176, 78])))))
(jsx_text [177, 33] - [179, 32])
close_tag: (jsx_closing_element [179, 32] - [179, 41]
name: (identifier [179, 34] - [179, 40])))
close_tag: (jsx_closing_element [180, 30] - [180, 36]
name: (identifier [180, 32] - [180, 35]))))
alternative: (parenthesized_expression [182, 30] - [186, 29]
(jsx_element [183, 30] - [185, 37]
open_tag: (jsx_opening_element [183, 30] - [183, 109]
name: (identifier [183, 31] - [183, 35])
attribute: (jsx_attribute [183, 36] - [183, 108]
(property_identifier [183, 36] - [183, 41])
(string [183, 42] - [183, 108]
(string_fragment [183, 43] - [183, 107]))))
(jsx_text [183, 109] - [185, 30])
close_tag: (jsx_closing_element [185, 30] - [185, 37]
name: (identifier [185, 32] - [185, 36]))))))
close_tag: (jsx_closing_element [187, 24] - [187, 29]
name: (identifier [187, 26] - [187, 28])))
close_tag: (jsx_closing_element [188, 22] - [188, 27]
name: (identifier [188, 24] - [188, 26]))))))))))))
close_tag: (jsx_closing_element [192, 12] - [192, 20]
name: (identifier [192, 14] - [192, 19])))
close_tag: (jsx_closing_element [193, 10] - [193, 18]
name: (identifier [193, 12] - [193, 17])))
close_tag: (jsx_closing_element [194, 8] - [194, 14]
name: (identifier [194, 10] - [194, 13])))
close_tag: (jsx_closing_element [195, 6] - [195, 12]
name: (identifier [195, 8] - [195, 11])))
(jsx_element [196, 6] - [196, 54]
open_tag: (jsx_opening_element [196, 6] - [196, 45]
name: (identifier [196, 7] - [196, 13])
attribute: (jsx_attribute [196, 14] - [196, 44]
(property_identifier [196, 14] - [196, 17])
(string [196, 18] - [196, 44]
(string_fragment [196, 19] - [196, 43]))))
close_tag: (jsx_closing_element [196, 45] - [196, 54]
name: (identifier [196, 47] - [196, 53])))
close_tag: (jsx_closing_element [197, 4] - [197, 26]
name: (identifier [197, 6] - [197, 25])))))))))))
/home/tylerg/p/data/auth-yes/src/features/admin/roles_fragments.tsx Parse: 0.72 ms 10265 bytes/ms (ERROR [17, 17] - [17, 37])

Some files were not shown because too many files have changed in this diff Show More