diff --git a/src/bin/shared/buildOptions.ts b/src/bin/shared/buildOptions.ts index a06af351..5b545720 100644 --- a/src/bin/shared/buildOptions.ts +++ b/src/bin/shared/buildOptions.ts @@ -163,7 +163,10 @@ export function readBuildOptions(params: { cliCommandOptions: CliCommandOptions return pathJoin(reactAppRootDirPath, resolvedViteConfig.buildDir); })(); - const { npmWorkspaceRootDirPath } = getNpmWorkspaceRootDirPath({ reactAppRootDirPath }); + const { npmWorkspaceRootDirPath } = getNpmWorkspaceRootDirPath({ + reactAppRootDirPath, + "dependencyExpected": "keycloakify" + }); return { "bundler": resolvedViteConfig !== undefined ? "vite" : "webpack", diff --git a/src/bin/tools/getNpmWorkspaceRootDirPath.ts b/src/bin/tools/getNpmWorkspaceRootDirPath.ts index e934a6fc..8bb46720 100644 --- a/src/bin/tools/getNpmWorkspaceRootDirPath.ts +++ b/src/bin/tools/getNpmWorkspaceRootDirPath.ts @@ -1,9 +1,10 @@ import * as child_process from "child_process"; import { join as pathJoin, resolve as pathResolve, sep as pathSep } from "path"; import { assert } from "tsafe/assert"; +import * as fs from "fs"; -export function getNpmWorkspaceRootDirPath(params: { reactAppRootDirPath: string }) { - const { reactAppRootDirPath } = params; +export function getNpmWorkspaceRootDirPath(params: { reactAppRootDirPath: string; dependencyExpected: string }) { + const { reactAppRootDirPath, dependencyExpected } = params; const npmWorkspaceRootDirPath = (function callee(depth: number): string { const cwd = pathResolve(pathJoin(...[reactAppRootDirPath, ...Array(depth).fill("..")])); @@ -20,6 +21,38 @@ export function getNpmWorkspaceRootDirPath(params: { reactAppRootDirPath: string throw error; } + const { isExpectedDependencyFound } = (() => { + const packageJsonFilePath = pathJoin(cwd, "package.json"); + + assert(fs.existsSync(packageJsonFilePath)); + + const parsedPackageJson = JSON.parse(fs.readFileSync(packageJsonFilePath).toString("utf8")); + + let isExpectedDependencyFound = false; + + for (const dependenciesOrDevDependencies of ["dependencies", "devDependencies"] as const) { + const dependencies = parsedPackageJson[dependenciesOrDevDependencies]; + + if (dependencies === undefined) { + continue; + } + + assert(dependencies instanceof Object); + + if (dependencies[dependencyExpected] === undefined) { + continue; + } + + isExpectedDependencyFound = true; + } + + return { isExpectedDependencyFound }; + })(); + + if (!isExpectedDependencyFound) { + return callee(depth + 1); + } + return cwd; })(0);