From ae67948f1d3f7a98c079e73f350b618661904eca Mon Sep 17 00:00:00 2001 From: Matus Vacula Date: Thu, 6 Mar 2025 10:51:55 +0100 Subject: [PATCH 1/3] chore: fail on docs warnings and export missing types --- docs.sh | 2 +- packages/browser-sdk/src/client.ts | 5 +++-- packages/browser-sdk/src/feedback/feedback.ts | 1 - packages/browser-sdk/src/hooksManager.ts | 3 --- packages/browser-sdk/src/index.ts | 19 ++++++++++++++++--- packages/browser-sdk/src/toolbar/Toolbar.tsx | 6 +----- packages/browser-sdk/src/toolbar/index.ts | 3 ++- packages/browser-sdk/src/ui/types.ts | 5 +++++ packages/node-sdk/src/client.ts | 8 +------- packages/node-sdk/src/index.ts | 6 ++++++ packages/node-sdk/src/types.ts | 8 ++++---- packages/react-sdk/src/index.tsx | 6 +++--- 12 files changed, 42 insertions(+), 30 deletions(-) diff --git a/docs.sh b/docs.sh index d5ecc670..9f1b15a9 100755 --- a/docs.sh +++ b/docs.sh @@ -2,7 +2,7 @@ set -e -typedoc +typedoc --treatWarningsAsErrors # We need to fix the links in the generated markdown files. # Typedoc generates anchors for properties in tables which can collide with anchors for types. diff --git a/packages/browser-sdk/src/client.ts b/packages/browser-sdk/src/client.ts index a86fb777..0ddebe5f 100644 --- a/packages/browser-sdk/src/client.ts +++ b/packages/browser-sdk/src/client.ts @@ -13,13 +13,13 @@ import { RequestFeedbackOptions, } from "./feedback/feedback"; import * as feedbackLib from "./feedback/ui"; -import { ToolbarPosition } from "./toolbar/Toolbar"; import { API_BASE_URL, APP_BASE_URL, SSE_REALTIME_BASE_URL } from "./config"; import { BucketContext, CompanyContext, UserContext } from "./context"; import { HookArgs, HooksManager } from "./hooksManager"; import { HttpClient } from "./httpClient"; import { Logger, loggerWithPrefix, quietConsoleLogger } from "./logger"; import { showToolbarToggle } from "./toolbar"; +import { ToolbarPosition } from "./ui/types"; const isMobile = typeof window !== "undefined" && window.innerWidth < 768; const isNode = typeof document === "undefined"; // deno supports "window" but not "document" according to https://remix.run/docs/en/main/guides/gotchas @@ -145,7 +145,7 @@ export type PayloadContext = { /** * BucketClient configuration. */ -interface Config { +export interface Config { /** * Base URL of Bucket servers. */ @@ -499,6 +499,7 @@ export class BucketClient { * @param type Type of event to remove. * @param handler The same function that was passed to `on`. * + * @returns A function to remove the hook. */ off( type: THookType, diff --git a/packages/browser-sdk/src/feedback/feedback.ts b/packages/browser-sdk/src/feedback/feedback.ts index b1666327..23d3bd22 100644 --- a/packages/browser-sdk/src/feedback/feedback.ts +++ b/packages/browser-sdk/src/feedback/feedback.ts @@ -64,7 +64,6 @@ export type RequestFeedbackData = Omit< * copy of the feedback in your own application or CRM. * * @param {Object} data - * @param data. */ onAfterSubmit?: (data: FeedbackSubmission) => void; diff --git a/packages/browser-sdk/src/hooksManager.ts b/packages/browser-sdk/src/hooksManager.ts index 9d684184..f0b4ba2e 100644 --- a/packages/browser-sdk/src/hooksManager.ts +++ b/packages/browser-sdk/src/hooksManager.ts @@ -1,9 +1,6 @@ import { CheckEvent, RawFeatures } from "./feature/features"; import { CompanyContext, UserContext } from "./context"; -/** - * @internal - */ export interface HookArgs { /** * Deprecated: Use `check` instead. diff --git a/packages/browser-sdk/src/index.ts b/packages/browser-sdk/src/index.ts index 2584de8e..004e51fa 100644 --- a/packages/browser-sdk/src/index.ts +++ b/packages/browser-sdk/src/index.ts @@ -1,9 +1,22 @@ -export type { Feature, InitOptions, ToolbarOptions } from "./client"; -export { BucketClient } from "./client"; +export type { + Feature, + FeatureRemoteConfig, + InitOptions, + ToolbarOptions, +} from "./client"; +export { BucketClient, Config } from "./client"; export type { BucketContext, CompanyContext, UserContext } from "./context"; +export type { + Position, + Offset, + DialogPlacement, + PopoverPlacement, + ToolbarPosition, +} from "./ui/types"; export type { CheckEvent, FallbackFeatureOverride, + FetchedFeature, RawFeature, RawFeatures, } from "./feature/features"; @@ -28,6 +41,6 @@ export type { OnScoreSubmitResult, OpenFeedbackFormOptions, } from "./feedback/ui/types"; -export type { TrackEvent } from "./hooksManager"; +export type { HookArgs, TrackEvent } from "./hooksManager"; export type { Logger } from "./logger"; export { feedbackContainerId, propagatedEvents } from "./ui/constants"; diff --git a/packages/browser-sdk/src/toolbar/Toolbar.tsx b/packages/browser-sdk/src/toolbar/Toolbar.tsx index e0ad0fc4..58039403 100644 --- a/packages/browser-sdk/src/toolbar/Toolbar.tsx +++ b/packages/browser-sdk/src/toolbar/Toolbar.tsx @@ -11,21 +11,17 @@ import { BucketClient } from "../client"; import { toolbarContainerId } from "../ui/constants"; import { Dialog, DialogContent, DialogHeader, useDialog } from "../ui/Dialog"; import { Logo } from "../ui/icons/Logo"; -import { DialogPlacement, Offset } from "../ui/types"; import { parseUnanchoredPosition } from "../ui/utils"; import { FeatureSearch, FeaturesTable } from "./Features"; import styles from "./index.css?inline"; +import { ToolbarPosition } from "../ui/types"; export type FeatureItem = { key: string; localOverride: boolean | null; isEnabled: boolean; }; -export interface ToolbarPosition { - placement: DialogPlacement; - offset?: Offset; -} type Feature = { key: string; diff --git a/packages/browser-sdk/src/toolbar/index.ts b/packages/browser-sdk/src/toolbar/index.ts index 51d43d20..acef50d5 100644 --- a/packages/browser-sdk/src/toolbar/index.ts +++ b/packages/browser-sdk/src/toolbar/index.ts @@ -4,7 +4,8 @@ import { BucketClient } from "../client"; import { toolbarContainerId } from "../ui/constants"; import { attachContainer } from "../ui/utils"; -import Toolbar, { ToolbarPosition } from "./Toolbar"; +import Toolbar from "./Toolbar"; +import { ToolbarPosition } from "../ui/types"; type showToolbarToggleOptions = { bucketClient: BucketClient; diff --git a/packages/browser-sdk/src/ui/types.ts b/packages/browser-sdk/src/ui/types.ts index 5902a1dd..80512fe7 100644 --- a/packages/browser-sdk/src/ui/types.ts +++ b/packages/browser-sdk/src/ui/types.ts @@ -31,3 +31,8 @@ export type Position = anchor: HTMLElement | null; placement?: PopoverPlacement; }; + +export interface ToolbarPosition { + placement: DialogPlacement; + offset?: Offset; +} diff --git a/packages/node-sdk/src/client.ts b/packages/node-sdk/src/client.ts index 65859bff..bc081691 100644 --- a/packages/node-sdk/src/client.ts +++ b/packages/node-sdk/src/client.ts @@ -413,12 +413,7 @@ export class BucketClient { /** * Tracks an event in Bucket. - * @param event - The event to track. - * @param userId - The userId of the user who performed the event - * @param opts - The options. - * @param opts.attributes - The attributes of the event (optional). - * @param opts.meta - The meta context associated with tracking (optional). - * @param opts.companyId - Optional company ID for the event (optional). + * @param options.companyId - Optional company ID for the event (optional). * * @throws An error if the user is not set or the event is invalid or the options are invalid. * @remarks @@ -1228,7 +1223,6 @@ export class BoundBucketClient { * @param client - The `BucketClient` to use. * @param options - The options for the client. * @param options.enableTracking - Whether to enable tracking for the client. - * @param options.context - The context for the client. * * @internal */ diff --git a/packages/node-sdk/src/index.ts b/packages/node-sdk/src/index.ts index d30d7d95..ec2284e8 100644 --- a/packages/node-sdk/src/index.ts +++ b/packages/node-sdk/src/index.ts @@ -5,10 +5,14 @@ export type { ClientOptions, Context, ContextWithTracking, + EmptyFeatureRemoteConfig, Feature, + FeatureOverride, FeatureOverrides, FeatureOverridesFn, + FeatureRemoteConfig, Features, + FullFeatureOverride, HttpClient, HttpClientResponse, IdType, @@ -16,7 +20,9 @@ export type { Logger, LogLevel, RawFeature, + RawFeatureRemoteConfig, TrackingMeta, TrackOptions, TypedFeatures, + TypedFeatureKey, } from "./types"; diff --git a/packages/node-sdk/src/types.ts b/packages/node-sdk/src/types.ts index 463b8bec..87172267 100644 --- a/packages/node-sdk/src/types.ts +++ b/packages/node-sdk/src/types.ts @@ -125,7 +125,7 @@ export interface RawFeature { missingContextFields?: string[]; } -type EmptyFeatureRemoteConfig = { key: undefined; payload: undefined }; +export type EmptyFeatureRemoteConfig = { key: undefined; payload: undefined }; /** * A remotely managed configuration value for a feature. @@ -171,7 +171,7 @@ export interface Feature< track(): Promise; } -type FullFeatureOverride = { +export type FullFeatureOverride = { isEnabled: boolean; config?: { key: string; @@ -179,7 +179,7 @@ type FullFeatureOverride = { }; }; -type FeatureOverride = FullFeatureOverride | boolean; +export type FeatureOverride = FullFeatureOverride | boolean; /** * Describes a collection of evaluated features. @@ -205,7 +205,7 @@ export type TypedFeatures = keyof Features extends never : Feature; }; -type TypedFeatureKey = keyof TypedFeatures; +export type TypedFeatureKey = keyof TypedFeatures; /** * Describes the feature overrides. diff --git a/packages/react-sdk/src/index.tsx b/packages/react-sdk/src/index.tsx index 5096b147..ca135838 100644 --- a/packages/react-sdk/src/index.tsx +++ b/packages/react-sdk/src/index.tsx @@ -38,7 +38,7 @@ export interface Features {} const SDK_VERSION = `react-sdk/${version}`; -type MaterializedFeatures = keyof Features extends never +export type MaterializedFeatures = keyof Features extends never ? Record : Features; @@ -167,12 +167,12 @@ export function BucketProvider({ ); } -type RequestFeedbackOptions = Omit< +export type RequestFeedbackOptions = Omit< RequestFeedbackData, "featureKey" | "featureId" >; -type EmptyConfig = { +export type EmptyConfig = { key: undefined; payload: undefined; }; From 7e9f07e61fbf5fbf566cf024ddbfb2f18e7b8a24 Mon Sep 17 00:00:00 2001 From: Matus Vacula Date: Thu, 6 Mar 2025 11:00:23 +0100 Subject: [PATCH 2/3] fix --- packages/browser-sdk/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/browser-sdk/src/index.ts b/packages/browser-sdk/src/index.ts index 004e51fa..847b268d 100644 --- a/packages/browser-sdk/src/index.ts +++ b/packages/browser-sdk/src/index.ts @@ -1,10 +1,11 @@ export type { + Config, Feature, FeatureRemoteConfig, InitOptions, ToolbarOptions, } from "./client"; -export { BucketClient, Config } from "./client"; +export { BucketClient } from "./client"; export type { BucketContext, CompanyContext, UserContext } from "./context"; export type { Position, From 7b2deaecf681ee6daa7409be7e267f1eddb74489 Mon Sep 17 00:00:00 2001 From: Matus Vacula Date: Mon, 10 Mar 2025 10:40:25 +0100 Subject: [PATCH 3/3] lint --- packages/browser-sdk/src/client.ts | 2 +- packages/browser-sdk/src/index.ts | 14 +++++++------- packages/browser-sdk/src/toolbar/Toolbar.tsx | 2 +- packages/browser-sdk/src/toolbar/index.ts | 2 +- packages/node-sdk/src/index.ts | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/browser-sdk/src/client.ts b/packages/browser-sdk/src/client.ts index 0ddebe5f..fb3a68c4 100644 --- a/packages/browser-sdk/src/client.ts +++ b/packages/browser-sdk/src/client.ts @@ -13,13 +13,13 @@ import { RequestFeedbackOptions, } from "./feedback/feedback"; import * as feedbackLib from "./feedback/ui"; +import { ToolbarPosition } from "./ui/types"; import { API_BASE_URL, APP_BASE_URL, SSE_REALTIME_BASE_URL } from "./config"; import { BucketContext, CompanyContext, UserContext } from "./context"; import { HookArgs, HooksManager } from "./hooksManager"; import { HttpClient } from "./httpClient"; import { Logger, loggerWithPrefix, quietConsoleLogger } from "./logger"; import { showToolbarToggle } from "./toolbar"; -import { ToolbarPosition } from "./ui/types"; const isMobile = typeof window !== "undefined" && window.innerWidth < 768; const isNode = typeof document === "undefined"; // deno supports "window" but not "document" according to https://remix.run/docs/en/main/guides/gotchas diff --git a/packages/browser-sdk/src/index.ts b/packages/browser-sdk/src/index.ts index 847b268d..85f16145 100644 --- a/packages/browser-sdk/src/index.ts +++ b/packages/browser-sdk/src/index.ts @@ -7,13 +7,6 @@ export type { } from "./client"; export { BucketClient } from "./client"; export type { BucketContext, CompanyContext, UserContext } from "./context"; -export type { - Position, - Offset, - DialogPlacement, - PopoverPlacement, - ToolbarPosition, -} from "./ui/types"; export type { CheckEvent, FallbackFeatureOverride, @@ -45,3 +38,10 @@ export type { export type { HookArgs, TrackEvent } from "./hooksManager"; export type { Logger } from "./logger"; export { feedbackContainerId, propagatedEvents } from "./ui/constants"; +export type { + DialogPlacement, + Offset, + PopoverPlacement, + Position, + ToolbarPosition, +} from "./ui/types"; diff --git a/packages/browser-sdk/src/toolbar/Toolbar.tsx b/packages/browser-sdk/src/toolbar/Toolbar.tsx index 58039403..e0450ad2 100644 --- a/packages/browser-sdk/src/toolbar/Toolbar.tsx +++ b/packages/browser-sdk/src/toolbar/Toolbar.tsx @@ -11,11 +11,11 @@ import { BucketClient } from "../client"; import { toolbarContainerId } from "../ui/constants"; import { Dialog, DialogContent, DialogHeader, useDialog } from "../ui/Dialog"; import { Logo } from "../ui/icons/Logo"; +import { ToolbarPosition } from "../ui/types"; import { parseUnanchoredPosition } from "../ui/utils"; import { FeatureSearch, FeaturesTable } from "./Features"; import styles from "./index.css?inline"; -import { ToolbarPosition } from "../ui/types"; export type FeatureItem = { key: string; diff --git a/packages/browser-sdk/src/toolbar/index.ts b/packages/browser-sdk/src/toolbar/index.ts index acef50d5..feb1a077 100644 --- a/packages/browser-sdk/src/toolbar/index.ts +++ b/packages/browser-sdk/src/toolbar/index.ts @@ -2,10 +2,10 @@ import { h, render } from "preact"; import { BucketClient } from "../client"; import { toolbarContainerId } from "../ui/constants"; +import { ToolbarPosition } from "../ui/types"; import { attachContainer } from "../ui/utils"; import Toolbar from "./Toolbar"; -import { ToolbarPosition } from "../ui/types"; type showToolbarToggleOptions = { bucketClient: BucketClient; diff --git a/packages/node-sdk/src/index.ts b/packages/node-sdk/src/index.ts index ec2284e8..7c2ccca2 100644 --- a/packages/node-sdk/src/index.ts +++ b/packages/node-sdk/src/index.ts @@ -23,6 +23,6 @@ export type { RawFeatureRemoteConfig, TrackingMeta, TrackOptions, - TypedFeatures, TypedFeatureKey, + TypedFeatures, } from "./types";