index.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import type { ReactNode } from 'react'
  2. import * as DevToolbarModule from './DevToolbar'
  3. import * as DevToolbarContextModule from './DevToolbarContext'
  4. import * as DevToolbarTriggerModule from './DevToolbarTrigger'
  5. import type { DevTelemetryToolbarContextType } from './types'
  6. // Tree-shaking pattern: conditionally export stubs outside local/staging.
  7. // The bundler replaces NEXT_PUBLIC_ENVIRONMENT at build time, making the
  8. // ternary static. In production builds (env === 'prod'), the implementation
  9. // modules are eliminated from the bundle.
  10. // Duplicated for tree-shaking — bundler must see literal process.env reference.
  11. // Keep in sync: DevToolbarContext.tsx, DevToolbar.tsx, DevToolbarTrigger.tsx, feature-flags.tsx
  12. const env = process.env.NEXT_PUBLIC_ENVIRONMENT
  13. const isToolbarEnabled = env === 'local' || env === 'staging'
  14. const noopContext: DevTelemetryToolbarContextType = {
  15. isEnabled: false,
  16. isOpen: false,
  17. setIsOpen: () => {},
  18. events: [],
  19. setEvents: () => {},
  20. dismissToolbar: () => {},
  21. }
  22. export const DevToolbarProvider = !isToolbarEnabled
  23. ? ({ children }: { children: ReactNode; apiUrl?: string }) => children
  24. : DevToolbarContextModule.DevToolbarProvider
  25. export const useDevToolbar = !isToolbarEnabled
  26. ? () => noopContext
  27. : DevToolbarContextModule.useDevToolbar
  28. export const DevToolbar = !isToolbarEnabled
  29. ? (_props: { extraTabs?: import('./types').ExtraTab[] }) => null
  30. : DevToolbarModule.DevToolbar
  31. export const DevToolbarTrigger = !isToolbarEnabled
  32. ? () => null
  33. : DevToolbarTriggerModule.DevToolbarTrigger
  34. export type { DevTelemetryEvent, DevToolbarConfig, ExtraTab } from './types'