Files
Web_FreeCAD_Bitbybit/scripts/run-freecad-property-direction-success.mjs
wangdequan d11566403d
Some checks failed
real-verification / chrome (push) Has been cancelled
real-verification / freecad-oracle (push) Has been cancelled
real-verification / wasm (push) Has been cancelled
feat: close ordered pairs and property codec batches
2026-08-17 04:58:46 -04:00

28 lines
2.3 KiB
JavaScript

import { existsSync } from 'node:fs'
import { readFile } from 'node:fs/promises'
import { spawnSync } from 'node:child_process'
import { resolve } from 'node:path'
const root = resolve(new URL('..', import.meta.url).pathname)
const executable = process.env.FREECAD_CMD || resolve(root, '.cache/freecad/install-desktop/bin/FreeCADCmd')
const sysroot = resolve(root, '.cache/freecad/sysroot')
const scriptPath = resolve(root, 'scripts/freecad-property-direction-success.py')
const outputPath = resolve(root, 'config/freecad-property-direction-success.json')
if (!existsSync(executable)) throw new Error(`FreeCAD PropertyDirection executable is missing: ${executable}`)
const execution = spawnSync(executable, ['--python-path', resolve(sysroot, 'usr/lib/python3/dist-packages'), scriptPath], {
cwd: root,
encoding: 'utf8',
timeout: 120_000,
maxBuffer: 32 * 1024 * 1024,
env: {
...process.env,
FREECAD_PROPERTY_DIRECTION_SUCCESS_OUTPUT: outputPath,
PYTHONPATH: `${resolve(sysroot, 'usr/lib/python3/dist-packages')}${process.env.PYTHONPATH ? `:${process.env.PYTHONPATH}` : ''}`,
LD_LIBRARY_PATH: `${resolve(sysroot, 'usr/lib/x86_64-linux-gnu')}${process.env.LD_LIBRARY_PATH ? `:${process.env.LD_LIBRARY_PATH}` : ''}`,
},
})
const output = `${execution.stdout || ''}\n${execution.stderr || ''}`
if (execution.error || execution.status !== 0 || !output.includes('FREECAD_PROPERTY_DIRECTION_SUCCESS_RESULT=')) throw new Error(`FreeCAD PropertyDirection success probe failed with status ${execution.status}: ${execution.error?.message || output.trim()}`)
const report = JSON.parse(await readFile(outputPath, 'utf8'))
console.log(JSON.stringify({ status: report.status, output: 'config/freecad-property-direction-success.json', caseCount: report.caseCount, cases: report.cases.map(({ objectTypeId, propertyName, phases }) => ({ objectTypeId, propertyName, values: Object.fromEntries(Object.entries(phases).map(([phase, snapshots]) => [phase, snapshots.afterRecompute.value])), shapes: Object.fromEntries(Object.entries(phases).map(([phase, snapshots]) => [phase, { shapeType: snapshots.afterRecompute.shape.shapeType, valid: snapshots.afterRecompute.shape.valid, solids: snapshots.afterRecompute.shape.solids, faces: snapshots.afterRecompute.shape.faces, edges: snapshots.afterRecompute.shape.edges }])) })) }, null, 2))