polygon self-intersection removal algorithm. turns complex self-intersecting polygons into non-complex non-self-intersecting polygons, optionally with holes
Try below:
<script src="https://unmess-poly.glitch.me/unmess.js"></script>
<script>
let polygon = [[100,100], [300,100], [200,300], [250,120], [250,155]];
let polygons = unmess.unmess(polygon,{
hole_policy:unmess.HOLE_NONZERO, // or HOLE_NONE, HOLE_EVENODD, HOLE_AGGRESSIVE
epsilon:0.0001,
});
console.log('outline:', polygons[0]);
console.log('holes:', polygons.slice(1));
</script>