@absmartly/sdk-plugins 1.1.2 → 1.2.1

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.
Files changed (98) hide show
  1. package/dist/absmartly-dom-changes-core.min.js +1 -1
  2. package/dist/absmartly-dom-changes-lite.min.js +1 -1
  3. package/dist/absmartly-overrides-full.min.js +1 -1
  4. package/dist/absmartly-overrides-lite.min.js +1 -1
  5. package/dist/absmartly-sdk-plugins.min.js +1 -1
  6. package/es/core/DOMChangesPluginLite.js +192 -220
  7. package/es/core/DOMChangesPluginLite.js.map +1 -1
  8. package/es/core/DOMManipulatorLite.js +66 -9
  9. package/es/core/DOMManipulatorLite.js.map +1 -1
  10. package/es/core/ExposureTracker.js +136 -11
  11. package/es/core/ExposureTracker.js.map +1 -1
  12. package/es/entries/dom-with-overrides-lite.js +3 -0
  13. package/es/entries/dom-with-overrides-lite.js.map +1 -1
  14. package/es/index.js +9 -2
  15. package/es/index.js.map +1 -1
  16. package/es/overrides/OverridesPlugin.js +2 -2
  17. package/es/overrides/OverridesPlugin.js.map +1 -1
  18. package/es/overrides/OverridesPluginLite.js +29 -1
  19. package/es/overrides/OverridesPluginLite.js.map +1 -1
  20. package/es/overrides/overridesUtils.js +27 -18
  21. package/es/overrides/overridesUtils.js.map +1 -1
  22. package/es/parsers/VariantExtractor.js +14 -7
  23. package/es/parsers/VariantExtractor.js.map +1 -1
  24. package/es/url-redirect/URLRedirectExtractor.js +185 -0
  25. package/es/url-redirect/URLRedirectExtractor.js.map +1 -0
  26. package/es/url-redirect/URLRedirectMatcher.js +115 -0
  27. package/es/url-redirect/URLRedirectMatcher.js.map +1 -0
  28. package/es/url-redirect/URLRedirectPlugin.js +350 -0
  29. package/es/url-redirect/URLRedirectPlugin.js.map +1 -0
  30. package/es/url-redirect/index.js +5 -0
  31. package/es/url-redirect/index.js.map +1 -0
  32. package/es/url-redirect/types.js +2 -0
  33. package/es/url-redirect/types.js.map +1 -0
  34. package/es/utils/persistence.js +278 -0
  35. package/es/utils/persistence.js.map +1 -0
  36. package/es/utils/plugin-registry.js +47 -0
  37. package/es/utils/plugin-registry.js.map +1 -0
  38. package/lib/core/DOMChangesPluginLite.d.ts +10 -7
  39. package/lib/core/DOMChangesPluginLite.js +192 -220
  40. package/lib/core/DOMChangesPluginLite.js.map +1 -1
  41. package/lib/core/DOMManipulatorLite.js +66 -9
  42. package/lib/core/DOMManipulatorLite.js.map +1 -1
  43. package/lib/core/ExposureTracker.d.ts +6 -0
  44. package/lib/core/ExposureTracker.js +136 -11
  45. package/lib/core/ExposureTracker.js.map +1 -1
  46. package/lib/entries/dom-with-overrides-lite.d.ts +2 -0
  47. package/lib/entries/dom-with-overrides-lite.js +3 -1
  48. package/lib/entries/dom-with-overrides-lite.js.map +1 -1
  49. package/lib/index.d.ts +8 -2
  50. package/lib/index.js +17 -1
  51. package/lib/index.js.map +1 -1
  52. package/lib/overrides/OverridesPlugin.js +2 -2
  53. package/lib/overrides/OverridesPlugin.js.map +1 -1
  54. package/lib/overrides/OverridesPluginLite.d.ts +8 -0
  55. package/lib/overrides/OverridesPluginLite.js +29 -1
  56. package/lib/overrides/OverridesPluginLite.js.map +1 -1
  57. package/lib/overrides/overridesUtils.d.ts +10 -5
  58. package/lib/overrides/overridesUtils.js +28 -18
  59. package/lib/overrides/overridesUtils.js.map +1 -1
  60. package/lib/parsers/VariantExtractor.js +14 -7
  61. package/lib/parsers/VariantExtractor.js.map +1 -1
  62. package/lib/types/index.d.ts +1 -0
  63. package/lib/url-redirect/URLRedirectExtractor.d.ts +16 -0
  64. package/lib/url-redirect/URLRedirectExtractor.js +188 -0
  65. package/lib/url-redirect/URLRedirectExtractor.js.map +1 -0
  66. package/lib/url-redirect/URLRedirectMatcher.d.ts +8 -0
  67. package/lib/url-redirect/URLRedirectMatcher.js +118 -0
  68. package/lib/url-redirect/URLRedirectMatcher.js.map +1 -0
  69. package/lib/url-redirect/URLRedirectPlugin.d.ts +21 -0
  70. package/lib/url-redirect/URLRedirectPlugin.js +353 -0
  71. package/lib/url-redirect/URLRedirectPlugin.js.map +1 -0
  72. package/lib/url-redirect/index.d.ts +4 -0
  73. package/lib/url-redirect/index.js +25 -0
  74. package/lib/url-redirect/index.js.map +1 -0
  75. package/lib/url-redirect/types.d.ts +29 -0
  76. package/lib/url-redirect/types.js +3 -0
  77. package/lib/url-redirect/types.js.map +1 -0
  78. package/lib/utils/persistence.d.ts +23 -0
  79. package/lib/utils/persistence.js +281 -0
  80. package/lib/utils/persistence.js.map +1 -0
  81. package/lib/utils/plugin-registry.d.ts +40 -0
  82. package/lib/utils/plugin-registry.js +53 -0
  83. package/lib/utils/plugin-registry.js.map +1 -0
  84. package/package.json +59 -3
  85. package/types/core/DOMChangesPluginLite.d.ts +10 -7
  86. package/types/core/ExposureTracker.d.ts +6 -0
  87. package/types/entries/dom-with-overrides-lite.d.ts +2 -0
  88. package/types/index.d.ts +8 -2
  89. package/types/overrides/OverridesPluginLite.d.ts +8 -0
  90. package/types/overrides/overridesUtils.d.ts +10 -5
  91. package/types/types/index.d.ts +1 -0
  92. package/types/url-redirect/URLRedirectExtractor.d.ts +16 -0
  93. package/types/url-redirect/URLRedirectMatcher.d.ts +8 -0
  94. package/types/url-redirect/URLRedirectPlugin.d.ts +21 -0
  95. package/types/url-redirect/index.d.ts +4 -0
  96. package/types/url-redirect/types.d.ts +29 -0
  97. package/types/utils/persistence.d.ts +23 -0
  98. package/types/utils/plugin-registry.d.ts +40 -0
@@ -0,0 +1,8 @@
1
+ import { URLRedirect, RedirectMatch } from './types';
2
+ export declare class URLRedirectMatcher {
3
+ static findMatch(currentUrl: string, redirects: URLRedirect[], experimentName: string, variant: number): RedirectMatch | null;
4
+ private static matchRedirect;
5
+ private static matchDomainRedirect;
6
+ private static matchPageRedirect;
7
+ static buildTargetUrl(currentUrl: string, redirect: URLRedirect): string;
8
+ }
@@ -0,0 +1,21 @@
1
+ import { URLRedirectPluginConfig, RedirectMatch } from './types';
2
+ import { URLRedirectExtractor } from './URLRedirectExtractor';
3
+ export declare class URLRedirectPlugin {
4
+ static readonly VERSION: string;
5
+ private config;
6
+ private extractor;
7
+ private initialized;
8
+ private readyPromise;
9
+ constructor(config: URLRedirectPluginConfig);
10
+ ready(): Promise<RedirectMatch | null>;
11
+ private initialize;
12
+ findRedirectMatch(url?: string): RedirectMatch | null;
13
+ private getAnyConfig;
14
+ executeRedirect(match: RedirectMatch): Promise<void>;
15
+ private publishViaBeacon;
16
+ getExtractor(): URLRedirectExtractor;
17
+ refreshExperiments(): void;
18
+ destroy(): void;
19
+ private registerWithContext;
20
+ private unregisterFromContext;
21
+ }
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export { URLRedirectPlugin } from './URLRedirectPlugin';
3
+ export { URLRedirectExtractor } from './URLRedirectExtractor';
4
+ export { URLRedirectMatcher } from './URLRedirectMatcher';
@@ -0,0 +1,29 @@
1
+ import type { URLFilter } from '../types';
2
+ export type RedirectType = 'domain' | 'page';
3
+ export type ControlBehavior = 'redirect-same' | 'no-redirect';
4
+ export interface URLRedirect {
5
+ from: string;
6
+ to: string;
7
+ preservePath?: boolean;
8
+ type: RedirectType;
9
+ }
10
+ export interface URLRedirectConfig {
11
+ redirects: URLRedirect[];
12
+ urlFilter?: URLFilter;
13
+ controlBehavior?: ControlBehavior;
14
+ }
15
+ export interface RedirectMatch {
16
+ redirect: URLRedirect;
17
+ targetUrl: string;
18
+ experimentName: string;
19
+ variant: number;
20
+ isControl: boolean;
21
+ }
22
+ export interface URLRedirectPluginConfig {
23
+ context: import('../types').ABsmartlyContext;
24
+ variableName?: string;
25
+ debug?: boolean;
26
+ autoApply?: boolean;
27
+ useBeacon?: boolean;
28
+ onBeforeRedirect?: (match: RedirectMatch) => void | Promise<void>;
29
+ }
@@ -0,0 +1,23 @@
1
+ import type { DOMChange } from '../types';
2
+ export interface PersistenceConfig {
3
+ debug?: boolean;
4
+ onReapply: (change: DOMChange, experimentName: string) => void;
5
+ }
6
+ export declare class DOMPersistenceManager {
7
+ private watchedElements;
8
+ private persistenceObserver;
9
+ private reapplyingElements;
10
+ private reapplyLogThrottle;
11
+ private appliedChanges;
12
+ private config;
13
+ constructor(config: PersistenceConfig);
14
+ watchElement(element: Element, experimentName: string, change: DOMChange): void;
15
+ unwatchElement(element: Element, experimentName: string): void;
16
+ unwatchExperiment(experimentName: string): void;
17
+ getAppliedChanges(): Map<string, DOMChange[]>;
18
+ clearAll(): void;
19
+ destroy(): void;
20
+ private setupPersistenceObserver;
21
+ private checkStyleOverwritten;
22
+ private checkAttributeOverwritten;
23
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Global plugin registry for ABsmartly plugins
3
+ * Allows detection and inspection of loaded plugins
4
+ */
5
+ export interface PluginRegistryEntry {
6
+ name: string;
7
+ version: string;
8
+ initialized: boolean;
9
+ timestamp: number;
10
+ capabilities?: string[];
11
+ instance?: any;
12
+ }
13
+ export interface PluginRegistry {
14
+ dom?: PluginRegistryEntry;
15
+ overrides?: PluginRegistryEntry;
16
+ cookie?: PluginRegistryEntry;
17
+ vitals?: PluginRegistryEntry;
18
+ urlRedirect?: PluginRegistryEntry;
19
+ }
20
+ declare global {
21
+ interface Window {
22
+ __ABSMARTLY_PLUGINS__?: PluginRegistry;
23
+ }
24
+ }
25
+ /**
26
+ * Register a plugin in the global registry
27
+ */
28
+ export declare function registerPlugin(pluginType: keyof PluginRegistry, entry: PluginRegistryEntry): void;
29
+ /**
30
+ * Unregister a plugin from the global registry
31
+ */
32
+ export declare function unregisterPlugin(pluginType: keyof PluginRegistry): void;
33
+ /**
34
+ * Check if a plugin is registered
35
+ */
36
+ export declare function isPluginRegistered(pluginType: keyof PluginRegistry): boolean;
37
+ /**
38
+ * Get all registered plugins
39
+ */
40
+ export declare function getRegisteredPlugins(): PluginRegistry;