@watchupltd/svelte 0.1.1 → 0.2.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/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { getWatchup } from './context.mjs';
2
2
  export { traceAction, trackClick } from './action.mjs';
3
- import { WatchupUser } from '@watchupltd/browser';
4
- export { ErrorPayload, EventPayload, TracePayload, WatchupOptions, WatchupUser } from '@watchupltd/browser';
3
+ import { WatchupUser, FlagContext } from '@watchupltd/browser';
4
+ export { ErrorPayload, EventPayload, FeatureFlag, FlagContext, TracePayload, WatchupOptions, WatchupUser } from '@watchupltd/browser';
5
5
  import 'svelte/action';
6
6
 
7
7
  /**
@@ -22,4 +22,24 @@ declare function identify(user: WatchupUser): void;
22
22
  */
23
23
  declare function clearUser(): void;
24
24
 
25
- export { clearUser, identify };
25
+ /**
26
+ * Check whether a feature flag is enabled for the current visitor/user.
27
+ *
28
+ * @example
29
+ * import { isFlagEnabled } from '@watchupltd/svelte';
30
+ * {#if isFlagEnabled('new-checkout')}
31
+ * <NewCheckout />
32
+ * {/if}
33
+ */
34
+ declare function isFlagEnabled(key: string, ctx?: FlagContext): boolean;
35
+ /**
36
+ * Get the variant key for a multivariate (A/B) flag.
37
+ * Returns `"control"` if the flag is off or the visitor isn't in the rollout.
38
+ *
39
+ * @example
40
+ * import { getFlagVariant } from '@watchupltd/svelte';
41
+ * const variant = getFlagVariant('pricing-layout');
42
+ */
43
+ declare function getFlagVariant(key: string, ctx?: FlagContext): string;
44
+
45
+ export { clearUser, getFlagVariant, identify, isFlagEnabled };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { getWatchup } from './context.js';
2
2
  export { traceAction, trackClick } from './action.js';
3
- import { WatchupUser } from '@watchupltd/browser';
4
- export { ErrorPayload, EventPayload, TracePayload, WatchupOptions, WatchupUser } from '@watchupltd/browser';
3
+ import { WatchupUser, FlagContext } from '@watchupltd/browser';
4
+ export { ErrorPayload, EventPayload, FeatureFlag, FlagContext, TracePayload, WatchupOptions, WatchupUser } from '@watchupltd/browser';
5
5
  import 'svelte/action';
6
6
 
7
7
  /**
@@ -22,4 +22,24 @@ declare function identify(user: WatchupUser): void;
22
22
  */
23
23
  declare function clearUser(): void;
24
24
 
25
- export { clearUser, identify };
25
+ /**
26
+ * Check whether a feature flag is enabled for the current visitor/user.
27
+ *
28
+ * @example
29
+ * import { isFlagEnabled } from '@watchupltd/svelte';
30
+ * {#if isFlagEnabled('new-checkout')}
31
+ * <NewCheckout />
32
+ * {/if}
33
+ */
34
+ declare function isFlagEnabled(key: string, ctx?: FlagContext): boolean;
35
+ /**
36
+ * Get the variant key for a multivariate (A/B) flag.
37
+ * Returns `"control"` if the flag is off or the visitor isn't in the rollout.
38
+ *
39
+ * @example
40
+ * import { getFlagVariant } from '@watchupltd/svelte';
41
+ * const variant = getFlagVariant('pricing-layout');
42
+ */
43
+ declare function getFlagVariant(key: string, ctx?: FlagContext): string;
44
+
45
+ export { clearUser, getFlagVariant, identify, isFlagEnabled };
package/dist/index.js CHANGED
@@ -60,9 +60,19 @@ function clearUser() {
60
60
  getWatchup().clearUser();
61
61
  }
62
62
 
63
+ // src/flags.ts
64
+ function isFlagEnabled(key, ctx) {
65
+ return getWatchup().isEnabled(key, ctx);
66
+ }
67
+ function getFlagVariant(key, ctx) {
68
+ return getWatchup().getVariant(key, ctx);
69
+ }
70
+
63
71
  exports.clearUser = clearUser;
72
+ exports.getFlagVariant = getFlagVariant;
64
73
  exports.getWatchup = getWatchup;
65
74
  exports.identify = identify;
75
+ exports.isFlagEnabled = isFlagEnabled;
66
76
  exports.traceAction = traceAction;
67
77
  exports.trackClick = trackClick;
68
78
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.ts","../src/action.ts","../src/identify.ts"],"names":["getContext"],"mappings":";;;;;AAOA,IAAM,GAAA,0BAAa,SAAS,CAAA;AAkBrB,SAAS,UAAA,GAAsB;AACpC,EAAA,MAAM,QAAA,GAAWA,kBAAgC,GAAG,CAAA;AACpD,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;;;ACRO,IAAM,UAAA,GAAoD,CAC/D,IAAA,EACA,MAAA,KACG;AACH,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,UAAA,EAAW;AAAA,EACvB,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,UAAU,CAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,OAAO,CAAA;AAEtC,EAAA,OAAO;AAAA,IACL,OAAO,SAAA,EAAW;AAChB,MAAA,MAAA,GAAS,SAAA;AAAA,IACX,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAAA,IAC3C;AAAA,GACF;AACF;AAsBO,IAAM,WAAA,GAGT,CAAC,IAAA,EAAM,MAAA,KAAW;AACpB,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,UAAA,EAAW;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,OAAO,MAAM;AAAA,IAAC,CAAC,CAAA;AACtB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AAC1C,EAAA,MAAA,CAAO,OAAO,MAAM,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAEzC,EAAA,OAAO;AAAA,IACL,OAAA,GAAU;AAAA,IAEV;AAAA,GACF;AACF;;;AC/EO,SAAS,SAAS,IAAA,EAAyB;AAChD,EAAA,UAAA,EAAW,CAAE,QAAQ,IAAI,CAAA;AAC3B;AASO,SAAS,SAAA,GAAkB;AAChC,EAAA,UAAA,GAAa,SAAA,EAAU;AACzB","file":"index.js","sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · context helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport { getContext, setContext } from 'svelte';\nimport type { Watchup } from '@watchupltd/browser';\n\nconst KEY = Symbol('watchup');\n\n/** Called internally by WatchupProvider. */\nexport function _setWatchupContext(instance: Watchup): void {\n setContext(KEY, instance);\n}\n\n/**\n * Returns the `Watchup` instance from the nearest `<WatchupProvider>`.\n * Call this at component initialisation time (not inside event handlers).\n *\n * @example\n * <script>\n * import { getWatchup } from '@watchupltd/svelte';\n * const watchup = getWatchup();\n * </script>\n * <button on:click={() => watchup.track('button.clicked')}>Click me</button>\n */\nexport function getWatchup(): Watchup {\n const instance = getContext<Watchup | undefined>(KEY);\n if (!instance) {\n throw new Error(\n '[watchup] getWatchup() must be called inside a component ' +\n 'that is a descendant of <WatchupProvider>.',\n );\n }\n return instance;\n}\n","// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · Svelte actions\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type { Action } from 'svelte/action';\nimport type { Watchup } from '@watchupltd/browser';\nimport { getWatchup } from './context.js';\n\ninterface TrackClickParams {\n /** Event name sent to Watchup. */\n event: string;\n /** Optional properties merged into the event payload. */\n properties?: Record<string, unknown>;\n}\n\n/**\n * Svelte action that tracks a click event.\n *\n * @example\n * <script>\n * import { trackClick } from '@watchupltd/svelte';\n * </script>\n * <button use:trackClick={{ event: 'cta.clicked', properties: { variant: 'A' } }}>\n * Get started\n * </button>\n */\nexport const trackClick: Action<HTMLElement, TrackClickParams> = (\n node,\n params,\n) => {\n let watchup: Watchup;\n try {\n watchup = getWatchup();\n } catch {\n // No provider in tree — silently no-op\n return {};\n }\n\n const handler = () => {\n watchup.track(params.event, params.properties);\n };\n\n node.addEventListener('click', handler);\n\n return {\n update(newParams) {\n params = newParams;\n },\n destroy() {\n node.removeEventListener('click', handler);\n },\n };\n};\n\n/**\n * Svelte action that traces the time between `mount` and when `done()` is\n * called, emitting a trace span.\n *\n * @example\n * <script>\n * import { traceAction } from '@watchupltd/svelte';\n *\n * let done: () => void;\n *\n * async function load() {\n * const data = await fetchData();\n * done?.();\n * return data;\n * }\n * </script>\n * <div use:traceAction={{ span: 'dashboard load', onDone: (fn) => (done = fn) }}>\n * ...\n * </div>\n */\nexport const traceAction: Action<\n HTMLElement,\n { span: string; onDone: (endFn: () => void) => void }\n> = (node, params) => {\n let watchup: Watchup;\n try {\n watchup = getWatchup();\n } catch {\n params.onDone(() => {});\n return {};\n }\n\n const end = watchup.startTrace(params.span);\n params.onDone(() => end({ status: 'ok' }));\n\n return {\n destroy() {\n // If destroyed before done() was called, mark as cancelled\n },\n };\n};\n","// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · user identification helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type { WatchupUser } from '@watchupltd/browser';\nimport { getWatchup } from './context.js';\n\n/**\n * Attach a user to all subsequent errors and traces.\n * Call this after login, inside a Svelte component or store subscription.\n *\n * @example\n * import { identify } from '@watchupltd/svelte';\n * identify({ id: $user.id, email: $user.email, name: $user.name });\n */\nexport function identify(user: WatchupUser): void {\n getWatchup().setUser(user);\n}\n\n/**\n * Remove the current user context (e.g. after logout).\n *\n * @example\n * import { clearUser } from '@watchupltd/svelte';\n * clearUser();\n */\nexport function clearUser(): void {\n getWatchup().clearUser();\n}\n"]}
1
+ {"version":3,"sources":["../src/context.ts","../src/action.ts","../src/identify.ts","../src/flags.ts"],"names":["getContext"],"mappings":";;;;;AAOA,IAAM,GAAA,0BAAa,SAAS,CAAA;AAkBrB,SAAS,UAAA,GAAsB;AACpC,EAAA,MAAM,QAAA,GAAWA,kBAAgC,GAAG,CAAA;AACpD,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;;;ACRO,IAAM,UAAA,GAAoD,CAC/D,IAAA,EACA,MAAA,KACG;AACH,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,UAAA,EAAW;AAAA,EACvB,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,UAAU,CAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,OAAO,CAAA;AAEtC,EAAA,OAAO;AAAA,IACL,OAAO,SAAA,EAAW;AAChB,MAAA,MAAA,GAAS,SAAA;AAAA,IACX,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAAA,IAC3C;AAAA,GACF;AACF;AAsBO,IAAM,WAAA,GAGT,CAAC,IAAA,EAAM,MAAA,KAAW;AACpB,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,UAAA,EAAW;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,OAAO,MAAM;AAAA,IAAC,CAAC,CAAA;AACtB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AAC1C,EAAA,MAAA,CAAO,OAAO,MAAM,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAEzC,EAAA,OAAO;AAAA,IACL,OAAA,GAAU;AAAA,IAEV;AAAA,GACF;AACF;;;AC/EO,SAAS,SAAS,IAAA,EAAyB;AAChD,EAAA,UAAA,EAAW,CAAE,QAAQ,IAAI,CAAA;AAC3B;AASO,SAAS,SAAA,GAAkB;AAChC,EAAA,UAAA,GAAa,SAAA,EAAU;AACzB;;;ACZO,SAAS,aAAA,CAAc,KAAa,GAAA,EAA4B;AACrE,EAAA,OAAO,UAAA,EAAW,CAAE,SAAA,CAAU,GAAA,EAAK,GAAG,CAAA;AACxC;AAUO,SAAS,cAAA,CAAe,KAAa,GAAA,EAA2B;AACrE,EAAA,OAAO,UAAA,EAAW,CAAE,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AACzC","file":"index.js","sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · context helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport { getContext, setContext } from 'svelte';\nimport type { Watchup } from '@watchupltd/browser';\n\nconst KEY = Symbol('watchup');\n\n/** Called internally by WatchupProvider. */\nexport function _setWatchupContext(instance: Watchup): void {\n setContext(KEY, instance);\n}\n\n/**\n * Returns the `Watchup` instance from the nearest `<WatchupProvider>`.\n * Call this at component initialisation time (not inside event handlers).\n *\n * @example\n * <script>\n * import { getWatchup } from '@watchupltd/svelte';\n * const watchup = getWatchup();\n * </script>\n * <button on:click={() => watchup.track('button.clicked')}>Click me</button>\n */\nexport function getWatchup(): Watchup {\n const instance = getContext<Watchup | undefined>(KEY);\n if (!instance) {\n throw new Error(\n '[watchup] getWatchup() must be called inside a component ' +\n 'that is a descendant of <WatchupProvider>.',\n );\n }\n return instance;\n}\n","// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · Svelte actions\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type { Action } from 'svelte/action';\nimport type { Watchup } from '@watchupltd/browser';\nimport { getWatchup } from './context.js';\n\ninterface TrackClickParams {\n /** Event name sent to Watchup. */\n event: string;\n /** Optional properties merged into the event payload. */\n properties?: Record<string, unknown>;\n}\n\n/**\n * Svelte action that tracks a click event.\n *\n * @example\n * <script>\n * import { trackClick } from '@watchupltd/svelte';\n * </script>\n * <button use:trackClick={{ event: 'cta.clicked', properties: { variant: 'A' } }}>\n * Get started\n * </button>\n */\nexport const trackClick: Action<HTMLElement, TrackClickParams> = (\n node,\n params,\n) => {\n let watchup: Watchup;\n try {\n watchup = getWatchup();\n } catch {\n // No provider in tree — silently no-op\n return {};\n }\n\n const handler = () => {\n watchup.track(params.event, params.properties);\n };\n\n node.addEventListener('click', handler);\n\n return {\n update(newParams) {\n params = newParams;\n },\n destroy() {\n node.removeEventListener('click', handler);\n },\n };\n};\n\n/**\n * Svelte action that traces the time between `mount` and when `done()` is\n * called, emitting a trace span.\n *\n * @example\n * <script>\n * import { traceAction } from '@watchupltd/svelte';\n *\n * let done: () => void;\n *\n * async function load() {\n * const data = await fetchData();\n * done?.();\n * return data;\n * }\n * </script>\n * <div use:traceAction={{ span: 'dashboard load', onDone: (fn) => (done = fn) }}>\n * ...\n * </div>\n */\nexport const traceAction: Action<\n HTMLElement,\n { span: string; onDone: (endFn: () => void) => void }\n> = (node, params) => {\n let watchup: Watchup;\n try {\n watchup = getWatchup();\n } catch {\n params.onDone(() => {});\n return {};\n }\n\n const end = watchup.startTrace(params.span);\n params.onDone(() => end({ status: 'ok' }));\n\n return {\n destroy() {\n // If destroyed before done() was called, mark as cancelled\n },\n };\n};\n","// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · user identification helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type { WatchupUser } from '@watchupltd/browser';\nimport { getWatchup } from './context.js';\n\n/**\n * Attach a user to all subsequent errors and traces.\n * Call this after login, inside a Svelte component or store subscription.\n *\n * @example\n * import { identify } from '@watchupltd/svelte';\n * identify({ id: $user.id, email: $user.email, name: $user.name });\n */\nexport function identify(user: WatchupUser): void {\n getWatchup().setUser(user);\n}\n\n/**\n * Remove the current user context (e.g. after logout).\n *\n * @example\n * import { clearUser } from '@watchupltd/svelte';\n * clearUser();\n */\nexport function clearUser(): void {\n getWatchup().clearUser();\n}\n","// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · feature flag helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type { FlagContext } from '@watchupltd/browser';\nimport { getWatchup } from './context.js';\n\n/**\n * Check whether a feature flag is enabled for the current visitor/user.\n *\n * @example\n * import { isFlagEnabled } from '@watchupltd/svelte';\n * {#if isFlagEnabled('new-checkout')}\n * <NewCheckout />\n * {/if}\n */\nexport function isFlagEnabled(key: string, ctx?: FlagContext): boolean {\n return getWatchup().isEnabled(key, ctx);\n}\n\n/**\n * Get the variant key for a multivariate (A/B) flag.\n * Returns `\"control\"` if the flag is off or the visitor isn't in the rollout.\n *\n * @example\n * import { getFlagVariant } from '@watchupltd/svelte';\n * const variant = getFlagVariant('pricing-layout');\n */\nexport function getFlagVariant(key: string, ctx?: FlagContext): string {\n return getWatchup().getVariant(key, ctx);\n}\n"]}
package/dist/index.mjs CHANGED
@@ -10,6 +10,14 @@ function clearUser() {
10
10
  getWatchup().clearUser();
11
11
  }
12
12
 
13
- export { clearUser, identify };
13
+ // src/flags.ts
14
+ function isFlagEnabled(key, ctx) {
15
+ return getWatchup().isEnabled(key, ctx);
16
+ }
17
+ function getFlagVariant(key, ctx) {
18
+ return getWatchup().getVariant(key, ctx);
19
+ }
20
+
21
+ export { clearUser, getFlagVariant, identify, isFlagEnabled };
14
22
  //# sourceMappingURL=index.mjs.map
15
23
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/identify.ts"],"names":[],"mappings":";;;;;AAeO,SAAS,SAAS,IAAA,EAAyB;AAChD,EAAA,UAAA,EAAW,CAAE,QAAQ,IAAI,CAAA;AAC3B;AASO,SAAS,SAAA,GAAkB;AAChC,EAAA,UAAA,GAAa,SAAA,EAAU;AACzB","file":"index.mjs","sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · user identification helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type { WatchupUser } from '@watchupltd/browser';\nimport { getWatchup } from './context.js';\n\n/**\n * Attach a user to all subsequent errors and traces.\n * Call this after login, inside a Svelte component or store subscription.\n *\n * @example\n * import { identify } from '@watchupltd/svelte';\n * identify({ id: $user.id, email: $user.email, name: $user.name });\n */\nexport function identify(user: WatchupUser): void {\n getWatchup().setUser(user);\n}\n\n/**\n * Remove the current user context (e.g. after logout).\n *\n * @example\n * import { clearUser } from '@watchupltd/svelte';\n * clearUser();\n */\nexport function clearUser(): void {\n getWatchup().clearUser();\n}\n"]}
1
+ {"version":3,"sources":["../src/identify.ts","../src/flags.ts"],"names":[],"mappings":";;;;;AAeO,SAAS,SAAS,IAAA,EAAyB;AAChD,EAAA,UAAA,EAAW,CAAE,QAAQ,IAAI,CAAA;AAC3B;AASO,SAAS,SAAA,GAAkB;AAChC,EAAA,UAAA,GAAa,SAAA,EAAU;AACzB;;;ACZO,SAAS,aAAA,CAAc,KAAa,GAAA,EAA4B;AACrE,EAAA,OAAO,UAAA,EAAW,CAAE,SAAA,CAAU,GAAA,EAAK,GAAG,CAAA;AACxC;AAUO,SAAS,cAAA,CAAe,KAAa,GAAA,EAA2B;AACrE,EAAA,OAAO,UAAA,EAAW,CAAE,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AACzC","file":"index.mjs","sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · user identification helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type { WatchupUser } from '@watchupltd/browser';\nimport { getWatchup } from './context.js';\n\n/**\n * Attach a user to all subsequent errors and traces.\n * Call this after login, inside a Svelte component or store subscription.\n *\n * @example\n * import { identify } from '@watchupltd/svelte';\n * identify({ id: $user.id, email: $user.email, name: $user.name });\n */\nexport function identify(user: WatchupUser): void {\n getWatchup().setUser(user);\n}\n\n/**\n * Remove the current user context (e.g. after logout).\n *\n * @example\n * import { clearUser } from '@watchupltd/svelte';\n * clearUser();\n */\nexport function clearUser(): void {\n getWatchup().clearUser();\n}\n","// ─────────────────────────────────────────────────────────────────────────────\n// @watchupltd/svelte · feature flag helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type { FlagContext } from '@watchupltd/browser';\nimport { getWatchup } from './context.js';\n\n/**\n * Check whether a feature flag is enabled for the current visitor/user.\n *\n * @example\n * import { isFlagEnabled } from '@watchupltd/svelte';\n * {#if isFlagEnabled('new-checkout')}\n * <NewCheckout />\n * {/if}\n */\nexport function isFlagEnabled(key: string, ctx?: FlagContext): boolean {\n return getWatchup().isEnabled(key, ctx);\n}\n\n/**\n * Get the variant key for a multivariate (A/B) flag.\n * Returns `\"control\"` if the flag is off or the visitor isn't in the rollout.\n *\n * @example\n * import { getFlagVariant } from '@watchupltd/svelte';\n * const variant = getFlagVariant('pricing-layout');\n */\nexport function getFlagVariant(key: string, ctx?: FlagContext): string {\n return getWatchup().getVariant(key, ctx);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@watchupltd/svelte",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Official Watchup SDK for Svelte / SvelteKit — provider, context, and actions",
5
5
  "license": "MIT",
6
6
  "author": "Watchup Ltd",