Package Exports
- @ifc-x/convert
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/convert
For global CLI usage:
npm install -g @ifc-x/convert
Usage
CLI
ifc-x-convert <input.ifc> <output.db>
Example:
ifc-x-convert model.ifc model.sqlite
This 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 saved
Custom 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 | Uint8Array
options:
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