mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
feat(javascript): retain queryable static route inventories (#6019)
This commit is contained in:
@@ -4,6 +4,7 @@ import { jsonValueSchema } from "../../domain/jsonValue.js";
|
||||
import { digestSchema } from "../../domain/digests.js";
|
||||
import {
|
||||
JAVASCRIPT_ANALYSIS_RESOURCE_DEFAULTS,
|
||||
JAVASCRIPT_STATIC_FACT_BYTES,
|
||||
JAVASCRIPT_SEMANTIC_ITEM_MAXIMUM,
|
||||
} from "../../domain/javascript/javascriptAnalysisResourceControls.js";
|
||||
import { javaScriptAnalysisTransferDescriptorSchema } from "./JavaScriptAnalysisTransfer.js";
|
||||
@@ -11,7 +12,7 @@ import { javaScriptAnalysisTransferDescriptorSchema } from "./JavaScriptAnalysis
|
||||
/** Independent worker execution budget; source length is not an admission rule. */
|
||||
export const JAVASCRIPT_ANALYSIS_WORKER_DEFAULTS = {
|
||||
...JAVASCRIPT_ANALYSIS_RESOURCE_DEFAULTS,
|
||||
checkpointBytes: 8 * 1024 * 1024,
|
||||
checkpointBytes: JAVASCRIPT_STATIC_FACT_BYTES,
|
||||
protocolBytes: 64 * 1024,
|
||||
} as const;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { javaScriptSemanticUnknownOmissionsSchema } from "../../domain/javascrip
|
||||
import { z } from "zod";
|
||||
import { digestSchema } from "../../domain/digests.js";
|
||||
import type { JavaScriptStaticAnalysis } from "../../domain/javascript/javascriptStaticAnalysisTypes.js";
|
||||
import { javaScriptRouteSourceFactsSchema } from "../../domain/javascript/javascriptRouteFacts.js";
|
||||
import { JAVASCRIPT_AST_FINGERPRINT_ALGORITHM } from "../../domain/javascript/javascriptStaticAnalysisTypes.js";
|
||||
import type {
|
||||
JavaScriptSemanticProperty,
|
||||
@@ -308,6 +309,7 @@ const referenceShape = {
|
||||
export const javaScriptWorkerStaticAnalysisSchema = z
|
||||
.strictObject({
|
||||
parse_status: z.enum(["complete", "partial", "failed"]),
|
||||
routes: javaScriptRouteSourceFactsSchema.exactOptional(),
|
||||
parse_error_count: count,
|
||||
visited_ast_nodes: count,
|
||||
references: z.array(
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
import { fitJavaScriptRouteSourceFacts } from "../../domain/javascript/javascriptRouteResultBudget.js";
|
||||
import { jsonValueByteLength } from "../../domain/jsonValueByteLength.js";
|
||||
import type { JsonValue } from "../../domain/jsonValue.js";
|
||||
import type { JavaScriptSemanticProjectionCapacity } from "../../domain/javascript/javascriptSemanticFileProjection.js";
|
||||
import { createHash } from "node:crypto";
|
||||
import { readFile, writeFile } from "node:fs/promises";
|
||||
@@ -117,7 +120,24 @@ const analyzeJob = async (
|
||||
{
|
||||
phase: async (phase) => send({ kind: "phase", id: request.id, phase }),
|
||||
checkpoint: async (facts) => {
|
||||
const value = javaScriptWorkerStaticAnalysisSchema.parse(facts);
|
||||
let value = javaScriptWorkerStaticAnalysisSchema.parse(facts);
|
||||
if (value.routes !== undefined) {
|
||||
const { routes, ...existing } = value;
|
||||
// This is schema-checked, producer-owned JSON. Interface optional
|
||||
// members can only make the size estimate conservative.
|
||||
const available =
|
||||
DEFAULTS.checkpointBytes -
|
||||
jsonValueByteLength(
|
||||
existing as JsonValue,
|
||||
DEFAULTS.checkpointBytes,
|
||||
) -
|
||||
Buffer.byteLength(',"routes":');
|
||||
const admitted = fitJavaScriptRouteSourceFacts(routes, available);
|
||||
value =
|
||||
admitted === undefined
|
||||
? existing
|
||||
: { ...existing, routes: admitted };
|
||||
}
|
||||
const text = JSON.stringify(value);
|
||||
const bytes = Buffer.byteLength(text);
|
||||
if (bytes > DEFAULTS.checkpointBytes)
|
||||
|
||||
Reference in New Issue
Block a user