npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

dxf-json

v0.11.0

Published

perfect dxf parser

Readme

DXF-JSON

License: GPL v3

GitHubGitHub Actions

Visual Studio CodeTypeScript

NPM

DXF parser with rich type definitions.

[!CAUTION] This is parser is not in stable state yet. Until version 1.0, we may often change name or type of the variables. We're adding rich unit/integration test, but there might be unexpected bug or uncovered situation. Note that official DXF specification is poorly documented, so that many informations are missing and even errors exist. Use your own risk. Thank you for your consideration.

Quick Start

npm i dxf-json # or your loved package manager
import { readFileSync } from 'fs'
import { DxfParser } from 'dxf-json'

const content = readFileSync('foo.dxf', 'utf-8')
const parser = new DxfParser()
const parsedDxf = parser.parseSync(content)

// play with your dxf file
const lwPolylines = parsedDxf.entities.filter(
  (entity) => entity.type === 'LWPOLYLINE',
)

About moduleResolution in TypeScript

It's impossible to support both ESM and CJS with node16, because they detect type of modules only by type field in package.json or the extension of files. To support CJS with node16, we have to rename every .d.ts files into .d.cts, not only the file name but also every import expression in source files.

But Node16 is already deprecated, and to maintain the open source society healthy, we decided not to support require at that version. Also we highly recommend to use ESM styled import consistently throughout your source code.

| Module Resolution | From ESM | From CJS | | ----------------- | -------- | -------- | | node10 | ✅ | ✅ | | node16 | ✅ | ❌ | | bundler | ✅ | ✅ |

Features

  • Synchronous parsing, asynchronous parsing, and url fetch are possible.
  • Support both ESM and CJS
  • Support TypeScript

[!NOTE] We support standard specification of dxf and AutoCAD features only. We're trying our best to support universal dxf files, but we don't support 3rd party specification.

For dev branch status, see #52

Based on AutoCAD 2024 DXF Reference

  • [x] HEADER Section
  • [x] CLASSES Section
  • [x] TABLES Section
    • [x] APPID
    • [x] BLOCK_RECORD
    • [x] DIMSTYLE
    • [x] LAYER
    • [x] LTYPE
    • [x] STYLE
    • [x] UCS
    • [x] VIEW
    • [x] VPORT
  • [x] BLOCKS Section
  • [ ] ENTITIES Section
    • [x] 3DFACE
    • [x] 3DSOLID
    • [ ] ACAD_PROXY_ENTITY
    • [x] ARC
    • [x] ARC_DIMENSION
    • [x] ATTDEF
    • [x] ATTRIB
    • [x] BODY
    • [x] CIRCLE
    • [ ] COORDINATION MODEL
    • [x] DIMENSION
    • [x] ELLIPSE
    • [x] HATCH
    • [ ] HELIX
    • [x] IMAGE
    • [x] INSERT
    • [x] LEADER
    • [x] LIGHT
    • [x] LINE
    • [x] LWPOLYLINE
    • [x] MESH
    • [x] MLEADER
    • [ ] MLEADERSTYLE
    • [x] MLINE
    • [x] MTEXT
    • [ ] OLEFRAME
    • [ ] OLE2FRAME
    • [x] POINT
    • [x] POLYLINE
    • [x] RAY
    • [x] REGION
    • [x] SECTION
    • [ ] SEQEND
    • [ ] SHAPE
    • [x] SOLID
    • [x] SPLINE
    • [x] SUN
    • [ ] SURFACE
    • [ ] TABLE
    • [x] TEXT
    • [x] TOLERANCE
    • [ ] TRACE
    • [ ] UNDERLAY
    • [x] VERTEX
    • [x] VIEWPORT
    • [x] WIPEOUT
    • [x] XLINE
  • [ ] OBJECTS Section
    • [ ] DATATABLE
    • [x] DICTIONARY
    • [ ] DICTIONARYVAR
    • [ ] DIMASSOC
    • [ ] FIELD
    • [ ] GEODATA
    • [ ] GROUP
    • [ ] IDBUFFER
    • [ ] IMAGEDEF
    • [ ] IMAGEDEF_REACTOR
    • [ ] LAYER_FILTER
    • [ ] LAYER_INDEX
    • [x] LAYOUT
    • [ ] LIGHTLIST
    • [ ] MATERIAL
    • [ ] MLINESTYLE
    • [ ] OBJECT_PTR
    • [x] PLOTSETTINGS
    • [ ] RASTERVARIABLES
    • [ ] RENDER
    • [ ] SECTION
    • [ ] SORTENSTABLE
    • [x] SPATIAL_FILTER
    • [ ] SPATIAL_INDEX
    • [ ] SUNSTUDY
    • [ ] TABLESTYLE
    • [ ] UNDERLAYDEFINITION
    • [ ] VBA_PROJECT
    • [ ] VISUALSTYLE
    • [ ] WIPEOUTVARIABLES
    • [x] XRECORD
  • [x] THUMBNAILIMAGE Section

[!NOTE] The documentation is not ready, but you can check the source code for used types #1 and #2

Parsing Options

Thumbnail Image Format

You can configure how the THUMBNAILIMAGE section is parsed by setting the thumbnailImageFormat option:

import { DxfParser } from 'dxf-json'

// Default: base64 format (ready for web display)
const parser1 = new DxfParser()
const result1 = parser1.parseSync(dxfContent)
// result1.thumbnailImage.data is a base64 string
// Usage: <img src="data:image/bmp;base64,${result1.thumbnailImage.data}" />

// Hex format (raw hexadecimal string)
const parser2 = new DxfParser({ thumbnailImageFormat: 'hex' })
const result2 = parser2.parseSync(dxfContent)
// result2.thumbnailImage.data is a hex string

// Buffer format (Node.js Buffer object)
const parser3 = new DxfParser({ thumbnailImageFormat: 'buffer' })
const result3 = parser3.parseSync(dxfContent)
// result3.thumbnailImage.data is a Buffer
// Save to file: fs.writeFileSync('thumbnail.bmp', result3.thumbnailImage.data)

Available formats:

  • 'base64' (default): Base64-encoded string, ideal for web applications
  • 'hex': Raw hexadecimal string from the DXF file
  • 'buffer': Node.js Buffer object for file operations

[!NOTE] The thumbnail image in DXF files is typically in BMP format.

parseSync

const parser = new DxfParser()
return parser.parseSync(buffer)

parseStream

import fs from 'fs'
const parser = new DxfParser()
const fileStream = fs.createReadStream('dxf file path', { encoding: 'utf8' })
return await parser.parseStream(fileStream)

parseUrl

const parser = new DxfParser()
return await parser.parseFromUrl(url, encoding, RequestInit)

Contribution

See CONTRIBUTING.md