JSPM

construparser

1.0.0
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 3
    • Score
      100M100P100Q30196F
    • License MIT

    Universal Construction Parser (BC3, Presto XML, PZU) for Node.js. Parses construction data into a canonical JSON format.

    Package Exports

    • construparser
    • construparser/index.js

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (construparser) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    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), and PZU (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

    1. Fork the repository
    2. Create your feature branch (git checkout -b feature/amazing-feature)
    3. Commit your changes (git commit -m 'Add some amazing feature')
    4. Push to the branch (git push origin feature/amazing-feature)
    5. Open a Pull Request

    ๐Ÿ“œ License

    Distributed under the MIT License. See LICENSE for more information.