@builder.io/sdk-svelte 0.4.4 → 0.5.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 (395) hide show
  1. package/package/--package.json +43 -29
  2. package/package/CHANGELOG.md +13 -0
  3. package/package/blocks/BaseText.svelte +1 -1
  4. package/package/blocks/button/button.svelte +18 -33
  5. package/package/blocks/button/button.svelte.d.ts +3 -1
  6. package/package/blocks/button/component-info.d.ts +1 -1
  7. package/package/blocks/button/component-info.js +9 -13
  8. package/package/blocks/columns/columns.svelte +14 -20
  9. package/package/blocks/columns/columns.svelte.d.ts +11 -7
  10. package/package/blocks/columns/component-info.d.ts +1 -1
  11. package/package/blocks/columns/component-info.js +62 -83
  12. package/package/blocks/custom-code/component-info.d.ts +1 -1
  13. package/package/blocks/custom-code/component-info.js +7 -11
  14. package/package/blocks/embed/component-info.d.ts +1 -1
  15. package/package/blocks/embed/component-info.js +8 -15
  16. package/package/blocks/embed/helpers.js +1 -5
  17. package/package/blocks/form/component-info.d.ts +1 -1
  18. package/package/blocks/form/component-info.js +94 -129
  19. package/package/blocks/form/form.svelte +2 -289
  20. package/package/blocks/form/form.svelte.d.ts +1 -57
  21. package/package/blocks/fragment/component-info.d.ts +1 -1
  22. package/package/blocks/fragment/component-info.js +1 -1
  23. package/package/blocks/helpers.d.ts +13 -0
  24. package/package/blocks/helpers.js +40 -0
  25. package/package/blocks/image/component-info.d.ts +1 -1
  26. package/package/blocks/image/component-info.js +33 -63
  27. package/package/blocks/image/image.helpers.js +2 -11
  28. package/package/blocks/image/image.svelte.d.ts +0 -1
  29. package/package/blocks/img/component-info.d.ts +1 -1
  30. package/package/blocks/img/component-info.js +4 -6
  31. package/package/blocks/img/img.svelte +4 -29
  32. package/package/blocks/img/img.svelte.d.ts +3 -1
  33. package/package/blocks/input/component-info.d.ts +1 -1
  34. package/package/blocks/input/component-info.js +15 -40
  35. package/package/blocks/input/input.svelte +4 -29
  36. package/package/blocks/input/input.svelte.d.ts +3 -1
  37. package/package/blocks/raw-text/component-info.d.ts +1 -1
  38. package/package/blocks/raw-text/component-info.js +3 -5
  39. package/package/blocks/raw-text/raw-text.svelte +3 -5
  40. package/package/blocks/raw-text/raw-text.svelte.d.ts +1 -1
  41. package/package/blocks/section/component-info.d.ts +1 -1
  42. package/package/blocks/section/component-info.js +13 -18
  43. package/package/blocks/section/section.svelte +4 -29
  44. package/package/blocks/section/section.svelte.d.ts +3 -1
  45. package/package/blocks/select/component-info.d.ts +1 -1
  46. package/package/blocks/select/component-info.js +22 -34
  47. package/package/blocks/select/select.svelte +4 -29
  48. package/package/blocks/select/select.svelte.d.ts +3 -1
  49. package/package/blocks/submit-button/component-info.d.ts +1 -1
  50. package/package/blocks/submit-button/component-info.js +5 -7
  51. package/package/blocks/submit-button/submit-button.svelte +4 -29
  52. package/package/blocks/submit-button/submit-button.svelte.d.ts +3 -1
  53. package/package/blocks/symbol/component-info.d.ts +1 -1
  54. package/package/blocks/symbol/component-info.js +12 -17
  55. package/package/blocks/symbol/symbol.helpers.d.ts +14 -0
  56. package/package/blocks/symbol/symbol.helpers.js +31 -0
  57. package/package/blocks/symbol/symbol.svelte +38 -85
  58. package/package/blocks/symbol/symbol.svelte.d.ts +13 -7
  59. package/package/blocks/text/component-info.d.ts +1 -1
  60. package/package/blocks/text/component-info.js +6 -7
  61. package/package/blocks/text/text.svelte +1 -1
  62. package/package/blocks/text/text.svelte.d.ts +1 -1
  63. package/package/blocks/textarea/component-info.d.ts +1 -1
  64. package/package/blocks/textarea/component-info.js +13 -19
  65. package/package/blocks/textarea/textarea.svelte +4 -29
  66. package/package/blocks/textarea/textarea.svelte.d.ts +3 -1
  67. package/package/blocks/video/component-info.d.ts +1 -1
  68. package/package/blocks/video/component-info.js +35 -55
  69. package/package/blocks/video/video.svelte +4 -30
  70. package/package/blocks/video/video.svelte.d.ts +2 -0
  71. package/package/components/block/block.helpers.d.ts +13 -0
  72. package/package/components/{render-block/render-block.helpers.js → block/block.helpers.js} +12 -29
  73. package/package/components/block/block.svelte +135 -0
  74. package/package/components/block/block.svelte.d.ts +26 -0
  75. package/package/components/{render-block → block/components}/block-styles.svelte +21 -23
  76. package/package/components/{render-block → block/components}/block-styles.svelte.d.ts +2 -2
  77. package/package/components/block/components/block-wrapper.svelte +53 -0
  78. package/package/components/block/components/block-wrapper.svelte.d.ts +33 -0
  79. package/package/components/block/components/component-ref/component-ref.helpers.d.ts +36 -0
  80. package/package/components/block/components/component-ref/component-ref.helpers.js +22 -0
  81. package/package/components/block/components/component-ref/component-ref.svelte +37 -0
  82. package/package/components/block/components/component-ref/component-ref.svelte.d.ts +24 -0
  83. package/package/components/block/components/interactive-element.svelte +29 -0
  84. package/package/components/block/components/interactive-element.svelte.d.ts +31 -0
  85. package/package/components/{render-block/render-repeated-block.svelte → block/components/repeated-block.svelte} +4 -3
  86. package/package/components/block/components/repeated-block.svelte.d.ts +25 -0
  87. package/package/components/{render-blocks.svelte → blocks/blocks-wrapper.svelte} +3 -20
  88. package/package/components/blocks/blocks-wrapper.svelte.d.ts +29 -0
  89. package/package/components/blocks/blocks.svelte +26 -0
  90. package/package/components/blocks/blocks.svelte.d.ts +28 -0
  91. package/package/components/{render-content/render-content.svelte → content/components/enable-editor.svelte} +51 -169
  92. package/package/components/content/components/enable-editor.svelte.d.ts +36 -0
  93. package/package/components/{render-content/components/render-styles.helpers.d.ts → content/components/styles.helpers.d.ts} +1 -1
  94. package/package/components/{render-content/components/render-styles.helpers.js → content/components/styles.helpers.js} +3 -4
  95. package/package/components/{render-content/components/render-styles.svelte → content/components/styles.svelte} +4 -4
  96. package/package/components/{render-content/components/render-styles.svelte.d.ts → content/components/styles.svelte.d.ts} +5 -5
  97. package/package/components/content/content.helpers.d.ts +7 -0
  98. package/package/components/content/content.helpers.js +30 -0
  99. package/package/components/content/content.svelte +113 -0
  100. package/package/components/content/content.svelte.d.ts +30 -0
  101. package/package/components/content/content.types.d.ts +24 -0
  102. package/package/components/content/index.d.ts +1 -0
  103. package/package/components/content/index.js +1 -0
  104. package/package/components/content-variants/content-variants.svelte +98 -0
  105. package/package/components/content-variants/content-variants.svelte.d.ts +34 -0
  106. package/package/components/content-variants/content-variants.types.d.ts +20 -0
  107. package/package/components/content-variants/helpers.d.ts +41 -0
  108. package/package/components/{render-content-variants → content-variants}/helpers.js +46 -41
  109. package/package/components/inlined-script.svelte +7 -0
  110. package/package/components/inlined-script.svelte.d.ts +21 -0
  111. package/package/components/inlined-styles.svelte.d.ts +21 -0
  112. package/package/constants/builder-registered-components.js +34 -13
  113. package/package/constants/device-sizes.js +9 -8
  114. package/package/constants/sdk-version.d.ts +1 -1
  115. package/package/constants/sdk-version.js +1 -1
  116. package/package/constants/target.d.ts +1 -1
  117. package/package/context/builder.context.d.ts +1 -1
  118. package/package/context/builder.context.js +1 -1
  119. package/package/context/types.d.ts +1 -1
  120. package/package/functions/apply-patch-with-mutation.d.ts +10 -0
  121. package/package/functions/apply-patch-with-mutation.js +54 -0
  122. package/package/functions/evaluate/acorn.d.ts +0 -0
  123. package/package/functions/evaluate/acorn.js +2433 -0
  124. package/package/functions/{evaluate.d.ts → evaluate/evaluate.d.ts} +5 -2
  125. package/package/functions/{evaluate.js → evaluate/evaluate.js} +34 -13
  126. package/package/functions/evaluate/index.d.ts +1 -0
  127. package/package/functions/evaluate/index.js +1 -0
  128. package/package/functions/evaluate/interpreter.d.ts +2 -0
  129. package/package/functions/evaluate/interpreter.js +3853 -0
  130. package/package/functions/evaluate/non-node-runtime.d.ts +2 -0
  131. package/package/functions/evaluate/non-node-runtime.js +84 -0
  132. package/package/functions/evaluate/types.d.ts +10 -0
  133. package/package/functions/extract-text-styles.js +2 -14
  134. package/package/functions/get-block-actions-handler.js +3 -3
  135. package/package/functions/get-block-actions.d.ts +1 -0
  136. package/package/functions/get-block-actions.js +14 -1
  137. package/package/functions/get-block-component-options.js +1 -1
  138. package/package/functions/get-block-properties.d.ts +5 -1
  139. package/package/functions/get-block-properties.js +15 -9
  140. package/package/functions/get-builder-search-params/index.js +3 -7
  141. package/package/functions/get-content/generate-content-url.js +7 -5
  142. package/package/functions/get-content/index.d.ts +2 -6
  143. package/package/functions/get-content/index.js +26 -6
  144. package/package/functions/get-processed-block.d.ts +1 -1
  145. package/package/functions/get-processed-block.js +11 -7
  146. package/package/functions/get-react-native-block-styles.d.ts +1 -1
  147. package/package/functions/get-react-native-block-styles.js +2 -2
  148. package/package/functions/if-target.d.ts +1 -1
  149. package/package/functions/if-target.js +1 -1
  150. package/package/functions/is-editing.js +1 -3
  151. package/package/functions/is-non-node-server.d.ts +4 -0
  152. package/package/functions/is-non-node-server.js +8 -0
  153. package/package/functions/on-change.js +1 -1
  154. package/package/functions/register-component.d.ts +2 -1
  155. package/package/functions/register-component.js +20 -8
  156. package/package/functions/register.js +2 -2
  157. package/package/functions/sanitize-react-native-block-styles.js +13 -5
  158. package/package/functions/set-editor-settings.js +1 -1
  159. package/package/functions/set.js +2 -9
  160. package/package/functions/track/helpers.js +6 -11
  161. package/package/functions/track/index.js +26 -14
  162. package/package/functions/track/interaction.js +15 -16
  163. package/package/helpers/ab-tests.d.ts +2 -2
  164. package/package/helpers/ab-tests.js +48 -30
  165. package/package/helpers/canTrack.js +1 -1
  166. package/package/helpers/cookie.d.ts +2 -2
  167. package/package/helpers/cookie.js +13 -26
  168. package/package/helpers/css.d.ts +1 -1
  169. package/package/helpers/css.js +1 -1
  170. package/package/helpers/flatten.js +8 -8
  171. package/package/helpers/localStorage.d.ts +2 -2
  172. package/package/helpers/localStorage.js +2 -2
  173. package/package/helpers/logger.js +1 -1
  174. package/package/helpers/preview-lru-cache/get.d.ts +1 -0
  175. package/package/helpers/preview-lru-cache/get.js +7 -0
  176. package/package/helpers/preview-lru-cache/helpers.d.ts +1 -0
  177. package/package/helpers/preview-lru-cache/helpers.js +9 -0
  178. package/package/helpers/preview-lru-cache/init.d.ts +6 -0
  179. package/package/helpers/preview-lru-cache/init.js +15 -0
  180. package/package/helpers/preview-lru-cache/set.d.ts +7 -0
  181. package/package/helpers/preview-lru-cache/set.js +9 -0
  182. package/package/helpers/preview-lru-cache/types.d.ts +12 -0
  183. package/package/helpers/preview-lru-cache/types.js +6 -0
  184. package/package/helpers/sessionId.d.ts +2 -2
  185. package/package/helpers/sessionId.js +11 -4
  186. package/package/helpers/uuid.js +1 -1
  187. package/package/helpers/visitorId.d.ts +1 -1
  188. package/package/helpers/visitorId.js +7 -4
  189. package/package/index-helpers/blocks-exports.d.ts +2 -2
  190. package/package/index-helpers/blocks-exports.js +2 -2
  191. package/package/index.d.ts +2 -2
  192. package/package/index.js +1 -1
  193. package/package/scripts/init-editing.js +65 -57
  194. package/package/types/builder-props.d.ts +10 -0
  195. package/package/types/components.d.ts +8 -2
  196. package/package/types/enforced-partials.d.ts +21 -0
  197. package/package/types/targets.d.ts +1 -3
  198. package/package/types/typescript.d.ts +6 -0
  199. package/package.json +2 -2
  200. package/src/blocks/BaseText.svelte +1 -1
  201. package/src/blocks/button/button.svelte +21 -34
  202. package/src/blocks/button/component-info.ts +20 -27
  203. package/src/blocks/columns/columns.svelte +28 -32
  204. package/src/blocks/columns/component-info.ts +205 -240
  205. package/src/blocks/custom-code/component-info.ts +20 -27
  206. package/src/blocks/embed/component-info.ts +34 -51
  207. package/src/blocks/embed/helpers.ts +2 -8
  208. package/src/blocks/form/component-info.ts +204 -253
  209. package/src/blocks/form/form.svelte +1 -368
  210. package/src/blocks/fragment/component-info.ts +3 -5
  211. package/src/blocks/helpers.ts +43 -0
  212. package/src/blocks/image/component-info.ts +113 -161
  213. package/src/blocks/image/image.helpers.ts +5 -33
  214. package/src/blocks/img/component-info.ts +11 -16
  215. package/src/blocks/img/img.svelte +7 -31
  216. package/src/blocks/input/component-info.ts +35 -66
  217. package/src/blocks/input/input.svelte +7 -31
  218. package/src/blocks/raw-text/component-info.ts +8 -12
  219. package/src/blocks/raw-text/raw-text.svelte +2 -5
  220. package/src/blocks/section/component-info.ts +28 -37
  221. package/src/blocks/section/section.svelte +7 -30
  222. package/src/blocks/select/component-info.ts +38 -55
  223. package/src/blocks/select/select.svelte +7 -31
  224. package/src/blocks/submit-button/component-info.ts +10 -15
  225. package/src/blocks/submit-button/submit-button.svelte +7 -30
  226. package/src/blocks/symbol/component-info.ts +31 -39
  227. package/src/blocks/symbol/symbol.helpers.ts +47 -0
  228. package/src/blocks/symbol/symbol.svelte +51 -95
  229. package/src/blocks/text/component-info.ts +14 -18
  230. package/src/blocks/text/text.svelte +2 -2
  231. package/src/blocks/textarea/component-info.ts +26 -36
  232. package/src/blocks/textarea/textarea.svelte +7 -30
  233. package/src/blocks/video/component-info.ts +77 -103
  234. package/src/blocks/video/video.svelte +4 -31
  235. package/src/components/{render-block/render-block.helpers.ts → block/block.helpers.ts} +22 -49
  236. package/src/components/block/block.svelte +158 -0
  237. package/src/components/{render-block → block/components}/block-styles.svelte +24 -25
  238. package/src/components/block/components/block-wrapper.svelte +70 -0
  239. package/src/components/block/components/component-ref/component-ref.helpers.ts +53 -0
  240. package/src/components/block/components/component-ref/component-ref.svelte +41 -0
  241. package/src/components/block/components/interactive-element.svelte +42 -0
  242. package/src/components/block/components/repeated-block.svelte +30 -0
  243. package/src/components/{render-block → block}/types.ts +1 -2
  244. package/src/components/{render-blocks.svelte → blocks/blocks-wrapper.svelte} +14 -32
  245. package/src/components/blocks/blocks.svelte +39 -0
  246. package/src/components/{render-content/render-content.svelte → content/components/enable-editor.svelte} +75 -202
  247. package/src/components/{render-content/components/render-styles.helpers.ts → content/components/styles.helpers.ts} +9 -11
  248. package/src/components/{render-content/components/render-styles.svelte → content/components/styles.svelte} +5 -5
  249. package/src/components/content/content.helpers.ts +42 -0
  250. package/src/components/content/content.svelte +138 -0
  251. package/src/components/content/content.types.ts +23 -0
  252. package/src/components/content/index.ts +1 -0
  253. package/src/components/{render-content → content}/wrap-component-ref.ts +1 -1
  254. package/src/components/content-variants/content-variants.svelte +120 -0
  255. package/src/components/content-variants/content-variants.types.ts +20 -0
  256. package/src/components/{render-content-variants → content-variants}/helpers.ts +53 -94
  257. package/src/components/inlined-script.svelte +13 -0
  258. package/src/constants/builder-registered-components.ts +34 -14
  259. package/src/constants/device-sizes.ts +16 -22
  260. package/src/constants/sdk-version.ts +1 -1
  261. package/src/constants/target.ts +3 -1
  262. package/src/context/builder.context.ts +1 -1
  263. package/src/context/types.ts +2 -7
  264. package/src/functions/apply-patch-with-mutation.ts +61 -0
  265. package/src/functions/camel-to-kebab-case.ts +1 -2
  266. package/src/functions/evaluate/acorn.ts +2501 -0
  267. package/src/functions/evaluate/evaluate.ts +90 -0
  268. package/src/functions/evaluate/index.ts +1 -0
  269. package/src/functions/evaluate/interpreter.ts +3887 -0
  270. package/src/functions/evaluate/non-node-runtime.ts +94 -0
  271. package/src/functions/evaluate/types.ts +10 -0
  272. package/src/functions/extract-text-styles.ts +3 -18
  273. package/src/functions/fast-clone.ts +1 -2
  274. package/src/functions/get-block-actions-handler.ts +11 -20
  275. package/src/functions/get-block-actions.ts +22 -14
  276. package/src/functions/get-block-component-options.ts +2 -3
  277. package/src/functions/get-block-properties.ts +24 -17
  278. package/src/functions/get-builder-search-params/index.ts +5 -21
  279. package/src/functions/get-content/generate-content-url.ts +10 -25
  280. package/src/functions/get-content/index.ts +34 -37
  281. package/src/functions/get-content/types.ts +4 -2
  282. package/src/functions/get-fetch.ts +3 -10
  283. package/src/functions/get-global-this.ts +1 -2
  284. package/src/functions/get-processed-block.ts +14 -21
  285. package/src/functions/get-react-native-block-styles.ts +6 -12
  286. package/src/functions/if-target.ts +2 -3
  287. package/src/functions/is-browser.ts +1 -1
  288. package/src/functions/is-editing.ts +2 -7
  289. package/src/functions/is-iframe.ts +1 -2
  290. package/src/functions/is-non-node-server.ts +9 -0
  291. package/src/functions/is-previewing.ts +1 -4
  292. package/src/functions/on-change.ts +2 -2
  293. package/src/functions/register-component.ts +24 -26
  294. package/src/functions/register.ts +6 -8
  295. package/src/functions/sanitize-react-native-block-styles.ts +17 -24
  296. package/src/functions/set-editor-settings.ts +5 -6
  297. package/src/functions/set.ts +3 -15
  298. package/src/functions/track/helpers.ts +8 -24
  299. package/src/functions/track/index.ts +37 -42
  300. package/src/functions/track/interaction.ts +21 -38
  301. package/src/functions/transform-block-properties.ts +1 -1
  302. package/src/functions/transform-block.ts +1 -1
  303. package/src/helpers/ab-tests.ts +69 -78
  304. package/src/helpers/canTrack.ts +2 -4
  305. package/src/helpers/cookie.ts +15 -46
  306. package/src/helpers/css.ts +4 -13
  307. package/src/helpers/flatten.ts +11 -16
  308. package/src/helpers/localStorage.ts +4 -8
  309. package/src/helpers/logger.ts +2 -2
  310. package/src/helpers/nullable.ts +1 -3
  311. package/src/helpers/preview-lru-cache/get.ts +8 -0
  312. package/src/helpers/preview-lru-cache/helpers.ts +9 -0
  313. package/src/helpers/preview-lru-cache/init.ts +17 -0
  314. package/src/helpers/preview-lru-cache/set.ts +18 -0
  315. package/src/helpers/preview-lru-cache/types.ts +12 -0
  316. package/src/helpers/sessionId.ts +12 -13
  317. package/src/helpers/time.ts +1 -3
  318. package/src/helpers/url.ts +1 -2
  319. package/src/helpers/uuid.ts +3 -3
  320. package/src/helpers/visitorId.ts +14 -17
  321. package/src/index-helpers/blocks-exports.ts +2 -2
  322. package/src/index-helpers/top-of-file.ts +1 -1
  323. package/src/index.ts +2 -13
  324. package/src/scripts/init-editing.ts +85 -98
  325. package/src/types/api-version.ts +1 -1
  326. package/src/types/builder-block.ts +1 -3
  327. package/src/types/builder-content.ts +7 -4
  328. package/src/types/builder-props.ts +10 -0
  329. package/src/types/can-track.ts +1 -1
  330. package/src/types/components.ts +17 -13
  331. package/src/types/deep-partial.ts +1 -7
  332. package/src/types/element.ts +1 -3
  333. package/src/types/enforced-partials.ts +13 -0
  334. package/src/types/input.ts +6 -9
  335. package/src/types/targets.ts +1 -6
  336. package/src/types/typescript.ts +10 -5
  337. package/package/blocks/util.d.ts +0 -4
  338. package/package/blocks/util.js +0 -13
  339. package/package/components/render-block/render-block.helpers.d.ts +0 -12
  340. package/package/components/render-block/render-block.svelte +0 -152
  341. package/package/components/render-block/render-block.svelte.d.ts +0 -24
  342. package/package/components/render-block/render-component.svelte +0 -21
  343. package/package/components/render-block/render-component.svelte.d.ts +0 -34
  344. package/package/components/render-block/render-repeated-block.svelte.d.ts +0 -23
  345. package/package/components/render-blocks.svelte.d.ts +0 -26
  346. package/package/components/render-content/builder-editing.svelte +0 -4
  347. package/package/components/render-content/builder-editing.svelte.d.ts +0 -14
  348. package/package/components/render-content/index.d.ts +0 -1
  349. package/package/components/render-content/index.js +0 -1
  350. package/package/components/render-content/render-content.helpers.d.ts +0 -7
  351. package/package/components/render-content/render-content.helpers.js +0 -30
  352. package/package/components/render-content/render-content.svelte.d.ts +0 -31
  353. package/package/components/render-content/render-content.types.d.ts +0 -38
  354. package/package/components/render-content-variants/helpers.d.ts +0 -17
  355. package/package/components/render-content-variants/render-content-variants.svelte +0 -70
  356. package/package/components/render-content-variants/render-content-variants.svelte.d.ts +0 -23
  357. package/package/components/render-inlined-styles.svelte.d.ts +0 -21
  358. package/package/functions/evaluate.test.js +0 -17
  359. package/package/functions/get-builder-search-params/fn.test.js +0 -13
  360. package/package/functions/get-content/generate-content-url.test.js +0 -97
  361. package/package/functions/get-processed-block.test.js +0 -33
  362. package/package/functions/on-change.test.d.ts +0 -1
  363. package/package/functions/on-change.test.js +0 -20
  364. package/package/functions/set.test.d.ts +0 -1
  365. package/package/functions/set.test.js +0 -16
  366. package/package/helpers/url.test.d.ts +0 -1
  367. package/package/helpers/url.test.js +0 -21
  368. package/src/blocks/util.ts +0 -18
  369. package/src/components/render-block/render-block.svelte +0 -173
  370. package/src/components/render-block/render-component.svelte +0 -40
  371. package/src/components/render-block/render-repeated-block.svelte +0 -25
  372. package/src/components/render-content/builder-editing.svelte +0 -4
  373. package/src/components/render-content/index.ts +0 -1
  374. package/src/components/render-content/render-content.helpers.ts +0 -48
  375. package/src/components/render-content/render-content.types.ts +0 -42
  376. package/src/components/render-content-variants/render-content-variants.svelte +0 -83
  377. package/src/functions/evaluate.test.ts +0 -21
  378. package/src/functions/evaluate.ts +0 -99
  379. package/src/functions/get-builder-search-params/fn.test.ts +0 -19
  380. package/src/functions/get-content/generate-content-url.test.ts +0 -112
  381. package/src/functions/get-processed-block.test.ts +0 -35
  382. package/src/functions/on-change.test.ts +0 -23
  383. package/src/functions/set.test.ts +0 -19
  384. package/src/helpers/url.test.ts +0 -23
  385. /package/package/components/{render-block → block}/types.d.ts +0 -0
  386. /package/package/components/{render-block → block}/types.js +0 -0
  387. /package/package/{functions/evaluate.test.d.ts → components/content/content.types.js} +0 -0
  388. /package/package/components/{render-content → content}/wrap-component-ref.d.ts +0 -0
  389. /package/package/components/{render-content → content}/wrap-component-ref.js +0 -0
  390. /package/package/components/{render-content/render-content.types.js → content-variants/content-variants.types.js} +0 -0
  391. /package/package/components/{render-inlined-styles.svelte → inlined-styles.svelte} +0 -0
  392. /package/package/functions/{get-builder-search-params/fn.test.d.ts → evaluate/types.js} +0 -0
  393. /package/package/{functions/get-content/generate-content-url.test.d.ts → types/builder-props.js} +0 -0
  394. /package/package/{functions/get-processed-block.test.d.ts → types/enforced-partials.js} +0 -0
  395. /package/src/components/{render-inlined-styles.svelte → inlined-styles.svelte} +0 -0
@@ -1,11 +1,7 @@
1
1
  function round(num: number) {
2
2
  return Math.round(num * 1000) / 1000;
3
3
  }
4
- const findParentElement = (
5
- target: HTMLElement,
6
- callback: (element: HTMLElement) => boolean,
7
- checkElement = true
8
- ): HTMLElement | null => {
4
+ const findParentElement = (target: HTMLElement, callback: (element: HTMLElement) => boolean, checkElement = true): HTMLElement | null => {
9
5
  if (!(target instanceof HTMLElement)) {
10
6
  return null;
11
7
  }
@@ -14,30 +10,24 @@ const findParentElement = (
14
10
  if (!parent) {
15
11
  return null;
16
12
  }
17
-
18
13
  const matches = callback(parent);
19
14
  if (matches) {
20
15
  return parent;
21
16
  }
22
- } while ((parent = parent.parentElement));
23
-
17
+ } while (parent = parent.parentElement);
24
18
  return null;
25
19
  };
26
-
27
- const findBuilderParent = (target: HTMLElement) =>
28
- findParentElement(target, (el) => {
29
- const id = el.getAttribute('builder-id') || el.id;
30
- return Boolean(id?.indexOf('builder-') === 0);
31
- });
32
-
20
+ const findBuilderParent = (target: HTMLElement) => findParentElement(target, el => {
21
+ const id = el.getAttribute('builder-id') || el.id;
22
+ return Boolean(id?.indexOf('builder-') === 0);
23
+ });
33
24
  type Offset = {
34
25
  x: number;
35
26
  y: number;
36
27
  };
37
-
38
28
  const computeOffset = ({
39
29
  event,
40
- target,
30
+ target
41
31
  }: {
42
32
  event: MouseEvent;
43
33
  target: HTMLElement;
@@ -45,36 +35,29 @@ const computeOffset = ({
45
35
  const targetRect = target.getBoundingClientRect();
46
36
  const xOffset = event.clientX - targetRect.left;
47
37
  const yOffset = event.clientY - targetRect.top;
48
-
49
38
  const xRatio = round(xOffset / targetRect.width);
50
39
  const yRatio = round(yOffset / targetRect.height);
51
-
52
40
  return {
53
41
  x: xRatio,
54
- y: yRatio,
42
+ y: yRatio
55
43
  };
56
44
  };
57
-
58
45
  export const getInteractionPropertiesForEvent = (event: MouseEvent) => {
59
- const target = event.target as HTMLElement | null;
46
+ const target = (event.target as HTMLElement | null);
60
47
  const targetBuilderElement = target && findBuilderParent(target);
61
- const builderId =
62
- targetBuilderElement?.getAttribute('builder-id') ||
63
- targetBuilderElement?.id;
64
-
48
+ const builderId = targetBuilderElement?.getAttribute('builder-id') || targetBuilderElement?.id;
65
49
  return {
66
50
  targetBuilderElement: builderId || undefined,
67
51
  metadata: {
68
- targetOffset: target ? computeOffset({ event, target }) : undefined,
69
- builderTargetOffset: targetBuilderElement
70
- ? computeOffset({ event, target: targetBuilderElement })
71
- : undefined,
72
- builderElementIndex:
73
- targetBuilderElement && builderId
74
- ? ([] as Element[]).slice
75
- .call(document.getElementsByClassName(builderId))
76
- .indexOf(targetBuilderElement)
77
- : undefined,
78
- },
52
+ targetOffset: target ? computeOffset({
53
+ event,
54
+ target
55
+ }) : undefined,
56
+ builderTargetOffset: targetBuilderElement ? computeOffset({
57
+ event,
58
+ target: targetBuilderElement
59
+ }) : undefined,
60
+ builderElementIndex: targetBuilderElement && builderId ? ([] as Element[]).slice.call(document.getElementsByClassName(builderId)).indexOf(targetBuilderElement) : undefined
61
+ }
79
62
  };
80
- };
63
+ }
@@ -1,3 +1,3 @@
1
1
  export function transformBlockProperties<T>(properties: T) {
2
2
  return properties;
3
- }
3
+ }
@@ -3,4 +3,4 @@ import type { BuilderBlock } from '../types/builder-block.js';
3
3
  // Noope way for targets to make modifications to the block object if/as needed
4
4
  export function transformBlock(block: BuilderBlock): BuilderBlock {
5
5
  return block;
6
- }
6
+ }
@@ -1,49 +1,48 @@
1
1
  import type { CanTrack } from '../types/can-track.js';
2
2
  import { getCookie, getCookieSync, setCookie } from './cookie.js';
3
- import type {
4
- BuilderContent,
5
- BuilderContentVariation,
6
- } from '../types/builder-content.js';
3
+ import type { BuilderContent, BuilderContentVariation } from '../types/builder-content.js';
7
4
  import type { Nullable, Overwrite } from '../types/typescript.js';
8
5
  import { checkIsDefined } from '../helpers/nullable.js';
9
6
  import { logger } from './logger.js';
10
-
7
+ import { TARGET } from '../constants/target.js';
11
8
  const BUILDER_STORE_PREFIX = 'builder.tests';
12
-
13
9
  const getContentTestKey = (id: string) => `${BUILDER_STORE_PREFIX}.${id}`;
14
-
15
- const getContentVariationCookie = ({ contentId }: { contentId: string }) =>
16
- getCookie({ name: getContentTestKey(contentId), canTrack: true });
17
-
18
- const getContentVariationCookieSync = ({ contentId }: { contentId: string }) =>
19
- getCookieSync({ name: getContentTestKey(contentId), canTrack: true });
20
-
10
+ const getContentVariationCookie = ({
11
+ contentId
12
+ }: {
13
+ contentId: string;
14
+ }) => getCookie({
15
+ name: getContentTestKey(contentId),
16
+ canTrack: true
17
+ });
18
+ const getContentVariationCookieSync = ({
19
+ contentId
20
+ }: {
21
+ contentId: string;
22
+ }) => getCookieSync({
23
+ name: getContentTestKey(contentId),
24
+ canTrack: true
25
+ });
21
26
  const setContentVariationCookie = ({
22
27
  contentId,
23
- value,
28
+ value
24
29
  }: {
25
30
  contentId: string;
26
31
  value: string;
27
- }) => setCookie({ name: getContentTestKey(contentId), value, canTrack: true });
28
-
29
- type BuilderContentWithVariations = Overwrite<
30
- BuilderContent,
31
- Required<Pick<BuilderContent, 'variations' | 'id'>>
32
- >;
33
-
34
- const checkIsBuilderContentWithVariations = (
35
- item: BuilderContent
36
- ): item is BuilderContentWithVariations =>
37
- checkIsDefined(item.id) &&
38
- checkIsDefined(item.variations) &&
39
- Object.keys(item.variations).length > 0;
32
+ }) => setCookie({
33
+ name: getContentTestKey(contentId),
34
+ value,
35
+ canTrack: true
36
+ });
37
+ type BuilderContentWithVariations = Overwrite<BuilderContent, Required<Pick<BuilderContent, 'variations' | 'id'>>>;
38
+ const checkIsBuilderContentWithVariations = (item: BuilderContent): item is BuilderContentWithVariations => checkIsDefined(item.id) && checkIsDefined(item.variations) && Object.keys(item.variations).length > 0;
40
39
 
41
40
  /**
42
41
  * Randomly assign a variation to a user
43
42
  */
44
43
  const getRandomVariationId = ({
45
44
  id,
46
- variations,
45
+ variations
47
46
  }: BuilderContentWithVariations) => {
48
47
  let n = 0;
49
48
  const random = Math.random();
@@ -53,7 +52,6 @@ const getRandomVariationId = ({
53
52
  for (const id in variations) {
54
53
  const testRatio = variations[id]?.testRatio;
55
54
  n += testRatio!;
56
-
57
55
  if (random < n) {
58
56
  return id;
59
57
  }
@@ -63,7 +61,6 @@ const getRandomVariationId = ({
63
61
  // if we arrive here, then it means that the random number fits in the default variation bucket.
64
62
  return id;
65
63
  };
66
-
67
64
  const getAndSetVariantId = (args: BuilderContentWithVariations) => {
68
65
  // if variation not found in storage, assign a random variation to this user
69
66
  const randomVariationId = getRandomVariationId(args);
@@ -71,105 +68,99 @@ const getAndSetVariantId = (args: BuilderContentWithVariations) => {
71
68
  // store variation in cookies/storage
72
69
  setContentVariationCookie({
73
70
  contentId: args.id,
74
- value: randomVariationId,
75
- }).catch((err) => {
71
+ value: randomVariationId
72
+ }).catch(err => {
76
73
  logger.error('could not store A/B test variation: ', err);
77
74
  });
78
-
79
75
  return randomVariationId;
80
76
  };
81
-
82
77
  type TestFields = {
83
78
  data?: BuilderContentVariation['data'];
84
79
  testVariationId?: string;
85
80
  testVariationName: string;
86
81
  };
87
-
88
82
  const getTestFields = ({
89
83
  item,
90
- testGroupId,
84
+ testGroupId
91
85
  }: {
92
86
  item: BuilderContentWithVariations;
93
87
  testGroupId: string;
94
88
  }): TestFields => {
95
89
  const variationValue = item.variations[testGroupId];
96
- if (
97
- testGroupId === item.id ||
98
- // handle edge-case where `testGroupId` points to non-existing variation
99
- !variationValue
100
- ) {
90
+ if (testGroupId === item.id ||
91
+ // handle edge-case where `testGroupId` points to non-existing variation
92
+ !variationValue) {
101
93
  return {
102
94
  testVariationId: item.id,
103
- testVariationName: 'Default',
95
+ testVariationName: 'Default'
104
96
  };
105
97
  } else {
106
98
  return {
107
99
  data: variationValue.data,
108
100
  testVariationId: variationValue.id,
109
- testVariationName:
110
- variationValue.name || (variationValue.id === item.id ? 'Default' : ''),
101
+ testVariationName: variationValue.name || (variationValue.id === item.id ? 'Default' : '')
111
102
  };
112
103
  }
113
104
  };
114
-
115
105
  export const handleABTestingSync = ({
116
106
  item,
117
- canTrack,
118
- }: { item: Nullable<BuilderContent> } & CanTrack): Nullable<BuilderContent> => {
107
+ canTrack
108
+ }: {
109
+ item: Nullable<BuilderContent>;
110
+ } & CanTrack): Nullable<BuilderContent> => {
111
+ /**
112
+ * We cannot SSR in React-Native.
113
+ */
114
+ if (TARGET === 'reactNative') return item;
119
115
  if (!canTrack) {
120
116
  return item;
121
117
  }
122
-
123
118
  if (!item) {
124
119
  return undefined;
125
120
  }
126
-
127
121
  if (!checkIsBuilderContentWithVariations(item)) {
128
122
  return item;
129
123
  }
130
-
131
- const testGroupId =
132
- getContentVariationCookieSync({
133
- contentId: item.id,
134
- }) ||
135
- getAndSetVariantId({
136
- variations: item.variations,
137
- id: item.id,
138
- });
139
-
140
- const variationValue = getTestFields({ item, testGroupId });
124
+ const testGroupId = getContentVariationCookieSync({
125
+ contentId: item.id
126
+ }) || getAndSetVariantId({
127
+ variations: item.variations,
128
+ id: item.id
129
+ });
130
+ const variationValue = getTestFields({
131
+ item,
132
+ testGroupId
133
+ });
141
134
  return {
142
135
  ...item,
143
- ...variationValue,
136
+ ...variationValue
144
137
  };
145
138
  };
146
-
147
139
  export const handleABTesting = async ({
148
140
  item,
149
- canTrack,
150
- }: { item: BuilderContent } & CanTrack): Promise<BuilderContent> => {
141
+ canTrack
142
+ }: {
143
+ item: BuilderContent;
144
+ } & CanTrack): Promise<BuilderContent> => {
151
145
  if (!canTrack) {
152
146
  return item;
153
147
  }
154
-
155
148
  if (!checkIsBuilderContentWithVariations(item)) {
156
149
  return item;
157
150
  }
158
-
159
151
  const cookieValue = await getContentVariationCookie({
160
- contentId: item.id,
152
+ contentId: item.id
153
+ });
154
+ const testGroupId = cookieValue || getAndSetVariantId({
155
+ variations: item.variations,
156
+ id: item.id
157
+ });
158
+ const variationValue = getTestFields({
159
+ item,
160
+ testGroupId
161
161
  });
162
-
163
- const testGroupId =
164
- cookieValue ||
165
- getAndSetVariantId({
166
- variations: item.variations,
167
- id: item.id,
168
- });
169
-
170
- const variationValue = getTestFields({ item, testGroupId });
171
162
  return {
172
163
  ...item,
173
- ...variationValue,
164
+ ...variationValue
174
165
  };
175
- };
166
+ }
@@ -1,4 +1,2 @@
1
- import { checkIsDefined } from './nullable';
2
-
3
- export const getDefaultCanTrack = (canTrack?: boolean) =>
4
- checkIsDefined(canTrack) ? canTrack : true;
1
+ import { checkIsDefined } from './nullable.js';
2
+ export const getDefaultCanTrack = (canTrack?: boolean) => checkIsDefined(canTrack) ? canTrack : true
@@ -3,14 +3,12 @@ import type { CanTrack } from '../types/can-track.js';
3
3
  import { logger } from './logger.js';
4
4
  import { checkIsDefined } from './nullable.js';
5
5
  import { getTopLevelDomain } from './url.js';
6
-
7
6
  type GetCookieArgs = {
8
7
  name: string;
9
8
  } & CanTrack;
10
-
11
9
  export const getCookieSync = ({
12
10
  name,
13
- canTrack,
11
+ canTrack
14
12
  }: GetCookieArgs): string | undefined => {
15
13
  try {
16
14
  if (!canTrack) {
@@ -21,10 +19,7 @@ export const getCookieSync = ({
21
19
  * Extracted from MDN docs
22
20
  * https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#example_2_get_a_sample_cookie_named_test2
23
21
  */
24
- return document.cookie
25
- .split('; ')
26
- .find((row) => row.startsWith(`${name}=`))
27
- ?.split('=')[1];
22
+ return document.cookie.split('; ').find(row => row.startsWith(`${name}=`))?.split('=')[1];
28
23
  } catch (err: any) {
29
24
  logger.warn('[COOKIE] GET error: ', err?.message || err);
30
25
  return undefined;
@@ -35,55 +30,25 @@ export const getCookieSync = ({
35
30
  * The sync version is only safe to use in code blocks that `react-native` is guaranteed not to not run.
36
31
  */
37
32
  export const getCookie = async (args: GetCookieArgs) => getCookieSync(args);
38
-
39
- type CookieConfiguration = Array<
40
- | ['expires', string]
41
- | ['path', '/']
42
- | ['domain', string]
43
- | ['secure', '']
44
- | ['SameSite', 'None']
45
- | [string, string]
46
- | []
47
- >;
48
-
49
- const stringifyCookie = (cookie: CookieConfiguration): string =>
50
- cookie
51
- .map(([key, value]) => (value ? `${key}=${value}` : key))
52
- .filter(checkIsDefined)
53
- .join('; ');
54
-
55
- const SECURE_CONFIG: CookieConfiguration = [
56
- ['secure', ''],
57
- ['SameSite', 'None'],
58
- ];
59
-
33
+ type CookieConfiguration = Array<['expires', string] | ['path', '/'] | ['domain', string] | ['secure', ''] | ['SameSite', 'None'] | [string, string] | []>;
34
+ const stringifyCookie = (cookie: CookieConfiguration): string => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join('; ');
35
+ const SECURE_CONFIG: CookieConfiguration = [['secure', ''], ['SameSite', 'None']];
60
36
  const createCookieString = ({
61
37
  name,
62
38
  value,
63
- expires,
39
+ expires
64
40
  }: {
65
41
  name: string;
66
42
  value: string;
67
43
  expires?: Date;
68
44
  }) => {
69
45
  const secure = isBrowser() ? location.protocol === 'https:' : true;
70
-
71
46
  const secureObj: CookieConfiguration = secure ? SECURE_CONFIG : [[]];
72
47
 
73
48
  // TODO: need to know if secure server side
74
- const expiresObj: CookieConfiguration = expires
75
- ? [['expires', expires.toUTCString()]]
76
- : [[]];
77
-
78
- const cookieValue: CookieConfiguration = [
79
- [name, value],
80
- ...expiresObj,
81
- ['path', '/'],
82
- ['domain', getTopLevelDomain(window.location.hostname)],
83
- ...secureObj,
84
- ];
49
+ const expiresObj: CookieConfiguration = expires ? [['expires', expires.toUTCString()]] : [[]];
50
+ const cookieValue: CookieConfiguration = [[name, value], ...expiresObj, ['path', '/'], ['domain', getTopLevelDomain(window.location.hostname)], ...secureObj];
85
51
  const cookie = stringifyCookie(cookieValue);
86
-
87
52
  return cookie;
88
53
  };
89
54
 
@@ -94,7 +59,7 @@ export const setCookie = async ({
94
59
  name,
95
60
  value,
96
61
  expires,
97
- canTrack,
62
+ canTrack
98
63
  }: {
99
64
  name: string;
100
65
  value: string;
@@ -104,9 +69,13 @@ export const setCookie = async ({
104
69
  if (!canTrack) {
105
70
  return;
106
71
  }
107
- const cookie = createCookieString({ name, value, expires });
72
+ const cookie = createCookieString({
73
+ name,
74
+ value,
75
+ expires
76
+ });
108
77
  document.cookie = cookie;
109
78
  } catch (err: any) {
110
79
  logger.warn('[COOKIE] SET error: ', err?.message || err);
111
80
  }
112
- };
81
+ }
@@ -1,9 +1,6 @@
1
1
  import { camelToKebabCase } from '../functions/camel-to-kebab-case.js';
2
2
  import { checkIsDefined } from './nullable.js';
3
-
4
- export const convertStyleMapToCSSArray = (
5
- style: Partial<CSSStyleDeclaration>
6
- ): string[] => {
3
+ export const convertStyleMapToCSSArray = (style: Partial<CSSStyleDeclaration>): string[] => {
7
4
  const cssProps = Object.entries(style).map(([key, value]) => {
8
5
  if (typeof value === 'string') {
9
6
  return `${camelToKebabCase(key)}: ${value};`;
@@ -11,18 +8,13 @@ export const convertStyleMapToCSSArray = (
11
8
  return undefined;
12
9
  }
13
10
  });
14
-
15
11
  return cssProps.filter(checkIsDefined);
16
12
  };
17
-
18
- export const convertStyleMapToCSS = (
19
- style: Partial<CSSStyleDeclaration>
20
- ): string => convertStyleMapToCSSArray(style).join('\n');
21
-
13
+ export const convertStyleMapToCSS = (style: Partial<CSSStyleDeclaration>): string => convertStyleMapToCSSArray(style).join('\n');
22
14
  export const createCssClass = ({
23
15
  mediaQuery,
24
16
  className,
25
- styles,
17
+ styles
26
18
  }: {
27
19
  mediaQuery?: string;
28
20
  className: string;
@@ -31,7 +23,6 @@ export const createCssClass = ({
31
23
  const cssClass = `.${className} {
32
24
  ${convertStyleMapToCSS(styles)}
33
25
  }`;
34
-
35
26
  if (mediaQuery) {
36
27
  return `${mediaQuery} {
37
28
  ${cssClass}
@@ -39,4 +30,4 @@ export const createCssClass = ({
39
30
  } else {
40
31
  return cssClass;
41
32
  }
42
- };
33
+ }
@@ -3,22 +3,17 @@
3
3
  *
4
4
  * { foo: { bar: 'baz' }} -> { 'foo.bar': 'baz' }
5
5
  */
6
- export function flatten<T extends Record<string, any>>(
7
- object: T,
8
- path: string | null = null,
9
- separator = '.'
10
- ): T {
6
+ export function flatten<T extends Record<string, any>>(object: T, path: string | null = null, separator = '.'): T {
11
7
  return Object.keys(object).reduce((acc: T, key: string): T => {
12
8
  const value = object[key];
13
9
  const newPath = [path, key].filter(Boolean).join(separator);
14
- const isObject = [
15
- typeof value === 'object',
16
- value !== null,
17
- !(Array.isArray(value) && value.length === 0),
18
- ].every(Boolean);
19
-
20
- return isObject
21
- ? { ...acc, ...flatten(value, newPath, separator) }
22
- : { ...acc, [newPath]: value };
23
- }, {} as T);
24
- }
10
+ const isObject = [typeof value === 'object', value !== null, !(Array.isArray(value) && value.length === 0)].every(Boolean);
11
+ return isObject ? {
12
+ ...acc,
13
+ ...flatten(value, newPath, separator)
14
+ } : {
15
+ ...acc,
16
+ [newPath]: value
17
+ };
18
+ }, ({} as T));
19
+ }
@@ -1,13 +1,10 @@
1
1
  import { isBrowser } from '../functions/is-browser.js';
2
2
  import type { CanTrack } from '../types/can-track.js';
3
3
  import type { Nullable } from './nullable.js';
4
-
5
- const getLocalStorage = () =>
6
- isBrowser() && typeof localStorage !== 'undefined' ? localStorage : undefined;
7
-
4
+ const getLocalStorage = () => isBrowser() && typeof localStorage !== 'undefined' ? localStorage : undefined;
8
5
  export const getLocalStorageItem = ({
9
6
  key,
10
- canTrack,
7
+ canTrack
11
8
  }: {
12
9
  key: string;
13
10
  } & CanTrack): Nullable<string> => {
@@ -21,11 +18,10 @@ export const getLocalStorageItem = ({
21
18
  return undefined;
22
19
  }
23
20
  };
24
-
25
21
  export const setLocalStorageItem = ({
26
22
  key,
27
23
  canTrack,
28
- value,
24
+ value
29
25
  }: {
30
26
  key: string;
31
27
  value: string;
@@ -37,4 +33,4 @@ export const setLocalStorageItem = ({
37
33
  } catch (err) {
38
34
  console.debug('[LocalStorage] SET error: ', err);
39
35
  }
40
- };
36
+ }
@@ -3,5 +3,5 @@ export const logger = {
3
3
  log: (...message: any[]) => console.log(MSG_PREFIX, ...message),
4
4
  error: (...message: any[]) => console.error(MSG_PREFIX, ...message),
5
5
  warn: (...message: any[]) => console.warn(MSG_PREFIX, ...message),
6
- debug: (...message: any[]) => console.debug(MSG_PREFIX, ...message),
7
- };
6
+ debug: (...message: any[]) => console.debug(MSG_PREFIX, ...message)
7
+ }
@@ -1,4 +1,2 @@
1
1
  export type Nullable<T> = T | null | undefined;
2
-
3
- export const checkIsDefined = <T>(maybeT: Nullable<T>): maybeT is T =>
4
- maybeT !== null && maybeT !== undefined;
2
+ export const checkIsDefined = <T,>(maybeT: Nullable<T>): maybeT is T => maybeT !== null && maybeT !== undefined
@@ -0,0 +1,8 @@
1
+ import { getIdFromSearchParams } from './helpers';
2
+ import { init } from './init';
3
+ import type { GlobalWCache } from './types';
4
+ export function getPreviewContent(searchParams: URLSearchParams) {
5
+ init();
6
+ const id = getIdFromSearchParams(searchParams);
7
+ return typeof id === 'string' ? (globalThis as GlobalWCache)._BUILDER_PREVIEW_LRU_CACHE.get(id) : undefined;
8
+ }
@@ -0,0 +1,9 @@
1
+ import { logger } from '../logger';
2
+ export const getIdFromSearchParams = (searchParams: URLSearchParams) => {
3
+ const previewedModel = searchParams.get('preview');
4
+ const previewedId = searchParams.get('overrides.' + previewedModel);
5
+ if (!previewedId) {
6
+ logger.warn('No previewed ID found in search params.');
7
+ }
8
+ return previewedId;
9
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This is an LRU cache to hold preview content on the server-side.
3
+ *
4
+ * Note: This logic is only used by the NextJS SDK.
5
+ */
6
+
7
+ import { LRUCache } from 'lru-cache';
8
+ import type { GlobalWCache } from './types';
9
+ export function init() {
10
+ if (!(globalThis as GlobalWCache)._BUILDER_PREVIEW_LRU_CACHE) {
11
+ (globalThis as GlobalWCache)._BUILDER_PREVIEW_LRU_CACHE = new LRUCache({
12
+ max: 500,
13
+ // how long to live in ms
14
+ ttl: 1000 * 60 * 5
15
+ });
16
+ }
17
+ }
@@ -0,0 +1,18 @@
1
+ 'use server';
2
+
3
+ import type { BuilderContent } from '../../types/builder-content';
4
+ import { init } from './init';
5
+ import type { GlobalWCache } from './types';
6
+ export async function postPreviewContent({
7
+ key,
8
+ value
9
+ }: {
10
+ key: string;
11
+ value: BuilderContent;
12
+ }) {
13
+ init();
14
+ (globalThis as GlobalWCache)._BUILDER_PREVIEW_LRU_CACHE.set(key, value);
15
+ return {
16
+ [key]: value
17
+ };
18
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This is an LRU cache to hold preview content on the server-side.
3
+ *
4
+ * Note: This logic is only used by the NextJS SDK.
5
+ */
6
+
7
+ import type { LRUCache } from 'lru-cache';
8
+ import type { BuilderContent } from '../../types/builder-content';
9
+ type BuilderLRUCache = LRUCache<string, BuilderContent>;
10
+ export type GlobalWCache = typeof globalThis & {
11
+ _BUILDER_PREVIEW_LRU_CACHE: BuilderLRUCache;
12
+ }