@goatech/react 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,184 +1,38 @@
1
- # @goatech/react
1
+ # @goatech/react (deprecated)
2
2
 
3
- React bindings for the [GoaTech](https://goatech.ai) release-intelligence platform. A typed `<GoaTechProvider>`, hooks for flags/experiments/events, and a `<TestProvider>` for tests.
3
+ This package is a backward-compatibility shim. The Sheepit React SDK has moved to `@sheepit-ai/react`.
4
4
 
5
- ## Install
5
+ All exports are identical — only the package name changed. Swap your dependency:
6
6
 
7
- ```bash
8
- npm install @goatech/react @goatech/sdk-js
7
+ ```diff
8
+ - "@goatech/react": "^1.0.0"
9
+ + "@sheepit-ai/react": "^1.0.0"
9
10
  ```
10
11
 
11
- ## Quickstart
12
+ > **If you're on `^0.1.x`**: this shim publishes as `1.0.0`, so `^0.1.x` will NOT auto-resolve. Change your range to `^1.0.0` (or migrate directly to `@sheepit-ai/react@^1.0.0`).
12
13
 
13
- ```tsx
14
- // app/layout.tsx (Next.js) — any React root works
15
- "use client";
14
+ And update your imports:
16
15
 
17
- import { GoaTech } from "@goatech/sdk-js";
18
- import { GoaTechProvider } from "@goatech/react";
19
-
20
- const gt = GoaTech.create({
21
- apiKey: process.env.NEXT_PUBLIC_GOATECH_PUB_KEY!,
22
- });
23
-
24
- export default function RootLayout({ children }: { children: React.ReactNode }) {
25
- return (
26
- <html lang="en">
27
- <body>
28
- <GoaTechProvider client={gt}>{children}</GoaTechProvider>
29
- </body>
30
- </html>
31
- );
32
- }
33
- ```
34
-
35
- ```tsx
36
- // Use flags anywhere in the tree
37
- "use client";
38
-
39
- import { useFlag, useExperiment, useTrack } from "@goatech/react";
40
-
41
- export function CheckoutButton() {
42
- const track = useTrack();
43
- const newCheckout = useFlag("new_checkout_flow", false);
44
- const { variant } = useExperiment("checkout_copy");
45
-
46
- return (
47
- <button
48
- onClick={() => track("checkout_started", { variant })}
49
- className={newCheckout ? "new" : "classic"}
50
- >
51
- {variant === "bold" ? "Get It Now" : "Buy"}
52
- </button>
53
- );
54
- }
55
- ```
56
-
57
- ## API
58
-
59
- ### `<GoaTechProvider client={gt}>`
60
-
61
- Pass a `GoaTech` instance (from `@goatech/sdk-js`) into your tree. Tests can substitute `<TestProvider>` from `@goatech/react/test`.
62
-
63
- ### `useFlag<T>(flagKey, defaultValue?)`
64
-
65
- Server-evaluated flag value. Fires `$flag_exposure` once per session.
66
-
67
- ### `useExperiment(experimentKey)`
68
-
69
- Returns `{ variant, payload }`. Assignment is sticky per device.
70
-
71
- ### `useTrack()`
72
-
73
- Returns a stable `track(eventName, properties?)` function.
74
-
75
- ### `useGoaTech()`
76
-
77
- Returns the underlying `GoaTech` client. Use it for identity controls on login/logout:
78
-
79
- ```tsx
80
- const gt = useGoaTech();
81
- gt.identify("user_abc123", { email: "jane@example.com" }); // after login
82
- gt.reset(); // after logout
83
- ```
84
-
85
- ## Components
86
-
87
- ### `<Feature flagKey="..." fallback={...}>`
88
-
89
- Render-prop wrapper around `useFlag` for binary or value-matched gates.
90
-
91
- ```tsx
92
- import { Feature } from "@goatech/react";
93
-
94
- <Feature flagKey="new_checkout_flow" fallback={<LegacyCheckout />}>
95
- <NewCheckout />
96
- </Feature>;
97
-
98
- // Match a specific value when the flag is non-boolean:
99
- <Feature flagKey="cta_variant" match="bold" fallback={<DefaultCTA />}>
100
- <BoldCTA />
101
- </Feature>;
102
- ```
103
-
104
- ### `<Experiment experimentKey="..." variants={{ ... }}>`
105
-
106
- Render the bucketed variant for an experiment. Assignment is sticky per device; `$exposure` fires automatically on first render.
107
-
108
- ```tsx
109
- import { Experiment } from "@goatech/react";
110
-
111
- <Experiment
112
- experimentKey="checkout_button_copy"
113
- variants={{
114
- control: <button>Buy</button>,
115
- bold: <button>Get It Now</button>,
116
- }}
117
- fallback={<button>Buy</button>}
118
- />;
119
-
120
- // Render-prop form for full access to the result + payload:
121
- <Experiment experimentKey="hero_h1">
122
- {({ variant, payload }) => <h1>{(payload as { headline: string }).headline}</h1>}
123
- </Experiment>;
16
+ ```diff
17
+ - import { GoaTechProvider, useFlag, useTrack } from "@goatech/react";
18
+ + import { GoaTechProvider, useFlag, useTrack } from "@sheepit-ai/react";
124
19
  ```
125
20
 
126
- ### `<PageViewTracker pathname={...} searchParams={...} />`
21
+ The hook names (`useFlag`, `useExperiment`, `useTrack`, `useGoaTech`) and component names (`GoaTechProvider`, `Feature`, `Experiment`, `PageViewTracker`) are all unchanged — only the package import path moves.
127
22
 
128
- Mount inside a Next.js layout to fire `$pageview` whenever pathname or search params change. Pair with `usePathname()` + `useSearchParams()`.
23
+ This shim will emit a `console.warn` on import until you migrate (once per JS realm that's once per main thread, once per worker_thread, once per `vm.Context`). It will stop receiving updates after 2026-11-26.
129
24
 
130
- ```tsx
131
- "use client";
132
- import { PageViewTracker } from "@goatech/react";
133
- import { usePathname, useSearchParams } from "next/navigation";
25
+ Full migration guide: https://www.goatech.ai/docs/migrate-to-sheepit
134
26
 
135
- export function Analytics() {
136
- const pathname = usePathname();
137
- const searchParams = useSearchParams();
138
- return <PageViewTracker pathname={pathname} searchParams={searchParams} />;
139
- }
140
- ```
141
-
142
- ### `<ErrorBoundary fallback={...}>`
143
-
144
- React error boundary that forwards render-time crashes to GoaTech as `$error` events with `component_stack`. Pair with the SDK's pre-React boot-error capture for full coverage.
145
-
146
- ```tsx
147
- import { ErrorBoundary } from "@goatech/react";
148
-
149
- <ErrorBoundary fallback={<FatalErrorScreen />}>
150
- <App />
151
- </ErrorBoundary>;
152
-
153
- // Render-prop form gives you the error + a reset callback:
154
- <ErrorBoundary
155
- fallback={({ error, reset }) => (
156
- <div>
157
- <p>{error.message}</p>
158
- <button onClick={reset}>Try again</button>
159
- </div>
160
- )}
161
- >
162
- <App />
163
- </ErrorBoundary>;
164
- ```
165
-
166
- ## Testing
167
-
168
- ```tsx
169
- import { TestProvider } from "@goatech/react/test";
170
-
171
- render(
172
- <TestProvider flags={{ new_checkout_flow: true }}>
173
- <CheckoutButton />
174
- </TestProvider>,
175
- );
176
- ```
27
+ ---
177
28
 
178
- ## Next.js
29
+ ## Publishing this shim (maintainers only)
179
30
 
180
- Works in both App Router and Pages Router. The provider is client-only (`"use client"`) put it inside a client component boundary.
31
+ Order matters. The shim depends on `@sheepit-ai/react: workspace:*`, which `pnpm publish` rewrites to a real semver range. That rewrite fails closed if the dependency isn't published yet:
181
32
 
182
- ## License
33
+ 1. `pnpm --filter @sheepit-ai/sdk-js publish --access public` — must succeed first (react peer-dep).
34
+ 2. `pnpm --filter @sheepit-ai/react publish --access public` — must succeed second.
35
+ 3. `pnpm --filter @goatech/react publish --access public` — shim publishes last.
36
+ 4. `npm deprecate "@goatech/react@<2.0.0" "Renamed to @sheepit-ai/react. See README."`
183
37
 
184
- MIT © GoaTech
38
+ Reversing the order publishes the shim with a broken dep.
package/dist/index.d.mts CHANGED
@@ -1,196 +1,2 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import * as react from 'react';
3
- import { ReactNode, Component, ErrorInfo } from 'react';
4
- import { GoaTechConfig, IGoaTech, FlagValue, ExperimentResult } from '@goatech/sdk-js';
5
- export { ExperimentResult, FlagValue, GoaTechConfig, IGoaTech } from '@goatech/sdk-js';
6
- export { n as noopClient } from './noop-client-CIawzLT5.mjs';
7
-
8
- interface GoaTechProviderProps {
9
- /** SDK configuration. Provider calls GoaTech.create() internally. */
10
- config: GoaTechConfig;
11
- /** Current user for automatic identity sync. Pass null when logged out. */
12
- user?: {
13
- id: string;
14
- traits?: Record<string, unknown>;
15
- } | null;
16
- children: ReactNode;
17
- }
18
- declare function GoaTechProvider({ config, user, children }: GoaTechProviderProps): react_jsx_runtime.JSX.Element;
19
-
20
- /**
21
- * Access the underlying `GoaTech` client from context. Use this for
22
- * identity controls (`identify`, `reset`) — for flag / experiment /
23
- * track calls prefer the dedicated hooks (`useFlag`, `useExperiment`,
24
- * `useTrack`) which give you stable references and trigger re-renders
25
- * on config refresh.
26
- *
27
- * @example
28
- * function LoginForm() {
29
- * const gt = useGoaTech();
30
- * async function onLogin(user) {
31
- * await api.login(user);
32
- * gt.identify(user.id, { email: user.email });
33
- * }
34
- * // …
35
- * }
36
- *
37
- * @example
38
- * function LogoutButton() {
39
- * const gt = useGoaTech();
40
- * return <button onClick={() => gt.reset()}>Log out</button>;
41
- * }
42
- */
43
- declare function useGoaTech(): IGoaTech;
44
-
45
- /**
46
- * Returns a stable `track(eventName, properties?)` function bound to
47
- * the current GoaTech client. The reference is stable across renders,
48
- * so it's safe to pass into `useEffect` deps.
49
- *
50
- * @example
51
- * function CheckoutButton({ courseId }: { courseId: string }) {
52
- * const track = useTrack();
53
- * return (
54
- * <button onClick={() => track("checkout_started", { course_id: courseId })}>
55
- * Buy
56
- * </button>
57
- * );
58
- * }
59
- */
60
- declare function useTrack(): (eventName: string, properties?: Record<string, unknown>) => void;
61
-
62
- /**
63
- * Evaluate a feature flag. Returns the resolved value (server-side
64
- * targeting + rollout math) or `defaultValue` while the SDK config is
65
- * still loading. Fires `$flag_exposure` once per session per flag.
66
- *
67
- * @param flagKey - Flag key declared in the GoaTech dashboard.
68
- * @param defaultValue - Returned when the SDK has no answer yet.
69
- * Defaults to `false` to match the typical boolean-flag use case.
70
- *
71
- * @example
72
- * function CheckoutButton() {
73
- * const newFlow = useFlag("new_checkout_flow", false);
74
- * return newFlow ? <NewCheckout /> : <LegacyCheckout />;
75
- * }
76
- *
77
- * @example
78
- * // Multi-value flag — pass a matching default
79
- * const variant = useFlag<"control" | "bold">("cta_copy_v1", "control");
80
- */
81
- declare function useFlag(flagKey: string, defaultValue?: FlagValue): FlagValue;
82
-
83
- /**
84
- * Get the bucketed variant + payload for an experiment. Assignment is
85
- * sticky per device. Fires `$exposure` once per session per experiment
86
- * the first time it resolves to a non-control variant.
87
- *
88
- * @param experimentKey - Experiment key declared in the GoaTech dashboard.
89
- * @returns `{ variant: string, payload: Record<string, unknown> }`.
90
- * `variant` falls back to `"control"` until the SDK config loads.
91
- *
92
- * @example
93
- * function HeroH1() {
94
- * const { variant, payload } = useExperiment("hero_h1_copy_v1");
95
- * if (variant === "control") return <h1>Ship faster.</h1>;
96
- * return <h1>{(payload as { headline: string }).headline}</h1>;
97
- * }
98
- */
99
- declare function useExperiment(experimentKey: string): ExperimentResult;
100
-
101
- interface FeatureProps {
102
- /** The flag key to evaluate */
103
- flagKey: string;
104
- /** Render when flag is truthy (or matches `match` value) */
105
- children: ReactNode;
106
- /** Optional fallback when flag is falsy */
107
- fallback?: ReactNode;
108
- /** Optional: match a specific value instead of truthy check */
109
- match?: FlagValue;
110
- }
111
- declare function Feature({ flagKey, children, fallback, match }: FeatureProps): react_jsx_runtime.JSX.Element;
112
-
113
- interface ExperimentProps {
114
- /** The experiment key */
115
- experimentKey: string;
116
- /** Map variant key -> ReactNode (simple mode). */
117
- variants?: Record<string, ReactNode>;
118
- /** Render prop alternative — receives { variant, payload }. */
119
- children?: (result: ExperimentResult) => ReactNode;
120
- /** Fallback if no variant matches (defaults to "control" variant or null) */
121
- fallback?: ReactNode;
122
- }
123
- declare function Experiment({ experimentKey, variants, children, fallback }: ExperimentProps): react_jsx_runtime.JSX.Element;
124
-
125
- interface PageViewTrackerProps {
126
- /** Current pathname — pass from your router (e.g., Next.js usePathname()). */
127
- pathname: string;
128
- /** Current search params string (optional). */
129
- searchParams?: string;
130
- }
131
- /**
132
- * Track page views on route change.
133
- *
134
- * Emits two events per route change:
135
- *
136
- * - `$page_leave` for the prior route, with `time_on_page_ms`,
137
- * `max_scroll_pct`, `tab_hidden_count`, etc. (emitted by
138
- * `client.recordPageView()` via the SDK's `LifecycleManager`).
139
- * - `$page_view` for the new route.
140
- *
141
- * The order matters — leave before view — so the leave event carries
142
- * the previous path, and the view marks the start of the new page's
143
- * dwell window. Both events end up in `events_raw` so funnels can
144
- * filter at either grain.
145
- *
146
- * Unlike the web-app version, this component does NOT import
147
- * `next/navigation` directly — the caller provides pathname and
148
- * searchParams so it works with any router (Next.js, React Router,
149
- * TanStack Router, etc.).
150
- */
151
- declare function PageViewTracker({ pathname, searchParams }: PageViewTrackerProps): null;
152
-
153
- interface ErrorBoundaryProps {
154
- /**
155
- * Rendered when a descendant render throws. Receives the error and a
156
- * `reset()` function to clear the boundary state. If omitted, children
157
- * are hidden after a crash (null fallback).
158
- */
159
- fallback?: ReactNode | ((state: {
160
- error: Error;
161
- reset: () => void;
162
- }) => ReactNode);
163
- /**
164
- * Called with the captured error AFTER it has been forwarded to GoaTech.
165
- * Useful for surfacing a toast or forwarding to another telemetry system.
166
- */
167
- onError?: (error: Error, info: ErrorInfo) => void;
168
- children: ReactNode;
169
- }
170
- interface State {
171
- error: Error | null;
172
- }
173
- /**
174
- * React ErrorBoundary that forwards render-time crashes to GoaTech as
175
- * `$error` events. Use it to wrap any sub-tree whose crashes would
176
- * otherwise produce a blank page (or the Next.js root error screen).
177
- *
178
- * <GoaTechProvider ...>
179
- * <ErrorBoundary fallback={<FatalError />}>
180
- * <App />
181
- * </ErrorBoundary>
182
- * </GoaTechProvider>
183
- *
184
- * Reaches the GoaTech client via context so no explicit wiring is needed.
185
- */
186
- declare class ErrorBoundary extends Component<ErrorBoundaryProps, State> {
187
- static contextType: react.Context<IGoaTech>;
188
- context: IGoaTech;
189
- state: State;
190
- static getDerivedStateFromError(error: Error): State;
191
- componentDidCatch(error: Error, info: ErrorInfo): void;
192
- private readonly reset;
193
- render(): ReactNode;
194
- }
195
-
196
- export { ErrorBoundary, type ErrorBoundaryProps, Experiment, type ExperimentProps, Feature, type FeatureProps, GoaTechProvider, type GoaTechProviderProps, PageViewTracker, type PageViewTrackerProps, useExperiment, useFlag, useGoaTech, useTrack };
1
+ export * from '@sheepit-ai/react';
2
+ import '@sheepit-ai/react/test';
package/dist/index.d.ts CHANGED
@@ -1,196 +1,2 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import * as react from 'react';
3
- import { ReactNode, Component, ErrorInfo } from 'react';
4
- import { GoaTechConfig, IGoaTech, FlagValue, ExperimentResult } from '@goatech/sdk-js';
5
- export { ExperimentResult, FlagValue, GoaTechConfig, IGoaTech } from '@goatech/sdk-js';
6
- export { n as noopClient } from './noop-client-CIawzLT5.js';
7
-
8
- interface GoaTechProviderProps {
9
- /** SDK configuration. Provider calls GoaTech.create() internally. */
10
- config: GoaTechConfig;
11
- /** Current user for automatic identity sync. Pass null when logged out. */
12
- user?: {
13
- id: string;
14
- traits?: Record<string, unknown>;
15
- } | null;
16
- children: ReactNode;
17
- }
18
- declare function GoaTechProvider({ config, user, children }: GoaTechProviderProps): react_jsx_runtime.JSX.Element;
19
-
20
- /**
21
- * Access the underlying `GoaTech` client from context. Use this for
22
- * identity controls (`identify`, `reset`) — for flag / experiment /
23
- * track calls prefer the dedicated hooks (`useFlag`, `useExperiment`,
24
- * `useTrack`) which give you stable references and trigger re-renders
25
- * on config refresh.
26
- *
27
- * @example
28
- * function LoginForm() {
29
- * const gt = useGoaTech();
30
- * async function onLogin(user) {
31
- * await api.login(user);
32
- * gt.identify(user.id, { email: user.email });
33
- * }
34
- * // …
35
- * }
36
- *
37
- * @example
38
- * function LogoutButton() {
39
- * const gt = useGoaTech();
40
- * return <button onClick={() => gt.reset()}>Log out</button>;
41
- * }
42
- */
43
- declare function useGoaTech(): IGoaTech;
44
-
45
- /**
46
- * Returns a stable `track(eventName, properties?)` function bound to
47
- * the current GoaTech client. The reference is stable across renders,
48
- * so it's safe to pass into `useEffect` deps.
49
- *
50
- * @example
51
- * function CheckoutButton({ courseId }: { courseId: string }) {
52
- * const track = useTrack();
53
- * return (
54
- * <button onClick={() => track("checkout_started", { course_id: courseId })}>
55
- * Buy
56
- * </button>
57
- * );
58
- * }
59
- */
60
- declare function useTrack(): (eventName: string, properties?: Record<string, unknown>) => void;
61
-
62
- /**
63
- * Evaluate a feature flag. Returns the resolved value (server-side
64
- * targeting + rollout math) or `defaultValue` while the SDK config is
65
- * still loading. Fires `$flag_exposure` once per session per flag.
66
- *
67
- * @param flagKey - Flag key declared in the GoaTech dashboard.
68
- * @param defaultValue - Returned when the SDK has no answer yet.
69
- * Defaults to `false` to match the typical boolean-flag use case.
70
- *
71
- * @example
72
- * function CheckoutButton() {
73
- * const newFlow = useFlag("new_checkout_flow", false);
74
- * return newFlow ? <NewCheckout /> : <LegacyCheckout />;
75
- * }
76
- *
77
- * @example
78
- * // Multi-value flag — pass a matching default
79
- * const variant = useFlag<"control" | "bold">("cta_copy_v1", "control");
80
- */
81
- declare function useFlag(flagKey: string, defaultValue?: FlagValue): FlagValue;
82
-
83
- /**
84
- * Get the bucketed variant + payload for an experiment. Assignment is
85
- * sticky per device. Fires `$exposure` once per session per experiment
86
- * the first time it resolves to a non-control variant.
87
- *
88
- * @param experimentKey - Experiment key declared in the GoaTech dashboard.
89
- * @returns `{ variant: string, payload: Record<string, unknown> }`.
90
- * `variant` falls back to `"control"` until the SDK config loads.
91
- *
92
- * @example
93
- * function HeroH1() {
94
- * const { variant, payload } = useExperiment("hero_h1_copy_v1");
95
- * if (variant === "control") return <h1>Ship faster.</h1>;
96
- * return <h1>{(payload as { headline: string }).headline}</h1>;
97
- * }
98
- */
99
- declare function useExperiment(experimentKey: string): ExperimentResult;
100
-
101
- interface FeatureProps {
102
- /** The flag key to evaluate */
103
- flagKey: string;
104
- /** Render when flag is truthy (or matches `match` value) */
105
- children: ReactNode;
106
- /** Optional fallback when flag is falsy */
107
- fallback?: ReactNode;
108
- /** Optional: match a specific value instead of truthy check */
109
- match?: FlagValue;
110
- }
111
- declare function Feature({ flagKey, children, fallback, match }: FeatureProps): react_jsx_runtime.JSX.Element;
112
-
113
- interface ExperimentProps {
114
- /** The experiment key */
115
- experimentKey: string;
116
- /** Map variant key -> ReactNode (simple mode). */
117
- variants?: Record<string, ReactNode>;
118
- /** Render prop alternative — receives { variant, payload }. */
119
- children?: (result: ExperimentResult) => ReactNode;
120
- /** Fallback if no variant matches (defaults to "control" variant or null) */
121
- fallback?: ReactNode;
122
- }
123
- declare function Experiment({ experimentKey, variants, children, fallback }: ExperimentProps): react_jsx_runtime.JSX.Element;
124
-
125
- interface PageViewTrackerProps {
126
- /** Current pathname — pass from your router (e.g., Next.js usePathname()). */
127
- pathname: string;
128
- /** Current search params string (optional). */
129
- searchParams?: string;
130
- }
131
- /**
132
- * Track page views on route change.
133
- *
134
- * Emits two events per route change:
135
- *
136
- * - `$page_leave` for the prior route, with `time_on_page_ms`,
137
- * `max_scroll_pct`, `tab_hidden_count`, etc. (emitted by
138
- * `client.recordPageView()` via the SDK's `LifecycleManager`).
139
- * - `$page_view` for the new route.
140
- *
141
- * The order matters — leave before view — so the leave event carries
142
- * the previous path, and the view marks the start of the new page's
143
- * dwell window. Both events end up in `events_raw` so funnels can
144
- * filter at either grain.
145
- *
146
- * Unlike the web-app version, this component does NOT import
147
- * `next/navigation` directly — the caller provides pathname and
148
- * searchParams so it works with any router (Next.js, React Router,
149
- * TanStack Router, etc.).
150
- */
151
- declare function PageViewTracker({ pathname, searchParams }: PageViewTrackerProps): null;
152
-
153
- interface ErrorBoundaryProps {
154
- /**
155
- * Rendered when a descendant render throws. Receives the error and a
156
- * `reset()` function to clear the boundary state. If omitted, children
157
- * are hidden after a crash (null fallback).
158
- */
159
- fallback?: ReactNode | ((state: {
160
- error: Error;
161
- reset: () => void;
162
- }) => ReactNode);
163
- /**
164
- * Called with the captured error AFTER it has been forwarded to GoaTech.
165
- * Useful for surfacing a toast or forwarding to another telemetry system.
166
- */
167
- onError?: (error: Error, info: ErrorInfo) => void;
168
- children: ReactNode;
169
- }
170
- interface State {
171
- error: Error | null;
172
- }
173
- /**
174
- * React ErrorBoundary that forwards render-time crashes to GoaTech as
175
- * `$error` events. Use it to wrap any sub-tree whose crashes would
176
- * otherwise produce a blank page (or the Next.js root error screen).
177
- *
178
- * <GoaTechProvider ...>
179
- * <ErrorBoundary fallback={<FatalError />}>
180
- * <App />
181
- * </ErrorBoundary>
182
- * </GoaTechProvider>
183
- *
184
- * Reaches the GoaTech client via context so no explicit wiring is needed.
185
- */
186
- declare class ErrorBoundary extends Component<ErrorBoundaryProps, State> {
187
- static contextType: react.Context<IGoaTech>;
188
- context: IGoaTech;
189
- state: State;
190
- static getDerivedStateFromError(error: Error): State;
191
- componentDidCatch(error: Error, info: ErrorInfo): void;
192
- private readonly reset;
193
- render(): ReactNode;
194
- }
195
-
196
- export { ErrorBoundary, type ErrorBoundaryProps, Experiment, type ExperimentProps, Feature, type FeatureProps, GoaTechProvider, type GoaTechProviderProps, PageViewTracker, type PageViewTrackerProps, useExperiment, useFlag, useGoaTech, useTrack };
1
+ export * from '@sheepit-ai/react';
2
+ import '@sheepit-ai/react/test';
package/dist/index.js CHANGED
@@ -1,2 +1,19 @@
1
- 'use strict';var react=require('react'),sdkJs=require('@goatech/sdk-js'),jsxRuntime=require('react/jsx-runtime');var G=new sdkJs.DiagnosticBus(0),l={track:()=>{},identify:()=>{},reset:()=>{},flag:(o,e=false)=>e,experiment:()=>({variant:"control"}),overrideFlag:()=>{},clearOverrides:()=>{},getOverrides:()=>({}),flush:()=>Promise.resolve(),recordPageView:()=>{},status:()=>({initialized:false,online:false,queueDepth:0,offlineQueueDepth:0,lastFlushAt:null,deviceId:null,userId:null,flagCount:0,experimentCount:0,sdkVersion:"noop"}),destroy:()=>{},diagnostics:()=>G,getRecentDiagnostics:()=>[]};var p=react.createContext(l);function v({config:o,user:e,children:r}){let t=react.useRef(null),[n,a]=react.useState(l),u=react.useRef(null);react.useEffect(()=>{if(!t.current&&!(typeof window>"u"))try{let i=sdkJs.GoaTech.create(o);return t.current=i,a(i),()=>{i.destroy(),t.current=null;}}catch(i){typeof window<"u"&&console.warn("[GoaTech] SDK init failed \u2014 events, flags, and experiments are disabled.",i instanceof Error?i.message:i);}},[]);let s=e?.id??null;return react.useEffect(()=>{let i=t.current;i&&(s&&u.current!==s?(i.identify(s,e?.traits),u.current=s):!s&&u.current!==null&&(i.reset(),u.current=null));},[s,e?.traits]),jsxRuntime.jsx(p.Provider,{value:n,children:r})}function c(){return react.useContext(p)}function m(){let o=c();return react.useCallback((e,r)=>{o.track(e,r);},[o])}function d(o,e=false){return c().flag(o,e)}function h(o){return c().experiment(o)}function w({flagKey:o,children:e,fallback:r=null,match:t}){let n=d(o,false);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:(t!==void 0?n===t:!!n)?e:r})}function S({experimentKey:o,variants:e,children:r,fallback:t}){let n=h(o);return r?jsxRuntime.jsx(jsxRuntime.Fragment,{children:r(n)}):e&&n.variant in e?jsxRuntime.jsx(jsxRuntime.Fragment,{children:e[n.variant]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:t??e?.control??null})}function b({pathname:o,searchParams:e}){let r=c(),t=m(),n=react.useRef("");return react.useEffect(()=>{let a=e?`${o}?${e}`:o;a!==n.current&&(n.current=a,r.recordPageView(a),t("$page_view",{path:o,url:a,referrer:typeof document<"u"&&document.referrer||null,title:typeof document<"u"&&document.title||null}));},[o,e,r,t]),null}var f=class extends react.Component{constructor(){super(...arguments);this.state={error:null};this.reset=()=>{this.setState({error:null});};}static getDerivedStateFromError(r){return {error:r}}componentDidCatch(r,t){try{this.context.track("$error",{message:r.message,stack:r.stack?r.stack.slice(0,4096):null,component_stack:t.componentStack?t.componentStack.slice(0,4096):null,type:"react_boundary"});}catch{}try{this.props.onError?.(r,t);}catch{}}render(){let{error:r}=this.state;if(!r)return this.props.children;let{fallback:t}=this.props;return typeof t=="function"?t({error:r,reset:this.reset}):t??null}};f.contextType=p;exports.ErrorBoundary=f;exports.Experiment=S;exports.Feature=w;exports.GoaTechProvider=v;exports.PageViewTracker=b;exports.noopClient=l;exports.useExperiment=h;exports.useFlag=d;exports.useGoaTech=c;exports.useTrack=m;//# sourceMappingURL=index.js.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ub29wLWNsaWVudC50cyIsIi4uL3NyYy9jb250ZXh0LnRzIiwiLi4vc3JjL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9ob29rcy91c2UtZ29hdGVjaC50cyIsIi4uL3NyYy9ob29rcy91c2UtdHJhY2sudHMiLCIuLi9zcmMvaG9va3MvdXNlLWZsYWcudHMiLCIuLi9zcmMvaG9va3MvdXNlLWV4cGVyaW1lbnQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9mZWF0dXJlLnRzeCIsIi4uL3NyYy9jb21wb25lbnRzL2V4cGVyaW1lbnQudHN4IiwiLi4vc3JjL2NvbXBvbmVudHMvcGFnZS12aWV3LXRyYWNrZXIudHN4IiwiLi4vc3JjL2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkudHN4Il0sIm5hbWVzIjpbIm5vb3BCdXMiLCJEaWFnbm9zdGljQnVzIiwibm9vcENsaWVudCIsIl9rZXkiLCJkZWZhdWx0VmFsdWUiLCJHb2FUZWNoQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJHb2FUZWNoUHJvdmlkZXIiLCJjb25maWciLCJ1c2VyIiwiY2hpbGRyZW4iLCJjbGllbnRSZWYiLCJ1c2VSZWYiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJ1c2VTdGF0ZSIsImlkZW50aWZpZWRSZWYiLCJ1c2VFZmZlY3QiLCJjIiwiR29hVGVjaCIsImVyciIsInVzZXJJZCIsImpzeCIsInVzZUdvYVRlY2giLCJ1c2VDb250ZXh0IiwidXNlVHJhY2siLCJ1c2VDYWxsYmFjayIsImV2ZW50TmFtZSIsInByb3BlcnRpZXMiLCJ1c2VGbGFnIiwiZmxhZ0tleSIsInVzZUV4cGVyaW1lbnQiLCJleHBlcmltZW50S2V5IiwiRmVhdHVyZSIsImZhbGxiYWNrIiwibWF0Y2giLCJ2YWx1ZSIsIkZyYWdtZW50IiwiRXhwZXJpbWVudCIsInZhcmlhbnRzIiwicmVzdWx0IiwiUGFnZVZpZXdUcmFja2VyIiwicGF0aG5hbWUiLCJzZWFyY2hQYXJhbXMiLCJ0cmFjayIsImxhc3RQYXRoUmVmIiwiZnVs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QUEsQ0FBTSxnQkFDUixDQUFDLEVBQ0gsTUFBUSxDQUVSLENBQ0EsR0FBSSxDQUNGLEtBQUssS0FBQSxDQUFNLE9BQUEsR0FBVUQsQ0FBQUEsQ0FBT0MsQ0FBSSxFQUNsQyxDQUFBLEtBQVEsQ0FFUixDQUNGLENBTUEsUUFBb0IsQ0FDbEIsR0FBTSxDQUFFLEtBQUEsQ0FBQUQsQ0FBTSxDQUFBLENBQUksSUFBQSxDQUFLLEtBQUEsQ0FDdkIsR0FBSSxDQUFDQSxDQUFBQSxDQUFPLE9BQU8sSUFBQSxDQUFLLEtBQUEsQ0FBTSxTQUU5QixHQUFNLENBQUUsUUFBQSxDQUFBZixDQUFTLEVBQUksSUFBQSxDQUFLLEtBQUEsQ0FDMUIsT0FBSSxPQUFPQSxHQUFhLFVBQUEsQ0FDZkEsQ0FBQUEsQ0FBUyxDQUFFLEtBQUEsQ0FBQWUsRUFBTyxLQUFBLENBQU8sSUFBQSxDQUFLLEtBQU0sQ0FBQyxFQUV2Q2YsQ0FBQUEsRUFBWSxJQUNyQixDQUNGLEVBMUNhYSxFQUNKLFdBQUEsQ0FBYzFDLENBQUFBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJR29hVGVjaCB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB0eXBlIHsgRmxhZ1ZhbHVlLCBFeHBlcmltZW50UmVzdWx0LCBTREtTdGF0dXMgfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5pbXBvcnQgeyBEaWFnbm9zdGljQnVzIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuXG5jb25zdCBub29wQnVzID0gbmV3IERpYWdub3N0aWNCdXMoMCk7XG5cbi8qKlxuICogU2lsZW50IG5vLW9wIGNsaWVudC4gVXNlZCB3aGVuOlxuICogLSBTREsgaXMgbm90IHlldCBpbml0aWFsaXplZCAoU1NSLCBpbml0aWFsIHJlbmRlcilcbiAqIC0gQVBJIGtleSBpcyBub3QgY29uZmlndXJlZCAobG9jYWwgZGV2KVxuICogLSBUZXN0cyB0aGF0IGRvbid0IGNhcmUgYWJvdXQgYW5hbHl0aWNzXG4gKi9cbmV4cG9ydCBjb25zdCBub29wQ2xpZW50OiBJR29hVGVjaCA9IHtcbiAgdHJhY2s6ICgpID0+IHt9LFxuICBpZGVudGlmeTogKCkgPT4ge30sXG4gIHJlc2V0OiAoKSA9PiB7fSxcbiAgZmxhZzogKF9rZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBGbGFnVmFsdWUgPSBmYWxzZSkgPT4gZGVmYXVsdFZhbHVlLFxuICBleHBlcmltZW50OiAoKTogRXhwZXJpbWVudFJlc3VsdCA9PiAoeyB2YXJpYW50OiBcImNvbnRyb2xcIiB9KSxcbiAgb3ZlcnJpZGVGbGFnOiAoKSA9PiB7fSxcbiAgY2xlYXJPdmVycmlkZXM6ICgpID0+IHt9LFxuICBnZXRPdmVycmlkZXM6ICgpID0+ICh7fSksXG4gIGZsdXNoOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSxcbiAgcmVjb3JkUGFnZVZpZXc6ICgpID0+IHt9LFxuICBzdGF0dXM6ICgpOiBTREtTdGF0dXMgPT4gKHtcbiAgICBpbml0aWFsaXplZDogZmFsc2UsXG4gICAgb25saW5lOiBmYWxzZSxcbiAgICBxdWV1ZURlcHRoOiAwLFxuICAgIG9mZmxpbmVRdWV1ZURlcHRoOiAwLFxuICAgIGxhc3RGbHVzaEF0OiBudWxsLFxuICAgIGRldmljZUlkOiBudWxsLFxuICAgIHVzZXJJZDogbnVsbCxcbiAgICBmbGFnQ291bnQ6IDAsXG4gICAgZXhwZXJpbWVudENvdW50OiAwLFxuICAgIHNka1ZlcnNpb246IFwibm9vcFwiLFxuICB9KSxcbiAgZGVzdHJveTogKCkgPT4ge30sXG4gIGRpYWdub3N0aWNzOiAoKSA9PiBub29wQnVzLFxuICBnZXRSZWNlbnREaWFnbm9zdGljczogKCkgPT4gW10sXG59O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBJR29hVGVjaCB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB7IG5vb3BDbGllbnQgfSBmcm9tIFwiLi9ub29wLWNsaWVudC5qc1wiO1xuXG4vKipcbiAqIEludGVybmFsIGNvbnRleHQg4oCUIGNvbnN1bWVycyBzaG91bGQgdXNlIHRoZSBgdXNlR29hVGVjaCgpYCBob29rLlxuICogRXhwb3J0ZWQgb25seSBmb3IgVGVzdFByb3ZpZGVyIHRvIGluamVjdCBhIG1vY2sgY2xpZW50LlxuICovXG5leHBvcnQgY29uc3QgR29hVGVjaENvbnRleHQgPSBjcmVhdGVDb250ZXh0PElHb2FUZWNoPihub29wQ2xpZW50KTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEdvYVRlY2gsIHR5cGUgR29hVGVjaENvbmZpZywgdHlwZSBJR29hVGVjaCB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB7IEdvYVRlY2hDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dC5qc1wiO1xuaW1wb3J0IHsgbm9vcENsaWVudCB9IGZyb20gXCIuL25vb3AtY2xpZW50LmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR29hVGVjaFByb3ZpZGVyUHJvcHMge1xuICAvKiogU0RLIGNvbmZpZ3VyYXRpb24uIFByb3ZpZGVyIGNhbGxzIEdvYVRlY2guY3JlYXRlKCkgaW50ZXJuYWxseS4gKi9cbiAgY29uZmlnOiBHb2FUZWNoQ29uZmlnO1xuICAvKiogQ3VycmVudCB1c2VyIGZvciBhdXRvbWF0aWMgaWRlbnRpdHkgc3luYy4gUGFzcyBudWxsIHdoZW4gbG9nZ2VkIG91dC4gKi9cbiAgdXNlcj86IHsgaWQ6IHN0cmluZzsgdHJhaXRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB8IG51bGw7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHb2FUZWNoUHJvdmlkZXIoeyBjb25maWcsIHVzZXIsIGNoaWxkcmVuIH06IEdvYVRlY2hQcm92aWRlclByb3BzKSB7XG4gIGNvbnN0IGNsaWVudFJlZiA9IHVzZVJlZjxJR29hVGVjaCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY2xpZW50LCBzZXRDbGllbnRdID0gdXNlU3RhdGU8SUdvYVRlY2g+KG5vb3BDbGllbnQpO1xuICBjb25zdCBpZGVudGlmaWVkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIENyZWF0ZSBjbGllbnQgb25jZSBvbiBtb3VudCDigJQgZ3JhY2VmdWxseSBmYWxsIGJhY2sgdG8gbm9vcCBpZiBjb25maWcgaXMgaW52YWxpZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjbGllbnRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGMgPSBHb2FUZWNoLmNyZWF0ZShjb25maWcpO1xuICAgICAgY2xpZW50UmVmLmN1cnJlbnQgPSBjO1xuICAgICAgc2V0Q2xpZW50KGMpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgYy5kZXN0cm95KCk7XG4gICAgICAgIGNsaWVudFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBJbnZhbGlkIGNvbmZpZyAoZS5nLiwgbWlzc2luZyBBUEkga2V5KSDigJQgc3RheSBvbiBub29wIGNsaWVudC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGFwcCBmcm9tIGNyYXNoaW5nIHdoZW4gTkVYVF9QVUJMSUNfR1RfU0RLX0FQSV9LRVkgaXMgbm90IHNldC5cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIltHb2FUZWNoXSBTREsgaW5pdCBmYWlsZWQg4oCUIGV2ZW50cywgZmxhZ3MsIGFuZCBleHBlcmltZW50cyBhcmUgZGlzYWJsZWQuXCIsXG4gICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKTtcblxuICAvLyBTeW5jIGlkZW50aXR5IHdoZW4gdXNlciBjaGFuZ2VzXG4gIGNvbnN0IHVzZXJJZCA9IHVzZXI/LmlkID8/IG51bGw7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYyA9IGNsaWVudFJlZi5jdXJyZW50O1xuICAgIGlmICghYykgcmV0dXJuO1xuICAgIGlmICh1c2VySWQgJiYgaWRlbnRpZmllZFJlZi5jdXJyZW50ICE9PSB1c2VySWQpIHtcbiAgICAgIGMuaWRlbnRpZnkodXNlcklkLCB1c2VyPy50cmFpdHMpO1xuICAgICAgaWRlbnRpZmllZFJlZi5jdXJyZW50ID0gdXNlcklkO1xuICAgIH0gZWxzZSBpZiAoIXVzZXJJZCAmJiBpZGVudGlmaWVkUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGMucmVzZXQoKTtcbiAgICAgIGlkZW50aWZpZWRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbdXNlcklkLCB1c2VyPy50cmFpdHNdKTtcblxuICByZXR1cm4gPEdvYVRlY2hDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjbGllbnR9PntjaGlsZHJlbn08L0dvYVRlY2hDb250ZXh0LlByb3ZpZGVyPjtcbn1cbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgSUdvYVRlY2ggfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5pbXBvcnQgeyBHb2FUZWNoQ29udGV4dCB9IGZyb20gXCIuLi9jb250ZXh0LmpzXCI7XG5cbi8qKlxuICogQWNjZXNzIHRoZSB1bmRlcmx5aW5nIGBHb2FUZWNoYCBjbGllbnQgZnJvbSBjb250ZXh0LiBVc2UgdGhpcyBmb3JcbiAqIGlkZW50aXR5IGNvbnRyb2xzIChgaWRlbnRpZnlgLCBgcmVzZXRgKSDigJQgZm9yIGZsYWcgLyBleHBlcmltZW50IC9cbiAqIHRyYWNrIGNhbGxzIHByZWZlciB0aGUgZGVkaWNhdGVkIGhvb2tzIChgdXNlRmxhZ2AsIGB1c2VFeHBlcmltZW50YCxcbiAqIGB1c2VUcmFja2ApIHdoaWNoIGdpdmUgeW91IHN0YWJsZSByZWZlcmVuY2VzIGFuZCB0cmlnZ2VyIHJlLXJlbmRlcnNcbiAqIG9uIGNvbmZpZyByZWZyZXNoLlxuICpcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBMb2dpbkZvcm0oKSB7XG4gKiAgIGNvbnN0IGd0ID0gdXNlR29hVGVjaCgpO1xuICogICBhc3luYyBmdW5jdGlvbiBvbkxvZ2luKHVzZXIpIHtcbiAqICAgICBhd2FpdCBhcGkubG9naW4odXNlcik7XG4gKiAgICAgZ3QuaWRlbnRpZnkodXNlci5pZCwgeyBlbWFpbDogdXNlci5lbWFpbCB9KTtcbiAqICAgfVxuICogICAvLyDigKZcbiAqIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gTG9nb3V0QnV0dG9uKCkge1xuICogICBjb25zdCBndCA9IHVzZUdvYVRlY2goKTtcbiAqICAgcmV0dXJuIDxidXR0b24gb25DbGljaz17KCkgPT4gZ3QucmVzZXQoKX0+TG9nIG91dDwvYnV0dG9uPjtcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUdvYVRlY2goKTogSUdvYVRlY2gge1xuICByZXR1cm4gdXNlQ29udGV4dChHb2FUZWNoQ29udGV4dCk7XG59XG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlR29hVGVjaCB9IGZyb20gXCIuL3VzZS1nb2F0ZWNoLmpzXCI7XG5cbi8qKlxuICogUmV0dXJucyBhIHN0YWJsZSBgdHJhY2soZXZlbnROYW1lLCBwcm9wZXJ0aWVzPylgIGZ1bmN0aW9uIGJvdW5kIHRvXG4gKiB0aGUgY3VycmVudCBHb2FUZWNoIGNsaWVudC4gVGhlIHJlZmVyZW5jZSBpcyBzdGFibGUgYWNyb3NzIHJlbmRlcnMsXG4gKiBzbyBpdCdzIHNhZmUgdG8gcGFzcyBpbnRvIGB1c2VFZmZlY3RgIGRlcHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIENoZWNrb3V0QnV0dG9uKHsgY291cnNlSWQgfTogeyBjb3Vyc2VJZDogc3RyaW5nIH0pIHtcbiAqICAgY29uc3QgdHJhY2sgPSB1c2VUcmFjaygpO1xuICogICByZXR1cm4gKFxuICogICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gdHJhY2soXCJjaGVja291dF9zdGFydGVkXCIsIHsgY291cnNlX2lkOiBjb3Vyc2VJZCB9KX0+XG4gKiAgICAgICBCdXlcbiAqICAgICA8L2J1dHRvbj5cbiAqICAgKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRyYWNrKCkge1xuICBjb25zdCBjbGllbnQgPSB1c2VHb2FUZWNoKCk7XG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgY2xpZW50LnRyYWNrKGV2ZW50TmFtZSwgcHJvcGVydGllcyk7XG4gICAgfSxcbiAgICBbY2xpZW50XSxcbiAgKTtcbn1cbiIsImltcG9ydCB0eXBlIHsgRmxhZ1ZhbHVlIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHsgdXNlR29hVGVjaCB9IGZyb20gXCIuL3VzZS1nb2F0ZWNoLmpzXCI7XG5cbi8qKlxuICogRXZhbHVhdGUgYSBmZWF0dXJlIGZsYWcuIFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlIChzZXJ2ZXItc2lkZVxuICogdGFyZ2V0aW5nICsgcm9sbG91dCBtYXRoKSBvciBgZGVmYXVsdFZhbHVlYCB3aGlsZSB0aGUgU0RLIGNvbmZpZyBpc1xuICogc3RpbGwgbG9hZGluZy4gRmlyZXMgYCRmbGFnX2V4cG9zdXJlYCBvbmNlIHBlciBzZXNzaW9uIHBlciBmbGFnLlxuICpcbiAqIEBwYXJhbSBmbGFnS2V5IC0gRmxhZyBrZXkgZGVjbGFyZWQgaW4gdGhlIEdvYVRlY2ggZGFzaGJvYXJkLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIFJldHVybmVkIHdoZW4gdGhlIFNESyBoYXMgbm8gYW5zd2VyIHlldC5cbiAqICAgRGVmYXVsdHMgdG8gYGZhbHNlYCB0byBtYXRjaCB0aGUgdHlwaWNhbCBib29sZWFuLWZsYWcgdXNlIGNhc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIENoZWNrb3V0QnV0dG9uKCkge1xuICogICBjb25zdCBuZXdGbG93ID0gdXNlRmxhZyhcIm5ld19jaGVja291dF9mbG93XCIsIGZhbHNlKTtcbiAqICAgcmV0dXJuIG5ld0Zsb3cgPyA8TmV3Q2hlY2tvdXQgLz4gOiA8TGVnYWN5Q2hlY2tvdXQgLz47XG4gKiB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLXZhbHVlIGZsYWcg4oCUIHBhc3MgYSBtYXRjaGluZyBkZWZhdWx0XG4gKiBjb25zdCB2YXJpYW50ID0gdXNlRmxhZzxcImNvbnRyb2xcIiB8IFwiYm9sZFwiPihcImN0YV9jb3B5X3YxXCIsIFwiY29udHJvbFwiKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZsYWcoZmxhZ0tleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IEZsYWdWYWx1ZSA9IGZhbHNlKTogRmxhZ1ZhbHVlIHtcbiAgY29uc3QgY2xpZW50ID0gdXNlR29hVGVjaCgpO1xuICByZXR1cm4gY2xpZW50LmZsYWcoZmxhZ0tleSwgZGVmYXVsdFZhbHVlKTtcbn1cbiIsImltcG9ydCB0eXBlIHsgRXhwZXJpbWVudFJlc3VsdCB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB7IHVzZUdvYVRlY2ggfSBmcm9tIFwiLi91c2UtZ29hdGVjaC5qc1wiO1xuXG4vKipcbiAqIEdldCB0aGUgYnVja2V0ZWQgdmFyaWFudCArIHBheWxvYWQgZm9yIGFuIGV4cGVyaW1lbnQuIEFzc2lnbm1lbnQgaXNcbiAqIHN0aWNreSBwZXIgZGV2aWNlLiBGaXJlcyBgJGV4cG9zdXJlYCBvbmNlIHBlciBzZXNzaW9uIHBlciBleHBlcmltZW50XG4gKiB0aGUgZmlyc3QgdGltZSBpdCByZXNvbHZlcyB0byBhIG5vbi1jb250cm9sIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGV4cGVyaW1lbnRLZXkgLSBFeHBlcmltZW50IGtleSBkZWNsYXJlZCBpbiB0aGUgR29hVGVjaCBkYXNoYm9hcmQuXG4gKiBAcmV0dXJucyBgeyB2YXJpYW50OiBzdHJpbmcsIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH1gLlxuICogICBgdmFyaWFudGAgZmFsbHMgYmFjayB0byBgXCJjb250cm9sXCJgIHVudGlsIHRoZSBTREsgY29uZmlnIGxvYWRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBIZXJvSDEoKSB7XG4gKiAgIGNvbnN0IHsgdmFyaWFudCwgcGF5bG9hZCB9ID0gdXNlRXhwZXJpbWVudChcImhlcm9faDFfY29weV92MVwiKTtcbiAqICAgaWYgKHZhcmlhbnQgPT09IFwiY29udHJvbFwiKSByZXR1cm4gPGgxPlNoaXAgZmFzdGVyLjwvaDE+O1xuICogICByZXR1cm4gPGgxPnsocGF5bG9hZCBhcyB7IGhlYWRsaW5lOiBzdHJpbmcgfSkuaGVhZGxpbmV9PC9oMT47XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VFeHBlcmltZW50KGV4cGVyaW1lbnRLZXk6IHN0cmluZyk6IEV4cGVyaW1lbnRSZXN1bHQge1xuICBjb25zdCBjbGllbnQgPSB1c2VHb2FUZWNoKCk7XG4gIHJldHVybiBjbGllbnQuZXhwZXJpbWVudChleHBlcmltZW50S2V5KTtcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEZsYWdWYWx1ZSB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB7IHVzZUZsYWcgfSBmcm9tIFwiLi4vaG9va3MvdXNlLWZsYWcuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlUHJvcHMge1xuICAvKiogVGhlIGZsYWcga2V5IHRvIGV2YWx1YXRlICovXG4gIGZsYWdLZXk6IHN0cmluZztcbiAgLyoqIFJlbmRlciB3aGVuIGZsYWcgaXMgdHJ1dGh5IChvciBtYXRjaGVzIGBtYXRjaGAgdmFsdWUpICovXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIC8qKiBPcHRpb25hbCBmYWxsYmFjayB3aGVuIGZsYWcgaXMgZmFsc3kgKi9cbiAgZmFsbGJhY2s/OiBSZWFjdE5vZGU7XG4gIC8qKiBPcHRpb25hbDogbWF0Y2ggYSBzcGVjaWZpYyB2YWx1ZSBpbnN0ZWFkIG9mIHRydXRoeSBjaGVjayAqL1xuICBtYXRjaD86IEZsYWdWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZlYXR1cmUoeyBmbGFnS2V5LCBjaGlsZHJlbiwgZmFsbGJhY2sgPSBudWxsLCBtYXRjaCB9OiBGZWF0dXJlUHJvcHMpIHtcbiAgY29uc3QgdmFsdWUgPSB1c2VGbGFnKGZsYWdLZXksIGZhbHNlKTtcbiAgY29uc3QgaXNNYXRjaCA9IG1hdGNoICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA9PT0gbWF0Y2ggOiBCb29sZWFuKHZhbHVlKTtcbiAgcmV0dXJuIDw+e2lzTWF0Y2ggPyBjaGlsZHJlbiA6IGZhbGxiYWNrfTwvPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEV4cGVyaW1lbnRSZXN1bHQgfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5pbXBvcnQgeyB1c2VFeHBlcmltZW50IH0gZnJvbSBcIi4uL2hvb2tzL3VzZS1leHBlcmltZW50LmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZXJpbWVudFByb3BzIHtcbiAgLyoqIFRoZSBleHBlcmltZW50IGtleSAqL1xuICBleHBlcmltZW50S2V5OiBzdHJpbmc7XG4gIC8qKiBNYXAgdmFyaWFudCBrZXkgLT4gUmVhY3ROb2RlIChzaW1wbGUgbW9kZSkuICovXG4gIHZhcmlhbnRzPzogUmVjb3JkPHN0cmluZywgUmVhY3ROb2RlPjtcbiAgLyoqIFJlbmRlciBwcm9wIGFsdGVybmF0aXZlIOKAlCByZWNlaXZlcyB7IHZhcmlhbnQsIHBheWxvYWQgfS4gKi9cbiAgY2hpbGRyZW4/OiAocmVzdWx0OiBFeHBlcmltZW50UmVzdWx0KSA9PiBSZWFjdE5vZGU7XG4gIC8qKiBGYWxsYmFjayBpZiBubyB2YXJpYW50IG1hdGNoZXMgKGRlZmF1bHRzIHRvIFwiY29udHJvbFwiIHZhcmlhbnQgb3IgbnVsbCkgKi9cbiAgZmFsbGJhY2s/OiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFeHBlcmltZW50KHsgZXhwZXJpbWVudEtleSwgdmFyaWFudHMsIGNoaWxkcmVuLCBmYWxsYmFjayB9OiBFeHBlcmltZW50UHJvcHMpIHtcbiAgY29uc3QgcmVzdWx0ID0gdXNlRXhwZXJpbWVudChleHBlcmltZW50S2V5KTtcblxuICAvLyBSZW5kZXIgcHJvcCBtb2RlIOKAlCBjb25zdW1lciBnZXRzIGZ1bGwgcGF5bG9hZCBhY2Nlc3NcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIDw+e2NoaWxkcmVuKHJlc3VsdCl9PC8+O1xuICB9XG5cbiAgLy8gVmFyaWFudCBtYXAgbW9kZVxuICBpZiAodmFyaWFudHMgJiYgcmVzdWx0LnZhcmlhbnQgaW4gdmFyaWFudHMpIHtcbiAgICByZXR1cm4gPD57dmFyaWFudHNbcmVzdWx0LnZhcmlhbnRdfTwvPjtcbiAgfVxuXG4gIHJldHVybiA8PntmYWxsYmFjayA/PyB2YXJpYW50cz8uW1wiY29udHJvbFwiXSA/PyBudWxsfTwvPjtcbn1cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VHb2FUZWNoIH0gZnJvbSBcIi4uL2hvb2tzL3VzZS1nb2F0ZWNoLmpzXCI7XG5pbXBvcnQgeyB1c2VUcmFjayB9IGZyb20gXCIuLi9ob29rcy91c2UtdHJhY2suanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQYWdlVmlld1RyYWNrZXJQcm9wcyB7XG4gIC8qKiBDdXJyZW50IHBhdGhuYW1lIOKAlCBwYXNzIGZyb20geW91ciByb3V0ZXIgKGUuZy4sIE5leHQuanMgdXNlUGF0aG5hbWUoKSkuICovXG4gIHBhdGhuYW1lOiBzdHJpbmc7XG4gIC8qKiBDdXJyZW50IHNlYXJjaCBwYXJhbXMgc3RyaW5nIChvcHRpb25hbCkuICovXG4gIHNlYXJjaFBhcmFtcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUcmFjayBwYWdlIHZpZXdzIG9uIHJvdXRlIGNoYW5nZS5cbiAqXG4gKiBFbWl0cyB0d28gZXZlbnRzIHBlciByb3V0ZSBjaGFuZ2U6XG4gKlxuICogICAtIGAkcGFnZV9sZWF2ZWAgZm9yIHRoZSBwcmlvciByb3V0ZSwgd2l0aCBgdGltZV9vbl9wYWdlX21zYCxcbiAqICAgICBgbWF4X3Njcm9sbF9wY3RgLCBgdGFiX2hpZGRlbl9jb3VudGAsIGV0Yy4gKGVtaXR0ZWQgYnlcbiAqICAgICBgY2xpZW50LnJlY29yZFBhZ2VWaWV3KClgIHZpYSB0aGUgU0RLJ3MgYExpZmVjeWNsZU1hbmFnZXJgKS5cbiAqICAgLSBgJHBhZ2Vfdmlld2AgZm9yIHRoZSBuZXcgcm91dGUuXG4gKlxuICogVGhlIG9yZGVyIG1hdHRlcnMg4oCUIGxlYXZlIGJlZm9yZSB2aWV3IOKAlCBzbyB0aGUgbGVhdmUgZXZlbnQgY2Fycmllc1xuICogdGhlIHByZXZpb3VzIHBhdGgsIGFuZCB0aGUgdmlldyBtYXJrcyB0aGUgc3RhcnQgb2YgdGhlIG5ldyBwYWdlJ3NcbiAqIGR3ZWxsIHdpbmRvdy4gQm90aCBldmVudHMgZW5kIHVwIGluIGBldmVudHNfcmF3YCBzbyBmdW5uZWxzIGNhblxuICogZmlsdGVyIGF0IGVpdGhlciBncmFpbi5cbiAqXG4gKiBVbmxpa2UgdGhlIHdlYi1hcHAgdmVyc2lvbiwgdGhpcyBjb21wb25lbnQgZG9lcyBOT1QgaW1wb3J0XG4gKiBgbmV4dC9uYXZpZ2F0aW9uYCBkaXJlY3RseSDigJQgdGhlIGNhbGxlciBwcm92aWRlcyBwYXRobmFtZSBhbmRcbiAqIHNlYXJjaFBhcmFtcyBzbyBpdCB3b3JrcyB3aXRoIGFueSByb3V0ZXIgKE5leHQuanMsIFJlYWN0IFJvdXRlcixcbiAqIFRhblN0YWNrIFJvdXRlciwgZXRjLikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQYWdlVmlld1RyYWNrZXIoeyBwYXRobmFtZSwgc2VhcmNoUGFyYW1zIH06IFBhZ2VWaWV3VHJhY2tlclByb3BzKSB7XG4gIGNvbnN0IGNsaWVudCA9IHVzZUdvYVRlY2goKTtcbiAgY29uc3QgdHJhY2sgPSB1c2VUcmFjaygpO1xuICBjb25zdCBsYXN0UGF0aFJlZiA9IHVzZVJlZjxzdHJpbmc+KFwiXCIpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBzZWFyY2hQYXJhbXMgPyBgJHtwYXRobmFtZX0/JHtzZWFyY2hQYXJhbXN9YCA6IHBhdGhuYW1lO1xuICAgIGlmIChmdWxsUGF0aCA9PT0gbGFzdFBhdGhSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGxhc3RQYXRoUmVmLmN1cnJlbnQgPSBmdWxsUGF0aDtcblxuICAgIC8vIFRlbGwgdGhlIFNESyBmaXJzdCBzbyBpdCBjYW4gZW1pdCBgJHBhZ2VfbGVhdmVgIGZvciB0aGUgcHJpb3JcbiAgICAvLyBwYXRoIChpZiBhbnkpIGJlZm9yZSB3ZSBzdGFtcCB0aGUgbmV3IGAkcGFnZV92aWV3YC5cbiAgICBjbGllbnQucmVjb3JkUGFnZVZpZXcoZnVsbFBhdGgpO1xuXG4gICAgdHJhY2soXCIkcGFnZV92aWV3XCIsIHtcbiAgICAgIHBhdGg6IHBhdGhuYW1lLFxuICAgICAgdXJsOiBmdWxsUGF0aCxcbiAgICAgIHJlZmVycmVyOiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5yZWZlcnJlciB8fCBudWxsIDogbnVsbCxcbiAgICAgIHRpdGxlOiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC50aXRsZSB8fCBudWxsIDogbnVsbCxcbiAgICB9KTtcbiAgfSwgW3BhdGhuYW1lLCBzZWFyY2hQYXJhbXMsIGNsaWVudCwgdHJhY2tdKTtcblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgdHlwZSBFcnJvckluZm8sIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IElHb2FUZWNoIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHsgR29hVGVjaENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dC5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQm91bmRhcnlQcm9wcyB7XG4gIC8qKlxuICAgKiBSZW5kZXJlZCB3aGVuIGEgZGVzY2VuZGFudCByZW5kZXIgdGhyb3dzLiBSZWNlaXZlcyB0aGUgZXJyb3IgYW5kIGFcbiAgICogYHJlc2V0KClgIGZ1bmN0aW9uIHRvIGNsZWFyIHRoZSBib3VuZGFyeSBzdGF0ZS4gSWYgb21pdHRlZCwgY2hpbGRyZW5cbiAgICogYXJlIGhpZGRlbiBhZnRlciBhIGNyYXNoIChudWxsIGZhbGxiYWNrKS5cbiAgICovXG4gIGZhbGxiYWNrPzogUmVhY3ROb2RlIHwgKChzdGF0ZTogeyBlcnJvcjogRXJyb3I7IHJlc2V0OiAoKSA9PiB2b2lkIH0pID0+IFJlYWN0Tm9kZSk7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgY2FwdHVyZWQgZXJyb3IgQUZURVIgaXQgaGFzIGJlZW4gZm9yd2FyZGVkIHRvIEdvYVRlY2guXG4gICAqIFVzZWZ1bCBmb3Igc3VyZmFjaW5nIGEgdG9hc3Qgb3IgZm9yd2FyZGluZyB0byBhbm90aGVyIHRlbGVtZXRyeSBzeXN0ZW0uXG4gICAqL1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgaW5mbzogRXJyb3JJbmZvKSA9PiB2b2lkO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuXG5pbnRlcmZhY2UgU3RhdGUge1xuICBlcnJvcjogRXJyb3IgfCBudWxsO1xufVxuXG4vKipcbiAqIFJlYWN0IEVycm9yQm91bmRhcnkgdGhhdCBmb3J3YXJkcyByZW5kZXItdGltZSBjcmFzaGVzIHRvIEdvYVRlY2ggYXNcbiAqIGAkZXJyb3JgIGV2ZW50cy4gVXNlIGl0IHRvIHdyYXAgYW55IHN1Yi10cmVlIHdob3NlIGNyYXNoZXMgd291bGRcbiAqIG90aGVyd2lzZSBwcm9kdWNlIGEgYmxhbmsgcGFnZSAob3IgdGhlIE5leHQuanMgcm9vdCBlcnJvciBzY3JlZW4pLlxuICpcbiAqICAgPEdvYVRlY2hQcm92aWRlciAuLi4+XG4gKiAgICAgPEVycm9yQm91bmRhcnkgZmFsbGJhY2s9ezxGYXRhbEVycm9yIC8+fT5cbiAqICAgICAgIDxBcHAgLz5cbiAqICAgICA8L0Vycm9yQm91bmRhcnk+XG4gKiAgIDwvR29hVGVjaFByb3ZpZGVyPlxuICpcbiAqIFJlYWNoZXMgdGhlIEdvYVRlY2ggY2xpZW50IHZpYSBjb250ZXh0IHNvIG5vIGV4cGxpY2l0IHdpcmluZyBpcyBuZWVkZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFcnJvckJvdW5kYXJ5IGV4dGVuZHMgQ29tcG9uZW50PEVycm9yQm91bmRhcnlQcm9wcywgU3RhdGU+IHtcbiAgc3RhdGljIGNvbnRleHRUeXBlID0gR29hVGVjaENvbnRleHQ7XG4gIGRlY2xhcmUgY29udGV4dDogSUdvYVRlY2g7XG5cbiAgc3RhdGU6IFN0YXRlID0geyBlcnJvcjogbnVsbCB9O1xuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3I6IEVycm9yKTogU3RhdGUge1xuICAgIHJldHVybiB7IGVycm9yIH07XG4gIH1cblxuICBjb21wb25lbnREaWRDYXRjaChlcnJvcjogRXJyb3IsIGluZm86IEVycm9ySW5mbyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbnRleHQudHJhY2soXCIkZXJyb3JcIiwge1xuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2sgPyBlcnJvci5zdGFjay5zbGljZSgwLCA0MDk2KSA6IG51bGwsXG4gICAgICAgIGNvbXBvbmVudF9zdGFjazogaW5mby5jb21wb25lbnRTdGFjayA/IGluZm8uY29tcG9uZW50U3RhY2suc2xpY2UoMCwgNDA5NikgOiBudWxsLFxuICAgICAgICB0eXBlOiBcInJlYWN0X2JvdW5kYXJ5XCIsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5ldmVyIGxldCB0ZWxlbWV0cnkgYnJlYWsgdGhlIGZhbGxiYWNrIHJlbmRlci5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvcHMub25FcnJvcj8uKGVycm9yLCBpbmZvKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFVzZXIgY2FsbGJhY2sgaXMgdW50cnVzdGVkLlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzZXQgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yOiBudWxsIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpOiBSZWFjdE5vZGUge1xuICAgIGNvbnN0IHsgZXJyb3IgfSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKCFlcnJvcikgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG5cbiAgICBjb25zdCB7IGZhbGxiYWNrIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICh0eXBlb2YgZmFsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrKHsgZXJyb3IsIHJlc2V0OiB0aGlzLnJlc2V0IH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsbGJhY2sgPz8gbnVsbDtcbiAgfVxufVxuIl19
1
+ 'use strict';
2
+
3
+ var react = require('@sheepit-ai/react');
4
+
5
+ // src/index.ts
6
+ var globals = globalThis;
7
+ if (!globals.__goatech_react_warned__) {
8
+ globals.__goatech_react_warned__ = true;
9
+ console.warn(
10
+ "@goatech/react is deprecated; rename your import to @sheepit-ai/react before 2026-11-26. See https://www.goatech.ai/docs/migrate-to-sheepit"
11
+ );
12
+ }
13
+
14
+ Object.keys(react).forEach(function (k) {
15
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
16
+ enumerable: true,
17
+ get: function () { return react[k]; }
18
+ });
19
+ });
package/dist/index.mjs CHANGED
@@ -1,2 +1,10 @@
1
- import {b,a}from'./chunk-OKZIRDLB.mjs';export{a as noopClient}from'./chunk-OKZIRDLB.mjs';import {Component,useRef,useState,useEffect,useContext,useCallback}from'react';import {GoaTech}from'@goatech/sdk-js';import {jsx,Fragment}from'react/jsx-runtime';function P({config:o,user:r,children:e}){let t=useRef(null),[n,a$1]=useState(a),u=useRef(null);useEffect(()=>{if(!t.current&&!(typeof window>"u"))try{let c=GoaTech.create(o);return t.current=c,a$1(c),()=>{c.destroy(),t.current=null;}}catch(c){typeof window<"u"&&console.warn("[GoaTech] SDK init failed \u2014 events, flags, and experiments are disabled.",c instanceof Error?c.message:c);}},[]);let s=r?.id??null;return useEffect(()=>{let c=t.current;c&&(s&&u.current!==s?(c.identify(s,r?.traits),u.current=s):!s&&u.current!==null&&(c.reset(),u.current=null));},[s,r?.traits]),jsx(b.Provider,{value:n,children:e})}function i(){return useContext(b)}function m(){let o=i();return useCallback((r,e)=>{o.track(r,e);},[o])}function d(o,r=false){return i().flag(o,r)}function x(o){return i().experiment(o)}function w({flagKey:o,children:r,fallback:e=null,match:t}){let n=d(o,false);return jsx(Fragment,{children:(t!==void 0?n===t:!!n)?r:e})}function N({experimentKey:o,variants:r,children:e,fallback:t}){let n=x(o);return e?jsx(Fragment,{children:e(n)}):r&&n.variant in r?jsx(Fragment,{children:r[n.variant]}):jsx(Fragment,{children:t??r?.control??null})}function S({pathname:o,searchParams:r}){let e=i(),t=m(),n=useRef("");return useEffect(()=>{let a=r?`${o}?${r}`:o;a!==n.current&&(n.current=a,e.recordPageView(a),t("$page_view",{path:o,url:a,referrer:typeof document<"u"&&document.referrer||null,title:typeof document<"u"&&document.title||null}));},[o,r,e,t]),null}var l=class extends Component{constructor(){super(...arguments);this.state={error:null};this.reset=()=>{this.setState({error:null});};}static getDerivedStateFromError(e){return {error:e}}componentDidCatch(e,t){try{this.context.track("$error",{message:e.message,stack:e.stack?e.stack.slice(0,4096):null,component_stack:t.componentStack?t.componentStack.slice(0,4096):null,type:"react_boundary"});}catch{}try{this.props.onError?.(e,t);}catch{}}render(){let{error:e}=this.state;if(!e)return this.props.children;let{fallback:t}=this.props;return typeof t=="function"?t({error:e,reset:this.reset}):t??null}};l.contextType=b;export{l as ErrorBoundary,N as Experiment,w as Feature,P as GoaTechProvider,S as PageViewTracker,x as useExperiment,d as useFlag,i as useGoaTech,m as useTrack};//# sourceMappingURL=index.mjs.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92aWRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlLWdvYXRlY2gudHMiLCIuLi9zcmMvaG9va3MvdXNlLXRyYWNrLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS1mbGFnLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS1leHBlcmltZW50LnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZmVhdHVyZS50c3giLCIuLi9zcmMvY29tcG9uZW50cy9leHBlcmltZW50LnRzeCIsIi4uL3NyYy9jb21wb25lbnRzL3BhZ2Utdmlldy10cmFja2VyLnRzeCIsIi4uL3NyYy9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5LnRzeCJdLCJuYW1lcyI6WyJHb2FUZWNoUHJvdmlkZXIiLCJjb25maWciLCJ1c2VyIiwiY2hpbGRyZW4iLCJjbGllbnRSZWYiLCJ1c2VSZWYiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJ1c2VTdGF0ZSIsIm5vb3BDbGllbnQiLCJpZGVudGlmaWVkUmVmIiwidXNlRWZmZWN0IiwiR29hVGVjaCIsImVyciIsInVzZXJJZCIsImpzeCIsIkdvYVRlY2hDb250ZXh0IiwidXNlR29hVGVjaCIsInVzZUNvbnRleHQiLCJ1c2VUcmFjayIsInVzZUNhbGxiYWNrIiwiZXZlbnROYW1lIiwicHJvcGVydGllcyIsInVzZUZsYWciLCJmbGFnS2V5IiwiZGVmYXVsdFZhbHVlIiwidXNlRXhwZXJpbWVudCIsImV4cGVyaW1lbnRLZXkiLCJGZWF0dXJlIiwiZmFsbGJhY2siLCJtYXRjaCIsInZhbHVlIiwiRnJhZ21lbnQiLCJFeHBlcmltZW50IiwidmFyaWFudHMiLCJyZXN1bHQiLCJQYWdlVmlld1RyYWNrZXIiLCJwYXRobmFtZSIsInNlYXJjaFBhcmFtcyIsInRyYWNrIiwibGFzdFBhdGhSZWYiLCJmdWxsUGF0aCIsIkVycm9yQm91bmRhcnkiLCJDb21wb25lbnQiLCJlcnJvciIsImluZm8iXSwibWFwcGluZ3MiOiIyUEFhTyxTQUFTQSxDQUFBQSxDQUFnQixDQUFFLE1BQUEs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QUFVLENBQzNCLE9BQUEsQ0FBU0QsQ0FBQUEsQ0FBTSxPQUFBLENBQ2YsS0FBQSxDQUFPQSxDQUFBQSxDQUFNLEtBQUEsQ0FBUUEsQ0FBQUEsQ0FBTSxLQUFBLENBQU0sS0FBQSxDQUFNLENBQUEsQ0FBRyxJQUFJLENBQUEsQ0FBSSxJQUFBLENBQ2xELGVBQUEsQ0FBaUJDLENBQUFBLENBQUssY0FBQSxDQUFpQkEsRUFBSyxjQUFBLENBQWUsS0FBQSxDQUFNLENBQUEsQ0FBRyxJQUFJLENBQUEsQ0FBSSxJQUFBLENBQzVFLElBQUEsQ0FBTSxnQkFDUixDQUFDLEVBQ0gsQ0FBQSxLQUFRLENBRVIsQ0FDQSxHQUFJLENBQ0YsSUFBQSxDQUFLLEtBQUEsQ0FBTSxPQUFBLEdBQVVELENBQUFBLENBQU9DLENBQUksRUFDbEMsQ0FBQSxLQUFRLENBRVIsQ0FDRixDQU1BLE1BQUEsRUFBb0IsQ0FDbEIsR0FBTSxDQUFFLEtBQUEsQ0FBQUQsQ0FBTSxDQUFBLENBQUksS0FBSyxLQUFBLENBQ3ZCLEdBQUksQ0FBQ0EsQ0FBQUEsQ0FBTyxPQUFPLElBQUEsQ0FBSyxLQUFBLENBQU0sUUFBQSxDQUU5QixHQUFNLENBQUUsUUFBQSxDQUFBZixDQUFTLENBQUEsQ0FBSSxJQUFBLENBQUssS0FBQSxDQUMxQixPQUFJLE9BQU9BLENBQUFBLEVBQWEsVUFBQSxDQUNmQSxDQUFBQSxDQUFTLENBQUUsS0FBQSxDQUFBZSxDQUFBQSxDQUFPLEtBQUEsQ0FBTyxJQUFBLENBQUssS0FBTSxDQUFDLENBQUEsQ0FFdkNmLENBQUFBLEVBQVksSUFDckIsQ0FDRixFQTFDYWEsRUFDSixXQUFBLENBQWMxQixDQUFBQSIsImZpbGUiOiJpbmRleC5tanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBHb2FUZWNoLCB0eXBlIEdvYVRlY2hDb25maWcsIHR5cGUgSUdvYVRlY2ggfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5pbXBvcnQgeyBHb2FUZWNoQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQuanNcIjtcbmltcG9ydCB7IG5vb3BDbGllbnQgfSBmcm9tIFwiLi9ub29wLWNsaWVudC5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdvYVRlY2hQcm92aWRlclByb3BzIHtcbiAgLyoqIFNESyBjb25maWd1cmF0aW9uLiBQcm92aWRlciBjYWxscyBHb2FUZWNoLmNyZWF0ZSgpIGludGVybmFsbHkuICovXG4gIGNvbmZpZzogR29hVGVjaENvbmZpZztcbiAgLyoqIEN1cnJlbnQgdXNlciBmb3IgYXV0b21hdGljIGlkZW50aXR5IHN5bmMuIFBhc3MgbnVsbCB3aGVuIGxvZ2dlZCBvdXQuICovXG4gIHVzZXI/OiB7IGlkOiBzdHJpbmc7IHRyYWl0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0gfCBudWxsO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR29hVGVjaFByb3ZpZGVyKHsgY29uZmlnLCB1c2VyLCBjaGlsZHJlbiB9OiBHb2FUZWNoUHJvdmlkZXJQcm9wcykge1xuICBjb25zdCBjbGllbnRSZWYgPSB1c2VSZWY8SUdvYVRlY2ggfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2NsaWVudCwgc2V0Q2xpZW50XSA9IHVzZVN0YXRlPElHb2FUZWNoPihub29wQ2xpZW50KTtcbiAgY29uc3QgaWRlbnRpZmllZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBDcmVhdGUgY2xpZW50IG9uY2Ugb24gbW91bnQg4oCUIGdyYWNlZnVsbHkgZmFsbCBiYWNrIHRvIG5vb3AgaWYgY29uZmlnIGlzIGludmFsaWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50UmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjID0gR29hVGVjaC5jcmVhdGUoY29uZmlnKTtcbiAgICAgIGNsaWVudFJlZi5jdXJyZW50ID0gYztcbiAgICAgIHNldENsaWVudChjKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGMuZGVzdHJveSgpO1xuICAgICAgICBjbGllbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gSW52YWxpZCBjb25maWcgKGUuZy4sIG1pc3NpbmcgQVBJIGtleSkg4oCUIHN0YXkgb24gbm9vcCBjbGllbnQuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBhcHAgZnJvbSBjcmFzaGluZyB3aGVuIE5FWFRfUFVCTElDX0dUX1NES19BUElfS0VZIGlzIG5vdCBzZXQuXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJbR29hVGVjaF0gU0RLIGluaXQgZmFpbGVkIOKAlCBldmVudHMsIGZsYWdzLCBhbmQgZXhwZXJpbWVudHMgYXJlIGRpc2FibGVkLlwiLFxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgLy8gU3luYyBpZGVudGl0eSB3aGVuIHVzZXIgY2hhbmdlc1xuICBjb25zdCB1c2VySWQgPSB1c2VyPy5pZCA/PyBudWxsO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGMgPSBjbGllbnRSZWYuY3VycmVudDtcbiAgICBpZiAoIWMpIHJldHVybjtcbiAgICBpZiAodXNlcklkICYmIGlkZW50aWZpZWRSZWYuY3VycmVudCAhPT0gdXNlcklkKSB7XG4gICAgICBjLmlkZW50aWZ5KHVzZXJJZCwgdXNlcj8udHJhaXRzKTtcbiAgICAgIGlkZW50aWZpZWRSZWYuY3VycmVudCA9IHVzZXJJZDtcbiAgICB9IGVsc2UgaWYgKCF1c2VySWQgJiYgaWRlbnRpZmllZFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjLnJlc2V0KCk7XG4gICAgICBpZGVudGlmaWVkUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW3VzZXJJZCwgdXNlcj8udHJhaXRzXSk7XG5cbiAgcmV0dXJuIDxHb2FUZWNoQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y2xpZW50fT57Y2hpbGRyZW59PC9Hb2FUZWNoQ29udGV4dC5Qcm92aWRlcj47XG59XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IElHb2FUZWNoIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHsgR29hVGVjaENvbnRleHQgfSBmcm9tIFwiLi4vY29udGV4dC5qc1wiO1xuXG4vKipcbiAqIEFjY2VzcyB0aGUgdW5kZXJseWluZyBgR29hVGVjaGAgY2xpZW50IGZyb20gY29udGV4dC4gVXNlIHRoaXMgZm9yXG4gKiBpZGVudGl0eSBjb250cm9scyAoYGlkZW50aWZ5YCwgYHJlc2V0YCkg4oCUIGZvciBmbGFnIC8gZXhwZXJpbWVudCAvXG4gKiB0cmFjayBjYWxscyBwcmVmZXIgdGhlIGRlZGljYXRlZCBob29rcyAoYHVzZUZsYWdgLCBgdXNlRXhwZXJpbWVudGAsXG4gKiBgdXNlVHJhY2tgKSB3aGljaCBnaXZlIHlvdSBzdGFibGUgcmVmZXJlbmNlcyBhbmQgdHJpZ2dlciByZS1yZW5kZXJzXG4gKiBvbiBjb25maWcgcmVmcmVzaC5cbiAqXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gTG9naW5Gb3JtKCkge1xuICogICBjb25zdCBndCA9IHVzZUdvYVRlY2goKTtcbiAqICAgYXN5bmMgZnVuY3Rpb24gb25Mb2dpbih1c2VyKSB7XG4gKiAgICAgYXdhaXQgYXBpLmxvZ2luKHVzZXIpO1xuICogICAgIGd0LmlkZW50aWZ5KHVzZXIuaWQsIHsgZW1haWw6IHVzZXIuZW1haWwgfSk7XG4gKiAgIH1cbiAqICAgLy8g4oCmXG4gKiB9XG4gKlxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIExvZ291dEJ1dHRvbigpIHtcbiAqICAgY29uc3QgZ3QgPSB1c2VHb2FUZWNoKCk7XG4gKiAgIHJldHVybiA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IGd0LnJlc2V0KCl9PkxvZyBvdXQ8L2J1dHRvbj47XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VHb2FUZWNoKCk6IElHb2FUZWNoIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoR29hVGVjaENvbnRleHQpO1xufVxuIiwiaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUdvYVRlY2ggfSBmcm9tIFwiLi91c2UtZ29hdGVjaC5qc1wiO1xuXG4vKipcbiAqIFJldHVybnMgYSBzdGFibGUgYHRyYWNrKGV2ZW50TmFtZSwgcHJvcGVydGllcz8pYCBmdW5jdGlvbiBib3VuZCB0b1xuICogdGhlIGN1cnJlbnQgR29hVGVjaCBjbGllbnQuIFRoZSByZWZlcmVuY2UgaXMgc3RhYmxlIGFjcm9zcyByZW5kZXJzLFxuICogc28gaXQncyBzYWZlIHRvIHBhc3MgaW50byBgdXNlRWZmZWN0YCBkZXBzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBDaGVja291dEJ1dHRvbih7IGNvdXJzZUlkIH06IHsgY291cnNlSWQ6IHN0cmluZyB9KSB7XG4gKiAgIGNvbnN0IHRyYWNrID0gdXNlVHJhY2soKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHRyYWNrKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7IGNvdXJzZV9pZDogY291cnNlSWQgfSl9PlxuICogICAgICAgQnV5XG4gKiAgICAgPC9idXR0b24+XG4gKiAgICk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUcmFjaygpIHtcbiAgY29uc3QgY2xpZW50ID0gdXNlR29hVGVjaCgpO1xuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGNsaWVudC50cmFjayhldmVudE5hbWUsIHByb3BlcnRpZXMpO1xuICAgIH0sXG4gICAgW2NsaWVudF0sXG4gICk7XG59XG4iLCJpbXBvcnQgdHlwZSB7IEZsYWdWYWx1ZSB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB7IHVzZUdvYVRlY2ggfSBmcm9tIFwiLi91c2UtZ29hdGVjaC5qc1wiO1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgZmVhdHVyZSBmbGFnLiBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZSAoc2VydmVyLXNpZGVcbiAqIHRhcmdldGluZyArIHJvbGxvdXQgbWF0aCkgb3IgYGRlZmF1bHRWYWx1ZWAgd2hpbGUgdGhlIFNESyBjb25maWcgaXNcbiAqIHN0aWxsIGxvYWRpbmcuIEZpcmVzIGAkZmxhZ19leHBvc3VyZWAgb25jZSBwZXIgc2Vzc2lvbiBwZXIgZmxhZy5cbiAqXG4gKiBAcGFyYW0gZmxhZ0tleSAtIEZsYWcga2V5IGRlY2xhcmVkIGluIHRoZSBHb2FUZWNoIGRhc2hib2FyZC5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBSZXR1cm5lZCB3aGVuIHRoZSBTREsgaGFzIG5vIGFuc3dlciB5ZXQuXG4gKiAgIERlZmF1bHRzIHRvIGBmYWxzZWAgdG8gbWF0Y2ggdGhlIHR5cGljYWwgYm9vbGVhbi1mbGFnIHVzZSBjYXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBDaGVja291dEJ1dHRvbigpIHtcbiAqICAgY29uc3QgbmV3RmxvdyA9IHVzZUZsYWcoXCJuZXdfY2hlY2tvdXRfZmxvd1wiLCBmYWxzZSk7XG4gKiAgIHJldHVybiBuZXdGbG93ID8gPE5ld0NoZWNrb3V0IC8+IDogPExlZ2FjeUNoZWNrb3V0IC8+O1xuICogfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBNdWx0aS12YWx1ZSBmbGFnIOKAlCBwYXNzIGEgbWF0Y2hpbmcgZGVmYXVsdFxuICogY29uc3QgdmFyaWFudCA9IHVzZUZsYWc8XCJjb250cm9sXCIgfCBcImJvbGRcIj4oXCJjdGFfY29weV92MVwiLCBcImNvbnRyb2xcIik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGbGFnKGZsYWdLZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBGbGFnVmFsdWUgPSBmYWxzZSk6IEZsYWdWYWx1ZSB7XG4gIGNvbnN0IGNsaWVudCA9IHVzZUdvYVRlY2goKTtcbiAgcmV0dXJuIGNsaWVudC5mbGFnKGZsYWdLZXksIGRlZmF1bHRWYWx1ZSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7IEV4cGVyaW1lbnRSZXN1bHQgfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5pbXBvcnQgeyB1c2VHb2FUZWNoIH0gZnJvbSBcIi4vdXNlLWdvYXRlY2guanNcIjtcblxuLyoqXG4gKiBHZXQgdGhlIGJ1Y2tldGVkIHZhcmlhbnQgKyBwYXlsb2FkIGZvciBhbiBleHBlcmltZW50LiBBc3NpZ25tZW50IGlzXG4gKiBzdGlja3kgcGVyIGRldmljZS4gRmlyZXMgYCRleHBvc3VyZWAgb25jZSBwZXIgc2Vzc2lvbiBwZXIgZXhwZXJpbWVudFxuICogdGhlIGZpcnN0IHRpbWUgaXQgcmVzb2x2ZXMgdG8gYSBub24tY29udHJvbCB2YXJpYW50LlxuICpcbiAqIEBwYXJhbSBleHBlcmltZW50S2V5IC0gRXhwZXJpbWVudCBrZXkgZGVjbGFyZWQgaW4gdGhlIEdvYVRlY2ggZGFzaGJvYXJkLlxuICogQHJldHVybnMgYHsgdmFyaWFudDogc3RyaW5nLCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9YC5cbiAqICAgYHZhcmlhbnRgIGZhbGxzIGJhY2sgdG8gYFwiY29udHJvbFwiYCB1bnRpbCB0aGUgU0RLIGNvbmZpZyBsb2Fkcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gSGVyb0gxKCkge1xuICogICBjb25zdCB7IHZhcmlhbnQsIHBheWxvYWQgfSA9IHVzZUV4cGVyaW1lbnQoXCJoZXJvX2gxX2NvcHlfdjFcIik7XG4gKiAgIGlmICh2YXJpYW50ID09PSBcImNvbnRyb2xcIikgcmV0dXJuIDxoMT5TaGlwIGZhc3Rlci48L2gxPjtcbiAqICAgcmV0dXJuIDxoMT57KHBheWxvYWQgYXMgeyBoZWFkbGluZTogc3RyaW5nIH0pLmhlYWRsaW5lfTwvaDE+O1xuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRXhwZXJpbWVudChleHBlcmltZW50S2V5OiBzdHJpbmcpOiBFeHBlcmltZW50UmVzdWx0IHtcbiAgY29uc3QgY2xpZW50ID0gdXNlR29hVGVjaCgpO1xuICByZXR1cm4gY2xpZW50LmV4cGVyaW1lbnQoZXhwZXJpbWVudEtleSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBGbGFnVmFsdWUgfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5pbXBvcnQgeyB1c2VGbGFnIH0gZnJvbSBcIi4uL2hvb2tzL3VzZS1mbGFnLmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZVByb3BzIHtcbiAgLyoqIFRoZSBmbGFnIGtleSB0byBldmFsdWF0ZSAqL1xuICBmbGFnS2V5OiBzdHJpbmc7XG4gIC8qKiBSZW5kZXIgd2hlbiBmbGFnIGlzIHRydXRoeSAob3IgbWF0Y2hlcyBgbWF0Y2hgIHZhbHVlKSAqL1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAvKiogT3B0aW9uYWwgZmFsbGJhY2sgd2hlbiBmbGFnIGlzIGZhbHN5ICovXG4gIGZhbGxiYWNrPzogUmVhY3ROb2RlO1xuICAvKiogT3B0aW9uYWw6IG1hdGNoIGEgc3BlY2lmaWMgdmFsdWUgaW5zdGVhZCBvZiB0cnV0aHkgY2hlY2sgKi9cbiAgbWF0Y2g/OiBGbGFnVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGZWF0dXJlKHsgZmxhZ0tleSwgY2hpbGRyZW4sIGZhbGxiYWNrID0gbnVsbCwgbWF0Y2ggfTogRmVhdHVyZVByb3BzKSB7XG4gIGNvbnN0IHZhbHVlID0gdXNlRmxhZyhmbGFnS2V5LCBmYWxzZSk7XG4gIGNvbnN0IGlzTWF0Y2ggPSBtYXRjaCAhPT0gdW5kZWZpbmVkID8gdmFsdWUgPT09IG1hdGNoIDogQm9vbGVhbih2YWx1ZSk7XG4gIHJldHVybiA8Pntpc01hdGNoID8gY2hpbGRyZW4gOiBmYWxsYmFja308Lz47XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBFeHBlcmltZW50UmVzdWx0IH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHsgdXNlRXhwZXJpbWVudCB9IGZyb20gXCIuLi9ob29rcy91c2UtZXhwZXJpbWVudC5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRQcm9wcyB7XG4gIC8qKiBUaGUgZXhwZXJpbWVudCBrZXkgKi9cbiAgZXhwZXJpbWVudEtleTogc3RyaW5nO1xuICAvKiogTWFwIHZhcmlhbnQga2V5IC0+IFJlYWN0Tm9kZSAoc2ltcGxlIG1vZGUpLiAqL1xuICB2YXJpYW50cz86IFJlY29yZDxzdHJpbmcsIFJlYWN0Tm9kZT47XG4gIC8qKiBSZW5kZXIgcHJvcCBhbHRlcm5hdGl2ZSDigJQgcmVjZWl2ZXMgeyB2YXJpYW50LCBwYXlsb2FkIH0uICovXG4gIGNoaWxkcmVuPzogKHJlc3VsdDogRXhwZXJpbWVudFJlc3VsdCkgPT4gUmVhY3ROb2RlO1xuICAvKiogRmFsbGJhY2sgaWYgbm8gdmFyaWFudCBtYXRjaGVzIChkZWZhdWx0cyB0byBcImNvbnRyb2xcIiB2YXJpYW50IG9yIG51bGwpICovXG4gIGZhbGxiYWNrPzogUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhwZXJpbWVudCh7IGV4cGVyaW1lbnRLZXksIHZhcmlhbnRzLCBjaGlsZHJlbiwgZmFsbGJhY2sgfTogRXhwZXJpbWVudFByb3BzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHVzZUV4cGVyaW1lbnQoZXhwZXJpbWVudEtleSk7XG5cbiAgLy8gUmVuZGVyIHByb3AgbW9kZSDigJQgY29uc3VtZXIgZ2V0cyBmdWxsIHBheWxvYWQgYWNjZXNzXG4gIGlmIChjaGlsZHJlbikge1xuICAgIHJldHVybiA8PntjaGlsZHJlbihyZXN1bHQpfTwvPjtcbiAgfVxuXG4gIC8vIFZhcmlhbnQgbWFwIG1vZGVcbiAgaWYgKHZhcmlhbnRzICYmIHJlc3VsdC52YXJpYW50IGluIHZhcmlhbnRzKSB7XG4gICAgcmV0dXJuIDw+e3ZhcmlhbnRzW3Jlc3VsdC52YXJpYW50XX08Lz47XG4gIH1cblxuICByZXR1cm4gPD57ZmFsbGJhY2sgPz8gdmFyaWFudHM/LltcImNvbnRyb2xcIl0gPz8gbnVsbH08Lz47XG59XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlR29hVGVjaCB9IGZyb20gXCIuLi9ob29rcy91c2UtZ29hdGVjaC5qc1wiO1xuaW1wb3J0IHsgdXNlVHJhY2sgfSBmcm9tIFwiLi4vaG9va3MvdXNlLXRyYWNrLmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVZpZXdUcmFja2VyUHJvcHMge1xuICAvKiogQ3VycmVudCBwYXRobmFtZSDigJQgcGFzcyBmcm9tIHlvdXIgcm91dGVyIChlLmcuLCBOZXh0LmpzIHVzZVBhdGhuYW1lKCkpLiAqL1xuICBwYXRobmFtZTogc3RyaW5nO1xuICAvKiogQ3VycmVudCBzZWFyY2ggcGFyYW1zIHN0cmluZyAob3B0aW9uYWwpLiAqL1xuICBzZWFyY2hQYXJhbXM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHJhY2sgcGFnZSB2aWV3cyBvbiByb3V0ZSBjaGFuZ2UuXG4gKlxuICogRW1pdHMgdHdvIGV2ZW50cyBwZXIgcm91dGUgY2hhbmdlOlxuICpcbiAqICAgLSBgJHBhZ2VfbGVhdmVgIGZvciB0aGUgcHJpb3Igcm91dGUsIHdpdGggYHRpbWVfb25fcGFnZV9tc2AsXG4gKiAgICAgYG1heF9zY3JvbGxfcGN0YCwgYHRhYl9oaWRkZW5fY291bnRgLCBldGMuIChlbWl0dGVkIGJ5XG4gKiAgICAgYGNsaWVudC5yZWNvcmRQYWdlVmlldygpYCB2aWEgdGhlIFNESydzIGBMaWZlY3ljbGVNYW5hZ2VyYCkuXG4gKiAgIC0gYCRwYWdlX3ZpZXdgIGZvciB0aGUgbmV3IHJvdXRlLlxuICpcbiAqIFRoZSBvcmRlciBtYXR0ZXJzIOKAlCBsZWF2ZSBiZWZvcmUgdmlldyDigJQgc28gdGhlIGxlYXZlIGV2ZW50IGNhcnJpZXNcbiAqIHRoZSBwcmV2aW91cyBwYXRoLCBhbmQgdGhlIHZpZXcgbWFya3MgdGhlIHN0YXJ0IG9mIHRoZSBuZXcgcGFnZSdzXG4gKiBkd2VsbCB3aW5kb3cuIEJvdGggZXZlbnRzIGVuZCB1cCBpbiBgZXZlbnRzX3Jhd2Agc28gZnVubmVscyBjYW5cbiAqIGZpbHRlciBhdCBlaXRoZXIgZ3JhaW4uXG4gKlxuICogVW5saWtlIHRoZSB3ZWItYXBwIHZlcnNpb24sIHRoaXMgY29tcG9uZW50IGRvZXMgTk9UIGltcG9ydFxuICogYG5leHQvbmF2aWdhdGlvbmAgZGlyZWN0bHkg4oCUIHRoZSBjYWxsZXIgcHJvdmlkZXMgcGF0aG5hbWUgYW5kXG4gKiBzZWFyY2hQYXJhbXMgc28gaXQgd29ya3Mgd2l0aCBhbnkgcm91dGVyIChOZXh0LmpzLCBSZWFjdCBSb3V0ZXIsXG4gKiBUYW5TdGFjayBSb3V0ZXIsIGV0Yy4pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUGFnZVZpZXdUcmFja2VyKHsgcGF0aG5hbWUsIHNlYXJjaFBhcmFtcyB9OiBQYWdlVmlld1RyYWNrZXJQcm9wcykge1xuICBjb25zdCBjbGllbnQgPSB1c2VHb2FUZWNoKCk7XG4gIGNvbnN0IHRyYWNrID0gdXNlVHJhY2soKTtcbiAgY29uc3QgbGFzdFBhdGhSZWYgPSB1c2VSZWY8c3RyaW5nPihcIlwiKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gc2VhcmNoUGFyYW1zID8gYCR7cGF0aG5hbWV9PyR7c2VhcmNoUGFyYW1zfWAgOiBwYXRobmFtZTtcbiAgICBpZiAoZnVsbFBhdGggPT09IGxhc3RQYXRoUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBsYXN0UGF0aFJlZi5jdXJyZW50ID0gZnVsbFBhdGg7XG5cbiAgICAvLyBUZWxsIHRoZSBTREsgZmlyc3Qgc28gaXQgY2FuIGVtaXQgYCRwYWdlX2xlYXZlYCBmb3IgdGhlIHByaW9yXG4gICAgLy8gcGF0aCAoaWYgYW55KSBiZWZvcmUgd2Ugc3RhbXAgdGhlIG5ldyBgJHBhZ2Vfdmlld2AuXG4gICAgY2xpZW50LnJlY29yZFBhZ2VWaWV3KGZ1bGxQYXRoKTtcblxuICAgIHRyYWNrKFwiJHBhZ2Vfdmlld1wiLCB7XG4gICAgICBwYXRoOiBwYXRobmFtZSxcbiAgICAgIHVybDogZnVsbFBhdGgsXG4gICAgICByZWZlcnJlcjogdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQucmVmZXJyZXIgfHwgbnVsbCA6IG51bGwsXG4gICAgICB0aXRsZTogdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQudGl0bGUgfHwgbnVsbCA6IG51bGwsXG4gICAgfSk7XG4gIH0sIFtwYXRobmFtZSwgc2VhcmNoUGFyYW1zLCBjbGllbnQsIHRyYWNrXSk7XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIHR5cGUgRXJyb3JJbmZvLCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBJR29hVGVjaCB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB7IEdvYVRlY2hDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFcnJvckJvdW5kYXJ5UHJvcHMge1xuICAvKipcbiAgICogUmVuZGVyZWQgd2hlbiBhIGRlc2NlbmRhbnQgcmVuZGVyIHRocm93cy4gUmVjZWl2ZXMgdGhlIGVycm9yIGFuZCBhXG4gICAqIGByZXNldCgpYCBmdW5jdGlvbiB0byBjbGVhciB0aGUgYm91bmRhcnkgc3RhdGUuIElmIG9taXR0ZWQsIGNoaWxkcmVuXG4gICAqIGFyZSBoaWRkZW4gYWZ0ZXIgYSBjcmFzaCAobnVsbCBmYWxsYmFjaykuXG4gICAqL1xuICBmYWxsYmFjaz86IFJlYWN0Tm9kZSB8ICgoc3RhdGU6IHsgZXJyb3I6IEVycm9yOyByZXNldDogKCkgPT4gdm9pZCB9KSA9PiBSZWFjdE5vZGUpO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGNhcHR1cmVkIGVycm9yIEFGVEVSIGl0IGhhcyBiZWVuIGZvcndhcmRlZCB0byBHb2FUZWNoLlxuICAgKiBVc2VmdWwgZm9yIHN1cmZhY2luZyBhIHRvYXN0IG9yIGZvcndhcmRpbmcgdG8gYW5vdGhlciB0ZWxlbWV0cnkgc3lzdGVtLlxuICAgKi9cbiAgb25FcnJvcj86IChlcnJvcjogRXJyb3IsIGluZm86IEVycm9ySW5mbykgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgZXJyb3I6IEVycm9yIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBSZWFjdCBFcnJvckJvdW5kYXJ5IHRoYXQgZm9yd2FyZHMgcmVuZGVyLXRpbWUgY3Jhc2hlcyB0byBHb2FUZWNoIGFzXG4gKiBgJGVycm9yYCBldmVudHMuIFVzZSBpdCB0byB3cmFwIGFueSBzdWItdHJlZSB3aG9zZSBjcmFzaGVzIHdvdWxkXG4gKiBvdGhlcndpc2UgcHJvZHVjZSBhIGJsYW5rIHBhZ2UgKG9yIHRoZSBOZXh0LmpzIHJvb3QgZXJyb3Igc2NyZWVuKS5cbiAqXG4gKiAgIDxHb2FUZWNoUHJvdmlkZXIgLi4uPlxuICogICAgIDxFcnJvckJvdW5kYXJ5IGZhbGxiYWNrPXs8RmF0YWxFcnJvciAvPn0+XG4gKiAgICAgICA8QXBwIC8+XG4gKiAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICogICA8L0dvYVRlY2hQcm92aWRlcj5cbiAqXG4gKiBSZWFjaGVzIHRoZSBHb2FUZWNoIGNsaWVudCB2aWEgY29udGV4dCBzbyBubyBleHBsaWNpdCB3aXJpbmcgaXMgbmVlZGVkLlxuICovXG5leHBvcnQgY2xhc3MgRXJyb3JCb3VuZGFyeSBleHRlbmRzIENvbXBvbmVudDxFcnJvckJvdW5kYXJ5UHJvcHMsIFN0YXRlPiB7XG4gIHN0YXRpYyBjb250ZXh0VHlwZSA9IEdvYVRlY2hDb250ZXh0O1xuICBkZWNsYXJlIGNvbnRleHQ6IElHb2FUZWNoO1xuXG4gIHN0YXRlOiBTdGF0ZSA9IHsgZXJyb3I6IG51bGwgfTtcblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yOiBFcnJvcik6IFN0YXRlIHtcbiAgICByZXR1cm4geyBlcnJvciB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goZXJyb3I6IEVycm9yLCBpbmZvOiBFcnJvckluZm8pOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jb250ZXh0LnRyYWNrKFwiJGVycm9yXCIsIHtcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrID8gZXJyb3Iuc3RhY2suc2xpY2UoMCwgNDA5NikgOiBudWxsLFxuICAgICAgICBjb21wb25lbnRfc3RhY2s6IGluZm8uY29tcG9uZW50U3RhY2sgPyBpbmZvLmNvbXBvbmVudFN0YWNrLnNsaWNlKDAsIDQwOTYpIDogbnVsbCxcbiAgICAgICAgdHlwZTogXCJyZWFjdF9ib3VuZGFyeVwiLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBOZXZlciBsZXQgdGVsZW1ldHJ5IGJyZWFrIHRoZSBmYWxsYmFjayByZW5kZXIuXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb3BzLm9uRXJyb3I/LihlcnJvciwgaW5mbyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBVc2VyIGNhbGxiYWNrIGlzIHVudHJ1c3RlZC5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHJlc2V0ID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcjogbnVsbCB9KTtcbiAgfTtcblxuICByZW5kZXIoKTogUmVhY3ROb2RlIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSB0aGlzLnN0YXRlO1xuICAgIGlmICghZXJyb3IpIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuXG4gICAgY29uc3QgeyBmYWxsYmFjayB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAodHlwZW9mIGZhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBmYWxsYmFjayh7IGVycm9yLCByZXNldDogdGhpcy5yZXNldCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbGxiYWNrID8/IG51bGw7XG4gIH1cbn1cbiJdfQ==
1
+ export * from '@sheepit-ai/react';
2
+
3
+ // src/index.ts
4
+ var globals = globalThis;
5
+ if (!globals.__goatech_react_warned__) {
6
+ globals.__goatech_react_warned__ = true;
7
+ console.warn(
8
+ "@goatech/react is deprecated; rename your import to @sheepit-ai/react before 2026-11-26. See https://www.goatech.ai/docs/migrate-to-sheepit"
9
+ );
10
+ }
package/dist/test.d.mts CHANGED
@@ -1,23 +1 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ReactNode } from 'react';
3
- import { IGoaTech } from '@goatech/sdk-js';
4
- export { n as noopClient } from './noop-client-CIawzLT5.mjs';
5
-
6
- interface TestProviderProps {
7
- /** Partial client — missing methods fall back to noopClient. */
8
- client?: Partial<IGoaTech>;
9
- children: ReactNode;
10
- }
11
- /**
12
- * Test-only provider. Inject a mock or partial client for unit tests.
13
- * Import from `@goatech/react/test` to avoid bundling test utils in production.
14
- */
15
- declare function TestProvider({ client, children }: TestProviderProps): react_jsx_runtime.JSX.Element;
16
- /**
17
- * Create a mock client with vi.fn() spies for all methods.
18
- * Pass a `fn` factory (e.g., `vi.fn`) to create spy functions.
19
- * Defaults to plain no-op functions if no factory is provided.
20
- */
21
- declare function createMockClient(overrides?: Partial<IGoaTech>, fn?: () => (...args: unknown[]) => unknown): IGoaTech;
22
-
23
- export { TestProvider, type TestProviderProps, createMockClient };
1
+ export * from '@sheepit-ai/react/test';
package/dist/test.d.ts CHANGED
@@ -1,23 +1 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ReactNode } from 'react';
3
- import { IGoaTech } from '@goatech/sdk-js';
4
- export { n as noopClient } from './noop-client-CIawzLT5.js';
5
-
6
- interface TestProviderProps {
7
- /** Partial client — missing methods fall back to noopClient. */
8
- client?: Partial<IGoaTech>;
9
- children: ReactNode;
10
- }
11
- /**
12
- * Test-only provider. Inject a mock or partial client for unit tests.
13
- * Import from `@goatech/react/test` to avoid bundling test utils in production.
14
- */
15
- declare function TestProvider({ client, children }: TestProviderProps): react_jsx_runtime.JSX.Element;
16
- /**
17
- * Create a mock client with vi.fn() spies for all methods.
18
- * Pass a `fn` factory (e.g., `vi.fn`) to create spy functions.
19
- * Defaults to plain no-op functions if no factory is provided.
20
- */
21
- declare function createMockClient(overrides?: Partial<IGoaTech>, fn?: () => (...args: unknown[]) => unknown): IGoaTech;
22
-
23
- export { TestProvider, type TestProviderProps, createMockClient };
1
+ export * from '@sheepit-ai/react/test';
package/dist/test.js CHANGED
@@ -1,2 +1,12 @@
1
- 'use strict';var react=require('react'),sdkJs=require('@goatech/sdk-js'),jsxRuntime=require('react/jsx-runtime');var d=new sdkJs.DiagnosticBus(0),t={track:()=>{},identify:()=>{},reset:()=>{},flag:(r,o=false)=>o,experiment:()=>({variant:"control"}),overrideFlag:()=>{},clearOverrides:()=>{},getOverrides:()=>({}),flush:()=>Promise.resolve(),recordPageView:()=>{},status:()=>({initialized:false,online:false,queueDepth:0,offlineQueueDepth:0,lastFlushAt:null,deviceId:null,userId:null,flagCount:0,experimentCount:0,sdkVersion:"noop"}),destroy:()=>{},diagnostics:()=>d,getRecentDiagnostics:()=>[]};var l=react.createContext(t);function f({client:r,children:o}){let e={...t,...r};return jsxRuntime.jsx(l.Provider,{value:e,children:o})}function g(r,o=()=>()=>{}){let e=o,n=e(),s=e(),i=e(),a=e();n.mockReturnValue?.(false),s.mockReturnValue?.({variant:"control"}),i.mockResolvedValue?.(void 0),a.mockReturnValue?.({initialized:true});let u=e(),c=e();return c.mockReturnValue?.([]),{track:e(),identify:e(),reset:e(),flag:n,experiment:s,flush:i,recordPageView:e(),status:a,destroy:e(),diagnostics:u,getRecentDiagnostics:c,...r}}exports.TestProvider=f;exports.createMockClient=g;exports.noopClient=t;//# sourceMappingURL=test.js.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ub29wLWNsaWVudC50cyIsIi4uL3NyYy9jb250ZXh0LnRzIiwiLi4vc3JjL3Rlc3QtcHJvdmlkZXIudHN4Il0sIm5hbWVzIjpbIm5vb3BCdXMiLCJEaWFnbm9zdGljQnVzIiwibm9vcENsaWVudCIsIl9rZXkiLCJkZWZhdWx0VmFsdWUiLCJHb2FUZWNoQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJUZXN0UHJvdmlkZXIiLCJjbGllbnQiLCJjaGlsZHJlbiIsIm1lcmdlZCIsImpzeCIsImNyZWF0ZU1vY2tDbGllbnQiLCJvdmVycmlkZXMiLCJmbiIsIm1vY2tGbiIsImZsYWciLCJleHBlcmltZW50IiwiZmx1c2giLCJzdGF0dXMiLCJkaWFnbm9zdGljc0ZuIiwiZ2V0UmVjZW50RGlhZ25vc3RpY3NGbiJdLCJtYXBwaW5ncyI6ImlIQUlBLElBQU1BLENBQUFBLENBQVUsSUFBSUMsbUJBQUFBLENBQWMsQ0FBQyxFQVF0QkMsQ0FBQUEsQ0FBdUIsQ0FDbEMsS0FBQSxDQUFPLElBQU0sQ0FBQyxDQUFBLENBQ2QsU0FBVSxJQUFNLENBQUMsQ0FBQSxDQUNqQixLQUFBLENBQU8sSUFBTSxDQUFDLEVBQ2QsSUFBQSxDQUFNLENBQUNDLENBQUFBLENBQWNDLENBQUFBLENBQTBCLEtBQUEsR0FBVUEsQ0FBQUEsQ0FDekQsV0FBWSxLQUF5QixDQUFFLE9BQUEsQ0FBUyxTQUFVLENBQUEsQ0FBQSxDQUMxRCxZQUFBLENBQWMsSUFBTSxDQUFDLENBQUEsQ0FDckIsY0FBQSxDQUFnQixJQUFNLENBQUMsQ0FBQSxDQUN2QixhQUFjLEtBQU8sRUFBQyxDQUFBLENBQ3RCLEtBQUEsQ0FBTyxJQUFNLE9BQUEsQ0FBUSxTQUFRLENBQzdCLGNBQUEsQ0FBZ0IsSUFBTSxDQUFDLENBQUEsQ0FDdkIsTUFBQSxDQUFRLEtBQWtCLENBQ3hCLFdBQUEsQ0FBYSxLQUFBLENBQ2IsTUFBQSxDQUFRLEtBQUEsQ0FDUixVQUFBLENBQVksRUFDWixpQkFBQSxDQUFtQixDQUFBLENBQ25CLFdBQUEsQ0FBYSxJQUFBLENBQ2IsUUFBQSxDQUFVLElBQUEsQ0FDVixPQUFRLElBQUEsQ0FDUixTQUFBLENBQVcsQ0FBQSxDQUNYLGVBQUEsQ0FBaUIsQ0FBQSxDQUNqQixVQUFBLENBQVksTUFDZCxDQUFBLENBQUEsQ0FDQSxPQUFBLENBQVMsSUFBTSxDQUFDLENBQUEsQ0FDaEIsV0FBQSxDQUFhLElBQU1KLENBQUFBLENBQ25CLG9CQUFBLENBQXNCLElBQU0sRUFDOUIsRUM5Qk8sSUFBTUssQ0FBQUEsQ0FBaUJDLG1CQUFBQSxDQUF3QkosQ0FBVSxDQUFBLENDT3pELFNBQVNLLENBQUFBLENBQWEsQ0FBRSxNQUFBLENBQUFDLENBQUFBLENBQVEsUUFBQSxDQUFBQyxDQUFTLENBQUEsQ0FBc0IsQ0FDcEUsSUFBTUMsQ0FBQUEsQ0FBbUIsQ0FBRSxHQUFHUixFQUFZLEdBQUdNLENBQU8sQ0FBQSxDQUNwRCxPQUFPRyxjQUFBQSxDQUFDTixDQUFBQSxDQUFlLFNBQWYsQ0FBd0IsS0FBQSxDQUFPSyxDQUFBQSxDQUFTLFFBQUEsQ0FBQUQsQ0FBQUEsQ0FBUyxDQUMzRCxDQU9PLFNBQVNHLENBQUFBLENBQ2RDLENBQUFBLENBQ0FDLENBQUFBLENBQTRDLElBQU0sSUFBTSxDQUFDLENBQUEsQ0FDL0MsQ0FDVixJQUFNQyxDQUFBQSxDQUFTRCxDQUFBQSxDQUlURSxDQUFBQSxDQUFPRCxHQUFPLENBQ2RFLENBQUFBLENBQWFGLENBQUFBLEVBQU8sQ0FDcEJHLENBQUFBLENBQVFILENBQUFBLEdBQ1JJLENBQUFBLENBQVNKLENBQUFBLEVBQU8sQ0FDdEJDLENBQUFBLENBQUssZUFBQSxHQUFrQixLQUFLLEVBQzVCQyxDQUFBQSxDQUFXLGVBQUEsR0FBa0IsQ0FBRSxPQUFBLENBQVMsU0FBVSxDQUFDLEVBQ25EQyxDQUFBQSxDQUFNLGlCQUFBLEdBQW9CLE1BQVMsQ0FBQSxDQUNuQ0MsQ0FBQUEsQ0FBTyxlQUFBLEdBQWtCLENBQUUsV0FBQSxDQUFhLElBQUssQ0FBQyxDQUFBLENBQzlDLElBQU1DLENBQUFBLENBQWdCTCxHQUFPLENBQ3ZCTSxDQUFBQSxDQUF5Qk4sQ0FBQUEsRUFBTyxDQUN0QyxPQUFBTSxDQUFBQSxDQUF1QixrQkFBa0IsRUFBRSxDQUFBLENBQ3BDLENBQ0wsS0FBQSxDQUFPTixDQUFBQSxHQUNQLFFBQUEsQ0FBVUEsQ0FBQUEsRUFBTyxDQUNqQixLQUFBLENBQU9BLENBQUFBLEVBQU8sQ0FDZCxLQUFBQyxDQUFBQSxDQUNBLFVBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxLQUFBLENBQUFDLENBQUFBLENBQ0EsY0FBQSxDQUFnQkgsR0FBTyxDQUN2QixNQUFBLENBQUFJLENBQUFBLENBQ0EsT0FBQSxDQUFTSixDQUFBQSxFQUFPLENBQ2hCLFdBQUEsQ0FBYUssQ0FBQUEsQ0FDYixvQkFBQSxDQUFzQkMsQ0FBQUEsQ0FDdEIsR0FBR1IsQ0FDTCxDQUNGIiwiZmlsZSI6InRlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElHb2FUZWNoIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHR5cGUgeyBGbGFnVmFsdWUsIEV4cGVyaW1lbnRSZXN1bHQsIFNES1N0YXR1cyB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB7IERpYWdub3N0aWNCdXMgfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5cbmNvbnN0IG5vb3BCdXMgPSBuZXcgRGlhZ25vc3RpY0J1cygwKTtcblxuLyoqXG4gKiBTaWxlbnQgbm8tb3AgY2xpZW50LiBVc2VkIHdoZW46XG4gKiAtIFNESyBpcyBub3QgeWV0IGluaXRpYWxpemVkIChTU1IsIGluaXRpYWwgcmVuZGVyKVxuICogLSBBUEkga2V5IGlzIG5vdCBjb25maWd1cmVkIChsb2NhbCBkZXYpXG4gKiAtIFRlc3RzIHRoYXQgZG9uJ3QgY2FyZSBhYm91dCBhbmFseXRpY3NcbiAqL1xuZXhwb3J0IGNvbnN0IG5vb3BDbGllbnQ6IElHb2FUZWNoID0ge1xuICB0cmFjazogKCkgPT4ge30sXG4gIGlkZW50aWZ5OiAoKSA9PiB7fSxcbiAgcmVzZXQ6ICgpID0+IHt9LFxuICBmbGFnOiAoX2tleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IEZsYWdWYWx1ZSA9IGZhbHNlKSA9PiBkZWZhdWx0VmFsdWUsXG4gIGV4cGVyaW1lbnQ6ICgpOiBFeHBlcmltZW50UmVzdWx0ID0+ICh7IHZhcmlhbnQ6IFwiY29udHJvbFwiIH0pLFxuICBvdmVycmlkZUZsYWc6ICgpID0+IHt9LFxuICBjbGVhck92ZXJyaWRlczogKCkgPT4ge30sXG4gIGdldE92ZXJyaWRlczogKCkgPT4gKHt9KSxcbiAgZmx1c2g6ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxuICByZWNvcmRQYWdlVmlldzogKCkgPT4ge30sXG4gIHN0YXR1czogKCk6IFNES1N0YXR1cyA9PiAoe1xuICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICBvbmxpbmU6IGZhbHNlLFxuICAgIHF1ZXVlRGVwdGg6IDAsXG4gICAgb2ZmbGluZVF1ZXVlRGVwdGg6IDAsXG4gICAgbGFzdEZsdXNoQXQ6IG51bGwsXG4gICAgZGV2aWNlSWQ6IG51bGwsXG4gICAgdXNlcklkOiBudWxsLFxuICAgIGZsYWdDb3VudDogMCxcbiAgICBleHBlcmltZW50Q291bnQ6IDAsXG4gICAgc2RrVmVyc2lvbjogXCJub29wXCIsXG4gIH0pLFxuICBkZXN0cm95OiAoKSA9PiB7fSxcbiAgZGlhZ25vc3RpY3M6ICgpID0+IG5vb3BCdXMsXG4gIGdldFJlY2VudERpYWdub3N0aWNzOiAoKSA9PiBbXSxcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IElHb2FUZWNoIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHsgbm9vcENsaWVudCB9IGZyb20gXCIuL25vb3AtY2xpZW50LmpzXCI7XG5cbi8qKlxuICogSW50ZXJuYWwgY29udGV4dCDigJQgY29uc3VtZXJzIHNob3VsZCB1c2UgdGhlIGB1c2VHb2FUZWNoKClgIGhvb2suXG4gKiBFeHBvcnRlZCBvbmx5IGZvciBUZXN0UHJvdmlkZXIgdG8gaW5qZWN0IGEgbW9jayBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBHb2FUZWNoQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8SUdvYVRlY2g+KG5vb3BDbGllbnQpO1xuIiwiaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgSUdvYVRlY2ggfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5pbXBvcnQgeyBHb2FUZWNoQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQuanNcIjtcbmltcG9ydCB7IG5vb3BDbGllbnQgfSBmcm9tIFwiLi9ub29wLWNsaWVudC5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RQcm92aWRlclByb3BzIHtcbiAgLyoqIFBhcnRpYWwgY2xpZW50IOKAlCBtaXNzaW5nIG1ldGhvZHMgZmFsbCBiYWNrIHRvIG5vb3BDbGllbnQuICovXG4gIGNsaWVudD86IFBhcnRpYWw8SUdvYVRlY2g+O1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuXG4vKipcbiAqIFRlc3Qtb25seSBwcm92aWRlci4gSW5qZWN0IGEgbW9jayBvciBwYXJ0aWFsIGNsaWVudCBmb3IgdW5pdCB0ZXN0cy5cbiAqIEltcG9ydCBmcm9tIGBAZ29hdGVjaC9yZWFjdC90ZXN0YCB0byBhdm9pZCBidW5kbGluZyB0ZXN0IHV0aWxzIGluIHByb2R1Y3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUZXN0UHJvdmlkZXIoeyBjbGllbnQsIGNoaWxkcmVuIH06IFRlc3RQcm92aWRlclByb3BzKSB7XG4gIGNvbnN0IG1lcmdlZDogSUdvYVRlY2ggPSB7IC4uLm5vb3BDbGllbnQsIC4uLmNsaWVudCB9O1xuICByZXR1cm4gPEdvYVRlY2hDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXttZXJnZWR9PntjaGlsZHJlbn08L0dvYVRlY2hDb250ZXh0LlByb3ZpZGVyPjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtb2NrIGNsaWVudCB3aXRoIHZpLmZuKCkgc3BpZXMgZm9yIGFsbCBtZXRob2RzLlxuICogUGFzcyBhIGBmbmAgZmFjdG9yeSAoZS5nLiwgYHZpLmZuYCkgdG8gY3JlYXRlIHNweSBmdW5jdGlvbnMuXG4gKiBEZWZhdWx0cyB0byBwbGFpbiBuby1vcCBmdW5jdGlvbnMgaWYgbm8gZmFjdG9yeSBpcyBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDbGllbnQoXG4gIG92ZXJyaWRlcz86IFBhcnRpYWw8SUdvYVRlY2g+LFxuICBmbjogKCkgPT4gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9ICgpID0+ICgpID0+IHt9LFxuKTogSUdvYVRlY2gge1xuICBjb25zdCBtb2NrRm4gPSBmbiBhcyAoKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBmbj4gJiB7XG4gICAgbW9ja1JldHVyblZhbHVlPzogKHY6IHVua25vd24pID0+IHVua25vd247XG4gICAgbW9ja1Jlc29sdmVkVmFsdWU/OiAodjogdW5rbm93bikgPT4gdW5rbm93bjtcbiAgfTtcbiAgY29uc3QgZmxhZyA9IG1vY2tGbigpO1xuICBjb25zdCBleHBlcmltZW50ID0gbW9ja0ZuKCk7XG4gIGNvbnN0IGZsdXNoID0gbW9ja0ZuKCk7XG4gIGNvbnN0IHN0YXR1cyA9IG1vY2tGbigpO1xuICBmbGFnLm1vY2tSZXR1cm5WYWx1ZT8uKGZhbHNlKTtcbiAgZXhwZXJpbWVudC5tb2NrUmV0dXJuVmFsdWU/Lih7IHZhcmlhbnQ6IFwiY29udHJvbFwiIH0pO1xuICBmbHVzaC5tb2NrUmVzb2x2ZWRWYWx1ZT8uKHVuZGVmaW5lZCk7XG4gIHN0YXR1cy5tb2NrUmV0dXJuVmFsdWU/Lih7IGluaXRpYWxpemVkOiB0cnVlIH0pO1xuICBjb25zdCBkaWFnbm9zdGljc0ZuID0gbW9ja0ZuKCk7XG4gIGNvbnN0IGdldFJlY2VudERpYWdub3N0aWNzRm4gPSBtb2NrRm4oKTtcbiAgZ2V0UmVjZW50RGlhZ25vc3RpY3NGbi5tb2NrUmV0dXJuVmFsdWU/LihbXSk7XG4gIHJldHVybiB7XG4gICAgdHJhY2s6IG1vY2tGbigpLFxuICAgIGlkZW50aWZ5OiBtb2NrRm4oKSxcbiAgICByZXNldDogbW9ja0ZuKCksXG4gICAgZmxhZyxcbiAgICBleHBlcmltZW50LFxuICAgIGZsdXNoLFxuICAgIHJlY29yZFBhZ2VWaWV3OiBtb2NrRm4oKSxcbiAgICBzdGF0dXMsXG4gICAgZGVzdHJveTogbW9ja0ZuKCksXG4gICAgZGlhZ25vc3RpY3M6IGRpYWdub3N0aWNzRm4sXG4gICAgZ2V0UmVjZW50RGlhZ25vc3RpY3M6IGdldFJlY2VudERpYWdub3N0aWNzRm4sXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9IGFzIElHb2FUZWNoO1xufVxuIl19
1
+ 'use strict';
2
+
3
+ var test = require('@sheepit-ai/react/test');
4
+
5
+
6
+
7
+ Object.keys(test).forEach(function (k) {
8
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
9
+ enumerable: true,
10
+ get: function () { return test[k]; }
11
+ });
12
+ });
package/dist/test.mjs CHANGED
@@ -1,2 +1 @@
1
- import {a,b}from'./chunk-OKZIRDLB.mjs';export{a as noopClient}from'./chunk-OKZIRDLB.mjs';import {jsx}from'react/jsx-runtime';function l({client:o,children:t}){let e={...a,...o};return jsx(b.Provider,{value:e,children:t})}function p(o,t=()=>()=>{}){let e=t,r=e(),c=e(),a=e(),i=e();r.mockReturnValue?.(false),c.mockReturnValue?.({variant:"control"}),a.mockResolvedValue?.(void 0),i.mockReturnValue?.({initialized:true});let d=e(),s=e();return s.mockReturnValue?.([]),{track:e(),identify:e(),reset:e(),flag:r,experiment:c,flush:a,recordPageView:e(),status:i,destroy:e(),diagnostics:d,getRecentDiagnostics:s,...o}}export{l as TestProvider,p as createMockClient};//# sourceMappingURL=test.mjs.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXN0LXByb3ZpZGVyLnRzeCJdLCJuYW1lcyI6WyJUZXN0UHJvdmlkZXIiLCJjbGllbnQiLCJjaGlsZHJlbiIsIm1lcmdlZCIsIm5vb3BDbGllbnQiLCJqc3giLCJHb2FUZWNoQ29udGV4dCIsImNyZWF0ZU1vY2tDbGllbnQiLCJvdmVycmlkZXMiLCJmbiIsIm1vY2tGbiIsImZsYWciLCJleHBlcmltZW50IiwiZmx1c2giLCJzdGF0dXMiLCJkaWFnbm9zdGljc0ZuIiwiZ2V0UmVjZW50RGlhZ25vc3RpY3NGbiJdLCJtYXBwaW5ncyI6IjZIQWVPLFNBQVNBLENBQUFBLENBQWEsQ0FBRSxNQUFBLENBQUFDLENBQUFBLENBQVEsUUFBQSxDQUFBQyxDQUFTLENBQUEsQ0FBc0IsQ0FDcEUsSUFBTUMsQ0FBQUEsQ0FBbUIsQ0FBRSxHQUFHQyxDQUFBQSxDQUFZLEdBQUdILENBQU8sQ0FBQSxDQUNwRCxPQUFPSSxHQUFBQSxDQUFDQyxDQUFBQSxDQUFlLFFBQUEsQ0FBZixDQUF3QixLQUFBLENBQU9ILENBQUFBLENBQVMsUUFBQSxDQUFBRCxDQUFBQSxDQUFTLENBQzNELENBT08sU0FBU0ssQ0FBQUEsQ0FDZEMsQ0FBQUEsQ0FDQUMsQ0FBQUEsQ0FBNEMsSUFBTSxJQUFNLENBQUMsQ0FBQSxDQUMvQyxDQUNWLElBQU1DLENBQUFBLENBQVNELENBQUFBLENBSVRFLENBQUFBLENBQU9ELENBQUFBLEVBQU8sQ0FDZEUsQ0FBQUEsQ0FBYUYsQ0FBQUEsRUFBTyxDQUNwQkcsQ0FBQUEsQ0FBUUgsQ0FBQUEsRUFBTyxDQUNmSSxDQUFBQSxDQUFTSixDQUFBQSxFQUFPLENBQ3RCQyxDQUFBQSxDQUFLLGVBQUEsR0FBa0IsS0FBSyxDQUFBLENBQzVCQyxDQUFBQSxDQUFXLGtCQUFrQixDQUFFLE9BQUEsQ0FBUyxTQUFVLENBQUMsQ0FBQSxDQUNuREMsQ0FBQUEsQ0FBTSxpQkFBQSxHQUFvQixNQUFTLENBQUEsQ0FDbkNDLENBQUFBLENBQU8sZUFBQSxHQUFrQixDQUFFLFdBQUEsQ0FBYSxJQUFLLENBQUMsQ0FBQSxDQUM5QyxJQUFNQyxDQUFBQSxDQUFnQkwsQ0FBQUEsRUFBTyxDQUN2Qk0sQ0FBQUEsQ0FBeUJOLENBQUFBLEVBQU8sQ0FDdEMsT0FBQU0sQ0FBQUEsQ0FBdUIsZUFBQSxHQUFrQixFQUFFLENBQUEsQ0FDcEMsQ0FDTCxNQUFPTixDQUFBQSxFQUFPLENBQ2QsUUFBQSxDQUFVQSxDQUFBQSxFQUFPLENBQ2pCLEtBQUEsQ0FBT0EsQ0FBQUEsRUFBTyxDQUNkLElBQUEsQ0FBQUMsQ0FBQUEsQ0FDQSxVQUFBLENBQUFDLENBQUFBLENBQ0EsS0FBQSxDQUFBQyxDQUFBQSxDQUNBLGNBQUEsQ0FBZ0JILENBQUFBLEVBQU8sQ0FDdkIsTUFBQSxDQUFBSSxDQUFBQSxDQUNBLE9BQUEsQ0FBU0osQ0FBQUEsRUFBTyxDQUNoQixXQUFBLENBQWFLLENBQUFBLENBQ2Isb0JBQUEsQ0FBc0JDLENBQUFBLENBQ3RCLEdBQUdSLENBQ0wsQ0FDRiIsImZpbGUiOiJ0ZXN0Lm1qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IElHb2FUZWNoIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHsgR29hVGVjaENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0LmpzXCI7XG5pbXBvcnQgeyBub29wQ2xpZW50IH0gZnJvbSBcIi4vbm9vcC1jbGllbnQuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0UHJvdmlkZXJQcm9wcyB7XG4gIC8qKiBQYXJ0aWFsIGNsaWVudCDigJQgbWlzc2luZyBtZXRob2RzIGZhbGwgYmFjayB0byBub29wQ2xpZW50LiAqL1xuICBjbGllbnQ/OiBQYXJ0aWFsPElHb2FUZWNoPjtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuLyoqXG4gKiBUZXN0LW9ubHkgcHJvdmlkZXIuIEluamVjdCBhIG1vY2sgb3IgcGFydGlhbCBjbGllbnQgZm9yIHVuaXQgdGVzdHMuXG4gKiBJbXBvcnQgZnJvbSBgQGdvYXRlY2gvcmVhY3QvdGVzdGAgdG8gYXZvaWQgYnVuZGxpbmcgdGVzdCB1dGlscyBpbiBwcm9kdWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gVGVzdFByb3ZpZGVyKHsgY2xpZW50LCBjaGlsZHJlbiB9OiBUZXN0UHJvdmlkZXJQcm9wcykge1xuICBjb25zdCBtZXJnZWQ6IElHb2FUZWNoID0geyAuLi5ub29wQ2xpZW50LCAuLi5jbGllbnQgfTtcbiAgcmV0dXJuIDxHb2FUZWNoQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17bWVyZ2VkfT57Y2hpbGRyZW59PC9Hb2FUZWNoQ29udGV4dC5Qcm92aWRlcj47XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9jayBjbGllbnQgd2l0aCB2aS5mbigpIHNwaWVzIGZvciBhbGwgbWV0aG9kcy5cbiAqIFBhc3MgYSBgZm5gIGZhY3RvcnkgKGUuZy4sIGB2aS5mbmApIHRvIGNyZWF0ZSBzcHkgZnVuY3Rpb25zLlxuICogRGVmYXVsdHMgdG8gcGxhaW4gbm8tb3AgZnVuY3Rpb25zIGlmIG5vIGZhY3RvcnkgaXMgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ2xpZW50KFxuICBvdmVycmlkZXM/OiBQYXJ0aWFsPElHb2FUZWNoPixcbiAgZm46ICgpID0+ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gPSAoKSA9PiAoKSA9PiB7fSxcbik6IElHb2FUZWNoIHtcbiAgY29uc3QgbW9ja0ZuID0gZm4gYXMgKCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZm4+ICYge1xuICAgIG1vY2tSZXR1cm5WYWx1ZT86ICh2OiB1bmtub3duKSA9PiB1bmtub3duO1xuICAgIG1vY2tSZXNvbHZlZFZhbHVlPzogKHY6IHVua25vd24pID0+IHVua25vd247XG4gIH07XG4gIGNvbnN0IGZsYWcgPSBtb2NrRm4oKTtcbiAgY29uc3QgZXhwZXJpbWVudCA9IG1vY2tGbigpO1xuICBjb25zdCBmbHVzaCA9IG1vY2tGbigpO1xuICBjb25zdCBzdGF0dXMgPSBtb2NrRm4oKTtcbiAgZmxhZy5tb2NrUmV0dXJuVmFsdWU/LihmYWxzZSk7XG4gIGV4cGVyaW1lbnQubW9ja1JldHVyblZhbHVlPy4oeyB2YXJpYW50OiBcImNvbnRyb2xcIiB9KTtcbiAgZmx1c2gubW9ja1Jlc29sdmVkVmFsdWU/Lih1bmRlZmluZWQpO1xuICBzdGF0dXMubW9ja1JldHVyblZhbHVlPy4oeyBpbml0aWFsaXplZDogdHJ1ZSB9KTtcbiAgY29uc3QgZGlhZ25vc3RpY3NGbiA9IG1vY2tGbigpO1xuICBjb25zdCBnZXRSZWNlbnREaWFnbm9zdGljc0ZuID0gbW9ja0ZuKCk7XG4gIGdldFJlY2VudERpYWdub3N0aWNzRm4ubW9ja1JldHVyblZhbHVlPy4oW10pO1xuICByZXR1cm4ge1xuICAgIHRyYWNrOiBtb2NrRm4oKSxcbiAgICBpZGVudGlmeTogbW9ja0ZuKCksXG4gICAgcmVzZXQ6IG1vY2tGbigpLFxuICAgIGZsYWcsXG4gICAgZXhwZXJpbWVudCxcbiAgICBmbHVzaCxcbiAgICByZWNvcmRQYWdlVmlldzogbW9ja0ZuKCksXG4gICAgc3RhdHVzLFxuICAgIGRlc3Ryb3k6IG1vY2tGbigpLFxuICAgIGRpYWdub3N0aWNzOiBkaWFnbm9zdGljc0ZuLFxuICAgIGdldFJlY2VudERpYWdub3N0aWNzOiBnZXRSZWNlbnREaWFnbm9zdGljc0ZuLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfSBhcyBJR29hVGVjaDtcbn1cbiJdfQ==
1
+ export * from '@sheepit-ai/react/test';
package/package.json CHANGED
@@ -1,27 +1,23 @@
1
1
  {
2
2
  "name": "@goatech/react",
3
- "version": "0.1.0",
4
- "description": "GoaTech React bindings Provider, hooks, and components for feature flags, experiments, and analytics",
3
+ "version": "1.0.0",
4
+ "description": "Deprecated use @sheepit-ai/react. This package re-exports @sheepit-ai/react for backward compatibility.",
5
5
  "license": "MIT",
6
6
  "author": "GoaTech",
7
7
  "homepage": "https://goatech.ai",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/goatech-ai/GoaTech.git",
11
- "directory": "packages/sdk-react"
12
- },
13
- "bugs": {
14
- "url": "https://github.com/goatech-ai/GoaTech/issues"
11
+ "directory": "packages/sdk-react-shim"
15
12
  },
16
13
  "keywords": [
17
14
  "goatech",
15
+ "sheepit",
18
16
  "react",
19
17
  "feature-flags",
20
- "flags",
21
- "experiments",
22
- "analytics",
23
18
  "hooks",
24
- "sdk"
19
+ "sdk",
20
+ "deprecated"
25
21
  ],
26
22
  "engines": {
27
23
  "node": ">=18"
@@ -29,7 +25,10 @@
29
25
  "publishConfig": {
30
26
  "access": "public"
31
27
  },
32
- "sideEffects": false,
28
+ "sideEffects": [
29
+ "./dist/index.js",
30
+ "./dist/index.mjs"
31
+ ],
33
32
  "main": "./dist/index.js",
34
33
  "module": "./dist/index.mjs",
35
34
  "types": "./dist/index.d.ts",
@@ -47,30 +46,26 @@
47
46
  },
48
47
  "files": [
49
48
  "dist",
50
- "README.md",
51
- "LICENSE"
49
+ "README.md"
52
50
  ],
53
- "scripts": {
54
- "build": "tsup",
55
- "dev": "tsup --watch",
56
- "test": "vitest run",
57
- "lint": "eslint src --ext .ts,.tsx"
51
+ "dependencies": {
52
+ "@sheepit-ai/react": "1.0.0"
58
53
  },
59
54
  "peerDependencies": {
60
- "react": ">=18.0.0",
61
- "@goatech/sdk-js": "^0.1.0"
55
+ "react": ">=18.0.0"
62
56
  },
63
57
  "devDependencies": {
64
- "@goatech/sdk-js": "workspace:*",
65
- "@testing-library/react": "^16.0.0",
66
- "@testing-library/jest-dom": "^6.0.0",
67
- "@testing-library/user-event": "^14.0.0",
58
+ "@types/node": "^20.0.0",
68
59
  "@types/react": "^19.0.0",
69
- "jsdom": "^29.0.1",
70
60
  "react": "^19.0.0",
71
- "react-dom": "^19.0.0",
72
61
  "tsup": "^8.0.0",
73
62
  "typescript": "^5.4.0",
74
- "vitest": "^2.0.0"
63
+ "vitest": "^3.0.0"
64
+ },
65
+ "scripts": {
66
+ "build": "tsup",
67
+ "dev": "tsup --watch",
68
+ "lint": "eslint src --ext .ts,.tsx",
69
+ "test": "vitest run"
75
70
  }
76
- }
71
+ }
@@ -1,2 +0,0 @@
1
- import {DiagnosticBus}from'@goatech/sdk-js';import {createContext}from'react';var r=new DiagnosticBus(0),e={track:()=>{},identify:()=>{},reset:()=>{},flag:(i,t=false)=>t,experiment:()=>({variant:"control"}),overrideFlag:()=>{},clearOverrides:()=>{},getOverrides:()=>({}),flush:()=>Promise.resolve(),recordPageView:()=>{},status:()=>({initialized:false,online:false,queueDepth:0,offlineQueueDepth:0,lastFlushAt:null,deviceId:null,userId:null,flagCount:0,experimentCount:0,sdkVersion:"noop"}),destroy:()=>{},diagnostics:()=>r,getRecentDiagnostics:()=>[]};var p=createContext(e);export{e as a,p as b};//# sourceMappingURL=chunk-OKZIRDLB.mjs.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ub29wLWNsaWVudC50cyIsIi4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbIm5vb3BCdXMiLCJEaWFnbm9zdGljQnVzIiwibm9vcENsaWVudCIsIl9rZXkiLCJkZWZhdWx0VmFsdWUiLCJHb2FUZWNoQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiXSwibWFwcGluZ3MiOiI4RUFJQSxJQUFNQSxFQUFVLElBQUlDLGFBQUFBLENBQWMsQ0FBQyxDQUFBLENBUXRCQyxDQUFBQSxDQUF1QixDQUNsQyxLQUFBLENBQU8sSUFBTSxDQUFDLENBQUEsQ0FDZCxRQUFBLENBQVUsSUFBTSxDQUFDLENBQUEsQ0FDakIsS0FBQSxDQUFPLElBQU0sQ0FBQyxDQUFBLENBQ2QsS0FBTSxDQUFDQyxDQUFBQSxDQUFjQyxFQUEwQixLQUFBLEdBQVVBLENBQUFBLENBQ3pELFdBQVksS0FBeUIsQ0FBRSxPQUFBLENBQVMsU0FBVSxDQUFBLENBQUEsQ0FDMUQsWUFBQSxDQUFjLElBQU0sQ0FBQyxDQUFBLENBQ3JCLGVBQWdCLElBQU0sQ0FBQyxFQUN2QixZQUFBLENBQWMsS0FBTyxFQUFDLENBQUEsQ0FDdEIsS0FBQSxDQUFPLElBQU0sUUFBUSxPQUFBLEVBQVEsQ0FDN0IsZUFBZ0IsSUFBTSxDQUFDLEVBQ3ZCLE1BQUEsQ0FBUSxLQUFrQixDQUN4QixXQUFBLENBQWEsS0FBQSxDQUNiLE1BQUEsQ0FBUSxNQUNSLFVBQUEsQ0FBWSxDQUFBLENBQ1osa0JBQW1CLENBQUEsQ0FDbkIsV0FBQSxDQUFhLEtBQ2IsUUFBQSxDQUFVLElBQUEsQ0FDVixNQUFBLENBQVEsSUFBQSxDQUNSLFNBQUEsQ0FBVyxDQUFBLENBQ1gsZ0JBQWlCLENBQUEsQ0FDakIsVUFBQSxDQUFZLE1BQ2QsQ0FBQSxDQUFBLENBQ0EsT0FBQSxDQUFTLElBQU0sQ0FBQyxDQUFBLENBQ2hCLFdBQUEsQ0FBYSxJQUFNSixDQUFBQSxDQUNuQixvQkFBQSxDQUFzQixJQUFNLEVBQzlCLEVDOUJPLElBQU1LLENBQUFBLENBQWlCQyxhQUFBQSxDQUF3QkosQ0FBVSIsImZpbGUiOiJjaHVuay1PS1pJUkRMQi5tanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElHb2FUZWNoIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHR5cGUgeyBGbGFnVmFsdWUsIEV4cGVyaW1lbnRSZXN1bHQsIFNES1N0YXR1cyB9IGZyb20gXCJAZ29hdGVjaC9zZGstanNcIjtcbmltcG9ydCB7IERpYWdub3N0aWNCdXMgfSBmcm9tIFwiQGdvYXRlY2gvc2RrLWpzXCI7XG5cbmNvbnN0IG5vb3BCdXMgPSBuZXcgRGlhZ25vc3RpY0J1cygwKTtcblxuLyoqXG4gKiBTaWxlbnQgbm8tb3AgY2xpZW50LiBVc2VkIHdoZW46XG4gKiAtIFNESyBpcyBub3QgeWV0IGluaXRpYWxpemVkIChTU1IsIGluaXRpYWwgcmVuZGVyKVxuICogLSBBUEkga2V5IGlzIG5vdCBjb25maWd1cmVkIChsb2NhbCBkZXYpXG4gKiAtIFRlc3RzIHRoYXQgZG9uJ3QgY2FyZSBhYm91dCBhbmFseXRpY3NcbiAqL1xuZXhwb3J0IGNvbnN0IG5vb3BDbGllbnQ6IElHb2FUZWNoID0ge1xuICB0cmFjazogKCkgPT4ge30sXG4gIGlkZW50aWZ5OiAoKSA9PiB7fSxcbiAgcmVzZXQ6ICgpID0+IHt9LFxuICBmbGFnOiAoX2tleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IEZsYWdWYWx1ZSA9IGZhbHNlKSA9PiBkZWZhdWx0VmFsdWUsXG4gIGV4cGVyaW1lbnQ6ICgpOiBFeHBlcmltZW50UmVzdWx0ID0+ICh7IHZhcmlhbnQ6IFwiY29udHJvbFwiIH0pLFxuICBvdmVycmlkZUZsYWc6ICgpID0+IHt9LFxuICBjbGVhck92ZXJyaWRlczogKCkgPT4ge30sXG4gIGdldE92ZXJyaWRlczogKCkgPT4gKHt9KSxcbiAgZmx1c2g6ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxuICByZWNvcmRQYWdlVmlldzogKCkgPT4ge30sXG4gIHN0YXR1czogKCk6IFNES1N0YXR1cyA9PiAoe1xuICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICBvbmxpbmU6IGZhbHNlLFxuICAgIHF1ZXVlRGVwdGg6IDAsXG4gICAgb2ZmbGluZVF1ZXVlRGVwdGg6IDAsXG4gICAgbGFzdEZsdXNoQXQ6IG51bGwsXG4gICAgZGV2aWNlSWQ6IG51bGwsXG4gICAgdXNlcklkOiBudWxsLFxuICAgIGZsYWdDb3VudDogMCxcbiAgICBleHBlcmltZW50Q291bnQ6IDAsXG4gICAgc2RrVmVyc2lvbjogXCJub29wXCIsXG4gIH0pLFxuICBkZXN0cm95OiAoKSA9PiB7fSxcbiAgZGlhZ25vc3RpY3M6ICgpID0+IG5vb3BCdXMsXG4gIGdldFJlY2VudERpYWdub3N0aWNzOiAoKSA9PiBbXSxcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IElHb2FUZWNoIH0gZnJvbSBcIkBnb2F0ZWNoL3Nkay1qc1wiO1xuaW1wb3J0IHsgbm9vcENsaWVudCB9IGZyb20gXCIuL25vb3AtY2xpZW50LmpzXCI7XG5cbi8qKlxuICogSW50ZXJuYWwgY29udGV4dCDigJQgY29uc3VtZXJzIHNob3VsZCB1c2UgdGhlIGB1c2VHb2FUZWNoKClgIGhvb2suXG4gKiBFeHBvcnRlZCBvbmx5IGZvciBUZXN0UHJvdmlkZXIgdG8gaW5qZWN0IGEgbW9jayBjbGllbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBHb2FUZWNoQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8SUdvYVRlY2g+KG5vb3BDbGllbnQpO1xuIl19
@@ -1,11 +0,0 @@
1
- import { IGoaTech } from '@goatech/sdk-js';
2
-
3
- /**
4
- * Silent no-op client. Used when:
5
- * - SDK is not yet initialized (SSR, initial render)
6
- * - API key is not configured (local dev)
7
- * - Tests that don't care about analytics
8
- */
9
- declare const noopClient: IGoaTech;
10
-
11
- export { noopClient as n };
@@ -1,11 +0,0 @@
1
- import { IGoaTech } from '@goatech/sdk-js';
2
-
3
- /**
4
- * Silent no-op client. Used when:
5
- * - SDK is not yet initialized (SSR, initial render)
6
- * - API key is not configured (local dev)
7
- * - Tests that don't care about analytics
8
- */
9
- declare const noopClient: IGoaTech;
10
-
11
- export { noopClient as n };