@edflex-tech/keycloakify
Version:
Keycloak theme generator for Reacts app
167 lines • 7.89 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMsg = exports.changeLocale = exports.getTagLabel = exports.getCurrentKcLanguageTag = exports.kcLanguageTags = exports.kcMessages = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
require("minimal-polyfills/Object.fromEntries");
//NOTE for later: https://github.com/remarkjs/react-markdown/blob/236182ecf30bd89c1e5a7652acaf8d0bf81e6170/src/renderers.js#L7-L35
var react_markdown_1 = __importDefault(require("react-markdown"));
var memoizee_1 = __importDefault(require("memoizee"));
var login_1 = require("./generated_kcMessages/18.0.1/login");
var assert_1 = require("tsafe/assert");
exports.kcMessages = __assign(__assign({}, login_1.kcMessages), { "en": __assign(__assign({}, login_1.kcMessages["en"]), { "termsText": "⏳", "shouldBeEqual": "{0} should be equal to {1}", "shouldBeDifferent": "{0} should be different to {1}", "shouldMatchPattern": "Pattern should match: `/{0}/`", "mustBeAnInteger": "Must be an integer", "notAValidOption": "Not a valid option" }), "fr": __assign(__assign({}, login_1.kcMessages["fr"]), {
/* spell-checker: disable */
"shouldBeEqual": "{0} doit être égal à {1}", "shouldBeDifferent": "{0} doit être différent de {1}", "shouldMatchPattern": "Dois respecter le schéma: `/{0}/`", "mustBeAnInteger": "Doit être un nombre entier", "notAValidOption": "N'est pas une option valide", "logoutConfirmTitle": "Déconnexion", "logoutConfirmHeader": "Êtes-vous sûr(e) de vouloir vous déconnecter ?", "doLogout": "Se déconnecter" }) });
exports.kcLanguageTags = [
"en",
"fr",
"ca",
"cs",
"da",
"de",
"es",
"hu",
"it",
"ja",
"lt",
"nl",
"no",
"pl",
"pt-BR",
"ru",
"sk",
"sv",
"tr",
"zh-CN",
"fi",
"lv",
];
(0, assert_1.assert)();
function getCurrentKcLanguageTag(kcContext) {
var _a, _b;
return (_b = (_a = kcContext.locale) === null || _a === void 0 ? void 0 : _a.currentLanguageTag) !== null && _b !== void 0 ? _b : "en";
}
exports.getCurrentKcLanguageTag = getCurrentKcLanguageTag;
function getTagLabel(params) {
var kcContext = params.kcContext, kcLanguageTag = params.kcLanguageTag;
var locale = kcContext.locale;
(0, assert_1.assert)(locale !== undefined, "Internationalization not enabled");
var targetSupportedLocale = locale.supported.find(function (_a) {
var languageTag = _a.languageTag;
return languageTag === kcLanguageTag;
});
(0, assert_1.assert)(targetSupportedLocale !== undefined, "".concat(kcLanguageTag, " need to be enabled in Keycloak admin"));
return targetSupportedLocale.label;
}
exports.getTagLabel = getTagLabel;
function changeLocale(params) {
var kcContext = params.kcContext, kcLanguageTag = params.kcLanguageTag;
var locale = kcContext.locale;
(0, assert_1.assert)(locale !== undefined, "Internationalization not enabled");
var targetSupportedLocale = locale.supported.find(function (_a) {
var languageTag = _a.languageTag;
return languageTag === kcLanguageTag;
});
(0, assert_1.assert)(targetSupportedLocale !== undefined, "".concat(kcLanguageTag, " need to be enabled in Keycloak admin"));
window.location.href = targetSupportedLocale.url;
(0, assert_1.assert)(false, "never");
}
exports.changeLocale = changeLocale;
function resolveMsg(props) {
var _a;
var key = props.key, args = props.args, kcLanguageTag = props.kcLanguageTag, doRenderMarkdown = props.doRenderMarkdown;
var str = (_a = exports.kcMessages[kcLanguageTag][key]) !== null && _a !== void 0 ? _a : exports.kcMessages["en"][key];
if (str === undefined) {
return undefined;
}
str = (function () {
var _a;
var startIndex = (_a = str
.match(/{[0-9]+}/g)) === null || _a === void 0 ? void 0 : _a.map(function (g) { return g.match(/{([0-9]+)}/)[1]; }).map(function (indexStr) { return parseInt(indexStr); }).sort(function (a, b) { return a - b; })[0];
if (startIndex === undefined) {
return str;
}
args.forEach(function (arg, i) {
if (arg === undefined) {
return;
}
str = str.replace(new RegExp("\\{".concat(i + startIndex, "\\}"), "g"), arg);
});
return str;
})();
return (doRenderMarkdown ? ((0, jsx_runtime_1.jsx)(react_markdown_1.default, __assign({ allowDangerousHtml: true, renderers: key === "termsText" ? undefined : { "paragraph": "span" } }, { children: str }))) : (str));
}
function resolveMsgAdvanced(props) {
var key = props.key, args = props.args, kcLanguageTag = props.kcLanguageTag, doRenderMarkdown = props.doRenderMarkdown;
var match = key.match(/^\$\{([^{]+)\}$/);
var keyUnwrappedFromCurlyBraces = match === null ? key : match[1];
var out = resolveMsg({
"key": keyUnwrappedFromCurlyBraces,
args: args,
kcLanguageTag: kcLanguageTag,
doRenderMarkdown: doRenderMarkdown,
});
return (out !== undefined ? out : doRenderMarkdown ? (0, jsx_runtime_1.jsx)("span", { children: keyUnwrappedFromCurlyBraces }) : keyUnwrappedFromCurlyBraces);
}
/**
* When the language is switched the page is reloaded, this may appear
* as a bug as you might notice that the language successfully switch before
* reload.
* However we need to tell Keycloak that the user have changed the language
* during login so we can retrieve the "local" field of the JWT encoded accessToken.
* https://user-images.githubusercontent.com/6702424/138096682-351bb61f-f24e-4caf-91b7-cca8cfa2cb58.mov
*
* advancedMsg("${access-denied}") === advancedMsg("access-denied") === msg("access-denied")
* advancedMsg("${not-a-message-key}") === advancedMsg(not-a-message-key") === "not-a-message-key"
*
*
* NOTE: This function is memoized, it always returns the same object for a given kcContext)
*
*/
exports.getMsg = (0, memoizee_1.default)(function (kcContext) {
var kcLanguageTag = getCurrentKcLanguageTag(kcContext);
return {
"msgStr": function (key) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return resolveMsg({ key: key, args: args, kcLanguageTag: kcLanguageTag, "doRenderMarkdown": false });
},
"msg": function (key) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return resolveMsg({ key: key, args: args, kcLanguageTag: kcLanguageTag, "doRenderMarkdown": true });
},
"advancedMsg": function (key) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return resolveMsgAdvanced({ key: key, args: args, kcLanguageTag: kcLanguageTag, "doRenderMarkdown": true });
},
"advancedMsgStr": function (key) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return resolveMsgAdvanced({ key: key, args: args, kcLanguageTag: kcLanguageTag, "doRenderMarkdown": false });
},
};
});
//# sourceMappingURL=index.js.map