void STLModule::open(const js::Value &args, js::Sink &sink) {
  // Read STL
  STL::Reader reader(ctx.relativePath(args.getString("path")));

  // Header
  string name;
  string hash;
  reader.readHeader(name, hash);

  sink.beginDict();
  sink.insert("name", name);
  sink.insert("hash", hash);

  // Facets
  sink.insertList("facets");

  while (reader.hasMore()) {
    Vector3F v[3];
    Vector3F normal;
    reader.readFacet(v[0], v[1], v[2], normal);

    sink.appendList();
    for (int i = 0; i < 3; i++) append(sink, v[i]);
    append(sink, normal);
    sink.endList();
  }

  sink.endList();
  sink.endDict();
}