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, or even think about.
It always hurts my head. Even simple graphs do.
Maybe i have a head-problem, or maybe JSON is just an awkward way to represent graphs.
either way...
library is like, 3kb.
we support 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:
let g = 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())
you can 'deduce', down the tree, and intellegently merge the properties 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()
// check a c-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)
// add data to root
g.props({ list: ['fromRoot'] })
// add data to child
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 license scanner with an improved suite of 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.