SYMBOL INDEX (592 symbols across 224 files) FILE: apps/cdn/src/lib/cache.ts type CacheConfig (line 3) | type CacheConfig = { type Entry (line 17) | type Entry = { type ZoneCacheConfig (line 21) | type ZoneCacheConfig = CacheConfig & { class ZoneCache (line 30) | class ZoneCache> { method constructor (line 33) | constructor(config: ZoneCacheConfig) { method createCacheKey (line 37) | private createCacheKey( method get (line 47) | public async get( method set (line 70) | public async set( FILE: apps/cdn/src/lib/config.ts class ConfigService (line 7) | class ConfigService { method constructor (line 8) | constructor( method retrieveConfig (line 14) | async retrieveConfig({ FILE: apps/docs/theme.config.jsx method useNextSeoProps (line 4) | useNextSeoProps() { FILE: apps/web/emails/ContactFormularEmail.tsx type Props (line 8) | type Props = { function ContactFormularEmail (line 15) | function ContactFormularEmail({ FILE: apps/web/emails/index.tsx function sendInviteEmail (line 15) | function sendInviteEmail(props: InviteEmailProps) { function sendContactFormularEmail (line 26) | function sendContactFormularEmail(props: ContactMailProps) { FILE: apps/web/emails/invite.tsx type Props (line 12) | type Props = { function Email (line 19) | function Email({ inviteId, invitee, inviter, project }: Props) { FILE: apps/web/next.config.mjs method headers (line 52) | async headers() { FILE: apps/web/prisma/generateCoupons.ts constant COUPON_CODE_AMOUNT (line 7) | const COUPON_CODE_AMOUNT = 200; function main (line 9) | async function main() { FILE: apps/web/prisma/migrations/20221205112748_init_db/migration.sql type `Example` (line 2) | CREATE TABLE `Example` ( type `Account` (line 11) | CREATE TABLE `Account` ( type `Session` (line 32) | CREATE TABLE `Session` ( type `User` (line 44) | CREATE TABLE `User` ( type `VerificationToken` (line 56) | CREATE TABLE `VerificationToken` ( FILE: apps/web/prisma/migrations/20221205131914_bruh/migration.sql type `Project` (line 2) | CREATE TABLE `Project` ( type `ProjectMemeber` (line 12) | CREATE TABLE `ProjectMemeber` ( FILE: apps/web/prisma/migrations/20221205133208_/migration.sql type `Test` (line 2) | CREATE TABLE `Test` ( type `Option` (line 14) | CREATE TABLE `Option` ( type `Project_userId_idx` (line 25) | CREATE INDEX `Project_userId_idx` ON `Project`(`userId`) FILE: apps/web/prisma/migrations/20221205162949_make_name_and_project_id_unique_identifier_for_test/migration.sql type `Test_projectId_name_key` (line 12) | CREATE UNIQUE INDEX `Test_projectId_name_key` ON `Test`(`projectId`, `na... FILE: apps/web/prisma/migrations/20221207080237_add_event_table/migration.sql type `Event` (line 2) | CREATE TABLE `Event` ( FILE: apps/web/prisma/migrations/20221208123701_add_project_invites/migration.sql type `ProjectInvite` (line 2) | CREATE TABLE `ProjectInvite` ( FILE: apps/web/prisma/migrations/20221208152910_add_project_user/migration.sql type `ProjectUser` (line 2) | CREATE TABLE `ProjectUser` ( FILE: apps/web/prisma/migrations/20221210195541_add_stripe_info_to_projects/migration.sql type `Project_stripeCustomerId_key` (line 15) | CREATE UNIQUE INDEX `Project_stripeCustomerId_key` ON `Project`(`stripeC... type `Project_stripeSubscriptionId_key` (line 18) | CREATE UNIQUE INDEX `Project_stripeSubscriptionId_key` ON `Project`(`str... FILE: apps/web/prisma/migrations/20230104071050_add_feature_flags/migration.sql type `FeatureFlag` (line 2) | CREATE TABLE `FeatureFlag` ( type `Environment` (line 17) | CREATE TABLE `Environment` ( FILE: apps/web/prisma/migrations/20230104080059_make_featureflag_name_unique_per_project/migration.sql type `FeatureFlag_projectId_name_key` (line 8) | CREATE UNIQUE INDEX `FeatureFlag_projectId_name_key` ON `FeatureFlag`(`p... FILE: apps/web/prisma/migrations/20230104081514_fix/migration.sql type `FeatureFlag_projectId_name_environmentId_key` (line 11) | CREATE UNIQUE INDEX `FeatureFlag_projectId_name_environmentId_key` ON `F... FILE: apps/web/prisma/migrations/20230210162012_add_history/migration.sql type `FeatureFlagHistory` (line 2) | CREATE TABLE `FeatureFlagHistory` ( FILE: apps/web/prisma/migrations/20230303121237_add_flag_value_table/migration.sql type `FlagValue` (line 10) | CREATE TABLE `FlagValue` ( type `_tempFlag` (line 24) | CREATE TABLE `_tempFlag` ( type `FeatureFlag_projectId_name_key` (line 53) | CREATE UNIQUE INDEX `FeatureFlag_projectId_name_key` ON `FeatureFlag`(`p... type `FeatureFlagHistory_flagId_environmentId_idx` (line 56) | CREATE INDEX `FeatureFlagHistory_flagId_environmentId_idx` ON `FeatureFl... FILE: apps/web/prisma/migrations/20230303181212_update_history/migration.sql type `FeatureFlagHistory_flagValueId_idx` (line 21) | CREATE INDEX `FeatureFlagHistory_flagValueId_idx` ON `FeatureFlagHistory... FILE: apps/web/prisma/migrations/20230303182053_make_id_for_flag_values_unique/migration.sql type `FlagValue_id_key` (line 11) | CREATE UNIQUE INDEX `FlagValue_id_key` ON `FlagValue`(`id`) FILE: apps/web/prisma/migrations/20230305160755_rename_flag_value_and_add_index_for_faster_access/migration.sql type `Environment_projectId_name_idx` (line 2) | CREATE INDEX `Environment_projectId_name_idx` ON `Environment`(`projectI... FILE: apps/web/prisma/migrations/20230511063052_add_coupon_codes_table/migration.sql type `CouponCodes` (line 2) | CREATE TABLE `CouponCodes` ( FILE: apps/web/prisma/migrations/20230628081242_add_api_key_table/migration.sql type `APIKey` (line 2) | CREATE TABLE `APIKey` ( FILE: apps/web/prisma/migrations/20230731133223_rename_apikey/migration.sql type `ApiKey` (line 11) | CREATE TABLE `ApiKey` ( FILE: apps/web/prisma/migrations/20230901064929_add_requests/migration.sql type `ApiRequest` (line 2) | CREATE TABLE `ApiRequest` ( FILE: apps/web/prisma/migrations/20240621084922_add_indices_for_apirequest/migration.sql type `ApiRequest_createdAt_idx` (line 2) | CREATE INDEX `ApiRequest_createdAt_idx` ON `ApiRequest`(`createdAt`) type `ApiRequest_type_idx` (line 5) | CREATE INDEX `ApiRequest_type_idx` ON `ApiRequest`(`type`) FILE: apps/web/prisma/migrations/20240826064116_add_integrations/migration.sql type `Integration` (line 2) | CREATE TABLE `Integration` ( FILE: apps/web/prisma/migrations/20250131071445_add_flag_rulesets/migration.sql type `UserSegment` (line 2) | CREATE TABLE `UserSegment` ( type `FlagRuleSet` (line 16) | CREATE TABLE `FlagRuleSet` ( FILE: apps/web/prisma/seedEvents.ts function randomDateFromLast30Days (line 7) | function randomDateFromLast30Days(): Date { function main (line 18) | async function main() { FILE: apps/web/src/api/routes/health.ts function makeHealthRoute (line 5) | function makeHealthRoute() { FILE: apps/web/src/api/routes/integrations.ts function makeIntegrationsRoute (line 11) | function makeIntegrationsRoute() { FILE: apps/web/src/api/routes/legacy_project_data.ts function getAbbyResponseWithCache (line 20) | async function getAbbyResponseWithCache({ function makeLegacyProjectDataRoute (line 80) | function makeLegacyProjectDataRoute() { FILE: apps/web/src/api/routes/v1_config.ts function makeConfigRoute (line 49) | function makeConfigRoute() { FILE: apps/web/src/api/routes/v1_event.ts function makeEventRoute (line 9) | function makeEventRoute() { FILE: apps/web/src/api/routes/v1_project_data.ts constant X_ABBY_CACHE_HEADER (line 12) | const X_ABBY_CACHE_HEADER = "X-Abby-Cache"; function getAbbyResponseWithCache (line 14) | async function getAbbyResponseWithCache({ function makeProjectDataRoute (line 79) | function makeProjectDataRoute() { FILE: apps/web/src/api/routes/v2_project_data.ts constant X_ABBY_CACHE_HEADER (line 13) | const X_ABBY_CACHE_HEADER = "X-Abby-Cache"; function getAbbyResponseWithCache (line 15) | async function getAbbyResponseWithCache({ function makeV2ProjectDataRoute (line 93) | function makeV2ProjectDataRoute() { FILE: apps/web/src/components/AddABTestModal.tsx type UIVariant (line 14) | type UIVariant = { name: string; weight: number; id: string }; constant INITIAL_VARIANTS (line 16) | const INITIAL_VARIANTS: Array = [ constant INITIAL_TEST_NAME (line 30) | const INITIAL_TEST_NAME = "New Test"; type Props (line 32) | type Props = { FILE: apps/web/src/components/AddFeatureFlagModal.tsx type Props (line 18) | type Props = { type FlagFormValues (line 25) | type FlagFormValues = { function ChangeFlagForm (line 31) | function ChangeFlagForm({ method onSuccess (line 175) | onSuccess() { FILE: apps/web/src/components/AsyncCodeExample.tsx function AsyncCodeExample (line 5) | function AsyncCodeExample() { FILE: apps/web/src/components/Avatar.tsx function getNameFromEmail (line 5) | function getNameFromEmail(email: string) { type Props (line 14) | type Props = { FILE: apps/web/src/components/BlogLayout.tsx type Props (line 9) | type Props = Pick & { function BlogLayout (line 13) | function BlogLayout({ children, seoTitle, meta }: Props) { FILE: apps/web/src/components/Button.tsx type ButtonProps (line 4) | interface ButtonProps { function Button (line 9) | function Button({ FILE: apps/web/src/components/CodeSnippet.tsx constant INTEGRATIONS (line 12) | const INTEGRATIONS: Record< type Props (line 37) | type Props = { function BaseCodeSnippet (line 41) | function BaseCodeSnippet( function CodeSnippet (line 102) | function CodeSnippet({ projectId }: Props) { FILE: apps/web/src/components/CodeSnippetModalButton.tsx function CodeSnippetModal (line 18) | function CodeSnippetModal({ function CodeSnippetModalButton (line 43) | function CodeSnippetModalButton() { FILE: apps/web/src/components/CreateAPIKeyModal.tsx type Props (line 8) | type Props = { FILE: apps/web/src/components/CreateEnvironmentModal.tsx type Props (line 10) | type Props = { method onSuccess (line 26) | onSuccess() { FILE: apps/web/src/components/CreateProjectModal.tsx type Props (line 10) | type Props = { method onSuccess (line 24) | onSuccess() { FILE: apps/web/src/components/DashboardButton.tsx type Props (line 4) | type Props = ComponentPropsWithRef<"button">; function DashboardButton (line 6) | function DashboardButton({ className, ...props }: Props) { FILE: apps/web/src/components/DashboardHeader.tsx type Props (line 4) | type Props = { function DashboardHeader (line 8) | function DashboardHeader({ title }: Props) { FILE: apps/web/src/components/DashboardSection.tsx function DashboardSection (line 3) | function DashboardSection({ function DashboardSectionTitle (line 19) | function DashboardSectionTitle({ function DashboardSectionSubtitle (line 31) | function DashboardSectionSubtitle({ FILE: apps/web/src/components/DeleteProjectModal.tsx type Props (line 8) | type Props = { function DeleteProjectModal (line 13) | function DeleteProjectModal({ isOpen, onClose }: Props) { FILE: apps/web/src/components/DevtoolsArrow.tsx constant DEVTOOLS_ID (line 7) | const DEVTOOLS_ID = "abby-devtools-collapsed"; function useDevtoolsPosition (line 9) | function useDevtoolsPosition() { function DevtoolsArrow (line 63) | function DevtoolsArrow() { FILE: apps/web/src/components/Divider.tsx function Divider (line 3) | function Divider({ className }: { className?: string }) { FILE: apps/web/src/components/Dropdown.tsx type Props (line 7) | type Props = { type ItemProps (line 41) | type ItemProps = { FILE: apps/web/src/components/Editor.tsx type Props (line 25) | type Props = { FILE: apps/web/src/components/EventCounter.tsx function EventCounter (line 4) | function EventCounter() { FILE: apps/web/src/components/Feature.tsx type Props (line 4) | type Props = { function Feature (line 11) | function Feature({ children, icon: Icon, subtitle, title }: Props) { FILE: apps/web/src/components/FeatureFlag.tsx method onSuccess (line 71) | onSuccess(_, { value, flagValueId }) { method onError (line 92) | onError() { FILE: apps/web/src/components/FlagIcon.tsx type Props (line 6) | type Props = { function FlagIcon (line 11) | function FlagIcon({ type, ...iconProps }: Props) { FILE: apps/web/src/components/FlagPage.tsx method onSuccess (line 51) | onSuccess() { method onError (line 56) | onError() { method onSuccess (line 93) | onSuccess() { method onError (line 98) | onError() { method onSuccess (line 138) | onSuccess() { method onError (line 143) | onError() { FILE: apps/web/src/components/Footer.tsx constant GITHUB_URL (line 7) | const GITHUB_URL = "https://github.com/tryabby/abby"; constant LINKEDIN_URL (line 8) | const LINKEDIN_URL = "https://www.linkedin.com/company/tryabby/"; constant TWITTER_URL (line 9) | const TWITTER_URL = "https://twitter.com/tryabby"; constant DISCORD_INVITE_URL (line 10) | const DISCORD_INVITE_URL = "https://discord.gg/nk7wKf7Pv2"; function Footer (line 12) | function Footer() { FILE: apps/web/src/components/Input.tsx type InputProps (line 5) | interface InputProps FILE: apps/web/src/components/Integrations.tsx constant INTEGRATIONS (line 14) | const INTEGRATIONS = [ FILE: apps/web/src/components/JSONEditor.tsx type Props (line 3) | type Props = { function JSONEditor (line 8) | function JSONEditor({ onChange, value }: Props) { FILE: apps/web/src/components/LoadingSpinner.tsx function LoadingSpinner (line 3) | function LoadingSpinner({ FILE: apps/web/src/components/Logo.tsx type Props (line 1) | type Props = { function Logo (line 5) | function Logo({ as: Component = "span" }: Props) { FILE: apps/web/src/components/MarketingLayout.tsx type MarketingLayoutProps (line 12) | type MarketingLayoutProps = PropsWithChildren<{ function MarketingLayout (line 18) | function MarketingLayout({ FILE: apps/web/src/components/Modal.tsx type Props (line 12) | type Props = { FILE: apps/web/src/components/Navbar/index.tsx type NavItem (line 23) | type NavItem = { constant NAV_ITEMS (line 37) | const NAV_ITEMS: Array = [ function MobileNav (line 84) | function MobileNav() { type NavItemProps (line 154) | type NavItemProps = { function NavItem (line 168) | function NavItem({ function Navbar (line 224) | function Navbar() { FILE: apps/web/src/components/Pricing.tsx type PricingElementProps (line 16) | type PricingElementProps = { function PricingElement (line 29) | function PricingElement({ function PricingTable (line 116) | function PricingTable() { FILE: apps/web/src/components/Progress.tsx type Props (line 3) | type Props = { function Progress (line 8) | function Progress({ currentValue, maxValue }: Props) { FILE: apps/web/src/components/ProjectSwitcher.tsx type PopoverTriggerProps (line 39) | type PopoverTriggerProps = React.ComponentPropsWithoutRef< type ProjectSwitcherProps (line 43) | interface ProjectSwitcherProps extends PopoverTriggerProps {} function ProjectSwitcher (line 45) | function ProjectSwitcher({ className }: ProjectSwitcherProps) { FILE: apps/web/src/components/RadioGroup.tsx type RadioGroupItem (line 6) | type RadioGroupItem = { type ArrayLike (line 11) | type ArrayLike = Array | ReadonlyArray; type Props (line 13) | type Props = { function RadioGroupComponent (line 21) | function RadioGroupComponent({ items, onChange, value }: Props) { FILE: apps/web/src/components/RadioSelect.tsx type RadioSelectProps (line 5) | type RadioSelectProps = { function RadioSelect (line 12) | function RadioSelect({ FILE: apps/web/src/components/RemoveUserModal.tsx type Props (line 7) | type Props = { function RemoveUserModal (line 13) | function RemoveUserModal({ isOpen, onClose, user }: Props) { FILE: apps/web/src/components/Select.tsx type SelectItem (line 8) | type SelectItem = { type ArrayLike (line 13) | type ArrayLike = Array | ReadonlyArray; type Props (line 15) | type Props = { function Select (line 23) | function Select({ items, onChange, value, isLoading, label }: Props) { FILE: apps/web/src/components/SignupButton.tsx function SignupButton (line 5) | function SignupButton({ className }: { className?: string }) { FILE: apps/web/src/components/Test/CreateTestSection.tsx type Props (line 29) | type Props = { constant DEFAULT_NEW_VARIANT_PREFIX (line 44) | const DEFAULT_NEW_VARIANT_PREFIX = "New Variant "; function getMaxDefaultVariantNameIndex (line 53) | function getMaxDefaultVariantNameIndex(variants: Props["variants"]): num... constant WEIGHT_COLORS (line 130) | const WEIGHT_COLORS = [ constant PRESET_DESCRIPTIONS (line 138) | const PRESET_DESCRIPTIONS = { function CreateTestSection (line 153) | function CreateTestSection({ FILE: apps/web/src/components/Test/Section.tsx function getBestVariant (line 21) | function getBestVariant({ method onSuccess (line 58) | onSuccess() { method onError (line 63) | onError() { method onSuccess (line 147) | onSuccess() { method onError (line 151) | onError() { FILE: apps/web/src/components/Test/Weights.tsx constant WEIGHT_COLORS (line 25) | const WEIGHT_COLORS = [ constant PRESET_DESCRIPTIONS (line 86) | const PRESET_DESCRIPTIONS = { FILE: apps/web/src/components/TitleEdit.tsx type Props (line 5) | type Props = { function TitleEdit (line 10) | function TitleEdit({ onSave, title }: Props) { FILE: apps/web/src/components/Toggle.tsx function Toggle (line 3) | function Toggle({ FILE: apps/web/src/components/UsedBy.tsx constant COMPANIES (line 8) | const COMPANIES = [ function UsedBy (line 30) | function UsedBy() { FILE: apps/web/src/components/UserAuthForm.tsx type UserAuthFormProps (line 14) | interface UserAuthFormProps extends React.HTMLAttributes { function UserAuthForm (line 19) | function UserAuthForm({ FILE: apps/web/src/components/analytics/EventGraph.tsx type EventList (line 24) | type EventList = Array<{ function EventGraph (line 29) | function EventGraph({ FILE: apps/web/src/components/app/AppNav.tsx function AppNav (line 12) | function AppNav({ FILE: apps/web/src/components/app/UserNav.tsx function UserNav (line 16) | function UserNav() { FILE: apps/web/src/components/charts/Donut.tsx function DonutChart (line 18) | function DonutChart({ FILE: apps/web/src/components/flags/FlagRuleEditor.tsx function ThenValueInput (line 23) | function ThenValueInput({ type FlagRuleEditorProps (line 78) | type FlagRuleEditorProps = { function FlagRuleEditor (line 86) | function FlagRuleEditor({ FILE: apps/web/src/components/flags/RuleSetEditor.tsx function FlagRulesEditor (line 20) | function FlagRulesEditor({ FILE: apps/web/src/components/settings/Integrations.tsx function Integrations (line 27) | function Integrations({ projectId }: { projectId: string | undefined }) { FILE: apps/web/src/components/settings/Segments.tsx type UserSegmentDisplayProps (line 5) | interface UserSegmentDisplayProps { function getTypeColor (line 9) | function getTypeColor(type: ValidatorType["type"]) { function UserSegmentDisplay (line 22) | function UserSegmentDisplay({ segment }: UserSegmentDisplayProps) { FILE: apps/web/src/components/ui/button.tsx type ButtonProps (line 36) | interface ButtonProps FILE: apps/web/src/components/ui/chart.tsx constant THEMES (line 7) | const THEMES = { light: "", dark: ".dark" } as const; type ChartConfig (line 9) | type ChartConfig = { type ChartContextProps (line 19) | type ChartContextProps = { function useChart (line 25) | function useChart() { function getPayloadConfigFromPayload (line 320) | function getPayloadConfigFromPayload( FILE: apps/web/src/components/ui/command.tsx type CommandDialogProps (line 24) | interface CommandDialogProps extends DialogProps {} FILE: apps/web/src/components/ui/environment-badge.tsx type EnvironmentBadgeProps (line 4) | interface EnvironmentBadgeProps { function EnvironmentBadge (line 10) | function EnvironmentBadge({ FILE: apps/web/src/components/ui/input.tsx type InputProps (line 5) | interface InputProps FILE: apps/web/src/instrumentation.ts function register (line 1) | async function register() { FILE: apps/web/src/lib/environment-styles.ts constant ENVIRONMENT_COLORS (line 1) | const ENVIRONMENT_COLORS = { FILE: apps/web/src/lib/events.ts type TIME_INTERVAL (line 2) | enum TIME_INTERVAL { constant INTERVALS (line 8) | const INTERVALS = [ function isValidInterval (line 35) | function isValidInterval(interval: string): interval is TIME_INTERVAL { function isSpecialTimeInterval (line 39) | function isSpecialTimeInterval( function getFormattingByInterval (line 45) | function getFormattingByInterval(interval: string) { function getBaseEventsByInterval (line 62) | function getBaseEventsByInterval( FILE: apps/web/src/lib/flags.ts function getFlagCount (line 13) | function getFlagCount(flags: Array) { function transformFlagValue (line 20) | function transformFlagValue(value: string, type: FeatureFlagType) { function stringifyFlagValue (line 35) | function stringifyFlagValue(value: RemoteConfigValue | boolean): string { function getDefaultFlagValue (line 43) | function getDefaultFlagValue(type: RemoteConfigValueString | "Boolean") { function getFlagTypeClassName (line 54) | function getFlagTypeClassName(type: FeatureFlagType) { function transformDBFlagTypeToclient (line 70) | function transformDBFlagTypeToclient( function transformClientFlagToDBType (line 87) | function transformClientFlagToDBType( FILE: apps/web/src/lib/graphs.ts constant COLORS (line 18) | const COLORS = Object.keys(colors) function getColorByIndex (line 26) | function getColorByIndex(index: number) { FILE: apps/web/src/lib/hooks/useProjectId.ts function useProjectId (line 3) | function useProjectId() { FILE: apps/web/src/lib/hooks/useQueryParam.ts function useQueryParam (line 3) | function useQueryParam(param: string) { function useUnsafeQueryParam (line 12) | function useUnsafeQueryParam(param: string) { FILE: apps/web/src/lib/logsnag.ts function trackSignup (line 10) | function trackSignup() { function trackPlanOverage (line 20) | function trackPlanOverage( FILE: apps/web/src/lib/stripe.ts constant MILLISECONDS_IN_A_DAY (line 36) | const MILLISECONDS_IN_A_DAY = 86_400_000; constant BETA_PRICE_ID (line 38) | const BETA_PRICE_ID = "BETA"; FILE: apps/web/src/lib/utils.ts function cn (line 4) | function cn(...inputs: ClassValue[]) { FILE: apps/web/src/pages/_app.tsx type NextPageWithLayout (line 22) | type NextPageWithLayout

= NextPage & { type AppPropsWithLayout (line 26) | type AppPropsWithLayout = AppProps & { FILE: apps/web/src/pages/_document.tsx function Document (line 3) | function Document() { FILE: apps/web/src/pages/api/auth/[...nextauth].ts method session (line 24) | session({ session, token }) { method jwt (line 40) | async jwt({ token, user, trigger, session }) { method createUser (line 82) | async createUser({ user }) { FILE: apps/web/src/pages/api/checkout/index.ts function checkout (line 13) | async function checkout({ FILE: apps/web/src/pages/api/invalidate-limits.ts function invalidateProjectLimitsHandler (line 12) | async function invalidateProjectLimitsHandler( FILE: apps/web/src/pages/api/stripe.ts type StripeSession (line 18) | interface StripeSession { function handleStripeWebhook (line 35) | async function handleStripeWebhook( FILE: apps/web/src/pages/contact.tsx function ContactPage (line 10) | function ContactPage() { FILE: apps/web/src/pages/login.tsx constant DEFAULT_CALLBACK_URL (line 9) | const DEFAULT_CALLBACK_URL = "/projects"; function AuthenticationPage (line 11) | function AuthenticationPage() { FILE: apps/web/src/pages/profile/index.tsx method onSuccess (line 85) | onSuccess() { method onSuccess (line 147) | onSuccess() { FILE: apps/web/src/pages/projects/[projectId]/environments.tsx function EnvironmentItem (line 33) | function EnvironmentItem({ method onError (line 128) | onError() { FILE: apps/web/src/pages/projects/[projectId]/events.tsx function getValueClass (line 27) | function getValueClass(value: string | null) { FILE: apps/web/src/pages/projects/[projectId]/index.tsx type ProjectClientEvents (line 19) | type ProjectClientEvents = FILE: apps/web/src/pages/projects/[projectId]/settings.tsx constant SETTINGS_TABS (line 35) | const SETTINGS_TABS = { method onSuccess (line 86) | onSuccess() { FILE: apps/web/src/pages/projects/[projectId]/tests/[testId].tsx constant INTERVAL_PARAM_NAME (line 21) | const INTERVAL_PARAM_NAME = "interval"; FILE: apps/web/src/pages/signup.tsx constant DEFAULT_CALLBACK_URL (line 8) | const DEFAULT_CALLBACK_URL = "/projects"; function AuthenticationPage (line 10) | function AuthenticationPage() { FILE: apps/web/src/pages/tips-and-insights/index.tsx type PostMeta (line 10) | type PostMeta = { type Props (line 18) | type Props = { FILE: apps/web/src/pages/welcome.tsx constant ROLES (line 44) | const ROLES = [ function WizardFooter (line 101) | function WizardFooter() { function Step1 (line 131) | function Step1() { function Step2 (line 166) | function Step2() { constant TECHNOLOGIES (line 230) | const TECHNOLOGIES = [ function Step3 (line 270) | function Step3() { function Step4 (line 322) | function Step4() { function WelcomePage (line 361) | function WelcomePage( FILE: apps/web/src/seo/SeoDescriptions.ts type SeoProps (line 1) | type SeoProps = { type Layouts (line 6) | type Layouts = "Marketing" | "Blog" | "Integrations" | "DashBoard" | "Do... function getSeo (line 8) | function getSeo(pageName: string, layoutName: Layouts) { function getMarketingSeo (line 17) | function getMarketingSeo(pageName: string): SeoProps { function getBlogLayout (line 199) | function getBlogLayout(pageName: string): SeoProps { FILE: apps/web/src/server/common/auth.ts function assertUserHasAcessToProject (line 4) | async function assertUserHasAcessToProject( FILE: apps/web/src/server/common/config-cache.ts type ConfigCacheKey (line 10) | type ConfigCacheKey = { method getConfig (line 16) | static getConfig({ environment, projectId }: ConfigCacheKey) { method setConfig (line 20) | static setConfig({ method deleteConfig (line 30) | static deleteConfig({ environment, projectId }: ConfigCacheKey) { FILE: apps/web/src/server/common/github-app.ts constant PER_PAGE (line 20) | const PER_PAGE = 100; FILE: apps/web/src/server/common/integrations.ts type GithubIntegrationSettings (line 10) | type GithubIntegrationSettings = z.infer< FILE: apps/web/src/server/common/plans.ts type PlanName (line 12) | type PlanName = z.infer; constant PLANS (line 14) | const PLANS: Record = { type Limit (line 22) | type Limit = { FILE: apps/web/src/server/common/tracking.ts type EventProps (line 5) | type EventProps = Record | never; type EventOptionsTuple (line 6) | type EventOptionsTuple

= P extends never type EventOptions (line 10) | type EventOptions

= { class TrackingService (line 20) | class TrackingService { method constructor (line 23) | constructor() { method trackEvent (line 31) | public trackEvent( FILE: apps/web/src/server/queue/AfterDataRequest.ts type AfterRequestJobPayload (line 10) | type AfterRequestJobPayload = { FILE: apps/web/src/server/queue/event.ts type EventJobPayload (line 11) | type EventJobPayload = AbbyEvent & { FILE: apps/web/src/server/queue/queues.ts constant QUEUE_NAMES (line 9) | const QUEUE_NAMES = { FILE: apps/web/src/server/services/AiFlagRemovalService.ts class AIFlagRemovalService (line 3) | class AIFlagRemovalService { method constructor (line 4) | constructor(private openai: OpenAI) {} method removeFlagFromCode (line 6) | async removeFlagFromCode(code: string, flagName: string) { FILE: apps/web/src/server/services/ConfigService.ts function handleGET (line 18) | async function handleGET({ projectId }: { projectId: string }) { function handlePUT (line 69) | async function handlePUT({ FILE: apps/web/src/server/services/EventService.ts method hashUserInfo (line 21) | private static hashUserInfo(ipAddress: string, userAgent: string) { method createEvent (line 27) | static async createEvent({ method getEventsByProjectId (line 55) | static async getEventsByProjectId(projectId: string) { method getEventsByTestId (line 65) | static async getEventsByTestId( method getEventsForCurrentPeriod (line 89) | static async getEventsForCurrentPeriod(projectId: string) { FILE: apps/web/src/server/services/FlagService.ts method createFlag (line 11) | static async createFlag({ FILE: apps/web/src/server/services/InviteService.ts method acceptInvite (line 4) | static async acceptInvite(inviteId: string, userId: string) { method getEventsByProjectId (line 43) | static async getEventsByProjectId(projectId: string) { FILE: apps/web/src/server/services/PlausibleService.ts method trackPlausibleGoal (line 14) | static async trackPlausibleGoal( FILE: apps/web/src/server/services/ProjectService.ts method hasProjectAccess (line 7) | static async hasProjectAccess(projectId: string, userId: string) { method createProject (line 17) | static async createProject(input: { projectName: string; userId: string ... FILE: apps/web/src/server/services/RequestCache.ts method getCacheKey (line 4) | private static getCacheKey(projectId: string) { method increment (line 8) | static async increment(projectId: string) { method get (line 12) | static async get(projectId: string) { method reset (line 16) | static async reset(projectId: string | string[]) { FILE: apps/web/src/server/services/RequestService.ts method storeRequest (line 5) | static async storeRequest(request: Omit) { FILE: apps/web/src/server/services/TestService.ts type Variant (line 7) | type Variant = { method createTest (line 13) | static async createTest( FILE: apps/web/src/server/trpc/context.ts type CreateContextOptions (line 9) | type CreateContextOptions = { type Context (line 47) | type Context = inferAsyncReturnType; FILE: apps/web/src/server/trpc/helpers.ts function getSSRTrpc (line 7) | async function getSSRTrpc(opts: CreateNextContextOptions) { FILE: apps/web/src/server/trpc/router/_app.ts type AppRouter (line 33) | type AppRouter = typeof appRouter; FILE: apps/web/src/server/trpc/router/project.ts type ClientOption (line 11) | type ClientOption = Omit & { FILE: apps/web/src/server/trpc/trpc.ts method errorFormatter (line 8) | errorFormatter({ shape }) { FILE: apps/web/src/types/flags.ts type FlagValueString (line 3) | type FlagValueString = RemoteConfigValueString | "Boolean"; FILE: apps/web/src/types/next-auth.d.ts type UserSession (line 3) | type UserSession = { type Session (line 15) | interface Session { type JWT (line 22) | interface JWT { FILE: apps/web/src/types/plausible-events.ts type Plan (line 4) | type Plan = PlanName | "HOBBY"; type PlausibleEvents (line 6) | type PlausibleEvents = { type ServerEvents (line 33) | type ServerEvents = { FILE: apps/web/src/utils/apiKey.ts function generateRandomString (line 4) | function generateRandomString(length = 32): string { function hashString (line 9) | function hashString(data: string): string { FILE: apps/web/src/utils/snippets.ts type CodeSnippetData (line 39) | type CodeSnippetData = { type Integrations (line 44) | type Integrations = "react" | "nextjs" | "svelte" | "angular"; function generateCodeSnippets (line 46) | async function generateCodeSnippets({ FILE: apps/web/src/utils/trpc.ts method config (line 15) | config() { type RouterInputs (line 35) | type RouterInputs = inferRouterInputs; type RouterOutputs (line 40) | type RouterOutputs = inferRouterOutputs; FILE: apps/web/src/utils/validateFlags.ts function validateFlag (line 3) | function validateFlag(flagType: FeatureFlagType, value: string) { FILE: packages/angular/src/lib/StorageService.ts class ABStorageService (line 8) | class ABStorageService implements IStorageService { method get (line 9) | get(projectId: string, testName: string): string | null { method set (line 26) | set(projectId: string, testName: string, value: string): void { method remove (line 31) | remove(projectId: string, testName: string): void { class FFStorageService (line 37) | class FFStorageService implements IStorageService { method get (line 38) | get(projectId: string, flagName: string): string | null { method set (line 55) | set(projectId: string, flagName: string, value: string): void { method remove (line 60) | remove(projectId: string, flagName: string): void { class RCStorageService (line 66) | class RCStorageService implements IStorageService { method get (line 67) | get(projectId: string, key: string): string | null { method set (line 83) | set(projectId: string, key: string, value: string): void { method remove (line 88) | remove(projectId: string, key: string): void { FILE: packages/angular/src/lib/abby-logger.service.ts class AbbyLoggerService (line 6) | class AbbyLoggerService { method constructor (line 9) | constructor(@Inject(ABBY_CONFIG_TOKEN) private config: AbbyConfig) {} method log (line 11) | log(...args: unknown[]): void { method warn (line 17) | warn(...args: unknown[]): void { FILE: packages/angular/src/lib/abby.module.ts constant ABBY_CONFIG_TOKEN (line 18) | const ABBY_CONFIG_TOKEN = new InjectionToken("AbbyConfig"); class AbbyModule (line 36) | class AbbyModule { method forRoot (line 37) | static forRoot(config: AbbyConfig): ModuleWithProviders { FILE: packages/angular/src/lib/abby.service.spec.ts class Abby (line 87) | class Abby extends AbbyService< class TestComponent (line 98) | @Component({ class ATestComponent (line 214) | @Component({}) class BTestComponent (line 217) | @Component({}) class CTestComponent (line 220) | @Component({}) class DTestComponent (line 223) | @Component({}) class FlagComponent (line 226) | @Component({}) FILE: packages/angular/src/lib/abby.service.ts type LocalData (line 35) | type LocalData< type InferFlagNames (line 54) | type InferFlagNames = InferFlags[number]; type InferTestNames (line 55) | type InferTestNames = InferTests extends Record< type InferTests (line 61) | type InferTests = NonNullable; type InferFlags (line 62) | type InferFlags = NonNullable; type InferRemoteConfig (line 63) | type InferRemoteConfig = NonNullable< type InferRemoteConfigName (line 66) | type InferRemoteConfigName = keyof NonNullable< type PossibleFlagName (line 70) | type PossibleFlagName = FlagName | `!${FlagName}`; class AbbyService (line 73) | class AbbyService< method constructor (line 104) | constructor( method init (line 155) | public init(): Observable { method getVariant (line 159) | public getVariant(testName: T): Observable>( method getRemoteConfig (line 226) | public getRemoteConfig( method resolveData (line 237) | private resolveData(): Observable< method getAbbyInstance (line 256) | public getAbbyInstance(): Abby< method getRouterVariant (line 266) | public getRouterVariant( FILE: packages/angular/src/lib/devtools.component.ts class DevtoolsComponent (line 12) | class DevtoolsComponent implements OnInit { method constructor (line 17) | constructor(private readonly abby: AbbyService) {} method ngOnInit (line 19) | ngOnInit(): void { FILE: packages/angular/src/lib/flag.directive.ts class AbbyFlag (line 18) | class AbbyFlag implements OnDestroy { method abbyFlag (line 20) | set abbyFlag(featureFlag: string) { method constructor (line 35) | constructor( method ngOnDestroy (line 56) | ngOnDestroy(): void { FILE: packages/angular/src/lib/get-remote-config.pipe.ts class GetRemoteConfigPipe (line 14) | class GetRemoteConfigPipe< method constructor (line 18) | constructor(private abbyService: AbbyService) {} method transform (line 20) | transform>( FILE: packages/angular/src/lib/get-variant.pipe.ts class GetAbbyVariantPipe (line 11) | class GetAbbyVariantPipe< method constructor (line 16) | constructor(private abbyService: AbbyService) {} method transform (line 18) | transform(testName: TestName): Observable { FILE: packages/angular/src/lib/test.directive.ts class AbbyTest (line 18) | class AbbyTest implements OnInit, OnDestroy { method constructor (line 23) | constructor( method ngOnInit (line 29) | ngOnInit(): void { method ngOnDestroy (line 46) | ngOnDestroy(): void { FILE: packages/cli/src/add-flag.ts function addFlag (line 6) | async function addFlag(options: { FILE: packages/cli/src/add-remote-config.ts function addRemoteConfig (line 7) | async function addRemoteConfig(options: { FILE: packages/cli/src/ai.ts function removeFlagInstance (line 8) | async function removeFlagInstance(options: { FILE: packages/cli/src/auth.ts function writeTokenFile (line 9) | function writeTokenFile(token: string) { function getToken (line 13) | async function getToken() { FILE: packages/cli/src/check.ts function verifyLocalConfig (line 10) | async function verifyLocalConfig({ FILE: packages/cli/src/consts.ts constant ABBY_BASE_URL (line 4) | const ABBY_BASE_URL = "https://www.tryabby.com"; FILE: packages/cli/src/http.ts method getConfigFromServer (line 9) | static async getConfigFromServer({ method updateConfigOnServer (line 36) | static async updateConfigOnServer({ method getFilesWithFlagsRemoved (line 77) | static async getFilesWithFlagsRemoved({ FILE: packages/cli/src/init.ts function initAbbyConfig (line 5) | async function initAbbyConfig({ path }: { path: string }) { FILE: packages/cli/src/pull.ts function mergeConfigs (line 8) | function mergeConfigs( function pullAndMerge (line 26) | async function pullAndMerge({ FILE: packages/cli/src/push.ts function push (line 4) | async function push({ FILE: packages/cli/src/update-config-file.ts function updateConfigFile (line 9) | async function updateConfigFile( function updateConfigFileContent (line 28) | function updateConfigFileContent( FILE: packages/cli/src/util.ts function loadLocalConfig (line 12) | async function loadLocalConfig({ function multiLineLog (line 68) | function multiLineLog(...args: any[]) { function startServerAndGetToken (line 72) | async function startServerAndGetToken(host?: string) { FILE: packages/cli/tests/base.test.ts constant API_KEY (line 27) | const API_KEY = "test"; FILE: packages/core/src/defineConfig.ts constant DYNAMIC_ABBY_CONFIG_KEYS (line 4) | const DYNAMIC_ABBY_CONFIG_KEYS = [ type DynamicConfigKeys (line 12) | type DynamicConfigKeys = (typeof DYNAMIC_ABBY_CONFIG_KEYS)[number]; function defineConfig (line 14) | function defineConfig< FILE: packages/core/src/helpers.ts function parseCookies (line 2) | function parseCookies(cookieHeader: string) { FILE: packages/core/src/index.ts type ABConfig (line 31) | type ABConfig = { type Settings (line 35) | type Settings< type LocalData (line 67) | type LocalData< type PersistentStorage (line 86) | interface PersistentStorage { type AbbyConfig (line 91) | type AbbyConfig< class Abby (line 123) | class Abby< method constructor (line 164) | constructor( method loadProjectData (line 220) | async loadProjectData() { method getProjectDataAsync (line 251) | async getProjectDataAsync(): Promise< method responseToLocalData (line 267) | private responseToLocalData { method init (line 363) | init(data: AbbyDataResponse) { method getFeatureFlag (line 383) | getFeatureFlag(key: FlagName): boolean { method getRemoteConfig (line 454) | getRemoteConfig< method getTestVariant (line 526) | getTestVariant(key: T): Tests[T]["variants"][nu... method updateLocalVariant (line 562) | updateLocalVariant( method updateFlag (line 577) | updateFlag(name: FlagName, value: boolean) { method updateRemoteConfig (line 590) | updateRemoteConfig( method subscribe (line 609) | subscribe(listener: (newValue: LocalData) => void) { method notifyListeners (line 620) | private notifyListeners() { method getConfig (line 627) | getConfig() { method getVariants (line 634) | getVariants(testName: T): Tests[T]["variants"] { method setLocalOverrides (line 644) | setLocalOverrides(cookies: string) { method getDefaultRemoteConfigValue (line 699) | private getDefaultRemoteConfigValue( method stringifiedValue (line 716) | private stringifiedValue(value: RemoteConfigValue | boolean): string { method getFeatureFlags (line 726) | getFeatureFlags() { method getRemoteConfigVariables (line 738) | getRemoteConfigVariables() { method enableCookies (line 754) | enableCookies() { method disableCookies (line 771) | disableCookies() { method updateUserProperties (line 784) | updateUserProperties( method evaluateUserProperties (line 826) | private evaluateUserProperties( FILE: packages/core/src/mathHelpers.ts function getRandomDecimal (line 4) | function getRandomDecimal() { function getWeightedRandomNumber (line 15) | function getWeightedRandomNumber>( function getDefaultWeights (line 31) | function getDefaultWeights>( function validateWeights (line 39) | function validateWeights< function getWeightedRandomVariant (line 49) | function getWeightedRandomVariant< function getVariantWithHeighestWeightOrFirst (line 64) | function getVariantWithHeighestWeightOrFirst< FILE: packages/core/src/shared/constants.ts constant DOCS_URL (line 1) | const DOCS_URL = "https://docs.tryabby.com/"; constant ABBY_BASE_URL (line 2) | const ABBY_BASE_URL = "https://www.tryabby.com/"; constant ABBY_AB_STORAGE_PREFIX (line 3) | const ABBY_AB_STORAGE_PREFIX = "__abby__ab__"; constant ABBY_FF_STORAGE_PREFIX (line 4) | const ABBY_FF_STORAGE_PREFIX = "__abby__ff__"; constant ABBY_RC_STORAGE_PREFIX (line 5) | const ABBY_RC_STORAGE_PREFIX = "__abby__rc__"; constant ABBY_INSTANCE_KEY (line 6) | const ABBY_INSTANCE_KEY = "__abby_instance__"; constant DEFAULT_FEATURE_FLAG_VALUE (line 7) | const DEFAULT_FEATURE_FLAG_VALUE = false; constant ABBY_WINDOW_KEY (line 8) | const ABBY_WINDOW_KEY = "__abby_data__"; FILE: packages/core/src/shared/helpers.ts function getABStorageKey (line 8) | function getABStorageKey(projectId: string, testName: string): string { function getFFStorageKey (line 12) | function getFFStorageKey(projectId: string, flagName: string): string { function getRCStorageKey (line 16) | function getRCStorageKey( function assertUnreachable (line 23) | function assertUnreachable(_x: never): never { function remoteConfigStringToType (line 27) | function remoteConfigStringToType({ function getDefaultRemoteConfigValue (line 46) | function getDefaultRemoteConfigValue( function stringifyRemoteConfigValue (line 61) | function stringifyRemoteConfigValue(value: RemoteConfigValue) { FILE: packages/core/src/shared/http.ts method getProjectData (line 5) | static async getProjectData({ method sendData (line 37) | static sendData({ FILE: packages/core/src/shared/interfaces.ts type StorageServiceOptions (line 1) | interface StorageServiceOptions { type IStorageService (line 5) | interface IStorageService { FILE: packages/core/src/shared/schemas.ts type AbbyEvent (line 12) | type AbbyEvent = z.infer; type ValidatorType (line 35) | type ValidatorType = z.infer; type AbbyConfigFile (line 84) | type AbbyConfigFile = z.infer; type PullAbbyConfigResponse (line 86) | type PullAbbyConfigResponse = Pick< type RemoteConfigValue (line 91) | type RemoteConfigValue = z.infer; type RemoteConfigValueString (line 93) | type RemoteConfigValueString = z.infer< type RemoteConfigValueStringToType (line 97) | type RemoteConfigValueStringToType = type FlagRuleSet (line 174) | type FlagRuleSet = z.infer; type FlagRule (line 175) | type FlagRule = z.infer; type SubFlagRule (line 176) | type SubFlagRule = z.infer; type StringFlagRule (line 177) | type StringFlagRule = z.infer; type NumberFlagRule (line 178) | type NumberFlagRule = z.infer; type BooleanFlagRule (line 179) | type BooleanFlagRule = z.infer; FILE: packages/core/src/shared/types.ts type AbbyEventType (line 3) | enum AbbyEventType { type AbbyDataResponse (line 8) | type AbbyDataResponse = { type LegacyAbbyDataResponse (line 25) | type LegacyAbbyDataResponse = { type ExtractVariants (line 33) | type ExtractVariants< FILE: packages/core/src/validation/index.ts type StringValidatorType (line 4) | type StringValidatorType = { type: "string" }; type NumberValidatorType (line 5) | type NumberValidatorType = { type: "number" }; type BooleanValidatorType (line 6) | type BooleanValidatorType = { type: "boolean" }; type Infer (line 18) | type Infer = T extends StringValidatorType type ValidationErrors (line 32) | type ValidationErrors = Array<{ function validateProperty (line 37) | function validateProperty( function validate (line 58) | function validate>( FILE: packages/core/tests/base.test.ts constant OLD_ENV (line 4) | const OLD_ENV = process.env; FILE: packages/core/tests/math.test.ts type Variant (line 28) | type Variant = (typeof variants)[number]; FILE: packages/core/tests/types.test.ts type DevOverrides (line 37) | type DevOverrides = NonNullable< FILE: packages/devtools/src/Devtools.stories.ts type Story (line 42) | type Story = StoryObj; FILE: packages/devtools/src/index.ts class DevtoolsFactory (line 4) | class DevtoolsFactory { method create (line 5) | create(props: AbbyDevtoolProps) { type AbbyDevtoolProps (line 19) | type AbbyDevtoolProps = ComponentProps; FILE: packages/devtools/src/lib/storage.ts constant DEVTOOLS_KEY (line 1) | const DEVTOOLS_KEY = "abbyy-devtools"; function getShowDevtools (line 3) | function getShowDevtools() { function setShowDevtools (line 11) | function setShowDevtools(value: boolean) { type Sections (line 15) | type Sections = { function getSections (line 21) | function getSections(): Sections { function setSections (line 33) | function setSections(sections: Sections) { FILE: packages/devtools/src/lib/types.ts type Modifier (line 1) | type Modifier = "command" | "ctrl" | "alt" | "shift" | "option" | "meta"; type Char (line 2) | type Char = type SpecialKey (line 29) | type SpecialKey = type Key (line 54) | type Key = Char | SpecialKey; type Shortcut (line 56) | type Shortcut = FILE: packages/next/src/cache.ts class PromiseCache (line 1) | class PromiseCache { method constructor (line 6) | constructor(ttl = 1000 * 60) { method get (line 10) | public async get(key: string, fn: () => Promise): Promise { FILE: packages/next/src/helpers.ts function getIsomorphicCookies (line 9) | function getIsomorphicCookies< function isEdgeFunction (line 40) | function isEdgeFunction( function isBrowser (line 46) | function isBrowser( FILE: packages/next/src/index.tsx function createAbby (line 23) | function createAbby< type WithAbbyProps (line 254) | type WithAbbyProps = { FILE: packages/next/src/withAbby.tsx constant ABBY_DATA_KEY (line 13) | const ABBY_DATA_KEY = "__ABBY_PROJECT_DATA__"; function withAbby (line 15) | function withAbby< FILE: packages/next/tests/types.test.tsx constant OLD_ENV (line 7) | const OLD_ENV = process.env; FILE: packages/next/tests/withAbby.test.tsx constant OLD_ENV (line 4) | const OLD_ENV = process.env; FILE: packages/node/fix-exports.js function main (line 9) | function main() { FILE: packages/node/src/express/index.ts function createAbbyMiddleWare (line 13) | function createAbbyMiddleWare< FILE: packages/node/src/index.ts function createAbby (line 10) | function createAbby< FILE: packages/node/src/koa/index.ts function createAbbyMiddleWare (line 12) | function createAbbyMiddleWare< FILE: packages/node/src/utils/MemoryStorage.ts class InMemoryStorageService (line 3) | class InMemoryStorageService implements IStorageService { method constructor (line 5) | constructor() { method get (line 8) | get(key: string): string | null { method set (line 11) | set(key: string, value: string): void { method remove (line 14) | remove(key: string): void { FILE: packages/node/tests/koa.test.ts constant SERVER_URL (line 9) | let SERVER_URL = "http://localhost:"; FILE: packages/react/src/StorageService.ts constant DEFAULT_COOKIE_AGE (line 10) | const DEFAULT_COOKIE_AGE = 365; class ABStorageService (line 12) | class ABStorageService implements IStorageService { method get (line 13) | get(projectId: string, testName: string): string | null { method set (line 20) | set( method remove (line 33) | remove(projectId: string, testName: string): void { class FFStorageService (line 38) | class FFStorageService implements IStorageService { method get (line 39) | get(projectId: string, flagName: string): string | null { method set (line 46) | set(projectId: string, flagName: string, value: string): void { method remove (line 52) | remove(projectId: string, flagName: string): void { class RCStorageService (line 57) | class RCStorageService implements IStorageService { method get (line 58) | get(projectId: string, key: string): string | null { method set (line 63) | set(projectId: string, key: string, value: string): void { method remove (line 69) | remove(projectId: string, key: string): void { FILE: packages/react/src/context.tsx type withDevtoolsFunction (line 26) | type withDevtoolsFunction = ( type ABTestReturnValue (line 33) | type ABTestReturnValue = Lookup extends undefined function createAbby (line 39) | function createAbby< FILE: packages/react/src/helpers.ts type Tuple (line 2) | type Tuple = N extends N type _TupleOf (line 7) | type _TupleOf = R["length"] ex... function getRandomDecimal (line 14) | function getRandomDecimal() { function weightedRand2 (line 25) | function weightedRand2>(spec: T): keyof... function getWeightedRandomVariant (line 38) | function getWeightedRandomVariant< function validateWeights (line 64) | function validateWeights< FILE: packages/react/tests/ssr.test.tsx constant OLD_ENV (line 4) | const OLD_ENV = process.env; FILE: packages/react/tests/types.test.tsx constant OLD_ENV (line 5) | const OLD_ENV = process.env; FILE: packages/react/tests/useAbby.test.tsx constant OLD_ENV (line 8) | const OLD_ENV = process.env; FILE: packages/remix/src/cache.ts class PromiseCache (line 1) | class PromiseCache { method constructor (line 6) | constructor(ttl = 1000 * 60) { method get (line 10) | public async get(key: string, fn: () => Promise): Promise { FILE: packages/remix/src/index.tsx constant ABBY_DATA_KEY (line 15) | const ABBY_DATA_KEY = "__ABBY_PROJECT_DATA__"; function createAbby (line 24) | function createAbby< FILE: packages/remix/tests/ssr.test.tsx function MyComponent (line 14) | function MyComponent() { method loader (line 33) | async loader(ctx) { FILE: packages/remix/tests/types.test.tsx constant OLD_ENV (line 5) | const OLD_ENV = process.env; FILE: packages/svelte/src/lib/StorageService.ts class ABStorageService (line 10) | class ABStorageService implements IStorageService { method get (line 11) | get(projectId: string, testName: string): string | null { method set (line 18) | set( method remove (line 28) | remove(projectId: string, testName: string): void { class FFStorageService (line 33) | class FFStorageService implements IStorageService { method get (line 34) | get(projectId: string, flagName: string): string | null { method set (line 41) | set(projectId: string, flagName: string, value: string): void { method remove (line 45) | remove(projectId: string, flagName: string): void { class RCStorageService (line 50) | class RCStorageService implements IStorageService { method get (line 51) | get(projectId: string, key: string): string { method set (line 55) | set(projectId: string, key: string, value: string): void { method remove (line 58) | remove(projectId: string, key: string): void { FILE: packages/svelte/src/lib/createAbby.ts type ABTestReturnValue (line 19) | type ABTestReturnValue = Lookup extends undefined function createAbby (line 25) | function createAbby<