Skip to content

feat(core): GSAP keyframe parsing, mutations, and API routes [1/6]#1167

Open
miguel-heygen wants to merge 1 commit into
mainfrom
feat/keyframes-1-core-parser
Open

feat(core): GSAP keyframe parsing, mutations, and API routes [1/6]#1167
miguel-heygen wants to merge 1 commit into
mainfrom
feat/keyframes-1-core-parser

Conversation

@miguel-heygen
Copy link
Copy Markdown
Collaborator

Summary

Parse native GSAP keyframes in 3 formats (percentage, object-array, simple-array). 5 mutation functions (add/remove/update keyframe, convert-to-keyframes, remove-all). Expand SUPPORTED_PROPS to 21. Studio API routes for all mutation types. 92 test cases.

Part 1 of 6 — core parser foundation. No UI changes.

Test plan

  • bun run --cwd packages/core test — all parser tests pass
  • Keyframe parsing: percentage, object-array, simple-array formats
  • Mutations: add, remove, update, convert, remove-all

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 3, 2026

Fallow audit report

Found 46 findings.

Duplication (33)
Severity Rule Location Description
minor fallow/code-duplication packages/core/src/parsers/gsapParser.stress.test.ts:296 Code clone group 1 (10 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.stress.test.ts:313 Code clone group 2 (13 lines, 5 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.stress.test.ts:499 Code clone group 2 (13 lines, 5 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:281 Code clone group 1 (10 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:296 Code clone group 2 (13 lines, 5 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:312 Code clone group 2 (13 lines, 5 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:346 Code clone group 2 (13 lines, 5 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1096 Code clone group 3 (14 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1139 Code clone group 3 (14 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1197 Code clone group 4 (16 lines, 3 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1209 Code clone group 5 (10 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1210 Code clone group 6 (6 lines, 3 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1216 Code clone group 7 (6 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1224 Code clone group 4 (16 lines, 3 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1239 Code clone group 5 (10 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1240 Code clone group 6 (6 lines, 3 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1248 Code clone group 7 (6 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1257 Code clone group 4 (16 lines, 3 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1271 Code clone group 6 (6 lines, 3 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1451 Code clone group 8 (8 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.test.ts:1470 Code clone group 8 (8 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.ts:562 Code clone group 9 (7 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.ts:660 Code clone group 9 (7 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.ts:919 Code clone group 10 (8 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.ts:1170 Code clone group 11 (15 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.ts:1251 Code clone group 11 (15 lines, 2 instances)
minor fallow/code-duplication packages/core/src/parsers/gsapParser.ts:1314 Code clone group 10 (8 lines, 2 instances)
minor fallow/code-duplication packages/core/src/studio-api/routes/files.ts:398 Code clone group 12 (5 lines, 2 instances)
minor fallow/code-duplication packages/core/src/studio-api/routes/files.ts:654 Code clone group 13 (5 lines, 2 instances)
minor fallow/code-duplication packages/core/src/studio-api/routes/files.ts:662 Code clone group 14 (5 lines, 2 instances)
minor fallow/code-duplication packages/core/src/studio-api/routes/files.ts:694 Code clone group 13 (5 lines, 2 instances)
minor fallow/code-duplication packages/core/src/studio-api/routes/files.ts:702 Code clone group 14 (5 lines, 2 instances)
minor fallow/code-duplication packages/core/src/studio-api/routes/render.ts:48 Code clone group 12 (5 lines, 2 instances)
Health (13)
Severity Rule Location Description
critical fallow/high-crap-score packages/core/src/parsers/gsapParser.ts:71 'resolveNode' has CRAP score 315.9 (threshold: 30.0, cyclomatic 36)
minor fallow/high-crap-score packages/core/src/parsers/gsapParser.ts:145 'selectorFromQueryCall' has CRAP score 49.5 (threshold: 30.0, cyclomatic 13)
minor fallow/high-crap-score packages/core/src/parsers/gsapParser.ts:223 'visitCallExpression' has CRAP score 43.1 (threshold: 30.0, cyclomatic 12)
minor fallow/high-crap-score packages/core/src/parsers/gsapParser.ts:282 'resolveTargetSelector' has CRAP score 43.1 (threshold: 30.0, cyclomatic 12)
minor fallow/high-crap-score packages/core/src/parsers/gsapParser.ts:311 'objectExpressionToRecord' has CRAP score 43.1 (threshold: 30.0, cyclomatic 12)
minor fallow/high-crap-score packages/core/src/parsers/gsapParser.ts:402 'visitCallExpression' has CRAP score 31.6 (threshold: 30.0, cyclomatic 10)
minor fallow/high-crap-score packages/core/src/parsers/gsapParser.ts:959 'buildTweenStatementCode' has CRAP score 31.6 (threshold: 30.0, cyclomatic 10)
major fallow/high-crap-score packages/core/src/parsers/gsapParser.ts:1285 'resolveConversionProps' has CRAP score 43.1 (threshold: 30.0, cyclomatic 12)
minor fallow/high-crap-score packages/core/src/parsers/gsapSerialize.ts:66 'lines' has CRAP score 43.1 (threshold: 30.0, cyclomatic 12)
minor fallow/high-crap-score packages/core/src/parsers/gsapSerialize.ts:222 '<arrow>' has CRAP score 37.1 (threshold: 30.0, cyclomatic 11)
minor fallow/high-crap-score packages/core/src/parsers/gsapSerialize.ts:274 '<arrow>' has CRAP score 43.1 (threshold: 30.0, cyclomatic 12)
critical fallow/high-crap-score packages/core/src/studio-api/routes/files.ts:434 '<arrow>' has CRAP score 160.0 (threshold: 30.0, cyclomatic 25)
critical fallow/high-crap-score packages/core/src/studio-api/routes/files.ts:605 '<arrow>' has CRAP score 238.6 (threshold: 30.0, cyclomatic 31)

Generated by fallow.

@miguel-heygen miguel-heygen force-pushed the feat/keyframes-1-core-parser branch from c1cc15d to 0dae94d Compare June 3, 2026 05:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant