Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d587dc3f20 | ||
|
|
991a901cab | ||
|
|
0f49e04261 | ||
|
|
fe0eb09d7c |
@@ -24,3 +24,6 @@
|
|||||||
*.jpg binary
|
*.jpg binary
|
||||||
*.zip binary
|
*.zip binary
|
||||||
*.dll binary
|
*.dll binary
|
||||||
|
|
||||||
|
# Vendored third-party files stay byte for byte as published (checksums in vendor/README.md)
|
||||||
|
src/ClawdDotNet.Manager.Web/wwwroot/vendor/** -text
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Vendored libraries
|
||||||
|
|
||||||
|
Third-party files the WebUI ships as-is. They live here instead of being loaded from a CDN
|
||||||
|
because the target machine may have no internet access (WebUI-Leitfaden). Do not edit them;
|
||||||
|
to update, replace the file and this table together.
|
||||||
|
|
||||||
|
Downloaded 2026-09-24 from the npm registry. Each tarball was checked against the
|
||||||
|
`dist.integrity` (SHA-512) the registry publishes before extracting.
|
||||||
|
|
||||||
|
| Package | Version | File | License | SHA-256 of the file |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| [cytoscape](https://www.npmjs.com/package/cytoscape) | 3.34.3 | `cytoscape/cytoscape.min.js` | MIT | `5f3b5b529546d5af1fc5628590af033b74511a5b6f789f5f4682845863228b91` |
|
||||||
|
| [elkjs](https://www.npmjs.com/package/elkjs) | 0.9.3 | `elkjs/elk.bundled.js` | EPL-2.0 | `b0745abd7f23cd91690a1587e377edbe19fd7233c783300290936720546216d4` |
|
||||||
|
| [cytoscape-elk](https://www.npmjs.com/package/cytoscape-elk) | 2.3.0 | `cytoscape-elk/cytoscape-elk.js` | MIT | `25acbb9dea9b0dc6fef0e79b697547ee56e579f0e1c22ae4353131e72c7e140a` |
|
||||||
|
|
||||||
|
**Why elkjs 0.9.3 and not the newest.** cytoscape-elk 2.3.0 declares `elkjs ^0.9.3`. A newer
|
||||||
|
elkjs would be untested with the adapter.
|
||||||
|
|
||||||
|
**How they are loaded.** All three are UMD bundles and, loaded as classic scripts in this
|
||||||
|
order, register the globals `cytoscape`, `ELK` and `cytoscapeElk`. The team overview (#711)
|
||||||
|
loads them on demand, so pages that do not draw a graph do not pay for ~2 MB of script.
|
||||||
|
|
||||||
|
The license texts sit next to each file.
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
|
||||||
|
Copyright (c) 2016-2018, 2020, The Cytoscape Consortium.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the “Software”), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -0,0 +1,356 @@
|
|||||||
|
(function webpackUniversalModuleDefinition(root, factory) {
|
||||||
|
if(typeof exports === 'object' && typeof module === 'object')
|
||||||
|
module.exports = factory(require("elkjs/lib/elk.bundled.js"));
|
||||||
|
else if(typeof define === 'function' && define.amd)
|
||||||
|
define(["elkjs"], factory);
|
||||||
|
else if(typeof exports === 'object')
|
||||||
|
exports["cytoscapeElk"] = factory(require("elkjs/lib/elk.bundled.js"));
|
||||||
|
else
|
||||||
|
root["cytoscapeElk"] = factory(root["ELK"]);
|
||||||
|
})(this, function(__WEBPACK_EXTERNAL_MODULE__632__) {
|
||||||
|
return /******/ (function() { // webpackBootstrap
|
||||||
|
/******/ "use strict";
|
||||||
|
/******/ var __webpack_modules__ = ({
|
||||||
|
|
||||||
|
/***/ 632:
|
||||||
|
/***/ (function(module) {
|
||||||
|
|
||||||
|
module.exports = __WEBPACK_EXTERNAL_MODULE__632__;
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
/******/ });
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ // The module cache
|
||||||
|
/******/ var __webpack_module_cache__ = {};
|
||||||
|
/******/
|
||||||
|
/******/ // The require function
|
||||||
|
/******/ function __webpack_require__(moduleId) {
|
||||||
|
/******/ // Check if module is in cache
|
||||||
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||||
|
/******/ if (cachedModule !== undefined) {
|
||||||
|
/******/ return cachedModule.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/ // Create a new module (and put it into the cache)
|
||||||
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||||
|
/******/ // no module.id needed
|
||||||
|
/******/ // no module.loaded needed
|
||||||
|
/******/ exports: {}
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Execute the module function
|
||||||
|
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||||
|
/******/
|
||||||
|
/******/ // Return the exports of the module
|
||||||
|
/******/ return module.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ /* webpack/runtime/compat get default export */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||||
|
/******/ __webpack_require__.n = function(module) {
|
||||||
|
/******/ var getter = module && module.__esModule ?
|
||||||
|
/******/ function() { return module['default']; } :
|
||||||
|
/******/ function() { return module; };
|
||||||
|
/******/ __webpack_require__.d(getter, { a: getter });
|
||||||
|
/******/ return getter;
|
||||||
|
/******/ };
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/define property getters */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ // define getter functions for harmony exports
|
||||||
|
/******/ __webpack_require__.d = function(exports, definition) {
|
||||||
|
/******/ for(var key in definition) {
|
||||||
|
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||||
|
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ };
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
var __webpack_exports__ = {};
|
||||||
|
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||||||
|
!function() {
|
||||||
|
|
||||||
|
// EXPORTS
|
||||||
|
__webpack_require__.d(__webpack_exports__, {
|
||||||
|
"default": function() { return /* binding */ src; }
|
||||||
|
});
|
||||||
|
|
||||||
|
// EXTERNAL MODULE: external {"commonjs":"elkjs/lib/elk.bundled.js","commonjs2":"elkjs/lib/elk.bundled.js","amd":"elkjs","root":"ELK"}
|
||||||
|
var elk_bundled_js_amd_elkjs_root_ELK_ = __webpack_require__(632);
|
||||||
|
var elk_bundled_js_amd_elkjs_root_ELK_default = /*#__PURE__*/__webpack_require__.n(elk_bundled_js_amd_elkjs_root_ELK_);
|
||||||
|
;// CONCATENATED MODULE: ./src/assign.js
|
||||||
|
// Simple, internal Object.assign() polyfill for options objects etc.
|
||||||
|
function assign_assign(tgt) {
|
||||||
|
for (var _len = arguments.length, srcs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||||||
|
srcs[_key - 1] = arguments[_key];
|
||||||
|
}
|
||||||
|
|
||||||
|
srcs.forEach(function (src) {
|
||||||
|
Object.keys(src).forEach(function (k) {
|
||||||
|
return tgt[k] = src[k];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return tgt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* harmony default export */ var src_assign = (Object.assign != null ? Object.assign.bind(Object) : assign_assign);
|
||||||
|
;// CONCATENATED MODULE: ./src/defaults.js
|
||||||
|
var defaults = {
|
||||||
|
nodeDimensionsIncludeLabels: false,
|
||||||
|
// Boolean which changes whether label dimensions are included when calculating node dimensions
|
||||||
|
fit: true,
|
||||||
|
// Whether to fit
|
||||||
|
padding: 20,
|
||||||
|
// Padding on fit
|
||||||
|
animate: false,
|
||||||
|
// Whether to transition the node positions
|
||||||
|
animateFilter: function animateFilter() {
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
// Whether to animate specific nodes when animation is on; non-animated nodes immediately go to their final positions
|
||||||
|
animationDuration: 500,
|
||||||
|
// Duration of animation in ms if enabled
|
||||||
|
animationEasing: undefined,
|
||||||
|
// Easing of animation if enabled
|
||||||
|
transform: function transform(node, pos) {
|
||||||
|
return pos;
|
||||||
|
},
|
||||||
|
// A function that applies a transform to the final node position
|
||||||
|
ready: undefined,
|
||||||
|
// Callback on layoutready
|
||||||
|
stop: undefined,
|
||||||
|
// Callback on layoutstop
|
||||||
|
nodeLayoutOptions: undefined,
|
||||||
|
// Special options for only the nodes
|
||||||
|
elk: {
|
||||||
|
// Options to pass directly to ELK `layoutOptions`. The subsequent identifier has to be used as property key in quotes.
|
||||||
|
// E.g. for 'org.eclipse.elk.direction' use:
|
||||||
|
// 'elk.direction'
|
||||||
|
// Primary/mandatory, the elk algorithm to use
|
||||||
|
// one of 'box', 'disco', 'force', 'layered', 'mrtree', 'radial', 'random', 'stress'
|
||||||
|
// (see https://www.eclipse.org/elk/reference/algorithms.html)
|
||||||
|
algorithm: undefined
|
||||||
|
},
|
||||||
|
priority: function priority() {
|
||||||
|
return null;
|
||||||
|
} // Edges with a non-nil value are skipped when geedy edge cycle breaking is enabled
|
||||||
|
|
||||||
|
};
|
||||||
|
/* harmony default export */ var src_defaults = (defaults);
|
||||||
|
;// CONCATENATED MODULE: ./src/layout.js
|
||||||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||||
|
|
||||||
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||||
|
|
||||||
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var elkOverrides = {};
|
||||||
|
|
||||||
|
var getPos = function getPos(ele, options) {
|
||||||
|
var dims = ele.layoutDimensions(options);
|
||||||
|
var parent = ele.parent();
|
||||||
|
var k = ele.scratch('elk');
|
||||||
|
var p = {
|
||||||
|
x: k.x,
|
||||||
|
y: k.y
|
||||||
|
};
|
||||||
|
|
||||||
|
while (parent.nonempty()) {
|
||||||
|
var kp = parent.scratch('elk');
|
||||||
|
p.x += kp.x;
|
||||||
|
p.y += kp.y;
|
||||||
|
parent = parent.parent();
|
||||||
|
} // elk considers a node position to be its top-left corner, while cy is the centre
|
||||||
|
|
||||||
|
|
||||||
|
p.x += dims.w / 2;
|
||||||
|
p.y += dims.h / 2;
|
||||||
|
return p;
|
||||||
|
};
|
||||||
|
|
||||||
|
var makeNode = function makeNode(node, options) {
|
||||||
|
var k = {
|
||||||
|
_cyEle: node,
|
||||||
|
id: node.id()
|
||||||
|
}; // Apply nodeLayoutOptions per user-specified function
|
||||||
|
// e.g. nodeLayoutOptions => n.scratch('layoutOptions')
|
||||||
|
|
||||||
|
if (options.nodeLayoutOptions) {
|
||||||
|
k.layoutOptions = options.nodeLayoutOptions(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!node.isParent()) {
|
||||||
|
var dims = node.layoutDimensions(options);
|
||||||
|
var p = node.position(); // the elk position is the top-left corner, cy is the centre
|
||||||
|
|
||||||
|
k.x = p.x - dims.w / 2;
|
||||||
|
k.y = p.y - dims.h / 2;
|
||||||
|
k.width = dims.w;
|
||||||
|
k.height = dims.h;
|
||||||
|
}
|
||||||
|
|
||||||
|
node.scratch('elk', k);
|
||||||
|
return k;
|
||||||
|
};
|
||||||
|
|
||||||
|
var makeEdge = function makeEdge(edge
|
||||||
|
/*, options*/
|
||||||
|
) {
|
||||||
|
var k = {
|
||||||
|
_cyEle: edge,
|
||||||
|
id: edge.id(),
|
||||||
|
source: edge.data('source'),
|
||||||
|
target: edge.data('target')
|
||||||
|
};
|
||||||
|
edge.scratch('elk', k);
|
||||||
|
return k;
|
||||||
|
};
|
||||||
|
|
||||||
|
var makeGraph = function makeGraph(nodes, edges, options) {
|
||||||
|
var elkNodes = [];
|
||||||
|
var elkEdges = [];
|
||||||
|
var elkEleLookup = {};
|
||||||
|
var graph = {
|
||||||
|
id: 'root',
|
||||||
|
children: [],
|
||||||
|
edges: []
|
||||||
|
}; // map all nodes
|
||||||
|
|
||||||
|
for (var i = 0; i < nodes.length; i++) {
|
||||||
|
var n = nodes[i];
|
||||||
|
var k = makeNode(n, options);
|
||||||
|
elkNodes.push(k);
|
||||||
|
elkEleLookup[n.id()] = k;
|
||||||
|
} // map all edges
|
||||||
|
|
||||||
|
|
||||||
|
for (var _i = 0; _i < edges.length; _i++) {
|
||||||
|
var e = edges[_i];
|
||||||
|
|
||||||
|
var _k = makeEdge(e, options);
|
||||||
|
|
||||||
|
elkEdges.push(_k);
|
||||||
|
elkEleLookup[e.id()] = _k;
|
||||||
|
} // make hierarchy
|
||||||
|
|
||||||
|
|
||||||
|
for (var _i2 = 0; _i2 < elkNodes.length; _i2++) {
|
||||||
|
var _k2 = elkNodes[_i2];
|
||||||
|
var _n = _k2._cyEle;
|
||||||
|
|
||||||
|
if (!_n.isChild()) {
|
||||||
|
graph.children.push(_k2);
|
||||||
|
} else {
|
||||||
|
var parent = _n.parent();
|
||||||
|
|
||||||
|
var parentK = elkEleLookup[parent.id()];
|
||||||
|
var children = parentK.children = parentK.children || [];
|
||||||
|
children.push(_k2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var _i3 = 0; _i3 < elkEdges.length; _i3++) {
|
||||||
|
var _k3 = elkEdges[_i3]; // put all edges in the top level for now
|
||||||
|
// TODO does this cause issues in certain edgecases?
|
||||||
|
|
||||||
|
/*let e = k._cyEle;
|
||||||
|
let parentSrc = e.source().parent();
|
||||||
|
let parentTgt = e.target().parent();
|
||||||
|
if ( false && parentSrc.nonempty() && parentTgt.nonempty() && parentSrc.same( parentTgt ) ){
|
||||||
|
let kp = elkEleLookup[ parentSrc.id() ];
|
||||||
|
kp.edges = kp.edges || [];
|
||||||
|
kp.edges.push( k );
|
||||||
|
} else {*/
|
||||||
|
|
||||||
|
graph.edges.push(_k3); //}
|
||||||
|
}
|
||||||
|
|
||||||
|
return graph;
|
||||||
|
};
|
||||||
|
|
||||||
|
var Layout = /*#__PURE__*/function () {
|
||||||
|
function Layout(options) {
|
||||||
|
_classCallCheck(this, Layout);
|
||||||
|
|
||||||
|
var elkOptions = options.elk;
|
||||||
|
var cy = options.cy;
|
||||||
|
this.options = src_assign({}, src_defaults, options);
|
||||||
|
this.options.elk = src_assign({
|
||||||
|
aspectRatio: cy.width() / cy.height()
|
||||||
|
}, src_defaults.elk, elkOptions, elkOverrides);
|
||||||
|
}
|
||||||
|
|
||||||
|
_createClass(Layout, [{
|
||||||
|
key: "run",
|
||||||
|
value: function run() {
|
||||||
|
var layout = this;
|
||||||
|
var options = this.options;
|
||||||
|
var eles = options.eles;
|
||||||
|
var nodes = eles.nodes();
|
||||||
|
var edges = eles.edges();
|
||||||
|
var elk = new (elk_bundled_js_amd_elkjs_root_ELK_default())();
|
||||||
|
var graph = makeGraph(nodes, edges, options);
|
||||||
|
graph['layoutOptions'] = options.elk;
|
||||||
|
elk.layout(graph).then(function () {
|
||||||
|
nodes.filter(function (n) {
|
||||||
|
return !n.isParent();
|
||||||
|
}).layoutPositions(layout, options, function (n) {
|
||||||
|
return getPos(n, options);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: "stop",
|
||||||
|
value: function stop() {
|
||||||
|
return this; // chaining
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: "destroy",
|
||||||
|
value: function destroy() {
|
||||||
|
return this; // chaining
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
|
||||||
|
return Layout;
|
||||||
|
}();
|
||||||
|
|
||||||
|
/* harmony default export */ var layout = (Layout);
|
||||||
|
;// CONCATENATED MODULE: ./src/index.js
|
||||||
|
// registers the extension on a cytoscape lib ref
|
||||||
|
|
||||||
|
var register = function register(cytoscape) {
|
||||||
|
if (!cytoscape) {
|
||||||
|
return;
|
||||||
|
} // can't register if cytoscape unspecified
|
||||||
|
|
||||||
|
|
||||||
|
cytoscape('layout', 'elk', layout); // register with cytoscape.js
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof cytoscape !== 'undefined') {
|
||||||
|
// expose to global cytoscape (i.e. window.cytoscape)
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
register(cytoscape);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* harmony default export */ var src = (register);
|
||||||
|
}();
|
||||||
|
__webpack_exports__ = __webpack_exports__["default"];
|
||||||
|
/******/ return __webpack_exports__;
|
||||||
|
/******/ })()
|
||||||
|
;
|
||||||
|
});
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2016-2026, The Cytoscape Consortium.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the “Software”), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,264 @@
|
|||||||
|
# Eclipse Public License - v 2.0
|
||||||
|
|
||||||
|
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
|
||||||
|
PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF
|
||||||
|
THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
||||||
|
|
||||||
|
## 1. DEFINITIONS
|
||||||
|
|
||||||
|
“Contribution” means:
|
||||||
|
|
||||||
|
- a\) in the case of the initial Contributor, the initial content
|
||||||
|
Distributed under this Agreement, and
|
||||||
|
- b\) in the case of each subsequent Contributor:
|
||||||
|
- i\) changes to the Program, and
|
||||||
|
- ii\) additions to the Program;
|
||||||
|
|
||||||
|
where such changes and/or additions to the Program originate from
|
||||||
|
and are Distributed by that particular Contributor. A Contribution
|
||||||
|
“originates” from a Contributor if it was added to the Program by
|
||||||
|
such Contributor itself or anyone acting on such Contributor's
|
||||||
|
behalf. Contributions do not include changes or additions to the
|
||||||
|
Program that are not Modified Works.
|
||||||
|
|
||||||
|
“Contributor” means any person or entity that Distributes the Program.
|
||||||
|
|
||||||
|
“Licensed Patents” mean patent claims licensable by a Contributor which
|
||||||
|
are necessarily infringed by the use or sale of its Contribution alone
|
||||||
|
or when combined with the Program.
|
||||||
|
|
||||||
|
“Program” means the Contributions Distributed in accordance with this
|
||||||
|
Agreement.
|
||||||
|
|
||||||
|
“Recipient” means anyone who receives the Program under this Agreement
|
||||||
|
or any Secondary License (as applicable), including Contributors.
|
||||||
|
|
||||||
|
“Derivative Works” shall mean any work, whether in Source Code or other
|
||||||
|
form, that is based on (or derived from) the Program and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship.
|
||||||
|
|
||||||
|
“Modified Works” shall mean any work in Source Code or other form that
|
||||||
|
results from an addition to, deletion from, or modification of the
|
||||||
|
contents of the Program, including, for purposes of clarity any new file
|
||||||
|
in Source Code form that contains any contents of the Program. Modified
|
||||||
|
Works shall not include works that contain only declarations,
|
||||||
|
interfaces, types, classes, structures, or files of the Program solely
|
||||||
|
in each case in order to link to, bind by name, or subclass the Program
|
||||||
|
or Modified Works thereof.
|
||||||
|
|
||||||
|
“Distribute” means the acts of a) distributing or b) making available in
|
||||||
|
any manner that enables the transfer of a copy.
|
||||||
|
|
||||||
|
“Source Code” means the form of a Program preferred for making
|
||||||
|
modifications, including but not limited to software source code,
|
||||||
|
documentation source, and configuration files.
|
||||||
|
|
||||||
|
“Secondary License” means either the GNU General Public License, Version
|
||||||
|
2.0, or any later versions of that license, including any exceptions or
|
||||||
|
additional permissions as identified by the initial Contributor.
|
||||||
|
|
||||||
|
## 2. GRANT OF RIGHTS
|
||||||
|
|
||||||
|
- a\) Subject to the terms of this Agreement, each Contributor hereby
|
||||||
|
grants Recipient a non-exclusive, worldwide, royalty-free copyright
|
||||||
|
license to reproduce, prepare Derivative Works of, publicly display,
|
||||||
|
publicly perform, Distribute and sublicense the Contribution of such
|
||||||
|
Contributor, if any, and such Derivative Works.
|
||||||
|
- b\) Subject to the terms of this Agreement, each Contributor hereby
|
||||||
|
grants Recipient a non-exclusive, worldwide, royalty-free patent license
|
||||||
|
under Licensed Patents to make, use, sell, offer to sell, import and
|
||||||
|
otherwise transfer the Contribution of such Contributor, if any, in
|
||||||
|
Source Code or other form. This patent license shall apply to the
|
||||||
|
combination of the Contribution and the Program if, at the time the
|
||||||
|
Contribution is added by the Contributor, such addition of the
|
||||||
|
Contribution causes such combination to be covered by the
|
||||||
|
Licensed Patents. The patent license shall not apply to any other
|
||||||
|
combinations which include the Contribution. No hardware per se is
|
||||||
|
licensed hereunder.
|
||||||
|
- c\) Recipient understands that although each Contributor grants the
|
||||||
|
licenses to its Contributions set forth herein, no assurances are
|
||||||
|
provided by any Contributor that the Program does not infringe the
|
||||||
|
patent or other intellectual property rights of any other entity. Each
|
||||||
|
Contributor disclaims any liability to Recipient for claims brought by
|
||||||
|
any other entity based on infringement of intellectual property rights
|
||||||
|
or otherwise. As a condition to exercising the rights and licenses
|
||||||
|
granted hereunder, each Recipient hereby assumes sole responsibility to
|
||||||
|
secure any other intellectual property rights needed, if any. For
|
||||||
|
example, if a third party patent license is required to allow Recipient
|
||||||
|
to Distribute the Program, it is Recipient's responsibility to acquire
|
||||||
|
that license before distributing the Program.
|
||||||
|
- d\) Each Contributor represents that to its knowledge it has sufficient
|
||||||
|
copyright rights in its Contribution, if any, to grant the copyright
|
||||||
|
license set forth in this Agreement.
|
||||||
|
- e\) Notwithstanding the terms of any Secondary License, no Contributor
|
||||||
|
makes additional grants to any Recipient (other than those set forth in
|
||||||
|
this Agreement) as a result of such Recipient's receipt of the Program
|
||||||
|
under the terms of a Secondary License (if permitted under the terms of
|
||||||
|
Section 3).
|
||||||
|
|
||||||
|
## 3. REQUIREMENTS
|
||||||
|
|
||||||
|
3.1 If a Contributor Distributes the Program in any form, then:
|
||||||
|
|
||||||
|
- a\) the Program must also be made available as Source Code, in accordance
|
||||||
|
with section 3.2, and the Contributor must accompany the Program with a
|
||||||
|
statement that the Source Code for the Program is available under this
|
||||||
|
Agreement, and informs Recipients how to obtain it in a reasonable
|
||||||
|
manner on or through a medium customarily used for software exchange;
|
||||||
|
and
|
||||||
|
- b\) the Contributor may Distribute the Program under a license different
|
||||||
|
than this Agreement, provided that such license:
|
||||||
|
- i\) effectively disclaims on behalf of all other Contributors all
|
||||||
|
warranties and conditions, express and implied, including warranties or
|
||||||
|
conditions of title and non-infringement, and implied warranties or
|
||||||
|
conditions of merchantability and fitness for a particular purpose;
|
||||||
|
- ii\) effectively excludes on behalf of all other Contributors all
|
||||||
|
liability for damages, including direct, indirect, special, incidental
|
||||||
|
and consequential damages, such as lost profits;
|
||||||
|
- iii\) does not attempt to limit or alter the recipients' rights in the
|
||||||
|
Source Code under section 3.2; and
|
||||||
|
- iv\) requires any subsequent distribution of the Program by any party to
|
||||||
|
be under a license that satisfies the requirements of this section 3.
|
||||||
|
|
||||||
|
3.2 When the Program is Distributed as Source Code:
|
||||||
|
|
||||||
|
- a\) it must be made available under this Agreement, or if the Program (i)
|
||||||
|
is combined with other material in a separate file or files made
|
||||||
|
available under a Secondary License, and (ii) the initial Contributor
|
||||||
|
attached to the Source Code the notice described in Exhibit A of this
|
||||||
|
Agreement, then the Program may be made available under the terms of
|
||||||
|
such Secondary Licenses, and
|
||||||
|
- b\) a copy of this Agreement must be included with each copy of
|
||||||
|
the Program.
|
||||||
|
|
||||||
|
3.3 Contributors may not remove or alter any copyright, patent,
|
||||||
|
trademark, attribution notices, disclaimers of warranty, or limitations
|
||||||
|
of liability (‘notices’) contained within the Program from any copy of
|
||||||
|
the Program which they Distribute, provided that Contributors may add
|
||||||
|
their own appropriate notices.
|
||||||
|
|
||||||
|
## 4. COMMERCIAL DISTRIBUTION
|
||||||
|
|
||||||
|
Commercial distributors of software may accept certain responsibilities
|
||||||
|
with respect to end users, business partners and the like. While this
|
||||||
|
license is intended to facilitate the commercial use of the Program, the
|
||||||
|
Contributor who includes the Program in a commercial product offering
|
||||||
|
should do so in a manner which does not create potential liability for
|
||||||
|
other Contributors. Therefore, if a Contributor includes the Program in
|
||||||
|
a commercial product offering, such Contributor (“Commercial
|
||||||
|
Contributor”) hereby agrees to defend and indemnify every other
|
||||||
|
Contributor (“Indemnified Contributor”) against any losses, damages and
|
||||||
|
costs (collectively “Losses”) arising from claims, lawsuits and other
|
||||||
|
legal actions brought by a third party against the Indemnified
|
||||||
|
Contributor to the extent caused by the acts or omissions of such
|
||||||
|
Commercial Contributor in connection with its distribution of the
|
||||||
|
Program in a commercial product offering. The obligations in this
|
||||||
|
section do not apply to any claims or Losses relating to any actual or
|
||||||
|
alleged intellectual property infringement. In order to qualify, an
|
||||||
|
Indemnified Contributor must: a) promptly notify the Commercial
|
||||||
|
Contributor in writing of such claim, and b) allow the Commercial
|
||||||
|
Contributor to control, and cooperate with the Commercial Contributor
|
||||||
|
in, the defense and any related settlement negotiations. The Indemnified
|
||||||
|
Contributor may participate in any such claim at its own expense.
|
||||||
|
|
||||||
|
For example, a Contributor might include the Program in a commercial
|
||||||
|
product offering, Product X. That Contributor is then a Commercial
|
||||||
|
Contributor. If that Commercial Contributor then makes performance
|
||||||
|
claims, or offers warranties related to Product X, those performance
|
||||||
|
claims and warranties are such Commercial Contributor's responsibility
|
||||||
|
alone. Under this section, the Commercial Contributor would have to
|
||||||
|
defend claims against the other Contributors related to those
|
||||||
|
performance claims and warranties, and if a court requires any other
|
||||||
|
Contributor to pay any damages as a result, the Commercial Contributor
|
||||||
|
must pay those damages.
|
||||||
|
|
||||||
|
## 5. NO WARRANTY {#warranty}
|
||||||
|
|
||||||
|
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
|
||||||
|
PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS”
|
||||||
|
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
|
||||||
|
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
|
||||||
|
TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. Each Recipient is solely responsible for determining the
|
||||||
|
appropriateness of using and distributing the Program and assumes all
|
||||||
|
risks associated with its exercise of rights under this Agreement,
|
||||||
|
including but not limited to the risks and costs of program errors,
|
||||||
|
compliance with applicable laws, damage to or loss of data, programs or
|
||||||
|
equipment, and unavailability or interruption of operations.
|
||||||
|
|
||||||
|
## 6. DISCLAIMER OF LIABILITY {#disclaimer}
|
||||||
|
|
||||||
|
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
|
||||||
|
PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
|
||||||
|
SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
|
||||||
|
PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
|
||||||
|
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
## 7. GENERAL
|
||||||
|
|
||||||
|
If any provision of this Agreement is invalid or unenforceable under
|
||||||
|
applicable law, it shall not affect the validity or enforceability of
|
||||||
|
the remainder of the terms of this Agreement, and without further action
|
||||||
|
by the parties hereto, such provision shall be reformed to the minimum
|
||||||
|
extent necessary to make such provision valid and enforceable.
|
||||||
|
|
||||||
|
If Recipient institutes patent litigation against any entity (including
|
||||||
|
a cross-claim or counterclaim in a lawsuit) alleging that the Program
|
||||||
|
itself (excluding combinations of the Program with other software or
|
||||||
|
hardware) infringes such Recipient's patent(s), then such Recipient's
|
||||||
|
rights granted under Section 2(b) shall terminate as of the date such
|
||||||
|
litigation is filed.
|
||||||
|
|
||||||
|
All Recipient's rights under this Agreement shall terminate if it fails
|
||||||
|
to comply with any of the material terms or conditions of this Agreement
|
||||||
|
and does not cure such failure in a reasonable period of time after
|
||||||
|
becoming aware of such noncompliance. If all Recipient's rights under
|
||||||
|
this Agreement terminate, Recipient agrees to cease use and distribution
|
||||||
|
of the Program as soon as reasonably practicable. However, Recipient's
|
||||||
|
obligations under this Agreement and any licenses granted by Recipient
|
||||||
|
relating to the Program shall continue and survive.
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute copies of this Agreement,
|
||||||
|
but in order to avoid inconsistency the Agreement is copyrighted and may
|
||||||
|
only be modified in the following manner. The Agreement Steward reserves
|
||||||
|
the right to publish new versions (including revisions) of this
|
||||||
|
Agreement from time to time. No one other than the Agreement Steward has
|
||||||
|
the right to modify this Agreement. The Eclipse Foundation is the
|
||||||
|
initial Agreement Steward. The Eclipse Foundation may assign the
|
||||||
|
responsibility to serve as the Agreement Steward to a suitable separate
|
||||||
|
entity. Each new version of the Agreement will be given a distinguishing
|
||||||
|
version number. The Program (including Contributions) may always be
|
||||||
|
Distributed subject to the version of the Agreement under which it was
|
||||||
|
received. In addition, after a new version of the Agreement is
|
||||||
|
published, Contributor may elect to Distribute the Program (including
|
||||||
|
its Contributions) under the new version.
|
||||||
|
|
||||||
|
Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
|
||||||
|
receives no rights or licenses to the intellectual property of any
|
||||||
|
Contributor under this Agreement, whether expressly, by implication,
|
||||||
|
estoppel or otherwise. All rights in the Program not expressly granted
|
||||||
|
under this Agreement are reserved. Nothing in this Agreement is intended
|
||||||
|
to be enforceable by any entity that is not a Contributor or Recipient.
|
||||||
|
No third-party beneficiary rights are created under this Agreement.
|
||||||
|
|
||||||
|
## Exhibit A – Form of Secondary Licenses Notice {#exhibit-a}
|
||||||
|
|
||||||
|
“This Source Code may also be made available under the following
|
||||||
|
Secondary Licenses when the conditions for such availability set forth
|
||||||
|
in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
|
||||||
|
version(s), and exceptions or additional permissions here}.”
|
||||||
|
|
||||||
|
> Simply including a copy of this Agreement, including this Exhibit A is
|
||||||
|
> not sufficient to license the Source Code under Secondary Licenses.
|
||||||
|
>
|
||||||
|
> If it is not possible or desirable to put the notice in a particular
|
||||||
|
> file, then You may include the notice in a location (such as a LICENSE
|
||||||
|
> file in a relevant directory) where a recipient would be likely to
|
||||||
|
> look for such a notice.
|
||||||
|
>
|
||||||
|
> You may add additional accurate notices of copyright ownership.
|
||||||
File diff suppressed because one or more lines are too long
@@ -276,17 +276,16 @@ public class HarnessHaertungTests
|
|||||||
("ParallelTool", "{}", "c3"))
|
("ParallelTool", "{}", "c3"))
|
||||||
.RespondsWithText("Fertig.");
|
.RespondsWithText("Fertig.");
|
||||||
|
|
||||||
var sw = Stopwatch.StartNew();
|
|
||||||
await fixture.Engine.RunAsync(agent, "Los", "inst", CancellationToken.None);
|
await fixture.Engine.RunAsync(agent, "Los", "inst", CancellationToken.None);
|
||||||
sw.Stop();
|
|
||||||
|
|
||||||
// Der belastbare Nachweis: Aufrufe haben sich überlappt.
|
// Der belastbare Nachweis: Aufrufe haben sich überlappt.
|
||||||
|
//
|
||||||
|
// Hier stand zusätzlich eine Wanduhr-Prüfung (unter 750 ms, seriell wären es 900).
|
||||||
|
// Sie schlug am 2026-09-24 mit 927 ms fehl, als die Testprojekte parallel liefen —
|
||||||
|
// die Zeit misst die Last der Maschine, nicht das Verhalten der Engine. Der
|
||||||
|
// Höchststand gleichzeitiger Aufrufe beweist dasselbe, ohne zu wackeln.
|
||||||
Assert.True(tool.MaxConcurrent > 1,
|
Assert.True(tool.MaxConcurrent > 1,
|
||||||
$"Erwartet: überlappende Aufrufe. Höchststand war {tool.MaxConcurrent}.");
|
$"Erwartet: überlappende Aufrufe. Höchststand war {tool.MaxConcurrent}.");
|
||||||
|
|
||||||
// Die Laufzeit als zweite, schwächere Bestätigung — seriell wären es 900 ms.
|
|
||||||
Assert.True(sw.ElapsedMilliseconds < 750,
|
|
||||||
$"Erwartet: deutlich unter 900 ms. Gemessen: {sw.ElapsedMilliseconds} ms.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|||||||
Reference in New Issue
Block a user