From 9b52955ff45bb48796694408cf16364a794dbf82 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 26 Aug 2024 15:25:18 -0700 Subject: [PATCH] feat: serializable return values --- .changeset/chilly-bottles-eat.md | 5 +++++ .changeset/chilly-moles-grow.md | 5 +++++ packages/find-root/src/index.ts | 10 +++++----- packages/get-packages/src/index.ts | 23 ++++++++++++++--------- packages/tools/src/Tool.ts | 2 +- 5 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 .changeset/chilly-bottles-eat.md create mode 100644 .changeset/chilly-moles-grow.md diff --git a/.changeset/chilly-bottles-eat.md b/.changeset/chilly-bottles-eat.md new file mode 100644 index 0000000..1b178d8 --- /dev/null +++ b/.changeset/chilly-bottles-eat.md @@ -0,0 +1,5 @@ +--- +"@manypkg/find-root": minor +--- + +feat: export DEFAULT_TOOLS diff --git a/.changeset/chilly-moles-grow.md b/.changeset/chilly-moles-grow.md new file mode 100644 index 0000000..445be77 --- /dev/null +++ b/.changeset/chilly-moles-grow.md @@ -0,0 +1,5 @@ +--- +"@manypkg/tools": major +--- + +feat: serializable return values diff --git a/packages/find-root/src/index.ts b/packages/find-root/src/index.ts index ef9ea87..2bca43a 100644 --- a/packages/find-root/src/index.ts +++ b/packages/find-root/src/index.ts @@ -20,7 +20,7 @@ import { * monorepo implementations first, with tools based on custom file schemas * checked last. */ -const DEFAULT_TOOLS: Tool[] = [ +export const DEFAULT_TOOLS: Tool[] = [ YarnTool, PnpmTool, LernaTool, @@ -83,7 +83,7 @@ export async function findRoot( tools.map(async (tool): Promise => { if (await tool.isMonorepoRoot(directory)) { return { - tool: tool, + tool: tool.type, rootDir: directory, }; } @@ -125,7 +125,7 @@ export async function findRoot( } return { - tool: RootTool, + tool: RootTool.type, rootDir, }; } @@ -144,7 +144,7 @@ export function findRootSync( for (const tool of tools) { if (tool.isMonorepoRootSync(directory)) { monorepoRoot = { - tool: tool, + tool: tool.type, rootDir: directory, }; return directory; @@ -173,7 +173,7 @@ export function findRootSync( } return { - tool: RootTool, + tool: RootTool.type, rootDir, }; } diff --git a/packages/get-packages/src/index.ts b/packages/get-packages/src/index.ts index 6807922..a3454ab 100644 --- a/packages/get-packages/src/index.ts +++ b/packages/get-packages/src/index.ts @@ -1,5 +1,10 @@ import path from "path"; -import { findRoot, findRootSync, FindRootOptions } from "@manypkg/find-root"; +import { + findRoot, + findRootSync, + FindRootOptions, + DEFAULT_TOOLS, +} from "@manypkg/find-root"; import { Packages, MonorepoRoot, Tool } from "@manypkg/tools"; export type { Tool, Package, Packages } from "@manypkg/tools"; @@ -36,12 +41,12 @@ export async function getPackages( options?: GetPackagesOptions ): Promise { const monorepoRoot: MonorepoRoot = await findRoot(dir, options); - const packages: Packages = await monorepoRoot.tool.getPackages( - monorepoRoot.rootDir - ); + const tools = options?.tools || DEFAULT_TOOLS; + const tool = tools.find((t) => t.type === monorepoRoot.tool); + if (!tool) throw new Error(`Could not find ${monorepoRoot.tool} tool`); + const packages: Packages = await tool.getPackages(monorepoRoot.rootDir); validatePackages(packages); - return packages; } @@ -53,12 +58,12 @@ export function getPackagesSync( options?: GetPackagesOptions ): Packages { const monorepoRoot: MonorepoRoot = findRootSync(dir, options); - const packages: Packages = monorepoRoot.tool.getPackagesSync( - monorepoRoot.rootDir - ); + const tools = options?.tools || DEFAULT_TOOLS; + const tool = tools.find((t) => t.type === monorepoRoot.tool); + if (!tool) throw new Error(`Could not find ${monorepoRoot.tool} tool`); + const packages: Packages = tool.getPackagesSync(monorepoRoot.rootDir); validatePackages(packages); - return packages; } diff --git a/packages/tools/src/Tool.ts b/packages/tools/src/Tool.ts index 724755c..4038930 100644 --- a/packages/tools/src/Tool.ts +++ b/packages/tools/src/Tool.ts @@ -97,7 +97,7 @@ export interface MonorepoRoot { /** * The underlying tool implementation for this monorepo. */ - tool: Tool; + tool: string; } /**