construparser
v1.0.0
Published
Universal Construction Parser (BC3, Presto XML, PZU) for Node.js. Parses construction data into a canonical JSON format.
Maintainers
Readme
ConstruParser 🏗️
A robust, zero-dependency* Node.js library for parsing and interchanging standard construction data formats. It supports BC3 (FIEBDC-3), Presto XML, and Presto PZU files, unifying them into a single, canonical JSON format.
TRANSFORM YOUR CONSTRUCTION DATA INTO USABLE JSON.
🚀 Features
- Universal Support: Handles
BC3(standard and variants),XML(Presto), andPZU(Compressed). - Robust BC3 Parsing: intelligently handles multi-line records, single-tilde separators, and other common "real-world" format quirks.
- Order Independent: Parses hierarchies correctly even if parent items are defined after their children.
- Expression Evaluation: Built-in math engine (
mathjs) to evaluate complex logic in measurements and prices. - Encoding Safe: Handles
windows-1252(ISO-8859-1) Spanish encodings automatically.
📦 Installation
npm install construparser(Note: Replace pulsing-pioneer with your actual package name if different)
🛠️ Usage
Library Usage
import ConstructionParser from './src/ConstructionParser.js'; // Adjust path as needed
import fs from 'fs';
// Read ANY supported file (bc3, xml, pzu)
const buffer = fs.readFileSync('path/to/project.bc3');
try {
// 1. Parse content
const result = ConstructionParser.parse(buffer, 'project.bc3');
// 2. Access Data
console.log(`Project: ${result.project.summary}`);
console.log(`Total: ${result.project.price} EUR`);
console.log(`Owner: ${result.metadata.owner}`);
// 3. Traverse Items
result.project.items.forEach(chapter => {
console.log(`Chapter: ${chapter.summary} (${chapter.items.length} items)`);
});
} catch (err) {
console.error("Parsing failed:", err.message);
}Command Line Tool (CLI)
The library includes a utility script to convert files directly to JSON.
# Syntax
npm run extract -- <input_file> [output_file]
# Example
npm run extract -- ./data/project.pzu ./data/converted.json📄 JSON Data Model
The output follows a strict canonical structure:
{
"metadata": {
"owner": "Software Generator Name",
"date": "01/01/2024",
"encoding": "WINDOWS-1252"
},
"project": {
"code": "PROJECT_ROOT",
"summary": "Full Project Name",
"price": 10000.00,
"unit": "ud",
"type": "0",
"items": [
{
"code": "CHAPTER_01",
"summary": "Earthworks",
"price": 5000.00,
"items": [...]
}
]
}
}🧪 Testing
We use Jest for testing.
npm test🤝 Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📜 License
Distributed under the MIT License. See LICENSE for more information.
