@qcksys/intellij-mongodb-metadata-to-ts
v0.1.0
Published
Convert IntelliJ MongoDB metadata dumps to TypeScript interfaces.
Readme
@qcksys/intellij-mongodb-metadata-to-ts
Convert IntelliJ MongoDB metadata dumps to TypeScript interfaces.
In IntelliJ-based IDEs (DataGrip, WebStorm, etc.), you can right-click a MongoDB connection, database, or collection and select Diagnostics > Dump Metadata Model to export a metadata file. This tool parses that output and generates typed TypeScript interfaces.
Install
pnpm add -D @qcksys/intellij-mongodb-metadata-to-tsOr run directly:
pnpx @qcksys/intellij-mongodb-metadata-to-ts <file>Usage
CLI
# Generate types from a metadata dump (outputs to stdout)
mongodb-meta-to-ts meta
# Write to a file
mongodb-meta-to-ts meta -o types.ts
# Filter to a specific database
mongodb-meta-to-ts meta -s mydb
# Filter to a specific collection
mongodb-meta-to-ts meta -t users
# Split into one file per database
mongodb-meta-to-ts meta --split -o ./types
# Use type aliases instead of interfaces
mongodb-meta-to-ts meta --type-style type
# Add prefix/suffix to type names
mongodb-meta-to-ts meta --prefix I --suffix Doc
# Map Date fields to string
mongodb-meta-to-ts meta --date-as-string
# Add a header comment
mongodb-meta-to-ts meta --header "/* Auto-generated — do not edit */"
# Use a config file
mongodb-meta-to-ts -c mongodb-meta-to-ts.config.tsAll CLI Options
Arguments:
file path to the metadata file
Options:
-V, --version output the version number
-c, --config <path> path to config file
-o, --output <path> output file or directory path
-s, --schema <name> generate types for a specific database only
-t, --table <name> generate types for a specific collection only
--split split output into one file per database (requires -o)
--type-style <style> emit 'interface' or 'type' aliases
--date-as-string map Date/ISODate fields to string instead of Date
--no-objectid-as-string keep ObjectId as ObjectId instead of string
--prefix <text> prefix for generated type names
--suffix <text> suffix for generated type names
--header <text> text prepended to generated output
-h, --help display help for commandConfig File
Create a mongodb-meta-to-ts.config.ts (or .js, .mjs, .json) in your project root:
import { defineConfig } from "@qcksys/intellij-mongodb-metadata-to-ts";
export default defineConfig({
input: "meta",
output: "src/types/db.ts",
typeStyle: "interface",
objectIdAsString: true,
dateAsString: false,
header: "/* Auto-generated — do not edit */",
naming: {
suffix: "Doc",
},
});CLI flags override config values. The file argument is optional when input is set in config.
Programmatic API
import { parseMeta, generate } from "@qcksys/intellij-mongodb-metadata-to-ts";
const meta = fs.readFileSync("meta", "utf-8");
const { schemas, level } = parseMeta(meta);
const ts = generate(schemas, {
typeStyle: "interface",
naming: { suffix: "Doc" },
});Metadata Levels
The tool auto-detects which level the metadata was exported from:
| Level | Right-click target | Starts with |
| ---------- | --------------------- | ---------------- |
| Connection | Data source root | #ROOT: |
| Database | A specific database | dbname: schema |
| Collection | A specific collection | colname: table |
Type Mapping
| MongoDB Type | TypeScript Type |
| --------------- | ---------------------------------------- |
| String | string |
| Boolean | boolean |
| Int32 | number |
| Int64 | number |
| Double | number |
| ObjectId | string (configurable) |
| ISODate | Date (configurable) |
| BsonTimestamp | Date (configurable) |
| Object | Nested type or Record<string, unknown> |
| Array | unknown[] |
| list | Array<{...}> or unknown[] |
Development
pnpm install
vp test
vp check
vp pack