8000 GitHub - octav47/NewickJS: JavaScript Newick format parser
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

octav47/NewickJS

 
 

Repository files navigation

newick

A lightweight and TypeScript-friendly library to parse, manipulate, and serialize trees in the Newick format. Includes an OOP interface for clean and composable workflows.

✨ Features

  • Parse and serialize Newick trees
  • Traverse and map with callbacks
  • Normalize branch lengths
  • Compare and clone trees
  • Type-safe API (written in TypeScript)

📦 Installation

npm install newick

Or via yarn:

yarn add newick

🔧 Usage

import { Newick } from 'newick';

const input = '(A:0.1,B:0.2)Root;';
const tree = new Newick(input);

console.log(tree.getRoot()); // "Root"

tree.map(node => {
  node.name = node.name?.toUpperCase();
  
  return node;
});

console.log(tree.serialize()); // "(A:0.1,B:0.2)ROOT"
console.log(tree.toString());  // Same as serialize

📚 API

🌳 Newick class

new Newick(data: string | NewickNode)

Creates a new Newick instance from a Newick string or a tree object.

getRoot(): string | null

Returns the name of the root node, or null if not present.

dfs(callback?: (node: NewickNode) => NewickNode): Record<string, number>

Performs a depth-first traversal of the tree.

  • callback (optional): applied to each node.
  • Returns a map of node names to branch lengths.
map(callback: (node: NewickNode) => NewickNode): void

Applies a callback to each node in-place, mutating the tree.

normalize(): NewickNode

Normalizes all branch lengths so they sum to 1. Returns the normalized tree.

serialize(): string

Serializes the tree to a valid Newick-format string without a trailing semicolon.

toString(): string

Alias for serialize().

clone(): Newick

Creates a deep clone of the current tree.

equal(anotherTree: Newick): boolean

Returns true if another Newick instance is structurally equal (case-insensitive).

parse(input: string): NewickNode

Parses a Newick string into a NewickNode tree object.

🧪 Testing

npm test

Tests are written using Jest.

📄 License

MIT © Kir Tribunsky

About

JavaScript Newick format parser

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 98.4%
  • JavaScript 1.6%
0