keycloakify 9.4.0-rc.9 → 9.4.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.
Files changed (103) hide show
  1. package/README.md +4 -0
  2. package/account/i18n/baseMessages/index.d.ts +358 -0
  3. package/account/i18n/baseMessages/index.js +2 -1
  4. package/account/i18n/baseMessages/index.js.map +1 -1
  5. package/account/pages/PageProps.d.ts +3 -2
  6. package/bin/constants.d.ts +1 -1
  7. package/bin/constants.js +1 -1
  8. package/bin/constants.js.map +1 -1
  9. package/bin/copy-keycloak-resources-to-public.d.ts +13 -1
  10. package/bin/copy-keycloak-resources-to-public.js +134 -68
  11. package/bin/copy-keycloak-resources-to-public.js.map +1 -1
  12. package/bin/download-builtin-keycloak-theme.d.ts +1 -0
  13. package/bin/download-builtin-keycloak-theme.js +2 -3
  14. package/bin/download-builtin-keycloak-theme.js.map +1 -1
  15. package/bin/{tools/downloadAndUnzip.d.ts → downloadAndUnzip.d.ts} +6 -6
  16. package/bin/downloadAndUnzip.js +255 -0
  17. package/bin/downloadAndUnzip.js.map +1 -0
  18. package/bin/eject-keycloak-page.js +6 -3
  19. package/bin/eject-keycloak-page.js.map +1 -1
  20. package/bin/keycloakify/buildOptions/buildOptions.d.ts +1 -0
  21. package/bin/keycloakify/buildOptions/buildOptions.js +54 -39
  22. package/bin/keycloakify/buildOptions/buildOptions.js.map +1 -1
  23. package/bin/keycloakify/buildOptions/getCacheDirPath.d.ts +5 -0
  24. package/bin/keycloakify/buildOptions/getCacheDirPath.js +22 -0
  25. package/bin/keycloakify/buildOptions/getCacheDirPath.js.map +1 -0
  26. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.d.ts +5 -0
  27. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js +86 -0
  28. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js.map +1 -0
  29. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.d.ts +5 -0
  30. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js +26 -0
  31. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js.map +1 -0
  32. package/bin/keycloakify/buildOptions/resolvedViteConfig.d.ts +3 -4
  33. package/bin/keycloakify/buildOptions/resolvedViteConfig.js +4 -11
  34. package/bin/keycloakify/buildOptions/resolvedViteConfig.js.map +1 -1
  35. package/bin/keycloakify/generateTheme/bringInAccountV1.d.ts +1 -0
  36. package/bin/keycloakify/generateTheme/bringInAccountV1.js.map +1 -1
  37. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.d.ts +1 -0
  38. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js.map +1 -1
  39. package/bin/keycloakify/generateTheme/generateTheme.d.ts +1 -0
  40. package/bin/keycloakify/generateTheme/generateTheme.js +7 -3
  41. package/bin/keycloakify/generateTheme/generateTheme.js.map +1 -1
  42. package/bin/keycloakify/keycloakify.js +8 -12
  43. package/bin/keycloakify/keycloakify.js.map +1 -1
  44. package/bin/tools/fetchProxyOptions.d.ts +5 -0
  45. package/bin/tools/fetchProxyOptions.js +172 -0
  46. package/bin/tools/fetchProxyOptions.js.map +1 -0
  47. package/bin/tools/fs.existsAsync.d.ts +1 -0
  48. package/bin/tools/fs.existsAsync.js +86 -0
  49. package/bin/tools/fs.existsAsync.js.map +1 -0
  50. package/bin/tools/getThisCodebaseRootDirPath.d.ts +1 -0
  51. package/bin/tools/{getProjectRoot.js → getThisCodebaseRootDirPath.js} +7 -7
  52. package/bin/tools/getThisCodebaseRootDirPath.js.map +1 -0
  53. package/bin/tools/grant-exec-perms.js +6 -4
  54. package/bin/tools/grant-exec-perms.js.map +1 -1
  55. package/bin/tools/readThisNpmProjectVersion.d.ts +1 -0
  56. package/bin/tools/readThisNpmProjectVersion.js +37 -0
  57. package/bin/tools/readThisNpmProjectVersion.js.map +1 -0
  58. package/lib/isStorybook.js +1 -2
  59. package/lib/isStorybook.js.map +1 -1
  60. package/login/i18n/baseMessages/index.d.ts +458 -0
  61. package/login/i18n/baseMessages/index.js +2 -1
  62. package/login/i18n/baseMessages/index.js.map +1 -1
  63. package/login/pages/PageProps.d.ts +3 -2
  64. package/package.json +41 -19
  65. package/src/account/i18n/baseMessages/index.ts +2 -1
  66. package/src/account/pages/PageProps.ts +3 -2
  67. package/src/bin/constants.ts +1 -1
  68. package/src/bin/copy-keycloak-resources-to-public.ts +75 -9
  69. package/src/bin/download-builtin-keycloak-theme.ts +3 -3
  70. package/src/bin/downloadAndUnzip.ts +203 -0
  71. package/src/bin/eject-keycloak-page.ts +6 -3
  72. package/src/bin/keycloakify/buildOptions/buildOptions.ts +28 -39
  73. package/src/bin/keycloakify/buildOptions/getCacheDirPath.ts +25 -0
  74. package/src/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.ts +49 -0
  75. package/src/bin/keycloakify/buildOptions/getReactAppRootDirPath.ts +23 -0
  76. package/src/bin/keycloakify/buildOptions/resolvedViteConfig.ts +7 -21
  77. package/src/bin/keycloakify/generateTheme/bringInAccountV1.ts +1 -0
  78. package/src/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.ts +1 -0
  79. package/src/bin/keycloakify/generateTheme/generateTheme.ts +9 -2
  80. package/src/bin/keycloakify/keycloakify.ts +8 -14
  81. package/src/bin/tools/fetchProxyOptions.ts +73 -0
  82. package/src/bin/tools/fs.existsAsync.ts +11 -0
  83. package/src/bin/tools/{getProjectRoot.ts → getThisCodebaseRootDirPath.ts} +4 -4
  84. package/src/bin/tools/grant-exec-perms.ts +5 -3
  85. package/src/bin/tools/readThisNpmProjectVersion.ts +12 -0
  86. package/src/lib/isStorybook.ts +1 -3
  87. package/src/login/i18n/baseMessages/index.ts +2 -1
  88. package/src/login/pages/PageProps.ts +3 -2
  89. package/src/vite-plugin/vite-plugin.ts +48 -25
  90. package/vite-plugin/tsconfig.tsbuildinfo +1 -1
  91. package/vite-plugin/vite-plugin.d.ts +1 -2
  92. package/vite-plugin/vite-plugin.js +35 -20
  93. package/vite-plugin/vite-plugin.js.map +1 -1
  94. package/bin/keycloakify/buildOptions/getKeycloakifyBuildDirPath.d.ts +0 -7
  95. package/bin/keycloakify/buildOptions/getKeycloakifyBuildDirPath.js +0 -27
  96. package/bin/keycloakify/buildOptions/getKeycloakifyBuildDirPath.js.map +0 -1
  97. package/bin/tools/downloadAndUnzip.js +0 -445
  98. package/bin/tools/downloadAndUnzip.js.map +0 -1
  99. package/bin/tools/getProjectRoot.d.ts +0 -1
  100. package/bin/tools/getProjectRoot.js.map +0 -1
  101. package/src/bin/keycloakify/buildOptions/getKeycloakifyBuildDirPath.ts +0 -33
  102. package/src/bin/tools/downloadAndUnzip.ts +0 -301
  103. package/src/vite-plugin/config.json +0 -232
@@ -1,301 +0,0 @@
1
- import { exec as execCallback } from "child_process";
2
- import { createHash } from "crypto";
3
- import { mkdir, readFile, stat, writeFile, unlink } from "fs/promises";
4
- import fetch, { type FetchOptions } from "make-fetch-happen";
5
- import { dirname as pathDirname, join as pathJoin, resolve as pathResolve, sep as pathSep, basename as pathBasename } from "path";
6
- import { assert } from "tsafe/assert";
7
- import { promisify } from "util";
8
- import { transformCodebase } from "./transformCodebase";
9
- import { unzip, zip } from "./unzip";
10
- import { rm } from "../tools/fs.rm";
11
- import * as child_process from "child_process";
12
-
13
- const exec = promisify(execCallback);
14
-
15
- function generateFileNameFromURL(params: {
16
- url: string;
17
- preCacheTransform:
18
- | {
19
- actionCacheId: string;
20
- actionFootprint: string;
21
- }
22
- | undefined;
23
- }): string {
24
- const { preCacheTransform } = params;
25
-
26
- // Parse the URL
27
- const url = new URL(params.url);
28
-
29
- // Extract pathname and remove leading slashes
30
- let fileName = url.pathname.replace(/^\//, "").replace(/\//g, "_");
31
-
32
- // Optionally, add query parameters replacing special characters
33
- if (url.search) {
34
- fileName += url.search.replace(/[&=?]/g, "-");
35
- }
36
-
37
- // Replace any characters that are not valid in filenames
38
- fileName = fileName.replace(/[^a-zA-Z0-9-_]/g, "");
39
-
40
- // Trim or pad the fileName to a specific length
41
- fileName = fileName.substring(0, 50);
42
-
43
- add_pre_cache_transform: {
44
- if (preCacheTransform === undefined) {
45
- break add_pre_cache_transform;
46
- }
47
-
48
- // Sanitize actionCacheId the same way as other components
49
- const sanitizedActionCacheId = preCacheTransform.actionCacheId.replace(/[^a-zA-Z0-9-_]/g, "_");
50
-
51
- fileName += `_${sanitizedActionCacheId}_${createHash("sha256").update(preCacheTransform.actionFootprint).digest("hex").substring(0, 5)}`;
52
- }
53
-
54
- return fileName;
55
- }
56
-
57
- async function exists(path: string) {
58
- try {
59
- await stat(path);
60
- return true;
61
- } catch (error) {
62
- if ((error as Error & { code: string }).code === "ENOENT") return false;
63
- throw error;
64
- }
65
- }
66
-
67
- function ensureArray<T>(arg0: T | T[]) {
68
- return Array.isArray(arg0) ? arg0 : typeof arg0 === "undefined" ? [] : [arg0];
69
- }
70
-
71
- function ensureSingleOrNone<T>(arg0: T | T[]) {
72
- if (!Array.isArray(arg0)) return arg0;
73
- if (arg0.length === 0) return undefined;
74
- if (arg0.length === 1) return arg0[0];
75
- throw new Error("Illegal configuration, expected a single value but found multiple: " + arg0.map(String).join(", "));
76
- }
77
-
78
- type NPMConfig = Record<string, string | string[]>;
79
-
80
- const npmConfigReducer = (cfg: NPMConfig, [key, value]: [string, string]) =>
81
- key in cfg ? { ...cfg, [key]: [...ensureArray(cfg[key]), value] } : { ...cfg, [key]: value };
82
-
83
- /**
84
- * Get npm configuration as map
85
- */
86
- async function getNmpConfig() {
87
- return readNpmConfig().then(parseNpmConfig);
88
- }
89
-
90
- function readNpmConfig(): Promise<string> {
91
- return (async function callee(depth: number): Promise<string> {
92
- const cwd = pathResolve(pathJoin(...[process.cwd(), ...Array(depth).fill("..")]));
93
-
94
- let stdout: string;
95
-
96
- try {
97
- stdout = await exec("npm config get", { "encoding": "utf8", cwd }).then(({ stdout }) => stdout);
98
- } catch (error) {
99
- if (String(error).includes("ENOWORKSPACES")) {
100
- assert(cwd !== pathSep);
101
-
102
- return callee(depth + 1);
103
- }
104
-
105
- throw error;
106
- }
107
-
108
- return stdout;
109
- })(0);
110
- }
111
-
112
- function parseNpmConfig(stdout: string) {
113
- return stdout
114
- .split("\n")
115
- .filter(line => !line.startsWith(";"))
116
- .map(line => line.trim())
117
- .map(line => line.split("=", 2) as [string, string])
118
- .reduce(npmConfigReducer, {} as NPMConfig);
119
- }
120
-
121
- function maybeBoolean(arg0: string | undefined) {
122
- return typeof arg0 === "undefined" ? undefined : Boolean(arg0);
123
- }
124
-
125
- function chunks<T>(arr: T[], size: number = 2) {
126
- return arr.map((_, i) => i % size == 0 && arr.slice(i, i + size)).filter(Boolean) as T[][];
127
- }
128
-
129
- async function readCafile(cafile: string) {
130
- const cafileContent = await readFile(cafile, "utf-8");
131
- return chunks(cafileContent.split(/(-----END CERTIFICATE-----)/), 2).map(ca => ca.join("").replace(/^\n/, "").replace(/\n/g, "\\n"));
132
- }
133
-
134
- /**
135
- * Get proxy and ssl configuration from npm config files. Note that we don't care about
136
- * proxy config in env vars, because make-fetch-happen will do that for us.
137
- *
138
- * @returns proxy configuration
139
- */
140
- async function getFetchOptions(): Promise<Pick<FetchOptions, "proxy" | "noProxy" | "strictSSL" | "ca" | "cert">> {
141
- const cfg = await getNmpConfig();
142
-
143
- const proxy = ensureSingleOrNone(cfg["https-proxy"] ?? cfg["proxy"]);
144
- const noProxy = cfg["noproxy"] ?? cfg["no-proxy"];
145
- const strictSSL = maybeBoolean(ensureSingleOrNone(cfg["strict-ssl"]));
146
- const cert = cfg["cert"];
147
- const ca = ensureArray(cfg["ca"] ?? cfg["ca[]"]);
148
- const cafile = ensureSingleOrNone(cfg["cafile"]);
149
-
150
- if (typeof cafile !== "undefined" && cafile !== "null") ca.push(...(await readCafile(cafile)));
151
-
152
- return { proxy, noProxy, strictSSL, cert, ca: ca.length === 0 ? undefined : ca };
153
- }
154
-
155
- export async function downloadAndUnzip(
156
- params: {
157
- url: string;
158
- destDirPath: string;
159
- specificDirsToExtract?: string[];
160
- preCacheTransform?: {
161
- actionCacheId: string;
162
- action: (params: { destDirPath: string }) => Promise<void>;
163
- };
164
- } & (
165
- | {
166
- doUseCache: true;
167
- cacheDirPath: string;
168
- }
169
- | {
170
- doUseCache: false;
171
- }
172
- )
173
- ) {
174
- const { url, destDirPath, specificDirsToExtract, preCacheTransform, ...rest } = params;
175
-
176
- const zipFileBasename = generateFileNameFromURL({
177
- url,
178
- "preCacheTransform":
179
- preCacheTransform === undefined
180
- ? undefined
181
- : {
182
- "actionCacheId": preCacheTransform.actionCacheId,
183
- "actionFootprint": preCacheTransform.action.toString()
184
- }
185
- });
186
-
187
- const cacheDirPath = !rest.doUseCache ? `tmp_${Math.random().toString().slice(2, 12)}` : rest.cacheDirPath;
188
-
189
- const zipFilePath = pathJoin(cacheDirPath, `${zipFileBasename}.zip`);
190
- const extractDirPath = pathJoin(cacheDirPath, `tmp_unzip_${zipFileBasename}`);
191
-
192
- download_zip_and_transform: {
193
- if (await exists(zipFilePath)) {
194
- break download_zip_and_transform;
195
- }
196
-
197
- const opts = await getFetchOptions();
198
-
199
- const { response, isFromRemoteCache } = await (async () => {
200
- const response = await fetch(`https://github.com/keycloakify/keycloakify/releases/download/v0.0.1/${pathBasename(zipFilePath)}`, opts);
201
-
202
- if (response.status === 200) {
203
- return {
204
- response,
205
- "isFromRemoteCache": true
206
- };
207
- }
208
-
209
- return {
210
- "response": await fetch(url, opts),
211
- "isFromRemoteCache": false
212
- };
213
- })();
214
-
215
- await mkdir(pathDirname(zipFilePath), { "recursive": true });
216
-
217
- /**
218
- * The correct way to fix this is to upgrade node-fetch beyond 3.2.5
219
- * (see https://github.com/node-fetch/node-fetch/issues/1295#issuecomment-1144061991.)
220
- * Unfortunately, octokit (a dependency of keycloakify) also uses node-fetch, and
221
- * does not support node-fetch 3.x. So we stick around with this band-aid until
222
- * octokit upgrades.
223
- */
224
- response.body?.setMaxListeners(Number.MAX_VALUE);
225
- assert(typeof response.body !== "undefined" && response.body != null);
226
-
227
- await writeFile(zipFilePath, response.body);
228
-
229
- if (isFromRemoteCache) {
230
- break download_zip_and_transform;
231
- }
232
-
233
- if (specificDirsToExtract === undefined && preCacheTransform === undefined) {
234
- break download_zip_and_transform;
235
- }
236
-
237
- await unzip(zipFilePath, extractDirPath, specificDirsToExtract);
238
-
239
- try {
240
- await preCacheTransform?.action({
241
- "destDirPath": extractDirPath
242
- });
243
- } catch (error) {
244
- await Promise.all([rm(extractDirPath, { "recursive": true }), unlink(zipFilePath)]);
245
-
246
- throw error;
247
- }
248
-
249
- await unlink(zipFilePath);
250
-
251
- await zip(extractDirPath, zipFilePath);
252
-
253
- await rm(extractDirPath, { "recursive": true });
254
-
255
- upload_to_remot_cache_if_admin: {
256
- const githubToken = process.env["KEYCLOAKIFY_ADMIN_GITHUB_PERSONAL_ACCESS_TOKEN"];
257
-
258
- if (githubToken === undefined) {
259
- break upload_to_remot_cache_if_admin;
260
- }
261
-
262
- console.log("uploading to remote cache");
263
-
264
- try {
265
- child_process.execSync(`which putasset`);
266
- } catch {
267
- child_process.execSync(`npm install -g putasset`);
268
- }
269
-
270
- try {
271
- child_process.execFileSync("putasset", [
272
- "--owner",
273
- "keycloakify",
274
- "--repo",
275
- "keycloakify",
276
- "--tag",
277
- "v0.0.1",
278
- "--filename",
279
- zipFilePath,
280
- "--token",
281
- githubToken
282
- ]);
283
- } catch {
284
- console.log("upload failed, asset probably already exists in remote cache");
285
- }
286
- }
287
- }
288
-
289
- await unzip(zipFilePath, extractDirPath);
290
-
291
- transformCodebase({
292
- "srcDirPath": extractDirPath,
293
- "destDirPath": destDirPath
294
- });
295
-
296
- if (!rest.doUseCache) {
297
- await rm(cacheDirPath, { "recursive": true });
298
- } else {
299
- await rm(extractDirPath, { "recursive": true });
300
- }
301
- }
@@ -1,232 +0,0 @@
1
- {
2
- "plugins": [
3
- {
4
- "name": "vite:build-metadata"
5
- },
6
- {
7
- "name": "vite:watch-package-data"
8
- },
9
- {
10
- "name": "vite:pre-alias"
11
- },
12
- {
13
- "name": "alias"
14
- },
15
- {
16
- "name": "vite:react-babel",
17
- "enforce": "pre"
18
- },
19
- {
20
- "name": "vite:react-refresh",
21
- "enforce": "pre"
22
- },
23
- {
24
- "name": "vite:modulepreload-polyfill"
25
- },
26
- {
27
- "name": "vite:resolve"
28
- },
29
- {
30
- "name": "vite:html-inline-proxy"
31
- },
32
- {
33
- "name": "vite:css"
34
- },
35
- {
36
- "name": "vite:esbuild"
37
- },
38
- {
39
- "name": "vite:json"
40
- },
41
- {
42
- "name": "vite:wasm-helper"
43
- },
44
- {
45
- "name": "vite:worker"
46
- },
47
- {
48
- "name": "vite:asset"
49
- },
50
- {
51
- "name": "vite-plugin-commonjs"
52
- },
53
- {
54
- "name": "keycloakify"
55
- },
56
- {
57
- "name": "vite:wasm-fallback"
58
- },
59
- {
60
- "name": "vite:define"
61
- },
62
- {
63
- "name": "vite:css-post"
64
- },
65
- {
66
- "name": "vite:build-html"
67
- },
68
- {
69
- "name": "vite:worker-import-meta-url"
70
- },
71
- {
72
- "name": "vite:asset-import-meta-url"
73
- },
74
- {
75
- "name": "vite:force-systemjs-wrap-complete"
76
- },
77
- {
78
- "name": "commonjs",
79
- "version": "25.0.7"
80
- },
81
- {
82
- "name": "vite:data-uri"
83
- },
84
- {
85
- "name": "vite:dynamic-import-vars"
86
- },
87
- {
88
- "name": "vite:import-glob"
89
- },
90
- {
91
- "name": "vite:build-import-analysis"
92
- },
93
- {
94
- "name": "vite:esbuild-transpile"
95
- },
96
- {
97
- "name": "vite:terser"
98
- },
99
- {
100
- "name": "vite:reporter"
101
- },
102
- {
103
- "name": "vite:load-fallback"
104
- }
105
- ],
106
- "optimizeDeps": {
107
- "disabled": "build",
108
- "esbuildOptions": {
109
- "preserveSymlinks": false,
110
- "jsx": "automatic",
111
- "plugins": [
112
- {
113
- "name": "vite-plugin-commonjs:pre-bundle"
114
- }
115
- ]
116
- },
117
- "include": ["react", "react/jsx-dev-runtime", "react/jsx-runtime"]
118
- },
119
- "build": {
120
- "target": ["es2020", "edge88", "firefox78", "chrome87", "safari14"],
121
- "cssTarget": ["es2020", "edge88", "firefox78", "chrome87", "safari14"],
122
- "outDir": "dist",
123
- "assetsDir": "assets",
124
- "assetsInlineLimit": 4096,
125
- "cssCodeSplit": true,
126
- "sourcemap": false,
127
- "rollupOptions": {},
128
- "minify": "esbuild",
129
- "terserOptions": {},
130
- "write": true,
131
- "emptyOutDir": null,
132
- "copyPublicDir": true,
133
- "manifest": false,
134
- "lib": false,
135
- "ssr": false,
136
- "ssrManifest": false,
137
- "ssrEmitAssets": false,
138
- "reportCompressedSize": true,
139
- "chunkSizeWarningLimit": 500,
140
- "watch": null,
141
- "commonjsOptions": {
142
- "include": [{}],
143
- "extensions": [".js", ".cjs"]
144
- },
145
- "dynamicImportVarsOptions": {
146
- "warnOnError": true,
147
- "exclude": [{}]
148
- },
149
- "modulePreload": {
150
- "polyfill": true
151
- },
152
- "cssMinify": true
153
- },
154
- "esbuild": {
155
- "jsxDev": false,
156
- "jsx": "automatic"
157
- },
158
- "resolve": {
159
- "mainFields": ["browser", "module", "jsnext:main", "jsnext"],
160
- "conditions": [],
161
- "extensions": [".mjs", ".js", ".mts", ".ts", ".jsx", ".tsx", ".json"],
162
- "dedupe": ["react", "react-dom"],
163
- "preserveSymlinks": false,
164
- "alias": [
165
- {
166
- "find": {},
167
- "replacement": "/@fs/Users/joseph/github/keycloakify-starter/node_modules/vite/dist/client/env.mjs"
168
- },
169
- {
170
- "find": {},
171
- "replacement": "/@fs/Users/joseph/github/keycloakify-starter/node_modules/vite/dist/client/client.mjs"
172
- }
173
- ]
174
- },
175
- "configFile": "/Users/joseph/github/keycloakify-starter/vite.config.ts",
176
- "configFileDependencies": ["/Users/joseph/github/keycloakify-starter/vite.config.ts"],
177
- "inlineConfig": {
178
- "optimizeDeps": {},
179
- "build": {}
180
- },
181
- "root": "/Users/joseph/github/keycloakify-starter",
182
- "base": "/",
183
- "rawBase": "/",
184
- "publicDir": "/Users/joseph/github/keycloakify-starter/public",
185
- "cacheDir": "/Users/joseph/github/keycloakify-starter/node_modules/.vite",
186
- "command": "build",
187
- "mode": "production",
188
- "ssr": {
189
- "target": "node",
190
- "optimizeDeps": {
191
- "disabled": true,
192
- "esbuildOptions": {
193
- "preserveSymlinks": false
194
- }
195
- }
196
- },
197
- "isWorker": false,
198
- "mainConfig": null,
199
- "isProduction": true,
200
- "css": {},
201
- "server": {
202
- "preTransformRequests": true,
203
- "middlewareMode": false,
204
- "fs": {
205
- "strict": true,
206
- "allow": ["/Users/joseph/github/keycloakify-starter"],
207
- "deny": [".env", ".env.*", "*.{crt,pem}"],
208
- "cachedChecks": false
209
- }
210
- },
211
- "preview": {},
212
- "envDir": "/Users/joseph/github/keycloakify-starter",
213
- "env": {
214
- "BASE_URL": "/",
215
- "MODE": "production",
216
- "DEV": false,
217
- "PROD": true
218
- },
219
- "logger": {
220
- "hasWarned": false
221
- },
222
- "packageCache": {},
223
- "worker": {
224
- "format": "iife",
225
- "rollupOptions": {}
226
- },
227
- "appType": "spa",
228
- "experimental": {
229
- "importGlobRestoreExtension": false,
230
- "hmrPartialAccept": false
231
- }
232
- }