// npm 패키지
@antv/t8
T8 is a text visualization solution for unstructured data within the AntV technology stack, and it is a declarative T8 markdown syntax that can be used to describe the content of data interpretation reports.
버전
5
메인테이너
51
라이선스
MIT
최초 publish
2025-06-24
publisher
atool
tarball
799,258 B
AUTO-PUBLISHED·1개 버전 인덱싱됨·최근 publish: 2026-01-31
// exfil path
what is read → where it shipssteals
- ○ clipboard
sends to
(no destination string extracted — payload may be dynamic / obfuscated)
→ view full payload// publisher 캠페인by atool
이 계정에서 catch된 패키지 9건고립된 catch가 아닙니다. 동일 publisher가 8개의 다른 패키지를 추가로 발행했고, 모두 파이프라인이 catch했습니다 — 일회성이 아닌 조직적 캠페인의 형태. 아래 링크는 각 형제 catch의 분석으로 이동합니다.
// offending code· @0.3.0· 3 files flagged
llm: benign · 0.85→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
- @0.3.0··AUTO-PUBLISHED·publisher: atoolheuristic 75/100static flags 1llm benign (0.85) via ollamapublisher-multi-name-burst:5osv-flagged:MAL-2026-4087clipboard-access
→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
// offending code· 3 files flaggedpatterns: 1
--- install scripts --- ### prepare husky --- package/types/vis-components/NarrativeTextVis.d.ts (excerpt) --- import { NarrativeTextSpec } from '../schema'; import { NarrativeEvents } from './types'; import { SeedTokenOptions } from '../theme'; import { PluginManager } from '../plugin'; export type ExtensionProps = { /** * @description extension plugin * @description.zh-CN 扩展插件 */ pluginManager?: PluginManager; }; export type NarrativeTextVisProps = ExtensionProps & NarrativeEvents & { /** * @description specification of narrative text spec * @description.zh-CN Narrative 描述 json 信息 */ spec: NarrativeTextSpec; /** * @description the function to be called when copy event is listened. If it is undefined, the default behavior is to put the transformed html and plain text into user's clipboard * @description.监听到 copy 事件时执行的函数,可用于控制复制的内容和复制行为,如果不传,默认将会把转换后的富文本和纯文本内容放入剪切板 */ /** * @description theme props * @description.zh-CN 主题配置 */ themeSeedToken?: SeedTokenOptions; }; /** * The NTV React component for rendering narrative text visualizations. * It contains all the vis-components needed to render a narrative text spec. * All the vis-components are writed with PReact. */ export declare function NarrativeTextVis({ spec, pluginManager, themeSeedToken, ...events }: NarrativeTextVisProps): import("preact").JSX.Element; //# sourceMappingURL=NarrativeTextVis.d.ts.map --- package/lib/vis-components/NarrativeTextVis.js (excerpt) --- 'use strict'; var tslib = require('tslib'); var jsxRuntime = require('preact/jsx-runtime'); var uuid = require('uuid'); var hooks = require('preact/hooks'); require('./styled/bullet.js'); var container = require('./styled/container.js'); require('./styled/entity.js'); require('./styled/heading.js'); require('./styled/marks.js'); require('./styled/paragraph.js'); require('../schema/paragraph.js'); require('../schema/phrase.js'); var getPrefixCls = require('../utils/getPrefixCls.js'); var classnames = require('../utils/classnames.js'); require('./context/hooks/theme.js'); require('./context/hooks/plugin.js'); require('./context/hooks/event.js'); require('./context/hooks/currentParagraphInfo.js'); var provider = require('./context/provider.js'); require('preact'); var Headline = require('./paragraph/Headline.js'); var index$2 = require('./section/index.js'); var index$1 = require('../theme/seed/index.js'); var index = require('../plugin/index.js'); /** * The NTV React component for rendering narrative text visualizations. * It contains all the vis-components needed to render a narrative text spec. * All the vis-components are writed with PReact. */ function NarrativeTextVis(_a) { var spec = _a.spec, _b = _a.pluginManager, pluginManager = _b === void 0 ? index.presetPluginManager : _b, _c = _a.themeSeedToken, themeSeedToken = _c === void 0 ? index$1.defaultSeedToken : _c, // copyNarrative, events = tslib.__rest(_a, ["spec", "pluginManager", "themeSeedToken"]); --- package/es/vis-components/NarrativeTextVis.js (excerpt) --- import { __rest } from 'tslib'; import { jsx, jsxs } from 'preact/jsx-runtime'; import { v4 } from 'uuid'; import { useRef } from 'preact/hooks'; import './styled/bullet.js'; import { Container } from './styled/container.js'; import './styled/entity.js'; import './styled/heading.js'; import './styled/marks.js'; import './styled/paragraph.js'; import '../schema/paragraph.js'; import '../schema/phrase.js'; import { getPrefixCls } from '../utils/getPrefixCls.js'; import { classnames } from '../utils/classnames.js'; import './context/hooks/theme.js'; import './context/hooks/plugin.js'; import './context/hooks/event.js'; import './context/hooks/currentParagraphInfo.js'; import { ContextProvider } from './context/provider.js'; import 'preact'; import { Headline } from './paragraph/Headline.js'; import { Section } from './section/index.js'; import { defaultSeedToken } from '../theme/seed/index.js'; import { presetPluginManager } from '../plugin/index.js'; /** * The NTV React component for rendering narrative text visualizations. * It contains all the vis-components needed to render a narrative text spec. * All the vis-components are writed with PReact. */ function NarrativeTextVis(_a) { var spec = _a.spec, _b = _a.pluginManager, pluginManager = _b === void 0 ? presetPluginManager : _b, _c = _a.themeSeedToken, themeSeedToken = _c === void 0 ? defaultSeedToken : _c, // copyNarrative, events = __rest(_a, ["spec", "pluginManager", "themeSeedToken"]); var narrativeD --- bundled output (OSV-MAL flagged — LLM scope expansion) --- --- lib/parser/syntax-parser.js (bundled) --- 'use strict'; var paragraph = require('../schema/paragraph.js'); var phrase = require('../schema/phrase.js'); /** * Parses a T8 Syntax string into a NarrativeTextSpec object. * * T8 Syntax supports: * - Markdown-style headings (# to ######) * - Paragraphs (text separated by blank lines) * - Bullet lists (- or * for unordered, 1. 2. 3. for ordered) * - Text formatting (**bold**, *italic*, __underline__) * - Links [text](url) * - Entity syntax: [displayText](entityType, key1=value1, key2="value2") * * @param syntaxString - The T8 Syntax string to parse * @returns A NarrativeTextSpec object */ function parseSyntax(syntaxString) { var lines = syntaxString.split('\n'); var sections = []; var currentParagraphs = []; var currentParagraphLines = []; var currentBulletLines = []; var inBulletList = false; var bulletListIsOrdered = false; var flushBulletList = function () { if (currentBulletLines.length > 0) { var bulletParagraph = parseBulletList(currentBulletLines, bulletListIsOrdered); if (bulletParagraph) { currentParagraphs.push(bulletParagraph); } currentBulletLines = []; inBulletList = false; } }; var flushParagraph = function () { if (currentParagraphLines.length > 0) { var text = currentParagraphLines.join('\n').trim(); if (text) { var paragraph = parseBlock(text); if (paragraph) { currentParagraphs.push(paragraph); } } currentParagraphLines = []; } }; for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) { var line = lines_1[_i]; var trimmedLine = line.trim(); // Check if it's a heading var headingMatch = trimmedLine.match(/^(#{1,6})\s+(.+)$/); if (headingMatch) { // Flush any accumulated content flushBulletList();
