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:
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:
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:
From packages/shared/src/common/enums.ts:
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:
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
- Create replacement modules in owners (
apps/map, apps/admin, packages/db, packages/auth).
- Move high-confidence symbols first and update imports in one PR.
- Add temporary re-exports in
@acme/shared (optional) for a short migration window.
- Remove dead exports and duplicate
Permissions declaration.
- 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.
Summary
@acme/sharedcurrently 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/sharedfor truly cross-app primitives.Audit scope
Reviewed:
packages/shared/src/app/constants.tspackages/shared/src/app/enums.tspackages/shared/src/app/types.tspackages/shared/src/common/constants.tspackages/shared/src/common/enums.tsThen mapped imports across
apps/,packages/,tooling/, andscripts/.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_CENTERDEFAULT_ZOOMCLOSE_ZOOMCOUNTRY_ZOOMMAX_PLACES_AUTOCOMPLETE_RADIUSMIN_TEXT_LENGTH_FOR_SEARCH_RESULTSSELECTED_ITEM_DEBOUNCE_TIME_MSSHORT_DAY_ORDERSIDEBAR_WIDTHSTART_END_TIME_DB_FORMATSTART_END_TIME_DISPLAY_FORMATfilterButtonClassNamefeedbackSchemaFeedbackSchemaFrom
packages/shared/src/app/enums.ts:FeedbackType(currently map help flow)From
packages/shared/src/app/types.ts:PlaceResultPlaceDetailsFrom
packages/shared/src/common/constants.ts:RERENDER_LOGSisProduction(currently only map imports)Move to apps/admin
From
packages/shared/src/app/constants.ts:ADMIN_HEADER_HEIGHTADMIN_SIDEBAR_WIDTHEVENT_CATEGORY_OPTIONSFrom
packages/shared/src/app/types.ts:RoleEntryMove to apps/api (or package auth middleware module)
From
packages/shared/src/app/constants.ts:ADMIN_PATHSEDITOR_PATHSroutes(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_IDTEST_REGION_1_ORG_IDTEST_REGION_2_ORG_IDTEST_REGION_3_ORG_IDTEST_SECTOR_ORG_IDTEST_AREA_ORG_IDTEST_AO_1_ORG_IDTEST_AO_2_ORG_IDTEST_EDITOR_USER_IDTEST_ADMIN_USER_IDTEST_EDITOR_ROLE_IDTEST_ADMIN_ROLE_IDFrom
packages/shared/src/app/enums.ts:EventTypesEventTagsAchievementCadenceFrom
packages/shared/src/app/types.ts:SlackUserMetaSlackSpacesMetaLocationMetaOrgMetaAttendanceMetaMove to packages/auth
From
packages/shared/src/common/constants.ts:COOKIE_NAMEFrom
packages/shared/src/common/enums.ts:ProviderIdCleanup candidates (unused exports)
Consider deleting or relocating after confirming no dynamic imports:
From
packages/shared/src/app/constants.ts:SnapPointDAY_ORDERFAR_ZOOMMAX_DESKTOP_WORKOUT_PANEL_WIDTHMOBILE_SEARCH_RESULT_ITEM_HEIGHTgetAuthRoutesAppTypePermissionsMAP_API_PREFIXApiKeyTagsFrom
packages/shared/src/app/enums.ts:PermissionsOrgTypesEventCategoriesFrom
packages/shared/src/app/types.ts:WorkoutDataGroupedMapDataGeoPluginResultLocation(const + type)isDDDApiKeyInfoOrgRoleFrom
packages/shared/src/common/enums.ts:ErrorMessageKeep in @acme/shared (currently truly cross-app)
Examples with broad usage:
API_PREFIX_V1HeaderClientisDevelopmentDayOfWeekRequestTypeUserRoleEVENT_CATEGORY_LABEL_MAPCOUNTRIESSuggested execution plan
apps/map,apps/admin,packages/db,packages/auth).@acme/shared(optional) for a short migration window.Permissionsdeclaration.pnpm lint,pnpm typecheck, and affected tests.Definition of done
packages/shared/src/appandpackages/shared/src/commononly expose symbols used by 3+ scopes or clearly cross-domain primitives.@acme/shared.