Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
grad-school
Advanced tools
npm install grad-school
grad-school is a tool for creating ad-hoc graphs, in a scripting language, and then querying them.
it's surprising how there's no super-clear way to author graph-data.
It always hurts my head. Even simple graphs do.
Maybe i have a head-problem, or maybe JSON is just an awkward way to think-about graphs.
library is like, 3kb.
This library supports 3 formats:
this is a pretty-flexible way to declare a graph, using indents and ->
syntax. It's harder to add metadata to nodes.
It's a bit like how graphviz does it:
let str = `
a -> a2
-> a21
-> a1
b
`
let g = grad(str).debug()
g.nodes().length // 5
this flat, parent-indexed json is easy to make, but the graph is harder to 'see':
let nodes = [
{ id: 'a', parent: null },
{ id: 'b', parent: null },
{ id: 'a1', parent: 'a' },
{ id: 'a2', parent: 'a' },
{ id: 'a21', parent: 'a2' },
]
let g = grad(str).debug()
/*
→ a
→ a2
→ a21
→ a1
→ b
*/
this is how d3 does it:
let nodes = {
children: [
{
id: 'a',
children: [{ id: 'a1' }, { id: 'a2', children: [{ id: 'a21' }] }],
},
{ id: 'b' },
],
}
let g = grad(str).debug()
/*
→ a
→ a2
→ a21
→ a1
→ b
*/
you can also easily mess-around with the graph:
import Grad from 'grad-school'
let g = new Grad('a -> a1')
// add new nodes
g.add('b').add(['b1', 'b2'])
g.add('c')
// get a node by a json-pointer
g.get('/b/b1').remove()
console.log(g.get('b').children)
console.log(g.out())
grad-school has a facility for 'deducing', down the tree, and intellegently merging the data of each node:
let str = `
a
b -> b1
c -> c1 -> c2
`
let g = grad(str)
// add some data to one node
g.get('c').props({ inC: true })
g.fillDown()
// reach down and get a leaf
g.get('c/c1/c2').json.props
// { inC: true }
g.get('b').json.props
// {}
it will concat arrays, merge objects and sets:
let str = `
a -> a1 -> a11
b -> b1
`
let g = grad(str)
g.props({ list: ['fromRoot'] })
g.get('a').props({ list: ['fromA'] })
g.fillDown()
// b-side has root-data
let have = g.get('b/b1').json.props
// { list: ['fromRoot'] }
// a-side has merged arrays
let have = g.get('a/a1/a11').json.props
// { list: ['fromRoot','fromA'] }
MIT
FAQs
graph logic and traversal
The npm package grad-school receives a total of 42,374 weekly downloads. As such, grad-school popularity was classified as popular.
We found that grad-school demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.