keycloakify 10.0.0-rc.120 → 10.0.0-rc.122
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/bin/453.index.js +57 -5
- package/bin/780.index.js +167 -1
- package/bin/786.index.js +185 -0
- package/bin/97.index.js +27 -5
- package/bin/main.js +1 -1
- package/bin/shared/generateKcGenTs.d.ts +3 -0
- package/bin/shared/generateKcGenTs.js.map +1 -1
- package/package.json +2 -2
- package/src/bin/add-story.ts +37 -5
- package/src/bin/eject-page.ts +114 -6
- package/src/bin/initialize-account-theme/initialize-account-theme.ts +18 -1
- package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +12 -0
- package/src/bin/shared/generateKcGenTs.ts +110 -3
- package/stories/account/pages/Log.stories.tsx +1 -0
- package/vite-plugin/index.js +40910 -40823
- package/bin/538.index.js +0 -108
package/bin/453.index.js
CHANGED
@@ -41,11 +41,63 @@ async function command(params) {
|
|
41
41
|
cliCommandOptions
|
42
42
|
});
|
43
43
|
console.log(chalk__WEBPACK_IMPORTED_MODULE_9___default().cyan("Theme type:"));
|
44
|
-
const
|
45
|
-
values
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
const themeType = await (async () => {
|
45
|
+
const values = _shared_constants__WEBPACK_IMPORTED_MODULE_2__/* .THEME_TYPES.filter */ .Jh.filter(themeType => {
|
46
|
+
switch (themeType) {
|
47
|
+
case "account":
|
48
|
+
return buildContext.implementedThemeTypes.account.isImplemented;
|
49
|
+
case "login":
|
50
|
+
return buildContext.implementedThemeTypes.login.isImplemented;
|
51
|
+
}
|
52
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_7__.assert)(false);
|
53
|
+
});
|
54
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_7__.assert)(values.length > 0, "No theme is implemented in this project");
|
55
|
+
if (values.length === 1) {
|
56
|
+
return values[0];
|
57
|
+
}
|
58
|
+
const { value } = await cli_select__WEBPACK_IMPORTED_MODULE_1___default()({
|
59
|
+
values
|
60
|
+
}).catch(() => {
|
61
|
+
process.exit(-1);
|
62
|
+
});
|
63
|
+
return value;
|
64
|
+
})();
|
65
|
+
if (themeType === "account" &&
|
66
|
+
((0,tsafe_assert__WEBPACK_IMPORTED_MODULE_7__.assert)(buildContext.implementedThemeTypes.account.isImplemented),
|
67
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page")) {
|
68
|
+
const srcDirPath = (0,path__WEBPACK_IMPORTED_MODULE_5__.join)((0,path__WEBPACK_IMPORTED_MODULE_5__.dirname)(buildContext.packageJsonFilePath), "node_modules", "@keycloakify", "keycloak-account-ui", "src");
|
69
|
+
console.log([
|
70
|
+
`There isn't an interactive CLI to eject components of the Single-Page Account theme.`,
|
71
|
+
`You can however copy paste into your codebase the any file or directory from the following source directory:`,
|
72
|
+
``,
|
73
|
+
`${chalk__WEBPACK_IMPORTED_MODULE_9___default().bold((0,path__WEBPACK_IMPORTED_MODULE_5__.join)((0,path__WEBPACK_IMPORTED_MODULE_5__.relative)(process.cwd(), srcDirPath)))}`,
|
74
|
+
``
|
75
|
+
].join("\n"));
|
76
|
+
eject_entrypoint: {
|
77
|
+
const kcAccountUiTsxFileRelativePath = "KcAccountUi.tsx";
|
78
|
+
const accountThemeSrcDirPath = (0,path__WEBPACK_IMPORTED_MODULE_5__.join)(buildContext.themeSrcDirPath, "account");
|
79
|
+
const targetFilePath = (0,path__WEBPACK_IMPORTED_MODULE_5__.join)(accountThemeSrcDirPath, kcAccountUiTsxFileRelativePath);
|
80
|
+
if (fs__WEBPACK_IMPORTED_MODULE_4__.existsSync(targetFilePath)) {
|
81
|
+
break eject_entrypoint;
|
82
|
+
}
|
83
|
+
fs__WEBPACK_IMPORTED_MODULE_4__.cpSync((0,path__WEBPACK_IMPORTED_MODULE_5__.join)(srcDirPath, kcAccountUiTsxFileRelativePath), targetFilePath);
|
84
|
+
{
|
85
|
+
const kcPageTsxFilePath = (0,path__WEBPACK_IMPORTED_MODULE_5__.join)(accountThemeSrcDirPath, "KcPage.tsx");
|
86
|
+
const kcPageTsxCode = fs__WEBPACK_IMPORTED_MODULE_4__.readFileSync(kcPageTsxFilePath).toString("utf8");
|
87
|
+
const componentName = (0,path__WEBPACK_IMPORTED_MODULE_5__.basename)(kcAccountUiTsxFileRelativePath).replace(/.tsx$/, "");
|
88
|
+
const modifiedKcPageTsxCode = kcPageTsxCode.replace(`@keycloakify/keycloak-account-ui/${componentName}`, `./${componentName}`);
|
89
|
+
fs__WEBPACK_IMPORTED_MODULE_4__.writeFileSync(kcPageTsxFilePath, Buffer.from(modifiedKcPageTsxCode, "utf8"));
|
90
|
+
}
|
91
|
+
const routesTsxFilePath = (0,path__WEBPACK_IMPORTED_MODULE_5__.relative)(process.cwd(), (0,path__WEBPACK_IMPORTED_MODULE_5__.join)(srcDirPath, "routes.tsx"));
|
92
|
+
console.log([
|
93
|
+
`To help you get started ${chalk__WEBPACK_IMPORTED_MODULE_9___default().bold((0,path__WEBPACK_IMPORTED_MODULE_5__.relative)(process.cwd(), targetFilePath))} has been copied into your project.`,
|
94
|
+
`The next step is usually to eject ${chalk__WEBPACK_IMPORTED_MODULE_9___default().bold(routesTsxFilePath)}`,
|
95
|
+
`with \`cp ${routesTsxFilePath} ${(0,path__WEBPACK_IMPORTED_MODULE_5__.relative)(process.cwd(), accountThemeSrcDirPath)}\``,
|
96
|
+
`then update the import of routes in ${kcAccountUiTsxFileRelativePath}.`
|
97
|
+
].join("\n"));
|
98
|
+
}
|
99
|
+
process.exit(0);
|
100
|
+
}
|
49
101
|
console.log(`→ ${themeType}`);
|
50
102
|
console.log(chalk__WEBPACK_IMPORTED_MODULE_9___default().cyan("Select the page you want to customize:"));
|
51
103
|
const templateValue = "Template.tsx (Layout common to every page)";
|
package/bin/780.index.js
CHANGED
@@ -83,6 +83,8 @@ function updateAccountThemeImplementationInConfig(params) {
|
|
83
83
|
}
|
84
84
|
}
|
85
85
|
//# sourceMappingURL=updateAccountThemeImplementationInConfig.js.map
|
86
|
+
// EXTERNAL MODULE: ./dist/bin/shared/generateKcGenTs.js
|
87
|
+
var generateKcGenTs = __webpack_require__(58585);
|
86
88
|
;// CONCATENATED MODULE: ./dist/bin/initialize-account-theme/initialize-account-theme.js
|
87
89
|
|
88
90
|
|
@@ -91,11 +93,13 @@ function updateAccountThemeImplementationInConfig(params) {
|
|
91
93
|
|
92
94
|
|
93
95
|
|
96
|
+
|
94
97
|
async function command(params) {
|
95
98
|
const { cliCommandOptions } = params;
|
96
99
|
const buildContext = (0,shared_buildContext/* getBuildContext */.s)({ cliCommandOptions });
|
97
100
|
const accountThemeSrcDirPath = (0,external_path_.join)(buildContext.themeSrcDirPath, "account");
|
98
|
-
if (external_fs_.existsSync(accountThemeSrcDirPath)
|
101
|
+
if (external_fs_.existsSync(accountThemeSrcDirPath) &&
|
102
|
+
external_fs_.readdirSync(accountThemeSrcDirPath).length > 0) {
|
99
103
|
console.warn(source_default().red(`There is already a ${(0,external_path_.relative)(process.cwd(), accountThemeSrcDirPath)} directory in your project. Aborting.`));
|
100
104
|
process.exit(-1);
|
101
105
|
}
|
@@ -148,6 +152,12 @@ async function command(params) {
|
|
148
152
|
break;
|
149
153
|
}
|
150
154
|
updateAccountThemeImplementationInConfig({ buildContext, accountThemeType });
|
155
|
+
await (0,generateKcGenTs/* generateKcGenTs */.b)({
|
156
|
+
buildContext: Object.assign(Object.assign({}, buildContext), { implementedThemeTypes: Object.assign(Object.assign({}, buildContext.implementedThemeTypes), { account: {
|
157
|
+
isImplemented: true,
|
158
|
+
type: accountThemeType
|
159
|
+
} }) })
|
160
|
+
});
|
151
161
|
}
|
152
162
|
//# sourceMappingURL=initialize-account-theme.js.map
|
153
163
|
;// CONCATENATED MODULE: ./dist/bin/initialize-account-theme/index.js
|
@@ -156,6 +166,162 @@ async function command(params) {
|
|
156
166
|
|
157
167
|
/***/ }),
|
158
168
|
|
169
|
+
/***/ 58585:
|
170
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
171
|
+
|
172
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
173
|
+
/* harmony export */ "b": () => (/* binding */ generateKcGenTs)
|
174
|
+
/* harmony export */ });
|
175
|
+
/* harmony import */ var tsafe_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(88078);
|
176
|
+
/* harmony import */ var tsafe_assert__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tsafe_assert__WEBPACK_IMPORTED_MODULE_0__);
|
177
|
+
/* harmony import */ var tsafe_id__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43047);
|
178
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(73292);
|
179
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_2__);
|
180
|
+
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(71017);
|
181
|
+
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__);
|
182
|
+
/* harmony import */ var _tools_fs_existsAsync__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(43765);
|
183
|
+
/* harmony import */ var zod__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52300);
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_0__.assert)();
|
191
|
+
async function generateKcGenTs(params) {
|
192
|
+
const { buildContext } = params;
|
193
|
+
const isReactProject = await (async () => {
|
194
|
+
const parsedPackageJson = await (async () => {
|
195
|
+
const zParsedPackageJson = (() => {
|
196
|
+
const zTargetType = zod__WEBPACK_IMPORTED_MODULE_5__.z.object({
|
197
|
+
dependencies: zod__WEBPACK_IMPORTED_MODULE_5__.z.record(zod__WEBPACK_IMPORTED_MODULE_5__.z.string()).optional(),
|
198
|
+
devDependencies: zod__WEBPACK_IMPORTED_MODULE_5__.z.record(zod__WEBPACK_IMPORTED_MODULE_5__.z.string()).optional()
|
199
|
+
});
|
200
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_0__.assert)();
|
201
|
+
return (0,tsafe_id__WEBPACK_IMPORTED_MODULE_1__.id)(zTargetType);
|
202
|
+
})();
|
203
|
+
return zParsedPackageJson.parse(JSON.parse((await fs_promises__WEBPACK_IMPORTED_MODULE_2__.readFile(buildContext.packageJsonFilePath)).toString("utf8")));
|
204
|
+
})();
|
205
|
+
return (Object.assign(Object.assign({}, parsedPackageJson.dependencies), parsedPackageJson.devDependencies).react !== undefined);
|
206
|
+
})();
|
207
|
+
const filePath = (0,path__WEBPACK_IMPORTED_MODULE_3__.join)(buildContext.themeSrcDirPath, `kc.gen.ts${isReactProject ? "x" : ""}`);
|
208
|
+
const currentContent = (await (0,_tools_fs_existsAsync__WEBPACK_IMPORTED_MODULE_4__/* .existsAsync */ .o)(filePath))
|
209
|
+
? await fs_promises__WEBPACK_IMPORTED_MODULE_2__.readFile(filePath)
|
210
|
+
: undefined;
|
211
|
+
const hasLoginTheme = buildContext.implementedThemeTypes.login.isImplemented;
|
212
|
+
const hasAccountTheme = buildContext.implementedThemeTypes.account.isImplemented;
|
213
|
+
const newContent = Buffer.from([
|
214
|
+
`/* prettier-ignore-start */`,
|
215
|
+
``,
|
216
|
+
`/* eslint-disable */`,
|
217
|
+
``,
|
218
|
+
`// @ts-nocheck`,
|
219
|
+
``,
|
220
|
+
`// noinspection JSUnusedGlobalSymbols`,
|
221
|
+
``,
|
222
|
+
`// This file is auto-generated by Keycloakify`,
|
223
|
+
``,
|
224
|
+
isReactProject && `import { lazy, Suspense, type ReactNode } from "react";`,
|
225
|
+
``,
|
226
|
+
`export type ThemeName = ${buildContext.themeNames.map(themeName => `"${themeName}"`).join(" | ")};`,
|
227
|
+
``,
|
228
|
+
`export const themeNames: ThemeName[] = [${buildContext.themeNames.map(themeName => `"${themeName}"`).join(", ")}];`,
|
229
|
+
``,
|
230
|
+
`export type KcEnvName = ${buildContext.environmentVariables.length === 0 ? "never" : buildContext.environmentVariables.map(({ name }) => `"${name}"`).join(" | ")};`,
|
231
|
+
``,
|
232
|
+
`export const kcEnvNames: KcEnvName[] = [${buildContext.environmentVariables.map(({ name }) => `"${name}"`).join(", ")}];`,
|
233
|
+
``,
|
234
|
+
`export const kcEnvDefaults: Record<KcEnvName, string> = ${JSON.stringify(Object.fromEntries(buildContext.environmentVariables.map(({ name, default: defaultValue }) => [name, defaultValue])), null, 2)};`,
|
235
|
+
``,
|
236
|
+
`export type KcContext =`,
|
237
|
+
hasLoginTheme && ` | import("./login/KcContext").KcContext`,
|
238
|
+
hasAccountTheme && ` | import("./account/KcContext").KcContext`,
|
239
|
+
` ;`,
|
240
|
+
``,
|
241
|
+
`declare global {`,
|
242
|
+
` interface Window {`,
|
243
|
+
` kcContext?: KcContext;`,
|
244
|
+
` }`,
|
245
|
+
`}`,
|
246
|
+
``,
|
247
|
+
...(!isReactProject
|
248
|
+
? []
|
249
|
+
: [
|
250
|
+
hasLoginTheme &&
|
251
|
+
`export const KcLoginPage = lazy(() => import("./login/KcPage"));`,
|
252
|
+
hasAccountTheme &&
|
253
|
+
`export const KcAccountPage = lazy(() => import("./account/KcPage"));`,
|
254
|
+
``,
|
255
|
+
`export function KcPage(`,
|
256
|
+
` props: {`,
|
257
|
+
` kcContext: KcContext;`,
|
258
|
+
` fallback?: ReactNode;`,
|
259
|
+
` }`,
|
260
|
+
`) {`,
|
261
|
+
` const { kcContext, fallback } = props;`,
|
262
|
+
` return (`,
|
263
|
+
` <Suspense fallback={fallback}>`,
|
264
|
+
` {(() => {`,
|
265
|
+
` switch (kcContext.themeType) {`,
|
266
|
+
hasLoginTheme &&
|
267
|
+
` case "login": return <KcLoginPage kcContext={kcContext} />;`,
|
268
|
+
hasAccountTheme &&
|
269
|
+
` case "account": return <KcAccountPage kcContext={kcContext} />;`,
|
270
|
+
` }`,
|
271
|
+
` })()}`,
|
272
|
+
` </Suspense>`,
|
273
|
+
` );`,
|
274
|
+
`}`
|
275
|
+
]),
|
276
|
+
``,
|
277
|
+
`/* prettier-ignore-end */`,
|
278
|
+
``
|
279
|
+
]
|
280
|
+
.filter(item => typeof item === "string")
|
281
|
+
.join("\n"), "utf8");
|
282
|
+
if (currentContent !== undefined && currentContent.equals(newContent)) {
|
283
|
+
return;
|
284
|
+
}
|
285
|
+
await fs_promises__WEBPACK_IMPORTED_MODULE_2__.writeFile(filePath, newContent);
|
286
|
+
delete_legacy_file: {
|
287
|
+
if (!isReactProject) {
|
288
|
+
break delete_legacy_file;
|
289
|
+
}
|
290
|
+
const legacyFilePath = filePath.replace(/tsx$/, "ts");
|
291
|
+
if (!(await (0,_tools_fs_existsAsync__WEBPACK_IMPORTED_MODULE_4__/* .existsAsync */ .o)(legacyFilePath))) {
|
292
|
+
break delete_legacy_file;
|
293
|
+
}
|
294
|
+
await fs_promises__WEBPACK_IMPORTED_MODULE_2__.unlink(legacyFilePath);
|
295
|
+
}
|
296
|
+
}
|
297
|
+
//# sourceMappingURL=generateKcGenTs.js.map
|
298
|
+
|
299
|
+
/***/ }),
|
300
|
+
|
301
|
+
/***/ 43765:
|
302
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
303
|
+
|
304
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
305
|
+
/* harmony export */ "o": () => (/* binding */ existsAsync)
|
306
|
+
/* harmony export */ });
|
307
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73292);
|
308
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_0__);
|
309
|
+
|
310
|
+
async function existsAsync(path) {
|
311
|
+
try {
|
312
|
+
await fs_promises__WEBPACK_IMPORTED_MODULE_0__.stat(path);
|
313
|
+
return true;
|
314
|
+
}
|
315
|
+
catch (error) {
|
316
|
+
if (error.code === "ENOENT")
|
317
|
+
return false;
|
318
|
+
throw error;
|
319
|
+
}
|
320
|
+
}
|
321
|
+
//# sourceMappingURL=fs.existsAsync.js.map
|
322
|
+
|
323
|
+
/***/ }),
|
324
|
+
|
159
325
|
/***/ 18512:
|
160
326
|
/***/ ((module) => {
|
161
327
|
|
package/bin/786.index.js
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
"use strict";
|
2
|
+
exports.id = 786;
|
3
|
+
exports.ids = [786];
|
4
|
+
exports.modules = {
|
5
|
+
|
6
|
+
/***/ 58585:
|
7
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
8
|
+
|
9
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
10
|
+
/* harmony export */ "b": () => (/* binding */ generateKcGenTs)
|
11
|
+
/* harmony export */ });
|
12
|
+
/* harmony import */ var tsafe_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(88078);
|
13
|
+
/* harmony import */ var tsafe_assert__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tsafe_assert__WEBPACK_IMPORTED_MODULE_0__);
|
14
|
+
/* harmony import */ var tsafe_id__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43047);
|
15
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(73292);
|
16
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_2__);
|
17
|
+
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(71017);
|
18
|
+
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__);
|
19
|
+
/* harmony import */ var _tools_fs_existsAsync__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(43765);
|
20
|
+
/* harmony import */ var zod__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52300);
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_0__.assert)();
|
28
|
+
async function generateKcGenTs(params) {
|
29
|
+
const { buildContext } = params;
|
30
|
+
const isReactProject = await (async () => {
|
31
|
+
const parsedPackageJson = await (async () => {
|
32
|
+
const zParsedPackageJson = (() => {
|
33
|
+
const zTargetType = zod__WEBPACK_IMPORTED_MODULE_5__.z.object({
|
34
|
+
dependencies: zod__WEBPACK_IMPORTED_MODULE_5__.z.record(zod__WEBPACK_IMPORTED_MODULE_5__.z.string()).optional(),
|
35
|
+
devDependencies: zod__WEBPACK_IMPORTED_MODULE_5__.z.record(zod__WEBPACK_IMPORTED_MODULE_5__.z.string()).optional()
|
36
|
+
});
|
37
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_0__.assert)();
|
38
|
+
return (0,tsafe_id__WEBPACK_IMPORTED_MODULE_1__.id)(zTargetType);
|
39
|
+
})();
|
40
|
+
return zParsedPackageJson.parse(JSON.parse((await fs_promises__WEBPACK_IMPORTED_MODULE_2__.readFile(buildContext.packageJsonFilePath)).toString("utf8")));
|
41
|
+
})();
|
42
|
+
return (Object.assign(Object.assign({}, parsedPackageJson.dependencies), parsedPackageJson.devDependencies).react !== undefined);
|
43
|
+
})();
|
44
|
+
const filePath = (0,path__WEBPACK_IMPORTED_MODULE_3__.join)(buildContext.themeSrcDirPath, `kc.gen.ts${isReactProject ? "x" : ""}`);
|
45
|
+
const currentContent = (await (0,_tools_fs_existsAsync__WEBPACK_IMPORTED_MODULE_4__/* .existsAsync */ .o)(filePath))
|
46
|
+
? await fs_promises__WEBPACK_IMPORTED_MODULE_2__.readFile(filePath)
|
47
|
+
: undefined;
|
48
|
+
const hasLoginTheme = buildContext.implementedThemeTypes.login.isImplemented;
|
49
|
+
const hasAccountTheme = buildContext.implementedThemeTypes.account.isImplemented;
|
50
|
+
const newContent = Buffer.from([
|
51
|
+
`/* prettier-ignore-start */`,
|
52
|
+
``,
|
53
|
+
`/* eslint-disable */`,
|
54
|
+
``,
|
55
|
+
`// @ts-nocheck`,
|
56
|
+
``,
|
57
|
+
`// noinspection JSUnusedGlobalSymbols`,
|
58
|
+
``,
|
59
|
+
`// This file is auto-generated by Keycloakify`,
|
60
|
+
``,
|
61
|
+
isReactProject && `import { lazy, Suspense, type ReactNode } from "react";`,
|
62
|
+
``,
|
63
|
+
`export type ThemeName = ${buildContext.themeNames.map(themeName => `"${themeName}"`).join(" | ")};`,
|
64
|
+
``,
|
65
|
+
`export const themeNames: ThemeName[] = [${buildContext.themeNames.map(themeName => `"${themeName}"`).join(", ")}];`,
|
66
|
+
``,
|
67
|
+
`export type KcEnvName = ${buildContext.environmentVariables.length === 0 ? "never" : buildContext.environmentVariables.map(({ name }) => `"${name}"`).join(" | ")};`,
|
68
|
+
``,
|
69
|
+
`export const kcEnvNames: KcEnvName[] = [${buildContext.environmentVariables.map(({ name }) => `"${name}"`).join(", ")}];`,
|
70
|
+
``,
|
71
|
+
`export const kcEnvDefaults: Record<KcEnvName, string> = ${JSON.stringify(Object.fromEntries(buildContext.environmentVariables.map(({ name, default: defaultValue }) => [name, defaultValue])), null, 2)};`,
|
72
|
+
``,
|
73
|
+
`export type KcContext =`,
|
74
|
+
hasLoginTheme && ` | import("./login/KcContext").KcContext`,
|
75
|
+
hasAccountTheme && ` | import("./account/KcContext").KcContext`,
|
76
|
+
` ;`,
|
77
|
+
``,
|
78
|
+
`declare global {`,
|
79
|
+
` interface Window {`,
|
80
|
+
` kcContext?: KcContext;`,
|
81
|
+
` }`,
|
82
|
+
`}`,
|
83
|
+
``,
|
84
|
+
...(!isReactProject
|
85
|
+
? []
|
86
|
+
: [
|
87
|
+
hasLoginTheme &&
|
88
|
+
`export const KcLoginPage = lazy(() => import("./login/KcPage"));`,
|
89
|
+
hasAccountTheme &&
|
90
|
+
`export const KcAccountPage = lazy(() => import("./account/KcPage"));`,
|
91
|
+
``,
|
92
|
+
`export function KcPage(`,
|
93
|
+
` props: {`,
|
94
|
+
` kcContext: KcContext;`,
|
95
|
+
` fallback?: ReactNode;`,
|
96
|
+
` }`,
|
97
|
+
`) {`,
|
98
|
+
` const { kcContext, fallback } = props;`,
|
99
|
+
` return (`,
|
100
|
+
` <Suspense fallback={fallback}>`,
|
101
|
+
` {(() => {`,
|
102
|
+
` switch (kcContext.themeType) {`,
|
103
|
+
hasLoginTheme &&
|
104
|
+
` case "login": return <KcLoginPage kcContext={kcContext} />;`,
|
105
|
+
hasAccountTheme &&
|
106
|
+
` case "account": return <KcAccountPage kcContext={kcContext} />;`,
|
107
|
+
` }`,
|
108
|
+
` })()}`,
|
109
|
+
` </Suspense>`,
|
110
|
+
` );`,
|
111
|
+
`}`
|
112
|
+
]),
|
113
|
+
``,
|
114
|
+
`/* prettier-ignore-end */`,
|
115
|
+
``
|
116
|
+
]
|
117
|
+
.filter(item => typeof item === "string")
|
118
|
+
.join("\n"), "utf8");
|
119
|
+
if (currentContent !== undefined && currentContent.equals(newContent)) {
|
120
|
+
return;
|
121
|
+
}
|
122
|
+
await fs_promises__WEBPACK_IMPORTED_MODULE_2__.writeFile(filePath, newContent);
|
123
|
+
delete_legacy_file: {
|
124
|
+
if (!isReactProject) {
|
125
|
+
break delete_legacy_file;
|
126
|
+
}
|
127
|
+
const legacyFilePath = filePath.replace(/tsx$/, "ts");
|
128
|
+
if (!(await (0,_tools_fs_existsAsync__WEBPACK_IMPORTED_MODULE_4__/* .existsAsync */ .o)(legacyFilePath))) {
|
129
|
+
break delete_legacy_file;
|
130
|
+
}
|
131
|
+
await fs_promises__WEBPACK_IMPORTED_MODULE_2__.unlink(legacyFilePath);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
//# sourceMappingURL=generateKcGenTs.js.map
|
135
|
+
|
136
|
+
/***/ }),
|
137
|
+
|
138
|
+
/***/ 43765:
|
139
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
140
|
+
|
141
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
142
|
+
/* harmony export */ "o": () => (/* binding */ existsAsync)
|
143
|
+
/* harmony export */ });
|
144
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73292);
|
145
|
+
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_0__);
|
146
|
+
|
147
|
+
async function existsAsync(path) {
|
148
|
+
try {
|
149
|
+
await fs_promises__WEBPACK_IMPORTED_MODULE_0__.stat(path);
|
150
|
+
return true;
|
151
|
+
}
|
152
|
+
catch (error) {
|
153
|
+
if (error.code === "ENOENT")
|
154
|
+
return false;
|
155
|
+
throw error;
|
156
|
+
}
|
157
|
+
}
|
158
|
+
//# sourceMappingURL=fs.existsAsync.js.map
|
159
|
+
|
160
|
+
/***/ }),
|
161
|
+
|
162
|
+
/***/ 10786:
|
163
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
164
|
+
|
165
|
+
__webpack_require__.r(__webpack_exports__);
|
166
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
167
|
+
/* harmony export */ "command": () => (/* binding */ command)
|
168
|
+
/* harmony export */ });
|
169
|
+
/* harmony import */ var _shared_buildContext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56031);
|
170
|
+
/* harmony import */ var _shared_generateKcGenTs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58585);
|
171
|
+
|
172
|
+
|
173
|
+
async function command(params) {
|
174
|
+
const { cliCommandOptions } = params;
|
175
|
+
const buildContext = (0,_shared_buildContext__WEBPACK_IMPORTED_MODULE_0__/* .getBuildContext */ .s)({
|
176
|
+
cliCommandOptions
|
177
|
+
});
|
178
|
+
await (0,_shared_generateKcGenTs__WEBPACK_IMPORTED_MODULE_1__/* .generateKcGenTs */ .b)({ buildContext });
|
179
|
+
}
|
180
|
+
//# sourceMappingURL=update-kc-gen.js.map
|
181
|
+
|
182
|
+
/***/ })
|
183
|
+
|
184
|
+
};
|
185
|
+
;
|
package/bin/97.index.js
CHANGED
@@ -41,11 +41,33 @@ async function command(params) {
|
|
41
41
|
cliCommandOptions
|
42
42
|
});
|
43
43
|
console.log(chalk__WEBPACK_IMPORTED_MODULE_9___default().cyan("Theme type:"));
|
44
|
-
const
|
45
|
-
values
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
const themeType = await (async () => {
|
45
|
+
const values = _shared_constants__WEBPACK_IMPORTED_MODULE_2__/* .THEME_TYPES.filter */ .Jh.filter(themeType => {
|
46
|
+
switch (themeType) {
|
47
|
+
case "account":
|
48
|
+
return buildContext.implementedThemeTypes.account.isImplemented;
|
49
|
+
case "login":
|
50
|
+
return buildContext.implementedThemeTypes.login.isImplemented;
|
51
|
+
}
|
52
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_7__.assert)(false);
|
53
|
+
});
|
54
|
+
(0,tsafe_assert__WEBPACK_IMPORTED_MODULE_7__.assert)(values.length > 0, "No theme is implemented in this project");
|
55
|
+
if (values.length === 1) {
|
56
|
+
return values[0];
|
57
|
+
}
|
58
|
+
const { value } = await cli_select__WEBPACK_IMPORTED_MODULE_1___default()({
|
59
|
+
values
|
60
|
+
}).catch(() => {
|
61
|
+
process.exit(-1);
|
62
|
+
});
|
63
|
+
return value;
|
64
|
+
})();
|
65
|
+
if (themeType === "account" &&
|
66
|
+
((0,tsafe_assert__WEBPACK_IMPORTED_MODULE_7__.assert)(buildContext.implementedThemeTypes.account.isImplemented),
|
67
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page")) {
|
68
|
+
console.log(`${chalk__WEBPACK_IMPORTED_MODULE_9___default().red("✗")} Sorry, there is no Storybook support for Single-Page Account themes.`);
|
69
|
+
process.exit(0);
|
70
|
+
}
|
49
71
|
console.log(`→ ${themeType}`);
|
50
72
|
console.log(chalk__WEBPACK_IMPORTED_MODULE_9___default().cyan("Select the page you want to create a Storybook for:"));
|
51
73
|
const { value: pageId } = await cli_select__WEBPACK_IMPORTED_MODULE_1___default()({
|
package/bin/main.js
CHANGED
@@ -11432,7 +11432,7 @@ program
|
|
11432
11432
|
.task({
|
11433
11433
|
skip,
|
11434
11434
|
handler: async (cliCommandOptions) => {
|
11435
|
-
const { command } = await Promise.all(/* import() */[__nccwpck_require__.e(941), __nccwpck_require__.e(31), __nccwpck_require__.e(
|
11435
|
+
const { command } = await Promise.all(/* import() */[__nccwpck_require__.e(941), __nccwpck_require__.e(31), __nccwpck_require__.e(786)]).then(__nccwpck_require__.bind(__nccwpck_require__, 10786));
|
11436
11436
|
await command({ cliCommandOptions });
|
11437
11437
|
}
|
11438
11438
|
});
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import type { BuildContext } from "./buildContext";
|
1
2
|
export type BuildContextLike = {
|
2
3
|
projectDirPath: string;
|
3
4
|
themeNames: string[];
|
@@ -6,6 +7,8 @@ export type BuildContextLike = {
|
|
6
7
|
default: string;
|
7
8
|
}[];
|
8
9
|
themeSrcDirPath: string;
|
10
|
+
implementedThemeTypes: Pick<BuildContext["implementedThemeTypes"], "login" | "account">;
|
11
|
+
packageJsonFilePath: string;
|
9
12
|
};
|
10
13
|
export declare function generateKcGenTs(params: {
|
11
14
|
buildContext: BuildContextLike;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generateKcGenTs.js","sourceRoot":"","sources":["../../src/bin/shared/generateKcGenTs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"generateKcGenTs.js","sourceRoot":"","sources":["../../src/bin/shared/generateKcGenTs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "keycloakify",
|
3
|
-
"version": "10.0.0-rc.
|
3
|
+
"version": "10.0.0-rc.122",
|
4
4
|
"description": "Create Keycloak themes using React",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -794,7 +794,6 @@
|
|
794
794
|
"bin/453.index.js",
|
795
795
|
"bin/525.index.js",
|
796
796
|
"bin/526.index.js",
|
797
|
-
"bin/538.index.js",
|
798
797
|
"bin/599.index.js",
|
799
798
|
"bin/622.index.js",
|
800
799
|
"bin/678.index.js",
|
@@ -802,6 +801,7 @@
|
|
802
801
|
"bin/720.index.js",
|
803
802
|
"bin/743.index.js",
|
804
803
|
"bin/780.index.js",
|
804
|
+
"bin/786.index.js",
|
805
805
|
"bin/877.index.js",
|
806
806
|
"bin/932.index.js",
|
807
807
|
"bin/941.index.js",
|
package/src/bin/add-story.ts
CHANGED
@@ -26,11 +26,43 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|
26
26
|
|
27
27
|
console.log(chalk.cyan("Theme type:"));
|
28
28
|
|
29
|
-
const
|
30
|
-
values
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
const themeType = await (async () => {
|
30
|
+
const values = THEME_TYPES.filter(themeType => {
|
31
|
+
switch (themeType) {
|
32
|
+
case "account":
|
33
|
+
return buildContext.implementedThemeTypes.account.isImplemented;
|
34
|
+
case "login":
|
35
|
+
return buildContext.implementedThemeTypes.login.isImplemented;
|
36
|
+
}
|
37
|
+
assert<Equals<typeof themeType, never>>(false);
|
38
|
+
});
|
39
|
+
|
40
|
+
assert(values.length > 0, "No theme is implemented in this project");
|
41
|
+
|
42
|
+
if (values.length === 1) {
|
43
|
+
return values[0];
|
44
|
+
}
|
45
|
+
|
46
|
+
const { value } = await cliSelect<ThemeType>({
|
47
|
+
values
|
48
|
+
}).catch(() => {
|
49
|
+
process.exit(-1);
|
50
|
+
});
|
51
|
+
|
52
|
+
return value;
|
53
|
+
})();
|
54
|
+
|
55
|
+
if (
|
56
|
+
themeType === "account" &&
|
57
|
+
(assert(buildContext.implementedThemeTypes.account.isImplemented),
|
58
|
+
buildContext.implementedThemeTypes.account.type === "Single-Page")
|
59
|
+
) {
|
60
|
+
console.log(
|
61
|
+
`${chalk.red("✗")} Sorry, there is no Storybook support for Single-Page Account themes.`
|
62
|
+
);
|
63
|
+
|
64
|
+
process.exit(0);
|
65
|
+
}
|
34
66
|
|
35
67
|
console.log(`→ ${themeType}`);
|
36
68
|
|