Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug(vite remix): EEXIST: file already exists, symlink "x" -> "y" #90

Open
Jarrku opened this issue Mar 17, 2024 · 10 comments
Open

Bug(vite remix): EEXIST: file already exists, symlink "x" -> "y" #90

Jarrku opened this issue Mar 17, 2024 · 10 comments

Comments

@Jarrku
Copy link

Jarrku commented Mar 17, 2024

Hey,

I've been trying to migrate our remix app to use vite, but it seems to fail when deploying to vercel with a symlink error.

Error: EEXIST: file already exists, symlink '../../../../404.func' -> '/vercel/output/functions/:enterprise/admin/listings/:listingId/availability.func'

This is the only error log im getting when deploying. Im unsure how I can enable additional logging, or what is causing this error.
The application runs/builds fine with the current compiler.

I've tried with "@vercel/remix": "2.8.1" and "@vercel/remix": "2.8.1-patch.2"

The project is fairly large so hard to setup a reproduction as I have no clue what might be causing this.

@TooTallNate
Copy link
Member

Can you try to narrow it down, or share a deployment URL with the issue? Without a reproduction, it's hard for me to say the cause.

@TooTallNate
Copy link
Member

If I were to guess, I think you still have a remix.config.js file in your code, which you should delete. We merged a change that should make the Vite mode detection better, but it's still in the process of being rolled out.

@Jarrku
Copy link
Author

Jarrku commented Mar 18, 2024

There is no remix.config.js present.

The deployment URL is: https://web-djdxk6xr2-pexip-engage.vercel.app

It's deployed from a pnpm monorepo, and I did manage to get another smaller remix app building using the vite builder on vercel. However we're blocked on custom server file support there.

I can look into deleting routes on a test branch to try and narrow it down

@TooTallNate
Copy link
Member

Can you share the tree of your routes directory?

@Jarrku
Copy link
Author

Jarrku commented Mar 18, 2024

We're using the flat-routes package:

Object.keys(__remixManifest.routes)
[
    "root",
    "routes/$enterprise",
    "routes/$enterprise.$",
    "routes/$enterprise.404",
    "routes/$enterprise.activation",
    "routes/$enterprise.admin+/_admin-layout",
    "routes/$enterprise.admin+/conversion-analytics",
    "routes/$enterprise.admin+/customer-fields+/_layout",
    "routes/$enterprise.admin+/customer-fields+/external",
    "routes/$enterprise.admin+/customer-fields+/index",
    "routes/$enterprise.admin+/customer-fields+/internal",
    "routes/$enterprise.admin+/employees+/$employeeId._index/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.availability.assign/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.availability/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.availability_.$templateId.time-range.$timeRangeId/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.availability_.$templateId.time-range.new/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.availability_.$templateId/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.calendars/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.expertises.$officeId/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.expertises._index/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.profile.assigned-offices/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.profile.translations.$field/_route",
    "routes/$enterprise.admin+/employees+/$employeeId.profile/_route",
    "routes/$enterprise.admin+/employees+/$employeeId/_layout",
    "routes/$enterprise.admin+/employees+/index",
    "routes/$enterprise.admin+/employees+/new",
    "routes/$enterprise.admin+/employees+/new.translations.$field",
    "routes/$enterprise.admin+/enabled-features",
    "routes/$enterprise.admin+/forms+/$formId.answer-options.$answerOptionId.translations.$field",
    "routes/$enterprise.admin+/forms+/$formId.translations.$field",
    "routes/$enterprise.admin+/forms+/$formId.validator.translations.$field",
    "routes/$enterprise.admin+/forms+/$formId/_route",
    "routes/$enterprise.admin+/forms+/index",
    "routes/$enterprise.admin+/forms+/new",
    "routes/$enterprise.admin+/forms+/new.answer-options.$answerOptionId.translations.$field",
    "routes/$enterprise.admin+/forms+/new.translations.$field",
    "routes/$enterprise.admin+/forms+/new.validator.translations.$field",
    "routes/$enterprise.admin+/general+/_layout",
    "routes/$enterprise.admin+/general+/index",
    "routes/$enterprise.admin+/general+/scheduling",
    "routes/$enterprise.admin+/general+/settings",
    "routes/$enterprise.admin+/general+/settings.translations.name",
    "routes/$enterprise.admin+/index",
    "routes/$enterprise.admin+/insights",
    "routes/$enterprise.admin+/lead-segments+/$leadSegmentId._index/_route",
    "routes/$enterprise.admin+/lead-segments+/$leadSegmentId.callback-rules/_route",
    "routes/$enterprise.admin+/lead-segments+/$leadSegmentId.planning-rules/_route",
    "routes/$enterprise.admin+/lead-segments+/$leadSegmentId.settings/_route",
    "routes/$enterprise.admin+/lead-segments+/$leadSegmentId/_layout",
    "routes/$enterprise.admin+/lead-segments+/index",
    "routes/$enterprise.admin+/lead-segments+/new",
    "routes/$enterprise.admin+/listings+/$listingId._index/_route",
    "routes/$enterprise.admin+/listings+/$listingId.availability._index/_route",
    "routes/$enterprise.admin+/listings+/$listingId.availability_.$date.$timeSlotId/_route",
    "routes/$enterprise.admin+/listings+/$listingId.availability_.$date/_route",
    "routes/$enterprise.admin+/listings+/$listingId.availability_/_layout",
    "routes/$enterprise.admin+/listings+/$listingId.general.settings.employees/_route",
    "routes/$enterprise.admin+/listings+/$listingId.general.settings.offices/_route",
    "routes/$enterprise.admin+/listings+/$listingId.general.settings.subjects/_route",
    "routes/$enterprise.admin+/listings+/$listingId.general.settings.tags/_route",
    "routes/$enterprise.admin+/listings+/$listingId.general.translations.$field/_route",
    "routes/$enterprise.admin+/listings+/$listingId.general/_route",
    "routes/$enterprise.admin+/listings+/$listingId/_layout",
    "routes/$enterprise.admin+/listings+/index",
    "routes/$enterprise.admin+/listings+/new",
    "routes/$enterprise.admin+/listings+/new.translations.$field",
    "routes/$enterprise.admin+/notifications+/_layout",
    "routes/$enterprise.admin+/notifications+/agent",
    "routes/$enterprise.admin+/notifications+/customer",
    "routes/$enterprise.admin+/notifications+/index",
    "routes/$enterprise.admin+/offices+/$officeId._index/_route",
    "routes/$enterprise.admin+/offices+/$officeId.agents.add/_route",
    "routes/$enterprise.admin+/offices+/$officeId.agents/_route",
    "routes/$enterprise.admin+/offices+/$officeId.callback-rules/_route",
    "routes/$enterprise.admin+/offices+/$officeId.general.translations.$field/_route",
    "routes/$enterprise.admin+/offices+/$officeId.general/_route",
    "routes/$enterprise.admin+/offices+/$officeId.office-managers.add/_route",
    "routes/$enterprise.admin+/offices+/$officeId.office-managers/_route",
    "routes/$enterprise.admin+/offices+/$officeId/_layout",
    "routes/$enterprise.admin+/offices+/index",
    "routes/$enterprise.admin+/offices+/new",
    "routes/$enterprise.admin+/offices+/new.translations.$field",
    "routes/$enterprise.admin+/plugin+/_layout",
    "routes/$enterprise.admin+/plugin+/domains",
    "routes/$enterprise.admin+/plugin+/index",
    "routes/$enterprise.admin+/plugin+/settings",
    "routes/$enterprise.admin+/reminders",
    "routes/$enterprise.admin+/subject-groups+/$subjectGroupId",
    "routes/$enterprise.admin+/subject-groups+/$subjectGroupId.translations.$field",
    "routes/$enterprise.admin+/subject-groups+/new",
    "routes/$enterprise.admin+/subject-groups+/new.translations.$field",
    "routes/$enterprise.admin+/subjects+/$subjectId._index/_route",
    "routes/$enterprise.admin+/subjects+/$subjectId.availability/_route",
    "routes/$enterprise.admin+/subjects+/$subjectId.callback-rules/_route",
    "routes/$enterprise.admin+/subjects+/$subjectId.general.translations.$field/_route",
    "routes/$enterprise.admin+/subjects+/$subjectId.general/_route",
    "routes/$enterprise.admin+/subjects+/$subjectId/_layout",
    "routes/$enterprise.admin+/subjects+/index/_index",
    "routes/$enterprise.admin+/subjects+/new",
    "routes/$enterprise.admin+/subjects+/new.translations.$field",
    "routes/$enterprise.admin+/templates+/calendar-events.$id",
    "routes/$enterprise.admin+/templates+/emails.$id",
    "routes/$enterprise.admin+/templates+/emails.$id.edit",
    "routes/$enterprise.admin+/templates+/emails.$id.index",
    "routes/$enterprise.admin+/templates+/emails.$id.preview",
    "routes/$enterprise.admin+/templates+/index",
    "routes/$enterprise.admin+/webhooks+/$id",
    "routes/$enterprise.admin+/webhooks+/index",
    "routes/$enterprise.admin+/webhooks+/new",
    "routes/$enterprise.api+/auth.callback",
    "routes/$enterprise.api+/branding[.css]",
    "routes/$enterprise.api+/debug-mode",
    "routes/$enterprise.appointments+/$appointmentId",
    "routes/$enterprise.appointments+/$appointmentId.add-agent",
    "routes/$enterprise.appointments+/$appointmentId.add-customer",
    "routes/$enterprise.appointments+/$appointmentId.cancel",
    "routes/$enterprise.appointments+/$appointmentId.complete",
    "routes/$enterprise.appointments+/$appointmentId.reassign",
    "routes/$enterprise.appointments+/$appointmentId.reschedule",
    "routes/$enterprise.appointments+/$appointmentId.uninvite-agent.$employeeId",
    "routes/$enterprise.appointments+/$appointmentId.uninvite-customer.$customerId",
    "routes/$enterprise.appointments+/index",
    "routes/$enterprise.calendar+/$officeId",
    "routes/$enterprise.calendar+/$officeId.$employeeId",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId.add-agent",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId.add-customer",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId.cancel",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId.complete",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId.reassign",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId.reschedule",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId.uninvite-agent.$employeeId",
    "routes/$enterprise.calendar+/$officeId.$employeeId.appointments.$appointmentId.uninvite-customer.$customerId",
    "routes/$enterprise.calendar+/$officeId.$employeeId.external-calendar-event.$id",
    "routes/$enterprise.calendar+/$officeId.$employeeId.favorite-agents",
    "routes/$enterprise.calendar+/$officeId.$employeeId.invite-customer",
    "routes/$enterprise.calendar+/$officeId.$employeeId.invite-customer.add-agent",
    "routes/$enterprise.calendar+/$officeId.$employeeId.invite-customer.add-customer",
    "routes/$enterprise.calendar+/$officeId.$employeeId.invite-customer.create-customer",
    "routes/$enterprise.calendar+/$officeId.$employeeId.listing-event.$id",
    "routes/$enterprise.calendar+/$officeId.$employeeId.meeting-link",
    "routes/$enterprise.calendar+/$officeId.$employeeId.new",
    "routes/$enterprise.calendar+/$officeId.$employeeId.new.add-agent",
    "routes/$enterprise.calendar+/$officeId.$employeeId.new.add-customer",
    "routes/$enterprise.calendar+/$officeId.$employeeId.new.create-customer",
    "routes/$enterprise.calendar+/$officeId.$employeeId.user-defined-event.$id",
    "routes/$enterprise.calendar+/$officeId.index",
    "routes/$enterprise.calendar+/index",
    "routes/$enterprise.customers+/$customerId",
    "routes/$enterprise.customers+/$customerId.$appointmentId",
    "routes/$enterprise.customers+/$customerId.$appointmentId.add-agent",
    "routes/$enterprise.customers+/$customerId.$appointmentId.add-customer",
    "routes/$enterprise.customers+/$customerId.$appointmentId.cancel",
    "routes/$enterprise.customers+/$customerId.$appointmentId.complete",
    "routes/$enterprise.customers+/$customerId.$appointmentId.reassign",
    "routes/$enterprise.customers+/$customerId.$appointmentId.reschedule",
    "routes/$enterprise.customers+/$customerId.$appointmentId.uninvite-agent.$employeeId",
    "routes/$enterprise.customers+/$customerId.$appointmentId.uninvite-customer.$unusedId",
    "routes/$enterprise.customers+/$customerId.translations.$field",
    "routes/$enterprise.customers+/_$customerId-layout",
    "routes/$enterprise.customers+/index",
    "routes/$enterprise.index",
    "routes/$enterprise.my-appointments+/appointments",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId.add-agent",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId.add-customer",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId.cancel",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId.complete",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId.reassign",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId.reschedule",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId.uninvite-agent.$employeeId",
    "routes/$enterprise.my-appointments+/appointments.$appointmentId.uninvite-customer.$customerId",
    "routes/$enterprise.my-appointments+/callbacks",
    "routes/$enterprise.my-appointments+/callbacks.$callbackId",
    "routes/$enterprise.my-appointments+/index",
    "routes/$enterprise.no-access",
    "routes/$enterprise.not-found",
    "routes/$enterprise.settings+/_layout",
    "routes/$enterprise.settings+/account",
    "routes/$enterprise.settings+/account.assigned-offices",
    "routes/$enterprise.settings+/account.translations.$field",
    "routes/$enterprise.settings+/availability",
    "routes/$enterprise.settings+/availability.assign",
    "routes/$enterprise.settings+/availability_.$templateId",
    "routes/$enterprise.settings+/availability_.$templateId.time-range.$timeRangeId",
    "routes/$enterprise.settings+/availability_.$templateId.time-range.new",
    "routes/$enterprise.settings+/debug-settings",
    "routes/$enterprise.settings+/external-calendars",
    "routes/$enterprise.settings+/index",
    "routes/$enterprise.settings+/password",
    "routes/$enterprise.team+/$officeId",
    "routes/$enterprise.team+/$officeId._index",
    "routes/$enterprise.team+/$officeId.appointments",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId.add-agent",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId.add-customer",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId.cancel",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId.complete",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId.reassign",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId.reschedule",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId.uninvite-agent.$employeeId",
    "routes/$enterprise.team+/$officeId.appointments.$appointmentId.uninvite-customer.$customerId",
    "routes/$enterprise.team+/$officeId.callbacks",
    "routes/$enterprise.team+/$officeId.callbacks.$callbackId",
    "routes/$enterprise.team+/$officeId.insights",
    "routes/$enterprise.team+/$officeId.members",
    "routes/$enterprise.team+/$officeId.members.$employeeId",
    "routes/$enterprise.team+/$officeId.members.$employeeId._index",
    "routes/$enterprise.team+/$officeId.members.$employeeId.availability",
    "routes/$enterprise.team+/$officeId.members.$employeeId.availability.assign",
    "routes/$enterprise.team+/$officeId.members.$employeeId.availability_.$templateId",
    "routes/$enterprise.team+/$officeId.members.$employeeId.availability_.$templateId.time-range.$timeRangeId",
    "routes/$enterprise.team+/$officeId.members.$employeeId.availability_.$templateId.time-range.new",
    "routes/$enterprise.team+/$officeId.members.$employeeId.calendars",
    "routes/$enterprise.team+/$officeId.members.$employeeId.expertises",
    "routes/$enterprise.team+/$officeId.members.$employeeId.profile",
    "routes/$enterprise.team+/$officeId.members.$employeeId.profile.assigned-offices",
    "routes/$enterprise.team+/$officeId.members.$employeeId.profile.translations.$field",
    "routes/$enterprise.team+/$officeId.members._index",
    "routes/$enterprise.team+/$officeId.members.agents",
    "routes/$enterprise.team+/$officeId.members.agents.add",
    "routes/$enterprise.team+/$officeId.members.office-managers",
    "routes/$enterprise.team+/$officeId.members.office-managers.add",
    "routes/$enterprise.team+/$officeId.office",
    "routes/$enterprise.team+/$officeId.office.translations.$field",
    "routes/$enterprise.team+/$officeId.scheduling",
    "routes/$enterprise.team+/$officeId.scheduling._index",
    "routes/$enterprise.team+/$officeId.scheduling.availability",
    "routes/$enterprise.team+/$officeId.scheduling.callback-rules",
    "routes/$enterprise.team+/$officeId.scheduling.coverage-regions",
    "routes/$enterprise.team+/$officeId.scheduling.coverage-regions.$employeeId",
    "routes/$enterprise.team+/$officeId.scheduling.coverage-regions.$employeeId.csv",
    "routes/$enterprise.team+/$officeId.scheduling.expertises",
    "routes/$enterprise.team+/$officeId.scheduling.expertises.agents",
    "routes/$enterprise.team+/_index",
    "routes/$enterprise.trpc.$trpc/_trpc",
    "routes/$enterprise_.login",
    "routes/$enterprise_.logout",
    "routes/404",
    "routes/api+/country-flag.$language[.svg]",
    "routes/api+/csp-reports",
    "routes/healthz",
    "routes/index"
]
This is our complete `routes` tree in disk
.
 |-$enterprise.team+
 | |-$officeId.members.agents.add.tsx
 | |-$officeId.scheduling._index.tsx
 | |-$officeId.office.tsx
 | |-$officeId.appointments.$appointmentId.add-customer.tsx
 | |-$officeId.members.$employeeId.availability_.$templateId.time-range.$timeRangeId.tsx
 | |-$officeId.appointments.$appointmentId.tsx
 | |-$officeId.scheduling.coverage-regions.tsx
 | |-$officeId.members.$employeeId.availability_.$templateId.tsx
 | |-$officeId.members.$employeeId.profile.translations.$field.tsx
 | |-$officeId.appointments.tsx
 | |-$officeId.members.$employeeId.expertises.tsx
 | |-$officeId.appointments.$appointmentId.add-agent.tsx
 | |-stores
 | | |-TeamExpertises.store.ts
 | | |-utils.ts
 | |-$officeId.appointments.$appointmentId.cancel.tsx
 | |-$officeId.members.agents.tsx
 | |-$officeId._index.tsx
 | |-$officeId.tsx
 | |-$officeId.appointments.$appointmentId.complete.tsx
 | |-$officeId.office.translations.$field.tsx
 | |-$officeId.callbacks.tsx
 | |-$officeId.members.$employeeId._index.tsx
 | |-$officeId.insights.tsx
 | |-$officeId.members.$employeeId.tsx
 | |-$officeId.callbacks.$callbackId.tsx
 | |-$officeId.members.office-managers.tsx
 | |-$officeId.appointments.$appointmentId.reschedule.tsx
 | |-$officeId.members.$employeeId.availability.assign.tsx
 | |-$officeId.appointments.$appointmentId.uninvite-customer.$customerId.tsx
 | |-$officeId.scheduling.callback-rules.tsx
 | |-$officeId.members.tsx
 | |-$officeId.members.$employeeId.availability_.$templateId.time-range.new.tsx
 | |-$officeId.members._index.tsx
 | |-$officeId.members.$employeeId.calendars.tsx
 | |-$officeId.appointments.$appointmentId.reassign.tsx
 | |-$officeId.members.$employeeId.availability.tsx
 | |-$officeId.scheduling.coverage-regions.$employeeId.csv.tsx
 | |-$officeId.scheduling.expertises.agents.tsx
 | |-$officeId.scheduling.tsx
 | |-$officeId.scheduling.expertises.tsx
 | |-$officeId.appointments.$appointmentId.uninvite-agent.$employeeId.tsx
 | |-$officeId.scheduling.coverage-regions.$employeeId.tsx
 | |-$officeId.members.$employeeId.profile.tsx
 | |-$officeId.scheduling.availability.tsx
 | |-$officeId.members.$employeeId.profile.assigned-offices.tsx
 | |-_index.tsx
 | |-$officeId.members.office-managers.add.tsx
 |-index.tsx
 |-$enterprise.my-appointments+
 | |-index.tsx
 | |-appointments.$appointmentId.uninvite-customer.$customerId.tsx
 | |-appointments.$appointmentId.tsx
 | |-appointments.$appointmentId.reschedule.tsx
 | |-callbacks.tsx
 | |-appointments.$appointmentId.cancel.tsx
 | |-appointments.$appointmentId.complete.tsx
 | |-utils
 | | |-Appointment.action.server.ts
 | | |-callbacks-overview.tsx
 | | |-appointment-overview.loader.server.ts
 | | |-AppointmentOverview.tsx
 | |-appointments.$appointmentId.uninvite-agent.$employeeId.tsx
 | |-appointments.$appointmentId.add-agent.tsx
 | |-callbacks.$callbackId.tsx
 | |-appointments.$appointmentId.reassign.tsx
 | |-appointments.tsx
 | |-appointments.$appointmentId.add-customer.tsx
 |-404.tsx
 |-$enterprise.trpc.$trpc
 | |-routers
 | | |-regions.router.server.ts
 | | |-admin.lead-segment.router.server.ts
 | | |-me.router.server.ts
 | | |-enterprise-settings.router.server.ts
 | | |-offices.router.server.ts
 | | |-listings.router.server.ts
 | | |-admin.employee.router.server.ts
 | | |-forms.router.server.ts
 | | |-googleApi.router.server.ts
 | | |-subject-groups.router.server.ts
 | | |-time-table.server.ts
 | | |-appointment.router.server.ts
 | | |-availability-settings.router.server.ts
 | | |-meeting-types.router.server.ts
 | | |-customers.router.server.ts
 | | |-leadSegments.router.server.ts
 | | |-employees.router.server.ts
 | | |-subjects.router.server.ts
 | |-trpc.server.ts
 | |-useAsyncTrcpList.ts
 | |-trpcClient.tsx
 | |-_trpc.tsx
 | |-trpc.router.server.ts
 |-$enterprise.not-found.tsx
 |-api+
 | |-country-flag.$language[.svg].tsx
 | |-csp-reports.tsx
 |-healthz.ts
 |-$enterprise.404.tsx
 |-$enterprise.$.tsx
 |-$enterprise.no-access.tsx
 |-$enterprise.customers+
 | |-index.tsx
 | |-$customerId.$appointmentId.uninvite-agent.$employeeId.tsx
 | |-$customerId.$appointmentId.reschedule.tsx
 | |-$customerId.$appointmentId.add-customer.tsx
 | |-$customerId.tsx
 | |-$customerId.$appointmentId.reassign.tsx
 | |-$customerId.$appointmentId.add-agent.tsx
 | |-_$customerId-layout.tsx
 | |-$customerId.$appointmentId.tsx
 | |-$customerId.$appointmentId.cancel.tsx
 | |-$customerId.translations.$field.tsx
 | |-$customerId.$appointmentId.uninvite-customer.$unusedId.tsx
 | |-$customerId.$appointmentId.complete.tsx
 |-$enterprise.index.tsx
 |-$enterprise_.login.ts
 |-$enterprise.calendar+
 | |-index.tsx
 | |-$officeId.$employeeId.invite-customer.create-customer.tsx
 | |-$officeId.$employeeId.meeting-link.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.reassign.tsx
 | |-$officeId.index.tsx
 | |-$officeId.$employeeId.new.add-agent.tsx
 | |-$officeId.$employeeId.user-defined-event.$id.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.tsx
 | |-$officeId.$employeeId.invite-customer.tsx
 | |-$officeId.$employeeId.invite-customer.add-customer.tsx
 | |-utils
 | | |-create-appointment.components.tsx
 | | |-create-meeting-link.store.ts
 | | |-create-appointment-loader.server.ts
 | | |-create-appointment.store.ts
 | |-$officeId.$employeeId.external-calendar-event.$id.tsx
 | |-$officeId.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.reschedule.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.cancel.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.uninvite-customer.$customerId.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.add-agent.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.complete.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.uninvite-agent.$employeeId.tsx
 | |-$officeId.$employeeId.invite-customer.add-agent.tsx
 | |-$officeId.$employeeId.new.create-customer.tsx
 | |-$officeId.$employeeId.listing-event.$id.tsx
 | |-$officeId.$employeeId.new.add-customer.tsx
 | |-$officeId.$employeeId.tsx
 | |-$officeId.$employeeId.new.tsx
 | |-$officeId.$employeeId.appointments.$appointmentId.add-customer.tsx
 | |-$officeId.$employeeId.favorite-agents.tsx
 |-$enterprise.api+
 | |-branding[.css].ts
 | |-debug-mode.ts
 | |-auth.callback.ts
 |-$enterprise.appointments+
 | |-index.tsx
 | |-$appointmentId.reassign.tsx
 | |-$appointmentId.reschedule.tsx
 | |-$appointmentId.add-customer.tsx
 | |-$appointmentId.add-agent.tsx
 | |-$appointmentId.uninvite-customer.$customerId.tsx
 | |-$appointmentId.complete.tsx
 | |-$appointmentId.cancel.tsx
 | |-$appointmentId.uninvite-agent.$employeeId.tsx
 | |-$appointmentId.tsx
 |-$enterprise_.logout.tsx
 |-$enterprise.settings+
 | |-index.tsx
 | |-external-calendars.tsx
 | |-availability_.$templateId.tsx
 | |-availability.assign.tsx
 | |-account.tsx
 | |-availability.tsx
 | |-account.assigned-offices.tsx
 | |-availability_.$templateId.time-range.new.tsx
 | |-account.translations.$field.tsx
 | |-_layout.tsx
 | |-password.tsx
 | |-debug-settings.tsx
 | |-availability_.$templateId.time-range.$timeRangeId.tsx
 |-$enterprise.admin+
 | |-index.tsx
 | |-webhooks+
 | | |-index.tsx
 | | |-$id.tsx
 | | |-components
 | | | |-WebhookForm.tsx
 | | |-new.tsx
 | |-general+
 | | |-settings.tsx
 | | |-index.tsx
 | | |-settings.translations.name.tsx
 | | |-stores
 | | | |-GeneralSettings.store.ts
 | | |-_layout.tsx
 | | |-scheduling.tsx
 | |-templates+
 | | |-index.tsx
 | | |-emails.$id.index.tsx
 | | |-emails.$id.preview.tsx
 | | |-calendar-events.$id.tsx
 | | |-emails.$id.tsx
 | | |-emails.$id.edit.tsx
 | |-plugin+
 | | |-settings.tsx
 | | |-index.tsx
 | | |-domains.tsx
 | | |-_layout.tsx
 | |-subject-groups+
 | | |-$subjectGroupId.tsx
 | | |-components
 | | | |-SubjectGroupStore.tsx
 | | | |-SubjectGroupForm.tsx
 | | |-new.tsx
 | | |-new.translations.$field.tsx
 | | |-$subjectGroupId.translations.$field.tsx
 | |-subjects+
 | | |-$subjectId.availability
 | | | |-_route.tsx
 | | | |-subject-availability.store.ts
 | | |-$subjectId.general
 | | | |-SubjectForm.tsx
 | | | |-_route.tsx
 | | | |-subject.model.ts
 | | | |-SubjectForm.css.ts
 | | |-$subjectId._index
 | | | |-_route.tsx
 | | |-$subjectId
 | | | |-_layout.tsx
 | | |-$subjectId.callback-rules
 | | | |-_route.tsx
 | | |-new.tsx
 | | |-new.translations.$field.tsx
 | | |-index
 | | | |-_index.tsx
 | | |-$subjectId.general.translations.$field
 | | | |-_route.tsx
 | |-conversion-analytics.tsx
 | |-lead-segments+
 | | |-index.tsx
 | | |-$leadSegmentId.planning-rules
 | | | |-_route.tsx
 | | |-new.tsx
 | | |-$leadSegmentId._index
 | | | |-_route.tsx
 | | |-$leadSegmentId
 | | | |-_layout.tsx
 | | |-$leadSegmentId.settings
 | | | |-LeadSegmentForm.tsx
 | | | |-_route.tsx
 | | |-$leadSegmentId.callback-rules
 | | | |-_route.tsx
 | |-customer-fields+
 | | |-index.tsx
 | | |-external.tsx
 | | |-internal.tsx
 | | |-utils
 | | | |-icons.tsx
 | | |-_layout.tsx
 | |-enabled-features.tsx
 | |-listings+
 | | |-index.tsx
 | | |-$listingId.availability._index
 | | | |-_route.tsx
 | | | |-ListingAvailability.css.ts
 | | | |-ListingAvailability.store.ts
 | | |-$listingId.availability_.$date
 | | | |-_route.tsx
 | | | |-ListingAvailabilityDate.store.ts
 | | |-$listingId.availability_
 | | | |-_layout.tsx
 | | |-$listingId
 | | | |-_layout.tsx
 | | |-$listingId._index
 | | | |-_route.tsx
 | | |-$listingId.general
 | | | |-PutListingSchedulingSettings.action.server.ts
 | | | |-_route.tsx
 | | | |-ListingForm.tsx
 | | | |-PutListingSchedulingSettings.hooks.ts
 | | | |-Listings.store.ts
 | | |-$listingId.general.translations.$field
 | | | |-_route.tsx
 | | |-$listingId.general.settings.tags
 | | | |-_route.tsx
 | | |-new.tsx
 | | |-new.translations.$field.tsx
 | | |-$listingId.general.settings.employees
 | | | |-_route.tsx
 | | |-$listingId.general.settings.subjects
 | | | |-_route.tsx
 | | |-$listingId.availability_.$date.$timeSlotId
 | | | |-_route.tsx
 | | | |-ListingTimeSlot.css.ts
 | | |-$listingId.general.settings.offices
 | | | |-_route.tsx
 | |-forms+
 | | |-index.tsx
 | | |-$formId
 | | | |-FormForm.tsx
 | | | |-Form.css.ts
 | | | |-Form.store.ts
 | | | |-_route.tsx
 | | |-new.validator.translations.$field.tsx
 | | |-new.answer-options.$answerOptionId.translations.$field.tsx
 | | |-$formId.validator.translations.$field.tsx
 | | |-new.tsx
 | | |-$formId.translations.$field.tsx
 | | |-new.translations.$field.tsx
 | | |-$formId.answer-options.$answerOptionId.translations.$field.tsx
 | |-reminders.tsx
 | |-offices+
 | | |-$officeId.office-managers.add
 | | | |-_route.tsx
 | | |-index.tsx
 | | |-$officeId.agents.add
 | | | |-PutOfficeRelation.hooks.ts
 | | | |-_route.tsx
 | | | |-PutOfficeRelation.action.server.ts
 | | |-$officeId
 | | | |-_layout.tsx
 | | |-$officeId.callback-rules
 | | | |-_route.tsx
 | | |-$officeId._index
 | | | |-_route.tsx
 | | |-$officeId.general.translations.$field
 | | | |-_route.tsx
 | | |-$officeId.agents
 | | | |-AgentList.tsx
 | | | |-DeleteOfficeRelation.action.server.ts
 | | | |-_route.tsx
 | | | |-OfficeEmployeeRow.tsx
 | | | |-DeleteOfficeRelation.hooks.ts
 | | |-new.tsx
 | | |-new.translations.$field.tsx
 | | |-$officeId.office-managers
 | | | |-_route.tsx
 | | | |-OfficeManagerList.tsx
 | | |-$officeId.general
 | | | |-OfficeForm.tsx
 | | | |-Office.store.ts
 | | | |-_route.tsx
 | | | |-action.server.ts
 | |-insights.tsx
 | |-employees+
 | | |-index.tsx
 | | |-$employeeId.availability.assign
 | | | |-_route.tsx
 | | | |-EmployeeAvailabilityAssign.tsx
 | | |-$employeeId._index
 | | | |-_route.tsx
 | | |-$employeeId.expertises.$officeId
 | | | |-_route.tsx
 | | |-$employeeId.availability_.$templateId
 | | | |-AvailabilityTemplate.tsx
 | | | |-AvailabilityTemplate.store.ts
 | | | |-_route.tsx
 | | |-$employeeId
 | | | |-_layout.tsx
 | | |-$employeeId.profile.translations.$field
 | | | |-_route.tsx
 | | |-$employeeId.calendars
 | | | |-ExternalCalendars.store.ts
 | | | |-ExternalCalendars.hooks.ts
 | | | |-ExternalCalendarAccounts.tsx
 | | | |-_route.tsx
 | | | |-ExternalCalendars.action.server.ts
 | | |-$employeeId.availability
 | | | |-EmployeeAvailability.css.ts
 | | | |-_route.tsx
 | | | |-EmployeeAvailability.tsx
 | | | |-EmployeeAvailability.store.ts
 | | |-new.tsx
 | | |-$employeeId.expertises._index
 | | | |-_route.tsx
 | | |-new.translations.$field.tsx
 | | |-$employeeId.profile
 | | | |-employee-profile.store.ts
 | | | |-_route.tsx
 | | | |-EmployeeForm
 | | | | |-EmployeeForm.tsx
 | | | | |-EmployeeForm.action.server.ts
 | | | | |-EmployeeForm.css.ts
 | | | | |-UpdateAvatar.tsx
 | | |-$employeeId.availability_.$templateId.time-range.$timeRangeId
 | | | |-AvailabilityTemplateTimeRange.tsx
 | | | |-AvailabilityTemplateTimeRange.store.tsx
 | | | |-_route.tsx
 | | | |-AvailabilityTemplateTimeRangeAdvanced.tsx
 | | |-$employeeId.availability_.$templateId.time-range.new
 | | | |-_route.tsx
 | | |-$employeeId.profile.assigned-offices
 | | | |-_route.tsx
 | | | |-employee-assigned-offices.store.ts
 | | | |-employee-assigned-offices.loader.server.ts
 | |-notifications+
 | | |-index.tsx
 | | |-agent.tsx
 | | |-components
 | | | |-NotificationsDisabledEnterpriseWarning.tsx
 | | | |-NotificationSettings.store.ts
 | | |-customer.tsx
 | | |-_layout.tsx
 | |-_admin-layout.tsx
 |-$enterprise.tsx
 |-$enterprise.activation.tsx

@TooTallNate
Copy link
Member

If you could give me a reproduction repo then I can take a closer look.

@Jarrku
Copy link
Author

Jarrku commented Mar 20, 2024

I'll try to trim down the project to pinpoint the issue and create a reproduction.
I'm not sure if I'll be able to do this this week, but I'll keep you updated, thank you for the help already!

Do you prefer to close this issue for now and I recreate an issue if I can find out more?

Edit:
Narrowed it down to one file(layout route) that triggers the issue. Ill try to setup a repro with that structure

@Jarrku
Copy link
Author

Jarrku commented Mar 20, 2024

Made a reproduction here, started from the vercel example:
https://github.com/Jarrku/vercel-remix-layout-bug/tree/main

If you run it locally, you can see it working using the links in the root page.

@TooTallNate
Copy link
Member

Thank you for the repro. I can reproduce the issue with this. We are investigating

@Jarrku
Copy link
Author

Jarrku commented Mar 22, 2024

FWIW I've adjusted our routes from:

- $id.subpath._index
- $id.subpath_.hello
- $id.subpath_
- $id

to:

- $id.subpath._index
- $id.subpath._detail.hello
- $id.subpath._detail
- $id

Which leads to the same behaviour & avoids the build error. So we've been able to work around this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants