// npm 패키지
@antv/infographic
An Infographic Generation and Rendering Framework, bring words to life!
주간
9,093
월간
29,422
버전
33
메인테이너
51
라이선스
MIT
최초 publish
2025-11-12
publisher
iaaron
tarball
8,202,595 B
AUTO-PUBLISHED·1개 버전 인덱싱됨·최근 publish: 2026-05-06
// publisher 캠페인by iaaron
이 계정에서 catch된 패키지 9건고립된 catch가 아닙니다. 동일 publisher가 8개의 다른 패키지를 추가로 발행했고, 모두 파이프라인이 catch했습니다 — 일회성이 아닌 조직적 캠페인의 형태. 아래 링크는 각 형제 catch의 분석으로 이동합니다.
// offending code· @0.2.19· 1 file flagged
llm: benign · 0.85→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
- @0.2.19··AUTO-PUBLISHED·publisher: iaaronheuristic 75/100static flags 1llm benign (0.85) via ollamapopularity:highmature-packageosv-flagged:MAL-2026-4028child-process-spawn
→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
// offending code· 1 file flaggedpatterns: 1
--- install scripts --- ### prepublishOnly npm run ci --- package/src/syntax/relations.ts (excerpt) --- import type { ItemDatum, RelationEdgeDatum } from '../types'; import { mapWithSchema } from './mapper'; import { RelationSchema } from './schema'; import type { SyntaxError, SyntaxNode } from './types'; const RELATION_TOKEN = /(?:[<>o.x-]{2,}|[<>=]{2,})/; const ARROW_TOKEN = /(?:[<>o.x-]{2,}|[<>=]{2,})/g; interface ParsedNode { id: string; label?: string; } interface ParsedEdge { label?: string; direction: 'forward' | 'both' | 'none'; reverse: boolean; nextIndex: number; } function normalizeLabel(text: string) { let label = text.trim(); if (!label) return ''; const first = label[0]; const last = label[label.length - 1]; if ((first === '"' && last === '"') || (first === "'" && last === "'")) { label = label.slice(1, -1); } label = label .replace(/\\(["'])/g, '$1') .replace(/("|&#quot;|#quot;)/g, '"') .replace(/('|'|#apos;)/g, "'"); return label.trim(); } function stripEdgeLabelPrefix(text: string) { const trimmed = text .trim() .replace(/^[-=.ox]+/, '') .trim(); return normalizeLabel(trimmed); } function skipSpaces(text: string, index: number) { let cursor = index; while (cursor < text.length && /\s/.test(text[cursor])) { cursor += 1; } return cursor; } function readNode(text: string, startIndex: number) { let index = skipSpaces(text, startIndex); if (index >= text.length) return null; const idStart = index; while (index < text.length) { const char = text[index]; if (
