UNPKG

@traf/turbo

Version:

A cli tool that wraps `@traf/core` to be used with Turborepo.

58 lines (56 loc) 1.93 kB
import { dirname as __dirname__ } from 'path';import { fileURLToPath } from 'url';import { createRequire as topLevelCreateRequire } from 'module';const require = topLevelCreateRequire(import.meta.url);const __filename = fileURLToPath(import.meta.url);const __dirname = __dirname__(__filename); // libs/turbo/src/turbo.ts import { dirname, join, relative, resolve } from "path"; import { parse } from "yaml"; import { readFile } from "fs/promises"; import { globby } from "globby"; import { existsSync } from "fs"; async function getWorkspaces(cwd) { const pnpmFile = resolve(cwd, "pnpm-workspace.yaml"); if (existsSync(pnpmFile)) { const workspace = parse(await readFile(pnpmFile, "utf-8")); return workspace.packages; } const pkgJson = JSON.parse( await readFile(resolve(cwd, "package.json"), "utf-8") ); return pkgJson.workspaces ?? []; } async function getTurboTrueAffectedProjects(cwd) { const workspaces = await getWorkspaces(cwd); const ignoredWorkspaces = workspaces.filter( (workspace) => workspace.startsWith("!") ); const staticIgnores = [ "node_modules", "**/node_modules", "dist", ".git", ...ignoredWorkspaces ]; const packageGlobPatterns = workspaces.filter((workspace) => !workspace.startsWith("!")).map((workspace) => { return join(workspace, "package.json"); }); const combinedPackageGlobPattern = `{${packageGlobPatterns.join(",")},}`; const files = await globby(combinedPackageGlobPattern, { ignore: staticIgnores, absolute: true, cwd, dot: true, suppressErrors: true, gitignore: true }); const projectFiles = []; for (const file of files) { const project = JSON.parse(await readFile(resolve(cwd, file), "utf-8")); projectFiles.push({ name: project.name, sourceRoot: relative(cwd, dirname(file)) }); } return projectFiles; } export { getTurboTrueAffectedProjects, getWorkspaces };