npm package: @qcksys/intellij-mongodb-metadata-to-ts
Description: Convert IntelliJ MongoDB metadata dumps to TypeScript interfaces.
Author: Tom Alle
Latest version: 0.1.0

# @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

```bash
pnpm add -D @qcksys/intellij-mongodb-metadata-to-ts
```

Or run directly:

```bash
pnpx @qcksys/intellij-mongodb-metadata-to-ts <file>
```

## Usage

### CLI

```bash
# 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.ts
```

### All 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 command
```

### Config File

Create a `mongodb-meta-to-ts.config.ts` (or `.js`, `.mjs`, `.json`) in your project root:

```ts
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

```ts
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

```bash
pnpm install
vp test
vp check
vp pack
```