@databuddy/sdk 2.1.75 → 2.1.77

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.
@@ -1,4 +1,7 @@
1
1
  import * as vue from 'vue';
2
+ import { App, ComputedRef } from 'vue';
3
+ import { d as FlagsConfig, c as FlagState, b as FlagResult } from '../shared/@databuddy/sdk.YfiY9DoZ.js';
4
+ export { e as FlagsContext } from '../shared/@databuddy/sdk.YfiY9DoZ.js';
2
5
 
3
6
  declare const Databuddy: vue.DefineComponent<{
4
7
  clientId?: {
@@ -145,6 +148,14 @@ declare const Databuddy: vue.DefineComponent<{
145
148
  type: NumberConstructor;
146
149
  required: false;
147
150
  } | undefined;
151
+ skipPatterns?: {
152
+ type: never;
153
+ required: false;
154
+ } | undefined;
155
+ maskPatterns?: {
156
+ type: never;
157
+ required: false;
158
+ } | undefined;
148
159
  }, () => null, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<{} & {
149
160
  sdk?: string | undefined;
150
161
  clientId?: string | undefined;
@@ -182,6 +193,37 @@ declare const Databuddy: vue.DefineComponent<{
182
193
  enableBatching?: boolean | undefined;
183
194
  batchSize?: number | undefined;
184
195
  batchTimeout?: number | undefined;
196
+ skipPatterns?: any;
197
+ maskPatterns?: any;
185
198
  }>, {}>;
186
199
 
187
- export { Databuddy };
200
+ interface FlagsPluginOptions extends FlagsConfig {
201
+ }
202
+ declare function createFlagsPlugin(options: FlagsPluginOptions): {
203
+ install(app: App): void;
204
+ };
205
+ declare function useFlags(): {
206
+ isEnabled: (key: string) => FlagState;
207
+ fetchAllFlags: () => Promise<void>;
208
+ updateUser: (user: FlagsConfig["user"]) => void;
209
+ refresh: (forceClear?: boolean) => void;
210
+ updateConfig: (config: FlagsConfig) => void;
211
+ memoryFlags: Record<string, FlagResult>;
212
+ };
213
+
214
+ interface UseFlagReturn {
215
+ enabled: ComputedRef<boolean>;
216
+ isLoading: ComputedRef<boolean>;
217
+ isReady: ComputedRef<boolean>;
218
+ state: ComputedRef<FlagState>;
219
+ }
220
+ /**
221
+ * Vue composable for individual flag usage with reactivity
222
+ */
223
+ declare function useFlag(key: string): UseFlagReturn;
224
+ /**
225
+ * Vue composable for boolean flag checking
226
+ */
227
+ declare function useBooleanFlag(key: string): ComputedRef<boolean>;
228
+
229
+ export { Databuddy, FlagResult, FlagState, FlagsConfig, createFlagsPlugin, useBooleanFlag, useFlag, useFlags };
@@ -1,5 +1,5 @@
1
- import { defineComponent, ref, onMounted, onUnmounted, watch } from 'vue';
2
- import { i as isScriptInjected, c as createScript } from '../shared/@databuddy/sdk.DsZP9wPD.mjs';
1
+ import { defineComponent, ref, onMounted, onUnmounted, watch, reactive, watchEffect, computed } from 'vue';
2
+ import { i as isScriptInjected, c as createScript, B as BrowserFlagStorage, C as CoreFlagsManager } from '../shared/@databuddy/sdk.DsZMb6-q.mjs';
3
3
 
4
4
  const Databuddy = defineComponent({
5
5
  props: {},
@@ -37,4 +37,88 @@ const Databuddy = defineComponent({
37
37
  }
38
38
  });
39
39
 
40
- export { Databuddy };
40
+ const FLAGS_SYMBOL = Symbol("flags");
41
+ let globalState = null;
42
+ let globalManager = null;
43
+ function createFlagsPlugin(options) {
44
+ return {
45
+ install(app) {
46
+ const storage = options.skipStorage ? void 0 : new BrowserFlagStorage();
47
+ const state = reactive({
48
+ memoryFlags: {},
49
+ pendingFlags: /* @__PURE__ */ new Set()
50
+ });
51
+ const manager = new CoreFlagsManager({
52
+ config: options,
53
+ storage,
54
+ onFlagsUpdate: (flags) => {
55
+ state.memoryFlags = flags;
56
+ }
57
+ });
58
+ globalManager = manager;
59
+ globalState = state;
60
+ app.provide(FLAGS_SYMBOL, state);
61
+ }
62
+ };
63
+ }
64
+ function useFlags() {
65
+ if (!globalState) {
66
+ throw new Error(
67
+ "Flags plugin not installed. Install with app.use(createFlagsPlugin(config))"
68
+ );
69
+ }
70
+ if (!globalManager) {
71
+ throw new Error(
72
+ "Flags manager not initialized. Please reinstall the plugin."
73
+ );
74
+ }
75
+ const state = globalState;
76
+ const manager = globalManager;
77
+ const isEnabled = (key) => {
78
+ return manager.isEnabled(key);
79
+ };
80
+ const fetchAllFlags = () => {
81
+ return manager.fetchAllFlags();
82
+ };
83
+ const updateUser = (user) => {
84
+ manager.updateUser(user);
85
+ };
86
+ const refresh = (forceClear = false) => {
87
+ manager.refresh(forceClear);
88
+ };
89
+ const updateConfig = (config) => {
90
+ manager.updateConfig(config);
91
+ };
92
+ return {
93
+ isEnabled,
94
+ fetchAllFlags,
95
+ updateUser,
96
+ refresh,
97
+ updateConfig,
98
+ memoryFlags: state.memoryFlags
99
+ };
100
+ }
101
+
102
+ function useFlag(key) {
103
+ const { isEnabled } = useFlags();
104
+ const flagState = ref({
105
+ enabled: false,
106
+ isLoading: true,
107
+ isReady: false
108
+ });
109
+ watchEffect(() => {
110
+ flagState.value = isEnabled(key);
111
+ });
112
+ return {
113
+ enabled: computed(() => flagState.value.enabled),
114
+ isLoading: computed(() => flagState.value.isLoading),
115
+ isReady: computed(() => flagState.value.isReady),
116
+ state: computed(() => flagState.value)
117
+ };
118
+ }
119
+ function useBooleanFlag(key) {
120
+ const { enabled } = useFlag(key);
121
+ return enabled;
122
+ }
123
+
124
+ export { Databuddy, createFlagsPlugin, useBooleanFlag, useFlag, useFlags };
package/package.json CHANGED
@@ -1,58 +1,58 @@
1
- {
2
- "name": "@databuddy/sdk",
3
- "version": "2.1.75",
4
- "description": "Official Databuddy Analytics SDK",
5
- "main": "./dist/core/index.mjs",
6
- "types": "./dist/core/index.d.ts",
7
- "license": "MIT",
8
- "private": false,
9
- "scripts": {
10
- "build": "unbuild"
11
- },
12
- "dependencies": {
13
- "jotai": ">=2.0.0"
14
- },
15
- "devDependencies": {
16
- "@types/node": "^20.0.0",
17
- "@vitejs/plugin-react": "^5.0.0",
18
- "typescript": "catalog:",
19
- "unbuild": "^3.6.1"
20
- },
21
- "peerDependencies": {
22
- "react": ">=18",
23
- "vue": ">=3"
24
- },
25
- "peerDependenciesMeta": {
26
- "react": {
27
- "optional": true
28
- },
29
- "vue": {
30
- "optional": true
31
- }
32
- },
33
- "exports": {
34
- ".": {
35
- "types": "./dist/core/index.d.ts",
36
- "import": "./dist/core/index.mjs"
37
- },
38
- "./react": {
39
- "types": "./dist/react/index.d.ts",
40
- "import": "./dist/react/index.mjs"
41
- },
42
- "./vue": {
43
- "types": "./dist/vue/index.d.ts",
44
- "import": "./dist/vue/index.mjs"
45
- }
46
- },
47
- "files": [
48
- "dist"
49
- ],
50
- "keywords": [
51
- "analytics",
52
- "tracking",
53
- "databuddy",
54
- "sdk",
55
- "react",
56
- "vue"
57
- ]
58
- }
1
+ {
2
+ "name": "@databuddy/sdk",
3
+ "version": "2.1.77",
4
+ "description": "Official Databuddy Analytics SDK",
5
+ "main": "./dist/core/index.mjs",
6
+ "types": "./dist/core/index.d.ts",
7
+ "license": "MIT",
8
+ "private": false,
9
+ "scripts": {
10
+ "build": "unbuild"
11
+ },
12
+ "dependencies": {
13
+ "jotai": ">=2.0.0"
14
+ },
15
+ "devDependencies": {
16
+ "@types/node": "^20.0.0",
17
+ "@vitejs/plugin-react": "^5.0.0",
18
+ "typescript": "catalog:",
19
+ "unbuild": "^3.6.1"
20
+ },
21
+ "peerDependencies": {
22
+ "react": ">=18",
23
+ "vue": ">=3"
24
+ },
25
+ "peerDependenciesMeta": {
26
+ "react": {
27
+ "optional": true
28
+ },
29
+ "vue": {
30
+ "optional": true
31
+ }
32
+ },
33
+ "exports": {
34
+ ".": {
35
+ "types": "./dist/core/index.d.ts",
36
+ "import": "./dist/core/index.mjs"
37
+ },
38
+ "./react": {
39
+ "types": "./dist/react/index.d.ts",
40
+ "import": "./dist/react/index.mjs"
41
+ },
42
+ "./vue": {
43
+ "types": "./dist/vue/index.d.ts",
44
+ "import": "./dist/vue/index.mjs"
45
+ }
46
+ },
47
+ "files": [
48
+ "dist"
49
+ ],
50
+ "keywords": [
51
+ "analytics",
52
+ "tracking",
53
+ "databuddy",
54
+ "sdk",
55
+ "react",
56
+ "vue"
57
+ ]
58
+ }
@@ -1,25 +0,0 @@
1
- const version = "2.1.7";
2
-
3
- const INJECTED_SCRIPT_ATTRIBUTE = "data-databuddy-injected";
4
- function isScriptInjected() {
5
- return !!document.querySelector(`script[${INJECTED_SCRIPT_ATTRIBUTE}]`);
6
- }
7
- function createScript({
8
- scriptUrl,
9
- sdkVersion,
10
- ...props
11
- }) {
12
- const script = document.createElement("script");
13
- script.src = scriptUrl || "https://cdn.databuddy.cc/databuddy.js";
14
- script.async = true;
15
- script.crossOrigin = "anonymous";
16
- script.setAttribute(INJECTED_SCRIPT_ATTRIBUTE, "true");
17
- script.setAttribute("data-sdk-version", sdkVersion || version);
18
- for (const [key, value] of Object.entries(props)) {
19
- const dataKey = `data-${key.replace(/([A-Z])/g, "-$1").toLowerCase()}`;
20
- script.setAttribute(dataKey, String(value));
21
- }
22
- return script;
23
- }
24
-
25
- export { createScript as c, isScriptInjected as i };