// npm 패키지
@antv/s2-ssr
Support SSR for S2
버전
7
메인테이너
51
라이선스
MIT
최초 publish
2026-01-08
publisher
alex_zjt
tarball
2,844,413 B
AUTO-PUBLISHED·1개 버전 인덱싱됨·최근 publish: 2026-03-18
// publisher 캠페인by alex_zjt
이 계정에서 catch된 패키지 9건고립된 catch가 아닙니다. 동일 publisher가 8개의 다른 패키지를 추가로 발행했고, 모두 파이프라인이 catch했습니다 — 일회성이 아닌 조직적 캠페인의 형태. 아래 링크는 각 형제 catch의 분석으로 이동합니다.
// offending code· @0.1.1· 1 file flagged
llm: benign · 0.85→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
- @0.1.1··AUTO-PUBLISHED·publisher: alex_zjtheuristic 75/100static flags 1llm benign (0.85) via ollamaosv-flagged:MAL-2026-4080public-github-push
→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
// offending code· 1 file flaggedpatterns: 1
--- package/package.json (excerpt) --- { "name": "@antv/s2-ssr", "version": "0.1.1", "description": "Support SSR for S2", "keywords": [ "antv", "s2", "ssr", "spreadsheet", "pivot-table" ], "repository": { "type": "git", "url": "https://github.com/antvis/S2.git" }, "license": "MIT", "author": "https://github.com/orgs/antvis/people", "main": "./dist/s2-ssr.cjs", "types": "./dist/lib/index.d.ts", "bin": "./bin/s2-ssr.js", "files": [ "dist", "bin" ], "dependencies": { "@antv/g": "^6.1.24", "@antv/g-canvas": "^2.0.43", "cac": "^6.7.14", "canvas": "^3.2.0", "@antv/s2": "2.6.0" }, "devDependencies": { "@antv/g-plugin-rough-canvas-renderer": "^2.0.44", "@rollup/plugin-commonjs": "^25.0.8", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.3.0", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.6", "@swc/core": "^1.10.0", "@swc/jest": "^0.2.37", "@types/jest": "^29.5.14", "@types/node": "^16.18.121", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "npm-run-all": "^4.1.5", "rimraf": "^6.0.1", "rollup": "^4.28.1", "rollup-plugin-polyfill-node": "^0.13.0", "typescript": "5.4.5" }, "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" }, "scripts": { "build": "rimraf ./dist && rollup -c", "ci": "run-s lint type-check build test", "lint": "eslint ./src __tests__ --quiet & --- bundled output (OSV-MAL flagged — LLM scope expansion) --- --- dist/s2-ssr.cjs (bundled) --- "use strict";var A=require("canvas"),t=require("fs"),e=require("@antv/s2");function n(A){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(A){return typeof A}:function(A){return A&&"function"==typeof Symbol&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A},n(A)}function r(A){var t=function(A,t){if("object"!=n(A)||!A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var r=e.call(A,t);if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==n(t)?t:t+""}function i(A,t,e){return(t=r(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}function a(A,t){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(A,t).enumerable}))),e.push.apply(e,n)}return e}function o(A){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?a(Object(e),!0).forEach((function(t){i(A,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(e)):a(Object(e)).forEach((function(t){Object.defineProperty(A,t,Object.getOwnPropertyDescriptor(e,t))}))}return A}function s(A,t){if(!(A instanceof t))throw new TypeError("Cannot call a class as a function")}function u(A,t){for(var e=0;e<t.length;e++){var n=t[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(A,r(n.key),n)}}function c(A,t,e){return t&&u(A.prototype,t),e&&u(A,e),Object.defineProperty(A,"prototype",{writable:!1}),A}function l(A,t){(null==t||t>A.length)&&(t=A.length);for(var e=0,n=Array(t);e<t;e++)n[e]=A[e];return n}function h(A,t){if(A){if("string"==typeof A)return l(A,t);var e={}.toString.call(A).slice(8,-1);return"Object"===e&&A.constructor&&(e=A.constructor.name),"Map"===e||"Set"===e?Array.from(A):"Arguments"===e||/^(?:Ui|I)nt(?:8 --- dist/lib/canvas.d.ts (bundled) --- import { Canvas as GCanvas } from '@antv/g'; import type { Canvas as NodeCanvas } from 'canvas'; import type { Options } from './types'; /** * <zh/> 创建画布 * * <en/> create canvas * @param options <zh/> options 画布配置 | <en/> options canvas configuration * @returns <zh/> [G 画布, NodeCanvas 画布] | <en/> [GCanvas, NodeCanvas] */ export declare function createCanvas(options: Options): [GCanvas, NodeCanvas]; --- dist/lib/env.d.ts (bundled) --- /** * Node.js environment setup for SSR * * This module sets up browser-like globals required by S2 and its dependencies * in a Node.js environment. It must be imported before any other S2 modules. */ /** * Setup Node.js environment for SSR * * Call this function before importing any S2 modules to ensure * browser-like globals are available. * * @example * ```ts * import { setupNodeEnvironment } from '@antv/s2-ssr/env'; * setupNodeEnvironment(); * * // Now import S2 * import { createSpreadsheet } from '@antv/s2-ssr'; * ``` */ export declare function setupNodeEnvironment(): void; --- dist/lib/index.d.ts (bundled) --- export { createCanvas } from './canvas'; export { setupNodeEnvironment } from './env'; export { createSpreadsheet } from './spreadsheet'; export type { MetaData, Options, Spreadsheet } from './types'; export { PivotSheet, SpreadSheet, TableSheet } from '@antv/s2'; --- dist/lib/spreadsheet.d.ts (bundled) --- import type { Options, Spreadsheet } from './types'; /** * <zh/> 创建表格并等待渲染完成 * * <en/> Create a spreadsheet and wait for the rendering to complete */ export declare function createSpreadsheet(options: Options): Promise<Spreadsheet>; --- dist/lib/types.d.ts (bundled) --- /// <reference types="node" /> /// <reference types="node" /> import type { RendererPlugin } from '@antv/g'; import type { S2DataConfig, S2Options, ThemeCfg } from '@antv/s2'; import type { Canvas, JpegConfig, PdfConfig, PngConfig } from 'canvas'; /** * <zh/> S2 SSR 配置项 * * <en/> S2 SSR Options */ export interface Options { /** * <zh/> 表格类型 * * <en/> Sheet type * @defaultValue 'pivot' */ sheetType?: 'pivot' | 'table'; /** * <zh/> 数据配置 * * <en/> Data configuration */ dataCfg: S2DataConfig; /** * <zh/> 表格配置 * * <en/> Sheet options */ options?: Partial<S2Options>; /** * <zh/> 主题配置 * * <en/> Theme configuration */ themeCfg?: ThemeCfg; /** * <zh/> 画布宽度 * * <en/> Canvas width */ width: number; /** * <zh/> 画布高度 * * <en/> Canvas height */ height: number; /** * <zh/> 设备像素比 * * <en/> Device pixel ratio * @defaultValue 2 */ devicePixelRatio?: number; /** * <zh/> 等待渲染的时间,默认为 100ms * * <en/> The time to wait for rendering, default is 100ms * @defaultValue 100 */ waitForRender?: number; /** * <zh/> 输出文件类型,默认导出为图片 * * <en/> output file type, default export as image * @defaultValue 'image' */ outputType?: 'image' | 'pdf' | 'svg'; /** * <zh/> 图片类型,默认为 png * * <en/> Image type, default is png * @defaultValue 'png' */ imageType?: 'png' | 'jpeg'; /** * <zh/> 自动裁剪画布到实际表格大小,去除空白区域 * * <en/> Auto crop canvas to actual table size, remove blank areas * @defaultValue true */ autoFit?: boolean; /** * <zh/> 渲染插件 * * <en/> Render plugins */ renderPlugins?: RendererPlugin[]; } /** * <zh/> PDF/PNG/JPEG 元数据 * * <en/> PDF/PNG/JPEG metadata */ export type MetaData = PdfConfig | PngConfig | JpegConfig; /** * <zh/> SSR 表格实例 * * <en
