{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:00.496267Z","repo":{"ref":{"host":"github.com","owner":"Foveluy","name":"Dragact"},"default_branch":"master","clone_url":"https://github.com/Foveluy/Dragact.git","html_url":"https://github.com/Foveluy/Dragact","description":"a dragger layout system with React style . ","stars":758,"forks":182,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":28164,"primary_language":"TypeScript","license_spdx":"MIT","created_at":"2017-09-10T11:34:42Z","pushed_at":"2019-03-11T11:36:29Z","security_policy_url":null,"distribution":{"owner_created_at":"2016-01-21T08:00:17Z","owner_type":"User","release_assets":[]}},"commit_sha":"4679af2c3badcb627b54154a69947b580b7044b7","profile":{"lines_by_language":{"TypeScript":3163,"JavaScript":149},"files_by_category":{"source":29,"vendored":28,"other":10,"config":8,"docs":8,"oversized":7,"binary":1,"test":1},"source_lines":3297,"test_lines":15},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.65,"coverage":1.0,"label":"none-detected","breakdown":{"attributed_share":0.0,"suspected_share":0.0,"estimated_share":0.0,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":0.0,"style_index":0.152},"summary":"No AI attribution or AI-consistent velocity signals detected."},"quality":{"score":42.9,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":88.8,"duplication":20.2,"lint":7.6,"testing":20.6,"docs":85.0,"type_safety":60.0,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 4% of function code in complex or long functions; 27% duplicated lines. Weakest area: lint."},"security":{"score":80.3,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":96.7,"sast":100.0,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: no high-impact findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":31.0,"checked":31.0,"missing":0.0,"recent":0.0,"lookup_errors":0.0},"findings":[],"evidence":[],"data":{"phantom":false},"error":null},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":170.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":8689.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2017-09":{"loc":1578,"attributed_loc":0},"2017-10":{"loc":56,"attributed_loc":0},"2018-02":{"loc":5217,"attributed_loc":0},"2018-03":{"loc":1691,"attributed_loc":0},"2018-04":{"loc":0,"attributed_loc":0},"2018-08":{"loc":47,"attributed_loc":0},"2018-09":{"loc":0,"attributed_loc":0},"2018-12":{"loc":100,"attributed_loc":0},"2019-01":{"loc":0,"attributed_loc":0},"2019-03":{"loc":0,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":88.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":8689.0,"pre_ai_era_burst_loc":0.0,"measured_loc":8689.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":310.6646058732612,"median_loc_per_hour":47.0,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":3.0,"flagged_releases":0.0,"max_loc_per_day":418.7},"findings":[],"evidence":[],"data":{"releases":[{"from":"0.1.0","to":"0.1.3","loc":370,"days":1.29,"loc_per_day":287.0,"flagged":false},{"from":"0.1.3","to":"v0.1.6","loc":2836,"days":6.77,"loc_per_day":418.7,"flagged":false},{"from":"v0.1.6","to":"0.1.8","loc":688,"days":3.23,"loc_per_day":213.1,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":3297.0,"index":0.152,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":1.0,"per_kloc:emoji_in_code":0.303,"files:emoji_in_code":1.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":1.0},"findings":[{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 8532d2c13f); removed from the current tree but still retrievable","path":"build/GridItem.js","line":109,"fingerprint":"8532d2c13f982c6e88bcfd8939486483d929c591:build/GridItem.js:generic-api-key:109"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":0.0,"findings_high":0.0,"findings_medium":0.0,"findings_low":0.0,"weighted_findings":0.0,"scanned_lines":3297.0,"parse_errors":0.0},"findings":[],"evidence":[],"data":{"rulesets":["typescript","javascript"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":0.0,"signed_commit_share":0.0353,"unpinned_manifests":1.0},"findings":[],"evidence":[{"kind":"posture","description":"package.json has no lockfile alongside it (unpinned dependencies)","ref":"package.json","url":null,"weight":0.3}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":181.0,"function_nloc":1977.0,"mean_ccn":2.31,"p90_ccn":4.0,"complex_functions":1.0,"long_functions":0.0,"many_param_functions":0.0,"risky_nloc_share":0.0395},"findings":[],"evidence":[{"kind":"complex-function","description":"move in src/lib/dragger/base.tsx: complexity 22, 78 lines","ref":"src/lib/dragger/base.tsx","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/src/lib/dragger/base.tsx#L105","weight":0.36666666666666664}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":2244.0,"duplicated_lines":598.0,"duplicated_share":0.2665,"files":29.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: example/AddRemove/index.tsx:4 and example/HandleLayout/index.tsx:7","ref":"example/AddRemove/index.tsx","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/example/AddRemove/index.tsx#L4","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: example/HandleLayout/index.tsx:8 and example/LayoutRestore/index.tsx:7","ref":"example/HandleLayout/index.tsx","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/example/HandleLayout/index.tsx#L8","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: example/HistoryLayout/index.tsx:7 and example/NormalLayout/index.tsx:9","ref":"example/HistoryLayout/index.tsx","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/example/HistoryLayout/index.tsx#L7","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: example/HistoryLayout/largedata.ts:1 and example/NormalLayout/largedata.ts:1","ref":"example/HistoryLayout/largedata.ts","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/example/HistoryLayout/largedata.ts#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: example/HistoryLayout/largedata.ts:2 and example/HistoryLayout/largedata.ts:7","ref":"example/HistoryLayout/largedata.ts","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/example/HistoryLayout/largedata.ts#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: example/NormalLayout/index.tsx:72 and example/mobileLayout/index.tsx:60","ref":"example/NormalLayout/index.tsx","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/example/NormalLayout/index.tsx#L72","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/lib/dragact.tsx:40 and src/lib/dragact.tsx:108","ref":"src/lib/dragact.tsx","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/src/lib/dragact.tsx#L40","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/lib/dragger/base.tsx:68 and src/lib/dragger/index.tsx:29","ref":"src/lib/dragger/base.tsx","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/src/lib/dragger/base.tsx#L68","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/lib/dragger/index.tsx:67 and src/lib/dragger/index.tsx:169","ref":"src/lib/dragger/index.tsx","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/src/lib/dragger/index.tsx#L67","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: webpack.config.js:9 and webpack.pro.config.js:8","ref":"webpack.config.js","url":"https://github.com/Foveluy/Dragact/blob/4679af2c3badcb627b54154a69947b580b7044b7/webpack.config.js#L9","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":34.0,"weighted_findings":34.0,"scanned_lines":3297.0,"category:best-practice":34.0},"findings":[{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/AddRemove/index.tsx","line":16,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/AddRemove/index.tsx:16"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/AddRemove/index.tsx","line":17,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/AddRemove/index.tsx:17"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/AddRemove/index.tsx","line":102,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/AddRemove/index.tsx:102"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HandleLayout/index.tsx","line":35,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HandleLayout/index.tsx:35"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HandleLayout/index.tsx","line":36,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HandleLayout/index.tsx:36"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HandleLayout/index.tsx","line":51,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HandleLayout/index.tsx:51"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HandleLayout/index.tsx","line":54,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HandleLayout/index.tsx:54"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HandleLayout/index.tsx","line":79,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HandleLayout/index.tsx:79"},{"rule_id":"opengrep/typescript.react.best-practice.react-legacy-component","severity":"medium","message":"Legacy component lifecycle was detected - componentWillReceiveProps.","path":"example/HistoryLayout/HistoryLayout.tsx","line":105,"fingerprint":"typescript.react.best-practice.react-legacy-component:example/HistoryLayout/HistoryLayout.tsx:105"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HistoryLayout/HistoryLayout.tsx","line":120,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HistoryLayout/HistoryLayout.tsx:120"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HistoryLayout/index.tsx","line":21,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HistoryLayout/index.tsx:21"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HistoryLayout/index.tsx","line":22,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HistoryLayout/index.tsx:22"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HistoryLayout/index.tsx","line":36,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HistoryLayout/index.tsx:36"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/HistoryLayout/index.tsx","line":88,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/HistoryLayout/index.tsx:88"},{"rule_id":"opengrep/typescript.react.best-practice.react-legacy-component","severity":"medium","message":"Legacy component lifecycle was detected - componentWillMount.","path":"example/LayoutRestore/index.tsx","line":36,"fingerprint":"typescript.react.best-practice.react-legacy-component:example/LayoutRestore/index.tsx:36"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/LayoutRestore/index.tsx","line":57,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/LayoutRestore/index.tsx:57"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/NormalLayout/index.tsx","line":23,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/NormalLayout/index.tsx:23"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/NormalLayout/index.tsx","line":24,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/NormalLayout/index.tsx:24"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/NormalLayout/index.tsx","line":38,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/NormalLayout/index.tsx:38"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/NormalLayout/index.tsx","line":74,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/NormalLayout/index.tsx:74"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/StaticWidget/index.tsx","line":25,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/StaticWidget/index.tsx:25"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/StaticWidget/index.tsx","line":26,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/StaticWidget/index.tsx:26"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/mobileLayout/index.tsx","line":21,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/mobileLayout/index.tsx:21"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/mobileLayout/index.tsx","line":22,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/mobileLayout/index.tsx:22"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"example/mobileLayout/index.tsx","line":62,"fingerprint":"typescript.react.best-practice.react-props-spreading:example/mobileLayout/index.tsx:62"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/lib/dragact.tsx","line":210,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/lib/dragact.tsx:210"},{"rule_id":"opengrep/typescript.react.best-practice.react-legacy-component","severity":"medium","message":"Legacy component lifecycle was detected - componentWillReceiveProps.","path":"src/lib/dragact.tsx","line":215,"fingerprint":"typescript.react.best-practice.react-legacy-component:src/lib/dragact.tsx:215"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/lib/dragact.tsx","line":324,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/lib/dragact.tsx:324"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-in-state","severity":"medium","message":"Copying a prop into state in React -- this is bad practice as all updates to it are ignored. Instead, read props directly in your component and avoid copying props into state.","path":"src/lib/dragger/base.tsx","line":76,"fingerprint":"typescript.react.best-practice.react-props-in-state:src/lib/dragger/base.tsx:76"},{"rule_id":"opengrep/typescript.react.best-practice.react-legacy-component","severity":"medium","message":"Legacy component lifecycle was detected - componentWillReceiveProps.","path":"src/lib/dragger/base.tsx","line":372,"fingerprint":"typescript.react.best-practice.react-legacy-component:src/lib/dragger/base.tsx:372"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/lib/dragger/base.tsx","line":451,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/lib/dragger/base.tsx:451"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/lib/dragger/base.tsx","line":456,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/lib/dragger/base.tsx:456"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-in-state","severity":"medium","message":"Copying a prop into state in React -- this is bad practice as all updates to it are ignored. Instead, read props directly in your component and avoid copying props into state.","path":"src/lib/dragger/index.tsx","line":37,"fingerprint":"typescript.react.best-practice.react-props-in-state:src/lib/dragger/index.tsx:37"},{"rule_id":"opengrep/typescript.react.best-practice.react-legacy-component","severity":"medium","message":"Legacy component lifecycle was detected - componentWillReceiveProps.","path":"src/lib/dragger/index.tsx","line":410,"fingerprint":"typescript.react.best-practice.react-legacy-component:src/lib/dragger/index.tsx:410"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.0091,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0345,"test_lines":15.0,"source_lines":3297.0,"test_ratio":0.0045,"ci_files":0.0,"cochange_share":0.0086,"cochange_commits":116.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":0.0,"check:changelog":1.0,"readme_lines":62.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0},{"kind":"docs","description":"docs/changelog.md","ref":"docs/changelog.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":1.0,"check:low_escape_density":0.0,"escapes":103.0,"escapes_per_kloc":32.564},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: tsconfig.json","ref":"tsconfig.json","url":null,"weight":0.0}],"data":{},"error":null}],"flags":[]}