Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
99428972cThis file is pinned to the selected release. Download the original to open it in your design tool.
#!/usr/bin/env node
const fs = require('fs')
const assert = require('assert')
const yaml = require('yaml')
const path = process.env.BOLTS_PATH || 'vendor/BOLTS'
const output = process.env.DATA_OUTPUT_PATH || '.'
const nuts = yaml.parse(fs.readFileSync(`${path}/data/nut.blt`, 'utf8')).classes
const bolts = [].concat(
yaml.parse(fs.readFileSync(`${path}/data/hex_socket.blt`, 'utf8')).classes,
yaml.parse(fs.readFileSync(`${path}/data/hex.blt`, 'utf8')).classes,
)
const processClass = (classes, id, parameterMappings) => {
const class_ = classes.find(c => c.id == id)
let columns = {}
for (const [output, param] of Object.entries(parameterMappings)) {
columns[output] = class_.parameters.tables.columns.indexOf(param);
}
const data = class_.parameters.tables.data
return Object.fromEntries(
Object.entries(data).map(e =>
[e[0], Object.fromEntries(
Object.entries(columns).map(c =>
[c[0], e[1][c[1]]]
)
)]
)
)
}
const nutMappings = {
nut_thickness: 'm_nut',
thickness: 'm_max',
width: 's'
}
const nutClasses = {
'hexagon_thin': processClass(nuts, 'hexagonthinnut1', nutMappings),
'hexagon': processClass(nuts, 'hexagonnut1', nutMappings),
'hexagon_lock': processClass(nuts, 'hexagonlocknut', nutMappings)
}
const defaultNutClass = 'hexagon'
const boltClasses = {
'headless': processClass(bolts, 'hexsocketheadcap', {
diameter: 'd1',
}),
'socket_head': processClass(bolts, 'hexsocketheadcap', {
diameter: 'd1',
head_diameter: 'd2',
head_length: 'k'
}),
'hex_head': processClass(bolts, 'hexbolt2', {
diameter: 'd1',
width: 's',
head_length: 'k',
}),
'countersunk': processClass(bolts, 'hexsocketcountersunk', {
diameter: 'd1',
head_diameter: 'd2',
head_length: 'k_max'
}),
}
const defaultBoltClass = 'sockethead'
let nutData = {};
let boltData = {};
for (const [class_, classData] of Object.entries(nutClasses)) {
for (const [size, sizeData] of Object.entries(classData)) {
if (!nutData[size]) nutData[size] = {};
nutData[size][class_] = sizeData;
if (class_ === defaultNutClass) nutData[size] = { ...sizeData, ...nutData[size] }
}
}
for (const [class_, classData] of Object.entries(boltClasses)) {
for (const [size, sizeData] of Object.entries(classData)) {
if (!boltData[size]) boltData[size] = {};
boltData[size][class_] = sizeData;
if (class_ === defaultBoltClass) boltData[size] = { ...sizeData, ...boltData[size] }
}
}
fs.writeFileSync(`${output}/nuts.json`, JSON.stringify(nutData))
fs.writeFileSync(`${output}/bolts.json`, JSON.stringify(boltData))