@builder.io/sdk-svelte 1.0.11 → 1.0.12

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 (102) hide show
  1. package/lib/browser/blocks/BaseText.svelte +1 -3
  2. package/lib/browser/blocks/button/button.svelte +2 -3
  3. package/lib/browser/blocks/columns/columns.svelte +3 -5
  4. package/lib/browser/blocks/form/form/form.svelte +5 -7
  5. package/lib/browser/blocks/form/submit-button/submit-button.svelte +2 -4
  6. package/lib/browser/blocks/image/image.svelte +4 -7
  7. package/lib/browser/blocks/video/video.svelte +2 -5
  8. package/lib/browser/components/block/block.helpers.d.ts +4 -0
  9. package/lib/browser/components/block/block.helpers.js +14 -1
  10. package/lib/browser/components/block/block.svelte +4 -10
  11. package/lib/browser/components/block/components/block-wrapper.svelte +2 -4
  12. package/lib/browser/components/block/components/interactive-element.svelte +2 -4
  13. package/lib/browser/components/blocks/blocks-wrapper.svelte +1 -3
  14. package/lib/browser/components/blocks/blocks.svelte +2 -2
  15. package/lib/browser/components/content/components/enable-editor.svelte +8 -5
  16. package/lib/browser/components/content/content.svelte +3 -5
  17. package/lib/browser/components/content-variants/content-variants.svelte +0 -2
  18. package/lib/browser/components/dynamic-renderer/dynamic-renderer.svelte +4 -6
  19. package/lib/browser/constants/sdk-version.d.ts +1 -1
  20. package/lib/browser/constants/sdk-version.js +1 -1
  21. package/lib/browser/functions/evaluate/browser-runtime/browser.js +1 -1
  22. package/lib/browser/functions/evaluate/evaluate.d.ts +3 -1
  23. package/lib/browser/functions/evaluate/evaluate.js +39 -3
  24. package/lib/browser/functions/evaluate/helpers.d.ts +1 -0
  25. package/lib/browser/functions/get-block-actions-handler.js +2 -1
  26. package/lib/browser/functions/get-processed-block.js +2 -1
  27. package/lib/edge/blocks/BaseText.svelte +1 -3
  28. package/lib/edge/blocks/button/button.svelte +2 -3
  29. package/lib/edge/blocks/columns/columns.svelte +3 -5
  30. package/lib/edge/blocks/form/form/form.svelte +5 -7
  31. package/lib/edge/blocks/form/submit-button/submit-button.svelte +2 -4
  32. package/lib/edge/blocks/image/image.svelte +4 -7
  33. package/lib/edge/blocks/video/video.svelte +2 -5
  34. package/lib/edge/components/block/block.helpers.d.ts +4 -0
  35. package/lib/edge/components/block/block.helpers.js +14 -1
  36. package/lib/edge/components/block/block.svelte +4 -10
  37. package/lib/edge/components/block/components/block-wrapper.svelte +2 -4
  38. package/lib/edge/components/block/components/interactive-element.svelte +2 -4
  39. package/lib/edge/components/blocks/blocks-wrapper.svelte +1 -3
  40. package/lib/edge/components/blocks/blocks.svelte +2 -2
  41. package/lib/edge/components/content/components/enable-editor.svelte +8 -5
  42. package/lib/edge/components/content/content.svelte +3 -5
  43. package/lib/edge/components/content-variants/content-variants.svelte +0 -2
  44. package/lib/edge/components/dynamic-renderer/dynamic-renderer.svelte +4 -6
  45. package/lib/edge/constants/sdk-version.d.ts +1 -1
  46. package/lib/edge/constants/sdk-version.js +1 -1
  47. package/lib/edge/functions/evaluate/browser-runtime/browser.js +1 -1
  48. package/lib/edge/functions/evaluate/evaluate.d.ts +3 -1
  49. package/lib/edge/functions/evaluate/evaluate.js +39 -3
  50. package/lib/edge/functions/evaluate/helpers.d.ts +1 -0
  51. package/lib/edge/functions/get-block-actions-handler.js +2 -1
  52. package/lib/edge/functions/get-processed-block.js +2 -1
  53. package/lib/node/blocks/BaseText.svelte +1 -3
  54. package/lib/node/blocks/button/button.svelte +2 -3
  55. package/lib/node/blocks/columns/columns.svelte +3 -5
  56. package/lib/node/blocks/form/form/form.svelte +5 -7
  57. package/lib/node/blocks/form/submit-button/submit-button.svelte +2 -4
  58. package/lib/node/blocks/image/image.svelte +4 -7
  59. package/lib/node/blocks/video/video.svelte +2 -5
  60. package/lib/node/components/block/block.helpers.d.ts +4 -0
  61. package/lib/node/components/block/block.helpers.js +14 -1
  62. package/lib/node/components/block/block.svelte +4 -10
  63. package/lib/node/components/block/components/block-wrapper.svelte +2 -4
  64. package/lib/node/components/block/components/interactive-element.svelte +2 -4
  65. package/lib/node/components/blocks/blocks-wrapper.svelte +1 -3
  66. package/lib/node/components/blocks/blocks.svelte +2 -2
  67. package/lib/node/components/content/components/enable-editor.svelte +8 -5
  68. package/lib/node/components/content/content.svelte +3 -5
  69. package/lib/node/components/content-variants/content-variants.svelte +0 -2
  70. package/lib/node/components/dynamic-renderer/dynamic-renderer.svelte +4 -6
  71. package/lib/node/constants/sdk-version.d.ts +1 -1
  72. package/lib/node/constants/sdk-version.js +1 -1
  73. package/lib/node/functions/evaluate/browser-runtime/browser.js +1 -1
  74. package/lib/node/functions/evaluate/evaluate.d.ts +3 -1
  75. package/lib/node/functions/evaluate/evaluate.js +39 -3
  76. package/lib/node/functions/evaluate/helpers.d.ts +1 -0
  77. package/lib/node/functions/get-block-actions-handler.js +2 -1
  78. package/lib/node/functions/get-processed-block.js +2 -1
  79. package/package.json +1 -1
  80. package/src/blocks/BaseText.svelte +1 -3
  81. package/src/blocks/button/button.svelte +2 -3
  82. package/src/blocks/columns/columns.svelte +3 -5
  83. package/src/blocks/form/form/form.svelte +5 -7
  84. package/src/blocks/form/submit-button/submit-button.svelte +2 -4
  85. package/src/blocks/image/image.svelte +4 -7
  86. package/src/blocks/video/video.svelte +2 -5
  87. package/src/components/block/block.helpers.ts +20 -1
  88. package/src/components/block/block.svelte +8 -11
  89. package/src/components/block/components/block-wrapper.svelte +2 -4
  90. package/src/components/block/components/interactive-element.svelte +2 -4
  91. package/src/components/blocks/blocks-wrapper.svelte +1 -3
  92. package/src/components/blocks/blocks.svelte +2 -2
  93. package/src/components/content/components/enable-editor.svelte +21 -10
  94. package/src/components/content/content.svelte +3 -5
  95. package/src/components/content-variants/content-variants.svelte +0 -2
  96. package/src/components/dynamic-renderer/dynamic-renderer.svelte +4 -6
  97. package/src/constants/sdk-version.ts +1 -1
  98. package/src/functions/evaluate/browser-runtime/browser.ts +1 -1
  99. package/src/functions/evaluate/evaluate.ts +44 -4
  100. package/src/functions/evaluate/helpers.ts +1 -0
  101. package/src/functions/get-block-actions-handler.ts +2 -1
  102. package/src/functions/get-processed-block.ts +2 -1
@@ -1 +1 @@
1
- export const SDK_VERSION = "1.0.11"
1
+ export const SDK_VERSION = "1.0.12"
@@ -37,7 +37,7 @@ export function flattenState({
37
37
  return localState[prop];
38
38
  }
39
39
  const val = target[prop];
40
- if (typeof val === 'object') {
40
+ if (typeof val === 'object' && val !== null) {
41
41
  return flattenState({
42
42
  rootState: val,
43
43
  localState: undefined,
@@ -2,6 +2,33 @@ import { logger } from '../../helpers/logger.js';
2
2
  import { chooseBrowserOrServerEval } from './choose-eval.js';
3
3
  import type { EvaluatorArgs, ExecutorArgs } from './helpers.js';
4
4
  import { getBuilderGlobals, parseCode } from './helpers.js';
5
+ type EvalValue = unknown;
6
+ class EvalCache {
7
+ static cacheLimit = 20;
8
+ static cache = new Map<string, {
9
+ value: EvalValue;
10
+ } | undefined>();
11
+ static getCacheKey(args: ExecutorArgs) {
12
+ return JSON.stringify({
13
+ ...args,
14
+ // replace the event with a random number to break cache
15
+ // thats because we can't serialize the event object due to circular refs in DOM node refs.
16
+ event: args.event ? Math.random() : undefined
17
+ });
18
+ }
19
+ static getCachedValue(key: string) {
20
+ const cachedVal = EvalCache.cache.get(key);
21
+ return cachedVal;
22
+ }
23
+ static setCachedValue(key: string, value: EvalValue) {
24
+ if (EvalCache.cache.size > 20) {
25
+ EvalCache.cache.delete(EvalCache.cache.keys().next().value);
26
+ }
27
+ EvalCache.cache.set(key, {
28
+ value
29
+ });
30
+ }
31
+ }
5
32
  export function evaluate({
6
33
  code,
7
34
  context,
@@ -9,11 +36,12 @@ export function evaluate({
9
36
  rootState,
10
37
  rootSetState,
11
38
  event,
12
- isExpression = true
13
- }: EvaluatorArgs): any {
39
+ isExpression = true,
40
+ enableCache
41
+ }: EvaluatorArgs): EvalValue {
14
42
  if (code === '') {
15
43
  logger.warn('Skipping evaluation of empty code block.');
16
- return;
44
+ return undefined;
17
45
  }
18
46
  const args: ExecutorArgs = {
19
47
  code: parseCode(code, {
@@ -26,8 +54,20 @@ export function evaluate({
26
54
  rootState,
27
55
  localState
28
56
  };
57
+ if (enableCache) {
58
+ const cacheKey = EvalCache.getCacheKey(args);
59
+ const cachedValue = EvalCache.getCachedValue(cacheKey);
60
+ if (cachedValue) {
61
+ return cachedValue.value;
62
+ }
63
+ }
29
64
  try {
30
- return chooseBrowserOrServerEval(args);
65
+ const newEval = chooseBrowserOrServerEval(args);
66
+ if (enableCache) {
67
+ const cacheKey = EvalCache.getCacheKey(args);
68
+ EvalCache.setCachedValue(cacheKey, newEval);
69
+ }
70
+ return newEval;
31
71
  } catch (e: any) {
32
72
  logger.error('Failed code evaluation: ' + e.message, {
33
73
  code
@@ -5,6 +5,7 @@ import { getUserAttributes } from '../track/helpers.js';
5
5
  export type EvaluatorArgs = Omit<ExecutorArgs, 'builder' | 'event'> & {
6
6
  event?: Event;
7
7
  isExpression?: boolean;
8
+ enableCache: boolean;
8
9
  };
9
10
  export type BuilderGlobals = {
10
11
  isEditing: boolean | undefined;
@@ -12,5 +12,6 @@ export const createEventHandler = (value: string, options: Options): EventHandle
12
12
  rootState: options.rootState,
13
13
  rootSetState: options.rootSetState,
14
14
  event,
15
- isExpression: false
15
+ isExpression: false,
16
+ enableCache: true
16
17
  })
@@ -33,7 +33,8 @@ const evaluateBindings = ({
33
33
  localState,
34
34
  rootState,
35
35
  rootSetState,
36
- context
36
+ context,
37
+ enableCache: true
37
38
  });
38
39
  set(copied, binding, value);
39
40
  }