keycloakify 10.1.4 → 11.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/account/KcContext/kcContextMocks.js +18 -6
- package/account/KcContext/kcContextMocks.js.map +1 -1
- package/account/Template.js +8 -26
- package/account/Template.js.map +1 -1
- package/account/Template.useInitialize.d.ts +12 -0
- package/account/Template.useInitialize.js +20 -0
- package/account/Template.useInitialize.js.map +1 -0
- package/account/i18n/index.d.ts +5 -5
- package/account/i18n/index.js +1 -1
- package/account/i18n/index.js.map +1 -1
- package/account/i18n/messages_defaultSet/types.d.ts +3 -0
- package/account/i18n/messages_defaultSet/types.js +26 -0
- package/account/i18n/messages_defaultSet/types.js.map +1 -0
- package/account/i18n/noJsx/GenericI18n_noJsx.d.ts +63 -0
- package/account/i18n/noJsx/GenericI18n_noJsx.js +2 -0
- package/account/i18n/noJsx/GenericI18n_noJsx.js.map +1 -0
- package/account/i18n/noJsx/getI18n.d.ts +41 -0
- package/account/i18n/noJsx/getI18n.js +207 -0
- package/account/i18n/noJsx/getI18n.js.map +1 -0
- package/account/i18n/noJsx/i18nBuilder.d.ts +18 -0
- package/account/i18n/noJsx/i18nBuilder.js +27 -0
- package/account/i18n/noJsx/i18nBuilder.js.map +1 -0
- package/account/i18n/noJsx/index.d.ts +3 -0
- package/account/i18n/noJsx/index.js +2 -0
- package/account/i18n/noJsx/index.js.map +1 -0
- package/account/i18n/withJsx/GenericI18n.d.ts +72 -0
- package/account/i18n/withJsx/GenericI18n.js +5 -0
- package/account/i18n/withJsx/GenericI18n.js.map +1 -0
- package/account/i18n/withJsx/i18nBuilder.d.ts +18 -0
- package/account/i18n/withJsx/i18nBuilder.js +27 -0
- package/account/i18n/withJsx/i18nBuilder.js.map +1 -0
- package/account/i18n/withJsx/index.d.ts +3 -0
- package/account/i18n/withJsx/index.js +2 -0
- package/account/i18n/withJsx/index.js.map +1 -0
- package/account/i18n/withJsx/useI18n.d.ts +27 -0
- package/account/i18n/{useI18n.js → withJsx/useI18n.js} +6 -4
- package/account/i18n/withJsx/useI18n.js.map +1 -0
- package/account/index.d.ts +1 -1
- package/account/index.js +1 -1
- package/account/index.js.map +1 -1
- package/account/pages/Totp.js +3 -2
- package/account/pages/Totp.js.map +1 -1
- package/bin/246.index.js +191 -191
- package/bin/499.index.js +288 -71
- package/bin/main.js +1 -1
- package/lib/kcSanitize/HtmlPolicyBuilder.d.ts +28 -0
- package/lib/kcSanitize/HtmlPolicyBuilder.js +209 -0
- package/lib/kcSanitize/HtmlPolicyBuilder.js.map +1 -0
- package/lib/kcSanitize/KcSanitizer.d.ts +12 -0
- package/lib/kcSanitize/KcSanitizer.js +46 -0
- package/lib/kcSanitize/KcSanitizer.js.map +1 -0
- package/lib/kcSanitize/KcSanitizerPolicy.d.ts +24 -0
- package/lib/kcSanitize/KcSanitizerPolicy.js +149 -0
- package/lib/kcSanitize/KcSanitizerPolicy.js.map +1 -0
- package/lib/kcSanitize/index.d.ts +1 -0
- package/lib/kcSanitize/index.js +5 -0
- package/lib/kcSanitize/index.js.map +1 -0
- package/login/KcContext/kcContextMocks.js +24 -6
- package/login/KcContext/kcContextMocks.js.map +1 -1
- package/login/Template.js +7 -7
- package/login/Template.js.map +1 -1
- package/login/{Template.useStylesAndScripts.d.ts → Template.useInitialize.d.ts} +1 -4
- package/login/{Template.useStylesAndScripts.js → Template.useInitialize.js} +4 -15
- package/login/Template.useInitialize.js.map +1 -0
- package/login/i18n/index.d.ts +5 -5
- package/login/i18n/index.js +1 -1
- package/login/i18n/index.js.map +1 -1
- package/login/i18n/messages_defaultSet/types.d.ts +3 -0
- package/login/i18n/messages_defaultSet/types.js +33 -0
- package/login/i18n/messages_defaultSet/types.js.map +1 -0
- package/login/i18n/noJsx/GenericI18n_noJsx.d.ts +63 -0
- package/login/i18n/noJsx/GenericI18n_noJsx.js +2 -0
- package/login/i18n/noJsx/GenericI18n_noJsx.js.map +1 -0
- package/login/i18n/noJsx/getI18n.d.ts +41 -0
- package/login/i18n/noJsx/getI18n.js +207 -0
- package/login/i18n/noJsx/getI18n.js.map +1 -0
- package/login/i18n/noJsx/i18nBuilder.d.ts +18 -0
- package/login/i18n/noJsx/i18nBuilder.js +27 -0
- package/login/i18n/noJsx/i18nBuilder.js.map +1 -0
- package/login/i18n/noJsx/index.d.ts +3 -0
- package/login/i18n/noJsx/index.js +2 -0
- package/login/i18n/noJsx/index.js.map +1 -0
- package/login/i18n/withJsx/GenericI18n.d.ts +72 -0
- package/login/i18n/withJsx/GenericI18n.js +5 -0
- package/login/i18n/withJsx/GenericI18n.js.map +1 -0
- package/login/i18n/withJsx/i18nBuilder.d.ts +18 -0
- package/login/i18n/withJsx/i18nBuilder.js +27 -0
- package/login/i18n/withJsx/i18nBuilder.js.map +1 -0
- package/login/i18n/withJsx/index.d.ts +3 -0
- package/login/i18n/withJsx/index.js +2 -0
- package/login/i18n/withJsx/index.js.map +1 -0
- package/login/i18n/withJsx/useI18n.d.ts +27 -0
- package/login/i18n/{useI18n.js → withJsx/useI18n.js} +6 -4
- package/login/i18n/withJsx/useI18n.js.map +1 -0
- package/login/index.d.ts +1 -1
- package/login/index.js +1 -1
- package/login/index.js.map +1 -1
- package/login/lib/useUserProfileForm.d.ts +1 -1
- package/login/lib/useUserProfileForm.js +2 -1
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Error.js +2 -1
- package/login/pages/Error.js.map +1 -1
- package/login/pages/Info.js +4 -3
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.js +4 -3
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.js +3 -2
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginOtp.js +2 -1
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPassword.js +2 -1
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js +2 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetPassword.js +2 -1
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.js +3 -2
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/Register.js +2 -1
- package/login/pages/Register.js.map +1 -1
- package/package.json +110 -31
- package/src/account/KcContext/kcContextMocks.ts +49 -29
- package/src/account/Template.tsx +11 -32
- package/src/account/Template.useInitialize.ts +35 -0
- package/src/account/i18n/index.ts +5 -5
- package/src/account/i18n/messages_defaultSet/types.ts +30 -0
- package/src/account/i18n/noJsx/GenericI18n_noJsx.ts +64 -0
- package/src/account/i18n/noJsx/getI18n.tsx +341 -0
- package/src/account/i18n/noJsx/i18nBuilder.ts +117 -0
- package/src/account/i18n/noJsx/index.ts +3 -0
- package/src/account/i18n/withJsx/GenericI18n.tsx +81 -0
- package/src/account/i18n/withJsx/i18nBuilder.ts +117 -0
- package/src/account/i18n/withJsx/index.ts +3 -0
- package/src/{login/i18n → account/i18n/withJsx}/useI18n.tsx +43 -11
- package/src/account/index.ts +1 -1
- package/src/account/pages/Totp.tsx +3 -2
- package/src/bin/initialize-account-theme/src/multi-page/i18n.ts +10 -3
- package/src/bin/keycloakify/buildJars/buildJar.ts +44 -34
- package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +11 -9
- package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +371 -121
- package/src/bin/keycloakify/generateResources/generateResources.ts +8 -6
- package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +61 -29
- package/src/bin/keycloakify/generateResources/generateResourcesForThemeVariant.ts +15 -9
- package/src/lib/kcSanitize/HtmlPolicyBuilder.ts +252 -0
- package/src/lib/kcSanitize/KcSanitizer.ts +60 -0
- package/src/lib/kcSanitize/KcSanitizerPolicy.ts +294 -0
- package/src/lib/kcSanitize/index.ts +5 -0
- package/src/login/KcContext/kcContextMocks.ts +54 -29
- package/src/login/Template.tsx +11 -17
- package/src/login/{Template.useStylesAndScripts.ts → Template.useInitialize.ts} +4 -21
- package/src/login/i18n/index.ts +5 -5
- package/src/login/i18n/messages_defaultSet/types.ts +37 -0
- package/src/login/i18n/noJsx/GenericI18n_noJsx.ts +64 -0
- package/src/login/i18n/noJsx/getI18n.tsx +341 -0
- package/src/login/i18n/noJsx/i18nBuilder.ts +117 -0
- package/src/login/i18n/noJsx/index.ts +3 -0
- package/src/login/i18n/withJsx/GenericI18n.tsx +81 -0
- package/src/login/i18n/withJsx/i18nBuilder.ts +117 -0
- package/src/login/i18n/withJsx/index.ts +3 -0
- package/src/{account/i18n → login/i18n/withJsx}/useI18n.tsx +43 -11
- package/src/login/index.ts +1 -1
- package/src/login/lib/useUserProfileForm.tsx +3 -2
- package/src/login/pages/Error.tsx +2 -1
- package/src/login/pages/Info.tsx +13 -10
- package/src/login/pages/Login.tsx +4 -3
- package/src/login/pages/LoginConfigTotp.tsx +3 -2
- package/src/login/pages/LoginOtp.tsx +2 -1
- package/src/login/pages/LoginPassword.tsx +2 -1
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +2 -1
- package/src/login/pages/LoginResetPassword.tsx +2 -1
- package/src/login/pages/LoginUpdatePassword.tsx +3 -2
- package/src/login/pages/Register.tsx +2 -1
- package/src/tools/vendor/dompurify.ts +3 -0
- package/stories/intro/intro.stories.tsx +0 -1
- package/tools/vendor/dompurify.d.ts +2 -0
- package/tools/vendor/dompurify.js +2 -0
- package/account/i18n/GenericI18n.d.ts +0 -6
- package/account/i18n/GenericI18n.js +0 -2
- package/account/i18n/GenericI18n.js.map +0 -1
- package/account/i18n/i18n.d.ts +0 -87
- package/account/i18n/i18n.js +0 -111
- package/account/i18n/i18n.js.map +0 -1
- package/account/i18n/useI18n.d.ts +0 -14
- package/account/i18n/useI18n.js.map +0 -1
- package/login/Template.useStylesAndScripts.js.map +0 -1
- package/login/i18n/GenericI18n.d.ts +0 -6
- package/login/i18n/GenericI18n.js +0 -2
- package/login/i18n/GenericI18n.js.map +0 -1
- package/login/i18n/i18n.d.ts +0 -87
- package/login/i18n/i18n.js +0 -113
- package/login/i18n/i18n.js.map +0 -1
- package/login/i18n/useI18n.d.ts +0 -14
- package/login/i18n/useI18n.js.map +0 -1
- package/src/account/i18n/GenericI18n.tsx +0 -6
- package/src/account/i18n/i18n.tsx +0 -250
- package/src/login/i18n/GenericI18n.tsx +0 -6
- package/src/login/i18n/i18n.tsx +0 -252
package/bin/499.index.js
CHANGED
@@ -19,12 +19,13 @@ exports.modules = {
|
|
19
19
|
/* harmony import */ var _babel_generator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(92332);
|
20
20
|
/* harmony import */ var _babel_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7912);
|
21
21
|
/* harmony import */ var _babel_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_types__WEBPACK_IMPORTED_MODULE_7__);
|
22
|
-
/* harmony import */ var
|
22
|
+
/* harmony import */ var _tools_escapeStringForPropertiesFile__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(27190);
|
23
23
|
/* harmony import */ var _tools_getThisCodebaseRootDirPath__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(58822);
|
24
24
|
/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(57147);
|
25
25
|
/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_9__);
|
26
26
|
/* harmony import */ var tsafe_assert__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(88078);
|
27
27
|
/* harmony import */ var tsafe_assert__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(tsafe_assert__WEBPACK_IMPORTED_MODULE_10__);
|
28
|
+
/* harmony import */ var _tools_getAbsoluteAndInOsFormatPath__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(84794);
|
28
29
|
|
29
30
|
|
30
31
|
|
@@ -37,19 +38,19 @@ exports.modules = {
|
|
37
38
|
|
38
39
|
|
39
40
|
|
41
|
+
|
42
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_10__.assert)();
|
40
43
|
function generateMessageProperties(params) {
|
41
|
-
const {
|
44
|
+
const { buildContext, themeType } = params;
|
42
45
|
const baseMessagesDirPath = (0,path__WEBPACK_IMPORTED_MODULE_2__.join)((0,_tools_getThisCodebaseRootDirPath__WEBPACK_IMPORTED_MODULE_8__/* .getThisCodebaseRootDirPath */ .e)(), "src", themeType, "i18n", "messages_defaultSet");
|
43
|
-
const
|
44
|
-
.filter(
|
46
|
+
const messages_defaultSet_by_languageTag_defaultSet = Object.fromEntries(fs__WEBPACK_IMPORTED_MODULE_9__.readdirSync(baseMessagesDirPath)
|
47
|
+
.filter(basename => basename !== "index.ts" && basename !== "types.ts")
|
45
48
|
.map(basename => ({
|
46
49
|
languageTag: basename.replace(/\.ts$/, ""),
|
47
50
|
filePath: (0,path__WEBPACK_IMPORTED_MODULE_2__.join)(baseMessagesDirPath, basename)
|
48
51
|
}))
|
49
52
|
.map(({ languageTag, filePath }) => {
|
50
|
-
const lines = fs__WEBPACK_IMPORTED_MODULE_9__.readFileSync(filePath)
|
51
|
-
.toString("utf8")
|
52
|
-
.split(/\r?\n/);
|
53
|
+
const lines = fs__WEBPACK_IMPORTED_MODULE_9__.readFileSync(filePath).toString("utf8").split(/\r?\n/);
|
53
54
|
let messagesJson = "{";
|
54
55
|
let isInDeclaration = false;
|
55
56
|
for (const line of lines) {
|
@@ -70,7 +71,7 @@ function generateMessageProperties(params) {
|
|
70
71
|
}));
|
71
72
|
const { i18nTsFilePath } = (() => {
|
72
73
|
let files = (0,_tools_crawl__WEBPACK_IMPORTED_MODULE_1__/* .crawl */ .J)({
|
73
|
-
dirPath: (0,path__WEBPACK_IMPORTED_MODULE_2__.join)(themeSrcDirPath, themeType),
|
74
|
+
dirPath: (0,path__WEBPACK_IMPORTED_MODULE_2__.join)(buildContext.themeSrcDirPath, themeType),
|
74
75
|
returnedPathsType: "absolute"
|
75
76
|
});
|
76
77
|
files = files.filter(file => {
|
@@ -84,72 +85,231 @@ function generateMessageProperties(params) {
|
|
84
85
|
return aIsI18nFile === bIsI18nFile ? 0 : aIsI18nFile ? -1 : 1;
|
85
86
|
});
|
86
87
|
files = files.sort((a, b) => a.length - b.length);
|
87
|
-
files = files.filter(file => fs__WEBPACK_IMPORTED_MODULE_9__.readFileSync(file).toString("utf8").includes("
|
88
|
+
files = files.filter(file => fs__WEBPACK_IMPORTED_MODULE_9__.readFileSync(file).toString("utf8").includes("i18nBuilder"));
|
88
89
|
const i18nTsFilePath = files[0];
|
89
90
|
return { i18nTsFilePath };
|
90
91
|
})();
|
91
|
-
const
|
92
|
+
const i18nTsRoot = (() => {
|
92
93
|
if (i18nTsFilePath === undefined) {
|
93
94
|
return undefined;
|
94
95
|
}
|
95
|
-
const root =
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
96
|
+
const root = recastParseTs(i18nTsFilePath);
|
97
|
+
return root;
|
98
|
+
})();
|
99
|
+
const messages_defaultSet_by_languageTag_notInDefaultSet = (() => {
|
100
|
+
if (i18nTsRoot === undefined) {
|
101
|
+
return undefined;
|
102
|
+
}
|
103
|
+
let extraLanguageEntryByLanguageTag = {};
|
104
|
+
recast__WEBPACK_IMPORTED_MODULE_4__/* .visit */ .Vn(i18nTsRoot, {
|
105
|
+
visitCallExpression: function (path) {
|
106
|
+
const node = path.node;
|
107
|
+
// Check if the callee is a MemberExpression with property 'withExtraLanguages'
|
108
|
+
if (node.callee.type === "MemberExpression" &&
|
109
|
+
node.callee.property.type === "Identifier" &&
|
110
|
+
node.callee.property.name === "withExtraLanguages") {
|
111
|
+
const arg = node.arguments[0];
|
112
|
+
if (arg && arg.type === "ObjectExpression") {
|
113
|
+
// Iterate over the properties of the object
|
114
|
+
arg.properties.forEach(prop => {
|
115
|
+
if (prop.type === "ObjectProperty" &&
|
116
|
+
prop.key.type === "Identifier") {
|
117
|
+
const lang = prop.key.name;
|
118
|
+
const value = prop.value;
|
119
|
+
if (value.type === "ObjectExpression") {
|
120
|
+
let label = undefined;
|
121
|
+
let pathStr = undefined;
|
122
|
+
// Iterate over the properties of the language object
|
123
|
+
value.properties.forEach(p => {
|
124
|
+
if (p.type === "ObjectProperty" &&
|
125
|
+
p.key.type === "Identifier") {
|
126
|
+
if (p.key.name === "label" &&
|
127
|
+
p.value.type === "StringLiteral") {
|
128
|
+
label = p.value.value;
|
129
|
+
}
|
130
|
+
if (p.key.name === "getMessages" &&
|
131
|
+
(p.value.type ===
|
132
|
+
"ArrowFunctionExpression" ||
|
133
|
+
p.value.type === "FunctionExpression")) {
|
134
|
+
// Extract the import path from the function body
|
135
|
+
const body = p.value.body;
|
136
|
+
if (body.type === "CallExpression" &&
|
137
|
+
body.callee.type === "Import") {
|
138
|
+
const importArg = body.arguments[0];
|
139
|
+
if (importArg.type === "StringLiteral") {
|
140
|
+
pathStr = importArg.value;
|
141
|
+
}
|
142
|
+
}
|
143
|
+
else if (body.type === "BlockStatement") {
|
144
|
+
// If the function body is a block (e.g., function with braces {})
|
145
|
+
// Look for return statement
|
146
|
+
body.body.forEach(statement => {
|
147
|
+
if (statement.type ===
|
148
|
+
"ReturnStatement" &&
|
149
|
+
statement.argument &&
|
150
|
+
statement.argument.type ===
|
151
|
+
"CallExpression" &&
|
152
|
+
statement.argument.callee
|
153
|
+
.type === "Import") {
|
154
|
+
const importArg = statement.argument
|
155
|
+
.arguments[0];
|
156
|
+
if (importArg.type ===
|
157
|
+
"StringLiteral") {
|
158
|
+
pathStr = importArg.value;
|
159
|
+
}
|
160
|
+
}
|
161
|
+
});
|
162
|
+
}
|
163
|
+
}
|
164
|
+
}
|
165
|
+
});
|
166
|
+
if (label && pathStr) {
|
167
|
+
extraLanguageEntryByLanguageTag[lang] = {
|
168
|
+
label,
|
169
|
+
path: pathStr
|
170
|
+
};
|
171
|
+
}
|
172
|
+
}
|
173
|
+
}
|
174
|
+
});
|
175
|
+
}
|
176
|
+
return false; // Stop traversing this path
|
177
|
+
}
|
178
|
+
this.traverse(path); // Continue traversing other paths
|
103
179
|
}
|
104
180
|
});
|
105
|
-
|
106
|
-
|
181
|
+
const messages_defaultSet_by_languageTag_notInDefaultSet = Object.fromEntries(Object.entries(extraLanguageEntryByLanguageTag).map(([languageTag, { path: relativePathWithoutExt }]) => [
|
182
|
+
languageTag,
|
183
|
+
(() => {
|
184
|
+
const filePath = (0,_tools_getAbsoluteAndInOsFormatPath__WEBPACK_IMPORTED_MODULE_11__/* .getAbsoluteAndInOsFormatPath */ .c)({
|
185
|
+
pathIsh: relativePathWithoutExt.endsWith(".ts")
|
186
|
+
? relativePathWithoutExt
|
187
|
+
: `${relativePathWithoutExt}.ts`,
|
188
|
+
cwd: (0,path__WEBPACK_IMPORTED_MODULE_2__.dirname)(i18nTsFilePath)
|
189
|
+
});
|
190
|
+
const root = recastParseTs(filePath);
|
191
|
+
let declarationCode = "";
|
192
|
+
recast__WEBPACK_IMPORTED_MODULE_4__/* .visit */ .Vn(root, {
|
193
|
+
visitVariableDeclarator: function (path) {
|
194
|
+
const node = path.node;
|
195
|
+
// Check if the variable name is 'messages'
|
196
|
+
if (node.id.type === "Identifier" &&
|
197
|
+
node.id.name === "messages") {
|
198
|
+
// Ensure there is an initializer
|
199
|
+
if (node.init) {
|
200
|
+
// Generate code from the initializer, preserving comments
|
201
|
+
declarationCode = recast__WEBPACK_IMPORTED_MODULE_4__/* .print */ .S0(node.init)
|
202
|
+
.code.replace(/}.*$/, "}");
|
203
|
+
}
|
204
|
+
return false; // Stop traversing this path
|
205
|
+
}
|
206
|
+
this.traverse(path); // Continue traversing other paths
|
207
|
+
}
|
208
|
+
});
|
209
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_10__.assert)(declarationCode !== undefined, `${filePath} does not contain a 'messages' variable declaration`);
|
210
|
+
let messages = {};
|
211
|
+
try {
|
212
|
+
eval(`${(0,tsafe_symToStr__WEBPACK_IMPORTED_MODULE_3__/* .symToStr */ .r)({ messages })} = ${declarationCode};`);
|
213
|
+
}
|
214
|
+
catch (_a) {
|
215
|
+
throw new Error(`The declaration of 'message' in ${filePath} cannot be statically evaluated: ${declarationCode}`);
|
216
|
+
}
|
217
|
+
return messages;
|
218
|
+
})()
|
219
|
+
]));
|
220
|
+
return messages_defaultSet_by_languageTag_notInDefaultSet;
|
221
|
+
})();
|
222
|
+
const messages_defaultSet_by_languageTag = Object.assign(Object.assign({}, messages_defaultSet_by_languageTag_defaultSet), messages_defaultSet_by_languageTag_notInDefaultSet);
|
223
|
+
const messages_themeDefined_by_languageTag = (() => {
|
224
|
+
if (i18nTsRoot === undefined) {
|
225
|
+
return undefined;
|
226
|
+
}
|
227
|
+
let firstArgumentCode = undefined;
|
228
|
+
recast__WEBPACK_IMPORTED_MODULE_4__/* .visit */ .Vn(i18nTsRoot, {
|
107
229
|
visitCallExpression: function (path) {
|
108
|
-
|
109
|
-
|
110
|
-
|
230
|
+
const node = path.node;
|
231
|
+
if (node.callee.type === "MemberExpression" &&
|
232
|
+
node.callee.property.type === "Identifier" &&
|
233
|
+
node.callee.property.name === "withCustomTranslations") {
|
234
|
+
firstArgumentCode = (0,_babel_generator__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .ZP)(node.arguments[0]).code;
|
111
235
|
return false;
|
112
236
|
}
|
113
237
|
this.traverse(path);
|
114
238
|
}
|
115
239
|
});
|
116
|
-
(
|
117
|
-
|
240
|
+
if (firstArgumentCode === undefined) {
|
241
|
+
return undefined;
|
242
|
+
}
|
243
|
+
let messages_themeDefined_by_languageTag = {};
|
118
244
|
try {
|
119
|
-
eval(`${(0,tsafe_symToStr__WEBPACK_IMPORTED_MODULE_3__/* .symToStr */ .r)({
|
245
|
+
eval(`${(0,tsafe_symToStr__WEBPACK_IMPORTED_MODULE_3__/* .symToStr */ .r)({ messages_themeDefined_by_languageTag })} = ${firstArgumentCode}`);
|
120
246
|
}
|
121
247
|
catch (_a) {
|
122
248
|
console.warn([
|
123
|
-
"WARNING:
|
124
|
-
"This
|
125
|
-
|
126
|
-
"\n",
|
127
|
-
"The following code could not be evaluated:",
|
128
|
-
"\n",
|
129
|
-
messageBundleDeclarationTsCode
|
249
|
+
"WARNING: The argument of withCustomTranslations can't be statically evaluated!",
|
250
|
+
"This needs to be fixed refer to the documentation: https://docs.keycloakify.dev/i18n",
|
251
|
+
firstArgumentCode
|
130
252
|
].join(" "));
|
253
|
+
return undefined;
|
131
254
|
}
|
132
|
-
return
|
255
|
+
return messages_themeDefined_by_languageTag;
|
133
256
|
})();
|
134
|
-
const
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
:
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
257
|
+
const languageTags = Object.keys(messages_defaultSet_by_languageTag);
|
258
|
+
return {
|
259
|
+
languageTags,
|
260
|
+
writeMessagePropertiesFiles: ({ messageDirPath, themeName }) => {
|
261
|
+
for (const languageTag of languageTags) {
|
262
|
+
const messages = Object.assign({}, messages_defaultSet_by_languageTag[languageTag]);
|
263
|
+
add_theme_defined_messages: {
|
264
|
+
if (messages_themeDefined_by_languageTag === undefined) {
|
265
|
+
break add_theme_defined_messages;
|
266
|
+
}
|
267
|
+
let messages_themeDefined = messages_themeDefined_by_languageTag[languageTag];
|
268
|
+
if (messages_themeDefined === undefined) {
|
269
|
+
messages_themeDefined =
|
270
|
+
messages_themeDefined_by_languageTag[_shared_constants__WEBPACK_IMPORTED_MODULE_0__/* .FALLBACK_LANGUAGE_TAG */ ._L];
|
271
|
+
}
|
272
|
+
if (messages_themeDefined === undefined) {
|
273
|
+
messages_themeDefined =
|
274
|
+
messages_themeDefined_by_languageTag[Object.keys(messages_themeDefined_by_languageTag)[0]];
|
275
|
+
}
|
276
|
+
if (messages_themeDefined === undefined) {
|
277
|
+
break add_theme_defined_messages;
|
278
|
+
}
|
279
|
+
for (const [key, messageOrMessageByThemeName] of Object.entries(messages_themeDefined)) {
|
280
|
+
const message = (() => {
|
281
|
+
if (typeof messageOrMessageByThemeName === "string") {
|
282
|
+
return messageOrMessageByThemeName;
|
283
|
+
}
|
284
|
+
const message = messageOrMessageByThemeName[themeName];
|
285
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_10__.assert)(message !== undefined);
|
286
|
+
return message;
|
287
|
+
})();
|
288
|
+
messages[key] = message;
|
289
|
+
}
|
290
|
+
}
|
291
|
+
const propertiesFileSource = [
|
292
|
+
"",
|
293
|
+
...Object.entries(messages).map(([key, value]) => `${key}=${(0,_tools_escapeStringForPropertiesFile__WEBPACK_IMPORTED_MODULE_12__/* .escapeStringForPropertiesFile */ .y)(value)}`),
|
294
|
+
""
|
295
|
+
].join("\n");
|
296
|
+
fs__WEBPACK_IMPORTED_MODULE_9__.mkdirSync(messageDirPath, { recursive: true });
|
297
|
+
fs__WEBPACK_IMPORTED_MODULE_9__.writeFileSync((0,path__WEBPACK_IMPORTED_MODULE_2__.join)(messageDirPath, `messages_${languageTag}.properties`), Buffer.from(propertiesFileSource, "utf8"));
|
298
|
+
}
|
299
|
+
}
|
300
|
+
};
|
301
|
+
}
|
302
|
+
function recastParseTs(filePath) {
|
303
|
+
return recast__WEBPACK_IMPORTED_MODULE_4__/* .parse */ .Qc(fs__WEBPACK_IMPORTED_MODULE_9__.readFileSync(filePath).toString("utf8"), {
|
304
|
+
parser: {
|
305
|
+
parse: (code) => _babel_parser__WEBPACK_IMPORTED_MODULE_5__/* .parse */ .Qc(code, {
|
306
|
+
sourceType: "module",
|
307
|
+
plugins: ["typescript"]
|
308
|
+
}),
|
309
|
+
generator: _babel_generator__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .ZP,
|
310
|
+
types: _babel_types__WEBPACK_IMPORTED_MODULE_7__
|
311
|
+
}
|
312
|
+
});
|
153
313
|
}
|
154
314
|
//# sourceMappingURL=generateMessageProperties.js.map
|
155
315
|
|
@@ -652,6 +812,7 @@ async function generateResourcesForMainTheme(params) {
|
|
652
812
|
const { themeType } = params;
|
653
813
|
return (0,external_path_.join)(resourcesDirPath, "theme", themeName, themeType);
|
654
814
|
};
|
815
|
+
const writeMessagePropertiesFilesByThemeType = {};
|
655
816
|
for (const themeType of ["login", "account"]) {
|
656
817
|
if (!buildContext.implementedThemeTypes[themeType].isImplemented) {
|
657
818
|
continue;
|
@@ -746,20 +907,22 @@ async function generateResourcesForMainTheme(params) {
|
|
746
907
|
const { ftlCode } = generateFtlFilesCode({ pageId });
|
747
908
|
external_fs_.writeFileSync((0,external_path_.join)(themeTypeDirPath, pageId), Buffer.from(ftlCode, "utf8"));
|
748
909
|
});
|
910
|
+
let languageTags = undefined;
|
749
911
|
i18n_messages_generation: {
|
750
912
|
if (isForAccountSpa) {
|
751
913
|
break i18n_messages_generation;
|
752
914
|
}
|
753
|
-
(0,generateMessageProperties/* generateMessageProperties */.k)({
|
754
|
-
|
915
|
+
const wrap = (0,generateMessageProperties/* generateMessageProperties */.k)({
|
916
|
+
buildContext,
|
755
917
|
themeType
|
756
|
-
})
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
918
|
+
});
|
919
|
+
languageTags = wrap.languageTags;
|
920
|
+
const { writeMessagePropertiesFiles } = wrap;
|
921
|
+
writeMessagePropertiesFilesByThemeType[themeType] =
|
922
|
+
writeMessagePropertiesFiles;
|
923
|
+
writeMessagePropertiesFiles({
|
924
|
+
messageDirPath: (0,external_path_.join)(themeTypeDirPath, "messages"),
|
925
|
+
themeName
|
763
926
|
});
|
764
927
|
}
|
765
928
|
bring_in_account_v3_i18n_messages: {
|
@@ -804,7 +967,10 @@ async function generateResourcesForMainTheme(params) {
|
|
804
967
|
})()}`,
|
805
968
|
...(isForAccountSpa ? ["deprecatedMode=false"] : []),
|
806
969
|
...((_a = buildContext.extraThemeProperties) !== null && _a !== void 0 ? _a : []),
|
807
|
-
...buildContext.environmentVariables.map(({ name, default: defaultValue }) => `${name}=\${env.${name}:${(0,escapeStringForPropertiesFile/* escapeStringForPropertiesFile */.y)(defaultValue)}}`)
|
970
|
+
...buildContext.environmentVariables.map(({ name, default: defaultValue }) => `${name}=\${env.${name}:${(0,escapeStringForPropertiesFile/* escapeStringForPropertiesFile */.y)(defaultValue)}}`),
|
971
|
+
...(languageTags === undefined
|
972
|
+
? []
|
973
|
+
: [`locales=${languageTags.join(",")}`])
|
808
974
|
].join("\n\n"), "utf8"));
|
809
975
|
}
|
810
976
|
email: {
|
@@ -848,6 +1014,19 @@ async function generateResourcesForMainTheme(params) {
|
|
848
1014
|
getNewMetaInfKeycloakTheme: () => metaInfKeycloakThemes
|
849
1015
|
});
|
850
1016
|
}
|
1017
|
+
return {
|
1018
|
+
writeMessagePropertiesFilesForThemeVariant: ({ getMessageDirPath, themeName }) => {
|
1019
|
+
(0,objectEntries.objectEntries)(writeMessagePropertiesFilesByThemeType).forEach(([themeType, writeMessagePropertiesFiles]) => {
|
1020
|
+
if (writeMessagePropertiesFiles === undefined) {
|
1021
|
+
return;
|
1022
|
+
}
|
1023
|
+
writeMessagePropertiesFiles({
|
1024
|
+
messageDirPath: getMessageDirPath({ themeType }),
|
1025
|
+
themeName
|
1026
|
+
});
|
1027
|
+
});
|
1028
|
+
}
|
1029
|
+
};
|
851
1030
|
}
|
852
1031
|
//# sourceMappingURL=generateResourcesForMainTheme.js.map
|
853
1032
|
;// CONCATENATED MODULE: ./dist/bin/keycloakify/generateResources/generateResourcesForThemeVariant.js
|
@@ -855,13 +1034,13 @@ async function generateResourcesForMainTheme(params) {
|
|
855
1034
|
|
856
1035
|
|
857
1036
|
|
858
|
-
(0,assert.assert)();
|
859
1037
|
function generateResourcesForThemeVariant(params) {
|
860
|
-
const { resourcesDirPath, themeName, themeVariantName } = params;
|
1038
|
+
const { resourcesDirPath, themeName, themeVariantName, writeMessagePropertiesFiles } = params;
|
861
1039
|
const mainThemeDirPath = (0,external_path_.join)(resourcesDirPath, "theme", themeName);
|
1040
|
+
const themeVariantDirPath = (0,external_path_.join)(mainThemeDirPath, "..", themeVariantName);
|
862
1041
|
(0,transformCodebase/* transformCodebase */.N)({
|
863
1042
|
srcDirPath: mainThemeDirPath,
|
864
|
-
destDirPath:
|
1043
|
+
destDirPath: themeVariantDirPath,
|
865
1044
|
transformSourceCode: ({ fileRelativePath, sourceCode }) => {
|
866
1045
|
if ((0,external_path_.extname)(fileRelativePath) === ".ftl" &&
|
867
1046
|
fileRelativePath.split(external_path_.sep).length === 2) {
|
@@ -890,6 +1069,10 @@ function generateResourcesForThemeVariant(params) {
|
|
890
1069
|
return newMetaInfKeycloakTheme;
|
891
1070
|
}
|
892
1071
|
});
|
1072
|
+
writeMessagePropertiesFiles({
|
1073
|
+
getMessageDirPath: ({ themeType }) => (0,external_path_.join)(themeVariantDirPath, themeType, "messages"),
|
1074
|
+
themeName: themeVariantName
|
1075
|
+
});
|
893
1076
|
}
|
894
1077
|
//# sourceMappingURL=generateResourcesForThemeVariant.js.map
|
895
1078
|
;// CONCATENATED MODULE: ./dist/bin/keycloakify/generateResources/generateResources.js
|
@@ -905,7 +1088,7 @@ async function generateResources(params) {
|
|
905
1088
|
if (external_fs_default().existsSync(resourcesDirPath)) {
|
906
1089
|
(0,fs_rmSync/* rmSync */.a)(resourcesDirPath, { recursive: true });
|
907
1090
|
}
|
908
|
-
await generateResourcesForMainTheme({
|
1091
|
+
const { writeMessagePropertiesFilesForThemeVariant } = await generateResourcesForMainTheme({
|
909
1092
|
resourcesDirPath,
|
910
1093
|
themeName,
|
911
1094
|
buildContext
|
@@ -914,7 +1097,8 @@ async function generateResources(params) {
|
|
914
1097
|
generateResourcesForThemeVariant({
|
915
1098
|
resourcesDirPath,
|
916
1099
|
themeName,
|
917
|
-
themeVariantName
|
1100
|
+
themeVariantName,
|
1101
|
+
writeMessagePropertiesFiles: writeMessagePropertiesFilesForThemeVariant
|
918
1102
|
});
|
919
1103
|
}
|
920
1104
|
}
|
@@ -1065,6 +1249,8 @@ function generatePom(params) {
|
|
1065
1249
|
//# sourceMappingURL=generatePom.js.map
|
1066
1250
|
// EXTERNAL MODULE: ./dist/bin/tools/isInside.js
|
1067
1251
|
var isInside = __webpack_require__(90665);
|
1252
|
+
// EXTERNAL MODULE: ./dist/bin/tools/fs.existsAsync.js
|
1253
|
+
var fs_existsAsync = __webpack_require__(43765);
|
1068
1254
|
;// CONCATENATED MODULE: ./dist/bin/keycloakify/buildJars/buildJar.js
|
1069
1255
|
|
1070
1256
|
|
@@ -1076,6 +1262,7 @@ var isInside = __webpack_require__(90665);
|
|
1076
1262
|
|
1077
1263
|
|
1078
1264
|
|
1265
|
+
|
1079
1266
|
(0,assert.assert)();
|
1080
1267
|
async function buildJar(params) {
|
1081
1268
|
const { jarFileBasename, keycloakAccountV1Version, keycloakThemeAdditionalInfoExtensionVersion, resourcesDirPath, doesImplementAccountV1Theme, buildContext } = params;
|
@@ -1130,8 +1317,13 @@ async function buildJar(params) {
|
|
1130
1317
|
if (!buildContext.implementedThemeTypes.login.isImplemented) {
|
1131
1318
|
break route_legacy_pages;
|
1132
1319
|
}
|
1133
|
-
["register.ftl", "login-update-profile.ftl"]
|
1320
|
+
await Promise.all(["register.ftl", "login-update-profile.ftl"]
|
1321
|
+
.map(pageId => buildContext.themeNames.map(async (themeName) => {
|
1134
1322
|
const ftlFilePath = (0,external_path_.join)(tmpResourcesDirPath, "theme", themeName, "login", pageId);
|
1323
|
+
// NOTE: https://github.com/keycloakify/keycloakify/issues/665
|
1324
|
+
if (!(await (0,fs_existsAsync/* existsAsync */.o)(ftlFilePath))) {
|
1325
|
+
return;
|
1326
|
+
}
|
1135
1327
|
const ftlFileContent = (0,external_fs_.readFileSync)(ftlFilePath).toString("utf8");
|
1136
1328
|
const ftlFileBasename = (() => {
|
1137
1329
|
switch (pageId) {
|
@@ -1144,8 +1336,9 @@ async function buildJar(params) {
|
|
1144
1336
|
})();
|
1145
1337
|
const modifiedFtlFileContent = ftlFileContent.replace(`"ftlTemplateFileName": "${pageId}"`, `"ftlTemplateFileName": "${ftlFileBasename}"`);
|
1146
1338
|
(0,assert.assert)(modifiedFtlFileContent !== ftlFileContent);
|
1147
|
-
promises_.writeFile((0,external_path_.join)((0,external_path_.dirname)(ftlFilePath), ftlFileBasename), Buffer.from(modifiedFtlFileContent, "utf8"));
|
1148
|
-
}))
|
1339
|
+
await promises_.writeFile((0,external_path_.join)((0,external_path_.dirname)(ftlFilePath), ftlFileBasename), Buffer.from(modifiedFtlFileContent, "utf8"));
|
1340
|
+
}))
|
1341
|
+
.flat());
|
1149
1342
|
}
|
1150
1343
|
{
|
1151
1344
|
const { pomFileCode } = generatePom({
|
@@ -1467,6 +1660,30 @@ function escapeStringForPropertiesFile(str) {
|
|
1467
1660
|
|
1468
1661
|
/***/ }),
|
1469
1662
|
|
1663
|
+
/***/ 43765:
|
1664
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1665
|
+
|
1666
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1667
|
+
/* harmony export */ "o": () => (/* binding */ existsAsync)
|
1668
|
+
/* harmony export */ });
|
1669
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73292);
|
1670
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_0__);
|
1671
|
+
|
1672
|
+
async function existsAsync(path) {
|
1673
|
+
try {
|
1674
|
+
await fs_promises__WEBPACK_IMPORTED_MODULE_0__.stat(path);
|
1675
|
+
return true;
|
1676
|
+
}
|
1677
|
+
catch (error) {
|
1678
|
+
if (error.code === "ENOENT")
|
1679
|
+
return false;
|
1680
|
+
throw error;
|
1681
|
+
}
|
1682
|
+
}
|
1683
|
+
//# sourceMappingURL=fs.existsAsync.js.map
|
1684
|
+
|
1685
|
+
/***/ }),
|
1686
|
+
|
1470
1687
|
/***/ 89693:
|
1471
1688
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1472
1689
|
|
package/bin/main.js
CHANGED
@@ -8785,7 +8785,7 @@ var eventemitter3 = __nccwpck_require__(11848);
|
|
8785
8785
|
// EXTERNAL MODULE: external "tty"
|
8786
8786
|
var external_tty_ = __nccwpck_require__(76224);
|
8787
8787
|
var external_tty_namespaceObject = /*#__PURE__*/__nccwpck_require__.t(external_tty_, 2);
|
8788
|
-
;// CONCATENATED MODULE: ./node_modules/
|
8788
|
+
;// CONCATENATED MODULE: ./node_modules/colorette/index.js
|
8789
8789
|
|
8790
8790
|
|
8791
8791
|
const {
|
@@ -0,0 +1,28 @@
|
|
1
|
+
/// <reference types="dompurify" />
|
2
|
+
import { DOMPurify } from "../../tools/vendor/dompurify";
|
3
|
+
export declare class HtmlPolicyBuilder {
|
4
|
+
private globalAttributesAllowed;
|
5
|
+
private tagsAllowed;
|
6
|
+
private tagsAllowedWithNoAttribute;
|
7
|
+
private currentAttribute;
|
8
|
+
private isStylingAllowed;
|
9
|
+
private allowedProtocols;
|
10
|
+
private enforceRelNofollow;
|
11
|
+
private DOMPurify;
|
12
|
+
constructor(dependencyInjections: Partial<{
|
13
|
+
DOMPurify: typeof DOMPurify;
|
14
|
+
}>);
|
15
|
+
allowWithoutAttributes(tag: string): this;
|
16
|
+
allowAttributes(...args: string[]): this;
|
17
|
+
matching(matchingPattern: RegExp | ((value: string) => boolean)): this;
|
18
|
+
globally(): this;
|
19
|
+
allowStyling(): this;
|
20
|
+
onElements(...tags: string[]): this;
|
21
|
+
allowElements(...tags: string[]): this;
|
22
|
+
requireRelNofollowOnLinks(): this;
|
23
|
+
allowStandardUrlProtocols(): this;
|
24
|
+
apply(html: string): string;
|
25
|
+
private setupHooks;
|
26
|
+
private getAllowedAttributes;
|
27
|
+
private getAllowedUriRegexp;
|
28
|
+
}
|