vercel / remix

Build Better Websites. Create modern, resilient user experiences with web fundamentals.
https://remix.run
MIT License
63 stars 20 forks source link

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

Open Jarrku opened 6 months ago

Jarrku commented 6 months ago

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 commented 6 months ago

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 commented 6 months ago

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 commented 6 months ago

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 commented 6 months ago

Can you share the tree of your routes directory?

Jarrku commented 6 months ago

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 commented 6 months ago

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

Jarrku commented 6 months ago

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 commented 6 months ago

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 commented 6 months ago

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

Jarrku commented 6 months ago

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.