// npm package
@antv/g6-pc
A Graph Visualization Framework in JavaScript
versions
130
maintainers
51
license
MIT
first publish
2020-12-30
publisher
banxuan
tarball
6,910,699 B
AUTO-PUBLISHED·1 version indexed·latest published 2025-04-11
// publisher campaignby banxuan
5 caught packages from this accountThis is not an isolated catch. The same publisher has shipped 4 other packages that our pipeline flagged — the shape of a coordinated campaign, not a one-off. Each link below opens that sibling's analysis.
// offending code· @0.8.25· 2 files flagged
llm: benign · 0.85→ No suspicious destination, no remote-exec shape — 1 known-vendor host(s).
- @0.8.25··AUTO-PUBLISHED·publisher: banxuanheuristic 75/100static flags 1llm benign (0.85) via ollamarecent-owner-changemature-packagedormant-takeover:prev=iaaron@0.8.24osv-flagged:MAL-2026-3991base64-decode
→ No suspicious destination, no remote-exec shape — 1 known-vendor host(s).
// offending code· 2 files flaggedpatterns: 1
--- package/lib/graph/graph.js (excerpt) --- "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _tslib = require("tslib"); var _gCanvas = require("@antv/g-canvas"); var _gSvg = require("@antv/g-svg"); var _g6Core = require("@antv/g6-core"); var _matrixUtil = require("@antv/matrix-util"); var _util = require("@antv/util"); var _domUtil = require("@antv/dom-util"); var _global = _interopRequireDefault(require("../global")); var _image = require("../util/image"); var _controller = require("./controller"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } var transform = _matrixUtil.ext.transform; var SVG = 'svg'; var Graph = /** @class */function (_super) { (0, _tslib.__extends)(Graph, _super); function Graph(cfg) { var _this = _super.call(this, cfg) || this; var defaultNode = _this.get('defaultNode'); if (!defaultNode) { _this.set('defaultNode', { type: 'circle' }); } if (!defaultNode.type) { defaultNode.type = 'circle'; _this.set('defaultNode', defaultNode); } _this.destroyed = false; return _this; } Graph.prototype.initLayoutController = function () { var layoutController = new _controller.LayoutController(this); this.set({ layoutController: layoutController }); }; Graph.prototype.initEventController = function () { var eventController = new _controller.EventController(this); this.set({ eventController: eventController --- package/es/graph/graph.js (excerpt) --- import { __awaiter, __extends, __generator } from "tslib"; import { Canvas as GCanvas } from '@antv/g-canvas'; import { Canvas as GSVGCanvas } from '@antv/g-svg'; import { AbstractGraph } from '@antv/g6-core'; import { ext } from '@antv/matrix-util'; import { clone, deepMix, each, isNumber, isString } from '@antv/util'; import { createDom } from '@antv/dom-util'; import Global from '../global'; import { cloneGElement } from '../util/image'; import { EventController, LayoutController } from './controller'; var transform = ext.transform; var SVG = 'svg'; var Graph = /** @class */function (_super) { __extends(Graph, _super); function Graph(cfg) { var _this = _super.call(this, cfg) || this; var defaultNode = _this.get('defaultNode'); if (!defaultNode) { _this.set('defaultNode', { type: 'circle' }); } if (!defaultNode.type) { defaultNode.type = 'circle'; _this.set('defaultNode', defaultNode); } _this.destroyed = false; return _this; } Graph.prototype.initLayoutController = function () { var layoutController = new LayoutController(this); this.set({ layoutController: layoutController }); }; Graph.prototype.initEventController = function () { var eventController = new EventController(this); this.set({ eventController: eventController }); }; Graph.prototype.initCanvas = function () { var container = this.get('container'); if (typeof container === 'string') { --- bundled output (OSV-MAL flagged — LLM scope expansion) --- --- lib/layout/tree-layout.js (bundled) --- "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _hierarchy = _interopRequireDefault(require("@antv/hierarchy")); var _util = _interopRequireDefault(require("../util")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } var radialLayout = _util.default.radialLayout; var TreeLayout = /** @class */function () { function TreeLayout(cfg) { this.type = cfg.type; this.radial = cfg.radial; this.config = cfg; } TreeLayout.prototype.init = function (data) { var _this = this; this.data = data; if (this.radial) { this.layoutMethod = function (data) { var layoutData = _hierarchy.default[_this.type](data, _this.config); radialLayout(layoutData); return layoutData; }; return; } this.layoutMethod = function (data) { return _hierarchy.default[_this.type](data, _this.config); }; }; TreeLayout.prototype.execute = function () { return this.layoutMethod(this.data, this.config); }; TreeLayout.prototype.layout = function (data) { this.init(data); return this.execute(); }; return TreeLayout; }(); var _default = exports.default = TreeLayout; --- lib/behavior/activate-relations.js (bundled) --- "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _util = require("@antv/util"); var clickNodeId = null; var _default = exports.default = { getDefaultCfg: function getDefaultCfg() { return { // 可选 mouseenter || click // 选择 click 会监听 touch,mouseenter 不会监听 trigger: 'mouseenter', activeState: 'active', inactiveState: 'inactive', resetSelected: false, shouldClearStatusOnSecond: false, shouldUpdate: function shouldUpdate() { return true; } }; }, getEvents: function getEvents() { if (this.get('trigger') === 'mouseenter') { return { 'node:mouseenter': 'setAllItemStates', 'combo:mouseenter': 'setAllItemStates', 'node:mouseleave': 'clearActiveState', 'combo:mouseleave': 'clearActiveState' }; } return { 'node:click': 'setAllItemStates', 'combo:click': 'setAllItemStates', 'canvas:click': 'clearActiveState', 'node:touchstart': 'setOnTouchStart', 'combo:touchstart': 'setOnTouchStart', 'canvas:touchstart': 'clearOnTouchStart' }; }, setOnTouchStart: function setOnTouchStart(e) { var self = this; try { var touches = e.originalEvent.touches; var event1 = touches[0]; var event2 = touches[1]; if (event1 && event2) { return; } e.preventDefault(); } catch (e) { console.warn('Touch original event not exist!'); } self.setAllItemStates(e); }, clearOnTouchStart: function clearOnTouchStart(e) { var self = this; try { var touches = e.originalEvent.touches; var event1 = touches[0]; var event2 = touches[1]; if (event1 && event2) { return; } e.preventDefault(); } catch (e) { console.warn('Touch original event not exist!'); } self.clearActiveState(e); }, setAllItemStates: function setAllItemStates(e) { clearTimeout( --- lib/behavior/brush-select.js (bundled) --- "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var min = Math.min, max = Math.max, abs = Math.abs; var DEFAULT_TRIGGER = 'shift'; var ALLOW_EVENTS = ['drag', 'shift', 'ctrl', 'alt', 'control']; var _default = exports.default = { getDefaultCfg: function getDefaultCfg() { return { brushStyle: { fill: '#EEF6FF', fillOpacity: 0.4, stroke: '#DDEEFE', lineWidth: 1 }, onSelect: function onSelect() {}, onDeselect: function onDeselect() {}, selectedState: 'selected', trigger: DEFAULT_TRIGGER, includeEdges: true, includeCombos: false, selectOnCombo: false, selectedEdges: [], selectedNodes: [], selectedCombos: [] }; }, getEvents: function getEvents() { // 检测输入是否合法 if (!(ALLOW_EVENTS.indexOf(this.trigger.toLowerCase()) > -1)) { this.trigger = DEFAULT_TRIGGER; console.warn("Behavior brush-select 的 trigger 参数不合法,请输入 'drag'、'shift'、'ctrl' 或 'alt'"); } if (this.trigger === 'drag') { return { dragstart: 'onMouseDown', drag: 'onMouseMove', dragend: 'onMouseUp', 'canvas:click': 'clearStates' }; } return { dragstart: 'onMouseDown', drag: 'onMouseMove', dragend: 'onMouseUp', 'canvas:click': 'clearStates', keyup: 'onKeyUp', keydown: 'onKeyDown' }; }, onMouseDown: function onMouseDown(e) { // 按在node上面拖动时候不应该是框选 var item = e.item; var brush = this.brush; var selectOnCombo = this.selectOnCombo; var isCombo = (item === null || item === void 0 ? void 0 : item.getType()) === 'combo'; // 若在 combo 上操作,且不允许在 combo 上选择,则不继续 if (isCombo && !selectOnCombo) { return; } // 若不在 combo 上操作,而是其他的 item ,则不继续 if (!isCombo && item) { return; } if (this.trigger !== 'drag' && !this.keydown) { return; } if (this.selectedNodes && this.selec --- lib/behavior/click-select.js (bundled) --- "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _util = require("@antv/util"); var DEFAULT_TRIGGER = 'shift'; var ALLOW_EVENTS = ['shift', 'ctrl', 'alt', 'control']; var _default = exports.default = { getDefaultCfg: function getDefaultCfg() { return { multiple: true, trigger: DEFAULT_TRIGGER, selectedState: 'selected', selectNode: true, selectEdge: false, selectCombo: true }; }, getEvents: function getEvents() { var self = this; // 检测输入是否合法 if (!(ALLOW_EVENTS.indexOf(self.trigger.toLowerCase()) > -1)) { self.trigger = DEFAULT_TRIGGER; // eslint-disable-next-line no-console console.warn("Behavior click-select 的 trigger 参数不合法,请输入 'drag'、'shift'、'ctrl' 或 'alt'"); } if (!self.multiple) { return { 'node:click': 'onClick', 'combo:click': 'onClick', 'edge:click': 'onClick', 'canvas:click': 'onCanvasClick' }; } return { 'node:click': 'onClick', 'combo:click': 'onClick', 'edge:click': 'onClick', 'canvas:click': 'onCanvasClick', keyup: 'onKeyUp', keydown: 'onKeyDown' }; }, onClick: function onClick(evt) { var self = this; var item = evt.item; if (!item || item.destroyed) { return; } var type = item.getType(); var graph = self.graph, keydown = self.keydown, multiple = self.multiple, shouldUpdate = self.shouldUpdate, shouldBegin = self.shouldBegin; if (!shouldBegin(evt, self)) { return; } // allow to select multiple nodes but did not press a key || do not allow the select multiple nodes if (!keydown || !multiple) { var selected = graph.findAllByState('node', self.selectedState).concat(graph.findAllByState('edge', self.selectedState)).concat(graph.findAllByState('combo', self.selectedState)); (0, _util.each)(selected, function (selectedItem) { --- lib/behavior/collapse-expand.js (bundled) --- "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var DEFAULT_TRIGGER = 'click'; var ALLOW_EVENTS = ['click', 'dblclick']; var _default = exports.default = { getDefaultCfg: function getDefaultCfg() { return { /** * 发生收缩/扩展变化时的回调 */ trigger: DEFAULT_TRIGGER, onChange: function onChange() {} }; }, getEvents: function getEvents() { var _a; var trigger; // 检测输入是否合法 if (ALLOW_EVENTS.includes(this.tr
