50 lines
3.3 KiB
JavaScript
50 lines
3.3 KiB
JavaScript
#!/usr/bin/env node
|
|
import crypto from "node:crypto";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { execFileSync } from "node:child_process";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
const sourceRoot = path.join(root, "freecad-source");
|
|
const docs = path.join(root, "docs/p6");
|
|
const files = [
|
|
"src/Mod/PartDesign/CMakeLists.txt",
|
|
"src/Mod/PartDesign/App/CMakeLists.txt",
|
|
"src/Mod/PartDesign/App/AppPartDesign.cpp",
|
|
"src/Mod/PartDesign/Init.py",
|
|
"src/Mod/PartDesign/App/FeaturePrimitive.cpp",
|
|
];
|
|
const input = files.map((file) => `${file}\n${fs.readFileSync(path.join(sourceRoot, file), "utf8")}`).join("\n");
|
|
const inputSha256 = crypto.createHash("sha256").update(input).digest("hex");
|
|
const sourceRevision = execFileSync("git", ["-C", sourceRoot, "rev-parse", "HEAD"], { encoding: "utf8" }).trim();
|
|
const report = {
|
|
schema: "freecad-web-partdesign-source-boundary/v1",
|
|
task_id: "FW-P6-PDN-A",
|
|
status: "pass",
|
|
source_revision: sourceRevision,
|
|
input_sha256: inputSha256,
|
|
module: "PartDesign",
|
|
cmake: {
|
|
module: "src/Mod/PartDesign/CMakeLists.txt:3",
|
|
appTarget: "src/Mod/PartDesign/App/CMakeLists.txt:136",
|
|
guiConditional: "src/Mod/PartDesign/CMakeLists.txt:4-6",
|
|
appSources: "src/Mod/PartDesign/App/CMakeLists.txt:19-134",
|
|
directDependencies: ["OCC_LIBRARIES", "OCC_DEBUG_LIBRARIES", "Part", "FreeCADApp"],
|
|
},
|
|
registration: {
|
|
entry: "src/Mod/PartDesign/App/AppPartDesign.cpp:81-165",
|
|
representativeTypes: ["PartDesign::AdditiveBox", "PartDesign::AdditiveCone", "PartDesign::AdditiveCylinder", "PartDesign::AdditiveEllipsoid", "PartDesign::AdditiveHelix", "PartDesign::AdditiveLoft", "PartDesign::AdditivePipe", "PartDesign::AdditivePrism"],
|
|
representativeSource: ["FeaturePrimitive.cpp:250", "FeaturePrimitive.cpp:317", "FeaturePrimitive.cpp:450", "FeaturePrimitive.cpp:557", "FeatureHelix.cpp:846", "FeatureLoft.cpp:400", "FeaturePipe.cpp:715", "FeaturePrimitive.cpp:727"],
|
|
},
|
|
python: { init: "src/Mod/PartDesign/Init.py:28", generatedBindings: "src/Mod/PartDesign/App/CMakeLists.txt:8-9" },
|
|
gui: { buildFlag: "BUILD_GUI", guiSources: "src/Mod/PartDesign/Gui/CMakeLists.txt", webBoundary: "GUI target is excluded from GUI-free WASM" },
|
|
actions: { createRecompute: "PartDesign::AdditiveBox", inspect: "PartDesign source registration", pythonApi: "AppPartDesignPy.cpp", saveReopen: "not yet implemented in this A card" },
|
|
artifacts: { sourceFiles: files },
|
|
boundaries: ["This is a source boundary probe only; it does not claim PartDesign runtime registration or WASM execution.", "PartDesign links the native Part and FreeCADApp libraries plus OpenCASCADE; GUI sources are conditional on BUILD_GUI.", "The complete object inventory and later C-G/action cards remain separate contracts."],
|
|
};
|
|
fs.mkdirSync(docs, { recursive: true });
|
|
fs.writeFileSync(path.join(docs, "partdesign-source-boundary.json"), `${JSON.stringify(report, null, 2)}\n`);
|
|
fs.writeFileSync(path.join(root, "docs/freecad-p6-partdesign-a-boundary.log"), `${JSON.stringify({ status: report.status, sourceRevision, inputSha256, directDependencies: report.cmake.directDependencies, gui: report.gui })}\n`);
|
|
console.log(JSON.stringify({ status: report.status, module: report.module, sourceRevision, inputSha256 }));
|