Files

cadjs

cadjs is the shared JavaScript runtime for CAD Viewer, documentation previews, and generated snapshot browser assets. It owns reusable parsing, scene-building, explicit-CAD rendering, STEP topology, selector, mesh, robot-description, and artifact helpers without depending on React or application chrome.

Implicit CAD model loading, shader rendering, snapshots, SDF sampling, and mesh exports live in the sibling implicitjs package. Consumers that need implicit CAD should depend on implicitjs directly alongside cadjs.

Install

In this workbench, consumers link the package directly:

{
  "dependencies": {
    "cadjs": "file:../packages/cadjs"
  }
}

The package exports source files so local consumers can alias or install it and pick up edits without copying generated bundles.

Layout

  • src/index.js: public package entrypoint.
  • src/common/: browser-safe render pipeline used by interactive viewer, docs previews, and snapshot browser runtime.
  • src/lib/: lower-level first-party helpers for assets, formats, mesh decoding, selector runtimes, STEP sidecars, and URDF/SRDF/SDF.
  • src/lib/viewer/: shared non-React 3D viewer runtime helpers such as picking, clipping, drawing geometry, reference geometry, stage theme, scene scale, and visual state.
  • scripts/run-tests.mjs: package test discovery and Node test runner wrapper.
  • docs/: reference docs for package-owned APIs.

Tests live beside the modules they cover as *.test.js or *.test.mjs.

Boundaries

Keep this package UI-framework agnostic. Do not add React components, Tailwind helpers, browser workbench state, or CAD Viewer chrome utilities here. Those belong in consumer apps such as viewer/.

Prefer moving logic into cadjs when it is reusable across:

  • interactive CAD Viewer rendering,
  • docs or marketing previews,
  • generated snapshot browser runtime,
  • testable CAD parsing or sidecar preparation.

Prefer moving implicit model, shader, snapshot, SDF, or mesh-export behavior into implicitjs instead.

Keep app-specific workflows in the app. A useful rule of thumb: cadjs should understand CAD data and rendering state, while viewer/ should understand user interface and product workflow.

Commands

From this package directory:

npm test

From the workbench repository root:

npm --prefix packages/cadjs test

The test command discovers all *.test.js and *.test.mjs files under src/. To run one file:

node scripts/run-tests.mjs src/lib/themeSettings.test.js

Reference

  • Render pipeline: loadSource, buildModel, renderModel, and captureModel stages shared by viewer, docs, and snapshots.