Skip to content

Refactor @acme/shared: move app-specific constants/enums/types to owning apps/packages #608

Description

@taterhead247

Summary

@acme/shared currently contains many exports that are app/domain-specific (mostly map/admin/auth/db concerns), which makes the package noisy and increases coupling.

This issue proposes moving non-universal constants/enums/types to their owning apps/packages, leaving @acme/shared for truly cross-app primitives.

Audit scope

Reviewed:

  • packages/shared/src/app/constants.ts
  • packages/shared/src/app/enums.ts
  • packages/shared/src/app/types.ts
  • packages/shared/src/common/constants.ts
  • packages/shared/src/common/enums.ts

Then mapped imports across apps/, packages/, tooling/, and scripts/.

High-confidence moves (safe first pass)

These are imported by only one scope (or clearly belong to one domain):

Move to apps/map

From packages/shared/src/app/constants.ts:

  • BOONE_CENTER
  • DEFAULT_ZOOM
  • CLOSE_ZOOM
  • COUNTRY_ZOOM
  • MAX_PLACES_AUTOCOMPLETE_RADIUS
  • MIN_TEXT_LENGTH_FOR_SEARCH_RESULTS
  • SELECTED_ITEM_DEBOUNCE_TIME_MS
  • SHORT_DAY_ORDER
  • SIDEBAR_WIDTH
  • START_END_TIME_DB_FORMAT
  • START_END_TIME_DISPLAY_FORMAT
  • filterButtonClassName
  • feedbackSchema
  • FeedbackSchema

From packages/shared/src/app/enums.ts:

  • FeedbackType (currently map help flow)

From packages/shared/src/app/types.ts:

  • PlaceResult
  • PlaceDetails

From packages/shared/src/common/constants.ts:

  • RERENDER_LOGS
  • isProduction (currently only map imports)

Move to apps/admin

From packages/shared/src/app/constants.ts:

  • ADMIN_HEADER_HEIGHT
  • ADMIN_SIDEBAR_WIDTH
  • EVENT_CATEGORY_OPTIONS

From packages/shared/src/app/types.ts:

  • RoleEntry

Move to apps/api (or package auth middleware module)

From packages/shared/src/app/constants.ts:

  • ADMIN_PATHS
  • EDITOR_PATHS
  • routes (if only used for middleware/admin nav concerns)

Domain/package relocations (not app-only, but should leave @acme/shared)

These are cross-scope but domain-specific, so they can move to owning packages:

Move to packages/db test helpers

From packages/shared/src/app/constants.ts:

  • TEST_NATION_ORG_ID
  • TEST_REGION_1_ORG_ID
  • TEST_REGION_2_ORG_ID
  • TEST_REGION_3_ORG_ID
  • TEST_SECTOR_ORG_ID
  • TEST_AREA_ORG_ID
  • TEST_AO_1_ORG_ID
  • TEST_AO_2_ORG_ID
  • TEST_EDITOR_USER_ID
  • TEST_ADMIN_USER_ID
  • TEST_EDITOR_ROLE_ID
  • TEST_ADMIN_ROLE_ID

From packages/shared/src/app/enums.ts:

  • EventTypes
  • EventTags
  • AchievementCadence

From packages/shared/src/app/types.ts:

  • SlackUserMeta
  • SlackSpacesMeta
  • LocationMeta
  • OrgMeta
  • AttendanceMeta

Move to packages/auth

From packages/shared/src/common/constants.ts:

  • COOKIE_NAME

From packages/shared/src/common/enums.ts:

  • ProviderId

Cleanup candidates (unused exports)

Consider deleting or relocating after confirming no dynamic imports:

From packages/shared/src/app/constants.ts:

  • SnapPoint
  • DAY_ORDER
  • FAR_ZOOM
  • MAX_DESKTOP_WORKOUT_PANEL_WIDTH
  • MOBILE_SEARCH_RESULT_ITEM_HEIGHT
  • getAuthRoutes
  • AppType
  • Permissions
  • MAP_API_PREFIX
  • ApiKeyTags

From packages/shared/src/app/enums.ts:

  • duplicate Permissions
  • OrgTypes
  • EventCategories

From packages/shared/src/app/types.ts:

  • WorkoutData
  • GroupedMapData
  • GeoPluginResult
  • Location (const + type)
  • isDDD
  • ApiKeyInfo
  • OrgRole

From packages/shared/src/common/enums.ts:

  • ErrorMessage

Keep in @acme/shared (currently truly cross-app)

Examples with broad usage:

  • API_PREFIX_V1
  • Header
  • Client
  • isDevelopment
  • DayOfWeek
  • RequestType
  • UserRole
  • EVENT_CATEGORY_LABEL_MAP
  • COUNTRIES

Suggested execution plan

  1. Create replacement modules in owners (apps/map, apps/admin, packages/db, packages/auth).
  2. Move high-confidence symbols first and update imports in one PR.
  3. Add temporary re-exports in @acme/shared (optional) for a short migration window.
  4. Remove dead exports and duplicate Permissions declaration.
  5. Re-run pnpm lint, pnpm typecheck, and affected tests.

Definition of done

  • packages/shared/src/app and packages/shared/src/common only expose symbols used by 3+ scopes or clearly cross-domain primitives.
  • No app-specific UI/test/auth/db constants remain in @acme/shared.
  • All imports compile and tests pass.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Fields

    Priority

    Medium

    Effort

    Medium

    App

    Monorepo

    Projects

    Status
    In progress

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions