diff --git a/packages/create-turbo/src/transforms/official-starter.ts b/packages/create-turbo/src/transforms/official-starter.ts index e5af370453c5c..678bcc89a1b63 100644 --- a/packages/create-turbo/src/transforms/official-starter.ts +++ b/packages/create-turbo/src/transforms/official-starter.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync, writeJsonSync, rmSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import type { PackageJson } from "@turbo/utils"; import { isDefaultExample } from "../utils/isDefaultExample"; import type { TransformInput, TransformResult, MetaJson } from "./types"; @@ -30,14 +30,14 @@ export async function transform(args: TransformInput): TransformResult { // paths const rootPackageJsonPath = path.join(prompts.root, "package.json"); const rootMetaJsonPath = path.join(prompts.root, "meta.json"); - const hasPackageJson = existsSync(rootPackageJsonPath); + const hasPackageJson = fs.existsSync(rootPackageJsonPath); let metaJson: MetaJson | undefined; // 1. remove meta file (used for generating the examples page on turbo.build) try { - metaJson = readJsonSync(rootMetaJsonPath) as MetaJson; - rmSync(rootMetaJsonPath, { force: true }); + metaJson = fs.readJsonSync(rootMetaJsonPath) as MetaJson; + fs.rmSync(rootMetaJsonPath, { force: true }); } catch (_err) { // do nothing } @@ -45,7 +45,7 @@ export async function transform(args: TransformInput): TransformResult { if (hasPackageJson) { let packageJsonContent; try { - packageJsonContent = readJsonSync(rootPackageJsonPath) as + packageJsonContent = fs.readJsonSync(rootPackageJsonPath) as | PackageJson | undefined; } catch { @@ -75,7 +75,7 @@ export async function transform(args: TransformInput): TransformResult { } try { - writeJsonSync(rootPackageJsonPath, packageJsonContent, { + fs.writeJsonSync(rootPackageJsonPath, packageJsonContent, { spaces: 2, }); } catch (err) { diff --git a/packages/create-turbo/src/transforms/pnpm-eslint.ts b/packages/create-turbo/src/transforms/pnpm-eslint.ts index ce5a2f9446bdf..60426776a7b1e 100644 --- a/packages/create-turbo/src/transforms/pnpm-eslint.ts +++ b/packages/create-turbo/src/transforms/pnpm-eslint.ts @@ -1,4 +1,4 @@ -import { writeJson, mkdir } from "fs-extra"; +import fs from "fs-extra"; import type { TransformInput, TransformResult } from "./types"; const meta = { @@ -15,9 +15,9 @@ export async function transform(args: TransformInput): TransformResult { if (packageManager?.name === "pnpm") { // write the settings directory - await mkdir(`${project.paths.root}/.vscode`, { recursive: true }); + await fs.mkdir(`${project.paths.root}/.vscode`, { recursive: true }); // write .vscode settings =- required for eslint plugin for work with pnpm workspaces - await writeJson( + await fs.writeJson( `${project.paths.root}/.vscode/settings.json`, VSCODE_ESLINT_CONFIG, { diff --git a/packages/eslint-config/library.js b/packages/eslint-config/library.js index 04882e6e3d938..a03e15eff9175 100644 --- a/packages/eslint-config/library.js +++ b/packages/eslint-config/library.js @@ -26,6 +26,7 @@ module.exports = { "error", { peerDependencies: true, includeTypes: true }, ], + "import/no-named-as-default-member": ["off"], }, overrides: [ { diff --git a/packages/turbo-benchmark/src/index.ts b/packages/turbo-benchmark/src/index.ts index 0862726730e87..3b3dbf51ad338 100644 --- a/packages/turbo-benchmark/src/index.ts +++ b/packages/turbo-benchmark/src/index.ts @@ -10,7 +10,7 @@ import { writeSync, } from "node:fs"; import path from "node:path"; -import { copySync } from "fs-extra"; +import fs from "fs-extra"; import { stringify } from "ndjson"; import { DEFAULT_EXEC_OPTS, @@ -99,7 +99,7 @@ function saveCache() { } // copy the current cache to the backup if (existsSync(DEFAULT_CACHE_PATH)) { - copySync(DEFAULT_CACHE_PATH, ALT_CACHE_PATH, { recursive: true }); + fs.copySync(DEFAULT_CACHE_PATH, ALT_CACHE_PATH, { recursive: true }); } else { // make an empty cache mkdirSync(ALT_CACHE_PATH, { recursive: true }); @@ -112,7 +112,7 @@ function restoreSavedCache() { rmSync(DEFAULT_CACHE_PATH, { recursive: true }); } // Copy the backed-up cache to the real cache - copySync(ALT_CACHE_PATH, DEFAULT_CACHE_PATH, { recursive: true }); + fs.copySync(ALT_CACHE_PATH, DEFAULT_CACHE_PATH, { recursive: true }); } function cachedBuildWithDelta(): Array { diff --git a/packages/turbo-codemod/src/commands/migrate/steps/getTurboUpgradeCommand.ts b/packages/turbo-codemod/src/commands/migrate/steps/getTurboUpgradeCommand.ts index e689a76ba46aa..850f0be59d603 100644 --- a/packages/turbo-codemod/src/commands/migrate/steps/getTurboUpgradeCommand.ts +++ b/packages/turbo-codemod/src/commands/migrate/steps/getTurboUpgradeCommand.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { gte } from "semver"; import { getAvailablePackageManagers, @@ -94,12 +94,12 @@ function getLocalUpgradeCommand({ function getInstallType({ root }: { root: string }): InstallType | undefined { // read package.json to make sure we have a reference to turbo const packageJsonPath = path.join(root, "package.json"); - if (!existsSync(packageJsonPath)) { + if (!fs.existsSync(packageJsonPath)) { logger.error(`Unable to find package.json at ${packageJsonPath}`); return undefined; } - const packageJson = readJsonSync(packageJsonPath) as PackageJson; + const packageJson = fs.readJsonSync(packageJsonPath) as PackageJson; const isDevDependency = packageJson.devDependencies && "turbo" in packageJson.devDependencies; const isDependency = @@ -126,7 +126,7 @@ export async function getTurboUpgradeCommand({ project: Project; to?: string; }) { - const turboBinaryPathFromGlobal = exec(`turbo bin`, { + const turboBinaryPathFromGlobal = exec("turbo bin", { cwd: project.paths.root, stdio: "pipe", }); diff --git a/packages/turbo-codemod/src/transforms/add-package-manager.ts b/packages/turbo-codemod/src/transforms/add-package-manager.ts index ef950782e45de..58dfbc54d1980 100644 --- a/packages/turbo-codemod/src/transforms/add-package-manager.ts +++ b/packages/turbo-codemod/src/transforms/add-package-manager.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync } from "fs-extra"; +import fs from "fs-extra"; import { getWorkspaceDetails, type Project } from "@turbo/workspaces"; import { type PackageJson, getAvailablePackageManagers } from "@turbo/utils"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; @@ -22,7 +22,7 @@ export async function transformer({ }); const rootPackageJsonPath = path.join(root, "package.json"); - const rootPackageJson = readJsonSync(rootPackageJsonPath) as PackageJson; + const rootPackageJson = fs.readJsonSync(rootPackageJsonPath) as PackageJson; if ("packageManager" in rootPackageJson) { log.info(`"packageManager" already set in root "package.json"`); return runner.finish(); diff --git a/packages/turbo-codemod/src/transforms/add-package-names.ts b/packages/turbo-codemod/src/transforms/add-package-names.ts index a34b3df3ec91a..7837937eac907 100644 --- a/packages/turbo-codemod/src/transforms/add-package-names.ts +++ b/packages/turbo-codemod/src/transforms/add-package-names.ts @@ -1,6 +1,6 @@ import path from "node:path"; import { getWorkspaceDetails, type Project } from "@turbo/workspaces"; -import { readJson } from "fs-extra"; +import fs from "fs-extra"; import type { Transformer, TransformerArgs } from "../types"; import type { TransformerResults } from "../runner"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; @@ -18,7 +18,7 @@ async function readPkgJson( pkgJsonPath: string ): Promise { try { - return (await readJson(pkgJsonPath)) as { name?: string }; + return (await fs.readJson(pkgJsonPath)) as { name?: string }; } catch (e) { return null; } diff --git a/packages/turbo-codemod/src/transforms/create-turbo-config.ts b/packages/turbo-codemod/src/transforms/create-turbo-config.ts index a7a45d37e8ab0..386dd2e24dc1e 100644 --- a/packages/turbo-codemod/src/transforms/create-turbo-config.ts +++ b/packages/turbo-codemod/src/transforms/create-turbo-config.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { type PackageJson } from "@turbo/utils"; import type { Schema } from "@turbo/types"; import type { TransformerResults } from "../runner"; @@ -25,17 +25,17 @@ export function transformer({ log.info(`Migrating "package.json" "turbo" key to "turbo.json" file...`); const turboConfigPath = path.join(root, "turbo.json"); const rootPackageJsonPath = path.join(root, "package.json"); - if (!existsSync(rootPackageJsonPath)) { + if (!fs.existsSync(rootPackageJsonPath)) { return runner.abortTransform({ reason: `No package.json found at ${root}. Is the path correct?`, }); } // read files - const rootPackageJson = readJsonSync(rootPackageJsonPath) as PackageJson; + const rootPackageJson = fs.readJsonSync(rootPackageJsonPath) as PackageJson; let rootTurboJson = null; try { - rootTurboJson = readJsonSync(turboConfigPath) as Schema; + rootTurboJson = fs.readJsonSync(turboConfigPath) as Schema; } catch (err) { rootTurboJson = null; } diff --git a/packages/turbo-codemod/src/transforms/migrate-dot-env.ts b/packages/turbo-codemod/src/transforms/migrate-dot-env.ts index 964ebff50d90b..a03d730dadbb4 100644 --- a/packages/turbo-codemod/src/transforms/migrate-dot-env.ts +++ b/packages/turbo-codemod/src/transforms/migrate-dot-env.ts @@ -1,11 +1,11 @@ import path from "node:path"; -import { readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { type PackageJson, getTurboConfigs, forEachTaskDef, } from "@turbo/utils"; -import { type SchemaV1 } from "@turbo/types"; +import type { SchemaV1 } from "@turbo/types"; import type { Transformer, TransformerArgs } from "../types"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; import type { TransformerResults } from "../runner"; @@ -58,7 +58,7 @@ export function transformer({ let packageJSON = {}; try { - packageJSON = readJsonSync(packageJsonPath) as PackageJson; + packageJSON = fs.readJsonSync(packageJsonPath) as PackageJson; } catch (e) { // readJSONSync probably failed because the file doesn't exist } @@ -70,9 +70,9 @@ export function transformer({ }); } - log.info(`Moving entries in \`dotEnv\` key in task config to \`inputs\``); + log.info("Moving entries in `dotEnv` key in task config to `inputs`"); const turboConfigPath = path.join(root, "turbo.json"); - if (!existsSync(turboConfigPath)) { + if (!fs.existsSync(turboConfigPath)) { return runner.abortTransform({ reason: `No turbo.json found at ${root}. Is the path correct?`, }); diff --git a/packages/turbo-codemod/src/transforms/migrate-env-var-dependencies.ts b/packages/turbo-codemod/src/transforms/migrate-env-var-dependencies.ts index 9b448a90f67a4..1aa7ce9558b82 100644 --- a/packages/turbo-codemod/src/transforms/migrate-env-var-dependencies.ts +++ b/packages/turbo-codemod/src/transforms/migrate-env-var-dependencies.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { Pipeline, SchemaV1 } from "@turbo/types"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; @@ -125,7 +125,7 @@ export function transformer({ const packageJsonPath = path.join(root, "package.json"); let packageJSON = {}; try { - packageJSON = readJsonSync(packageJsonPath) as PackageJson; + packageJSON = fs.readJsonSync(packageJsonPath) as PackageJson; } catch (e) { // readJSONSync probably failed because the file doesn't exist } @@ -139,7 +139,7 @@ export function transformer({ // validate we have a root config const turboConfigPath = path.join(root, "turbo.json"); - if (!existsSync(turboConfigPath)) { + if (!fs.existsSync(turboConfigPath)) { return runner.abortTransform({ reason: `No turbo.json found at ${root}. Is the path correct?`, }); diff --git a/packages/turbo-codemod/src/transforms/rename-output-mode.ts b/packages/turbo-codemod/src/transforms/rename-output-mode.ts index 44cb94f1ff207..f71542dd99b72 100644 --- a/packages/turbo-codemod/src/transforms/rename-output-mode.ts +++ b/packages/turbo-codemod/src/transforms/rename-output-mode.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { PipelineV2, SchemaV1 } from "@turbo/types"; import type { Transformer, TransformerArgs } from "../types"; @@ -40,7 +40,7 @@ export function transformer({ let packageJSON = {}; try { - packageJSON = readJsonSync(packageJsonPath) as PackageJson; + packageJSON = fs.readJsonSync(packageJsonPath) as PackageJson; } catch (e) { // readJSONSync probably failed because the file doesn't exist } @@ -52,9 +52,9 @@ export function transformer({ }); } - log.info(`Renaming \`outputMode\` key in task config to \`outputLogs\``); + log.info("Renaming `outputMode` key in task config to `outputLogs`"); const turboConfigPath = path.join(root, "turbo.json"); - if (!existsSync(turboConfigPath)) { + if (!fs.existsSync(turboConfigPath)) { return runner.abortTransform({ reason: `No turbo.json found at ${root}. Is the path correct?`, }); diff --git a/packages/turbo-codemod/src/transforms/rename-pipeline.ts b/packages/turbo-codemod/src/transforms/rename-pipeline.ts index a103f3e70ea98..a57a7fce086c5 100644 --- a/packages/turbo-codemod/src/transforms/rename-pipeline.ts +++ b/packages/turbo-codemod/src/transforms/rename-pipeline.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { existsSync } from "fs-extra"; +import fs from "fs-extra"; import { getTurboConfigs } from "@turbo/utils"; import type { SchemaV2, SchemaV1 } from "@turbo/types"; import type { Transformer, TransformerArgs } from "../types"; @@ -28,9 +28,9 @@ export function transformer({ options, }); - log.info(`Renaming \`pipeline\` key in turbo.json to \`tasks\``); + log.info("Renaming `pipeline` key in turbo.json to `tasks`"); const turboConfigPath = path.join(root, "turbo.json"); - if (!existsSync(turboConfigPath)) { + if (!fs.existsSync(turboConfigPath)) { return runner.abortTransform({ reason: `No turbo.json found at ${root}. Is the path correct?`, }); diff --git a/packages/turbo-codemod/src/transforms/set-default-outputs.ts b/packages/turbo-codemod/src/transforms/set-default-outputs.ts index 500ef0683b883..92d03600ff260 100644 --- a/packages/turbo-codemod/src/transforms/set-default-outputs.ts +++ b/packages/turbo-codemod/src/transforms/set-default-outputs.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { SchemaV1 } from "@turbo/types"; import type { Transformer, TransformerArgs } from "../types"; @@ -49,7 +49,7 @@ export function transformer({ let packageJSON = {}; try { - packageJSON = readJsonSync(packageJsonPath) as PackageJson; + packageJSON = fs.readJsonSync(packageJsonPath) as PackageJson; } catch (e) { // readJSONSync probably failed because the file doesn't exist } @@ -63,7 +63,7 @@ export function transformer({ log.info(`Adding default \`outputs\` key into tasks if it doesn't exist`); const turboConfigPath = path.join(root, "turbo.json"); - if (!existsSync(turboConfigPath)) { + if (!fs.existsSync(turboConfigPath)) { return runner.abortTransform({ reason: `No turbo.json found at ${root}. Is the path correct?`, }); diff --git a/packages/turbo-codemod/src/transforms/stabilize-env-mode.ts b/packages/turbo-codemod/src/transforms/stabilize-env-mode.ts index 36b6790a3acfe..55e73a50b58cf 100644 --- a/packages/turbo-codemod/src/transforms/stabilize-env-mode.ts +++ b/packages/turbo-codemod/src/transforms/stabilize-env-mode.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { SchemaV1, RootSchemaV1, Pipeline } from "@turbo/types"; import type { Transformer, TransformerArgs } from "../types"; @@ -110,7 +110,7 @@ export function transformer({ let packageJSON = {}; try { - packageJSON = readJsonSync(packageJsonPath) as PackageJson; + packageJSON = fs.readJsonSync(packageJsonPath) as PackageJson; } catch (e) { // readJSONSync probably failed because the file doesn't exist } @@ -126,7 +126,7 @@ export function transformer({ "Rewriting `experimentalPassThroughEnv` and `experimentalGlobalPassThroughEnv`" ); const turboConfigPath = path.join(root, "turbo.json"); - if (!existsSync(turboConfigPath)) { + if (!fs.existsSync(turboConfigPath)) { return runner.abortTransform({ reason: `No turbo.json found at ${root}. Is the path correct?`, }); diff --git a/packages/turbo-codemod/src/transforms/stabilize-ui.ts b/packages/turbo-codemod/src/transforms/stabilize-ui.ts index 414953bfd297c..12609ed3287ab 100644 --- a/packages/turbo-codemod/src/transforms/stabilize-ui.ts +++ b/packages/turbo-codemod/src/transforms/stabilize-ui.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { existsSync } from "fs-extra"; +import fs from "fs-extra"; import type { RootSchema } from "@turbo/types"; import type { Transformer, TransformerArgs } from "../types"; import { getTransformerHelpers } from "../utils/getTransformerHelpers"; @@ -37,7 +37,7 @@ export function transformer({ log.info(`Renaming \`experimentalUI\` key in turbo.json to \`ui\``); const turboConfigPath = path.join(root, "turbo.json"); - if (!existsSync(turboConfigPath)) { + if (!fs.existsSync(turboConfigPath)) { return runner.abortTransform({ reason: `No turbo.json found at ${root}. Is the path correct?`, }); diff --git a/packages/turbo-codemod/src/transforms/transform-env-literals-to-wildcards.ts b/packages/turbo-codemod/src/transforms/transform-env-literals-to-wildcards.ts index 667596ff0da8c..0eff4b07fd098 100644 --- a/packages/turbo-codemod/src/transforms/transform-env-literals-to-wildcards.ts +++ b/packages/turbo-codemod/src/transforms/transform-env-literals-to-wildcards.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { type PackageJson, getTurboConfigs } from "@turbo/utils"; import type { RootSchemaV1, SchemaV1, EnvWildcard } from "@turbo/types"; import type { Transformer, TransformerArgs } from "../types"; @@ -71,7 +71,7 @@ export function transformer({ let packageJSON = {}; try { - packageJSON = readJsonSync(packageJsonPath) as PackageJson; + packageJSON = fs.readJsonSync(packageJsonPath) as PackageJson; } catch (e) { // readJSONSync probably failed because the file doesn't exist } @@ -85,7 +85,7 @@ export function transformer({ log.info("Rewriting env vars to support wildcards"); const turboConfigPath = path.join(root, "turbo.json"); - if (!existsSync(turboConfigPath)) { + if (!fs.existsSync(turboConfigPath)) { return runner.abortTransform({ reason: `No turbo.json found at ${root}. Is the path correct?`, }); diff --git a/packages/turbo-codemod/src/utils/loadTurboJson.ts b/packages/turbo-codemod/src/utils/loadTurboJson.ts index 8da42ccd03fd8..38038f6d54757 100644 --- a/packages/turbo-codemod/src/utils/loadTurboJson.ts +++ b/packages/turbo-codemod/src/utils/loadTurboJson.ts @@ -1,7 +1,7 @@ -import { readFileSync } from "fs-extra"; +import fs from "fs-extra"; import { parse as JSON5Parse } from "json5"; export function loadTurboJson(filePath: string): T { - const contents = readFileSync(filePath, "utf8"); + const contents = fs.readFileSync(filePath, "utf8"); return JSON5Parse(contents); } diff --git a/packages/turbo-codemod/src/utils/looksLikeRepo.ts b/packages/turbo-codemod/src/utils/looksLikeRepo.ts index 388a1885fc9dd..6af15eb36b384 100644 --- a/packages/turbo-codemod/src/utils/looksLikeRepo.ts +++ b/packages/turbo-codemod/src/utils/looksLikeRepo.ts @@ -1,8 +1,8 @@ import path from "node:path"; -import { existsSync } from "fs-extra"; +import fs from "fs-extra"; const HINTS = ["package.json", "turbo.json", ".git"]; export function looksLikeRepo({ directory }: { directory: string }): boolean { - return HINTS.some((hint) => existsSync(path.join(directory, hint))); + return HINTS.some((hint) => fs.existsSync(path.join(directory, hint))); } diff --git a/packages/turbo-gen/src/commands/workspace/prompts.ts b/packages/turbo-gen/src/commands/workspace/prompts.ts index df112b01ab8ae..1046629636796 100644 --- a/packages/turbo-gen/src/commands/workspace/prompts.ts +++ b/packages/turbo-gen/src/commands/workspace/prompts.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { readJsonSync } from "fs-extra"; +import fs from "fs-extra"; import { prompt, Separator } from "inquirer"; import { minimatch } from "minimatch"; import validName from "validate-npm-package-name"; @@ -53,7 +53,7 @@ export async function type({ return prompt<{ answer: WorkspaceType }>({ type: "list", name: "answer", - message: message ?? `What type of workspace should be added?`, + message: message ?? "What type of workspace should be added?", choices: [ { name: "app", @@ -233,7 +233,7 @@ export async function dependencies({ }); const sourcePackageJson = workspaceSource - ? (readJsonSync(workspaceSource.paths.packageJson) as PackageJson) + ? (fs.readJsonSync(workspaceSource.paths.packageJson) as PackageJson) : undefined; for (const group of dependencyGroups) { diff --git a/packages/turbo-gen/src/generators/copy.ts b/packages/turbo-gen/src/generators/copy.ts index a24f3d618e82f..813a69f15074b 100644 --- a/packages/turbo-gen/src/generators/copy.ts +++ b/packages/turbo-gen/src/generators/copy.ts @@ -1,6 +1,6 @@ import path from "node:path"; import type { CopyFilterAsync } from "fs-extra"; -import { rm, writeJSON, readJSON, copy, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { bold } from "picocolors"; import { createProject, @@ -34,8 +34,10 @@ export async function generate({ project, opts }: TurboGeneratorArguments) { }); try { - if (existsSync(newPackageJsonPath)) { - const packageJson = (await readJSON(newPackageJsonPath)) as PackageJson; + if (fs.existsSync(newPackageJsonPath)) { + const packageJson = (await fs.readJSON( + newPackageJsonPath + )) as PackageJson; if (packageJson.workspaces) { throw new Error( "New workspace root detected - unexpected 'workspaces' field in package.json" @@ -45,7 +47,7 @@ export async function generate({ project, opts }: TurboGeneratorArguments) { throw new Error("New workspace is missing a package.json file"); } - if (existsSync(path.join(location.absolute, "pnpm-workspace.yaml"))) { + if (fs.existsSync(path.join(location.absolute, "pnpm-workspace.yaml"))) { throw new Error( "New workspace root detected - unexpected pnpm-workspace.yaml" ); @@ -58,7 +60,7 @@ export async function generate({ project, opts }: TurboGeneratorArguments) { logger.error(message); // rollback changes - await rm(location.absolute, { recursive: true, force: true }); + await fs.rm(location.absolute, { recursive: true, force: true }); return; } } else if (source) { @@ -69,14 +71,14 @@ export async function generate({ project, opts }: TurboGeneratorArguments) { `Creating "${name}" from "${source.name}"...` ); loader.start(); - await copy(source.paths.root, location.absolute, { + await fs.copy(source.paths.root, location.absolute, { filter: filterFunc, }); loader.stop(); } // update package.json with new name - const packageJson = (await readJSON(newPackageJsonPath)) as PackageJson; + const packageJson = (await fs.readJSON(newPackageJsonPath)) as PackageJson; packageJson.name = name; // update dependencies @@ -86,7 +88,7 @@ export async function generate({ project, opts }: TurboGeneratorArguments) { packageJson[group as keyof DependencyGroups] = deps; } }); - await writeJSON(newPackageJsonPath, packageJson, { spaces: 2 }); + await fs.writeJSON(newPackageJsonPath, packageJson, { spaces: 2 }); logger.log(); logger.log( diff --git a/packages/turbo-gen/src/generators/empty.ts b/packages/turbo-gen/src/generators/empty.ts index 78f176dd3c5da..3f0072e7592fa 100644 --- a/packages/turbo-gen/src/generators/empty.ts +++ b/packages/turbo-gen/src/generators/empty.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { writeFileSync, mkdirSync } from "fs-extra"; +import fs from "fs-extra"; import { bold } from "picocolors"; import { logger, type PackageJson, type DependencyGroups } from "@turbo/utils"; import { gatherAddRequirements } from "../utils/gatherAddRequirements"; @@ -32,16 +32,16 @@ export async function generate({ project, opts }: TurboGeneratorArguments) { }); // write the directory - mkdirSync(location.absolute, { recursive: true }); + fs.mkdirSync(location.absolute, { recursive: true }); // create package.json - writeFileSync( + fs.writeFileSync( path.join(location.absolute, "package.json"), JSON.stringify(packageJson, null, 2) ); // create README - writeFileSync(path.join(location.absolute, "README.md"), `# \`${name}\``); + fs.writeFileSync(path.join(location.absolute, "README.md"), `# \`${name}\``); logger.log(); logger.log( diff --git a/packages/turbo-gen/src/utils/setupFromTemplate.ts b/packages/turbo-gen/src/utils/setupFromTemplate.ts index cf7f932c8f605..a03519e613d06 100644 --- a/packages/turbo-gen/src/utils/setupFromTemplate.ts +++ b/packages/turbo-gen/src/utils/setupFromTemplate.ts @@ -1,6 +1,6 @@ import path from "node:path"; import type { Project } from "@turbo/workspaces"; -import { pathExists, copy } from "fs-extra"; +import fs from "fs-extra"; import { GeneratorError } from "./error"; export async function setupFromTemplate({ @@ -16,7 +16,7 @@ export async function setupFromTemplate({ const toCopy = `simple-${template}`; // required to ensure we don't overwrite any existing files at this location - if (await pathExists(configDirectory)) { + if (await fs.pathExists(configDirectory)) { throw new GeneratorError( `Generator config directory already exists at ${configDirectory}`, { type: "config_directory_already_exists" } @@ -24,7 +24,7 @@ export async function setupFromTemplate({ } // copy templates to project - await copy(path.join(__dirname, "templates", toCopy), configDirectory, { + await fs.copy(path.join(__dirname, "templates", toCopy), configDirectory, { recursive: true, }); } diff --git a/packages/turbo-repository/scripts/publish.mjs b/packages/turbo-repository/scripts/publish.mjs index 9e9dcf5b6ebf0..5c8cde908a395 100644 --- a/packages/turbo-repository/scripts/publish.mjs +++ b/packages/turbo-repository/scripts/publish.mjs @@ -2,8 +2,7 @@ import path from "path"; import { execa } from "execa"; -import { copy } from "fs-extra"; -import { readFile, writeFile } from "fs/promises"; +import fs from "fs-extra"; const cwd = process.cwd(); let platform = process.argv[process.argv.length - 1]; @@ -18,7 +17,7 @@ console.log("platform", platform); try { // TODO: version let version = JSON.parse( - await readFile(path.join(cwd, "js", "package.json")) + await fs.readFile(path.join(cwd, "js", "package.json")) ).version; // Copy binaries to package folders, update version, and publish @@ -26,15 +25,17 @@ console.log("platform", platform); try { let binaryName = `repository.${platform}.node`; - await copy( + await fs.copy( path.join(cwd, "native/@turbo", binaryName), path.join(nativePackagesDir, platform, binaryName) ); let pkg = JSON.parse( - await readFile(path.join(nativePackagesDir, platform, "package.json")) + await fs.readFile( + path.join(nativePackagesDir, platform, "package.json") + ) ); pkg.version = version; - await writeFile( + await fs.writeFile( path.join(nativePackagesDir, platform, "package.json"), JSON.stringify(pkg, null, 2) ); diff --git a/packages/turbo-utils/src/createProject.ts b/packages/turbo-utils/src/createProject.ts index cddabeac680c6..2b514165fabe0 100644 --- a/packages/turbo-utils/src/createProject.ts +++ b/packages/turbo-utils/src/createProject.ts @@ -1,7 +1,7 @@ import path from "node:path"; import retry from "async-retry"; import { dim, red } from "picocolors"; -import { mkdir, readJsonSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import * as logger from "./logger"; import { downloadAndExtractExample, @@ -104,7 +104,7 @@ export async function createProject({ `1. Your spelling of example ${red( `"${example}"` )} might be incorrect.\n`, - `2. You might not be connected to the internet or you are behind a proxy.` + "2. You might not be connected to the internet or you are behind a proxy." ); process.exit(1); } @@ -125,7 +125,7 @@ export async function createProject({ const appName = path.basename(root); try { - await mkdir(root, { recursive: true }); + await fs.mkdir(root, { recursive: true }); } catch (err) { logger.error("Unable to create project directory"); logger.error(err); @@ -172,13 +172,13 @@ export async function createProject({ } const rootPackageJsonPath = path.join(root, "package.json"); - const hasPackageJson = existsSync(rootPackageJsonPath); + const hasPackageJson = fs.existsSync(rootPackageJsonPath); const availableScripts = []; if (hasPackageJson) { let packageJsonContent; try { - packageJsonContent = readJsonSync(rootPackageJsonPath) as PackageJson; + packageJsonContent = fs.readJsonSync(rootPackageJsonPath) as PackageJson; } catch { // ignore } diff --git a/packages/turbo-utils/src/isWriteable.ts b/packages/turbo-utils/src/isWriteable.ts index 56364e853dc9c..030679c868832 100644 --- a/packages/turbo-utils/src/isWriteable.ts +++ b/packages/turbo-utils/src/isWriteable.ts @@ -1,8 +1,8 @@ -import { access, constants } from "fs-extra"; +import fs from "fs-extra"; export async function isWriteable(directory: string): Promise { try { - await access(directory, constants.W_OK); + await fs.access(directory, fs.constants.W_OK); return true; } catch (err) { return false; diff --git a/packages/turbo-workspaces/__tests__/managers.test.ts b/packages/turbo-workspaces/__tests__/managers.test.ts index 84c09eef77742..c97665d978368 100644 --- a/packages/turbo-workspaces/__tests__/managers.test.ts +++ b/packages/turbo-workspaces/__tests__/managers.test.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { ensureDirSync, existsSync } from "fs-extra"; +import fs from "fs-extra"; import { setupTestFixtures } from "@turbo/test-utils"; import type { PackageJson } from "@turbo/utils"; import { describe, it, expect, jest } from "@jest/globals"; @@ -92,7 +92,7 @@ describe("managers", () => { expect(project.packageManager).toEqual(fixtureManager); if (withNodeModules) { - ensureDirSync(project.paths.nodeModules); + fs.ensureDirSync(project.paths.nodeModules); } await MANAGERS[fixtureManager].remove({ @@ -106,7 +106,7 @@ describe("managers", () => { }); if (withNodeModules) { - expect(existsSync(project.paths.nodeModules)).toEqual(dry); + expect(fs.existsSync(project.paths.nodeModules)).toEqual(dry); } const packageJson = readJson(project.paths.packageJson); @@ -166,13 +166,13 @@ describe("managers", () => { MANAGERS[toManager].read({ workspaceRoot: path.join(root) }); if (shouldThrow) { if (toManager === "pnpm") { - await expect(read).rejects.toThrow(`Not a pnpm project`); + await expect(read).rejects.toThrow("Not a pnpm project"); } else if (toManager === "yarn") { - await expect(read).rejects.toThrow(`Not a yarn project`); + await expect(read).rejects.toThrow("Not a yarn project"); } else if (toManager === "bun") { - await expect(read).rejects.toThrow(`Not a bun project`); + await expect(read).rejects.toThrow("Not a bun project"); } else { - await expect(read).rejects.toThrow(`Not an npm project`); + await expect(read).rejects.toThrow("Not an npm project"); } return; } @@ -248,13 +248,13 @@ describe("managers", () => { MANAGERS[toManager].read({ workspaceRoot: root }); if (shouldThrow) { if (toManager === "pnpm") { - await expect(read).rejects.toThrow(`Not a pnpm project`); + await expect(read).rejects.toThrow("Not a pnpm project"); } else if (toManager === "yarn") { - await expect(read).rejects.toThrow(`Not a yarn project`); + await expect(read).rejects.toThrow("Not a yarn project"); } else if (toManager === "bun") { - await expect(read).rejects.toThrow(`Not a bun project`); + await expect(read).rejects.toThrow("Not a bun project"); } else { - await expect(read).rejects.toThrow(`Not an npm project`); + await expect(read).rejects.toThrow("Not an npm project"); } return; } @@ -331,7 +331,7 @@ describe("managers", () => { }, }); - expect(existsSync(project.paths.lockfile)).toEqual(dry); + expect(fs.existsSync(project.paths.lockfile)).toEqual(dry); } ); }); diff --git a/packages/turbo-workspaces/src/managers/bun.ts b/packages/turbo-workspaces/src/managers/bun.ts index 69be76b88a996..2f4fe6940c9ea 100644 --- a/packages/turbo-workspaces/src/managers/bun.ts +++ b/packages/turbo-workspaces/src/managers/bun.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { existsSync, writeJSONSync, rmSync, rm } from "fs-extra"; +import fs from "fs-extra"; import { ConvertError } from "../errors"; import { updateDependencies } from "../updateDependencies"; import type { @@ -43,7 +43,7 @@ async function detect(args: DetectArgs): Promise { workspaceRoot: args.workspaceRoot, }); return ( - existsSync(lockFile) || packageManager === PACKAGE_MANAGER_DETAILS.name + fs.existsSync(lockFile) || packageManager === PACKAGE_MANAGER_DETAILS.name ); } @@ -135,7 +135,7 @@ async function create(args: CreateArgs): Promise { packageJson.workspaces = project.workspaceData.globs; if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); } // root dependencies @@ -153,7 +153,7 @@ async function create(args: CreateArgs): Promise { updateDependencies({ workspace, project, to, logger, options }); }); } else if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); } } @@ -190,7 +190,7 @@ async function remove(args: RemoveArgs): Promise { delete packageJson.packageManager; if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); // collect all workspace node_modules directories const allModulesDirs = [ @@ -200,7 +200,9 @@ async function remove(args: RemoveArgs): Promise { try { logger.subStep(`removing "node_modules"`); await Promise.all( - allModulesDirs.map((dir) => rm(dir, { recursive: true, force: true })) + allModulesDirs.map((dir) => + fs.rm(dir, { recursive: true, force: true }) + ) ); } catch (err) { throw new ConvertError("Failed to remove node_modules", { @@ -223,7 +225,7 @@ async function clean(args: CleanArgs): Promise { `removing ${path.relative(project.paths.root, project.paths.lockfile)}` ); if (!options?.dry) { - rmSync(project.paths.lockfile, { force: true }); + fs.rmSync(project.paths.lockfile, { force: true }); } } diff --git a/packages/turbo-workspaces/src/managers/npm.ts b/packages/turbo-workspaces/src/managers/npm.ts index 74d3c422ecd26..c986a41f3a552 100644 --- a/packages/turbo-workspaces/src/managers/npm.ts +++ b/packages/turbo-workspaces/src/managers/npm.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { writeJSONSync, existsSync, rmSync, rm } from "fs-extra"; +import fs from "fs-extra"; import { ConvertError } from "../errors"; import { updateDependencies } from "../updateDependencies"; import type { @@ -42,7 +42,7 @@ async function detect(args: DetectArgs): Promise { workspaceRoot: args.workspaceRoot, }); return ( - existsSync(lockFile) || packageManager === PACKAGE_MANAGER_DETAILS.name + fs.existsSync(lockFile) || packageManager === PACKAGE_MANAGER_DETAILS.name ); } @@ -124,7 +124,7 @@ async function create(args: CreateArgs): Promise { // write package.json here instead of deferring to avoid negating the changes made by updateDependencies if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); } // root dependencies @@ -142,7 +142,7 @@ async function create(args: CreateArgs): Promise { updateDependencies({ workspace, project, to, logger, options }); }); } else if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); } } @@ -178,7 +178,7 @@ async function remove(args: RemoveArgs): Promise { delete packageJson.packageManager; if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); // collect all workspace node_modules directories const allModulesDirs = [ @@ -188,7 +188,9 @@ async function remove(args: RemoveArgs): Promise { try { logger.subStep(`removing "node_modules"`); await Promise.all( - allModulesDirs.map((dir) => rm(dir, { recursive: true, force: true })) + allModulesDirs.map((dir) => + fs.rm(dir, { recursive: true, force: true }) + ) ); } catch (err) { throw new ConvertError("Failed to remove node_modules", { @@ -211,7 +213,7 @@ async function clean(args: CleanArgs): Promise { `removing ${path.relative(project.paths.root, project.paths.lockfile)}` ); if (!options?.dry) { - rmSync(project.paths.lockfile, { force: true }); + fs.rmSync(project.paths.lockfile, { force: true }); } } diff --git a/packages/turbo-workspaces/src/managers/pnpm.ts b/packages/turbo-workspaces/src/managers/pnpm.ts index 4f439331558c4..fd4f31a976663 100644 --- a/packages/turbo-workspaces/src/managers/pnpm.ts +++ b/packages/turbo-workspaces/src/managers/pnpm.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { writeJSONSync, writeFileSync, existsSync, rmSync, rm } from "fs-extra"; +import fs from "fs-extra"; import execa from "execa"; import { ConvertError } from "../errors"; import { updateDependencies } from "../updateDependencies"; @@ -45,8 +45,8 @@ async function detect(args: DetectArgs): Promise { workspaceRoot: args.workspaceRoot, }); return ( - existsSync(lockFile) || - existsSync(workspaceFile) || + fs.existsSync(lockFile) || + fs.existsSync(workspaceFile) || packageManager === PACKAGE_MANAGER_DETAILS.name ); } @@ -112,11 +112,11 @@ async function create(args: CreateArgs): Promise { // write the changes if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); if (hasWorkspaces) { logger.rootStep(`adding "pnpm-workspace.yaml"`); - writeFileSync( + fs.writeFileSync( path.join(project.paths.root, "pnpm-workspace.yaml"), `packages:\n${project.workspaceData.globs .map((w) => ` - "${w}"`) @@ -167,7 +167,7 @@ async function remove(args: RemoveArgs): Promise { if (project.paths.workspaceConfig && hasWorkspaces) { logger.subStep(`removing "pnpm-workspace.yaml"`); if (!options?.dry) { - rmSync(project.paths.workspaceConfig, { force: true }); + fs.rmSync(project.paths.workspaceConfig, { force: true }); } } @@ -177,7 +177,7 @@ async function remove(args: RemoveArgs): Promise { delete packageJson.packageManager; if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); // collect all workspace node_modules directories const allModulesDirs = [ @@ -188,7 +188,9 @@ async function remove(args: RemoveArgs): Promise { try { logger.subStep(`removing "node_modules"`); await Promise.all( - allModulesDirs.map((dir) => rm(dir, { recursive: true, force: true })) + allModulesDirs.map((dir) => + fs.rm(dir, { recursive: true, force: true }) + ) ); } catch (err) { throw new ConvertError("Failed to remove node_modules", { @@ -211,7 +213,7 @@ async function clean(args: CleanArgs): Promise { `removing ${path.relative(project.paths.root, project.paths.lockfile)}` ); if (!options?.dry) { - rmSync(project.paths.lockfile, { force: true }); + fs.rmSync(project.paths.lockfile, { force: true }); } } @@ -233,7 +235,7 @@ async function convertLock(args: ConvertArgs): Promise { }; const importLockfile = async (): Promise => { - if (!options?.dry && existsSync(project.paths.lockfile)) { + if (!options?.dry && fs.existsSync(project.paths.lockfile)) { try { await execa(PACKAGE_MANAGER_DETAILS.name, ["import"], { stdio: "ignore", @@ -258,7 +260,7 @@ async function convertLock(args: ConvertArgs): Promise { await bunLockToYarnLock({ project, options }); await importLockfile(); // remove the intermediate yarn lockfile - rmSync(path.join(project.paths.root, "yarn.lock"), { force: true }); + fs.rmSync(path.join(project.paths.root, "yarn.lock"), { force: true }); break; case "npm": // convert npm -> pnpm diff --git a/packages/turbo-workspaces/src/managers/yarn.ts b/packages/turbo-workspaces/src/managers/yarn.ts index 3cd7f91616199..f5e9aeeec1c35 100644 --- a/packages/turbo-workspaces/src/managers/yarn.ts +++ b/packages/turbo-workspaces/src/managers/yarn.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { existsSync, writeJSONSync, rmSync, rm } from "fs-extra"; +import fs from "fs-extra"; import { ConvertError } from "../errors"; import { updateDependencies } from "../updateDependencies"; import type { @@ -43,7 +43,7 @@ async function detect(args: DetectArgs): Promise { workspaceRoot: args.workspaceRoot, }); return ( - existsSync(lockFile) || packageManager === PACKAGE_MANAGER_DETAILS.name + fs.existsSync(lockFile) || packageManager === PACKAGE_MANAGER_DETAILS.name ); } @@ -124,7 +124,7 @@ async function create(args: CreateArgs): Promise { packageJson.workspaces = project.workspaceData.globs; if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); } // root dependencies @@ -142,7 +142,7 @@ async function create(args: CreateArgs): Promise { updateDependencies({ workspace, project, to, logger, options }); }); } else if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); } } @@ -179,7 +179,7 @@ async function remove(args: RemoveArgs): Promise { delete packageJson.packageManager; if (!options?.dry) { - writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); + fs.writeJSONSync(project.paths.packageJson, packageJson, { spaces: 2 }); // collect all workspace node_modules directories const allModulesDirs = [ @@ -189,7 +189,9 @@ async function remove(args: RemoveArgs): Promise { try { logger.subStep(`removing "node_modules"`); await Promise.all( - allModulesDirs.map((dir) => rm(dir, { recursive: true, force: true })) + allModulesDirs.map((dir) => + fs.rm(dir, { recursive: true, force: true }) + ) ); } catch (err) { throw new ConvertError("Failed to remove node_modules", { @@ -212,7 +214,7 @@ async function clean(args: CleanArgs): Promise { `removing ${path.relative(project.paths.root, project.paths.lockfile)}` ); if (!options?.dry) { - rmSync(project.paths.lockfile, { force: true }); + fs.rmSync(project.paths.lockfile, { force: true }); } } diff --git a/packages/turbo-workspaces/src/updateDependencies.ts b/packages/turbo-workspaces/src/updateDependencies.ts index 33c782dbafb23..12d85383673b1 100644 --- a/packages/turbo-workspaces/src/updateDependencies.ts +++ b/packages/turbo-workspaces/src/updateDependencies.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { writeJSONSync } from "fs-extra"; +import fs from "fs-extra"; import { green } from "picocolors"; import type { DependencyList, DependencyGroups } from "@turbo/utils"; import type { @@ -131,7 +131,7 @@ export function updateDependencies({ } if (!options?.dry) { - writeJSONSync(workspace.paths.packageJson, workspacePackageJson, { + fs.writeJSONSync(workspace.paths.packageJson, workspacePackageJson, { spaces: 2, }); }