@univerjs-pro/engine-formula-rust 1.0.0-insiders.20260725-1b9c8d8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/lib/index.js +2114 -0
- package/lib/types/adapters/rust-projection-remote-instance.service.d.ts +28 -0
- package/lib/types/binding.d.ts +105 -0
- package/lib/types/controllers/rust-engine-sync.controller.d.ts +40 -0
- package/lib/types/controllers/rust-same-runtime-projection.controller.d.ts +27 -0
- package/lib/types/index.d.ts +10 -0
- package/lib/types/numfmt.d.ts +145 -0
- package/lib/types/plugin.d.ts +35 -0
- package/lib/types/regression/formula-array-followers.d.ts +14 -0
- package/lib/types/regression/formula-value-normalization.d.ts +2 -0
- package/lib/types/regression/formula-volatile-dependencies.d.ts +7 -0
- package/lib/types/regression/real-univer-stage-timeouts.d.ts +7 -0
- package/lib/types/regression/rust-only-artifact-cache.d.ts +41 -0
- package/lib/types/regression/rust-only-discovery.d.ts +17 -0
- package/lib/types/regression/rust-only-excel-com-oracle.d.ts +57 -0
- package/lib/types/regression/rust-only-excel-process-cleanup.d.ts +3 -0
- package/lib/types/regression/rust-only-exchange-binary.d.ts +15 -0
- package/lib/types/regression/rust-only-failure-report.d.ts +13 -0
- package/lib/types/regression/rust-only-feature-extraction.d.ts +19 -0
- package/lib/types/regression/rust-only-formula-comparison.d.ts +43 -0
- package/lib/types/regression/rust-only-ooxml-diff.d.ts +23 -0
- package/lib/types/regression/rust-only-ooxml-feature-extraction.d.ts +7 -0
- package/lib/types/regression/rust-only-partial-artifacts.d.ts +7 -0
- package/lib/types/regression/rust-only-pipeline.d.ts +55 -0
- package/lib/types/regression/rust-only-process.d.ts +9 -0
- package/lib/types/regression/rust-only-real-runner.d.ts +103 -0
- package/lib/types/regression/rust-only-report.d.ts +131 -0
- package/lib/types/regression/rust-only-sequential-runner.d.ts +24 -0
- package/lib/types/regression/rust-only-timeout.d.ts +63 -0
- package/lib/types/regression/rust-only-view-host.d.ts +171 -0
- package/lib/types/regression/rust-only-workbook-json-formula-values.d.ts +2 -0
- package/lib/types/regression/rust-only-xlsx-formula-values.d.ts +8 -0
- package/lib/types/regression/xlsx-sample-compatibility.d.ts +56 -0
- package/lib/types/services/calculate-formula.service.d.ts +106 -0
- package/lib/types/services/rust-formula-projection.service.d.ts +70 -0
- package/lib/types/services/workbook-snapshot-materializer.d.ts +20 -0
- package/lib/types/types.d.ts +398 -0
- package/package.json +47 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { RustOnlyMismatchClassification, RustOnlyMismatchGroup } from './rust-only-report.js';
|
|
2
|
+
export declare const REQUIRED_RUST_ONLY_MISMATCH_CLASSIFICATIONS: readonly ["import", "formula", "number-format", "export", "feature-model", "view-render", "excel-com-unavailable", "unsupported-external-cache", "corrupt-zip", "invalid-package", "unsupported-workbook", "timeout", "performance", "unknown"];
|
|
3
|
+
export type RustOnlyMismatchSignal = 'missing-record-value-1' | 'formula-value-differs' | 'format-or-type-differs' | 'record-value-2-differs-from-record-value-1' | 'external-cache-unsupported' | 'case-timeout' | 'excel-com-unavailable' | 'unrecognized';
|
|
4
|
+
export interface RustOnlyFormulaValue {
|
|
5
|
+
readonly sheet: string;
|
|
6
|
+
readonly address: string;
|
|
7
|
+
readonly formula?: string;
|
|
8
|
+
readonly value: unknown;
|
|
9
|
+
readonly valueType: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CompareRecordValue1ToExcelComOracleOptions {
|
|
12
|
+
readonly excelComOracleValues: readonly RustOnlyFormulaValue[];
|
|
13
|
+
readonly recordValue1Values: readonly RustOnlyFormulaValue[];
|
|
14
|
+
}
|
|
15
|
+
export interface RustOnlyFormulaComparisonResult {
|
|
16
|
+
readonly comparedCount: number;
|
|
17
|
+
readonly mismatchGroups: readonly RustOnlyMismatchGroup[];
|
|
18
|
+
readonly skippedVolatileFormulaCount: number;
|
|
19
|
+
readonly skippedFormulaExamples: readonly RustOnlySkippedFormulaExample[];
|
|
20
|
+
}
|
|
21
|
+
export interface CompareRecordValue2RoundTripOptions {
|
|
22
|
+
readonly excelComOracleValues: readonly RustOnlyFormulaValue[];
|
|
23
|
+
readonly recordValue1Values: readonly RustOnlyFormulaValue[];
|
|
24
|
+
readonly recordValue2Values: readonly RustOnlyFormulaValue[];
|
|
25
|
+
}
|
|
26
|
+
export interface RustOnlyRecordValue2ComparisonResult {
|
|
27
|
+
readonly comparedToExcelComCount: number;
|
|
28
|
+
readonly comparedToRecordValue1Count: number;
|
|
29
|
+
readonly mismatchGroups: readonly RustOnlyMismatchGroup[];
|
|
30
|
+
readonly skippedVolatileFormulaCount: number;
|
|
31
|
+
readonly skippedFormulaExamples: readonly RustOnlySkippedFormulaExample[];
|
|
32
|
+
}
|
|
33
|
+
export interface RustOnlySkippedFormulaExample {
|
|
34
|
+
readonly sheet: string;
|
|
35
|
+
readonly address: string;
|
|
36
|
+
readonly formula?: string;
|
|
37
|
+
readonly reason: 'volatile-random-function';
|
|
38
|
+
}
|
|
39
|
+
export declare function classifyRustOnlyMismatch(options: {
|
|
40
|
+
readonly signal: RustOnlyMismatchSignal;
|
|
41
|
+
}): RustOnlyMismatchClassification;
|
|
42
|
+
export declare function compareRecordValue1ToExcelComOracle(options: CompareRecordValue1ToExcelComOracleOptions): RustOnlyFormulaComparisonResult;
|
|
43
|
+
export declare function compareRecordValue2RoundTrip(options: CompareRecordValue2RoundTripOptions): RustOnlyRecordValue2ComparisonResult;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface RustOnlyOoxmlChangedPart {
|
|
2
|
+
readonly partName: string;
|
|
3
|
+
readonly sourceHash: string;
|
|
4
|
+
readonly exportedHash: string;
|
|
5
|
+
readonly firstDifference: {
|
|
6
|
+
readonly index: number;
|
|
7
|
+
readonly sourceSnippet: string;
|
|
8
|
+
readonly exportedSnippet: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface RustOnlyOoxmlDiff {
|
|
12
|
+
readonly comparedXmlPartCount: number;
|
|
13
|
+
readonly missingInExported: readonly string[];
|
|
14
|
+
readonly missingInSource: readonly string[];
|
|
15
|
+
readonly changedXmlParts: readonly RustOnlyOoxmlChangedPart[];
|
|
16
|
+
}
|
|
17
|
+
export interface WriteRustOnlyOoxmlDiffArtifactOptions {
|
|
18
|
+
readonly sourceXlsxPath: string;
|
|
19
|
+
readonly exportedXlsxPath: string;
|
|
20
|
+
readonly outputJsonPath: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function writeRustOnlyOoxmlDiffArtifact(options: WriteRustOnlyOoxmlDiffArtifactOptions): Promise<RustOnlyOoxmlDiff>;
|
|
23
|
+
export declare function diffRustOnlyOoxmlParts(sourceParts: Record<string, string>, exportedParts: Record<string, string>): RustOnlyOoxmlDiff;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface RustOnlyOoxmlFeatureFact {
|
|
2
|
+
readonly status: 'present';
|
|
3
|
+
readonly count: number;
|
|
4
|
+
readonly ooxmlParts: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
export type RustOnlyOoxmlFeatureFacts = Record<string, RustOnlyOoxmlFeatureFact>;
|
|
7
|
+
export declare function extractRustOnlyOoxmlFeatureFacts(parts: Record<string, string>): RustOnlyOoxmlFeatureFacts;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RustOnlyCaseArtifacts } from './rust-only-report.js';
|
|
2
|
+
export interface ResolveRustOnlyPartialArtifactsOptions {
|
|
3
|
+
readonly caseDir: string;
|
|
4
|
+
readonly sourcePath: string;
|
|
5
|
+
readonly exists?: (path: string) => boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveRustOnlyPartialArtifacts(options: ResolveRustOnlyPartialArtifactsOptions): RustOnlyCaseArtifacts;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { RustOnlyRegressionCase } from './rust-only-discovery.js';
|
|
2
|
+
import type { RustOnlyFormulaCalculationMode } from './rust-only-report.js';
|
|
3
|
+
export interface RustOnlyExchangeImportRequest {
|
|
4
|
+
readonly inputPath: string;
|
|
5
|
+
readonly outputJsonPath: string;
|
|
6
|
+
readonly formulaCalculationMode: RustOnlyFormulaCalculationMode;
|
|
7
|
+
readonly calcChainMode?: 'off' | 'trusted';
|
|
8
|
+
}
|
|
9
|
+
export interface RustOnlyExchangeExportRequest {
|
|
10
|
+
readonly snapshotJsonPath: string;
|
|
11
|
+
readonly outputXlsxPath: string;
|
|
12
|
+
readonly formulaCalculationMode: RustOnlyFormulaCalculationMode;
|
|
13
|
+
}
|
|
14
|
+
export interface RustOnlyExchangePort {
|
|
15
|
+
readonly importXlsx: (request: RustOnlyExchangeImportRequest) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export interface RustOnlyExchangeExportPort extends RustOnlyExchangePort {
|
|
18
|
+
readonly exportXlsx: (request: RustOnlyExchangeExportRequest) => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export interface RustOnlyFormulaValueExtractorPort {
|
|
21
|
+
readonly extractXlsxFormulaValues: (request: {
|
|
22
|
+
readonly inputXlsxPath: string;
|
|
23
|
+
readonly outputJsonPath: string;
|
|
24
|
+
}) => Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export interface GenerateRustOnlyRecordValue1Options {
|
|
27
|
+
readonly testCase: RustOnlyRegressionCase;
|
|
28
|
+
readonly caseDir: string;
|
|
29
|
+
readonly exchange: RustOnlyExchangePort;
|
|
30
|
+
readonly sourceWorkbookPath?: string;
|
|
31
|
+
readonly formulaCalculationMode?: RustOnlyFormulaCalculationMode;
|
|
32
|
+
readonly calcChainMode?: 'off' | 'trusted';
|
|
33
|
+
readonly now?: () => number;
|
|
34
|
+
}
|
|
35
|
+
export interface GenerateRustOnlyRecordValue1Result {
|
|
36
|
+
readonly recordValue1Json: string;
|
|
37
|
+
readonly rustImportFormulaMs: number;
|
|
38
|
+
}
|
|
39
|
+
export interface GenerateRustOnlyRecordValue2Options {
|
|
40
|
+
readonly recordValue1Json: string;
|
|
41
|
+
readonly caseDir: string;
|
|
42
|
+
readonly exchange: RustOnlyExchangeExportPort;
|
|
43
|
+
readonly formulaValueExtractor: RustOnlyFormulaValueExtractorPort;
|
|
44
|
+
readonly formulaCalculationMode?: RustOnlyFormulaCalculationMode;
|
|
45
|
+
readonly now?: () => number;
|
|
46
|
+
}
|
|
47
|
+
export interface GenerateRustOnlyRecordValue2Result {
|
|
48
|
+
readonly recordValue2Xlsx: string;
|
|
49
|
+
readonly recordValue2FormulaValues: string;
|
|
50
|
+
readonly rustExportMs: number;
|
|
51
|
+
readonly formulaCacheExtractionMs: number;
|
|
52
|
+
}
|
|
53
|
+
export declare function resolveRustOnlyRegressionFormulaCalculationMode(mode?: RustOnlyFormulaCalculationMode): RustOnlyFormulaCalculationMode;
|
|
54
|
+
export declare function generateRustOnlyRecordValue1(options: GenerateRustOnlyRecordValue1Options): Promise<GenerateRustOnlyRecordValue1Result>;
|
|
55
|
+
export declare function generateRustOnlyRecordValue2(options: GenerateRustOnlyRecordValue2Options): Promise<GenerateRustOnlyRecordValue2Result>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface RunRustOnlyProcessOptions {
|
|
2
|
+
readonly command: string;
|
|
3
|
+
readonly args: readonly string[];
|
|
4
|
+
readonly cwd: string;
|
|
5
|
+
readonly timeoutMs: number;
|
|
6
|
+
readonly maxBufferBytes?: number;
|
|
7
|
+
readonly killProcessTree?: (pid: number) => Promise<void> | void;
|
|
8
|
+
}
|
|
9
|
+
export declare function runRustOnlyProcess(options: RunRustOnlyProcessOptions): Promise<void>;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { RustOnlyExchangeBinaryProfile } from './rust-only-exchange-binary.js';
|
|
2
|
+
import { type RustOnlyCaseReport, type RustOnlyFeatureFamily, type RustOnlyFormulaCalculationMode, type RustOnlyMismatchClassification } from './rust-only-report.js';
|
|
3
|
+
export interface CreateRustOnlyRegressionRunSummaryOptions {
|
|
4
|
+
readonly runId: string;
|
|
5
|
+
readonly outputRoot: string;
|
|
6
|
+
readonly timeoutMs: number;
|
|
7
|
+
readonly exchangeBinaryProfile: RustOnlyExchangeBinaryProfile;
|
|
8
|
+
readonly formulaCalculationMode: RustOnlyFormulaCalculationMode;
|
|
9
|
+
readonly calcChainMode?: 'off' | 'trusted';
|
|
10
|
+
readonly reports: readonly RustOnlyCaseReport[];
|
|
11
|
+
readonly performanceMetricsBySourcePath?: Readonly<Record<string, RustOnlyCasePerformanceMetrics>>;
|
|
12
|
+
}
|
|
13
|
+
export interface RustOnlyRegressionRunSummary {
|
|
14
|
+
readonly runId: string;
|
|
15
|
+
readonly generatedAt: string;
|
|
16
|
+
readonly outputRoot: string;
|
|
17
|
+
readonly timeoutMs: number;
|
|
18
|
+
readonly exchangeBinaryProfile: RustOnlyExchangeBinaryProfile;
|
|
19
|
+
readonly formulaCalculationMode: RustOnlyFormulaCalculationMode;
|
|
20
|
+
readonly calcChainMode?: 'off' | 'trusted';
|
|
21
|
+
readonly counts: {
|
|
22
|
+
readonly total: number;
|
|
23
|
+
readonly passed: number;
|
|
24
|
+
readonly failed: number;
|
|
25
|
+
readonly pendingReview: number;
|
|
26
|
+
readonly timedOut: number;
|
|
27
|
+
readonly skipped: number;
|
|
28
|
+
};
|
|
29
|
+
readonly directRustTimings: {
|
|
30
|
+
readonly importFormulaMs: RustOnlyTimingSummary;
|
|
31
|
+
readonly exportMs: RustOnlyTimingSummary;
|
|
32
|
+
};
|
|
33
|
+
readonly formulaValueSkips: RustOnlyFormulaValueSkipSummary;
|
|
34
|
+
readonly mismatchCountsByClassification: Partial<Record<RustOnlyMismatchClassification, number>>;
|
|
35
|
+
readonly featureCoverageMatrix: Record<RustOnlyFeatureFamily, RustOnlyFeatureStatusCounts>;
|
|
36
|
+
readonly performanceFindings: readonly RustOnlyPerformanceFinding[];
|
|
37
|
+
readonly representativeExamples: readonly RustOnlyRepresentativeCaseExample[];
|
|
38
|
+
readonly visualReview: {
|
|
39
|
+
readonly assessmentMode: 'ai-or-human-similarity-review';
|
|
40
|
+
readonly pixelPerfectComparison: false;
|
|
41
|
+
readonly passCondition: 'visually-similar';
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface RustOnlyFormulaValueSkipSummary {
|
|
45
|
+
readonly volatileRandomFormulaCount: number;
|
|
46
|
+
readonly examples: readonly {
|
|
47
|
+
readonly sourcePath: string;
|
|
48
|
+
readonly relativePath: string;
|
|
49
|
+
readonly sheet: string;
|
|
50
|
+
readonly address: string;
|
|
51
|
+
readonly formula?: string;
|
|
52
|
+
readonly reason: 'volatile-random-function';
|
|
53
|
+
}[];
|
|
54
|
+
}
|
|
55
|
+
export interface RustOnlyCasePerformanceMetrics {
|
|
56
|
+
readonly formulaCellCount?: number;
|
|
57
|
+
readonly totalCellCount?: number;
|
|
58
|
+
}
|
|
59
|
+
export interface RustOnlyPerformanceFinding {
|
|
60
|
+
readonly sourcePath: string;
|
|
61
|
+
readonly relativePath: string;
|
|
62
|
+
readonly stage: 'expanded-timeout' | 'formula' | 'import' | 'export';
|
|
63
|
+
readonly observedMs: number;
|
|
64
|
+
readonly thresholdMs: number;
|
|
65
|
+
readonly formulaCellCount?: number;
|
|
66
|
+
readonly totalCellCount?: number;
|
|
67
|
+
readonly severity: 'ok' | 'performance-bug';
|
|
68
|
+
}
|
|
69
|
+
export interface RustOnlyTimingSummary {
|
|
70
|
+
readonly count: number;
|
|
71
|
+
readonly totalMs: number;
|
|
72
|
+
readonly maxMs: number;
|
|
73
|
+
}
|
|
74
|
+
export interface RustOnlyFeatureStatusCounts {
|
|
75
|
+
readonly present: number;
|
|
76
|
+
readonly notPresent: number;
|
|
77
|
+
readonly unsupported: number;
|
|
78
|
+
readonly failed: number;
|
|
79
|
+
}
|
|
80
|
+
export interface RustOnlyRepresentativeCaseExample {
|
|
81
|
+
readonly sourcePath: string;
|
|
82
|
+
readonly relativePath: string;
|
|
83
|
+
readonly status: RustOnlyCaseReport['status'];
|
|
84
|
+
readonly classifications: readonly RustOnlyMismatchClassification[];
|
|
85
|
+
readonly artifactPaths: {
|
|
86
|
+
readonly recordValue1Json: string;
|
|
87
|
+
readonly recordValue2Xlsx: string;
|
|
88
|
+
readonly excelComCalculatedXlsx: string;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export interface WriteRustOnlyRegressionRunArtifactsOptions extends CreateRustOnlyRegressionRunSummaryOptions {
|
|
92
|
+
readonly summaryJsonPath?: string;
|
|
93
|
+
readonly summaryHtmlPath?: string;
|
|
94
|
+
readonly timeoutManifestPath?: string;
|
|
95
|
+
}
|
|
96
|
+
export interface RustOnlyRegressionRunArtifacts {
|
|
97
|
+
readonly summaryJsonPath: string;
|
|
98
|
+
readonly summaryHtmlPath: string;
|
|
99
|
+
readonly timeoutManifestPath: string;
|
|
100
|
+
readonly summary: RustOnlyRegressionRunSummary;
|
|
101
|
+
}
|
|
102
|
+
export declare function createRustOnlyRegressionRunSummary(options: CreateRustOnlyRegressionRunSummaryOptions): RustOnlyRegressionRunSummary;
|
|
103
|
+
export declare function writeRustOnlyRegressionRunArtifacts(options: WriteRustOnlyRegressionRunArtifactsOptions): Promise<RustOnlyRegressionRunArtifacts>;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { RustOnlyExchangeBinaryProfile } from './rust-only-exchange-binary.js';
|
|
2
|
+
export declare const REQUIRED_FEATURE_FAMILIES: readonly ['conditional-format', 'data-validation', 'grouping', 'chart', 'pivot-table', 'cell-style', 'font-family', 'font-style', 'bold', 'italic', 'underline', 'strikethrough', 'border', 'ordinary-cell-value', 'floating-image', 'cell-image', 'shape', 'filter', 'table', 'defined-name', 'merged-cell', 'number-format', 'sparkline', 'hyperlink', 'alignment', 'protection'];
|
|
3
|
+
export declare const REQUIRED_STAGE_TIMING_KEYS: readonly ['rustImportFormulaMs', 'rustExportMs', 'formulaCacheExtractionMs', 'excelComOracleMs', 'viewHostLoadMs', 'viewHostRenderMs', 'viewHostScreenshotMs', 'featureExtractionMs', 'totalCaseMs'];
|
|
4
|
+
export type RustOnlyFeatureFamily = (typeof REQUIRED_FEATURE_FAMILIES)[number];
|
|
5
|
+
export type RustOnlyStageTimingKey = (typeof REQUIRED_STAGE_TIMING_KEYS)[number];
|
|
6
|
+
export type RustOnlyFormulaCalculationMode = 'forced' | 'when_empty' | 'no';
|
|
7
|
+
export type RustOnlyCaseStatus = 'passed' | 'failed' | 'pending-review' | 'timed-out' | 'skipped';
|
|
8
|
+
export type RustOnlyFeatureStatus = 'present' | 'not-present' | 'unsupported' | 'failed';
|
|
9
|
+
export type RustOnlyMismatchClassification = 'import' | 'formula' | 'number-format' | 'export' | 'feature-model' | 'view-render' | 'excel-com-unavailable' | 'unsupported-external-cache' | 'corrupt-zip' | 'invalid-package' | 'unsupported-workbook' | 'timeout' | 'performance' | 'unknown';
|
|
10
|
+
export interface RustOnlyScreenshotArtifact {
|
|
11
|
+
readonly path: string;
|
|
12
|
+
readonly sheet: string;
|
|
13
|
+
readonly featureTags: readonly RustOnlyFeatureFamily[];
|
|
14
|
+
readonly capturedAt: string;
|
|
15
|
+
readonly source?: 'excel-source' | 'view-host-json' | 'excel-export';
|
|
16
|
+
readonly viewHostUrl?: string;
|
|
17
|
+
readonly viewport?: string;
|
|
18
|
+
readonly scrollIndex?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface RustOnlyVisualComparisonArtifact {
|
|
21
|
+
readonly id: 'source-excel-vs-view-host-json' | 'source-excel-vs-exported-excel';
|
|
22
|
+
readonly purpose: 'import-accuracy' | 'export-accuracy';
|
|
23
|
+
readonly expectedPath: string;
|
|
24
|
+
readonly actualPath: string;
|
|
25
|
+
readonly diffPath: string;
|
|
26
|
+
readonly expectedSize: {
|
|
27
|
+
readonly width: number;
|
|
28
|
+
readonly height: number;
|
|
29
|
+
};
|
|
30
|
+
readonly actualSize: {
|
|
31
|
+
readonly width: number;
|
|
32
|
+
readonly height: number;
|
|
33
|
+
};
|
|
34
|
+
readonly comparedSize: {
|
|
35
|
+
readonly width: number;
|
|
36
|
+
readonly height: number;
|
|
37
|
+
};
|
|
38
|
+
readonly threshold: number;
|
|
39
|
+
readonly passed: boolean;
|
|
40
|
+
readonly metrics: {
|
|
41
|
+
readonly similarity: number;
|
|
42
|
+
readonly ssim: number;
|
|
43
|
+
readonly meanAbsoluteError: number;
|
|
44
|
+
readonly rootMeanSquareError: number;
|
|
45
|
+
readonly differentPixelRatio: number;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export interface RustOnlyCaseArtifacts {
|
|
49
|
+
readonly sourceWorkbook: string;
|
|
50
|
+
readonly recordValue1Json: string;
|
|
51
|
+
readonly recordValue1FormulaValues: string;
|
|
52
|
+
readonly recordValue2Xlsx: string;
|
|
53
|
+
readonly recordValue2FormulaValues: string;
|
|
54
|
+
readonly recordValue2ExcelComOpenedXlsx?: string;
|
|
55
|
+
readonly excelComCalculatedXlsx: string;
|
|
56
|
+
readonly excelComFormulaValues: string;
|
|
57
|
+
readonly sourceVsExportedOoxmlDiff?: string;
|
|
58
|
+
readonly sourceExcelScreenshots: readonly RustOnlyScreenshotArtifact[];
|
|
59
|
+
readonly viewHostScreenshots: readonly RustOnlyScreenshotArtifact[];
|
|
60
|
+
readonly recordValue2ExcelScreenshots: readonly RustOnlyScreenshotArtifact[];
|
|
61
|
+
readonly visualComparisonArtifacts: readonly RustOnlyVisualComparisonArtifact[];
|
|
62
|
+
readonly visualReviewArtifacts: readonly string[];
|
|
63
|
+
}
|
|
64
|
+
export interface RustOnlyFeatureCoverage {
|
|
65
|
+
readonly status: RustOnlyFeatureStatus;
|
|
66
|
+
readonly evidenceArtifacts: readonly string[];
|
|
67
|
+
readonly comparisonArtifacts: readonly string[];
|
|
68
|
+
readonly failureStage?: RustOnlyMismatchClassification;
|
|
69
|
+
}
|
|
70
|
+
export interface RustOnlyMismatchExample {
|
|
71
|
+
readonly sheet: string;
|
|
72
|
+
readonly address: string;
|
|
73
|
+
readonly formula?: string;
|
|
74
|
+
readonly expected: {
|
|
75
|
+
readonly value: unknown;
|
|
76
|
+
readonly type: string;
|
|
77
|
+
};
|
|
78
|
+
readonly actual: {
|
|
79
|
+
readonly value: unknown;
|
|
80
|
+
readonly type: string;
|
|
81
|
+
};
|
|
82
|
+
readonly likelyFailureStage: RustOnlyMismatchClassification;
|
|
83
|
+
}
|
|
84
|
+
export interface RustOnlyMismatchGroup {
|
|
85
|
+
readonly classification: RustOnlyMismatchClassification;
|
|
86
|
+
readonly formulaFamily?: string;
|
|
87
|
+
readonly valueTypeTransition?: string;
|
|
88
|
+
readonly numberFormatCategory?: string;
|
|
89
|
+
readonly sheet?: string;
|
|
90
|
+
readonly featureFamily?: RustOnlyFeatureFamily;
|
|
91
|
+
readonly count: number;
|
|
92
|
+
readonly examples: readonly RustOnlyMismatchExample[];
|
|
93
|
+
}
|
|
94
|
+
export interface RustOnlyFormulaValueSkips {
|
|
95
|
+
readonly volatileRandomFormulaCount: number;
|
|
96
|
+
readonly examples: readonly {
|
|
97
|
+
readonly sheet: string;
|
|
98
|
+
readonly address: string;
|
|
99
|
+
readonly formula?: string;
|
|
100
|
+
readonly reason: 'volatile-random-function';
|
|
101
|
+
}[];
|
|
102
|
+
}
|
|
103
|
+
export interface RustOnlyCaseReport {
|
|
104
|
+
readonly runnerVersion: string;
|
|
105
|
+
readonly status: RustOnlyCaseStatus;
|
|
106
|
+
readonly exchangeBinaryProfile: RustOnlyExchangeBinaryProfile;
|
|
107
|
+
readonly formulaCalculationMode: RustOnlyFormulaCalculationMode;
|
|
108
|
+
readonly calcChainMode?: 'off' | 'trusted';
|
|
109
|
+
readonly source: {
|
|
110
|
+
readonly path: string;
|
|
111
|
+
readonly root: string;
|
|
112
|
+
readonly relativePath: string;
|
|
113
|
+
readonly sha256: string;
|
|
114
|
+
};
|
|
115
|
+
readonly artifacts: RustOnlyCaseArtifacts;
|
|
116
|
+
readonly featureCoverage: Partial<Record<RustOnlyFeatureFamily, RustOnlyFeatureCoverage>>;
|
|
117
|
+
readonly mismatchGroups: readonly RustOnlyMismatchGroup[];
|
|
118
|
+
readonly formulaValueSkips?: RustOnlyFormulaValueSkips;
|
|
119
|
+
readonly performanceMetrics?: {
|
|
120
|
+
readonly formulaCellCount?: number;
|
|
121
|
+
readonly totalCellCount?: number;
|
|
122
|
+
};
|
|
123
|
+
readonly stageTimings: Partial<Record<RustOnlyStageTimingKey, number>>;
|
|
124
|
+
}
|
|
125
|
+
export type RustOnlyStageTimings = Record<RustOnlyStageTimingKey, number>;
|
|
126
|
+
export interface RustOnlyCaseReportValidationResult {
|
|
127
|
+
readonly ok: boolean;
|
|
128
|
+
readonly errors: readonly string[];
|
|
129
|
+
}
|
|
130
|
+
export declare function buildRustOnlyStageTimings(stageTimings: RustOnlyStageTimings): RustOnlyStageTimings;
|
|
131
|
+
export declare function validateRustOnlyCaseReport(input: unknown): RustOnlyCaseReportValidationResult;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { RustOnlyRegressionCase } from './rust-only-discovery.js';
|
|
2
|
+
export interface RustOnlySequentialStages {
|
|
3
|
+
readonly hashSource: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
4
|
+
readonly generateRecordValue1: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
5
|
+
readonly extractRecordValue1: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
6
|
+
readonly generateRecordValue2: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
7
|
+
readonly extractRecordValue2: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
8
|
+
readonly createExcelComOracle: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
9
|
+
readonly compareFormulaValues: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
10
|
+
readonly extractFeatureEvidence: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
11
|
+
readonly validateViewHost: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
12
|
+
readonly writeCaseReport: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export interface RunRustOnlyRegressionSequentiallyOptions {
|
|
15
|
+
readonly cases: readonly RustOnlyRegressionCase[];
|
|
16
|
+
readonly stages: RustOnlySequentialStages;
|
|
17
|
+
}
|
|
18
|
+
export interface RunRustOnlyRegressionCaseOptions {
|
|
19
|
+
readonly testCase: RustOnlyRegressionCase;
|
|
20
|
+
readonly stages: RustOnlySequentialStages;
|
|
21
|
+
readonly legacyHeadlessFormulaCalculation?: (testCase: RustOnlyRegressionCase) => Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export declare function runRustOnlyRegressionSequentially(options: RunRustOnlyRegressionSequentiallyOptions): Promise<void>;
|
|
24
|
+
export declare function runRustOnlyRegressionCase(options: RunRustOnlyRegressionCaseOptions): Promise<void>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { RustOnlyExchangeBinaryProfile } from './rust-only-exchange-binary.js';
|
|
2
|
+
import { type RustOnlyCaseReport, type RustOnlyFormulaCalculationMode, type RustOnlyStageTimingKey } from './rust-only-report.js';
|
|
3
|
+
export declare const DEFAULT_FIRST_PASS_CASE_TIMEOUT_MS = 120000;
|
|
4
|
+
export declare const EXPANDED_TIMEOUT_RERUN_CASE_TIMEOUT_MS = 300000;
|
|
5
|
+
export declare const DEBUG_REPAIR_RERUN_CASE_TIMEOUT_MS = 600000;
|
|
6
|
+
export type RustOnlyRegressionPass = 'first' | 'expanded-timeout';
|
|
7
|
+
export type RustOnlyActiveStage = 'sourceHash' | 'rustImportFormula' | 'recordValue1Extraction' | 'rustExport' | 'recordValue2Extraction' | 'recordValue2ExcelComOpen' | 'excelComOracle' | 'formulaComparison' | 'featureExtraction' | 'viewHostLoad' | 'viewHostRender' | 'sourceExcelScreenshot' | 'exportedExcelScreenshot' | 'viewHostScreenshot' | 'caseReportWrite';
|
|
8
|
+
export interface ResolveRustOnlyCaseTimeoutOptions {
|
|
9
|
+
readonly pass: RustOnlyRegressionPass;
|
|
10
|
+
readonly timeoutMs?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ResolveRustOnlyBinaryProfileCaseTimeoutOptions extends ResolveRustOnlyCaseTimeoutOptions {
|
|
13
|
+
readonly binaryProfile: RustOnlyExchangeBinaryProfile;
|
|
14
|
+
}
|
|
15
|
+
export interface CreateRustOnlyTimeoutReportOptions {
|
|
16
|
+
readonly runnerVersion: string;
|
|
17
|
+
readonly sourcePath: string;
|
|
18
|
+
readonly sourceRoot: string;
|
|
19
|
+
readonly relativePath: string;
|
|
20
|
+
readonly sourceSha256: string;
|
|
21
|
+
readonly exchangeBinaryProfile: RustOnlyExchangeBinaryProfile;
|
|
22
|
+
readonly formulaCalculationMode: RustOnlyFormulaCalculationMode;
|
|
23
|
+
readonly calcChainMode?: 'off' | 'trusted';
|
|
24
|
+
readonly activeStage: RustOnlyActiveStage;
|
|
25
|
+
readonly elapsedMs: number;
|
|
26
|
+
readonly timeoutMs: number;
|
|
27
|
+
readonly stageTimings?: Partial<Record<RustOnlyStageTimingKey, number>>;
|
|
28
|
+
}
|
|
29
|
+
export interface RustOnlyTimeoutDiagnostics {
|
|
30
|
+
readonly activeStage: RustOnlyActiveStage;
|
|
31
|
+
readonly elapsedMs: number;
|
|
32
|
+
readonly timeoutMs: number;
|
|
33
|
+
}
|
|
34
|
+
export interface RustOnlyTimedOutCaseReport extends RustOnlyCaseReport {
|
|
35
|
+
readonly timeout: RustOnlyTimeoutDiagnostics;
|
|
36
|
+
}
|
|
37
|
+
export interface RustOnlyTimeoutManifestEntry extends RustOnlyTimeoutDiagnostics {
|
|
38
|
+
readonly caseId: string;
|
|
39
|
+
readonly sourcePath: string;
|
|
40
|
+
readonly sourceRoot: string;
|
|
41
|
+
readonly relativePath: string;
|
|
42
|
+
}
|
|
43
|
+
export interface RustOnlyExpandedTimeoutRerunCase {
|
|
44
|
+
readonly caseId: string;
|
|
45
|
+
readonly sourcePath: string;
|
|
46
|
+
readonly sourceRoot: string;
|
|
47
|
+
readonly relativePath: string;
|
|
48
|
+
readonly firstPassTimeout: RustOnlyTimeoutDiagnostics;
|
|
49
|
+
}
|
|
50
|
+
export interface RustOnlyExpandedTimeoutRerunPlan {
|
|
51
|
+
readonly pass: 'expanded-timeout';
|
|
52
|
+
readonly timeoutMs: typeof EXPANDED_TIMEOUT_RERUN_CASE_TIMEOUT_MS;
|
|
53
|
+
readonly cases: readonly RustOnlyExpandedTimeoutRerunCase[];
|
|
54
|
+
}
|
|
55
|
+
export declare function resolveRustOnlyCaseTimeoutMs(options: ResolveRustOnlyCaseTimeoutOptions): number;
|
|
56
|
+
export declare function resolveRustOnlyBinaryProfileCaseTimeoutMs(options: ResolveRustOnlyBinaryProfileCaseTimeoutOptions): number;
|
|
57
|
+
export declare function resolveRustOnlyStageProcessTimeoutMs(options: {
|
|
58
|
+
readonly caseTimeoutMs: number;
|
|
59
|
+
readonly elapsedMs: number;
|
|
60
|
+
}): number;
|
|
61
|
+
export declare function createRustOnlyTimeoutReport(options: CreateRustOnlyTimeoutReportOptions): RustOnlyTimedOutCaseReport;
|
|
62
|
+
export declare function writeRustOnlyTimeoutManifest(manifestPath: string, entries: readonly RustOnlyTimeoutManifestEntry[]): Promise<void>;
|
|
63
|
+
export declare function loadRustOnlyExpandedTimeoutRerunPlan(manifestPath: string): Promise<RustOnlyExpandedTimeoutRerunPlan>;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import type { RustOnlyCaseReport, RustOnlyMismatchGroup } from './rust-only-report.js';
|
|
2
|
+
export interface RustOnlyViewHostLoadRequest {
|
|
3
|
+
readonly workbookJsonPath: string;
|
|
4
|
+
readonly formulaCalculation: 'disabled';
|
|
5
|
+
}
|
|
6
|
+
export interface RustOnlyViewHostLoadResult {
|
|
7
|
+
readonly loaded: boolean;
|
|
8
|
+
readonly rendered: boolean;
|
|
9
|
+
readonly workbookId?: string;
|
|
10
|
+
readonly workbookName?: string;
|
|
11
|
+
readonly sheetIds?: readonly string[];
|
|
12
|
+
readonly sheetNames?: readonly string[];
|
|
13
|
+
readonly url: string;
|
|
14
|
+
readonly sessionId: string;
|
|
15
|
+
readonly consoleErrors?: readonly string[];
|
|
16
|
+
readonly uncaughtErrors?: readonly string[];
|
|
17
|
+
readonly timeout?: {
|
|
18
|
+
readonly activeStage: string;
|
|
19
|
+
readonly elapsedMs: number;
|
|
20
|
+
readonly timeoutMs: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface RustOnlyViewHostPort {
|
|
24
|
+
readonly loadWorkbookJson: (request: RustOnlyViewHostLoadRequest) => Promise<RustOnlyViewHostLoadResult>;
|
|
25
|
+
readonly captureScreenshot?: (request: {
|
|
26
|
+
readonly outputPath: string;
|
|
27
|
+
readonly sheet: string;
|
|
28
|
+
readonly viewport?: string;
|
|
29
|
+
}) => Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export interface ValidateRustOnlyViewHostRecordValue1Options {
|
|
32
|
+
readonly recordValue1Json: string;
|
|
33
|
+
readonly viewHost: RustOnlyViewHostPort;
|
|
34
|
+
readonly legacyHeadlessFormulaCalculation?: () => Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export interface RustOnlyViewHostValidationResult extends RustOnlyViewHostLoadResult {
|
|
37
|
+
readonly ok: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface RustOnlyViewHostProcessResult {
|
|
40
|
+
readonly status: number | null;
|
|
41
|
+
readonly stdout?: string;
|
|
42
|
+
readonly stderr?: string;
|
|
43
|
+
readonly error?: Error;
|
|
44
|
+
}
|
|
45
|
+
export interface RustOnlyViewHostProcessRunnerOptions {
|
|
46
|
+
readonly cwd: string;
|
|
47
|
+
readonly env: NodeJS.ProcessEnv;
|
|
48
|
+
readonly timeoutMs: number;
|
|
49
|
+
}
|
|
50
|
+
export type RustOnlyViewHostProcessRunner = (command: string, args: readonly string[], options: RustOnlyViewHostProcessRunnerOptions) => RustOnlyViewHostProcessResult;
|
|
51
|
+
export interface CreateRustOnlyCliViewHostPortOptions {
|
|
52
|
+
readonly cliCwd: string;
|
|
53
|
+
readonly chromePath?: string;
|
|
54
|
+
readonly cliCommand?: string;
|
|
55
|
+
readonly cliCommandArgsPrefix?: readonly string[];
|
|
56
|
+
readonly command?: string;
|
|
57
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
58
|
+
readonly processRunner?: RustOnlyViewHostProcessRunner;
|
|
59
|
+
readonly timeoutMs?: number;
|
|
60
|
+
readonly screenshotWaitMs?: number;
|
|
61
|
+
readonly screenshotFileWaitMs?: number;
|
|
62
|
+
readonly viewport?: {
|
|
63
|
+
readonly width: number;
|
|
64
|
+
readonly height: number;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export interface CreateRustOnlyStaticViewerPortOptions {
|
|
68
|
+
readonly assetsRoot: string;
|
|
69
|
+
readonly chromePath?: string;
|
|
70
|
+
readonly cliCwd: string;
|
|
71
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
72
|
+
readonly processRunner?: RustOnlyViewHostProcessRunner;
|
|
73
|
+
readonly screenshotWaitMs?: number;
|
|
74
|
+
readonly screenshotFileWaitMs?: number;
|
|
75
|
+
readonly timeoutMs?: number;
|
|
76
|
+
readonly univerStorageModulePath?: string;
|
|
77
|
+
readonly viewport?: {
|
|
78
|
+
readonly width: number;
|
|
79
|
+
readonly height: number;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export declare function validateRustOnlyViewHostRecordValue1(options: ValidateRustOnlyViewHostRecordValue1Options): Promise<RustOnlyViewHostValidationResult>;
|
|
83
|
+
export declare function createRustOnlyCliViewHostPort(options: CreateRustOnlyCliViewHostPortOptions): RustOnlyViewHostPort;
|
|
84
|
+
export declare function createRustOnlyStaticViewerPort(options: CreateRustOnlyStaticViewerPortOptions): RustOnlyViewHostPort;
|
|
85
|
+
export interface CaptureRustOnlyViewHostScreenshotOptions {
|
|
86
|
+
readonly workbookJsonPath: string;
|
|
87
|
+
readonly sheet: string;
|
|
88
|
+
readonly viewport?: string;
|
|
89
|
+
readonly featureTags: readonly string[];
|
|
90
|
+
readonly outputPath: string;
|
|
91
|
+
readonly viewHostUrl: string;
|
|
92
|
+
readonly sessionId: string;
|
|
93
|
+
readonly capturedAt?: string;
|
|
94
|
+
readonly viewHost: RustOnlyViewHostPort;
|
|
95
|
+
}
|
|
96
|
+
export interface RustOnlyViewHostScreenshotMetadata {
|
|
97
|
+
readonly path: string;
|
|
98
|
+
readonly workbookFile: string;
|
|
99
|
+
readonly sheet: string;
|
|
100
|
+
readonly viewport?: string;
|
|
101
|
+
readonly featureTags: readonly string[];
|
|
102
|
+
readonly capturedAt: string;
|
|
103
|
+
readonly viewHostUrl: string;
|
|
104
|
+
readonly sessionId: string;
|
|
105
|
+
}
|
|
106
|
+
export declare function captureRustOnlyViewHostScreenshot(options: CaptureRustOnlyViewHostScreenshotOptions): Promise<RustOnlyViewHostScreenshotMetadata>;
|
|
107
|
+
export interface CreateRustOnlyVisualReviewArtifactOptions {
|
|
108
|
+
readonly viewHostScreenshotPath: string;
|
|
109
|
+
readonly excelScreenshotPath?: string;
|
|
110
|
+
readonly ooxmlFeatureFactsPath?: string;
|
|
111
|
+
readonly sheet: string;
|
|
112
|
+
readonly featureTags: readonly string[];
|
|
113
|
+
}
|
|
114
|
+
export interface RustOnlyVisualReviewArtifact {
|
|
115
|
+
readonly assessmentMode: 'ai-or-human-similarity-review';
|
|
116
|
+
readonly pixelPerfectComparison: false;
|
|
117
|
+
readonly passCondition: 'visually-similar';
|
|
118
|
+
readonly viewHostScreenshotPath: string;
|
|
119
|
+
readonly excelScreenshotPath?: string;
|
|
120
|
+
readonly ooxmlFeatureFactsPath?: string;
|
|
121
|
+
readonly sheet: string;
|
|
122
|
+
readonly featureTags: readonly string[];
|
|
123
|
+
}
|
|
124
|
+
export declare function createRustOnlyVisualReviewArtifact(options: CreateRustOnlyVisualReviewArtifactOptions): RustOnlyVisualReviewArtifact;
|
|
125
|
+
export interface RustOnlyVisualScreenshotEvidence {
|
|
126
|
+
readonly path: string;
|
|
127
|
+
readonly sheet: string;
|
|
128
|
+
readonly viewport: string;
|
|
129
|
+
readonly scrollIndex: number;
|
|
130
|
+
}
|
|
131
|
+
export interface CreateRustOnlyAgentVisualReviewArtifactOptions {
|
|
132
|
+
readonly sourceWorkbookPath: string;
|
|
133
|
+
readonly recordValue1JsonPath: string;
|
|
134
|
+
readonly exportedWorkbookPath: string;
|
|
135
|
+
readonly featureTags: readonly string[];
|
|
136
|
+
readonly screenshotSets: {
|
|
137
|
+
readonly sourceExcel: readonly RustOnlyVisualScreenshotEvidence[];
|
|
138
|
+
readonly viewHostJson: readonly RustOnlyVisualScreenshotEvidence[];
|
|
139
|
+
readonly exportedExcel: readonly RustOnlyVisualScreenshotEvidence[];
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export interface RustOnlyAgentVisualReviewComparison {
|
|
143
|
+
readonly id: 'source-excel-vs-view-host-json' | 'source-excel-vs-exported-excel';
|
|
144
|
+
readonly purpose: 'import-accuracy' | 'export-accuracy';
|
|
145
|
+
readonly expected: 'sourceExcel';
|
|
146
|
+
readonly actual: 'viewHostJson' | 'exportedExcel';
|
|
147
|
+
readonly status: 'pending-agent-review' | 'passed' | 'failed' | 'unavailable';
|
|
148
|
+
readonly agentJudgement: null | {
|
|
149
|
+
readonly accurate: boolean;
|
|
150
|
+
readonly confidence: 'low' | 'medium' | 'high';
|
|
151
|
+
readonly summary: string;
|
|
152
|
+
};
|
|
153
|
+
readonly notes: readonly string[];
|
|
154
|
+
}
|
|
155
|
+
export interface RustOnlyAgentVisualReviewArtifact {
|
|
156
|
+
readonly schemaVersion: 1;
|
|
157
|
+
readonly assessmentMode: 'agent-visual-similarity-review';
|
|
158
|
+
readonly pixelPerfectComparison: false;
|
|
159
|
+
readonly passCondition: 'visually-similar-for-present-feature-families';
|
|
160
|
+
readonly sourceWorkbookPath: string;
|
|
161
|
+
readonly recordValue1JsonPath: string;
|
|
162
|
+
readonly exportedWorkbookPath: string;
|
|
163
|
+
readonly featureTags: readonly string[];
|
|
164
|
+
readonly screenshotSets: CreateRustOnlyAgentVisualReviewArtifactOptions['screenshotSets'];
|
|
165
|
+
readonly comparisons: readonly RustOnlyAgentVisualReviewComparison[];
|
|
166
|
+
}
|
|
167
|
+
export declare function createRustOnlyAgentVisualReviewArtifact(options: CreateRustOnlyAgentVisualReviewArtifactOptions): RustOnlyAgentVisualReviewArtifact;
|
|
168
|
+
export declare function createRustOnlyAgentVisualReviewMismatchGroups(artifact: RustOnlyAgentVisualReviewArtifact): RustOnlyMismatchGroup[];
|
|
169
|
+
export declare function hasPendingRustOnlyAgentVisualReview(artifacts: readonly RustOnlyAgentVisualReviewArtifact[]): boolean;
|
|
170
|
+
export declare function applyRustOnlyAgentVisualReviewGateToReport(report: RustOnlyCaseReport, artifacts: readonly RustOnlyAgentVisualReviewArtifact[]): RustOnlyCaseReport;
|
|
171
|
+
export declare function parseRustOnlyAgentVisualReviewArtifactJson(input: string): RustOnlyAgentVisualReviewArtifact;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RustOnlyFormulaValue } from './rust-only-formula-comparison.js';
|
|
2
|
+
export declare function extractRustOnlyXlsxFormulaValues(inputXlsxPath: string): Promise<RustOnlyFormulaValue[]>;
|
|
3
|
+
export declare function extractSharedFormulaAnchorMapFromXlsxSheetXml(xml: string): Map<string, string>;
|
|
4
|
+
export declare function formulaFromXlsxCellXml(body: string, sharedFormulaBySi?: ReadonlyMap<string, string>): string | undefined;
|
|
5
|
+
export declare function cachedValueFromXlsxCellXml(body: string, type: string | undefined, sharedStrings: readonly string[]): unknown;
|
|
6
|
+
export declare function inferXlsxCachedValueType(body: string): string;
|
|
7
|
+
export declare function readXlsxTextParts(xlsxPath: string): Promise<Record<string, string>>;
|
|
8
|
+
export declare function decodeXlsxXmlText(value: string): string;
|