@ifc-x/convert
v0.3.2
Published
Convert IFC/FRAG files to FRAG/SQLite in Node.js, browser and CLI.
Maintainers
Readme
@ifc-x/convert
A JavaScript library and CLI tool for converting IFC/FRAG files into formats like SQLite/FRAG and (SOON) Excel. Supports both Node.js and browser environments.
Features
- Convert IFC models into structured SQLite or Excel files
- Works in Node.js and browser environments
- CLI utility for quick conversions
- Progress tracking and middleware support
- Extensible with custom readers and writers
Installation
npm install @ifc-x/convertFor global CLI usage:
npm install -g @ifc-x/convertUsage
CLI
ifc-x-convert <input.ifc> <output.db>Example:
ifc-x-convert model.ifc model.sqliteThis reads an IFC file and writes the result as SQLite. Progress updates are printed to the console.
Library
Quick Convert
import { convert } from "@ifc-x/convert";
const result = await convert("path/to/model.ifc", {
inputType: "ifc",
outputType: "sqlite",
progressCallback: (p) => console.log(`Progress: ${p}%`),
});
// result is a Uint8Array, ready to be savedCustom Converter with Middleware
import { Converter } from "@ifc-x/convert";
const converter = new Converter();
// Example middleware: modify data before writing
converter.use(async (data) => {
// custom transformation
return data;
});
const ifcBytes = new Uint8Array(/* ... */);
const result = await converter.convert(ifcBytes, {
inputType: "ifc",
outputType: "sqlite",
});API
convert(input, options)
Convert a file or buffer using the global registry.
input:
string | File | Blob | ArrayBuffer | Uint8Arrayoptions:
inputType(string) – type of input (e.g.,ifc,frag)outputType(string) – type of output (e.g.,sqlite,xlsx)env("node" | "browser") – execution environmentreaderClass(Function) – force a specific readerwriterClass(Function) – force a specific writermiddleware(Function[]) – array of transformation functionsprogressCallback(Function) – progress updates (0–100)
Returns: Promise<Uint8Array>
Converter
Class for advanced conversion workflows.
new Converter(options)
env:"node"or"browser"readerClass: custom readerwriterClass: custom writer
Methods
use(fn)– add a middleware functiondetectType(input)– detect file typeconvert(input, options)– perform conversion
registry
A global registry that manages available readers and writers. The converter uses it to automatically detect the best match for a given environment and format.
Methods
addReader(readerClass)– register a new reader classaddWriter(writerClass)– register a new writer classfindReader(env, type)– find the best reader for an environment and input typefindWriter(env, format)– find the best writer for an environment and output format
Readers and writers must define:
environments: array of supported environments (["node"],["browser"], or both)formats: array of supported formats (e.g.,["ifc"],["frag"],["sqlite"])priority: number used to choose between multiple candidates
Example: Registering a custom writer
class CustomExcelWriter {
static environments = ["node"];
static formats = ["xlsx"];
static priority = 10;
async write(data, options) {
// implement writing to Excel
return new Uint8Array();
}
}
import { registry } from "@ifc-x/convert";
registry.addWriter(CustomExcelWriter);Development
Scripts
npm run examples– Run examplesnpm build– Build dist versionnpm test– Run tests
Dependencies
License
MIT © Lauri Tunnela
