From a79f82880dfe4c16ecc0f7069bba91ec37e8768a Mon Sep 17 00:00:00 2001 From: Logan McAnsh Date: Tue, 29 Nov 2022 17:59:14 -0500 Subject: [PATCH] fix(remix-dev): convert `config.appDirectory` to relative unix path (#4709) * fix(remix-dev): convert appDirectory to unix style for fast-glob Signed-off-by: Logan McAnsh * chore: relative path Signed-off-by: Logan McAnsh * chore: add test Signed-off-by: Logan McAnsh * fix test Signed-off-by: Logan McAnsh * fix: typo Signed-off-by: Logan McAnsh * chore: update test Signed-off-by: Logan McAnsh Signed-off-by: Logan McAnsh --- .../migrations/convert-to-javascript-test.ts | 34 ++++++++++++++----- .../migrations/convert-to-javascript/index.ts | 17 +++++++--- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/packages/remix-dev/__tests__/migrations/convert-to-javascript-test.ts b/packages/remix-dev/__tests__/migrations/convert-to-javascript-test.ts index f185b87365e..942e2eba6ef 100644 --- a/packages/remix-dev/__tests__/migrations/convert-to-javascript-test.ts +++ b/packages/remix-dev/__tests__/migrations/convert-to-javascript-test.ts @@ -1,5 +1,5 @@ import { tmpdir } from "os"; -import { join } from "path"; +import path from "path"; import glob from "fast-glob"; import { copySync, @@ -7,6 +7,7 @@ import { readJSONSync, realpathSync, removeSync, + readFile, } from "fs-extra"; import shell from "shelljs"; import stripAnsi from "strip-ansi"; @@ -37,8 +38,8 @@ const mockLog = (message: unknown = "", ...rest: unknown[]) => { output += "\n" + stripAnsi(messageString); }; -const FIXTURE = join(__dirname, "fixtures", "indie-stack"); -const TEMP_DIR = join( +const FIXTURE = path.join(__dirname, "fixtures", "indie-stack"); +const TEMP_DIR = path.join( realpathSync(tmpdir()), `remix-tests-${Math.random().toString(32).slice(2)}` ); @@ -66,7 +67,7 @@ const checkMigrationRanSuccessfully = async (projectDir: string) => { let config = await readConfig(projectDir); let jsConfigJson: TsConfigJson = readJSONSync( - join(projectDir, "jsconfig.json") + path.join(projectDir, "jsconfig.json") ); expect(jsConfigJson.include).not.toContain("remix.env.d.ts"); expect(jsConfigJson.include).not.toContain("**/*.ts"); @@ -74,21 +75,31 @@ const checkMigrationRanSuccessfully = async (projectDir: string) => { expect(jsConfigJson.include).not.toContain("**/*.tsx"); expect(jsConfigJson.include).toContain("**/*.jsx"); - let packageJson: PackageJson = readJSONSync(join(projectDir, "package.json")); + let packageJson: PackageJson = readJSONSync( + path.join(projectDir, "package.json") + ); expect(packageJson.devDependencies).not.toContain("@types/react"); expect(packageJson.devDependencies).not.toContain("@types/react-dom"); expect(packageJson.devDependencies).not.toContain("typescript"); expect(packageJson.scripts).not.toContain("typecheck"); + let relativeAppDirectory = path.relative( + config.rootDirectory, + config.appDirectory + ); + let unixAppDirectory = path.posix.join( + ...relativeAppDirectory.split(path.delimiter) + ); + let TSFiles = glob.sync("**/*.@(ts|tsx)", { cwd: config.rootDirectory, - ignore: [`./${config.appDirectory}/**/*`], + ignore: [`./${unixAppDirectory}/**/*`], }); expect(TSFiles).toHaveLength(0); let JSFiles = glob.sync("**/*.@(js|jsx)", { absolute: true, cwd: config.rootDirectory, - ignore: [`./${config.appDirectory}/**/*`], + ignore: [`./${unixAppDirectory}/**/*`], }); let importResult = shell.grep("-l", 'from "', JSFiles); expect(importResult.stdout.trim()).toBe(""); @@ -98,10 +109,17 @@ const checkMigrationRanSuccessfully = async (projectDir: string) => { expect(exportDefaultResult.stdout.trim()).toBe(""); expect(exportDefaultResult.stderr).toBeNull(); expect(exportDefaultResult.code).toBe(0); + + let rootRouteContent = await readFile( + path.join(projectDir, "app", "root.jsx"), + "utf-8" + ); + + expect(rootRouteContent).not.toContain('require("@remix-run/react")'); }; const makeApp = () => { - let projectDir = join(TEMP_DIR, "convert-to-javascript"); + let projectDir = path.join(TEMP_DIR, "convert-to-javascript"); copySync(FIXTURE, projectDir); return projectDir; }; diff --git a/packages/remix-dev/cli/migrate/migrations/convert-to-javascript/index.ts b/packages/remix-dev/cli/migrate/migrations/convert-to-javascript/index.ts index 2c78cdebf41..de5523bec06 100644 --- a/packages/remix-dev/cli/migrate/migrations/convert-to-javascript/index.ts +++ b/packages/remix-dev/cli/migrate/migrations/convert-to-javascript/index.ts @@ -1,4 +1,4 @@ -import { join } from "path"; +import path from "path"; import glob from "fast-glob"; import { readConfig } from "../../../../config"; @@ -9,7 +9,7 @@ import { convertTSConfigs } from "./convertTSConfigs"; import { convertTSFilesToJS } from "./convertTSFilesToJS"; import { CliError } from "../../../error"; -const TRANSFORM_PATH = join(__dirname, "transform"); +const TRANSFORM_PATH = path.join(__dirname, "transform"); export const convertToJavaScript: MigrationFunction = async ( projectDir, @@ -23,11 +23,20 @@ export const convertToJavaScript: MigrationFunction = async ( // 2. Remove @types/* & TypeScript dependencies + `typecheck` script from `package.json` await cleanupPackageJson(config.rootDirectory); - // 3. Run codemod + // 3. convert appDirectory to relative and force unix style path + let relativeAppDirectory = path.relative( + config.rootDirectory, + config.appDirectory + ); + let unixAppDirectory = path.posix.join( + ...relativeAppDirectory.split(path.delimiter) + ); + + // 4. Run codemod let files = glob.sync("**/*.+(ts|tsx)", { absolute: true, cwd: config.rootDirectory, - ignore: [`./${config.appDirectory}/**/*`, "**/node_modules/**"], + ignore: [`${unixAppDirectory}/**/*`, "**/node_modules/**"], }); let codemodOk = await jscodeshift.run({ files,