// npm 패키지
slice.js
nano version for slice of string and array like Python.
버전
3
메인테이너
1
라이선스
MIT
최초 publish
2016-11-03
publisher
atool
tarball
53,749 B
AUTO-PUBLISHED·1개 버전 인덱싱됨·최근 publish: 2018-03-10
// publisher 캠페인by atool
이 계정에서 catch된 패키지 9건고립된 catch가 아닙니다. 동일 publisher가 8개의 다른 패키지를 추가로 발행했고, 모두 파이프라인이 catch했습니다 — 일회성이 아닌 조직적 캠페인의 형태. 아래 링크는 각 형제 catch의 분석으로 이동합니다.
// offending code· @1.1.1· 1 file flagged
llm: benign · 0.85→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
- @1.1.1··AUTO-PUBLISHED·publisher: atoolheuristic 75/100static flags 1llm benign (0.85) via ollamapublisher-multi-name-burst:5osv-flagged:MAL-2026-4154public-github-push
→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
// offending code· 1 file flaggedpatterns: 1
--- package/package.json (excerpt) --- { "name": "slice.js", "version": "1.1.1", "description": "nano version for slice of string and array like Python.", "main": "lib/index.js", "scripts": { "test": "jest", "build": "babel src --out-dir lib && npm run test" }, "repository": { "type": "git", "url": "git+https://github.com/hustcc/slice.js.git" }, "keywords": [ "slice.js", "slice" ], "author": "hustcc", "license": "MIT", "bugs": { "url": "https://github.com/hustcc/slice.js/issues" }, "homepage": "https://github.com/hustcc/slice.js#readme", "devDependencies": { "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-jest": "^21.2.0", "babel-preset-env": "^1.6.1", "coveralls": "^3.0.0", "jest": "^21.2.1" }, "jest": { "testRegex": "(/test)\\.(ts|tsx|js)$", "moduleFileExtensions": [ "ts", "tsx", "js", "json" ], "collectCoverage": true, "collectCoverageFrom": [ "src/**/*.{js}", "!**/node_modules/**", "!**/vendor/**" ], "moduleDirectories": [ "node_modules" ], "transform": { "^.+\\.js?$": "babel-jest" } } } --- package.json (entry) --- { "name": "slice.js", "version": "1.1.1", "description": "nano version for slice of string and array like Python.", "main": "lib/index.js", "scripts": { "test": "jest", "build": "babel src --out-dir lib && npm run test" }, "repository": { "type": "git", "url": "git+https://github.com/hustcc/slice.js.git" }, "keywords": [ "slice.js", "slice" ], "author": "hustcc", "license": "MIT", "bugs": { "url": "https://github.com/hustcc/slice.js/issues" }, "homepage": "https://github.com/hustcc/slice.js#readme", "devDependencies": { "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-jest": "^21.2.0", "babel-preset-env": "^1.6.1", "coveralls": "^3.0.0", "jest": "^21.2.1" }, "jest": { "testRegex": "(/test)\\.(ts|tsx|js)$", "moduleFileExtensions": [ "ts", "tsx", "js", "json" ], "collectCoverage": true, "collectCoverageFrom": [ "src/**/*.{js}", "!**/node_modules/**", "!**/vendor/**" ], "moduleDirectories": [ "node_modules" ], "transform": { "^.+\\.js?$": "babel-jest" } } } --- index.js (entry) --- /** * 抛出一个异常 * @param condition * @param s */ const invariant = (condition, s) => { if (!condition) throw new Error(s); }; /** * 模仿 Python 的分片操作 * @param v * @param start * @param end * @param step * @returns {Array} */ const slice = (v, start, end, step) => { const r = []; let i; if (step > 0) { for (i = start; i < end; i += step) { r.push(v[i]); } } else { for (i = start; i > end; i += step) { r.push(v[i]); } } return r; }; /** * parse a string / number to number. * * parseInt('') === NaN * Number('') === 0 * @param n */ const parseNumber = n => isNaN(parseInt(n)) ? NaN : Number(n); /** * parse slice string * start:end:stepß * @param path * @param l * @returns {*[]} */ const parseSliceString = (path, l) => { let [start, end, step] = path.split(':').map(s => parseNumber(s)); // 异常的时候默认值 start = isNaN(start) ? 0 : start < 0 ? l + start : start; end = isNaN(end) ? l : end < 0 ? l + end : // 小于 0 转成正数 end > l ? l : end; // 最大为长度 step = isNaN(step) ? 1 : step; invariant(step !== 0, 'Step can not be zero!'); return [ start, end, step, ]; }; /** * slice entry 方法 * @param
