@builder.io/sdk-svelte 0.1.1 → 0.1.3-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.
Files changed (90) hide show
  1. package/package/--package.json +3 -3
  2. package/package/CHANGELOG.md +9 -0
  3. package/package/blocks/BaseText.svelte +1 -1
  4. package/package/blocks/button/button.svelte +1 -1
  5. package/package/blocks/columns/columns.svelte +3 -3
  6. package/package/blocks/custom-code/custom-code.svelte +1 -1
  7. package/package/blocks/embed/embed.svelte +2 -3
  8. package/package/blocks/form/form.svelte +1 -1
  9. package/package/blocks/fragment/fragment.svelte +1 -1
  10. package/package/blocks/image/image.svelte +1 -2
  11. package/package/blocks/img/img.svelte +1 -1
  12. package/package/blocks/input/input.svelte +1 -1
  13. package/package/blocks/raw-text/raw-text.svelte +1 -1
  14. package/package/blocks/section/section.svelte +1 -1
  15. package/package/blocks/select/select.svelte +1 -1
  16. package/package/blocks/submit-button/submit-button.svelte +1 -1
  17. package/package/blocks/symbol/symbol.svelte +4 -2
  18. package/package/blocks/text/text.svelte +1 -1
  19. package/package/blocks/textarea/textarea.svelte +1 -1
  20. package/package/blocks/video/video.svelte +1 -1
  21. package/package/components/render-block/block-styles.svelte +1 -1
  22. package/package/components/render-block/render-block.helpers.d.ts +11 -0
  23. package/package/components/render-block/render-block.helpers.js +58 -0
  24. package/package/components/render-block/render-block.svelte +33 -109
  25. package/package/components/render-block/render-component.svelte +1 -1
  26. package/package/components/render-block/render-repeated-block.svelte +7 -19
  27. package/package/components/render-blocks.svelte +1 -1
  28. package/package/components/render-content/builder-editing.svelte +1 -1
  29. package/package/components/render-content/components/render-styles.svelte +3 -3
  30. package/package/components/render-content/render-content.svelte +53 -53
  31. package/package/components/render-inlined-styles.svelte +1 -1
  32. package/package/functions/track/helpers.d.ts +5 -0
  33. package/package/functions/track/helpers.js +56 -0
  34. package/package/functions/{track.d.ts → track/index.d.ts} +5 -10
  35. package/package/functions/{track.js → track/index.js} +11 -6
  36. package/package/helpers/ab-tests.d.ts +1 -1
  37. package/package/helpers/cookie.d.ts +1 -1
  38. package/package/helpers/cookie.js +7 -2
  39. package/package/helpers/localStorage.d.ts +2 -1
  40. package/package/helpers/localStorage.js +1 -0
  41. package/package/helpers/sessionId.d.ts +2 -2
  42. package/package/helpers/sessionId.js +2 -1
  43. package/package/helpers/url.js +3 -0
  44. package/package/helpers/url.test.js +6 -0
  45. package/package/helpers/visitorId.js +1 -0
  46. package/package/index.d.ts +1 -1
  47. package/package/index.js +1 -1
  48. package/package.json +1 -1
  49. package/src/blocks/BaseText.svelte +2 -2
  50. package/src/blocks/button/button.svelte +1 -6
  51. package/src/blocks/columns/columns.svelte +3 -3
  52. package/src/blocks/custom-code/custom-code.svelte +1 -1
  53. package/src/blocks/embed/component-info.ts +29 -27
  54. package/src/blocks/embed/embed.svelte +1 -3
  55. package/src/blocks/form/form.svelte +2 -7
  56. package/src/blocks/fragment/fragment.svelte +1 -1
  57. package/src/blocks/image/component-info.ts +57 -55
  58. package/src/blocks/image/image.svelte +1 -2
  59. package/src/blocks/img/img.svelte +1 -6
  60. package/src/blocks/input/input.svelte +1 -6
  61. package/src/blocks/raw-text/raw-text.svelte +1 -1
  62. package/src/blocks/section/section.svelte +1 -6
  63. package/src/blocks/select/select.svelte +1 -6
  64. package/src/blocks/submit-button/submit-button.svelte +1 -6
  65. package/src/blocks/symbol/symbol.svelte +5 -8
  66. package/src/blocks/text/text.svelte +1 -1
  67. package/src/blocks/textarea/textarea.svelte +1 -6
  68. package/src/blocks/video/video.svelte +1 -6
  69. package/src/components/render-block/block-styles.svelte +1 -1
  70. package/src/components/render-block/render-block.helpers.ts +85 -0
  71. package/src/components/render-block/render-block.svelte +41 -118
  72. package/src/components/render-block/render-component.svelte +1 -1
  73. package/src/components/render-block/render-repeated-block.svelte +8 -20
  74. package/src/components/render-blocks.svelte +2 -2
  75. package/src/components/render-content/builder-editing.svelte +1 -1
  76. package/src/components/render-content/components/render-styles.svelte +5 -3
  77. package/src/components/render-content/render-content.svelte +59 -64
  78. package/src/components/render-inlined-styles.svelte +1 -1
  79. package/src/functions/track/helpers.ts +67 -0
  80. package/src/functions/{track.ts → track/index.ts} +16 -17
  81. package/src/helpers/cookie.ts +9 -4
  82. package/src/helpers/localStorage.ts +3 -1
  83. package/src/helpers/sessionId.ts +5 -1
  84. package/src/helpers/url.test.ts +7 -0
  85. package/src/helpers/url.ts +4 -0
  86. package/src/helpers/visitorId.ts +3 -1
  87. package/src/index.ts +1 -1
  88. package/package/components/render-block/render-component-with-context.svelte +0 -32
  89. package/package/components/render-block/render-component-with-context.svelte.d.ts +0 -19
  90. package/src/components/render-block/render-component-with-context.svelte +0 -38
@@ -1,9 +1,11 @@
1
- import { TARGET } from '../constants/target.js';
2
- import { getSessionId } from '../helpers/sessionId.js';
3
- import { getVisitorId } from '../helpers/visitorId.js';
4
- import type { CanTrack } from '../types/can-track.js';
5
- import { isBrowser } from './is-browser.js';
6
- import { isEditing } from './is-editing.js';
1
+ import { TARGET } from '../../constants/target.js';
2
+ import { getSessionId } from '../../helpers/sessionId.js';
3
+ import { getVisitorId } from '../../helpers/visitorId.js';
4
+ import type { CanTrack } from '../../types/can-track.js';
5
+ import type { Dictionary } from '../../types/typescript.js';
6
+ import { isBrowser } from '../is-browser.js';
7
+ import { isEditing } from '../is-editing.js';
8
+ import { getUserAttributes } from './helpers.js';
7
9
 
8
10
  interface Event {
9
11
  /**
@@ -22,9 +24,9 @@ interface Event {
22
24
  */
23
25
  ownerId: string;
24
26
  /**
25
- * Stringified JSON object containing any additional metadata you want to track.
27
+ * (Optional) metadata that you want to provide with your event.
26
28
  */
27
- metadata?: string;
29
+ metadata?: Dictionary<any>;
28
30
  /**
29
31
  * Session ID of the user. This is provided by the SDK by checking session storage.
30
32
  */
@@ -63,18 +65,11 @@ const getTrackingEventData = async ({
63
65
  };
64
66
 
65
67
  type EventProperties = Pick<Event, 'type'> &
66
- Pick<Event['data'], 'contentId' | 'variationId'> & {
68
+ Pick<Event['data'], 'contentId' | 'variationId' | 'metadata'> & {
67
69
  /**
68
70
  * Your organization's API key.
69
71
  */
70
72
  apiKey: Event['data']['ownerId'];
71
- /**
72
- * (Optional) metadata that you want to provide with your event.
73
- */
74
- metadata?: {
75
- [index: string]: any;
76
- };
77
-
78
73
  /**
79
74
  * (Optional) Any additional (non-metadata) properties to add to the event.
80
75
  */
@@ -93,8 +88,12 @@ const createEvent = async ({
93
88
  type: eventType,
94
89
  data: {
95
90
  ...properties,
96
- metadata: JSON.stringify(metadata),
91
+ metadata: {
92
+ url: location.href,
93
+ ...metadata,
94
+ },
97
95
  ...(await getTrackingEventData({ canTrack })),
96
+ userAttributes: getUserAttributes(),
98
97
  ownerId: apiKey,
99
98
  },
100
99
  });
@@ -1,5 +1,6 @@
1
1
  import { isBrowser } from '../functions/is-browser.js';
2
2
  import type { CanTrack } from '../types/can-track.js';
3
+ import { checkIsDefined } from './nullable.js';
3
4
  import { getTopLevelDomain } from './url.js';
4
5
 
5
6
  /**
@@ -10,7 +11,7 @@ export const getCookie = async ({
10
11
  canTrack,
11
12
  }: {
12
13
  name: string;
13
- } & CanTrack) => {
14
+ } & CanTrack): Promise<string | undefined> => {
14
15
  try {
15
16
  if (!canTrack) {
16
17
  return undefined;
@@ -26,6 +27,7 @@ export const getCookie = async ({
26
27
  ?.split('=')[1];
27
28
  } catch (err) {
28
29
  console.debug('[COOKIE] GET error: ', err);
30
+ return undefined;
29
31
  }
30
32
  };
31
33
 
@@ -40,7 +42,10 @@ type CookieConfiguration = Array<
40
42
  >;
41
43
 
42
44
  const stringifyCookie = (cookie: CookieConfiguration): string =>
43
- cookie.map(([key, value]) => (value ? `${key}=${value}` : key)).join('; ');
45
+ cookie
46
+ .map(([key, value]) => (value ? `${key}=${value}` : key))
47
+ .filter(checkIsDefined)
48
+ .join('; ');
44
49
 
45
50
  const SECURE_CONFIG: CookieConfiguration = [
46
51
  ['secure', ''],
@@ -89,10 +94,10 @@ export const setCookie = async ({
89
94
  name: string;
90
95
  value: string;
91
96
  expires?: Date;
92
- } & CanTrack) => {
97
+ } & CanTrack): Promise<void> => {
93
98
  try {
94
99
  if (!canTrack) {
95
- return undefined;
100
+ return;
96
101
  }
97
102
  const cookie = createCookieString({ name, value, expires });
98
103
  document.cookie = cookie;
@@ -1,5 +1,6 @@
1
1
  import { isBrowser } from '../functions/is-browser.js';
2
2
  import type { CanTrack } from '../types/can-track.js';
3
+ import type { Nullable } from './nullable.js';
3
4
 
4
5
  const getLocalStorage = () =>
5
6
  isBrowser() && typeof localStorage !== 'undefined' ? localStorage : undefined;
@@ -9,7 +10,7 @@ export const getLocalStorageItem = ({
9
10
  canTrack,
10
11
  }: {
11
12
  key: string;
12
- } & CanTrack) => {
13
+ } & CanTrack): Nullable<string> => {
13
14
  try {
14
15
  if (canTrack) {
15
16
  return getLocalStorage()?.getItem(key);
@@ -17,6 +18,7 @@ export const getLocalStorageItem = ({
17
18
  return undefined;
18
19
  } catch (err) {
19
20
  console.debug('[LocalStorage] GET error: ', err);
21
+ return undefined;
20
22
  }
21
23
  };
22
24
 
@@ -5,7 +5,9 @@ import { uuid } from './uuid.js';
5
5
 
6
6
  const SESSION_LOCAL_STORAGE_KEY = 'builderSessionId';
7
7
 
8
- export const getSessionId = async ({ canTrack }: CanTrack) => {
8
+ export const getSessionId = async ({
9
+ canTrack,
10
+ }: CanTrack): Promise<string | undefined> => {
9
11
  if (!canTrack) {
10
12
  return undefined;
11
13
  }
@@ -20,6 +22,8 @@ export const getSessionId = async ({ canTrack }: CanTrack) => {
20
22
  } else {
21
23
  const newSessionId = createSessionId();
22
24
  setSessionId({ id: newSessionId, canTrack });
25
+
26
+ return newSessionId;
23
27
  }
24
28
  };
25
29
 
@@ -13,4 +13,11 @@ describe('getTopLevelDomain', () => {
13
13
  const output = getTopLevelDomain('www.example.co.uk');
14
14
  expect(output).toBe('example.co.uk');
15
15
  });
16
+ test('handles localhost', () => {
17
+ const output = getTopLevelDomain('localhost');
18
+ expect(output).toBe('localhost');
19
+
20
+ const output2 = getTopLevelDomain('127.0.0.1');
21
+ expect(output2).toBe('127.0.0.1');
22
+ });
16
23
  });
@@ -4,6 +4,10 @@
4
4
  * www.example.co.uk -> example.co.uk
5
5
  */
6
6
  export const getTopLevelDomain = (host: string) => {
7
+ if (host === 'localhost' || host === '127.0.0.1') {
8
+ return host;
9
+ }
10
+
7
11
  const parts = host.split('.');
8
12
  if (parts.length > 2) {
9
13
  return parts.slice(1).join('.');
@@ -5,7 +5,7 @@ import { uuid } from './uuid.js';
5
5
 
6
6
  const VISITOR_LOCAL_STORAGE_KEY = 'builderVisitorId';
7
7
 
8
- export const getVisitorId = ({ canTrack }: CanTrack) => {
8
+ export const getVisitorId = ({ canTrack }: CanTrack): string | undefined => {
9
9
  if (!canTrack) {
10
10
  return undefined;
11
11
  }
@@ -20,6 +20,8 @@ export const getVisitorId = ({ canTrack }: CanTrack) => {
20
20
  } else {
21
21
  const newVisitorId = createVisitorId();
22
22
  setVisitorId({ id: newVisitorId, canTrack });
23
+
24
+ return newVisitorId;
23
25
  }
24
26
  };
25
27
 
package/src/index.ts CHANGED
@@ -10,6 +10,6 @@ export * from './functions/register.js';
10
10
  export * from './functions/set-editor-settings.js';
11
11
  export * from './functions/get-content/index.js';
12
12
  export * from './functions/get-builder-search-params/index.js';
13
- export { track } from './functions/track';
13
+ export { track } from './functions/track/index.js';
14
14
  export type { RegisteredComponent } from './context/types';
15
15
  export type { ComponentInfo } from './types/components';
@@ -1,32 +0,0 @@
1
- <script context="module"></script>
2
-
3
- <script>import { setContext } from "svelte";
4
- import BuilderContext from "../../context/builder.context.js";
5
- import RenderComponent from "./render-component.svelte";
6
- export let componentRef;
7
- export let componentOptions;
8
- export let blockChildren;
9
- export let context;
10
- setContext(BuilderContext.key, {
11
- get content() {
12
- return context.content;
13
- },
14
- get state() {
15
- return context.state;
16
- },
17
- get context() {
18
- return context.context;
19
- },
20
- get apiKey() {
21
- return context.apiKey;
22
- },
23
- get registeredComponents() {
24
- return context.registeredComponents;
25
- },
26
- get inheritedStyles() {
27
- return context.inheritedStyles;
28
- },
29
- });
30
- </script>
31
-
32
- <RenderComponent {componentRef} {componentOptions} {blockChildren} {context} />
@@ -1,19 +0,0 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- componentRef: RenderComponentProps;
5
- componentOptions: RenderComponentProps;
6
- blockChildren: RenderComponentProps;
7
- context: RenderComponentProps;
8
- };
9
- events: {
10
- [evt: string]: CustomEvent<any>;
11
- };
12
- slots: {};
13
- };
14
- export declare type RenderComponentWithContextProps = typeof __propDef.props;
15
- export declare type RenderComponentWithContextEvents = typeof __propDef.events;
16
- export declare type RenderComponentWithContextSlots = typeof __propDef.slots;
17
- export default class RenderComponentWithContext extends SvelteComponentTyped<RenderComponentWithContextProps, RenderComponentWithContextEvents, RenderComponentWithContextSlots> {
18
- }
19
- export {};
@@ -1,38 +0,0 @@
1
- <script context="module" lang="ts">
2
- import type { RenderComponentProps } from "./render-component";
3
- </script>
4
-
5
- <script lang="ts">
6
- import { getContext, setContext } from "svelte";
7
-
8
- import BuilderContext from "../../context/builder.context.js";
9
- import RenderComponent from "./render-component.svelte";
10
-
11
- export let componentRef: RenderComponentProps["componentRef"];
12
- export let componentOptions: RenderComponentProps["componentOptions"];
13
- export let blockChildren: RenderComponentProps["blockChildren"];
14
- export let context: RenderComponentProps["context"];
15
-
16
- setContext(BuilderContext.key, {
17
- get content() {
18
- return context.content;
19
- },
20
- get state() {
21
- return context.state;
22
- },
23
- get context() {
24
- return context.context;
25
- },
26
- get apiKey() {
27
- return context.apiKey;
28
- },
29
- get registeredComponents() {
30
- return context.registeredComponents;
31
- },
32
- get inheritedStyles() {
33
- return context.inheritedStyles;
34
- },
35
- });
36
- </script>
37
-
38
- <RenderComponent {componentRef} {componentOptions} {blockChildren} {context} />