Files
reverse-engineering-anything/src/application/JavaScriptArtifactAnalysisTypes.ts
T

113 lines
3.5 KiB
TypeScript

import type {
JavaScriptSourceRange,
JavaScriptStaticAnalysis,
} from "../domain/javascriptStaticAnalysisTypes.js";
import type { JavaScriptSemanticIr } from "../domain/javascriptSemanticIr.js";
import type { JavaScriptArtifactFile } from "./JavaScriptArtifactFiles.js";
interface JavaScriptStructuredObservation {
readonly path: string;
readonly sha256: string;
}
interface JavaScriptPackageValues {
readonly name: string | null;
readonly version: string | null;
readonly main: string | null;
readonly renderer: string | null;
}
/** Parsed package metadata used only for static entrypoint discovery. */
export type JavaScriptPackageObservation = JavaScriptStructuredObservation &
(
| (JavaScriptPackageValues & {
readonly status: "included";
readonly limitation: null;
})
| {
readonly status: "invalid" | "unavailable";
readonly name: null;
readonly version: null;
readonly main: null;
readonly renderer: null;
readonly limitation: string;
}
);
/** One HTML script source observed without building or executing a DOM. */
export interface JavaScriptHtmlScriptObservation {
readonly html_path: string;
readonly script_path: string;
readonly base_href: string | null;
readonly location: JavaScriptSourceRange;
}
/** One original source declared by a local source map. */
export interface JavaScriptSourceMapOriginal {
readonly source: string;
readonly content: string | null;
readonly content_sha256: string | null;
}
/** Local source-map parse result. */
export type JavaScriptSourceMapObservation = JavaScriptStructuredObservation &
(
| {
readonly status: "included";
readonly sources: readonly JavaScriptSourceMapOriginal[];
readonly limitation: null;
}
| {
readonly status: "invalid";
readonly sources: readonly [];
readonly limitation: string;
}
);
/** Parse status for one inventoried JSON module. */
export type JavaScriptJsonModuleObservation = JavaScriptStructuredObservation &
(
| {
readonly status: "included";
readonly top_level_keys: readonly string[];
readonly omitted_top_level_keys: number;
readonly limitation: null;
}
| {
readonly status: "invalid";
readonly top_level_keys: readonly [];
readonly omitted_top_level_keys: 0;
readonly limitation: string;
}
| {
readonly status: "unavailable";
readonly top_level_keys: readonly [];
readonly omitted_top_level_keys: null;
readonly limitation: string;
}
);
/** One relevant file plus optional AST-only JavaScript facts. */
export interface AnalyzedJavaScriptArtifactFile {
readonly file: JavaScriptArtifactFile;
readonly javascript: JavaScriptStaticAnalysis | null;
readonly semantic: {
readonly ir: JavaScriptSemanticIr;
} | null;
}
/** Complete static-analysis projection before graph construction. */
export interface JavaScriptArtifactAnalysis {
readonly files: readonly AnalyzedJavaScriptArtifactFile[];
readonly packages: readonly JavaScriptPackageObservation[];
readonly json_modules: readonly JavaScriptJsonModuleObservation[];
readonly html_scripts: readonly JavaScriptHtmlScriptObservation[];
readonly source_maps: readonly JavaScriptSourceMapObservation[];
readonly visited_ast_nodes: number;
readonly findings: number;
readonly modules: number;
readonly parse_failures: number;
readonly truncated_scopes: number;
readonly limitations: readonly string[];
}