UNPKG

@storm-software/workspace-tools

Version:

Tools for managing a Storm workspace, including various Nx generators and executors for common development tasks.

80 lines (77 loc) 3.03 kB
import { ProjectTagConstants, getProjectTag } from "./chunk-AQ7B26V3.mjs"; // src/utils/plugin-helpers.ts import { readJsonFile } from "@nx/devkit"; import defu from "defu"; import { existsSync } from "node:fs"; import { dirname, join } from "node:path"; function getProjectPlatform(project, ignoreTags = false) { const tsconfigJson = readJsonFile(join(project.root, "tsconfig.json")); if (!tsconfigJson) { throw new Error(`No tsconfig.json found in project root: ${project.root}`); } const packageJson = readJsonFile(join(project.root, "package.json")); if (!packageJson) { throw new Error(`No package.json found in project root: ${project.root}`); } let platformTag = void 0; if (!ignoreTags) { platformTag = getProjectTag(project, ProjectTagConstants.Platform.TAG_ID); } if (platformTag !== ProjectTagConstants.Platform.NEUTRAL) { const types = Array.isArray(tsconfigJson.compilerOptions?.types) ? tsconfigJson.compilerOptions.types : []; if (platformTag === ProjectTagConstants.Platform.WORKER || types.some((type) => type.toLowerCase() === "@cloudflare/workers-types") || packageJson.devDependencies?.["@cloudflare/workers-types"] || packageJson.devDependencies?.["wrangler"]) { return "worker"; } if (platformTag === ProjectTagConstants.Platform.NODE || types?.some((type) => type.toLowerCase() === "node") || packageJson.devDependencies?.["@types/node"]) { return "node"; } if (platformTag === ProjectTagConstants.Platform.BROWSER || types?.some((type) => type.toLowerCase() === "dom") || packageJson.dependencies && Object.keys(packageJson.dependencies).some( (dependency) => dependency.includes("react") ) || packageJson.devDependencies && Object.keys(packageJson.devDependencies).some( (devDependency) => devDependency.includes("react") )) { return "browser"; } } return "neutral"; } function getProjectConfigFromProjectJsonPath(projectJsonPath, packageJson) { return getProjectConfigFromProjectRoot(dirname(projectJsonPath), packageJson); } function getProjectConfigFromProjectRoot(projectRoot, packageJson) { const { nx, name } = packageJson; const projectJson = readJsonFile(join(projectRoot, "project.json")); return defu(nx ?? {}, projectJson, { targets: {}, tags: [], name, root: projectRoot }); } function getProjectRoot(configPath, workspaceRoot) { try { const projectRoot = dirname(configPath); if (!existsSync(join(workspaceRoot, projectRoot, "package.json")) && !existsSync(join(workspaceRoot, projectRoot, "project.json"))) { return null; } return projectRoot; } catch (error_) { console.error(error_); return null; } } function getRoot(projectRoot, context) { return projectRoot.replaceAll("\\", "/").replace(context.workspaceRoot.replaceAll("\\", "/"), "").replace(/^\//g, "").replace(/\/$/g, ""); } export { getProjectPlatform, getProjectConfigFromProjectJsonPath, getProjectConfigFromProjectRoot, getProjectRoot, getRoot };