Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const rootNode = createNode(root, layoutOptions)
rootNode.delete(['x', 'y'])
rootNode.update({ xmlns: 'http://www.w3.org/2000/svg' })
// remove rect for root node
rootNode.shift()
// arrow marker def
const markers = uniqMarkers(root)
if (!R.isEmpty(markers)) {
rootNode.prepend(new X('defs', null, markers.map(m => defaultMarkers[m])))
}
const svg = rootNode.toString()
if (log.getLevel() <= log.levels.DEBUG) {
console.log(xmlFormat(svg))
}
return svg
}
test('one node', async () => {
const graph = {
id: 'root',
children: [
{
id: 'n1',
width: 100,
height: 100
}
]
}
const svg = await graph2svg(graph)
fs.writeFileSync(path.join(__dirname, 'output', 'one-node.svg'), xmlFormat(svg))
expect(onml.parse(svg)).toEqual(
['svg', { xmlns: 'http://www.w3.org/2000/svg', width: '150', height: '150' },
['svg', { x: '25', y: '25', width: '100', height: '100' },
['rect', { x: '1', y: '1', width: '98', height: '98', stroke: 'black', fill: 'none' }]
]
])
})
test('hello world', async () => {
const graph = {
id: 'root',
width: 100,
height: 100
}
const svg = await graph2svg(graph)
fs.writeFileSync(path.join(__dirname, 'output', 'hello-world.svg'), xmlFormat(svg))
expect(onml.parse(svg)).toEqual(
['svg', { xmlns: 'http://www.w3.org/2000/svg', width: '100', height: '100' }])
})
}]
},
{
id: 'n2',
width: 100,
height: 100,
labels: [{
text: 'ccc🤓'
}]
}
]
}
]
}
const svg = await graph2svg(graph)
fs.writeFileSync(path.join(__dirname, 'output', 'nested-node-labels.svg'), xmlFormat(svg))
expect(onml.parse(svg)).toEqual(
['svg', { xmlns: 'http://www.w3.org/2000/svg', width: '325', height: '200' },
['svg', { x: '25', y: '25', width: '275', height: '150' },
['rect', { x: '1', y: '1', width: '273', height: '148', stroke: 'black', fill: 'none' }],
['svg', { width: '275', height: '25' },
['text', { x: '50%', y: '50%', stroke: 'black', 'text-anchor': 'middle', 'dominant-baseline': 'central' }, 'aaa']
],
['svg', { x: '25', y: '25', width: '100', height: '100' },
['rect', { x: '1', y: '1', width: '98', height: '98', stroke: 'black', fill: 'none' }],
['text', { x: '50%', y: '50%', stroke: 'black', 'text-anchor': 'middle', 'dominant-baseline': 'central' }, 'bbb']
],
['svg', { x: '150', y: '25', width: '100', height: '100' },
['rect', { x: '1', y: '1', width: '98', height: '98', stroke: 'black', fill: 'none' }],
['text', { x: '50%', y: '50%', stroke: 'black', 'text-anchor': 'middle', 'dominant-baseline': 'central' }, 'ccc🤓']
]
]
expr: 'n3 ==> n4',
label: 'One'
},
{
expr: 'n3 ==> n5',
label: 'Two'
},
{
expr: 'n3 ==> n6',
label: 'Three'
}
]
}
const svg = await graph2svg(graph)
expect(xmlFormat(svg)).toBe(fs.readFileSync(path.join(__dirname, 'output', 'classic.svg'), 'utf-8'))
fs.writeFileSync(path.join(__dirname, 'output', 'compact.svg'), xmlFormat(svg))
})
})
{
expr: 'n3 ==> n4',
label: 'One'
},
{
expr: 'n3 ==> n5',
label: 'Two'
},
{
expr: 'n3 ==> n6',
label: 'Three'
}
]
}
const svg = await graph2svg(graph)
expect(xmlFormat(svg)).toBe(fs.readFileSync(path.join(__dirname, 'output', 'classic.svg'), 'utf-8'))
fs.writeFileSync(path.join(__dirname, 'output', 'compact.svg'), xmlFormat(svg))
})
})
],
edges: [
{
id: 'e1',
sources: [ 'n1' ],
targets: [ 'n2' ]
},
{
id: 'e2',
sources: [ 'n2' ],
targets: [ 'n1' ]
}
]
}
const svg = await graph2svg(graph)
fs.writeFileSync(path.join(__dirname, 'output', 'two-edges.svg'), xmlFormat(svg))
expect(onml.parse(svg)).toEqual(
['svg', { xmlns: 'http://www.w3.org/2000/svg', width: '244', height: '124' },
['rect', { x: '12', y: '12', width: '100', height: '100', stroke: 'black', fill: 'white' }],
['rect', { x: '132', y: '12', width: '100', height: '100', stroke: 'black', fill: 'white' }],
['path', { d: 'M 112 78.66666666666666 L 132 78.66666666666666', stroke: 'black' }],
['path', { d: 'M 132 45.33333333333333 L 112 45.33333333333333', stroke: 'black' }]
])
})
{
id: 'n2',
width: 100,
height: 100
}
],
edges: [
{
id: 'e1',
sources: [ 'n1' ],
targets: [ 'n2' ]
}
]
}
const svg = await graph2svg(graph)
fs.writeFileSync(path.join(__dirname, 'output', 'one-edge.svg'), xmlFormat(svg))
expect(onml.parse(svg)).toEqual(
['svg', { xmlns: 'http://www.w3.org/2000/svg', width: '275', height: '150' },
['svg', { x: '25', y: '25', width: '100', height: '100' },
['rect', { x: '1', y: '1', width: '98', height: '98', stroke: 'black', fill: 'none' }]
],
['svg', { x: '150', y: '25', width: '100', height: '100' },
['rect', { x: '1', y: '1', width: '98', height: '98', stroke: 'black', fill: 'none' }]
],
['path', { d: 'M 125 75 L 150 75', stroke: 'black', fill: 'none' }]
])
})
{
id: 'e5',
sources: ['n3'],
targets: ['n6'],
markers: [
{
id: '>',
position: 'end'
}
],
labels: [{ width: 60, height: 20, text: 'Three' }]
}
]
}
const svg = await graph2svg(graph)
fs.writeFileSync(path.join(__dirname, 'output', 'classic.svg'), xmlFormat(svg))
})
})
Download(Config.furniDataURL).then((newData: Buffer) =>
{
var options = {
collapseContent: true
}
var newStringData = newData.toString()
var formattedXML = Format(newStringData, options)
if (!IO.existsSync(destination))
{
IO.mkdirSync(destination)
}
if (data && data !== formattedXML || !exists)
{
IO.writeFileSync(filePath, formattedXML, 'utf8')
this.parse(newStringData)
}
else
{
Logger.info(`Furnidata has no changes, everything is ${Chalk.green('up-to-date')}`)