{"record":{"id":"1163a8fdb6ad313b","repo":"greensock/GSAP","slug":"please-gsap-registerplugin-customease-customwiggl","errorCode":null,"errorMessage":"Please gsap.registerPlugin(CustomEase, CustomWiggle)","messagePattern":"Please gsap\\.registerPlugin\\(CustomEase, CustomWiggle\\)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/CustomWiggle.js","lineNumber":31,"sourceCode":"\t_eases = {\n\t\teaseOut: \"M0,1,C0.7,1,0.6,0,1,0\",\n\t\teaseInOut: \"M0,0,C0.1,0,0.24,1,0.444,1,0.644,1,0.6,0,1,0\",\n\t\tanticipate: \"M0,0,C0,0.222,0.024,0.386,0,0.4,0.18,0.455,0.65,0.646,0.7,0.67,0.9,0.76,1,0.846,1,1\",\n\t\tuniform: \"M0,0,C0,0.95,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0\"\n\t},\n\t_linearEase = p => p,\n\t_initCore = required => {\n\t\tif (!_coreInitted) {\n\t\t\tgsap = _getGSAP();\n\t\t\tcreateCustomEase = gsap && gsap.parseEase(\"_CE\");\n\t\t\tif (createCustomEase) {\n\t\t\t\tfor (let p in _eases) {\n\t\t\t\t\t_eases[p] = createCustomEase(\"\", _eases[p]);\n\t\t\t\t}\n\t\t\t\t_coreInitted = 1;\n\t\t\t\t_create(\"wiggle\").config = vars => typeof(vars) === \"object\" ? _create(\"\", vars) : _create(\"wiggle(\" + vars + \")\", {wiggles:+vars});\n\t\t\t} else {\n\t\t\t\trequired && console.warn(\"Please gsap.registerPlugin(CustomEase, CustomWiggle)\");\n\t\t\t}\n\t\t}\n\t},\n\t_parseEase = (ease, invertNonCustomEases) => {\n\t\tif (typeof(ease) !== \"function\") {\n\t\t\tease = gsap.parseEase(ease) || createCustomEase(\"\", ease);\n\t\t}\n\t\treturn (ease.custom || !invertNonCustomEases) ? ease : p => 1 - ease(p);\n\t},\n\t_bonusValidated = 1, //<name>CustomWiggle</name>\n\t_create = (id, vars) => {\n\t\tif (!_coreInitted) {\n\t\t\t_initCore(1);\n\t\t}\n\t\tvars = vars || {};\n\t\tlet wiggles = (vars.wiggles || 10) | 0,\n\t\t\tinc = 1 / wiggles,\n\t\t\tx = inc / 2,","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/greensock/GSAP/blob/13e2b790546426a1a2e0e9b409f3f8dc6d6611f2/src/CustomWiggle.js#L13-L49","documentation":"CustomWiggle depends on CustomEase: _initCore checks for gsap.parseEase(\"_CE\") (registered by CustomEase) and, if absent, warns that both plugins must be registered when required. Without CustomEase the wiggle ease data-structures cannot be built.","triggerScenarios":"Calling CustomWiggle.create() or using ease:\"wiggle(...)\" before gsap.registerPlugin(CustomEase, CustomWiggle); CustomEase not imported; gsap core missing.","commonSituations":"Registering only CustomWiggle; tree-shaking dropped CustomEase; different gsap copies between bundles so parseEase(\"_CE\") is never defined.","solutions":["Call gsap.registerPlugin(CustomEase, CustomWiggle) before any wiggle usage","Import both plugins from the same gsap package","Verify CustomEase registration ran (gsap.parseEase(\"_CE\") is a function)","If the warning appears despite registration, ensure _initCore ran after gsap was on window"],"exampleFix":"// before\ngsap.registerPlugin(CustomWiggle);\ngsap.to('.el', {ease: 'wiggle(5)'});\n// after\ngsap.registerPlugin(CustomEase, CustomWiggle);\ngsap.to('.el', {ease: 'wiggle(5)'});","handlingStrategy":"validation","validationCode":"if (!gsap || typeof gsap.parseEase('_CE') !== 'function') {\n  gsap.registerPlugin(CustomEase, CustomWiggle);\n}","typeGuard":"function customWiggleReady() {\n  return typeof gsap.parseEase === 'function' && typeof gsap.parseEase('_CE') === 'function';\n}","tryCatchPattern":null,"preventionTips":["Register CustomEase alongside CustomWiggle","Verify gsap.parseEase('_CE') exists before wiggle eases","Import from 'gsap/all' consistently","Avoid duplicate gsap instances"],"tags":["gsap","plugin-registration","customease","customwiggle"],"backgroundTag":"gsap-plugin-not-registered","analyzedSha":"13e2b790546426a1a2e0e9b409f3f8dc6d6611f2","analyzedAt":"2026-08-29T08:34:05.027Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}