Remix-Forge icon indicating copy to clipboard operation
Remix-Forge copied to clipboard

Dropped routes with "convert routes"

Open jfsiii opened this issue 2 years ago • 3 comments

What I did

I ran "Convert routes to v2 convention" from on a directory that looked like this

tree routes before: 19 directories, 47 files
routes/
├── __anonymous
│   ├── change-password.tsx
│   ├── forgot-password.tsx
│   ├── login.tsx
│   ├── logout.tsx
│   └── webhooks.ld-update.tsx
├── __anonymous.health.tsx
├── __anonymous.tsx
├── index.tsx
├── participant
│   ├── sessions
│   │   ├── $courseId
│   │   │   └── assessments
│   │   │       ├── $evaluationId
│   │   │       │   ├── index.tsx
│   │   │       │   └── result.tsx
│   │   │       ├── index.tsx
│   │   │       └── new.tsx
│   │   ├── $courseId.tsx
│   │   └── index.tsx
│   └── sessions.tsx
├── sessions
│   ├── $courseId
│   │   ├── assessments
│   │   │   ├── $assessmentType.$assessmentId
│   │   │   │   ├── $evaluationTemplateId
│   │   │   │   │   ├── evaluate.$participantId.tsx
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── response-breakdown.tsx
│   │   │   │   ├── index.tsx
│   │   │   │   └── response-breakdown.tsx
│   │   │   ├── $assessmentType.$assessmentId.tsx
│   │   │   ├── $evaluationId.tsx
│   │   │   ├── components
│   │   │   │   └── AssessmentList.tsx
│   │   │   ├── index.tsx
│   │   │   └── types.ts
│   │   ├── facilitators
│   │   │   └── update.tsx
│   │   ├── participants
│   │   │   ├── index.tsx
│   │   │   ├── results.$participantId.tsx
│   │   │   ├── signin-info
│   │   │   │   ├── index.tsx
│   │   │   │   └── pdf.tsx
│   │   │   └── update.tsx
│   │   ├── participants.tsx
│   │   └── summary
│   │       └── index.tsx
│   ├── $courseId.tsx
│   ├── components.tsx
│   ├── create.tsx
│   └── index.tsx
└── users
    ├── $userId.change-password.tsx
    ├── $userId.edit.tsx
    ├── bulk-import
    │   ├── csv.ts
    │   ├── facility.tsx
    │   ├── index.tsx
    │   ├── upload.tsx
    │   └── validation-preview.tsx
    ├── bulk-import.tsx
    ├── create.tsx
    └── index.tsx

19 directories, 47 files
npx remix routes before
<Routes>
  <Route file="root.tsx">
    <Route path="users/:userId/change-password" file="routes/users/$userId.change-password.tsx" />
    <Route path="participant/sessions" file="routes/participant/sessions.tsx">
      <Route path=":courseId" file="routes/participant/sessions/$courseId.tsx">
        <Route path="assessments/:evaluationId/result" file="routes/participant/sessions/$courseId/assessments/$evaluationId/result.tsx" />
        <Route path="assessments/:evaluationId" index file="routes/participant/sessions/$courseId/assessments/$evaluationId/index.tsx" />
        <Route path="assessments" index file="routes/participant/sessions/$courseId/assessments/index.tsx" />
        <Route path="assessments/new" file="routes/participant/sessions/$courseId/assessments/new.tsx" />
      </Route>
      <Route index file="routes/participant/sessions/index.tsx" />
    </Route>
    <Route path="health" file="routes/__anonymous.health.tsx" />
    <Route path="sessions/:courseId" file="routes/sessions/$courseId.tsx">
      <Route path="assessments/:assessmentType/:assessmentId" file="routes/sessions/$courseId/assessments/$assessmentType.$assessmentId.tsx">
        <Route path=":evaluationTemplateId/evaluate/:participantId" file="routes/sessions/$courseId/assessments/$assessmentType.$assessmentId/$evaluationTemplateId/evaluate.$participantId.tsx" />
        <Route path=":evaluationTemplateId/response-breakdown" file="routes/sessions/$courseId/assessments/$assessmentType.$assessmentId/$evaluationTemplateId/response-breakdown.tsx" />
        <Route path=":evaluationTemplateId" index file="routes/sessions/$courseId/assessments/$assessmentType.$assessmentId/$evaluationTemplateId/index.tsx" />
        <Route path="response-breakdown" file="routes/sessions/$courseId/assessments/$assessmentType.$assessmentId/response-breakdown.tsx" />
        <Route index file="routes/sessions/$courseId/assessments/$assessmentType.$assessmentId/index.tsx" />
      </Route>
      <Route path="assessments/:evaluationId" file="routes/sessions/$courseId/assessments/$evaluationId.tsx" />
      <Route path="facilitators/update" file="routes/sessions/$courseId/facilitators/update.tsx" />
      <Route path="assessments" index file="routes/sessions/$courseId/assessments/index.tsx" />
      <Route path="summary" index file="routes/sessions/$courseId/summary/index.tsx" />
      <Route path="participants" file="routes/sessions/$courseId/participants.tsx">
        <Route path="results/:participantId" file="routes/sessions/$courseId/participants/results.$participantId.tsx" />
        <Route path="signin-info" index file="routes/sessions/$courseId/participants/signin-info/index.tsx" />
        <Route path="signin-info/pdf" file="routes/sessions/$courseId/participants/signin-info/pdf.tsx" />
        <Route path="update" file="routes/sessions/$courseId/participants/update.tsx" />
        <Route index file="routes/sessions/$courseId/participants/index.tsx" />
      </Route>
    </Route>
    <Route path="users/:userId/edit" file="routes/users/$userId.edit.tsx" />
    <Route path="users/bulk-import" file="routes/users/bulk-import.tsx">
      <Route path="validation-preview" file="routes/users/bulk-import/validation-preview.tsx" />
      <Route path="facility" file="routes/users/bulk-import/facility.tsx" />
      <Route path="upload" file="routes/users/bulk-import/upload.tsx" />
      <Route index file="routes/users/bulk-import/index.tsx" />
      <Route path="csv" file="routes/users/bulk-import/csv.ts" />
    </Route>
    <Route path="sessions/create" file="routes/sessions/create.tsx" />
    <Route path="sessions" index file="routes/sessions/index.tsx" />
    <Route path="users/create" file="routes/users/create.tsx" />
    <Route file="routes/__anonymous.tsx">
      <Route path="webhooks/ld-update" file="routes/__anonymous/webhooks.ld-update.tsx" />
      <Route path="change-password" file="routes/__anonymous/change-password.tsx" />
      <Route path="forgot-password" file="routes/__anonymous/forgot-password.tsx" />
      <Route path="logout" file="routes/__anonymous/logout.tsx" />
      <Route path="login" file="routes/__anonymous/login.tsx" />
    </Route>
    <Route path="users" index file="routes/users/index.tsx" />
    <Route index file="routes/index.tsx" />
  </Route>
</Routes>

What I observed

It said it succeeded but it lost a lot of files

Screenshot 2023-08-09 at 11 22 09 AM
tree routes after: 1 directory, 19 files
routes/
├── _anonymous..login.md
├── _anonymous.change-password.tsx
├── _anonymous.forgot-password.tsx
├── _anonymous.health.tsx
├── _anonymous.login.tsx
├── _anonymous.logout.tsx
├── _anonymous.tsx
├── _anonymous.webhooks.ld-update.tsx
├── _index.tsx
├── participant.sessions.tsx
├── sessions.$courseId.tsx
├── sessions._index.tsx
├── sessions.components.tsx
├── sessions.create.tsx
├── users.$userId.change-password.tsx
├── users.$userId.edit.tsx
├── users._index.tsx
├── users.bulk-import.tsx
└── users.create.tsx

1 directory, 19 files
npx remix routes after
<Routes>
  <Route file="root.tsx">
    <Route path="_anonymous/webhooks/ld-update" file="routes/_anonymous.webhooks.ld-update.tsx" />
    <Route path="users/:userId/change-password" file="routes/users.$userId.change-password.tsx" />
    <Route path="_anonymous/change-password" file="routes/_anonymous.change-password.tsx" />
    <Route path="_anonymous/forgot-password" file="routes/_anonymous.forgot-password.tsx" />
    <Route path="participant/sessions" file="routes/participant.sessions.tsx" />
    <Route path="sessions/components" file="routes/sessions.components.tsx" />
    <Route path="sessions/:courseId" file="routes/sessions.$courseId.tsx" />
    <Route path="users/:userId/edit" file="routes/users.$userId.edit.tsx" />
    <Route path="_anonymous//login" file="routes/_anonymous..login.md" />
    <Route path="_anonymous/health" file="routes/_anonymous.health.tsx" />
    <Route path="_anonymous/logout" file="routes/_anonymous.logout.tsx" />
    <Route path="users/bulk-import" file="routes/users.bulk-import.tsx" />
    <Route path="_anonymous/login" file="routes/_anonymous.login.tsx" />
    <Route path="sessions/_index" file="routes/sessions._index.tsx" />
    <Route path="sessions/create" file="routes/sessions.create.tsx" />
    <Route path="users/_index" file="routes/users._index.tsx" />
    <Route path="users/create" file="routes/users.create.tsx" />
    <Route path="_anonymous" file="routes/_anonymous.tsx" />
    <Route path="_index" file="routes/_index.tsx" />
  </Route>
</Routes>

It's not clear to me what the issue is, but hopefully the before/after routes will help. Let me know if I can do any thing to give more data or context.

jfsiii avatar Aug 09 '23 15:08 jfsiii

@jfsiii Thank you for the report! I've been trying to figure this one out because it was reported to me but had no luck due to lack of info. This is greatly appreciated. Will try to replicate with this to find the root cause.

AlemTuzlak avatar Aug 10 '23 06:08 AlemTuzlak

@jfsiii there have been some improvements to the underlying code, could you try this again if it works? I have a feeling it is due to an OS difference because when I test it on windows it works.

AlemTuzlak avatar Nov 18 '23 11:11 AlemTuzlak

@AlemTuzlak Still no luck.

Here's some info about the before/initial routes

remix-routes-main.txt tree-routes-main.txt

And here's what I saw running in VS Code

Screenshot 2023-12-18 at 7 50 43 PM

Here's the routes after conversion

remix-routes-forge.txt tree-routes-forge.txt

The diff of the last line from the two tree outuput

- 21 directories, 53 files
+ 1 directory, 22 files

I'm not sure of the process for conversion but it's losing alot of routes. All (?) the routes in users/bulk-import/* for example.

In getting the screenshots for this response, I started fresh and ran it in VS Code again. This time I got only the "Flattening route to v2 convention finished!" success message but the results were still the same on disk.

We do have some non-route files in there (a components subdirectory in one, two? types.ts files)

ignoredFilePatterns from remix.config.js
  // ignore all files in routes folder to prevent
  // default remix convention from picking up routes
  ignoredRouteFiles: ['**/*'],
  routes(defineRoutes) {
    // uses the v1 convention, works in v1.15+ and v2
    return createRoutesFromFolders(
      defineRoutes,
      // optionally add the real ignored route files here as needed
      {
        ignoredFilePatterns: [
          // ignore (do not make accessible in UI) any files under `routes/` which:
          // start with a `.`
          '**/.*',
          // are named types.ts, types.tsx, components.ts, etc
          '**/{components,utils,types}.ts{,x}',
          // are in a routes/**/components, routes/**/utils, or routes/**/types directory
          '**/{components,utils,types}/*',
        ],
      }
    );

but there's only a few of them, and none a directory like users/bulk-import which is getting lost

└── users
    ├── $userId.change-password.tsx
    ├── $userId.edit.tsx
    ├── bulk-import
    │   ├── csv.ts
    │   ├── facility.tsx
    │   ├── index.tsx
    │   ├── upload.tsx
    │   └── validation-preview.tsx
    ├── bulk-import.tsx
    ├── create.tsx
    └── index.tsx

jfsiii avatar Dec 19 '23 12:12 jfsiii