@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
@@ -0,0 +1,98 @@
1
+ <script context="module"></script>
2
+
3
+ <script>import { onMount } from "svelte";
4
+ import { checkShouldRunVariants, getScriptString, getVariants, getVariantsScriptString, } from "./helpers.js";
5
+ import ContentComponent from "../content/content.svelte";
6
+ import { getDefaultCanTrack } from "../../helpers/canTrack.js";
7
+ import InlinedStyles from "../inlined-styles.svelte";
8
+ import { handleABTestingSync } from "../../helpers/ab-tests.js";
9
+ import InlinedScript from "../inlined-script.svelte";
10
+ import { TARGET } from "../../constants/target.js";
11
+ export let canTrack;
12
+ export let content;
13
+ export let __isNestedRender;
14
+ export let model;
15
+ export let data;
16
+ export let context;
17
+ export let apiKey;
18
+ export let apiVersion;
19
+ export let customComponents;
20
+ export let locale;
21
+ export let includeRefs;
22
+ export let enrich;
23
+ $: variantScriptStr = () => {
24
+ return getVariantsScriptString(getVariants(content).map((value) => ({
25
+ id: value.testVariationId,
26
+ testRatio: value.testRatio,
27
+ })), content?.id || "");
28
+ };
29
+ $: hideVariantsStyleString = () => {
30
+ return getVariants(content)
31
+ .map((value) => `.variant-${value.testVariationId} { display: none; } `)
32
+ .join("");
33
+ };
34
+ let shouldRenderVariants = checkShouldRunVariants({
35
+ canTrack: getDefaultCanTrack(canTrack),
36
+ content: content,
37
+ });
38
+ onMount(() => {
39
+ /**
40
+ * We unmount the non-winning variants post-hydration in Vue.
41
+ */
42
+ });
43
+ </script>
44
+
45
+ {#if !__isNestedRender && TARGET !== "reactNative"}
46
+ <InlinedScript scriptStr={getScriptString()} />
47
+ {/if}
48
+
49
+ {#if shouldRenderVariants}
50
+ <InlinedStyles
51
+ id={`variants-styles-${content?.id}`}
52
+ styles={hideVariantsStyleString()}
53
+ />
54
+
55
+ <InlinedScript scriptStr={variantScriptStr()} />
56
+
57
+ {#each getVariants(content) as variant (variant.testVariationId)}
58
+ <ContentComponent
59
+ content={variant}
60
+ showContent={false}
61
+ classNameProp={undefined}
62
+ {model}
63
+ {data}
64
+ {context}
65
+ {apiKey}
66
+ {apiVersion}
67
+ {customComponents}
68
+ {canTrack}
69
+ {locale}
70
+ {includeRefs}
71
+ {enrich}
72
+ isSsrAbTest={shouldRenderVariants}
73
+ />
74
+ {/each}
75
+ {/if}
76
+
77
+ <ContentComponent
78
+ {...{}}
79
+ content={shouldRenderVariants
80
+ ? content
81
+ : handleABTestingSync({
82
+ item: content,
83
+ canTrack: getDefaultCanTrack(canTrack),
84
+ })}
85
+ classNameProp={`variant-${content?.id}`}
86
+ showContent={true}
87
+ {model}
88
+ {data}
89
+ {context}
90
+ {apiKey}
91
+ {apiVersion}
92
+ {customComponents}
93
+ {canTrack}
94
+ {locale}
95
+ {includeRefs}
96
+ {enrich}
97
+ isSsrAbTest={shouldRenderVariants}
98
+ />
@@ -0,0 +1,34 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ type VariantsProviderProps = ContentVariantsProps & {
3
+ /**
4
+ * For internal use only. Do not provide this prop.
5
+ */
6
+ __isNestedRender?: boolean;
7
+ };
8
+ import type { ContentVariantsProps } from "./content-variants.types.js";
9
+ declare const __propDef: {
10
+ props: {
11
+ canTrack: VariantsProviderProps["canTrack"];
12
+ content: VariantsProviderProps["content"];
13
+ __isNestedRender: VariantsProviderProps["__isNestedRender"];
14
+ model: VariantsProviderProps["model"];
15
+ data: VariantsProviderProps["data"];
16
+ context: VariantsProviderProps["context"];
17
+ apiKey: VariantsProviderProps["apiKey"];
18
+ apiVersion: VariantsProviderProps["apiVersion"];
19
+ customComponents: VariantsProviderProps["customComponents"];
20
+ locale: VariantsProviderProps["locale"];
21
+ includeRefs: VariantsProviderProps["includeRefs"];
22
+ enrich: VariantsProviderProps["enrich"];
23
+ };
24
+ events: {
25
+ [evt: string]: CustomEvent<any>;
26
+ };
27
+ slots: {};
28
+ };
29
+ export type ContentVariantsProps = typeof __propDef.props;
30
+ export type ContentVariantsEvents = typeof __propDef.events;
31
+ export type ContentVariantsSlots = typeof __propDef.slots;
32
+ export default class ContentVariants extends SvelteComponentTyped<ContentVariantsProps, ContentVariantsEvents, ContentVariantsSlots> {
33
+ }
34
+ export {};
@@ -0,0 +1,20 @@
1
+ import type { BuilderRenderContext, RegisteredComponent } from '../../context/types.js';
2
+ import type { ApiVersion } from '../../types/api-version.js';
3
+ import type { BuilderContent } from '../../types/builder-content.js';
4
+ import type { Nullable } from '../../types/typescript.js';
5
+ export interface ContentVariantsProps {
6
+ content?: Nullable<BuilderContent>;
7
+ model?: string;
8
+ data?: {
9
+ [key: string]: any;
10
+ };
11
+ context?: BuilderRenderContext;
12
+ apiKey: string;
13
+ apiVersion?: ApiVersion;
14
+ customComponents?: RegisteredComponent[];
15
+ canTrack?: boolean;
16
+ locale?: string;
17
+ /** @deprecated use `enrich` instead **/
18
+ includeRefs?: boolean;
19
+ enrich?: boolean;
20
+ }
@@ -0,0 +1,41 @@
1
+ import type { Nullable } from '../../helpers/nullable.js';
2
+ import type { BuilderContent } from '../../types/builder-content.js';
3
+ export declare const getVariants: (content: Nullable<BuilderContent>) => {
4
+ testVariationId: string | undefined;
5
+ id: string | undefined;
6
+ data?: {
7
+ [key: string]: any;
8
+ title?: string | undefined;
9
+ blocks?: import("../../types/builder-block.js").BuilderBlock[] | undefined;
10
+ inputs?: import("../../types/input.js").Input[] | undefined;
11
+ state?: {
12
+ [key: string]: any;
13
+ } | undefined;
14
+ jsCode?: string | undefined;
15
+ tsCode?: string | undefined;
16
+ httpRequests?: {
17
+ [key: string]: string;
18
+ } | undefined;
19
+ } | undefined;
20
+ name?: string | undefined;
21
+ testRatio?: number | undefined;
22
+ meta?: {
23
+ [key: string]: any;
24
+ breakpoints?: import("../../types/typescript.js").Nullable<import("../../types/builder-content.js").Breakpoints>;
25
+ } | undefined;
26
+ }[];
27
+ export declare const checkShouldRunVariants: ({ canTrack, content }: {
28
+ canTrack: Nullable<boolean>;
29
+ content: Nullable<BuilderContent>;
30
+ }) => boolean;
31
+ type VariantData = {
32
+ id: string;
33
+ testRatio?: number;
34
+ };
35
+ export declare const getScriptString: () => string;
36
+ export declare const getVariantsScriptString: (variants: VariantData[], contentId: string) => string;
37
+ export declare const getRenderContentScriptString: ({ contentId, variationId }: {
38
+ variationId: string;
39
+ contentId: string;
40
+ }) => string;
41
+ export {};
@@ -1,17 +1,32 @@
1
- import { TARGET } from '../../constants/target';
2
- import { isBrowser } from '../../functions/is-browser';
3
- export const getVariants = (content) => Object.values(content?.variations || {});
4
- export const checkShouldRunVariants = ({ canTrack, content, }) => {
1
+ import { TARGET } from '../../constants/target.js';
2
+ import { isBrowser } from '../../functions/is-browser.js';
3
+ export const getVariants = (content) => Object.values(content?.variations || {}).map(variant => ({
4
+ ...variant,
5
+ testVariationId: variant.id,
6
+ id: content?.id
7
+ }));
8
+ export const checkShouldRunVariants = ({ canTrack, content }) => {
5
9
  const hasVariants = getVariants(content).length > 0;
6
- if (!hasVariants) {
10
+ /**
11
+ * We cannot SSR in React-Native.
12
+ */
13
+ if (TARGET === 'reactNative')
7
14
  return false;
8
- }
9
- if (!canTrack) {
15
+ if (!hasVariants)
10
16
  return false;
11
- }
12
- if (isBrowser()) {
17
+ if (!canTrack)
18
+ return false;
19
+ /**
20
+ * For Vue 2 and Vue 3, we need to (initially) render the variants. This is to avoid hydration mismatch errors.
21
+ * Unlike React, Vue's hydration checks are shallow and do not check the attributes/contents of each element, so we
22
+ * are able to modify the `hidden` HTML attributes and `display` CSS properties without causing a hydration mismatch error.
23
+ *
24
+ * NOTE: after the app is hydrated, we strip the variants from the DOM (on mount) to reduce the amount of HTML in the DOM.
25
+ */
26
+ if (TARGET === 'vue2' || TARGET === 'vue3')
27
+ return true;
28
+ if (isBrowser())
13
29
  return false;
14
- }
15
30
  return true;
16
31
  };
17
32
  /**
@@ -27,13 +42,7 @@ function bldrAbTest(contentId, variants, isHydrationTarget) {
27
42
  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
28
43
  expires = '; expires=' + date.toUTCString();
29
44
  }
30
- document.cookie =
31
- name +
32
- '=' +
33
- (value || '') +
34
- expires +
35
- '; path=/' +
36
- '; Secure; SameSite=None';
45
+ document.cookie = name + '=' + (value || '') + expires + '; path=/' + '; Secure; SameSite=None';
37
46
  }
38
47
  function getCookie(name) {
39
48
  const nameEQ = name + '=';
@@ -49,7 +58,7 @@ function bldrAbTest(contentId, variants, isHydrationTarget) {
49
58
  }
50
59
  const cookieName = `builder.tests.${contentId}`;
51
60
  const variantInCookie = getCookie(cookieName);
52
- const availableIDs = variants.map((vr) => vr.id).concat(contentId);
61
+ const availableIDs = variants.map(vr => vr.id).concat(contentId);
53
62
  /**
54
63
  * cookie already exists
55
64
  */
@@ -77,26 +86,23 @@ function bldrAbTest(contentId, variants, isHydrationTarget) {
77
86
  return contentId;
78
87
  }
79
88
  const winningVariantId = getAndSetVariantId();
80
- const styleEl = document.getElementById(`variants-styles-${contentId}`);
89
+ const styleEl = document.currentScript?.previousElementSibling;
81
90
  /**
82
91
  * For React to work, we need hydration to match SSR, so we completely remove this node and the styles tag.
83
92
  */
84
93
  if (isHydrationTarget) {
85
94
  styleEl.remove();
86
- const thisScriptEl = document.getElementById(`variants-script-${contentId}`);
95
+ const thisScriptEl = document.currentScript;
87
96
  thisScriptEl?.remove();
88
97
  }
89
98
  else {
90
99
  /* update styles to hide all variants except the winning variant */
91
- const newStyleStr = variants
92
- .concat({ id: contentId })
93
- .filter((variant) => variant.id !== winningVariantId)
94
- .map((value) => {
100
+ const newStyleStr = variants.concat({
101
+ id: contentId
102
+ }).filter(variant => variant.id !== winningVariantId).map(value => {
95
103
  return `.variant-${value.id} { display: none; }
96
104
  `;
97
- })
98
- .join('');
99
- /* TO-DO: check if this actually updates the style */
105
+ }).join('');
100
106
  styleEl.innerHTML = newStyleStr;
101
107
  }
102
108
  }
@@ -122,8 +128,7 @@ function bldrCntntScrpt(variantContentId, defaultContentId, isHydrationTarget) {
122
128
  }
123
129
  const cookieName = `builder.tests.${defaultContentId}`;
124
130
  const variantId = getCookie(cookieName);
125
- /** get parent div by searching on `builder-content-id` attr */
126
- const parentDiv = document.querySelector(`[builder-content-id="${variantContentId}"]`);
131
+ const parentDiv = document.currentScript?.parentElement;
127
132
  const variantIsDefaultContent = variantContentId === defaultContentId;
128
133
  if (variantId === variantContentId) {
129
134
  if (variantIsDefaultContent) {
@@ -156,10 +161,7 @@ function bldrCntntScrpt(variantContentId, defaultContentId, isHydrationTarget) {
156
161
  }
157
162
  return;
158
163
  }
159
- const getIsHydrationTarget = (target) => target === 'react' ||
160
- target === 'reactNative' ||
161
- target === 'vue3' ||
162
- target === 'vue2';
164
+ const getIsHydrationTarget = (target) => target === 'react' || target === 'reactNative';
163
165
  const isHydrationTarget = getIsHydrationTarget(TARGET);
164
166
  /**
165
167
  * We hardcode explicit function names here, because the `.toString()` of a function can change depending on the bundler.
@@ -167,18 +169,21 @@ const isHydrationTarget = getIsHydrationTarget(TARGET);
167
169
  *
168
170
  * So we hardcode the function names here, and then use those names in the script string to make sure the function names are consistent.
169
171
  */
170
- const AB_TEST_FN_NAME = 'bldrAbTest';
171
- const CONTENT_FN_NAME = 'bldrCntntScrpt';
172
- export const getVariantsScriptString = (variants, contentId) => {
172
+ const AB_TEST_FN_NAME = 'builderIoAbTest';
173
+ const CONTENT_FN_NAME = 'builderIoRenderContent';
174
+ export const getScriptString = () => {
173
175
  const fnStr = bldrAbTest.toString().replace(/\s+/g, ' ');
174
176
  const fnStr2 = bldrCntntScrpt.toString().replace(/\s+/g, ' ');
175
177
  return `
176
- const ${AB_TEST_FN_NAME} = ${fnStr}
177
- const ${CONTENT_FN_NAME} = ${fnStr2}
178
- ${AB_TEST_FN_NAME}("${contentId}", ${JSON.stringify(variants)}, ${isHydrationTarget})
178
+ window.${AB_TEST_FN_NAME} = ${fnStr}
179
+ window.${CONTENT_FN_NAME} = ${fnStr2}
179
180
  `;
180
181
  };
181
- export const getRenderContentScriptString = ({ parentContentId, contentId, }) => {
182
+ export const getVariantsScriptString = (variants, contentId) => {
183
+ return `
184
+ window.${AB_TEST_FN_NAME}("${contentId}",${JSON.stringify(variants)}, ${isHydrationTarget})`;
185
+ };
186
+ export const getRenderContentScriptString = ({ contentId, variationId }) => {
182
187
  return `
183
- ${CONTENT_FN_NAME}("${contentId}", "${parentContentId}", ${isHydrationTarget})`;
188
+ window.${CONTENT_FN_NAME}("${variationId}", "${contentId}", ${isHydrationTarget})`;
184
189
  };
@@ -0,0 +1,7 @@
1
+ <script context="module"></script>
2
+
3
+ <script>export let scriptStr;
4
+ export let id;
5
+ </script>
6
+
7
+ <svelte:element this={"script"} {id}>{@html scriptStr}</svelte:element>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ interface Props {
3
+ scriptStr: string;
4
+ id?: string;
5
+ }
6
+ declare const __propDef: {
7
+ props: {
8
+ scriptStr: Props["scriptStr"];
9
+ id: Props["id"];
10
+ };
11
+ events: {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {};
15
+ };
16
+ export type InlinedScriptProps = typeof __propDef.props;
17
+ export type InlinedScriptEvents = typeof __propDef.events;
18
+ export type InlinedScriptSlots = typeof __propDef.slots;
19
+ export default class InlinedScript extends SvelteComponentTyped<InlinedScriptProps, InlinedScriptEvents, InlinedScriptSlots> {
20
+ }
21
+ export {};
@@ -0,0 +1,21 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ interface Props {
3
+ styles: string;
4
+ id?: string;
5
+ }
6
+ declare const __propDef: {
7
+ props: {
8
+ styles: Props["styles"];
9
+ id: Props["id"];
10
+ };
11
+ events: {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {};
15
+ };
16
+ export type InlinedStylesProps = typeof __propDef.props;
17
+ export type InlinedStylesEvents = typeof __propDef.events;
18
+ export type InlinedStylesSlots = typeof __propDef.slots;
19
+ export default class InlinedStyles extends SvelteComponentTyped<InlinedStylesProps, InlinedStylesEvents, InlinedStylesSlots> {
20
+ }
21
+ export {};
@@ -24,16 +24,37 @@ import { componentInfo as customCodeInfo } from '../blocks/custom-code/component
24
24
  * Returns a list of all registered components.
25
25
  * NOTE: This needs to be a function to work around ESM circular dependencies.
26
26
  */
27
- export const getDefaultRegisteredComponents = () => [
28
- { component: Button, ...buttonComponentInfo },
29
- { component: Columns, ...columnsComponentInfo },
30
- { component: customCode, ...customCodeInfo },
31
- { component: embed, ...embedComponentInfo },
32
- { component: Fragment, ...fragmentComponentInfo },
33
- { component: Image, ...imageComponentInfo },
34
- { component: Img, ...imgComponentInfo },
35
- { component: Section, ...sectionComponentInfo },
36
- { component: Symbol, ...symbolComponentInfo },
37
- { component: Text, ...textComponentInfo },
38
- { component: Video, ...videoComponentInfo },
39
- ];
27
+ export const getDefaultRegisteredComponents = () => [{
28
+ component: Button,
29
+ ...buttonComponentInfo
30
+ }, {
31
+ component: Columns,
32
+ ...columnsComponentInfo
33
+ }, {
34
+ component: customCode,
35
+ ...customCodeInfo
36
+ }, {
37
+ component: embed,
38
+ ...embedComponentInfo
39
+ }, {
40
+ component: Fragment,
41
+ ...fragmentComponentInfo
42
+ }, {
43
+ component: Image,
44
+ ...imageComponentInfo
45
+ }, {
46
+ component: Img,
47
+ ...imgComponentInfo
48
+ }, {
49
+ component: Section,
50
+ ...sectionComponentInfo
51
+ }, {
52
+ component: Symbol,
53
+ ...symbolComponentInfo
54
+ }, {
55
+ component: Text,
56
+ ...textComponentInfo
57
+ }, {
58
+ component: Video,
59
+ ...videoComponentInfo
60
+ }];
@@ -1,20 +1,20 @@
1
- import { fastClone } from '../functions/fast-clone';
1
+ import { fastClone } from '../functions/fast-clone.js';
2
2
  const SIZES = {
3
3
  small: {
4
4
  min: 320,
5
5
  default: 321,
6
- max: 640,
6
+ max: 640
7
7
  },
8
8
  medium: {
9
9
  min: 641,
10
10
  default: 642,
11
- max: 991,
11
+ max: 991
12
12
  },
13
13
  large: {
14
14
  min: 990,
15
15
  default: 991,
16
- max: 1200,
17
- },
16
+ max: 1200
17
+ }
18
18
  };
19
19
  export const getMaxWidthQueryForSize = (size, sizeValues = SIZES) => `@media (max-width: ${sizeValues[size].max}px)`;
20
20
  export const getSizesForBreakpoints = ({ small, medium }) => {
@@ -26,19 +26,20 @@ export const getSizesForBreakpoints = ({ small, medium }) => {
26
26
  newSizes.small = {
27
27
  max: small,
28
28
  min: smallMin,
29
- default: smallMin + 1,
29
+ default: smallMin + 1
30
30
  };
31
31
  const mediumMin = newSizes.small.max + 1;
32
32
  newSizes.medium = {
33
33
  max: medium,
34
34
  min: mediumMin,
35
- default: mediumMin + 1,
35
+ default: mediumMin + 1
36
36
  };
37
37
  const largeMin = newSizes.medium.max + 1;
38
38
  newSizes.large = {
39
39
  max: 2000,
40
+ // TODO: decide upper limit
40
41
  min: largeMin,
41
- default: largeMin + 1,
42
+ default: largeMin + 1
42
43
  };
43
44
  return newSizes;
44
45
  };
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.4.4";
1
+ export declare const SDK_VERSION = "0.5.0";
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.4.4";
1
+ export const SDK_VERSION = "0.5.0";
@@ -1,2 +1,2 @@
1
1
  /** This file should be overriden for each framework. Ideally this would be implemented in Mitosis. */
2
- export declare const TARGET = "svelte";
2
+ export declare const TARGET: import("../types/targets").Target;
@@ -7,7 +7,7 @@ declare const _default: {
7
7
  rootState: {};
8
8
  apiKey: null;
9
9
  apiVersion: undefined;
10
- registeredComponents: {};
10
+ componentInfos: {};
11
11
  inheritedStyles: {};
12
12
  }>;
13
13
  key: symbol;
@@ -9,7 +9,7 @@ export default {
9
9
  rootState: {},
10
10
  apiKey: null,
11
11
  apiVersion: undefined,
12
- registeredComponents: {},
12
+ componentInfos: {},
13
13
  inheritedStyles: {},
14
14
  }),
15
15
  key,
@@ -30,6 +30,6 @@ export interface BuilderContextInterface {
30
30
  localState: BuilderRenderState | undefined;
31
31
  apiKey: string | null;
32
32
  apiVersion: ApiVersion | undefined;
33
- registeredComponents: RegisteredComponents;
33
+ componentInfos: Dictionary<ComponentInfo>;
34
34
  inheritedStyles: Record<string, unknown>;
35
35
  }
@@ -0,0 +1,10 @@
1
+ export type Patch = {
2
+ path: string;
3
+ op: 'add' | 'remove' | 'replace';
4
+ value: any;
5
+ };
6
+ export declare const applyPatchWithMinimalMutationChain: <T extends object>(obj: T, patch: {
7
+ path: string;
8
+ op: 'add' | 'remove' | 'replace';
9
+ value: any;
10
+ }, preserveRoot?: boolean) => T;
@@ -0,0 +1,54 @@
1
+ export const applyPatchWithMinimalMutationChain = (obj, patch, preserveRoot = false) => {
2
+ if (Object(obj) !== obj) {
3
+ return obj;
4
+ }
5
+ const { path, op, value } = patch;
6
+ const pathArr = path.split(/\//);
7
+ if (pathArr[0] === '') {
8
+ pathArr.shift();
9
+ }
10
+ const newObj = preserveRoot ? obj : {
11
+ ...obj
12
+ };
13
+ let objPart = newObj;
14
+ for (let i = 0; i < pathArr.length; i++) {
15
+ const isLast = i === pathArr.length - 1;
16
+ const property = pathArr[i];
17
+ if (isLast) {
18
+ if (op === 'replace') {
19
+ objPart[property] = value;
20
+ }
21
+ else if (op === 'add') {
22
+ const index = Number(property);
23
+ if (Array.isArray(objPart)) {
24
+ if (property === '-') {
25
+ objPart.push(value);
26
+ }
27
+ else {
28
+ objPart.splice(index, 0, value);
29
+ }
30
+ }
31
+ else {
32
+ objPart[property] = value;
33
+ }
34
+ }
35
+ else if (op === 'remove') {
36
+ const index = Number(property);
37
+ if (Array.isArray(objPart)) {
38
+ objPart.splice(index, 1);
39
+ }
40
+ else {
41
+ delete objPart[property];
42
+ }
43
+ }
44
+ }
45
+ else {
46
+ const nextProperty = pathArr[i + 1];
47
+ const newPart = Object(objPart[property]) === objPart[property] ? objPart[property] : String(Number(nextProperty)) === nextProperty ? [] : {};
48
+ objPart = objPart[property] = Array.isArray(newPart) ? [...newPart] : {
49
+ ...newPart
50
+ };
51
+ }
52
+ }
53
+ return newObj;
54
+ };
File without changes