UNPKG

siesta-lite

Version:

Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers

168 lines (126 loc) 6.42 kB
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>The source code</title> <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="../resources/prettify/prettify.js"></script> <style type="text/css"> .highlight { display: block; background-color: #ddd; } </style> <script type="text/javascript"> function highlight() { document.getElementById(location.hash.replace(/#/, "")).className = "highlight"; } </script> </head> <body onload="prettyPrint(); highlight();"> <pre class="prettyprint lang-js">/* Siesta 5.6.1 Copyright(c) 2009-2022 Bryntum AB https://bryntum.com/contact https://bryntum.com/products/siesta/license */ Role(&#39;Ariadne.QueryFinder.PathFinder&#39;, { has : { // array of objects: // { weight : Number, minFromEdgesById : Object } // &quot;minFromEdgesById&quot; sample object: { edgeId : edge } weightOptions : Joose.I.Array, weightOptionsByWeight : Joose.I.Object }, methods : { // paths - array of paths (path is object like: { segmentsById : {}, hash : &#39;&#39;, weight : 0, ids : [] } ) // variants - array of segments array (from edge) // returns new array of paths or empty array, if variants does not contain any new segment extendPathVariants : function (pathVariants, variants, onlyWithIndex) { if (pathVariants.length == 0) { pathVariants = [ { segmentsById : {}, hash : &#39;&#39;, weight : 0, ids : [] } ] } var pathLen = pathVariants.length var varLen = variants.length var extendedPaths = [] var pathsHashes = {} for (var i = 0; i &lt; pathLen; i++) { var pathVariant = pathVariants[ i ] for (var v = 0; v &lt; varLen; v++) { var variant = variants[ v ] if (onlyWithIndex != null &amp;&amp; !variant.indicies[ onlyWithIndex ]) continue var segments = variant.variant var newPathVariant = pathVariant var hasNewSegment = false for (var s = 0; s &lt; segments.length; s++) { var segment = segments[ s ] if (!newPathVariant.segmentsById[ segment.id ]) { // lazily clone the pathVariant variant, when we&#39;ve discovered some new segment if (!hasNewSegment) { hasNewSegment = true newPathVariant = this.clonePathVariant(pathVariant) } newPathVariant.segmentsById[ segment.id ] = segment newPathVariant.weight += segment.weight newPathVariant.ids.push(segment.id) } } if (hasNewSegment) { newPathVariant.ids.sort(function (a, b) { return a - b }) newPathVariant.hash = newPathVariant.ids.join(&#39;&#39;) } if (!pathsHashes[ newPathVariant.hash ]) { pathsHashes[ newPathVariant.hash ] = true extendedPaths.push(newPathVariant) } } } return extendedPaths }, clonePathVariant : function (pathVariant) { // CLONECOUNTER = window.CLONECOUNTER || 0 // CLONECOUNTER++ var clone = Object.assign ? Object.assign({}, pathVariant) : Joose.O.copy(pathVariant) clone.segmentsById = Object.assign ? Object.assign({}, clone.segmentsById) : Joose.O.copy(clone.segmentsById) clone.ids = clone.ids.slice() return clone }, collectAllSimplePathsOfWeight : function (weight, paths, isDirectChild) { if (!paths) paths = [ &#39;&#39; ] else paths = paths.slice() var pathsLen = paths.length for (var i = 0; i &lt; pathsLen; i++) { paths[ i ] += (isDirectChild ? &#39;_+&#39; : &#39;_&#39;) + this.index } var weightOption = this.weightOptionsByWeight[ weight ] if (!weightOption) throw new Error(&quot;Incorrect path weight&quot;) var minFromEdgesById = weightOption.minFromEdgesById if (Joose.O.isEmpty(minFromEdgesById)) return paths else { var allPaths = [] for (var id in minFromEdgesById) { var edge = minFromEdgesById[ id ] allPaths.push.apply( allPaths, edge.fromNode.collectAllSimplePathsOfWeight(weight - edge.weight, paths, edge.isDirectChild) ) } return allPaths } }, collectFullSimplePathCollection : function () { var simplePaths = [] for (var i = 0; i &lt; this.weightOptions.length; i++) { var weightOption = this.weightOptions[ i ] simplePaths.push({ weight : weightOption.weight, simplePaths : this.collectAllSimplePathsOfWeight(weightOption.weight) }) } return simplePaths } } }); </pre> </body> </html>