keycloakify 10.0.0-rc.17 → 10.0.0-rc.19

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.
Files changed (208) hide show
  1. package/PUBLIC_URL.js.map +1 -1
  2. package/account/Template.js +5 -5
  3. package/account/Template.js.map +1 -1
  4. package/account/i18n/i18n.js +37 -29
  5. package/account/i18n/i18n.js.map +1 -1
  6. package/account/kcContext/KcContext.js.map +1 -1
  7. package/account/kcContext/createGetKcContext.js +20 -15
  8. package/account/kcContext/createGetKcContext.js.map +1 -1
  9. package/account/kcContext/getKcContext.js.map +1 -1
  10. package/account/kcContext/getKcContextFromWindow.d.ts +3 -1
  11. package/account/kcContext/getKcContextFromWindow.js.map +1 -1
  12. package/account/kcContext/kcContextMocks.js +148 -144
  13. package/account/kcContext/kcContextMocks.js.map +1 -1
  14. package/account/lib/useGetClassName.js +14 -14
  15. package/account/lib/useGetClassName.js.map +1 -1
  16. package/account/pages/Account.js +1 -1
  17. package/account/pages/Account.js.map +1 -1
  18. package/account/pages/Password.js +7 -7
  19. package/account/pages/Password.js.map +1 -1
  20. package/account/pages/Totp.js +4 -4
  21. package/account/pages/Totp.js.map +1 -1
  22. package/bin/main.js +2265 -2028
  23. package/bin/shared/constants.d.ts +1 -0
  24. package/bin/shared/constants.js +4 -3
  25. package/bin/shared/constants.js.map +1 -1
  26. package/lib/isStorybook.js +2 -1
  27. package/lib/isStorybook.js.map +1 -1
  28. package/lib/useGetClassName.js.map +1 -1
  29. package/login/Template.js +13 -13
  30. package/login/Template.js.map +1 -1
  31. package/login/UserProfileFormFields.js +43 -41
  32. package/login/UserProfileFormFields.js.map +1 -1
  33. package/login/i18n/baseMessages/ca.d.ts +1 -1
  34. package/login/i18n/baseMessages/ca.js +1 -1
  35. package/login/i18n/baseMessages/el.d.ts +0 -1
  36. package/login/i18n/baseMessages/el.js +0 -1
  37. package/login/i18n/baseMessages/el.js.map +1 -1
  38. package/login/i18n/baseMessages/en.d.ts +1 -1
  39. package/login/i18n/baseMessages/en.js +1 -1
  40. package/login/i18n/baseMessages/es.d.ts +1 -1
  41. package/login/i18n/baseMessages/es.js +1 -1
  42. package/login/i18n/baseMessages/fa.d.ts +0 -1
  43. package/login/i18n/baseMessages/fa.js +0 -1
  44. package/login/i18n/baseMessages/fa.js.map +1 -1
  45. package/login/i18n/baseMessages/hu.d.ts +1 -1
  46. package/login/i18n/baseMessages/hu.js +1 -1
  47. package/login/i18n/baseMessages/index.d.ts +1 -2
  48. package/login/i18n/baseMessages/zh-CN.d.ts +1 -1
  49. package/login/i18n/baseMessages/zh-CN.js +1 -1
  50. package/login/i18n/i18n.js +39 -31
  51. package/login/i18n/i18n.js.map +1 -1
  52. package/login/kcContext/KcContext.js.map +1 -1
  53. package/login/kcContext/createGetKcContext.js +30 -22
  54. package/login/kcContext/createGetKcContext.js.map +1 -1
  55. package/login/kcContext/getKcContext.js.map +1 -1
  56. package/login/kcContext/getKcContextFromWindow.d.ts +3 -1
  57. package/login/kcContext/getKcContextFromWindow.js.map +1 -1
  58. package/login/kcContext/kcContextMocks.js +233 -231
  59. package/login/kcContext/kcContextMocks.js.map +1 -1
  60. package/login/lib/useDownloadTerms.js.map +1 -1
  61. package/login/lib/useGetClassName.js +112 -112
  62. package/login/lib/useGetClassName.js.map +1 -1
  63. package/login/lib/useUserProfileForm.js +181 -181
  64. package/login/lib/useUserProfileForm.js.map +1 -1
  65. package/login/pages/DeleteAccountConfirm.js +5 -1
  66. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  67. package/login/pages/FrontchannelLogout.js +1 -1
  68. package/login/pages/FrontchannelLogout.js.map +1 -1
  69. package/login/pages/Login.js.map +1 -1
  70. package/login/pages/LoginRecoveryAuthnCodeConfig.js +3 -3
  71. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  72. package/login/pages/LoginResetPassword.js.map +1 -1
  73. package/login/pages/LoginUsername.js.map +1 -1
  74. package/login/pages/WebauthnAuthenticate.js +11 -8
  75. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  76. package/login/pages/WebauthnRegister.js +7 -7
  77. package/login/pages/WebauthnRegister.js.map +1 -1
  78. package/package.json +232 -226
  79. package/src/PUBLIC_URL.ts +4 -1
  80. package/src/account/Template.tsx +5 -5
  81. package/src/account/TemplateProps.ts +4 -1
  82. package/src/account/i18n/i18n.tsx +40 -30
  83. package/src/account/kcContext/KcContext.ts +4 -1
  84. package/src/account/kcContext/createGetKcContext.ts +48 -22
  85. package/src/account/kcContext/getKcContext.ts +3 -1
  86. package/src/account/kcContext/getKcContextFromWindow.ts +6 -2
  87. package/src/account/kcContext/kcContextMocks.ts +164 -160
  88. package/src/account/lib/useGetClassName.ts +15 -14
  89. package/src/account/pages/Account.tsx +2 -2
  90. package/src/account/pages/Password.tsx +8 -8
  91. package/src/account/pages/Totp.tsx +4 -6
  92. package/src/bin/copy-keycloak-resources-to-public.ts +2 -2
  93. package/src/bin/download-keycloak-default-theme.ts +30 -8
  94. package/src/bin/eject-page.ts +48 -11
  95. package/src/bin/initialize-email-theme.ts +25 -17
  96. package/src/bin/keycloakify/buildJars/buildJar.ts +179 -104
  97. package/src/bin/keycloakify/buildJars/buildJars.ts +35 -16
  98. package/src/bin/keycloakify/buildJars/extensionVersions.ts +2 -1
  99. package/src/bin/keycloakify/buildJars/generatePom.ts +11 -3
  100. package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +33 -8
  101. package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +20 -2
  102. package/src/bin/keycloakify/generateFtl/generateFtl.ts +49 -12
  103. package/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts +29 -18
  104. package/src/bin/keycloakify/generateSrcMainResources/generateMessageProperties.ts +35 -12
  105. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +3 -1
  106. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +86 -41
  107. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +39 -15
  108. package/src/bin/keycloakify/generateSrcMainResources/readExtraPageNames.ts +21 -7
  109. package/src/bin/keycloakify/generateSrcMainResources/readFieldNameUsage.ts +34 -7
  110. package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +19 -5
  111. package/src/bin/keycloakify/keycloakify.ts +28 -9
  112. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +24 -5
  113. package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +6 -2
  114. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +6 -3
  115. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +24 -6
  116. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +49 -11
  117. package/src/bin/main.ts +78 -41
  118. package/src/bin/shared/KeycloakVersionRange.ts +3 -1
  119. package/src/bin/shared/buildOptions.ts +70 -43
  120. package/src/bin/shared/constants.ts +4 -2
  121. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +27 -13
  122. package/src/bin/shared/downloadKeycloakDefaultTheme.ts +161 -218
  123. package/src/bin/shared/downloadKeycloakStaticResources.ts +25 -21
  124. package/src/bin/shared/getJarFileBasename.ts +3 -1
  125. package/src/bin/shared/getThemeSrcDirPath.ts +5 -2
  126. package/src/bin/shared/metaInfKeycloakThemes.ts +35 -8
  127. package/src/bin/shared/promptKeycloakVersion.ts +33 -14
  128. package/src/bin/start-keycloak/appBuild.ts +128 -0
  129. package/src/bin/start-keycloak/index.ts +1 -0
  130. package/src/bin/start-keycloak/keycloakifyBuild.ts +41 -0
  131. package/src/bin/start-keycloak/myrealm-realm-23.json +2142 -0
  132. package/src/bin/start-keycloak/myrealm-realm-24.json +2318 -0
  133. package/src/bin/start-keycloak/start-keycloak.ts +469 -0
  134. package/src/bin/tools/SemVer.ts +32 -13
  135. package/src/bin/tools/String.prototype.replaceAll.ts +9 -2
  136. package/src/bin/tools/crawl.ts +4 -1
  137. package/src/bin/tools/crc32.ts +42 -24
  138. package/src/bin/tools/downloadAndExtractArchive/downloadAndExtractArchive.ts +262 -0
  139. package/src/bin/tools/downloadAndExtractArchive/fetchProxyOptions.ts +96 -0
  140. package/src/bin/tools/downloadAndExtractArchive/index.ts +1 -0
  141. package/src/bin/tools/extractArchive.ts +132 -0
  142. package/src/bin/tools/fetchProxyOptions.ts +31 -8
  143. package/src/bin/tools/getAbsoluteAndInOsFormatPath.ts +10 -2
  144. package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +18 -5
  145. package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +8 -2
  146. package/src/bin/tools/octokit-addons/listTags.ts +15 -4
  147. package/src/bin/tools/partitionPromiseSettledResults.ts +12 -3
  148. package/src/bin/tools/readThisNpmPackageVersion.ts +5 -1
  149. package/src/bin/tools/transformCodebase.ts +29 -10
  150. package/src/bin/tools/trimIndent.ts +4 -1
  151. package/src/lib/isStorybook.ts +3 -1
  152. package/src/lib/useGetClassName.ts +12 -3
  153. package/src/login/Template.tsx +14 -14
  154. package/src/login/TemplateProps.ts +4 -1
  155. package/src/login/UserProfileFormFields.tsx +44 -42
  156. package/src/login/i18n/baseMessages/ca.ts +1 -1
  157. package/src/login/i18n/baseMessages/el.ts +0 -1
  158. package/src/login/i18n/baseMessages/en.ts +1 -1
  159. package/src/login/i18n/baseMessages/es.ts +1 -1
  160. package/src/login/i18n/baseMessages/fa.ts +0 -1
  161. package/src/login/i18n/baseMessages/hu.ts +1 -1
  162. package/src/login/i18n/baseMessages/zh-CN.ts +1 -1
  163. package/src/login/i18n/i18n.tsx +42 -32
  164. package/src/login/kcContext/KcContext.ts +8 -2
  165. package/src/login/kcContext/createGetKcContext.ts +84 -37
  166. package/src/login/kcContext/getKcContext.ts +3 -1
  167. package/src/login/kcContext/getKcContextFromWindow.ts +6 -2
  168. package/src/login/kcContext/kcContextMocks.ts +339 -325
  169. package/src/login/lib/useDownloadTerms.ts +6 -4
  170. package/src/login/lib/useGetClassName.ts +119 -112
  171. package/src/login/lib/useUserProfileForm.tsx +219 -205
  172. package/src/login/pages/DeleteAccountConfirm.tsx +9 -3
  173. package/src/login/pages/FrontchannelLogout.tsx +1 -1
  174. package/src/login/pages/Login.tsx +2 -2
  175. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +3 -3
  176. package/src/login/pages/LoginResetPassword.tsx +2 -2
  177. package/src/login/pages/LoginUsername.tsx +2 -2
  178. package/src/login/pages/WebauthnAuthenticate.tsx +11 -8
  179. package/src/login/pages/WebauthnRegister.tsx +7 -7
  180. package/src/tools/AndByDiscriminatingKey.ts +12 -6
  181. package/src/tools/Array.prototype.every.ts +4 -1
  182. package/src/tools/LazyOrNot.ts +3 -1
  183. package/src/tools/clsx.ts +7 -1
  184. package/src/tools/deepAssign.ts +15 -8
  185. package/src/tools/deepClone.ts +3 -1
  186. package/src/tools/formatNumber.ts +4 -1
  187. package/src/tools/useConstCallback.ts +3 -1
  188. package/src/tools/useInsertLinkTags.ts +20 -7
  189. package/src/tools/useInsertScriptTags.ts +7 -2
  190. package/src/tools/useSetClassName.ts +4 -1
  191. package/src/vite-plugin/vite-plugin.ts +45 -21
  192. package/tools/Array.prototype.every.js +2 -1
  193. package/tools/Array.prototype.every.js.map +1 -1
  194. package/tools/clsx.js.map +1 -1
  195. package/tools/deepAssign.js +9 -7
  196. package/tools/deepAssign.js.map +1 -1
  197. package/tools/deepClone.js.map +1 -1
  198. package/tools/formatNumber.js.map +1 -1
  199. package/tools/useConstCallback.js.map +1 -1
  200. package/tools/useInsertLinkTags.js +5 -4
  201. package/tools/useInsertLinkTags.js.map +1 -1
  202. package/tools/useInsertScriptTags.js +5 -2
  203. package/tools/useInsertScriptTags.js.map +1 -1
  204. package/tools/useSetClassName.js.map +1 -1
  205. package/vite-plugin/index.js +985 -1651
  206. package/src/bin/shared/downloadAndUnzip.ts +0 -203
  207. package/src/bin/start-keycloak.ts +0 -309
  208. package/src/bin/tools/unzip.ts +0 -141
@@ -7,19 +7,26 @@ import * as fs from "fs";
7
7
  import type { ReturnType } from "tsafe";
8
8
  import { id } from "tsafe/id";
9
9
 
10
- export async function promptKeycloakVersion(params: { startingFromMajor: number | undefined; cacheDirPath: string }) {
10
+ export async function promptKeycloakVersion(params: {
11
+ startingFromMajor: number | undefined;
12
+ cacheDirPath: string;
13
+ }) {
11
14
  const { startingFromMajor, cacheDirPath } = params;
12
15
 
13
16
  const { getLatestsSemVersionedTag } = (() => {
14
17
  const { octokit } = (() => {
15
18
  const githubToken = process.env.GITHUB_TOKEN;
16
19
 
17
- const octokit = new Octokit(githubToken === undefined ? undefined : { "auth": githubToken });
20
+ const octokit = new Octokit(
21
+ githubToken === undefined ? undefined : { auth: githubToken }
22
+ );
18
23
 
19
24
  return { octokit };
20
25
  })();
21
26
 
22
- const { getLatestsSemVersionedTag } = getLatestsSemVersionedTagFactory({ octokit });
27
+ const { getLatestsSemVersionedTag } = getLatestsSemVersionedTagFactory({
28
+ octokit
29
+ });
23
30
 
24
31
  return { getLatestsSemVersionedTag };
25
32
  })();
@@ -39,7 +46,9 @@ export async function promptKeycloakVersion(params: { startingFromMajor: number
39
46
  break use_cache;
40
47
  }
41
48
 
42
- const cache: Cache = JSON.parse(fs.readFileSync(cacheFilePath).toString("utf8"));
49
+ const cache: Cache = JSON.parse(
50
+ fs.readFileSync(cacheFilePath).toString("utf8")
51
+ );
43
52
 
44
53
  if (Date.now() - cache.time > 3_600_000) {
45
54
  fs.unlinkSync(cacheFilePath);
@@ -50,16 +59,16 @@ export async function promptKeycloakVersion(params: { startingFromMajor: number
50
59
  }
51
60
 
52
61
  const semVersionedTags = await getLatestsSemVersionedTag({
53
- "count": 50,
54
- "owner": "keycloak",
55
- "repo": "keycloak"
62
+ count: 50,
63
+ owner: "keycloak",
64
+ repo: "keycloak"
56
65
  });
57
66
 
58
67
  {
59
68
  const dirPath = pathDirname(cacheFilePath);
60
69
 
61
70
  if (!fs.existsSync(dirPath)) {
62
- fs.mkdirSync(dirPath, { "recursive": true });
71
+ fs.mkdirSync(dirPath, { recursive: true });
63
72
  }
64
73
  }
65
74
 
@@ -67,7 +76,7 @@ export async function promptKeycloakVersion(params: { startingFromMajor: number
67
76
  cacheFilePath,
68
77
  JSON.stringify(
69
78
  id<Cache>({
70
- "time": Date.now(),
79
+ time: Date.now(),
71
80
  semVersionedTags
72
81
  }),
73
82
  null,
@@ -79,23 +88,33 @@ export async function promptKeycloakVersion(params: { startingFromMajor: number
79
88
  })();
80
89
 
81
90
  semVersionedTags.forEach(semVersionedTag => {
82
- if (startingFromMajor !== undefined && semVersionedTag.version.major < startingFromMajor) {
91
+ if (
92
+ startingFromMajor !== undefined &&
93
+ semVersionedTag.version.major < startingFromMajor
94
+ ) {
83
95
  return;
84
96
  }
85
97
 
86
- const currentSemVersionedTag = semVersionedTagByMajor.get(semVersionedTag.version.major);
98
+ const currentSemVersionedTag = semVersionedTagByMajor.get(
99
+ semVersionedTag.version.major
100
+ );
87
101
 
88
- if (currentSemVersionedTag !== undefined && SemVer.compare(semVersionedTag.version, currentSemVersionedTag.version) === -1) {
102
+ if (
103
+ currentSemVersionedTag !== undefined &&
104
+ SemVer.compare(semVersionedTag.version, currentSemVersionedTag.version) === -1
105
+ ) {
89
106
  return;
90
107
  }
91
108
 
92
109
  semVersionedTagByMajor.set(semVersionedTag.version.major, semVersionedTag);
93
110
  });
94
111
 
95
- const lastMajorVersions = Array.from(semVersionedTagByMajor.values()).map(({ tag }) => tag);
112
+ const lastMajorVersions = Array.from(semVersionedTagByMajor.values()).map(
113
+ ({ tag }) => tag
114
+ );
96
115
 
97
116
  const { value } = await cliSelect<string>({
98
- "values": lastMajorVersions
117
+ values: lastMajorVersions
99
118
  }).catch(() => {
100
119
  process.exit(-1);
101
120
  });
@@ -0,0 +1,128 @@
1
+ import * as child_process from "child_process";
2
+ import { Deferred } from "evt/tools/Deferred";
3
+ import { assert } from "tsafe/assert";
4
+ import { is } from "tsafe/is";
5
+ import type { BuildOptions } from "../shared/buildOptions";
6
+ import * as fs from "fs";
7
+ import { join as pathJoin } from "path";
8
+
9
+ export type BuildOptionsLike = {
10
+ reactAppRootDirPath: string;
11
+ keycloakifyBuildDirPath: string;
12
+ bundler: "vite" | "webpack";
13
+ npmWorkspaceRootDirPath: string;
14
+ reactAppBuildDirPath: string;
15
+ };
16
+
17
+ assert<BuildOptions extends BuildOptionsLike ? true : false>();
18
+
19
+ export async function appBuild(params: {
20
+ doSkipIfReactAppBuildDirExists: boolean;
21
+ buildOptions: BuildOptionsLike;
22
+ }): Promise<{ isAppBuildSuccess: boolean }> {
23
+ const { doSkipIfReactAppBuildDirExists, buildOptions } = params;
24
+
25
+ if (
26
+ doSkipIfReactAppBuildDirExists &&
27
+ fs.existsSync(buildOptions.reactAppBuildDirPath)
28
+ ) {
29
+ return { isAppBuildSuccess: true };
30
+ }
31
+
32
+ const { bundler } = buildOptions;
33
+
34
+ const { command, args, cwd } = (() => {
35
+ switch (bundler) {
36
+ case "vite":
37
+ return {
38
+ command: "npx",
39
+ args: ["vite", "build"],
40
+ cwd: buildOptions.reactAppRootDirPath
41
+ };
42
+ case "webpack": {
43
+ for (const dirPath of [
44
+ buildOptions.reactAppRootDirPath,
45
+ buildOptions.npmWorkspaceRootDirPath
46
+ ]) {
47
+ try {
48
+ const parsedPackageJson = JSON.parse(
49
+ fs
50
+ .readFileSync(pathJoin(dirPath, "package.json"))
51
+ .toString("utf8")
52
+ );
53
+
54
+ const [scriptName] =
55
+ Object.entries(parsedPackageJson.scripts).find(
56
+ ([, scriptValue]) => {
57
+ assert(is<string>(scriptValue));
58
+ if (
59
+ scriptValue.includes("webpack") &&
60
+ scriptValue.includes("--mode production")
61
+ ) {
62
+ return true;
63
+ }
64
+
65
+ if (
66
+ scriptValue.includes("react-scripts") &&
67
+ scriptValue.includes("build")
68
+ ) {
69
+ return true;
70
+ }
71
+
72
+ if (
73
+ scriptValue.includes("react-app-rewired") &&
74
+ scriptValue.includes("build")
75
+ ) {
76
+ return true;
77
+ }
78
+
79
+ if (
80
+ scriptValue.includes("craco") &&
81
+ scriptValue.includes("build")
82
+ ) {
83
+ return true;
84
+ }
85
+ }
86
+ ) ?? [];
87
+
88
+ if (scriptName === undefined) {
89
+ continue;
90
+ }
91
+
92
+ return {
93
+ command: "npm",
94
+ args: ["run", scriptName],
95
+ cwd: dirPath
96
+ };
97
+ } catch {
98
+ continue;
99
+ }
100
+ }
101
+
102
+ throw new Error(
103
+ "Keycloakify was unable to determine which script is responsible for building the app."
104
+ );
105
+ }
106
+ }
107
+ })();
108
+
109
+ const dResult = new Deferred<{ isSuccess: boolean }>();
110
+
111
+ const child = child_process.spawn(command, args, { cwd });
112
+
113
+ child.stdout.on("data", data => {
114
+ if (data.toString("utf8").includes("gzip:")) {
115
+ return;
116
+ }
117
+
118
+ process.stdout.write(data);
119
+ });
120
+
121
+ child.stderr.on("data", data => process.stderr.write(data));
122
+
123
+ child.on("exit", code => dResult.resolve({ isSuccess: code === 0 }));
124
+
125
+ const { isSuccess } = await dResult.pr;
126
+
127
+ return { isAppBuildSuccess: isSuccess };
128
+ }
@@ -0,0 +1 @@
1
+ export * from "./start-keycloak";
@@ -0,0 +1,41 @@
1
+ import { skipBuildJarsEnvName } from "../shared/constants";
2
+ import * as child_process from "child_process";
3
+ import { Deferred } from "evt/tools/Deferred";
4
+ import { assert } from "tsafe/assert";
5
+ import type { BuildOptions } from "../shared/buildOptions";
6
+
7
+ export type BuildOptionsLike = {
8
+ reactAppRootDirPath: string;
9
+ keycloakifyBuildDirPath: string;
10
+ bundler: "vite" | "webpack";
11
+ npmWorkspaceRootDirPath: string;
12
+ };
13
+
14
+ assert<BuildOptions extends BuildOptionsLike ? true : false>();
15
+
16
+ export async function keycloakifyBuild(params: {
17
+ doSkipBuildJars: boolean;
18
+ buildOptions: BuildOptionsLike;
19
+ }): Promise<{ isKeycloakifyBuildSuccess: boolean }> {
20
+ const { buildOptions, doSkipBuildJars } = params;
21
+
22
+ const dResult = new Deferred<{ isSuccess: boolean }>();
23
+
24
+ const child = child_process.spawn("npx", ["keycloakify", "build"], {
25
+ cwd: buildOptions.reactAppRootDirPath,
26
+ env: {
27
+ ...process.env,
28
+ ...(doSkipBuildJars ? { [skipBuildJarsEnvName]: "true" } : {})
29
+ }
30
+ });
31
+
32
+ child.stdout.on("data", data => process.stdout.write(data));
33
+
34
+ child.stderr.on("data", data => process.stderr.write(data));
35
+
36
+ child.on("exit", code => dResult.resolve({ isSuccess: code === 0 }));
37
+
38
+ const { isSuccess } = await dResult.pr;
39
+
40
+ return { isKeycloakifyBuildSuccess: isSuccess };
41
+ }