diff --git a/src/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.ts b/src/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.ts index 4ea29ffb..512dcb3c 100644 --- a/src/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.ts +++ b/src/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.ts @@ -16,18 +16,25 @@ export function replaceImportsFromStaticInJsCode(params: { jsCode: string }): { const { jsCode } = params; const getReplaceArgs = (language: "js" | "css"): Parameters => [ - new RegExp(`([a-zA-Z_]+)\\.([a-zA-Z]+)=function\\(([a-zA-Z]+)\\){return"static\\/${language}\\/"`, "g"), - (...[, n, u, e]) => ` - ${n}[(function(){ - var pd= Object.getOwnPropertyDescriptor(${n}, "p"); + new RegExp(`([a-zA-Z_]+)\\.([a-zA-Z]+)=(function\\(([a-z]+)\\){return|([a-z]+)=>)"static\\/${language}\\/"`, "g"), + (...[, n, u, matchedFunction, eForFunction]) => { + const isArrowFunction = matchedFunction.includes("=>"); + const e = isArrowFunction ? matchedFunction.replace("=>", "").trim() : eForFunction; + + return ` + ${n}[(function(){ + var pd = Object.getOwnPropertyDescriptor(${n}, "p"); if( pd === undefined || pd.configurable ){ Object.defineProperty(${n}, "p", { get: function() { return window.${ftlValuesGlobalName}.url.resourcesPath; }, - set: function (){} + set: function() {} }); } - return "${u}"; - })()] = function(${e}) { return "${true ? "/build/" : ""}static/${language}/"` + return "${u}"; + })()] = ${isArrowFunction ? `${e} =>` : `function(${e}) { return `} "/build/static/${language}/"` + .replace(/\s+/g, " ") + .trim(); + } ]; const fixedJsCode = jsCode diff --git a/test/bin/replaceImportFromStatic.spec.ts b/test/bin/replaceImportFromStatic.spec.ts index 269ca255..c185a99e 100644 --- a/test/bin/replaceImportFromStatic.spec.ts +++ b/test/bin/replaceImportFromStatic.spec.ts @@ -32,6 +32,10 @@ describe("bin/js-transforms", () => { 908:"67c9ed2c" }[e]+".chunk.css" } + + n.u=e=>"static/js/"+e+"."+{69:"4f205f87",128:"49264537",453:"b2fed72e",482:"f0106901"}[e]+".chunk.js" + + t.miniCssF=e=>"static/css/"+e+"."+{164:"dcfd7749",908:"67c9ed2c"}[e]+".chunk.css" `; it("transforms standalone code properly", () => { const { fixedJsCode } = replaceImportsFromStaticInJsCode({ @@ -52,11 +56,11 @@ describe("bin/js-transforms", () => { } __webpack_require__[(function (){ - var pd= Object.getOwnPropertyDescriptor(__webpack_require__, "p"); + var pd = Object.getOwnPropertyDescriptor(__webpack_require__, "p"); if( pd === undefined || pd.configurable ){ Object.defineProperty(__webpack_require__, "p", { get: function() { return window.kcContext.url.resourcesPath; }, - set: function (){} + set: function() {} }); } return "u"; @@ -69,11 +73,11 @@ describe("bin/js-transforms", () => { } t[(function (){ - var pd= Object.getOwnPropertyDescriptor(t, "p"); + var pd = Object.getOwnPropertyDescriptor(t, "p"); if( pd === undefined || pd.configurable ){ Object.defineProperty(t, "p", { get: function() { return window.kcContext.url.resourcesPath; }, - set: function (){} + set: function() {} }); } return "miniCssF"; @@ -83,7 +87,28 @@ describe("bin/js-transforms", () => { 908:"67c9ed2c" } [e] + ".chunk.css" } - + + n[(function(){ + var pd = Object.getOwnPropertyDescriptor(n, "p"); + if( pd === undefined || pd.configurable ){ + Object.defineProperty(n, "p", { + get: function() { return window.kcContext.url.resourcesPath; }, + set: function() {} + }); + } + return "u"; + })()] = e => "/build/static/js/"+e+"."+{69:"4f205f87",128:"49264537",453:"b2fed72e",482:"f0106901"}[e]+".chunk.js" + + t[(function(){ + var pd = Object.getOwnPropertyDescriptor(t, "p"); + if( pd === undefined || pd.configurable ){ + Object.defineProperty(t, "p", { + get: function() { return window.kcContext.url.resourcesPath; }, + set: function() {} + }); + } + return "miniCssF"; + })()] = e => "/build/static/css/"+e+"."+{164:"dcfd7749",908:"67c9ed2c"}[e]+".chunk.css" `; expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);