Repository Analysis

fabricjs/fabric.js

Javascript Canvas Library, SVG-to-Canvas (& canvas-to-SVG) Parser

7.5 Low AI signal View on GitHub
7.5
Adjusted Score
7.5
Raw Score
100%
Time Factor
2026-05-28
Last Push
31,204
Stars
TypeScript
Language
109,623
Lines of Code
589
Files
152
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 80HIGH 0MEDIUM 1LOW 71

Pattern Findings

152 matches across 5 categories. Click a row to expand file-level details.

Hallucination Indicators80 hits · 750 pts
SeverityFileLineSnippet
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts218 expect(cObj.oCoords.tl.corner.tl.x.toFixed(2), 'tl corner.tl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts221 expect(cObj.oCoords.tl.corner.tl.y.toFixed(2), 'tl corner.tl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts224 expect(cObj.oCoords.tl.corner.tr.x.toFixed(2), 'tl corner.tr.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts227 expect(cObj.oCoords.tl.corner.tr.y.toFixed(2), 'tl corner.tr.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts230 expect(cObj.oCoords.tl.corner.bl.x.toFixed(2), 'tl corner.bl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts233 expect(cObj.oCoords.tl.corner.bl.y.toFixed(2), 'tl corner.bl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts236 expect(cObj.oCoords.tl.corner.br.x.toFixed(2), 'tl corner.br.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts239 expect(cObj.oCoords.tl.corner.br.y.toFixed(2), 'tl corner.br.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts242 expect(cObj.oCoords.bl.corner.tl.x.toFixed(2), 'bl corner.tl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts245 expect(cObj.oCoords.bl.corner.tl.y.toFixed(2), 'bl corner.tl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts248 expect(cObj.oCoords.bl.corner.tr.x.toFixed(2), 'bl corner.tr.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts251 expect(cObj.oCoords.bl.corner.tr.y.toFixed(2), 'bl corner.tr.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts254 expect(cObj.oCoords.bl.corner.bl.x.toFixed(2), 'bl corner.bl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts257 expect(cObj.oCoords.bl.corner.bl.y.toFixed(2), 'bl corner.bl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts260 expect(cObj.oCoords.bl.corner.br.x.toFixed(2), 'bl corner.br.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts263 expect(cObj.oCoords.bl.corner.br.y.toFixed(2), 'bl corner.br.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts266 expect(cObj.oCoords.tr.corner.tl.x.toFixed(2), 'tr corner.tl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts269 expect(cObj.oCoords.tr.corner.tl.y.toFixed(2), 'tr corner.tl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts272 expect(cObj.oCoords.tr.corner.tr.x.toFixed(2), 'tr corner.tr.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts275 expect(cObj.oCoords.tr.corner.tr.y.toFixed(2), 'tr corner.tr.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts278 expect(cObj.oCoords.tr.corner.bl.x.toFixed(2), 'tr corner.bl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts281 expect(cObj.oCoords.tr.corner.bl.y.toFixed(2), 'tr corner.bl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts284 expect(cObj.oCoords.tr.corner.br.x.toFixed(2), 'tr corner.br.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts287 expect(cObj.oCoords.tr.corner.br.y.toFixed(2), 'tr corner.br.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts290 expect(cObj.oCoords.br.corner.tl.x.toFixed(2), 'br corner.tl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts293 expect(cObj.oCoords.br.corner.tl.y.toFixed(2), 'br corner.tl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts296 expect(cObj.oCoords.br.corner.tr.x.toFixed(2), 'br corner.tr.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts299 expect(cObj.oCoords.br.corner.tr.y.toFixed(2), 'br corner.tr.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts302 expect(cObj.oCoords.br.corner.bl.x.toFixed(2), 'br corner.bl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts305 expect(cObj.oCoords.br.corner.bl.y.toFixed(2), 'br corner.bl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts308 expect(cObj.oCoords.br.corner.br.x.toFixed(2), 'br corner.br.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts311 expect(cObj.oCoords.br.corner.br.y.toFixed(2), 'br corner.br.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts314 expect(cObj.oCoords.mtr.corner.tl.x.toFixed(2), 'mtr corner.tl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts317 expect(cObj.oCoords.mtr.corner.tl.y.toFixed(2), 'mtr corner.tl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts320 expect(cObj.oCoords.mtr.corner.tr.x.toFixed(2), 'mtr corner.tr.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts323 expect(cObj.oCoords.mtr.corner.tr.y.toFixed(2), 'mtr corner.tr.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts326 expect(cObj.oCoords.mtr.corner.bl.x.toFixed(2), 'mtr corner.bl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts329 expect(cObj.oCoords.mtr.corner.bl.y.toFixed(2), 'mtr corner.bl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts332 expect(cObj.oCoords.mtr.corner.br.x.toFixed(2), 'mtr corner.br.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts335 expect(cObj.oCoords.mtr.corner.br.y.toFixed(2), 'mtr corner.br.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts445 expect(cObj.oCoords.tl.corner.tl.x.toFixed(2), 'tl corner.tl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts448 expect(cObj.oCoords.tl.corner.tl.y.toFixed(2), 'tl corner.tl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts451 expect(cObj.oCoords.tl.corner.tr.x.toFixed(2), 'tl corner.tr.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts454 expect(cObj.oCoords.tl.corner.tr.y.toFixed(2), 'tl corner.tr.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts457 expect(cObj.oCoords.tl.corner.bl.x.toFixed(2), 'tl corner.bl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts460 expect(cObj.oCoords.tl.corner.bl.y.toFixed(2), 'tl corner.bl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts463 expect(cObj.oCoords.tl.corner.br.x.toFixed(2), 'tl corner.br.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts466 expect(cObj.oCoords.tl.corner.br.y.toFixed(2), 'tl corner.br.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts469 expect(cObj.oCoords.bl.corner.tl.x.toFixed(2), 'bl corner.tl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts472 expect(cObj.oCoords.bl.corner.tl.y.toFixed(2), 'bl corner.tl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts475 expect(cObj.oCoords.bl.corner.tr.x.toFixed(2), 'bl corner.tr.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts478 expect(cObj.oCoords.bl.corner.tr.y.toFixed(2), 'bl corner.tr.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts481 expect(cObj.oCoords.bl.corner.bl.x.toFixed(2), 'bl corner.bl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts484 expect(cObj.oCoords.bl.corner.bl.y.toFixed(2), 'bl corner.bl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts487 expect(cObj.oCoords.bl.corner.br.x.toFixed(2), 'bl corner.br.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts490 expect(cObj.oCoords.bl.corner.br.y.toFixed(2), 'bl corner.br.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts493 expect(cObj.oCoords.tr.corner.tl.x.toFixed(2), 'tr corner.tl.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts496 expect(cObj.oCoords.tr.corner.tl.y.toFixed(2), 'tr corner.tl.y').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts499 expect(cObj.oCoords.tr.corner.tr.x.toFixed(2), 'tr corner.tr.x').toBe(
CRITICALsrc/shapes/Object/Object-interactivity.spec.ts502 expect(cObj.oCoords.tr.corner.tr.y.toFixed(2), 'tr corner.tr.y').toBe(
20 more matches not shown…
Over-Commented Block29 hits · 29 pts
SeverityFileLineSnippet
LOWtsconfig.json1{
LOWtsconfig.json61 // "mapRoot": "", /* Specify the location where debugger should locate map files
LOWtsconfig.json81 // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with
LOWtsconfig-extensions.json1{
LOWtsconfig-extensions.json21 // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory func
LOWtsconfig-extensions.json61 // "sourceRoot": "", /* Specify the root path for debuggers to find the reference so
LOWtsconfig-extensions.json81 "strict": true /* Enable all strict type-checking options. */,
LOW.codesandbox/templates/next/next-env.d.ts1/// <reference types="next" />
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply need
LOW.github/workflows/scorecard.yml41
LOWsrc/util/path/regex.ts21// const reClosePathCommand = String.raw`(Z)\s*`;
LOWsrc/util/path/regex.ts41// `|(?:${reCubicCurveShortcutCommand})` +
LOWsrc/shapes/Group.spec.ts1721 // rect5 = new fabric.Rect({ top: 1, left: 1, width: 3, height: 2, strokeWidth: 0, fill: 'red' });
LOWsrc/shapes/Group.spec.ts1741 // img = new fabric.Image(_createImageElement()),
LOWsrc/shapes/IText/ITextKeyBehavior.test.ts361// var iText = new fabric.IText('test', { styles: { 0: { 0: { fill: 'red' }, 1: { fill: 'blue' }}}});
LOWsrc/shapes/Object/Object.spec.ts241 expect(cObj.get('width'), 'width should be set').toBe(99);
LOWsrc/shapes/Object/Object.spec.ts1861 // expect(object2.fill, 'once assigned object is red').toBe('red');
LOWsrc/canvas/StaticCanvas.spec.ts2241 // it('loads backgroundImage correctly', async () => {
LOWsrc/canvas/Canvas.spec.ts2321 // canvas._setupCurrentTransform(eventStub, rect, alreadySelected);
LOWsrc/canvas/Canvas.spec.ts2341 // target: canvas.upperCanvasEl,
LOWsrc/canvas/Canvas.spec.ts2361 // canvas._setupCurrentTransform(eventStub, rect);
LOWsrc/canvas/Canvas.spec.ts2381 // fabric.getFabricDocument().location.hostname +
LOWsrc/canvas/Canvas.spec.ts2401 // var callbackFired = false;
LOWsrc/canvas/Canvas-events.spec.ts1801
LOWsrc/canvas/Canvas-events.spec.ts1821 // expect(!!canvas.actionIsDisabled('mr', target, e), 'action is not disabled').toBe(false);
LOWsrc/canvas/Canvas-events.spec.ts1841 // target = new FabricObject();
LOWsrc/canvas/Canvas-events.spec.ts1861 // expect(!!canvas.actionIsDisabled('tr', target, e), 'tr action is disabled scaling locked').toBe(true);
LOWsrc/canvas/Canvas-events.spec.ts1881 // expect(!!canvas.actionIsDisabled('mt', target, e), 'mt action is not disabled lockSkewing').toBe(false);
LOWsrc/canvas/Canvas-events.spec.ts1901 // expect(!!canvas.actionIsDisabled('br', target, e), 'br action is not disabled lockSkewingY').toBe(false);
Fake / Example Data21 hits · 21 pts
SeverityFileLineSnippet
LOW…x/templates/vanilla/src/testcases/clipPathSelection.ts7 const sampleText = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sem massa, suscipit non elit vel, v
LOW…x/templates/vanilla/src/testcases/clipPathSelection.ts7 const sampleText = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sem massa, suscipit non elit vel, v
LOW…ndbox/templates/vanilla/src/testcases/textbox-itext.ts4 const textValue = 'Lorem ipsum dolor sit amet consecutrioeioreieo';
LOW…ndbox/templates/vanilla/src/testcases/textbox-itext.ts4 const textValue = 'Lorem ipsum dolor sit amet consecutrioeioreieo';
LOWe2e/tests/visual-output/rendering/testcases/text.ts260 'lorem ipsum\ndolor\nsit Amet2\nconsectgetur',
LOWe2e/tests/visual-output/rendering/testcases/text.ts276 'lorem ipsum\ndolor\nsit Amet2\nconsectgetur',
LOWe2e/tests/visual-output/rendering/testcases/text.ts732 'lorem ipsum\ndolor\nsit Amet2\nconsectgetur',
LOWe2e/tests/visual-output/rendering/testcases/text.ts768 'lorem ipsum\ndolor\nsit Amet2\nconsectgetur',
LOWe2e/tests/visual-output/rendering/testcases/text.ts806 'lorem ipsum\ndolor\nsit Amet2\nconsectgetur',
LOWe2e/tests/visual-output/rendering/testcases/text.ts893 'lorem ipsum dolor sit Amet consectgetur',
LOWe2e/tests/visual-output/rendering/testcases/text.ts893 'lorem ipsum dolor sit Amet consectgetur',
LOWe2e/tests/visual-output/rendering/testcases/text.ts926 const text = new TestTextboxClass('lorem ipsum dolor sit Amet sit Amet', {
LOWe2e/tests/visual-output/rendering/testcases/text.ts926 const text = new TestTextboxClass('lorem ipsum dolor sit Amet sit Amet', {
LOWe2e/tests/visual-output/rendering/testcases/text.ts969 'lorem ipsum dolor sit Amet consectgetur',
LOWe2e/tests/visual-output/rendering/testcases/text.ts969 'lorem ipsum dolor sit Amet consectgetur',
LOW…/visual-output/rendering/testcases/textWithClipPath.ts10 const sampleText = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sem massa, suscipit non elit vel,
LOW…/visual-output/rendering/testcases/textWithClipPath.ts10 const sampleText = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sem massa, suscipit non elit vel,
LOW…tests/visual-output/rendering/testcases/to-data-url.ts4const canvasWithObjects = String.raw`{"version":"7.0.0-beta1","objects":[{"type":"Rect","version":"7.0.0-beta1","left":4
LOW…tests/visual-output/rendering/testcases/to-data-url.ts4const canvasWithObjects = String.raw`{"version":"7.0.0-beta1","objects":[{"type":"Rect","version":"7.0.0-beta1","left":4
LOWe2e/tests/text/drag&drop/index.spec.ts330 text: 'lorem ipsum\ndolor\nsit Amet2\nconsectgetur',
LOWe2e/tests/text/drag&drop/index.ts197 const b = new fabric.Textbox('lorem ipsum\ndolor\nsit Amet2\nconsectgetur', {
Hyper-Verbose Identifiers21 hits · 21 pts
SeverityFileLineSnippet
LOW…ons/linear_gradient_controls/linearGradientControls.ts11export function createLinearGradientControls(
LOW…ons/linear_gradient_controls/linearGradientHandlers.ts37 function linearGradientColorPositionHandler(
LOW…ons/linear_gradient_controls/linearGradientHandlers.ts62 function linearGradientCoordPositionHandler(
LOW…ons/linear_gradient_controls/linearGradientHandlers.ts148 function renderCircleControlWithLine(
LOWextensions/cropping_controls/controlRendering.ts85export function renderRoundedSegmentControl(
LOWextensions/cropping_controls/croppingHandlers.ts216export function ghostScalePositionHandler(
LOW…e/tests/visual-output/rendering/testcases/free-draw.ts961async function renderFreedrawingWithDecimateToPoint(
LOW…tput/rendering/testcases/global-composite-operation.ts151function generateGlobalCompositeTests(): renderTestType[] {
LOWsrc/gradient/Gradient.spec.ts51function createRadialGradientWithInternalRadius() {
LOWsrc/gradient/Gradient.spec.ts69function createRadialGradientSwapped() {
LOWsrc/util/path/typechecks.ts103export function isAbsCubicCurveShortcutCmd(
LOWsrc/util/path/typechecks.ts108export function isRelCubicCurveShortcutCmd(
LOWsrc/util/path/typechecks.ts125export function isAbsQuadraticCurveShortcutCmd(
LOWsrc/util/path/typechecks.ts130export function isRelQuadraticCurveShortcutCmd(
LOWsrc/shapes/Object/StackedObject.spec.ts35function prepareObjectsForTreeTesting() {
LOWsrc/parser/recursivelyParseGradientsXlink.ts16export function recursivelyParseGradientsXlink(
LOWsrc/parser/getGlobalStylesForElement.ts8export function getGlobalStylesForElement(
LOWsrc/canvas/Canvas.spec.ts674 function assertObjectsInOrderOnCanvas(
LOWsrc/canvas/Canvas.spec.ts694 function assertNestedObjectsInOrder(
LOWsrc/canvas/Canvas-events.spec.ts1063 function setSubTargetCheckRecursive(obj: any) {
LOWsrc/canvas/Canvas-events.spec.ts1131 function setSubTargetCheckRecursive(obj: any) {
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMsrc/canvas/StaticCanvas.ts508 // but the code is robust enough to mostly work with flipping