@swell/apps-sdk 1.0.189 → 2.0.0-alpha.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 (229) hide show
  1. package/README.md +146 -247
  2. package/dist/backend.d.cts +81 -0
  3. package/dist/backend.d.ts +81 -0
  4. package/dist/backend.js +152 -0
  5. package/dist/browser-refusal.d.cts +1 -0
  6. package/dist/browser-refusal.d.ts +1 -0
  7. package/dist/browser-refusal.js +2 -0
  8. package/dist/context.d.cts +21 -0
  9. package/dist/context.d.ts +21 -0
  10. package/dist/context.js +42 -0
  11. package/dist/error.d.cts +23 -0
  12. package/dist/error.d.ts +23 -0
  13. package/dist/error.js +30 -0
  14. package/dist/guard.d.cts +1 -0
  15. package/dist/guard.d.ts +1 -0
  16. package/dist/guard.js +4 -0
  17. package/dist/index.d.cts +9 -0
  18. package/dist/index.d.ts +9 -0
  19. package/dist/index.js +5 -20298
  20. package/dist/staff.d.cts +16 -0
  21. package/dist/staff.d.ts +16 -0
  22. package/dist/staff.js +33 -0
  23. package/dist/storefront.d.cts +28 -0
  24. package/dist/storefront.d.ts +28 -0
  25. package/dist/storefront.js +44 -0
  26. package/dist/version.d.cts +1 -0
  27. package/dist/version.d.ts +1 -0
  28. package/dist/version.js +2 -0
  29. package/dist/workflow.d.cts +1 -0
  30. package/dist/workflow.d.ts +1 -0
  31. package/dist/workflow.js +35 -0
  32. package/package.json +48 -63
  33. package/dist/index.cjs +0 -20546
  34. package/dist/index.cjs.map +0 -7
  35. package/dist/index.js.map +0 -7
  36. package/dist/index.mjs +0 -20403
  37. package/dist/index.mjs.map +0 -7
  38. package/dist/src/api.d.ts +0 -96
  39. package/dist/src/cache/cache.d.ts +0 -41
  40. package/dist/src/cache/cf-worker-kv-keyv-adapter.d.ts +0 -18
  41. package/dist/src/cache/constants.d.ts +0 -7
  42. package/dist/src/cache/content-cache.d.ts +0 -21
  43. package/dist/src/cache/html-cache/html-cache-backend.d.ts +0 -64
  44. package/dist/src/cache/html-cache/html-cache-factory.d.ts +0 -9
  45. package/dist/src/cache/html-cache/html-cache-kv.d.ts +0 -38
  46. package/dist/src/cache/html-cache/html-cache-worker.d.ts +0 -8
  47. package/dist/src/cache/html-cache/html-cache.d.ts +0 -120
  48. package/dist/src/cache/html-cache/index.d.ts +0 -4
  49. package/dist/src/cache/index.d.ts +0 -9
  50. package/dist/src/cache/kv-variety.d.ts +0 -10
  51. package/dist/src/cache/request-cache.d.ts +0 -4
  52. package/dist/src/cache/resource-cache.d.ts +0 -4
  53. package/dist/src/cache/theme-cache.d.ts +0 -4
  54. package/dist/src/cache/theme-file-cache.d.ts +0 -87
  55. package/dist/src/compatibility/drops/all_products.d.ts +0 -10
  56. package/dist/src/compatibility/drops/articles.d.ts +0 -10
  57. package/dist/src/compatibility/drops/blogs.d.ts +0 -10
  58. package/dist/src/compatibility/drops/collections.d.ts +0 -19
  59. package/dist/src/compatibility/drops/image-src.d.ts +0 -15
  60. package/dist/src/compatibility/drops/image.d.ts +0 -29
  61. package/dist/src/compatibility/drops/images.d.ts +0 -9
  62. package/dist/src/compatibility/drops/money.d.ts +0 -10
  63. package/dist/src/compatibility/drops/object-handles.d.ts +0 -6
  64. package/dist/src/compatibility/drops/pages.d.ts +0 -17
  65. package/dist/src/compatibility/drops/robots-rule.d.ts +0 -9
  66. package/dist/src/compatibility/drops/template.d.ts +0 -9
  67. package/dist/src/compatibility/shopify-configs.d.ts +0 -8
  68. package/dist/src/compatibility/shopify-fonts.d.ts +0 -1
  69. package/dist/src/compatibility/shopify-objects/address.d.ts +0 -7
  70. package/dist/src/compatibility/shopify-objects/article.d.ts +0 -7
  71. package/dist/src/compatibility/shopify-objects/blog.d.ts +0 -6
  72. package/dist/src/compatibility/shopify-objects/cart.d.ts +0 -6
  73. package/dist/src/compatibility/shopify-objects/collection.d.ts +0 -7
  74. package/dist/src/compatibility/shopify-objects/collections.d.ts +0 -6
  75. package/dist/src/compatibility/shopify-objects/content.d.ts +0 -12
  76. package/dist/src/compatibility/shopify-objects/currency.d.ts +0 -5
  77. package/dist/src/compatibility/shopify-objects/customer.d.ts +0 -6
  78. package/dist/src/compatibility/shopify-objects/filter.d.ts +0 -6
  79. package/dist/src/compatibility/shopify-objects/font.d.ts +0 -5
  80. package/dist/src/compatibility/shopify-objects/form.d.ts +0 -29
  81. package/dist/src/compatibility/shopify-objects/image.d.ts +0 -10
  82. package/dist/src/compatibility/shopify-objects/index.d.ts +0 -27
  83. package/dist/src/compatibility/shopify-objects/line_item.d.ts +0 -7
  84. package/dist/src/compatibility/shopify-objects/link.d.ts +0 -5
  85. package/dist/src/compatibility/shopify-objects/localization.d.ts +0 -5
  86. package/dist/src/compatibility/shopify-objects/media.d.ts +0 -9
  87. package/dist/src/compatibility/shopify-objects/money.d.ts +0 -3
  88. package/dist/src/compatibility/shopify-objects/order.d.ts +0 -11
  89. package/dist/src/compatibility/shopify-objects/page.d.ts +0 -5
  90. package/dist/src/compatibility/shopify-objects/paginate.d.ts +0 -5
  91. package/dist/src/compatibility/shopify-objects/predictive_search.d.ts +0 -5
  92. package/dist/src/compatibility/shopify-objects/product.d.ts +0 -9
  93. package/dist/src/compatibility/shopify-objects/recommendations.d.ts +0 -5
  94. package/dist/src/compatibility/shopify-objects/resource.d.ts +0 -27
  95. package/dist/src/compatibility/shopify-objects/search.d.ts +0 -5
  96. package/dist/src/compatibility/shopify-objects/shop.d.ts +0 -5
  97. package/dist/src/compatibility/shopify-objects/template.d.ts +0 -4
  98. package/dist/src/compatibility/shopify-objects/variant.d.ts +0 -6
  99. package/dist/src/compatibility/shopify.d.ts +0 -134
  100. package/dist/src/constants.d.ts +0 -598
  101. package/dist/src/content.d.ts +0 -8
  102. package/dist/src/easyblocks/config.d.ts +0 -152
  103. package/dist/src/easyblocks/index.d.ts +0 -2
  104. package/dist/src/easyblocks/utils.d.ts +0 -23
  105. package/dist/src/editor/resources.d.ts +0 -9
  106. package/dist/src/fonts.d.ts +0 -6
  107. package/dist/src/globals.d.ts +0 -7
  108. package/dist/src/index.d.ts +0 -16
  109. package/dist/src/liquid/color.d.ts +0 -33
  110. package/dist/src/liquid/drops/render.d.ts +0 -10
  111. package/dist/src/liquid/filters/asset_url.d.ts +0 -3
  112. package/dist/src/liquid/filters/brightness_difference.d.ts +0 -2
  113. package/dist/src/liquid/filters/color_brightness.d.ts +0 -2
  114. package/dist/src/liquid/filters/color_contrast.d.ts +0 -2
  115. package/dist/src/liquid/filters/color_darken.d.ts +0 -2
  116. package/dist/src/liquid/filters/color_desaturate.d.ts +0 -2
  117. package/dist/src/liquid/filters/color_difference.d.ts +0 -2
  118. package/dist/src/liquid/filters/color_extract.d.ts +0 -4
  119. package/dist/src/liquid/filters/color_lighten.d.ts +0 -2
  120. package/dist/src/liquid/filters/color_mix.d.ts +0 -2
  121. package/dist/src/liquid/filters/color_modify.d.ts +0 -3
  122. package/dist/src/liquid/filters/color_saturate.d.ts +0 -2
  123. package/dist/src/liquid/filters/color_to_hex.d.ts +0 -2
  124. package/dist/src/liquid/filters/color_to_hsl.d.ts +0 -2
  125. package/dist/src/liquid/filters/color_to_rgb.d.ts +0 -2
  126. package/dist/src/liquid/filters/date.d.ts +0 -7
  127. package/dist/src/liquid/filters/date_next_interval.d.ts +0 -3
  128. package/dist/src/liquid/filters/default_errors.d.ts +0 -3
  129. package/dist/src/liquid/filters/divided_by.d.ts +0 -2
  130. package/dist/src/liquid/filters/embedded_content.d.ts +0 -2
  131. package/dist/src/liquid/filters/escape.d.ts +0 -3
  132. package/dist/src/liquid/filters/font_face.d.ts +0 -2
  133. package/dist/src/liquid/filters/font_modify.d.ts +0 -3
  134. package/dist/src/liquid/filters/font_url.d.ts +0 -2
  135. package/dist/src/liquid/filters/format_address.d.ts +0 -6
  136. package/dist/src/liquid/filters/handleize.d.ts +0 -3
  137. package/dist/src/liquid/filters/image_tag.d.ts +0 -3
  138. package/dist/src/liquid/filters/image_url.d.ts +0 -8
  139. package/dist/src/liquid/filters/index.d.ts +0 -120
  140. package/dist/src/liquid/filters/inline_asset_content.d.ts +0 -2
  141. package/dist/src/liquid/filters/inline_editable.d.ts +0 -4
  142. package/dist/src/liquid/filters/json.d.ts +0 -3
  143. package/dist/src/liquid/filters/json_pretty.d.ts +0 -3
  144. package/dist/src/liquid/filters/locale_flag.d.ts +0 -2
  145. package/dist/src/liquid/filters/minus.d.ts +0 -2
  146. package/dist/src/liquid/filters/money.d.ts +0 -4
  147. package/dist/src/liquid/filters/money_with_currency.d.ts +0 -3
  148. package/dist/src/liquid/filters/money_without_currency.d.ts +0 -3
  149. package/dist/src/liquid/filters/money_without_trailing_zeros.d.ts +0 -3
  150. package/dist/src/liquid/filters/preload_tag.d.ts +0 -3
  151. package/dist/src/liquid/filters/script_tag.d.ts +0 -3
  152. package/dist/src/liquid/filters/shopify/asset_img_url.d.ts +0 -3
  153. package/dist/src/liquid/filters/shopify/default_pagination.d.ts +0 -3
  154. package/dist/src/liquid/filters/shopify/hex_to_rgba.d.ts +0 -2
  155. package/dist/src/liquid/filters/shopify/img_url.d.ts +0 -3
  156. package/dist/src/liquid/filters/shopify/item_count_for_variant.d.ts +0 -6
  157. package/dist/src/liquid/filters/shopify/payment_button.d.ts +0 -2
  158. package/dist/src/liquid/filters/shopify/payment_terms.d.ts +0 -2
  159. package/dist/src/liquid/filters/shopify/placeholder-svgs/index.d.ts +0 -5
  160. package/dist/src/liquid/filters/shopify/placeholder_svg_tag.d.ts +0 -3
  161. package/dist/src/liquid/filters/shopify/shopify_asset_url.d.ts +0 -3
  162. package/dist/src/liquid/filters/shopify/structured_data.d.ts +0 -3
  163. package/dist/src/liquid/filters/stylesheet_tag.d.ts +0 -3
  164. package/dist/src/liquid/filters/time_tag.d.ts +0 -2
  165. package/dist/src/liquid/filters/translate.d.ts +0 -3
  166. package/dist/src/liquid/filters/where.d.ts +0 -3
  167. package/dist/src/liquid/font.d.ts +0 -51
  168. package/dist/src/liquid/form.d.ts +0 -17
  169. package/dist/src/liquid/hash.d.ts +0 -5
  170. package/dist/src/liquid/index.d.ts +0 -52
  171. package/dist/src/liquid/operators.d.ts +0 -10
  172. package/dist/src/liquid/tags/assign.d.ts +0 -3
  173. package/dist/src/liquid/tags/case.d.ts +0 -3
  174. package/dist/src/liquid/tags/comment.d.ts +0 -3
  175. package/dist/src/liquid/tags/content_for.d.ts +0 -3
  176. package/dist/src/liquid/tags/doc.d.ts +0 -2
  177. package/dist/src/liquid/tags/for.d.ts +0 -3
  178. package/dist/src/liquid/tags/form.d.ts +0 -3
  179. package/dist/src/liquid/tags/if.d.ts +0 -4
  180. package/dist/src/liquid/tags/index.d.ts +0 -42
  181. package/dist/src/liquid/tags/inline_editable.d.ts +0 -3
  182. package/dist/src/liquid/tags/javascript.d.ts +0 -3
  183. package/dist/src/liquid/tags/layout.d.ts +0 -3
  184. package/dist/src/liquid/tags/paginate.d.ts +0 -3
  185. package/dist/src/liquid/tags/render.d.ts +0 -6
  186. package/dist/src/liquid/tags/section.d.ts +0 -3
  187. package/dist/src/liquid/tags/sections.d.ts +0 -3
  188. package/dist/src/liquid/tags/shopify/include.d.ts +0 -3
  189. package/dist/src/liquid/tags/shopify/schema.d.ts +0 -3
  190. package/dist/src/liquid/tags/style.d.ts +0 -3
  191. package/dist/src/liquid/tags/stylesheet.d.ts +0 -3
  192. package/dist/src/liquid/test-helpers.d.ts +0 -8
  193. package/dist/src/liquid/tokens/identifier-token.d.ts +0 -9
  194. package/dist/src/liquid/tokens/index.d.ts +0 -2
  195. package/dist/src/liquid/tokienizer.d.ts +0 -5
  196. package/dist/src/liquid/utils.d.ts +0 -45
  197. package/dist/src/menus.d.ts +0 -25
  198. package/dist/src/resources/account.d.ts +0 -6
  199. package/dist/src/resources/addresses.d.ts +0 -7
  200. package/dist/src/resources/blog.d.ts +0 -7
  201. package/dist/src/resources/blog_category.d.ts +0 -7
  202. package/dist/src/resources/cart.d.ts +0 -6
  203. package/dist/src/resources/categories.d.ts +0 -7
  204. package/dist/src/resources/category.d.ts +0 -7
  205. package/dist/src/resources/index.d.ts +0 -48
  206. package/dist/src/resources/order.d.ts +0 -7
  207. package/dist/src/resources/orders.d.ts +0 -7
  208. package/dist/src/resources/page.d.ts +0 -7
  209. package/dist/src/resources/predictive_search.d.ts +0 -6
  210. package/dist/src/resources/product.d.ts +0 -7
  211. package/dist/src/resources/product_helpers.d.ts +0 -21
  212. package/dist/src/resources/search.d.ts +0 -6
  213. package/dist/src/resources/subscription.d.ts +0 -7
  214. package/dist/src/resources/subscriptions.d.ts +0 -7
  215. package/dist/src/resources/swell_types.d.ts +0 -163
  216. package/dist/src/resources/variant.d.ts +0 -9
  217. package/dist/src/resources.d.ts +0 -113
  218. package/dist/src/theme/theme-loader.d.ts +0 -110
  219. package/dist/src/theme.d.ts +0 -204
  220. package/dist/src/utils/escape.d.ts +0 -1
  221. package/dist/src/utils/index.d.ts +0 -34
  222. package/dist/src/utils/kv-flavor.d.ts +0 -7
  223. package/dist/src/utils/logger.d.ts +0 -21
  224. package/dist/src/utils/md5.d.ts +0 -1
  225. package/dist/types/cloudflare.d.ts +0 -61
  226. package/dist/types/shopify.d.ts +0 -1035
  227. package/dist/types/swell.d.ts +0 -576
  228. package/types/index.d.ts +0 -4
  229. package/types/svg.d.ts +0 -4
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/index.ts", "../src/api.ts", "../src/cache/cache.ts", "../src/utils/logger.ts", "../src/cache/cf-worker-kv-keyv-adapter.ts", "../src/utils/index.ts", "../src/resources.ts", "../src/liquid/utils.ts", "../src/compatibility/shopify-objects/resource.ts", "../src/constants.ts", "../src/easyblocks/utils.ts", "../src/utils/md5.ts", "../src/utils/kv-flavor.ts", "../src/cache/request-cache.ts", "../src/cache/resource-cache.ts", "../src/cache/theme-cache.ts", "../src/cache/kv-variety.ts", "../src/cache/theme-file-cache.ts", "../src/cache/content-cache.ts", "../src/resources/addresses.ts", "../src/resources/orders.ts", "../src/resources/subscriptions.ts", "../src/resources/account.ts", "../src/resources/blog.ts", "../src/resources/blog_category.ts", "../src/resources/cart.ts", "../src/resources/product_helpers.ts", "../src/resources/category.ts", "../src/resources/categories.ts", "../src/resources/order.ts", "../src/resources/page.ts", "../src/resources/predictive_search.ts", "../src/resources/variant.ts", "../src/resources/product.ts", "../src/resources/search.ts", "../src/resources/subscription.ts", "../src/resources/index.ts", "../src/content.ts", "../src/easyblocks/config.ts", "../src/compatibility/drops/template.ts", "../src/compatibility/shopify-objects/template.ts", "../src/menus.ts", "../src/theme.ts", "../src/compatibility/shopify.ts", "../src/fonts.ts", "../src/liquid/font.ts", "../src/liquid/form.ts", "../src/compatibility/shopify-configs.ts", "../src/compatibility/shopify-fonts.ts", "../src/compatibility/shopify-objects/index.ts", "../src/compatibility/drops/image.ts", "../src/compatibility/drops/image-src.ts", "../src/compatibility/shopify-objects/image.ts", "../src/compatibility/shopify-objects/article.ts", "../src/compatibility/shopify-objects/blog.ts", "../src/compatibility/shopify-objects/media.ts", "../src/compatibility/shopify-objects/variant.ts", "../src/compatibility/shopify-objects/filter.ts", "../src/compatibility/shopify-objects/collection.ts", "../src/compatibility/shopify-objects/content.ts", "../src/compatibility/shopify-objects/product.ts", "../src/compatibility/shopify-objects/line_item.ts", "../src/compatibility/shopify-objects/currency.ts", "../src/compatibility/shopify-objects/cart.ts", "../src/compatibility/shopify-objects/collections.ts", "../src/compatibility/shopify-objects/address.ts", "../src/compatibility/shopify-objects/order.ts", "../src/compatibility/drops/money.ts", "../src/compatibility/shopify-objects/money.ts", "../src/compatibility/shopify-objects/customer.ts", "../src/compatibility/shopify-objects/font.ts", "../src/compatibility/shopify-objects/form.ts", "../src/compatibility/shopify-objects/link.ts", "../src/compatibility/shopify-objects/localization.ts", "../src/compatibility/shopify-objects/paginate.ts", "../src/compatibility/shopify-objects/predictive_search.ts", "../src/compatibility/shopify-objects/recommendations.ts", "../src/compatibility/shopify-objects/page.ts", "../src/compatibility/shopify-objects/search.ts", "../src/compatibility/shopify-objects/shop.ts", "../src/compatibility/drops/all_products.ts", "../src/compatibility/drops/articles.ts", "../src/compatibility/drops/blogs.ts", "../src/compatibility/drops/collections.ts", "../src/compatibility/drops/images.ts", "../src/compatibility/drops/object-handles.ts", "../src/compatibility/drops/pages.ts", "../src/liquid/drops/render.ts", "../src/liquid/index.ts", "../src/utils/escape.ts", "../src/liquid/tags/assign.ts", "../src/liquid/tags/case.ts", "../src/liquid/tags/comment.ts", "../src/liquid/tags/content_for.ts", "../src/liquid/hash.ts", "../src/liquid/tokienizer.ts", "../src/liquid/tokens/identifier-token.ts", "../src/liquid/tags/doc.ts", "../src/liquid/tags/for.ts", "../src/liquid/tags/form.ts", "../src/liquid/tags/if.ts", "../src/liquid/tags/javascript.ts", "../src/liquid/tags/layout.ts", "../src/liquid/tags/paginate.ts", "../src/liquid/tags/render.ts", "../src/liquid/tags/section.ts", "../src/liquid/tags/sections.ts", "../src/liquid/tags/style.ts", "../src/liquid/tags/stylesheet.ts", "../src/liquid/tags/shopify/include.ts", "../src/liquid/tags/shopify/schema.ts", "../src/liquid/tags/inline_editable.ts", "../src/liquid/tags/index.ts", "../src/liquid/filters/asset_url.ts", "../src/liquid/filters/brightness_difference.ts", "../src/liquid/filters/color_brightness.ts", "../src/liquid/filters/color_contrast.ts", "../src/liquid/filters/color_darken.ts", "../src/liquid/filters/color_desaturate.ts", "../src/liquid/filters/color_difference.ts", "../src/liquid/filters/color_extract.ts", "../src/liquid/filters/color_lighten.ts", "../src/liquid/filters/color_mix.ts", "../src/liquid/filters/color_modify.ts", "../src/liquid/filters/color_saturate.ts", "../src/liquid/filters/color_to_hex.ts", "../src/liquid/filters/color_to_hsl.ts", "../src/liquid/filters/color_to_rgb.ts", "../src/liquid/filters/date.ts", "../src/liquid/filters/date_next_interval.ts", "../src/liquid/filters/default_errors.ts", "../src/liquid/filters/divided_by.ts", "../src/liquid/filters/embedded_content.ts", "../src/liquid/filters/escape.ts", "../src/liquid/filters/font_face.ts", "../src/liquid/filters/font_modify.ts", "../src/liquid/filters/font_url.ts", "../src/liquid/filters/format_address.ts", "../src/liquid/filters/handleize.ts", "../src/liquid/filters/image_tag.ts", "../src/liquid/filters/image_url.ts", "../src/liquid/filters/inline_asset_content.ts", "../src/liquid/filters/json.ts", "../src/liquid/filters/json_pretty.ts", "../src/liquid/filters/locale_flag.ts", "../src/liquid/filters/minus.ts", "../src/liquid/filters/money.ts", "../src/liquid/filters/money_with_currency.ts", "../src/liquid/filters/money_without_currency.ts", "../src/liquid/filters/money_without_trailing_zeros.ts", "../src/liquid/filters/preload_tag.ts", "../src/liquid/filters/script_tag.ts", "../src/liquid/filters/stylesheet_tag.ts", "../src/liquid/filters/time_tag.ts", "../src/liquid/filters/translate.ts", "../src/liquid/filters/where.ts", "../src/liquid/filters/shopify/asset_img_url.ts", "../src/liquid/filters/shopify/hex_to_rgba.ts", "../src/liquid/filters/shopify/img_url.ts", "../src/liquid/filters/shopify/item_count_for_variant.ts", "../src/liquid/filters/shopify/payment_button.ts", "../src/liquid/filters/shopify/payment_terms.ts", "../src/liquid/filters/shopify/placeholder-svgs/index.ts", "../src/liquid/filters/shopify/placeholder_svg_tag.ts", "../src/liquid/filters/shopify/shopify_asset_url.ts", "../src/liquid/filters/shopify/structured_data.ts", "../src/liquid/filters/inline_editable.ts", "../src/liquid/filters/index.ts", "../src/liquid/operators.ts", "../src/liquid/color.ts", "../src/theme/theme-loader.ts", "../src/globals.ts", "../src/compatibility/drops/robots-rule.ts", "../src/editor/resources.ts", "../src/cache/html-cache/html-cache.ts", "../src/cache/html-cache/html-cache-kv.ts", "../src/cache/html-cache/html-cache-worker.ts", "../src/cache/html-cache/html-cache-factory.ts"],
4
- "sourcesContent": ["export * from './api';\nexport * from './constants';\nexport * from './content';\nexport * from './easyblocks';\nexport * from './menus';\nexport * from './resources';\nexport * from './theme';\nexport * from './fonts';\nexport * from './utils';\n\nexport * from './liquid';\nexport * from './compatibility/shopify';\nexport * from './compatibility/shopify-objects';\nexport * from './editor/resources';\n\nexport * from './cache/html-cache';\n\nexport { ContentCache } from './cache';\nexport type { ContentCacheOptions, PutFilesResult, FileWarning } from './cache';\n", "import SwellJS from 'swell-js';\nimport qs from 'qs';\n\nimport { Cache, RequestCache, ResourceCache } from './cache';\nimport { md5, toBase64, getKVFlavor } from './utils';\nimport { logger, createTraceId, configureSdkLogger } from './utils/logger';\nimport { isLikePromise } from './liquid/utils';\n\nimport type { SwellClient } from 'swell-js';\nimport type {\n SwellApiParams,\n SwellAppConfig,\n SwellErrorOptions,\n SwellMenu,\n SwellData,\n SwellAppShopifyCompatibilityConfig,\n} from '../types/swell';\nimport type { CFThemeEnv, CFWorkerContext } from '../types/cloudflare';\n\nexport * from './resources';\nexport * from './resources/index';\n\nconst DEFAULT_API_HOST = 'https://api.schema.io';\n\nconst resourceCaches = new Map<string, Cache>();\nconst requestCaches = new Map<string, Cache>();\n\nexport class Swell {\n public url: URL;\n public headers: Record<string, string | undefined>;\n public swellHeaders: Record<string, string | undefined>;\n public queryParams: qs.ParsedQs;\n public workerCtx?: CFWorkerContext;\n public workerEnv?: CFThemeEnv;\n\n // Represents the swell.json app config\n public config?: SwellAppConfig;\n\n // Represents the shopify_compatibility.json app config\n public shopifyCompatibilityConfig?: SwellAppShopifyCompatibilityConfig;\n\n // Represents the Swell Backend API\n public backend?: SwellBackendAPI;\n\n // Represends the Swell Storefront API\n public storefront: SwellClient<'snake'>;\n\n // Contains resources passed from server via request headers.\n public storefrontContext: SwellData;\n\n // A unique identifier for the current storefront app + environment being served\n // Used to isolate cache between different storefronts\n public instanceId: string = '';\n\n // Indicates the storefront is in a preview mode\n public isPreview: boolean = false;\n\n // Indicates the storefront is being used in an editor UI\n public isEditor: boolean = false;\n\n // Indicates the server response was sent to avoid mutating cookies\n public sentResponse: boolean = false;\n\n public storefront_url?: string;\n\n private resourceLoadingIndicator?: (loading: boolean) => void;\n\n constructor(params: SwellApiParams) {\n const {\n url,\n config,\n shopifyCompatibilityConfig,\n headers,\n swellHeaders,\n serverHeaders,\n queryParams,\n workerEnv,\n workerCtx,\n logger: loggerConfig,\n ...clientProps\n } = params;\n\n // Configure logger if config provided\n if (loggerConfig) {\n configureSdkLogger(loggerConfig);\n }\n\n this.url = url instanceof URL ? url : new URL(url || '');\n\n this.config = config;\n\n this.shopifyCompatibilityConfig = shopifyCompatibilityConfig;\n\n this.queryParams = Swell.formatQueryParams(\n queryParams || this.url.searchParams,\n );\n\n this.workerCtx = workerCtx;\n this.workerEnv = workerEnv;\n\n this.resourceLoadingIndicator = params.resourceLoadingIndicator;\n\n logger.info(\n `[SDK] KV cache: ${this.workerEnv?.THEME ? 'enabled' : 'disabled'}, flavor: ${getKVFlavor(this.workerEnv)}`,\n );\n\n if (serverHeaders) {\n const { headers, swellHeaders } = Swell.formatHeaders(serverHeaders);\n\n this.headers = headers;\n this.swellHeaders = swellHeaders;\n\n this.backend = new SwellBackendAPI({\n storeId: swellHeaders['store-id'] as string,\n accessToken: swellHeaders['access-token'] as string,\n apiHost: swellHeaders['api-host'],\n });\n\n this.storefront = this.getStorefrontInstance({\n ...params,\n headers,\n swellHeaders,\n });\n\n // Generate a unique namespace for this storefront/theme\n this.instanceId = [\n 'store-id',\n 'environment-id',\n 'deployment-mode',\n 'theme-id',\n 'theme-branch-id',\n ]\n .map((key) => swellHeaders[key] || '0')\n .join(':');\n\n this.isEditor =\n clientProps.isEditor ?? swellHeaders['deployment-mode'] === 'editor';\n\n this.isPreview =\n this.isEditor || swellHeaders['deployment-mode'] === 'preview';\n } else if (headers && swellHeaders) {\n // Set props from cache, typically used when hydrating client-side\n Object.assign(this, clientProps);\n\n this.headers = headers;\n this.swellHeaders = swellHeaders;\n\n this.storefront = this.getStorefrontInstance(params);\n } else {\n throw new Error(\n 'Swell client requires `serverHeaders` when initialized on the server-side, or `headers` and `swellHeaders` when initialized on the client-side.',\n );\n }\n\n // Init resources sent from the server via request headers.\n this.storefrontContext = this.initStorefrontContext();\n }\n\n static formatHeaders(\n serverHeaders?: Headers | Record<string, string | undefined>,\n ): {\n headers: Record<string, string | undefined>;\n swellHeaders: Record<string, string | undefined>;\n } {\n let headers: Record<string, string | undefined> = {};\n const swellHeaders: Record<string, string | undefined> = {};\n\n if (serverHeaders instanceof Headers) {\n serverHeaders.forEach((value, key) => {\n headers[key] = value;\n });\n } else if (serverHeaders) {\n headers = serverHeaders;\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (key.startsWith('swell-') && value) {\n swellHeaders[key.replace('swell-', '')] = value;\n }\n }\n\n return { headers, swellHeaders };\n }\n\n static formatQueryParams(\n queryParams?: URLSearchParams | Record<string, string | undefined>,\n ): qs.ParsedQs {\n let params: qs.ParsedQs = {};\n\n if (queryParams instanceof URLSearchParams) {\n params = qs.parse(queryParams.toString());\n } else if (queryParams) {\n params = queryParams;\n }\n\n return params;\n }\n\n /**\n * Checks if cache bypass is requested via X-Cache-Bypass header\n */\n private shouldBypassCache(): boolean {\n return this.headers?.['x-cache-bypass'] === 'revalidation';\n }\n\n /**\n * Returns fields from the current account that may affect requests.\n * Currently, only the 'group' field is returned.\n * It is preferable to use the account_id from storefrontContext rather than the swell-session cookie, as the cookie contains a lot of other data\n * This increases the overall cache size\n */\n private getAccountCacheKey(): string {\n const storefrontContext = this.storefrontContext as {\n account?: { group: string };\n };\n const group = storefrontContext?.account?.group || '';\n\n return `${group}`;\n }\n\n /**\n * Fetches a resource.\n * First attempts to fetch from cache.\n */\n async getCachedResource<T>(\n key: string,\n args: unknown[],\n handler: () => T | Promise<T>,\n isCacheble = true,\n ): Promise<T | undefined> {\n const cacheKey = getCacheKey(key, [\n this.instanceId,\n this.getAccountCacheKey(),\n args,\n ]);\n const cache = this.getResourceCache();\n\n // Use fetch for cache bypass, fetchSWR for normal operation\n if (this.shouldBypassCache()) {\n return cache.fetch<T>(cacheKey, handler, undefined, isCacheble);\n } else {\n return cache.fetchSWR<T>(cacheKey, handler, undefined, isCacheble);\n }\n }\n\n async getAppSettings(): Promise<SwellData> {\n const settings = await this.get(\n '/:storefronts/{id}/configs/settings/values',\n {\n id: this.swellHeaders['storefront-id'],\n },\n );\n\n return settings || {};\n }\n\n async getStorefrontSettings(force = false): Promise<SwellData> {\n const storefrontSettings = this.storefront.settings as any;\n try {\n // Load all settings including menus, payments, etc\n const allSettings = await this.storefront.request<any>(\n 'get',\n '/settings/all',\n undefined,\n force ? { $cache: false } : undefined,\n { force },\n );\n\n // we use only part of settings\n const { settings, menus, payments, subscriptions, session } = allSettings;\n\n // initialize all used settings\n storefrontSettings.localizedState = {};\n\n storefrontSettings.set({\n value: settings,\n });\n\n // Reset menu state\n storefrontSettings.menuState = [];\n\n storefrontSettings.set({\n model: 'menus',\n value: menus,\n });\n\n storefrontSettings.set({\n model: 'payments',\n value: payments,\n });\n\n storefrontSettings.set({\n model: 'subscriptions',\n value: subscriptions,\n });\n\n storefrontSettings.set({\n model: 'session',\n value: session,\n });\n } catch (err) {\n if (err instanceof Error) {\n err.message = `Swell: unable to load settings (${err.message})`;\n }\n\n logger.error(err);\n }\n\n return storefrontSettings;\n }\n\n getStorefrontMenus(): SwellMenu[] {\n const menus = (this.storefront.settings as any).getState(\n '/settings/menus',\n 'menuState',\n );\n\n if (!menus || isLikePromise(menus)) {\n return [];\n }\n\n return menus;\n }\n\n getStorefrontLocalization(): { locale: string; currency: string } {\n const locale = this.storefront.locale.selected();\n const currency = this.storefront.currency.selected();\n\n if (!locale || isLikePromise(locale)) {\n return { locale: 'en-US', currency: 'USD' };\n }\n\n return { locale, currency };\n }\n\n async get<T = SwellData>(\n ...args: Parameters<SwellBackendAPI['get']>\n ): Promise<T | undefined> {\n return this.backend?.get<T>(...args);\n }\n\n async put<T = SwellData>(\n ...args: Parameters<SwellBackendAPI['put']>\n ): Promise<T | undefined> {\n return this.backend?.put(...args);\n }\n\n async post<T = SwellData>(\n ...args: Parameters<SwellBackendAPI['post']>\n ): Promise<T | undefined> {\n return this.backend?.post(...args);\n }\n\n async delete<T = SwellData>(\n ...args: Parameters<SwellBackendAPI['delete']>\n ): Promise<T | undefined> {\n return this.backend?.delete(...args);\n }\n\n /**\n * Sets a loading handler to be called when a storefront resource is loading.\n */\n public isLoading(loading: boolean = true) {\n if (this.resourceLoadingIndicator) {\n this.resourceLoadingIndicator(loading);\n }\n }\n\n private getStorefrontInstance(params: SwellApiParams) {\n const { swellHeaders, getCookie, setCookie, storefrontSettingStates } =\n params;\n\n if (!swellHeaders) {\n throw new Error('Swell headers are required');\n }\n\n const storeId = swellHeaders['store-id'];\n const publicKey = swellHeaders['public-key'];\n\n if (!storeId || !publicKey) {\n throw new Error(\n 'Missing required headers: \"swell-store-id\" and \"swell-public-key\"',\n );\n }\n\n const storefront = SwellJS.create(storeId, publicKey, {\n url: swellHeaders['admin-url'],\n vaultUrl: swellHeaders['vault-url'],\n getCookie,\n setCookie:\n setCookie &&\n ((name: string, value: string, options?: object) =>\n setCookie(name, value, options, this)),\n headers: {\n 'Swell-Store-id': storeId,\n 'Swell-Storefront-Id': swellHeaders['storefront-id'] as string,\n },\n });\n\n if (storefrontSettingStates) {\n Object.assign(storefront.settings, storefrontSettingStates);\n }\n\n storefront.request = this.getCacheableStorefrontRequestHandler(\n storefront,\n ) as typeof storefront.request;\n\n return storefront;\n }\n\n /**\n * Initializes resources passed in from the server via request headers.\n */\n private initStorefrontContext(): SwellData {\n let storefrontContext = {} as SwellData;\n if (this.swellHeaders?.['storefront-context']) {\n try {\n storefrontContext = JSON.parse(\n decodeURIComponent(this.swellHeaders['storefront-context']),\n );\n } catch (error) {\n logger.error(\n '[SDK] Failed to parse swell-storefront-context. Ignoring...',\n );\n }\n }\n return storefrontContext;\n }\n\n private isStorefrontRequestCacheable(\n method: string,\n url: string,\n opt?: { force: boolean },\n ): boolean {\n if (opt?.force) {\n return false;\n }\n\n if (method === 'get') {\n const urlModel = url.split('/')[1];\n\n switch (urlModel) {\n case 'products':\n case 'categories':\n case 'content':\n case 'settings':\n return true;\n\n default:\n return false;\n }\n }\n\n return false;\n }\n\n private getCacheableStorefrontRequestHandler<T>(\n storefront: SwellClient<'snake'>,\n ) {\n const storefrontRequest = storefront.request;\n\n return (method: string, url: string, id?: any, data?: any, opt?: any) => {\n if (this.isStorefrontRequestCacheable(method, url, opt)) {\n const key = getCacheKey('request', [\n this.instanceId,\n this.getAccountCacheKey(),\n method,\n url,\n id,\n data,\n opt,\n ]);\n const cache = this.getRequestCache();\n const fetchFn = () => {\n const requestUrl = id ? `${url}/${id}` : url;\n logger.debug('[SDK] Cacheable API request', { url: requestUrl, key });\n return storefrontRequest<T>(method, url, id, data, opt);\n };\n\n // Use fetch for cache bypass, fetchSWR for normal operation\n if (this.shouldBypassCache()) {\n return cache.fetch<T>(key, fetchFn);\n } else {\n return cache.fetchSWR<T>(key, fetchFn);\n }\n }\n\n // clear storefront context if we mutate it\n switch (method) {\n case 'delete':\n case 'post':\n case 'put': {\n // put /cart/items\n const contextKey = url.split('/')[1];\n delete this.storefrontContext[contextKey];\n break;\n }\n\n default:\n break;\n }\n\n return storefrontRequest<T>(method, url, id, data, opt);\n };\n }\n\n /**\n * Caches client resources in memory.\n */\n private getResourceCache(): Cache {\n let cache = resourceCaches.get(this.instanceId);\n if (cache === undefined) {\n cache = new ResourceCache({\n kvStore: this.workerEnv?.THEME,\n workerCtx: this.workerCtx,\n });\n resourceCaches.set(this.instanceId, cache);\n }\n return cache;\n }\n\n /**\n * Caches client storefront API requests in memory.\n */\n private getRequestCache(): Cache {\n let cache = requestCaches.get(this.instanceId);\n if (cache === undefined) {\n cache = new RequestCache({\n kvStore: this.workerEnv?.THEME,\n workerCtx: this.workerCtx,\n });\n requestCaches.set(this.instanceId, cache);\n }\n return cache;\n }\n}\n\n/**\n * Generates a cache key from a root key and any optional arguments.\n */\nfunction getCacheKey(key: string, args?: unknown[]): string {\n if (Array.isArray(args) && args.length > 0) {\n const fullKey = `${key}_${md5(JSON.stringify(args))}`;\n logger.debug(`[SDK] make cache key: ${fullKey}`);\n return fullKey;\n }\n\n return key;\n}\n\nexport class SwellBackendAPI {\n public apiHost: string = DEFAULT_API_HOST;\n public apiAuth: string = '';\n\n constructor({\n storeId,\n accessToken,\n apiHost,\n }: {\n storeId: string;\n accessToken: string;\n apiHost?: string;\n }) {\n this.apiHost = apiHost || DEFAULT_API_HOST;\n this.apiAuth = toBase64(`${storeId}:${accessToken}`);\n }\n\n async makeRequest<T>(method: string, url: string, data?: object): Promise<T> {\n const requestOptions: {\n method: string;\n headers: SwellData;\n body?: string;\n } = {\n method,\n headers: {\n Authorization: `Basic ${this.apiAuth}`,\n 'User-Agent': 'swell-functions/1.0',\n 'Content-Type': 'application/json',\n },\n };\n\n let query = '';\n\n if (data) {\n try {\n if (method === 'GET') {\n query = `?${this.stringifyQuery(data)}`;\n } else {\n requestOptions.body = JSON.stringify(data);\n requestOptions.headers['Content-Length'] = String(\n requestOptions.body.length,\n );\n }\n } catch {\n throw new Error(`Error serializing data: ${data}`);\n }\n }\n\n const endpointUrl = String(url).startsWith('/') ? url.substring(1) : url;\n const requestUrl = `${this.apiHost}/${endpointUrl}${query}`;\n\n const trace = createTraceId();\n logger.debug('[SDK] Backend request start', {\n query: `/${endpointUrl}${query}`,\n trace: trace,\n });\n\n const response = await fetch(requestUrl, requestOptions);\n\n const responseText = await response.text();\n\n let result;\n try {\n result = JSON.parse(responseText);\n } catch {\n result = String(responseText || '').trim();\n }\n\n logger.debug('[SDK] Backend request end', {\n status: response.status,\n trace: trace,\n });\n\n if (response.status > 299) {\n throw new SwellError(result, {\n status: response.status,\n method,\n endpointUrl,\n });\n } else if (method !== 'GET' && result?.errors) {\n throw new SwellError(result.errors, { status: 400, method, endpointUrl });\n }\n\n return result;\n }\n\n stringifyQuery(queryObject: object, prefix?: string): string {\n const result = [];\n\n for (const [key, value] of Object.entries(queryObject)) {\n const prefixKey = prefix ? `${prefix}[${key}]` : key;\n const isObject = value !== null && typeof value === 'object';\n const encodedResult = isObject\n ? this.stringifyQuery(value, prefixKey)\n : `${encodeURIComponent(prefixKey)}=${\n value === null ? '' : encodeURIComponent(value)\n }`;\n\n result.push(encodedResult);\n }\n\n return result.join('&');\n }\n\n async get<T = SwellData>(url: string, query?: SwellData): Promise<T> {\n return this.makeRequest('GET', url, query);\n }\n\n async put<T = SwellData>(url: string, data: SwellData): Promise<T> {\n return this.makeRequest('PUT', url, data);\n }\n\n async post<T = SwellData>(url: string, data: SwellData): Promise<T> {\n return this.makeRequest('POST', url, data);\n }\n\n async delete<T = SwellData>(url: string, data?: SwellData): Promise<T> {\n return this.makeRequest('DELETE', url, data);\n }\n}\n\nexport class SwellError extends Error {\n status: number = 200;\n\n constructor(message: string, options: SwellErrorOptions = {}) {\n let formattedMessage;\n if (typeof message === 'string') {\n formattedMessage = message;\n } else {\n formattedMessage = JSON.stringify(message, null, 2);\n }\n\n if (options.method && options.endpointUrl) {\n formattedMessage = `${options.method} /${options.endpointUrl}\\n${formattedMessage}`;\n }\n\n super(formattedMessage);\n this.name = 'SwellError';\n this.status = options.status || 500;\n }\n}\n", "import { Keyv } from 'keyv';\nimport {\n createCache,\n type CreateCacheOptions as OriginalCreateCacheOptions,\n type Cache as CacheManager,\n} from 'cache-manager';\n\nimport { CFWorkerKVKeyvAdapter } from './cf-worker-kv-keyv-adapter';\nimport { resolveAsyncResources } from '../utils';\n\nimport type { CFWorkerKV, CFWorkerContext } from 'types/cloudflare';\n\nexport type CreateCacheOptions = OriginalCreateCacheOptions & {\n kvStore?: CFWorkerKV;\n workerCtx?: CFWorkerContext;\n};\n\nconst CF_KV_NAMESPACE = 'THEME';\n\nconst DEFAULT_TTL = 5 * 1000; // 5s\nconst DEFAULT_SWR_TTL = 1000 * 60 * 60 * 24 * 7; // 1 week\n\nconst DEFAULT_OPTIONS: CreateCacheOptions = Object.freeze({\n ttl: DEFAULT_TTL,\n});\n\n/**\n * Value used to indicate `null` to differentiate between actual `null` values and unset cache keys\n *\n * Necessary because cache manager always returns `null` when a value has not been set yet\n */\nconst NULL_VALUE = '__NULL__';\n\nconst SWR_PROMISE_MAP = new Map<string, Promise<unknown>>();\nconst FETCH_PROMISE_MAP = new Map<string, Promise<unknown>>();\n\n/**\n * Cache supports memory or KV\n * The KV layer supports namespacing and compression\n */\nexport class Cache {\n private client: CacheManager;\n private workerCtx?: CFWorkerContext;\n\n constructor(options?: CreateCacheOptions) {\n options = options || {};\n\n this.workerCtx = options.workerCtx;\n\n // default cache store is memory-store\n options.stores = options.stores || buildStores(options.kvStore);\n\n this.client = createCache({\n ...DEFAULT_OPTIONS,\n ...options,\n });\n }\n\n /**\n * Always fetches fresh data and updates cache\n * Deduplicates concurrent requests with the same key\n *\n * @param key Cache key\n * @param fetchFn Function to fetch fresh data\n * @param ttl Time to live in milliseconds (default: DEFAULT_SWR_TTL)\n * @param isCacheable Whether to store result in cache (default: true)\n */\n async fetch<T>(\n key: string,\n fetchFn: () => T | Promise<T>,\n ttl: number = DEFAULT_SWR_TTL,\n isCacheable = true,\n ): Promise<T> {\n // Check for concurrent request deduplication\n let promise = FETCH_PROMISE_MAP.get(key) as Promise<T> | undefined;\n\n if (!promise) {\n promise = Promise.resolve()\n .then(fetchFn)\n .then(resolveAsyncResources)\n .then(async (value) => {\n // Store null values as NULL_VALUE to differentiate between unset keys and actual null values\n const isNull = value === null || value === undefined;\n if (isCacheable) {\n await this.client.set(key, isNull ? NULL_VALUE : value, ttl);\n }\n return value as T;\n })\n .finally(() => {\n FETCH_PROMISE_MAP.delete(key);\n });\n\n FETCH_PROMISE_MAP.set(key, promise);\n }\n\n return await promise;\n }\n\n /**\n * Fetch cache using SWR (stale-while-revalidate)\n *\n * This will always return the cached value immediately if exists\n */\n async fetchSWR<T>(\n key: string,\n fetchFn: () => T | Promise<T>,\n ttl: number = DEFAULT_SWR_TTL,\n isCacheble = true,\n ): Promise<T> {\n const cacheValue = isCacheble ? await this.client.get<T>(key) : undefined;\n\n // Do not create duplicate requests\n let promise = SWR_PROMISE_MAP.get(key);\n\n if (promise === undefined) {\n // Update cache asynchronously\n promise = Promise.resolve()\n .then(fetchFn)\n .then(resolveAsyncResources)\n .then(async (value) => {\n // Store null values as NULL_VALUE to differentiate between unset keys and actual null values\n const isNull = value === null || value === undefined;\n if (isCacheble) {\n await this.client.set(key, isNull ? NULL_VALUE : value, ttl);\n }\n return value as T;\n })\n .finally(() => {\n SWR_PROMISE_MAP.delete(key);\n });\n\n SWR_PROMISE_MAP.set(key, promise);\n }\n\n // Make the worker wait until the promise is resolved if possible\n if (typeof this.workerCtx?.waitUntil === 'function') {\n this.workerCtx.waitUntil(promise);\n }\n\n if (cacheValue !== undefined) {\n return cacheValue === NULL_VALUE ? (null as T) : (cacheValue as T);\n }\n\n const result = await (promise as Promise<T>);\n\n return result;\n }\n\n async get<T>(key: string): Promise<T | undefined> {\n return this.client.get(key);\n }\n\n async set<T>(key: string, value: T, ttl?: number): Promise<T> {\n return this.client.set(key, value, ttl);\n }\n\n async flush(key: string): Promise<void> {\n await this.client.del(key);\n }\n\n /**\n * Flushes the entire cache.\n *\n * __WARNING__: If the cache store is shared among many cache clients,\n * this will flush entries for other clients.\n */\n async flushAll(): Promise<void> {\n await this.client.clear();\n }\n}\n\nfunction buildStores(kvStore?: CFWorkerKV): Keyv[] {\n const stores: Keyv[] = [];\n\n if (kvStore) {\n stores.push(\n new Keyv({\n namespace: CF_KV_NAMESPACE,\n store: new CFWorkerKVKeyvAdapter(kvStore),\n }),\n );\n } else {\n // Fall back to memory store\n // This is not suitable for a large number of clients\n // as it could kill the process with memory overload\n stores.push(new Keyv());\n }\n\n return stores;\n}\n", "export const logLevels = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n} as const;\n\nexport type LogLevel = keyof typeof logLevels;\n\nexport type TimestampFormat = 'off' | 'iso' | 'unix';\n\nexport interface SdkLoggerConfig {\n level?: LogLevel;\n timestamp?: TimestampFormat;\n structured?: boolean;\n}\n\nlet currentLogLevel: LogLevel = 'warn';\nlet currentTimestampFormat: TimestampFormat = 'off';\nlet isStructured = false;\n\nexport function configureSdkLogger(config: SdkLoggerConfig = {}): void {\n if (config.level && logLevels[config.level] !== undefined) {\n currentLogLevel = config.level;\n }\n if (config.timestamp) {\n currentTimestampFormat = config.timestamp;\n }\n if (typeof config.structured === 'boolean') {\n isStructured = config.structured;\n }\n}\n\nfunction getTimestamp(): string | number | undefined {\n if (currentTimestampFormat === 'iso') {\n return new Date().toISOString();\n }\n if (currentTimestampFormat === 'unix') {\n return Date.now();\n }\n return undefined;\n}\n\nfunction formatArgs(args: any[]): any[] {\n const timestamp = getTimestamp();\n\n if (!isStructured) {\n return timestamp !== undefined ? [...args, `(${timestamp})`] : args;\n }\n\n let message = '';\n let context: Record<string, any> = {};\n const messageParts: any[] = [];\n\n for (const arg of args) {\n if (arg instanceof Error) {\n context.error = {\n name: arg.name,\n message: arg.message,\n stack: arg.stack,\n };\n } else if (\n typeof arg === 'object' &&\n arg !== null &&\n !Array.isArray(arg) &&\n Object.getPrototypeOf(arg) === Object.prototype\n ) {\n Object.assign(context, arg);\n } else {\n messageParts.push(arg);\n }\n }\n\n message = messageParts\n .map((part) => (typeof part === 'object' ? JSON.stringify(part) : part))\n .join(' ');\n\n const finalLogObject = {\n message,\n ...context,\n ...(timestamp && { timestamp }),\n };\n\n return [finalLogObject];\n}\n\nexport const logger = {\n error: (...args: any[]): void => {\n console.error(...formatArgs(args));\n },\n warn: (...args: any[]): void => {\n if (logLevels[currentLogLevel] >= logLevels.warn) {\n console.warn(...formatArgs(args));\n }\n },\n info: (...args: any[]): void => {\n if (logLevels[currentLogLevel] >= logLevels.info) {\n console.info(...formatArgs(args));\n }\n },\n debug: (...args: any[]): void => {\n if (logLevels[currentLogLevel] >= logLevels.debug) {\n console.debug(...formatArgs(args));\n }\n },\n};\n\nexport function createTraceId(data?: string): string {\n if (data === undefined) {\n return Math.random().toString(36).substring(2, 10);\n }\n\n let hash = 5381;\n for (let i = 0; i < data.length; i++) {\n const char = data.charCodeAt(i);\n hash = (hash << 5) + hash + char;\n }\n return (hash >>> 0).toString(16);\n}\n", "import type { KeyvStoreAdapter } from 'keyv';\nimport type { CFWorkerKV } from 'types/cloudflare';\nimport { logger, createTraceId } from '../utils/logger';\n\n/**\n * CloudFlare Workers KV adapter for Keyv.\n * Includes namespacing to prevent conflicts within shared storage.\n */\nexport class CFWorkerKVKeyvAdapter implements KeyvStoreAdapter {\n private store: CFWorkerKV;\n public namespace: string; // magically passed in from Keyv\n public opts: unknown;\n\n constructor(store: CFWorkerKV) {\n this.store = store;\n\n this.opts = null;\n // keyv will override namespace at runtime\n this.namespace = 'dummy';\n }\n\n async has(key: string): Promise<boolean> {\n const stream = await this.store.get(key, 'stream');\n\n if (stream !== null) {\n await stream.cancel();\n return true;\n }\n\n return false;\n }\n\n async get<T>(key: string): Promise<T | undefined> {\n const trace = createTraceId();\n logger.debug('[SDK] kv.get', { key, trace });\n const value = await this.store.get(key);\n // The adapter stores any value as a string,\n // so `null` means that the `key` does not exist in the KV.\n const result = value !== null ? (value as T) : undefined;\n logger.debug(`[SDK] kv.get ${value !== null ? 'HIT' : 'MISS'}`, {\n key,\n trace,\n });\n return result;\n }\n\n set(key: string, value: string, ttl?: number): Promise<void> {\n if (typeof ttl === 'number') {\n /**\n * The minimum expiration time is 60 seconds.\n * @see {@link https://developers.cloudflare.com/kv/api/write-key-value-pairs/#expiring-keys}\n */\n ttl = Math.max(60, ttl / 1000);\n }\n\n logger.debug('[SDK] kv.set', { key, ttl });\n return this.store.put(key, value, { expirationTtl: ttl });\n }\n\n async delete(key: string): Promise<boolean> {\n await this.store.delete(key);\n return true;\n }\n\n async clear(): Promise<void> {\n // store.clear() would reset the entire cache, but in this case\n // we only want to clear entries within the given namespace.\n // Note: If the cache is large, then this will not scale\n\n let cursor = '';\n let complete = false;\n const prefix = `${this.namespace}:`;\n\n do {\n const response = await this.store.list({\n prefix,\n cursor: cursor || undefined,\n });\n\n cursor = response.cursor ?? '';\n complete = response.list_complete;\n\n if (response.keys.length > 0) {\n await Promise.all(\n response.keys.map((key) => {\n return this.store.delete(key.name);\n }),\n );\n }\n } while (!complete);\n }\n\n on(\n _event: string,\n _listener: (...args: unknown[]) => void,\n ): CFWorkerKVKeyvAdapter {\n // This can be implemented if necessary.\n return this;\n }\n}\n", "import { Drop } from 'liquidjs';\nimport qs from 'qs';\nimport { cloneDeep, reduce } from 'lodash-es';\nimport JSON5 from 'json5';\n\nimport {\n StorefrontResource,\n SwellStorefrontCollection,\n SwellStorefrontRecord,\n} from '../resources';\nimport { ShopifyResource } from '../compatibility/shopify-objects/resource';\nimport { LANG_TO_COUNTRY_CODES, CURRENCY_COUNTRIES } from '../constants';\n\nimport type {\n SwellData,\n SwellLocale,\n SwellThemeConfig,\n ThemeLayoutSectionGroupConfig,\n ThemePageSectionSchema,\n ThemePresetSchema,\n ThemeSection,\n ThemeSectionConfig,\n ThemeSectionGroup,\n ThemeSectionSchema,\n ThemeSectionSettings,\n ThemeSettings,\n ThemeSettingsBlock,\n} from 'types/swell';\nimport { isLikePromise } from '@/liquid/utils';\nimport { toSchemaFieldId } from '@/easyblocks/utils';\n\nexport * from './md5';\nexport { configureSdkLogger, type SdkLoggerConfig } from './logger';\nexport { getKVFlavor, resetKVFlavorCache } from './kv-flavor';\n\n/* export function dump(value: any, depth = 10) {\n console.log(util.inspect(value, { depth, colors: true }));\n} */\n\nfunction isSectionConfig(\n config: SwellThemeConfig,\n themeConfigs: Map<string, SwellThemeConfig>,\n): boolean {\n if (!config.file_path.startsWith('theme/sections/')) {\n return false;\n }\n\n if (config.file_path.endsWith('.liquid')) {\n const hasJsonFile = themeConfigs.get(\n config.file_path.replace(/\\.liquid$/, '.json'),\n );\n\n if (!hasJsonFile) {\n return true;\n }\n } else if (config.file_path.endsWith('.json')) {\n return true;\n }\n\n return false;\n}\n\nexport async function getAllSections(\n themeConfigs: Map<string, SwellThemeConfig>,\n renderTemplateSchema: (\n config: SwellThemeConfig,\n ) => Promise<ThemeSectionSchema | undefined>,\n): Promise<ThemePageSectionSchema[]> {\n const allSections: ThemePageSectionSchema[] = [];\n\n for (const sectionConfig of themeConfigs.values()) {\n if (isSectionConfig(sectionConfig, themeConfigs)) {\n const schema = await renderTemplateSchema(sectionConfig);\n\n if (schema) {\n allSections.push({\n ...schema,\n id:\n String(sectionConfig.name || '')\n .split('.')\n .pop() ?? '',\n ...(schema && { presets: resolveSectionPresets(schema) }),\n });\n }\n }\n }\n\n return allSections;\n}\n\nfunction resolveSectionPresets(\n schema?: ThemeSectionSchema,\n): ThemePresetSchema[] {\n if (!Array.isArray(schema?.presets)) return [];\n\n return schema.presets.map<ThemePresetSchema>((preset) => ({\n label: preset.label,\n settings: {\n ...schema.fields?.reduce<ThemeSettings>((acc, field) => {\n if (field.id && field.default !== undefined) {\n acc[field.id] = field.default;\n }\n return acc;\n }, {}),\n ...(preset.settings || undefined),\n },\n blocks: resolveSectionBlockPresets(preset, schema),\n }));\n}\n\nfunction resolveSectionBlockPresets(\n preset: ThemePresetSchema,\n schema: ThemeSectionSchema,\n): ThemeSettingsBlock[] | undefined {\n if (!preset.blocks) {\n return;\n }\n\n if (Array.isArray(preset.blocks)) {\n return preset.blocks.map((block) => {\n const blockDef = schema.blocks?.find((b) => b.type === block.type);\n\n return blockDef\n ? {\n ...block,\n settings: {\n ...blockDef.fields.reduce<ThemeSettings>((acc, field) => {\n if (field.id && field.default !== undefined) {\n acc[field.id] = field.default;\n }\n return acc;\n }, {}),\n ...(block.settings || undefined),\n },\n }\n : block;\n });\n }\n\n return Object.values(preset.blocks);\n}\n\nexport async function getLayoutSectionGroups(\n allSections: Map<string, SwellThemeConfig>,\n renderTemplateSchema: (\n config: SwellThemeConfig,\n ) => Promise<Partial<ThemeSectionSchema> | undefined>,\n): Promise<ThemeLayoutSectionGroupConfig[]> {\n const allSectionsList = Array.from(allSections.values());\n\n const sectionGroupConfigs = allSectionsList.filter(\n (config) =>\n config.file_path.endsWith('.json') &&\n // Section groups must not have a liquid file\n !allSections.has(config.file_path.replace(/\\.json$/, '.liquid')),\n );\n\n const getSectionSchema = async (\n type: string,\n ): Promise<Partial<ThemeSectionSchema> | undefined> => {\n const config = allSectionsList.find((config) => {\n if (\n !config.file_path.endsWith(`/${type}.json`) &&\n !config.file_path.endsWith(`/${type}.liquid`)\n ) {\n return false;\n }\n\n if (config.file_path.endsWith('.liquid')) {\n const hasJsonFile = allSections.get(\n config.file_path.replace(/\\.liquid$/, '.json'),\n );\n\n if (!hasJsonFile) {\n return true;\n }\n } else if (config.file_path.endsWith('.json')) {\n return true;\n }\n\n return false;\n });\n\n if (!config) {\n return undefined;\n }\n\n const schema = await renderTemplateSchema(config);\n return {\n ...schema,\n id: String(config.name || '')\n .split('.')\n .pop(),\n };\n };\n\n const layoutSectionGroups: ThemeLayoutSectionGroupConfig[] = [];\n for (const config of sectionGroupConfigs) {\n let sectionGroup;\n try {\n sectionGroup = JSON5.parse<ThemeSectionGroup>(config.file_data);\n } catch (err) {\n // noop\n console.warn(err);\n }\n\n // Must have a type property\n if (sectionGroup?.type) {\n const sectionConfigs = await getPageSections(\n sectionGroup,\n getSectionSchema,\n );\n\n layoutSectionGroups.push({\n ...sectionGroup,\n id: String(config.name || '')\n .split('.')\n .pop(),\n sectionConfigs,\n } as ThemeLayoutSectionGroupConfig);\n }\n }\n\n return layoutSectionGroups;\n}\n\nexport async function getPageSections(\n sectionGroup: ThemeSectionGroup,\n getSchema: (type: string) => Promise<Partial<ThemeSectionSchema> | undefined>,\n): Promise<ThemeSectionConfig[]> {\n // Use specified order or if undefined/empty use natural order\n const order =\n Array.isArray(sectionGroup?.order) && sectionGroup.order.length > 0\n ? sectionGroup.order\n : Object.keys(sectionGroup?.sections || {});\n\n const pageSections: ThemeSectionConfig[] = [];\n\n for (let i = 0; i < order.length; ++i) {\n const key = order[i];\n const section: ThemeSection = sectionGroup.sections?.[key];\n\n if (!section) {\n continue;\n }\n\n const schema: ThemeSectionSchema = ((await getSchema(\n section.type,\n )) as ThemeSectionSchema) || {\n id: section.type,\n label: section.type,\n tag: 'div',\n class: '',\n fields: [],\n blocks: [],\n };\n\n const id = sectionGroup.id ? `page__${sectionGroup.id}__${key}` : schema.id;\n\n const blockOrder = Array.isArray(section.block_order)\n ? section.block_order\n : Object.keys(section.blocks || {});\n\n const blocks: ThemeSettingsBlock[] = blockOrder\n .map((key: string) => {\n const block = section.blocks?.[key];\n\n if (block) {\n return {\n ...block,\n id: `${schema.id}__${key}`,\n };\n }\n })\n .filter(Boolean) as ThemeSettingsBlock[];\n\n const settings: ThemeSectionSettings = {\n section: {\n id,\n ...section,\n blocks,\n index0: i,\n index: i + 1,\n location: getSectionLocation(section.type),\n },\n };\n\n pageSections.push({\n id,\n section: { id, ...section },\n schema,\n settings,\n tag: schema.tag || 'div',\n class: schema.class,\n });\n }\n\n return pageSections;\n}\n\nexport function isArray<T>(value: unknown): value is Array<T> {\n // be compatible with IE 8\n return String(value) === '[object Array]';\n}\n\nexport function isObject(value: unknown): value is Record<string, unknown> {\n const type = typeof value;\n return value !== null && (type === 'object' || type === 'function');\n}\n\nexport function toBase64(inputString: string): string {\n const utf8Bytes = new TextEncoder().encode(inputString);\n let base64String = '';\n\n for (let i = 0; i < utf8Bytes.length; i += 3) {\n const chunk = Array.from(utf8Bytes.slice(i, i + 3));\n base64String += btoa(String.fromCharCode(...chunk));\n }\n\n return base64String;\n}\n\nexport function arrayToObject<\n // T extends Record<keyof T | K, unknown>,\n T extends { [I in keyof T | K]?: T[I] },\n K extends string = 'id',\n>(arr: T[], key: K = 'id' as K): Record<string, T | undefined> {\n return reduce(\n arr,\n (obj, value) => {\n obj[String(value[key])] = value;\n return obj;\n },\n {} as Record<string, T>,\n );\n}\n\nexport function getCountryCodeFromLocale(locale: string): string {\n const [lang, country] = locale.split(/-|_/);\n\n if (country) {\n return country.toLowerCase();\n }\n\n return (LANG_TO_COUNTRY_CODES[lang] || '').toLowerCase();\n}\n\nexport function getCountryByCurrency(\n currencyCode: keyof typeof CURRENCY_COUNTRIES,\n) {\n if (currencyCode in CURRENCY_COUNTRIES) {\n return CURRENCY_COUNTRIES[currencyCode];\n }\n\n return null;\n}\n\nexport function getCurrencyByCountry(countryCode: string): string {\n for (const [currency, country] of Object.entries(CURRENCY_COUNTRIES)) {\n if (country.iso === countryCode) {\n return currency;\n }\n }\n\n return '';\n}\n\nexport function isLikeSwellLocale(value: unknown): value is SwellLocale {\n return (\n isObject(value) &&\n Object.hasOwn(value, 'code') &&\n Object.hasOwn(value, 'name') &&\n Object.hasOwn(value, 'fallback')\n );\n}\n\nexport function forEachKeyDeep(\n obj: Record<string, unknown>,\n fn: (key: string, value: unknown) => boolean | void,\n): void {\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const result = fn(key, obj);\n\n if (result !== false) {\n if (typeof value === 'object' && value !== null) {\n forEachKeyDeep(value as Record<string, unknown>, fn);\n }\n }\n }\n}\n\nexport function findCircularReferences(value: object): unknown[] {\n const references = new Set();\n\n forEachKeyDeep(value as Record<string, unknown>, (_key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (references.has(value)) {\n return false;\n }\n\n references.add(value);\n }\n\n return true;\n });\n\n return Array.from(references);\n}\n\nexport function removeCircularReferences(value: object): object {\n if (!value) {\n return value;\n }\n\n const references = new WeakSet();\n\n return JSON.parse(\n JSON.stringify(value, (_key, value: unknown) => {\n if (typeof value === 'object' && value !== null) {\n if (references.has(value)) {\n // Clone circular reference\n return JSON.parse(JSON.stringify(value)) as object;\n }\n references.add(value);\n }\n return value;\n }),\n ) as object;\n}\n\nexport function dehydrateSwellRefsInStorefrontResources(obj: unknown): void {\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n if (key === '_swell' && '_swell' in obj) {\n obj[key] = undefined;\n } else {\n dehydrateSwellRefsInStorefrontResources(value);\n }\n }\n}\n\nfunction getStorefrontResourceType(value: unknown) {\n if (value === undefined) {\n return undefined;\n } else if (value instanceof SwellStorefrontCollection) {\n return 'SwellStorefrontCollection';\n } else if (value instanceof SwellStorefrontRecord) {\n return 'SwellStorefrontRecord';\n } else if (value instanceof ShopifyResource) {\n return 'ShopifyResource';\n } else if (value instanceof StorefrontResource) {\n return 'StorefrontResource';\n } else {\n return 'promise';\n }\n}\n\nexport async function resolveAsyncResources(\n response: unknown,\n resolveStorefrontResources: boolean = true,\n resolveWithResourceMetadata: boolean = false,\n): Promise<unknown> {\n let result = response;\n let nextResolveStorefrontResources = resolveStorefrontResources;\n\n try {\n if (isLikePromise(response)) {\n nextResolveStorefrontResources = false;\n result = await response;\n }\n\n if (response instanceof StorefrontResource) {\n nextResolveStorefrontResources = false;\n result = await resolveAsyncResources(\n response.resolve(),\n resolveStorefrontResources,\n resolveWithResourceMetadata,\n );\n }\n\n if (Array.isArray(result)) {\n const array = await Promise.all(\n result.map((item) =>\n resolveAsyncResources(\n item,\n resolveStorefrontResources,\n resolveWithResourceMetadata,\n ),\n ),\n );\n\n result = array;\n\n if (!array.some((item) => item !== undefined)) {\n return resolveStorefrontResources ? [] : undefined;\n }\n } else if (result instanceof Drop) {\n return result;\n } else if (\n typeof result === 'object' &&\n result !== null &&\n (!('_swell' in result) || !result._swell)\n ) {\n const objectResult: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(result)) {\n if (!resolveStorefrontResources) {\n if (\n isLikePromise(value) ||\n value instanceof StorefrontResource ||\n value instanceof ShopifyResource\n ) {\n objectResult[key] = {\n _type: getStorefrontResourceType(value),\n ...(resolveWithResourceMetadata\n ? {\n value: await resolveAsyncResources(\n value,\n nextResolveStorefrontResources,\n resolveWithResourceMetadata,\n ),\n }\n : undefined),\n };\n continue;\n }\n }\n\n if (value instanceof StorefrontResource) {\n if (resolveWithResourceMetadata) {\n objectResult[key] = {\n _type: getStorefrontResourceType(value),\n value: await resolveAsyncResources(\n value,\n nextResolveStorefrontResources,\n resolveWithResourceMetadata,\n ),\n };\n continue;\n }\n }\n\n objectResult[key] = await resolveAsyncResources(\n value,\n nextResolveStorefrontResources,\n resolveWithResourceMetadata,\n );\n }\n\n if (\n !resolveStorefrontResources &&\n Object.keys(objectResult).length === 0\n ) {\n return undefined;\n }\n\n return objectResult;\n }\n } catch (err) {\n console.error(err);\n return response;\n }\n\n return result;\n}\n\nexport function stringifyQueryParams(queryParams: SwellData): string {\n return qs.stringify(\n {\n ...queryParams,\n sections: undefined,\n section_id: undefined,\n },\n { encodeValuesOnly: true, arrayFormat: 'repeat' },\n );\n}\n\nexport function scopeCustomCSS(\n custom_css: string | string[],\n sectionID: string,\n): string {\n custom_css = Array.isArray(custom_css) ? custom_css.join(' ') : custom_css;\n\n const cssRules = custom_css.split('}');\n\n const scopedCSS = cssRules\n .map((rule) => {\n const [selectors, properties] = rule.split('{');\n if (!selectors || !properties) return ''; // Skip invalid rules\n const scopedSelectors = selectors\n .split(',')\n .map((selector) => `#${sectionID} ${selector.trim()}`)\n .join(', ');\n\n return `${scopedSelectors} {${properties}}`;\n })\n .join(' ');\n\n return scopedCSS;\n}\n\nexport function extractSettingsFromForm(\n form: Record<string, { value: unknown } | undefined>,\n currentSettings: Record<string, unknown>,\n): ThemeSettings {\n return Object.entries(form).reduce<ThemeSettings>(\n (acc, [formKey, formValue]) => {\n if (formValue?.value !== null && formValue?.value !== undefined) {\n acc[toSchemaFieldId(formKey)] = formValue?.value;\n }\n return acc;\n },\n cloneDeep(currentSettings),\n );\n}\n\nexport function getSectionLocation(sectionType?: string): string {\n switch (sectionType) {\n case 'header':\n case 'footer':\n return sectionType;\n\n default:\n return sectionType ? `custom.${sectionType}` : 'template';\n }\n}\n\nexport const SECTION_GROUP_CONTENT = 'ContentSections';\n\nexport function getSectionGroupProp(sectionId: string): string {\n return `SectionGroup_${sectionId}`;\n}\n", "import { cloneDeep } from 'lodash-es';\n\nimport { md5, resolveAsyncResources, stringifyQueryParams } from './utils';\nimport { logger, createTraceId } from './utils/logger';\nimport { isLikePromise } from './liquid/utils';\n\nimport type { Swell } from './api';\nimport type { ShopifyCompatibility } from './compatibility/shopify';\nimport type {\n SwellData,\n SwellRecord,\n SwellCollection,\n InferSwellCollection,\n SwellCollectionPages,\n StorefrontResourceGetter,\n StorefrontCollectionGetter,\n StorefrontSingletonGetter,\n StorefrontRecordGetter,\n} from '../types/swell';\n\nconst NOT_CACHEBLE_COLLECTIONS = Object.freeze(\n new Set(['accounts:addresses', 'accounts:orders', 'accounts:subscriptions']),\n);\n\nfunction isResourceCacheble(name: string): boolean {\n return !NOT_CACHEBLE_COLLECTIONS.has(name);\n}\n\nexport const MAX_QUERY_PAGE_LIMIT = 100;\nexport const DEFAULT_QUERY_PAGE_LIMIT = 15;\n\nexport class StorefrontResource<T extends SwellData = SwellData> {\n public _getter?: StorefrontResourceGetter<T>;\n public _getterHash?: string;\n public _result?: T | null;\n public _compatibilityProps: SwellData = {};\n\n [key: string]: any;\n\n constructor(getter?: StorefrontResourceGetter<T>) {\n if (getter) {\n this._setGetter(getter);\n }\n\n return this._getProxy();\n }\n\n _getProxy(): StorefrontResource<T> {\n return new Proxy(this, {\n get(target, prop: string): unknown {\n const instance = target;\n\n switch (prop) {\n // Ignore liquid prop checks\n case 'toLiquid':\n return typeof instance.toLiquid === 'function'\n ? instance.toLiquid\n : undefined;\n\n // Ignore liquid prop checks\n case 'next':\n return;\n\n // Indicate props are thenable\n case 'then':\n return false;\n\n case 'toJSON':\n case 'toObject':\n return () => instance.toObject();\n\n default:\n break;\n }\n\n // Return functions and props starting with _ directly\n if (\n typeof instance[prop] === 'function' ||\n (typeof prop === 'string' && prop.startsWith('_'))\n ) {\n return instance[prop];\n }\n\n if (typeof prop === 'symbol') {\n if (prop === Symbol.toStringTag) {\n if (isLikePromise(instance._result)) {\n return '[object Promise]';\n } else if (instance._result !== undefined) {\n return '[object Object]';\n } else {\n return 'undefined';\n }\n }\n\n return instance[prop];\n }\n\n // Get resource result if not yet fetched\n if (instance._result === undefined) {\n if (instance[prop] !== undefined) {\n // Return prop if already defined\n return instance[prop];\n }\n\n instance._result = instance._get().catch((err: unknown) => {\n logger.error(err);\n return instance._getCollectionResultOrProp(instance, prop);\n }) as unknown as T;\n }\n\n // Return prop then if result is a promise\n if (isLikePromise(instance._result)) {\n return instance._result\n .then(() => {\n return instance._getCollectionResultOrProp(instance, prop);\n })\n .catch((err: unknown) => {\n logger.error(err);\n return null;\n });\n }\n\n return instance._getCollectionResultOrProp(instance, prop);\n },\n\n set(target, prop: string, value: unknown): boolean {\n target[prop] = value;\n return true;\n },\n\n ownKeys(target): (string | symbol)[] {\n if (typeof target._isEmpty === 'function' && target._isEmpty()) {\n return [];\n }\n const allStringProps = Object.getOwnPropertyNames(target);\n const allSymbolProps = Object.getOwnPropertySymbols(target);\n const allProps: (string | symbol)[] = [\n ...allStringProps,\n ...allSymbolProps,\n ];\n\n return allProps;\n },\n });\n }\n\n _getCollectionResultOrProp(\n instance: StorefrontResource<T>,\n prop: string | number,\n ): unknown {\n if (instance._result && Array.isArray(instance._result.results)) {\n const record =\n instance._result.results.find(\n (result: SwellRecord) => result.slug === prop || result.id === prop,\n ) ||\n (typeof prop === 'number' ? instance._result.results[prop] : undefined);\n\n if (record) {\n return record;\n }\n }\n\n if (prop in instance._compatibilityProps) {\n return instance._compatibilityProps[prop];\n }\n\n if (instance._result && prop in instance._result) {\n return instance._result[prop];\n }\n\n return instance[prop];\n }\n\n async _get(..._args: unknown[]): Promise<T | null | undefined> {\n if (this._getter) {\n const getter = this._getter.bind(\n this as unknown as SwellStorefrontResource<T>,\n );\n\n return Promise.resolve()\n .then(getter)\n .then((result) => {\n this._result = result ?? null;\n\n if (result) {\n Object.assign(this, result);\n }\n\n return result;\n })\n .catch((err) => {\n this._result = null;\n logger.error(err);\n return null;\n });\n }\n\n return this._result;\n }\n\n _setGetter(getter: StorefrontResourceGetter<T>): void {\n if (this._swell) {\n // Use loading handler for editor indicator\n this._getter = async (...args) => {\n this._swell.isLoading(true);\n const result = await getter.call(\n this as unknown as SwellStorefrontResource<T>,\n ...args,\n );\n this._swell.isLoading(false);\n return result;\n };\n } else {\n this._getter = getter;\n }\n this._getterHash = md5(getter.toString());\n }\n\n async _resolve() {\n if (this._result === undefined) {\n this._result = this._get() as unknown as T;\n }\n\n return this._result;\n }\n\n _isResultResolved(): boolean {\n return this._result !== undefined && !isLikePromise(this._result);\n }\n\n async resolve(\n resolveStorefrontResources: boolean = true,\n resourceMetadata: boolean = false,\n ) {\n const result = await this._resolve();\n if (result === null) {\n return null;\n }\n\n const combined = Object.assign({}, result, this._compatibilityProps);\n\n return resolveAsyncResources(\n combined,\n resolveStorefrontResources,\n resourceMetadata,\n );\n }\n\n toObject() {\n if (this._result === null) {\n return null;\n }\n\n const combined = Object.assign({}, this._result, this._compatibilityProps);\n\n return combined;\n }\n\n toJSON() {\n return this.toObject();\n }\n\n valueOf() {\n return this.resolve();\n }\n\n setCompatibilityProps(props: SwellData): void {\n this._compatibilityProps = props;\n }\n\n [Symbol.toPrimitive](_type: string): unknown {\n return this._id;\n }\n\n getCompatibilityProp<\n T extends keyof StorefrontResource['_compatibilityProps'],\n >(prop: T): StorefrontResource['_compatibilityProps'][T] {\n return this._compatibilityProps[prop];\n }\n}\n\nconst RESOURCE_CLONE_PROPS = Object.freeze([\n '_defaultGetter',\n '_getResourceObject',\n '_collection',\n '_swell',\n '_params',\n '_id',\n '_resourceName',\n '_result',\n]);\n\n/**\n * Clone the resource without compatibility properties.\n *\n * Compatibility properties cause a bug with hanging promises when we retrieve properties from `StorefrontResource`.\n * This is due to the cyclic retrieval of properties in `StorefrontResource`.\n *\n * First we request a property from `_compatibilityProps`,\n * and then `_compatibilityProps` requests a property from `StorefrontResource` via a deferred handler.\n */\nexport function cloneStorefrontResource<T extends SwellData = SwellData>(\n input: StorefrontResource<T>,\n): StorefrontResource<T> {\n const resourceName = (input._resourceName ||\n input.constructor?.name) as string;\n\n // Create a new class with the same name as the input resource\n // Since we determine the resource type by the constructor name\n const ClonedClass = class extends StorefrontResource<T> {};\n\n // Define the name of class constructor\n Object.defineProperty(ClonedClass, 'name', {\n value: resourceName,\n });\n\n const clone = new ClonedClass(input._getter);\n for (const key of RESOURCE_CLONE_PROPS) {\n if (input[key] !== undefined) {\n Object.defineProperty(clone, key, {\n value: input[key],\n });\n }\n }\n\n return clone;\n}\n\ninterface StorefrontResourceFetcher<T extends SwellData = SwellRecord> {\n get: (\n id?: string,\n query?: SwellData,\n ) => Promise<InferSwellCollection<T> | null>;\n\n list: (\n query?: SwellData,\n ) => Promise<T extends SwellCollection ? T : SwellCollection<T>>;\n}\n\nexport class SwellStorefrontResource<\n T extends SwellData = SwellData,\n> extends StorefrontResource<T> {\n public _swell: Swell;\n public _resource?: StorefrontResourceFetcher<T>;\n public _resourceName!: string;\n\n public readonly _collection: string;\n public _query: SwellData = {};\n\n public _compatibilityInstance: ShopifyCompatibility | null = null;\n\n constructor(\n swell: Swell,\n collection: string,\n getter?: StorefrontResourceGetter<T>,\n ) {\n super(getter);\n this._swell = swell;\n this._collection = collection;\n\n return this._getProxy();\n }\n\n _getProxy(): SwellStorefrontResource<T> {\n return super._getProxy() as SwellStorefrontResource<T>;\n }\n\n _getResourceObject(): StorefrontResourceFetcher<T> {\n const { _swell, _collection } = this;\n\n this._resource = (_swell?.storefront as any)[_collection] as\n | StorefrontResourceFetcher<T>\n | undefined;\n\n if (_swell && _collection.startsWith('content/')) {\n const type = _collection.split('/')[1]?.replace(/\\/$/, '').trim();\n this._resource = {\n list(query?: SwellData) {\n return _swell.storefront.content.list(type, query);\n },\n get(id: string, query?: SwellData) {\n return _swell.storefront.content.get(type, id, query);\n },\n } as StorefrontResourceFetcher<T>;\n }\n\n if (!this._resource?.get) {\n throw new Error(\n `Swell storefront resource for collection '${_collection}' does not exist.`,\n );\n }\n\n return this._resource;\n }\n}\n\nexport class SwellStorefrontCollection<\n T extends SwellData = SwellData,\n> extends SwellStorefrontResource<SwellCollection<T>> {\n public length: number = 0;\n public results?: T[];\n public count?: number;\n public page?: number;\n public pages?: SwellCollectionPages;\n public page_count?: number;\n public limit: number = DEFAULT_QUERY_PAGE_LIMIT;\n public name?: string;\n\n constructor(\n swell: Swell,\n collection: string,\n query: SwellData = {},\n getter?: StorefrontCollectionGetter<T>,\n ) {\n super(\n swell,\n collection,\n getter as StorefrontResourceGetter<SwellCollection<T>>,\n );\n\n this._query = this._initQuery(query);\n\n if (!getter) {\n this._setGetter(this._defaultGetter());\n }\n\n return this._getProxy();\n }\n\n _getProxy(): SwellStorefrontCollection<T> {\n return super._getProxy() as SwellStorefrontCollection<T>;\n }\n\n _initQuery(query: SwellData): SwellData {\n const properQuery = query ? query : {};\n\n if (\n properQuery.limit > MAX_QUERY_PAGE_LIMIT ||\n properQuery.limit === null\n ) {\n properQuery.limit = MAX_QUERY_PAGE_LIMIT; // Max limit vs. 1000 on server\n } else if (!properQuery.limit) {\n properQuery.limit = DEFAULT_QUERY_PAGE_LIMIT;\n }\n\n this.limit = properQuery.limit;\n\n return properQuery;\n }\n\n _defaultGetter(): StorefrontResourceGetter<SwellCollection<T>> {\n const resource = this._getResourceObject();\n\n async function defaultGetter(\n this: SwellStorefrontResource<SwellCollection<T>>,\n ) {\n return resource.list(this._query);\n }\n\n return defaultGetter as StorefrontResourceGetter<SwellCollection<T>>;\n }\n\n async _get(\n query: SwellData = {},\n ): Promise<SwellCollection<T> | null | undefined> {\n const { currency, locale } = this._swell.getStorefrontLocalization();\n\n this._query = {\n ...this._query,\n ...query,\n $currency: currency,\n $locale: locale,\n };\n\n if (this._getter) {\n const getter = this._getter.bind(this);\n\n this._result = this._swell\n .getCachedResource(\n 'storefront-list',\n [\n this._collection,\n this._query,\n this._swell.queryParams, // TODO: consider to exlcude\n this._getterHash,\n ],\n getter,\n isResourceCacheble(this._collection),\n )\n .then((result?: SwellCollection<T> | null) => {\n this._result = result ?? null;\n\n if (result) {\n Object.assign(this, result, {\n length: result.results?.length || 0,\n });\n }\n\n return result;\n })\n .catch((err) => {\n this._result = null;\n logger.error(err);\n return null;\n }) as unknown as SwellCollection<T>;\n }\n\n return this._result;\n }\n\n get size(): Promise<number> | number {\n if (this._result !== undefined) {\n return this.length;\n }\n\n return this._resolve().then(() => this.length);\n }\n\n [Symbol.iterator]() {\n return this.iterator();\n }\n\n iterator() {\n if (this._result !== undefined) {\n return this.makeIterator();\n }\n\n return this._resolve().then(() => this.makeIterator());\n }\n\n private async makeIterator() {\n if (isLikePromise(this.results)) {\n await this.results;\n }\n\n return (this.results || []).values();\n }\n\n _clone(newProps?: SwellData): SwellStorefrontCollection<T> {\n const cloned = new SwellStorefrontCollection<T>(\n this._swell,\n this._collection,\n this._query,\n this._getter,\n );\n\n if (this._isResultResolved()) {\n cloned._result = cloneDeep(this._result);\n }\n\n if (this._compatibilityProps) {\n cloned.setCompatibilityProps(this._compatibilityProps);\n }\n\n if (newProps !== undefined) {\n Object.assign(cloned, newProps);\n\n if (newProps._getter) {\n cloned._setGetter(newProps._getter);\n }\n }\n\n return cloned;\n }\n\n _cloneWithCompatibilityResult<R extends SwellData = SwellData>(\n compatibilityGetter: (result: SwellCollection<T>) => SwellCollection<R>,\n ): SwellStorefrontCollection<R> {\n const originalGetter = this._getter;\n\n const cloned = this._clone({\n _getter: async () => {\n const result = await originalGetter?.call(cloned);\n\n if (result) {\n const compatibilityProps = compatibilityGetter(result);\n return {\n ...result,\n ...(compatibilityProps || undefined),\n };\n }\n\n return result;\n },\n });\n\n // Assign compatibility props on existing result if already resolved\n if (this._isResultResolved()) {\n const result = cloneDeep(this._result);\n if (result) {\n const compatibilityProps = compatibilityGetter(result);\n\n Object.assign(cloned, result);\n\n if (compatibilityProps) {\n Object.assign(cloned, compatibilityProps);\n }\n }\n }\n\n return cloned as unknown as SwellStorefrontCollection<R>;\n }\n}\n\nexport class SwellStorefrontRecord<\n T extends SwellData = SwellRecord,\n> extends SwellStorefrontResource<T> {\n public _id: string;\n public _params: SwellData;\n\n constructor(\n swell: Swell,\n collection: string,\n id: string,\n query: SwellData = {},\n getter?: StorefrontRecordGetter<T>,\n ) {\n super(swell, collection, getter as StorefrontResourceGetter<T>);\n\n this._id = id;\n this._query = query;\n this._params = {};\n\n if (!getter) {\n this._setGetter(this._defaultGetter());\n }\n\n return this._getProxy();\n }\n\n _getProxy(): SwellStorefrontRecord<T> {\n return super._getProxy() as SwellStorefrontRecord<T>;\n }\n\n _defaultGetter(): StorefrontResourceGetter<T> {\n const resource = this._getResourceObject();\n\n async function defaultGetter(this: SwellStorefrontRecord<T>) {\n return resource.get(this._id, this._query);\n }\n\n return defaultGetter as StorefrontResourceGetter<T>;\n }\n\n async _get(id: string, query: SwellData = {}): Promise<T | null | undefined> {\n this._id = id || this._id;\n\n const { currency, locale } = this._swell.getStorefrontLocalization();\n\n this._query = {\n ...this._query,\n ...query,\n $currency: currency,\n $locale: locale,\n };\n\n if (this._getter) {\n const getter = this._getter.bind(this);\n\n this._result = this._swell\n .getCachedResource(\n 'storefront-record',\n [\n this._collection,\n this._id,\n this._query,\n this._swell.queryParams, // TODO: consider to exlcude\n this._getterHash,\n ],\n getter,\n isResourceCacheble(this._collection),\n )\n .then((result?: T | null) => {\n this._result = result;\n\n if (result) {\n Object.assign(this, result);\n }\n\n return result;\n })\n .catch((err: unknown) => {\n logger.error(err);\n return null;\n }) as unknown as T;\n }\n\n return this._result;\n }\n}\n\nexport class SwellStorefrontSingleton<\n T extends SwellData = SwellData,\n> extends SwellStorefrontResource<T> {\n constructor(\n swell: Swell,\n collection: string,\n getter?: StorefrontSingletonGetter<T>,\n ) {\n super(swell, collection, getter as StorefrontResourceGetter<T>);\n\n if (!getter) {\n this._setGetter(this._defaultGetter());\n }\n\n return this._getProxy();\n }\n\n _getProxy(): SwellStorefrontSingleton<T> {\n return super._getProxy() as SwellStorefrontSingleton<T>;\n }\n\n _defaultGetter(): StorefrontResourceGetter<T> {\n const {\n _collection,\n _swell: { storefrontContext },\n } = this;\n\n const resource = this._getResourceObject();\n\n async function defaultGetter(this: SwellStorefrontSingleton<T>) {\n // Try and fetch from context first\n if (storefrontContext[_collection] !== undefined) {\n return storefrontContext[_collection];\n }\n\n // Otherwise fetch from source (Storefront API)\n return resource.get();\n }\n\n return defaultGetter as StorefrontResourceGetter<T>;\n }\n\n async _get() {\n if (this._getter) {\n const trace = createTraceId();\n logger.debug('[SDK] Resource fetch start', {\n resource: this.constructor.name,\n hash: this._getterHash,\n trace,\n });\n\n const getter = this._getter.bind(this);\n\n this._result = Promise.resolve()\n .then(getter)\n .then((result?: T | null) => {\n logger.debug('[SDK] Resource fetch end', {\n hash: this._getterHash,\n trace,\n });\n this._result = result;\n\n if (result) {\n Object.assign(this, result);\n }\n\n return result;\n })\n .catch((err: unknown) => {\n logger.error(err, { trace });\n return null;\n }) as unknown as T;\n }\n\n return this._result;\n }\n}\n\nexport class SwellStorefrontPagination<T extends SwellData = SwellData> {\n public _resource: SwellStorefrontCollection<T>;\n\n public count = 0;\n public page = 0;\n public page_count = 0;\n public limit = 0;\n public pages: Record<string, { start: number; end: number; url: string }> =\n {};\n public next?: { start: number; end: number; url: string };\n public previous?: { start: number; end: number; url: string };\n\n constructor(resource: SwellStorefrontCollection<T>) {\n this._resource = resource;\n this.setPaginationProps();\n }\n\n setPaginationProps(): void {\n const { _resource } = this;\n\n this.count = _resource.count || 0;\n this.page = _resource.page || 0;\n this.page_count = _resource.page_count || 0;\n this.limit = _resource.limit || 0;\n\n this.pages = {};\n if (_resource.pages) {\n for (const [page, props] of Object.entries(_resource.pages)) {\n this.pages[page] = {\n start: props.start,\n end: props.end,\n url: this.getPageUrl(Number(page)),\n };\n }\n }\n\n const nextPage = this.pages[this.page + 1];\n this.next = nextPage\n ? {\n start: nextPage.start,\n end: nextPage.end,\n url: this.getPageUrl(this.page + 1),\n }\n : undefined;\n\n const prevPage = this.pages[this.page - 1];\n this.previous = prevPage\n ? {\n start: prevPage.start,\n end: prevPage.end,\n url: this.getPageUrl(this.page - 1),\n }\n : undefined;\n }\n\n getPageUrl(page: number): string {\n const { url, queryParams } = this._resource._swell;\n return `${url.pathname}?${stringifyQueryParams({\n ...queryParams,\n page,\n })}`;\n }\n\n setCompatibilityProps(props: SwellData): void {\n Object.assign(this, props);\n }\n}\n", "import { Context, Drop } from 'liquidjs';\n\nimport { StorefrontResource, SwellStorefrontCollection } from '../resources';\nimport { DeferredShopifyResource } from '@/compatibility/shopify-objects/resource';\n\n// Note: has to refactor this to use class props instead of methods for some reason\n// The class methods weren't working in our implementation\nexport class ForloopDrop extends Drop {\n public i: number;\n public length: number;\n public name: string;\n public test: string = 'test';\n public index: number;\n public index0: number;\n public first: boolean;\n public last: boolean;\n public rindex: number;\n public rindex0: number;\n public parentloop: ForloopDrop | null;\n\n constructor(\n length: number,\n collection: string,\n variable: string,\n parent?: ForloopDrop,\n ) {\n super();\n\n this.length = length;\n this.name = `${variable}-${collection}`;\n this.i = 0;\n this.index = 1;\n this.index0 = 0;\n this.first = true;\n this.last = length <= 0;\n this.rindex = length;\n this.rindex0 = length - 1;\n this.parentloop = parent ?? null;\n }\n\n next(): void {\n this.i += 1;\n this.index += 1;\n this.index0 += 1;\n this.first = false;\n this.last = this.i === this.length - 1;\n this.rindex -= 1;\n this.rindex0 -= 1;\n }\n\n valueOf(): string {\n return JSON.stringify(this);\n }\n}\n\nexport function toValue(value: unknown) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n return value instanceof Drop && isFunction(value.valueOf)\n ? value.valueOf()\n : value;\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n\nexport function isFunction(\n value: unknown,\n): value is (...args: unknown[]) => unknown {\n return typeof value === 'function';\n}\n\nexport function toLiquid(value: unknown) {\n if (isObject(value) && isFunction(value.toLiquid)) {\n return toLiquid(value.toLiquid());\n }\n\n return value;\n}\n\nexport function isNil(value: unknown): value is undefined | null {\n return value == null;\n}\n\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined;\n}\n\nexport function isArray<T>(value: unknown): value is Array<T> {\n // be compatible with IE 8\n return Object.prototype.toString.call(value) === '[object Array]';\n}\n\nexport function isObject(value: unknown): value is Record<string, unknown> {\n switch (typeof value) {\n case 'object':\n case 'function':\n return value !== null;\n\n default:\n return false;\n }\n}\n\nexport function isIterable<T>(value: unknown): value is Iterable<T> {\n return isObject(value) && Symbol.iterator in value;\n}\n\nexport function isLikePromise(value: unknown): value is Promise<unknown> {\n return isObject(value) && typeof value.then === 'function';\n}\n\nexport function isTruthy(val: unknown, ctx: Context): boolean {\n return !isFalsy(val, ctx);\n}\n\nexport function isFalsy(val: unknown, ctx: Context): boolean {\n if (ctx.opts.jsTruthy) {\n return !val;\n } else {\n return val === false || undefined === val || val === null;\n }\n}\n\nexport interface Comparable {\n equals(rhs: unknown): boolean;\n gt(rhs: unknown): boolean;\n geq(rhs: unknown): boolean;\n lt(rhs: unknown): boolean;\n leq(rhs: unknown): boolean;\n}\n\nexport function isComparable(arg: unknown): arg is Comparable {\n return isObject(arg) && isFunction(arg.equals);\n}\n\nexport function toArray<T>(val: unknown): T[] {\n if (isNil(val)) return [];\n if (isArray<T>(val)) return val;\n return [val as T];\n}\n\nexport function toEnumerable<T>(val: unknown): T[] {\n val = toValue(val);\n if (isArray<T>(val)) return val;\n if (isString(val) && val.length > 0) return [val as T];\n if (isIterable<T>(val)) return Array.from(val);\n if (isObject(val)) {\n // Converting keyed objects to an array with id is required for Shopify compatibility\n return Object.entries(val).reduce<T[]>((acc, [key, value]) => {\n acc.push({ id: key, ...(value as T) });\n return acc;\n }, []); //map((key) => [key, val[key]]);\n }\n return [];\n}\n\nexport async function resolveEnumerable<T>(val: unknown): Promise<T[]> {\n if (val instanceof SwellStorefrontCollection) {\n const iterator = await val.iterator();\n return [...iterator] as T[];\n } else if (val instanceof Drop && Symbol.iterator in val) {\n const iterFn = val[Symbol.iterator];\n\n if (typeof iterFn === 'function') {\n const iter = (await iterFn.call(val)) as ArrayIterator<T>;\n return [...iter] as T[];\n }\n }\n\n if (!Array.isArray(val)) {\n return toEnumerable(val);\n }\n\n return val as T[];\n}\n\nexport function stringify(value: unknown): string {\n value = toValue(value);\n if (isString(value)) return value;\n if (isNil(value)) return '';\n if (isArray(value)) return value.map((x) => stringify(x)).join('');\n return String(value);\n}\n\nexport function paramsToProps(\n params: (string | [string, unknown])[] | Record<string, string>,\n): Record<string, unknown> {\n // Convert array formatted params to props object\n if (Array.isArray(params)) {\n return params.reduce((acc: Record<string, unknown>, param, index) => {\n if (Array.isArray(param)) {\n const [key, value] = param;\n\n acc[key] = value;\n } else if (index % 2 === 0) {\n acc[param] = params[index + 1];\n }\n return acc;\n }, {});\n } else if (isObject(params)) {\n // Convert object formatted params with number indexes to props object\n const props: Record<string, unknown> = {};\n const values = Object.values(params);\n for (let i = 0; i < values.length; i += 2) {\n props[values[i]] = values[i + 1];\n }\n return props;\n }\n return {};\n}\n\nexport async function jsonStringifyAsync(\n input: unknown,\n space = 0,\n): Promise<string> {\n let value = input;\n\n if (value instanceof StorefrontResource) {\n value = await value.resolve();\n }\n\n if (typeof value === 'undefined') {\n value = null;\n } else {\n await resolveAllKeys(value);\n }\n\n // Catch circular references, for example StorefrontResource\n const references = new WeakSet();\n\n return JSON.stringify(\n value,\n (_key: string, value: unknown) => {\n if (isObject(value)) {\n if (references.has(value)) {\n // Ignore circular reference\n return;\n }\n\n references.add(value);\n }\n\n return value;\n },\n space,\n );\n}\n\nexport async function resolveAllKeys(\n value: unknown,\n references: WeakSet<object> = new WeakSet(),\n) {\n await forEachKeyDeep(value as Record<string, unknown>, async (key, value) => {\n if (!isObject(value)) {\n return true;\n }\n const val = value[key];\n if (isLikePromise(val)) {\n value[key] = await val;\n await resolveAllKeys(value[key], references);\n } else if (isObject(val)) {\n if (val instanceof DeferredShopifyResource) {\n value[key] = await val.resolve();\n await resolveAllKeys(value[key], references);\n return true;\n }\n\n if (references.has(val)) {\n // Ignore circular reference\n return false;\n }\n\n references.add(val);\n }\n\n return true;\n });\n}\n\nasync function forEachKeyDeep(\n obj: Record<string, unknown>,\n fn: (key: string, value: Record<string, unknown>) => Promise<boolean>,\n) {\n if (!isObject(obj)) {\n return;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const result = await fn(key, obj);\n\n if (result !== false) {\n if (isObject(value)) {\n await forEachKeyDeep(value, fn);\n }\n }\n }\n}\n", "import { cloneDeep, noop } from 'lodash-es';\n\nimport { isLikePromise, isObject } from '@/liquid/utils';\n\nimport type { StorefrontResource } from '@/resources';\nimport type { SwellData } from 'types/swell';\n\ntype DeferShopifyResource<T extends object> = {\n [K in keyof T]: NonNullable<T[K]> extends Array<infer U>\n ? U extends object\n ?\n | U[]\n | ShopifyResource<U>[]\n | DeferredShopifyResource<U[] | ShopifyResource<U>[]>\n : U[] | DeferredShopifyResource<U[]>\n : NonNullable<T[K]> extends object\n ?\n | T[K]\n | ShopifyResource<NonNullable<T[K]>>\n | DeferredShopifyResource<T[K] | ShopifyResource<NonNullable<T[K]>>>\n : T[K] | DeferredShopifyResource<T[K]>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class ShopifyResource<T extends object> {\n props: DeferShopifyResource<T>;\n stringProp?: keyof T;\n linkProps?: string[];\n\n constructor(\n props: DeferShopifyResource<T>,\n stringProp?: keyof T,\n linkProps?: string[],\n ) {\n this.props = props;\n this.stringProp = stringProp;\n this.linkProps = linkProps;\n\n return new Proxy<DeferShopifyResource<T>>(props, {\n get(target, prop, receiver) {\n const instance = target;\n\n switch (prop) {\n case 'toJSON':\n return () => {\n function serialize(value: any): any {\n if (value && typeof value.toJSON === 'function') {\n return value.toJSON();\n }\n\n if (Array.isArray(value)) {\n return value.map(serialize);\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [k, serialize(v)]),\n );\n }\n\n return value;\n }\n\n return serialize(props);\n };\n\n case 'clone':\n return () => {\n return new ShopifyResource(\n cloneDeep(props),\n cloneDeep(stringProp),\n cloneDeep(linkProps),\n );\n };\n\n case 'toString': {\n if (stringProp) {\n return () => {\n return props[stringProp];\n };\n }\n\n break;\n }\n\n case Symbol.toPrimitive: {\n return () => {\n let prop: string | symbol | number | undefined = stringProp;\n\n if (typeof prop === 'number') {\n prop = prop.toString();\n }\n\n return this.get?.(instance, prop || 'handle', receiver);\n };\n }\n\n default:\n break;\n }\n\n const value = instance[prop as keyof T];\n\n if (value instanceof DeferredShopifyResource) {\n const promise = value.resolve().then(\n (value: T[keyof T]) => {\n (instance as T)[prop as keyof T] = value;\n return value;\n },\n (err: unknown) => {\n console.log(err);\n (instance as T)[prop as keyof T] = null as T[keyof T];\n return null;\n },\n );\n\n (instance as T)[prop as keyof T] = promise as T[keyof T];\n\n return promise;\n }\n\n return value;\n },\n\n getPrototypeOf() {\n return ShopifyResource.prototype;\n },\n }) as ShopifyResource<T> & T;\n }\n\n valueOf() {\n if (this.stringProp) {\n return this.props[this.stringProp];\n }\n return this;\n }\n\n // For typescript\n clone(): ShopifyResource<T> {\n return new ShopifyResource<T>(this.props);\n }\n}\n\ntype AddProperties<T extends object> = T;\n\n// @ts-expect-error: ShopifyResource extends generic with same type\nexport interface ShopifyResource<T extends object> extends AddProperties<T> {}\n\nexport class DeferredShopifyResource<T> {\n private handler: () => Promise<T> | T;\n private result: Promise<T> | T | undefined;\n\n constructor(handler: () => Promise<T> | T) {\n this.result = undefined;\n this.handler = handler;\n }\n\n async resolve() {\n if (this.handler !== noop) {\n const handler = this.handler;\n // Reset handler as it will no longer be used (free memory)\n this.handler = noop as () => Promise<T> | T;\n\n this.result = Promise.resolve()\n .then(handler)\n .then((value) => {\n this.result = value;\n return value;\n });\n }\n\n return this.result;\n }\n}\n\nexport function defer<T>(\n handler: () => Promise<T> | T,\n): DeferredShopifyResource<T> {\n return new DeferredShopifyResource<T>(handler);\n}\n\nexport function isResolvable(asyncProp: unknown): boolean {\n return (\n isObject(asyncProp) &&\n (isLikePromise(asyncProp) || typeof asyncProp._resolve === 'function')\n );\n}\n\nfunction isStorefrontResource<T extends SwellData>(\n resource: unknown,\n): resource is StorefrontResource<T> {\n return isObject(resource) && typeof resource._resolve === 'function';\n}\n\nexport async function resolveAsyncProp<R extends SwellData>(\n asyncProp: unknown,\n): Promise<R | R[] | null | undefined> {\n if (Array.isArray(asyncProp)) {\n return Promise.all<R[]>(\n asyncProp.map((prop) =>\n isStorefrontResource<R>(prop) ? prop._resolve() : prop,\n ),\n );\n }\n\n if (isStorefrontResource<R>(asyncProp)) {\n return asyncProp._resolve();\n }\n\n return asyncProp as R;\n}\n\nexport function handleDeferredProp<T, R extends SwellData>(\n asyncProp: unknown,\n handler: (...value: R[]) => T,\n): Promise<T> {\n return resolveAsyncProp<R>(asyncProp)\n .then((value) => {\n if (Array.isArray(asyncProp) && Array.isArray(value)) {\n return handler(...value.map((prop) => prop || {}));\n }\n\n if (isResolvable(value)) {\n return handleDeferredProp<T, R>(value, handler);\n }\n\n return handler((value || {}) as R);\n })\n .catch((err) => {\n console.log(err);\n return null as T;\n });\n}\n\nexport function deferWith<T, R extends SwellData = SwellData>(\n asyncProp: unknown,\n handler: (...value: R[]) => T,\n): DeferredShopifyResource<T> {\n return new DeferredShopifyResource<T>(() =>\n handleDeferredProp(asyncProp, handler),\n );\n}\n", "import type { SwellData, SwellSettingsGeo } from 'types/swell';\n\nexport const FILE_DATA_INCLUDE_QUERY: SwellData = {\n url: '/:themes:configs/{id}/file/data',\n conditions: {\n // Only expand theme files\n // Do not expand non-text data\n file: {\n $or: [\n {\n $and: [\n { content_type: { $regex: '^(?!image)' } },\n { content_type: { $regex: '^(?!video)' } },\n ],\n },\n { content_type: { $regex: '^image/(svg|png|jpeg)' } },\n ],\n },\n // Do not return assets unless they end with .liquid or css/js/svg/png/jpg\n $or: [\n { file_path: { $regex: '^(?!theme/assets/)' } },\n { file_path: { $regex: '.liquid$' } },\n { file_path: { $regex: '.(css|js|svg|png|jpg)$' } },\n ],\n },\n};\n\nexport const GEO_DATA: SwellSettingsGeo = {\n countries: [\n { id: 'US', name: 'United States', state_label: 'State' },\n { id: 'CA', name: 'Canada', state_label: 'Province' },\n { id: 'AU', name: 'Australia', state_label: 'State/territory' },\n { id: 'GB', name: 'United Kingdom' },\n { id: 'AF', name: 'Afghanistan' },\n { id: 'AX', name: 'Aland Islands' },\n { id: 'AL', name: 'Albania' },\n { id: 'DZ', name: 'Algeria', state_label: 'Province' },\n { id: 'AD', name: 'Andorra' },\n { id: 'AO', name: 'Angola' },\n { id: 'AI', name: 'Anguilla' },\n { id: 'AG', name: 'Antigua And Barbuda' },\n { id: 'AR', name: 'Argentina' },\n { id: 'AM', name: 'Armenia' },\n { id: 'AW', name: 'Aruba' },\n { id: 'AT', name: 'Austria' },\n { id: 'AZ', name: 'Azerbaijan' },\n { id: 'BS', name: 'Bahamas' },\n { id: 'BH', name: 'Bahrain' },\n { id: 'BD', name: 'Bangladesh' },\n { id: 'BB', name: 'Barbados' },\n { id: 'BY', name: 'Belarus' },\n { id: 'BE', name: 'Belgium' },\n { id: 'BZ', name: 'Belize' },\n { id: 'BJ', name: 'Benin' },\n { id: 'BM', name: 'Bermuda' },\n { id: 'BT', name: 'Bhutan' },\n { id: 'BO', name: 'Bolivia' },\n { id: 'BA', name: 'Bosnia And Herzegovina' },\n { id: 'BW', name: 'Botswana' },\n { id: 'BV', name: 'Bouvet Island' },\n { id: 'BR', name: 'Brazil', state_label: 'State' },\n { id: 'IO', name: 'British Indian Ocean Territory' },\n { id: 'BN', name: 'Brunei' },\n { id: 'BG', name: 'Bulgaria' },\n { id: 'BF', name: 'Burkina Faso' },\n { id: 'BU', name: 'Burma' },\n { id: 'BI', name: 'Burundi' },\n { id: 'KH', name: 'Cambodia' },\n { id: 'CM', name: 'Cameroon' },\n { id: 'CV', name: 'Cape Verde' },\n { id: 'KY', name: 'Cayman Islands' },\n { id: 'CF', name: 'Central African Republic' },\n { id: 'TD', name: 'Chad' },\n { id: 'CL', name: 'Chile' },\n { id: 'CN', name: 'China' },\n { id: 'CX', name: 'Christmas Island' },\n { id: 'CC', name: 'Cocos (Keeling) Islands' },\n { id: 'CO', name: 'Colombia' },\n { id: 'KM', name: 'Comoros' },\n { id: 'CG', name: 'Congo' },\n { id: 'CD', name: 'Congo, The Democratic Republic Of The' },\n { id: 'CK', name: 'Cook Islands' },\n { id: 'CR', name: 'Costa Rica' },\n { id: 'CI', name: \"Cote D'Ivoire\" },\n { id: 'HR', name: 'Croatia' },\n { id: 'CU', name: 'Cuba' },\n { id: 'CY', name: 'Cyprus' },\n { id: 'CZ', name: 'Czech Republic' },\n { id: 'DK', name: 'Denmark' },\n { id: 'DJ', name: 'Djibouti' },\n { id: 'DM', name: 'Dominica' },\n { id: 'DO', name: 'Dominican Republic' },\n { id: 'EC', name: 'Ecuador' },\n { id: 'EG', name: 'Egypt' },\n { id: 'SV', name: 'El Salvador' },\n { id: 'GQ', name: 'Equatorial Guinea' },\n { id: 'ER', name: 'Eritrea' },\n { id: 'EE', name: 'Estonia' },\n { id: 'ET', name: 'Ethiopia' },\n { id: 'FK', name: 'Falkland Islands (Malvinas)' },\n { id: 'FO', name: 'Faroe Islands' },\n { id: 'FJ', name: 'Fiji' },\n { id: 'FI', name: 'Finland' },\n { id: 'FR', name: 'France' },\n { id: 'GF', name: 'French Guiana' },\n { id: 'PF', name: 'French Polynesia' },\n { id: 'TF', name: 'French Southern Territories' },\n { id: 'GA', name: 'Gabon' },\n { id: 'GM', name: 'Gambia' },\n { id: 'GE', name: 'Georgia' },\n { id: 'DE', name: 'Germany' },\n { id: 'GH', name: 'Ghana' },\n { id: 'GI', name: 'Gibraltar' },\n { id: 'GR', name: 'Greece' },\n { id: 'GL', name: 'Greenland' },\n { id: 'GD', name: 'Grenada' },\n { id: 'GP', name: 'Guadeloupe' },\n { id: 'GT', name: 'Guatemala', state_label: 'Department' },\n { id: 'GG', name: 'Guernsey' },\n { id: 'GN', name: 'Guinea' },\n { id: 'GW', name: 'Guinea Bissau' },\n { id: 'GY', name: 'Guyana' },\n { id: 'HT', name: 'Haiti' },\n { id: 'HM', name: 'Heard Island And Mcdonald Islands' },\n { id: 'VA', name: 'Holy See (Vatican City State)' },\n { id: 'HN', name: 'Honduras' },\n { id: 'HK', name: 'Hong Kong' },\n { id: 'HU', name: 'Hungary' },\n { id: 'IS', name: 'Iceland' },\n { id: 'IN', name: 'India', state_label: 'State' },\n { id: 'ID', name: 'Indonesia' },\n { id: 'IR', name: 'Iran, Islamic Republic Of' },\n { id: 'IQ', name: 'Iraq' },\n { id: 'IE', name: 'Ireland' },\n { id: 'IM', name: 'Isle Of Man' },\n { id: 'IL', name: 'Israel' },\n { id: 'IT', name: 'Italy' },\n { id: 'JM', name: 'Jamaica' },\n { id: 'JP', name: 'Japan' },\n { id: 'JE', name: 'Jersey' },\n { id: 'JO', name: 'Jordan' },\n { id: 'KZ', name: 'Kazakhstan' },\n { id: 'KE', name: 'Kenya' },\n { id: 'KI', name: 'Kiribati' },\n { id: 'KP', name: 'Korea, North' },\n { id: 'KR', name: 'Korea, South' },\n { id: 'KW', name: 'Kuwait' },\n { id: 'KG', name: 'Kyrgyzstan' },\n { id: 'LA', name: 'Laos' },\n { id: 'LV', name: 'Latvia' },\n { id: 'LB', name: 'Lebanon' },\n { id: 'LS', name: 'Lesotho' },\n { id: 'LR', name: 'Liberia' },\n { id: 'LY', name: 'Libya' },\n { id: 'LI', name: 'Liechtenstein' },\n { id: 'LT', name: 'Lithuania' },\n { id: 'LU', name: 'Luxembourg' },\n { id: 'MO', name: 'Macao' },\n { id: 'MK', name: 'Macedonia' },\n { id: 'MG', name: 'Madagascar' },\n { id: 'MW', name: 'Malawi' },\n { id: 'MY', name: 'Malaysia', state_label: 'State/territory' },\n { id: 'MV', name: 'Maldives' },\n { id: 'ML', name: 'Mali' },\n { id: 'MT', name: 'Malta' },\n { id: 'MQ', name: 'Martinique' },\n { id: 'MR', name: 'Mauritania' },\n { id: 'MU', name: 'Mauritius' },\n { id: 'YT', name: 'Mayotte' },\n { id: 'MX', name: 'Mexico', state_label: 'State' },\n { id: 'MD', name: 'Moldova' },\n { id: 'MC', name: 'Monaco' },\n { id: 'MN', name: 'Mongolia' },\n { id: 'ME', name: 'Montenegro' },\n { id: 'MS', name: 'Montserrat' },\n { id: 'MA', name: 'Morocco' },\n { id: 'MZ', name: 'Mozambique' },\n { id: 'MM', name: 'Myanmar' },\n { id: 'NA', name: 'Namibia' },\n { id: 'NR', name: 'Nauru' },\n { id: 'NP', name: 'Nepal' },\n { id: 'NL', name: 'Netherlands' },\n { id: 'AN', name: 'Netherlands Antilles' },\n { id: 'NC', name: 'New Caledonia' },\n { id: 'NZ', name: 'New Zealand', state_label: 'Region' },\n { id: 'NI', name: 'Nicaragua' },\n { id: 'NE', name: 'Niger' },\n { id: 'NG', name: 'Nigeria' },\n { id: 'NU', name: 'Niue' },\n { id: 'NF', name: 'Norfolk Island' },\n { id: 'NO', name: 'Norway' },\n { id: 'OM', name: 'Oman' },\n { id: 'PK', name: 'Pakistan' },\n { id: 'PS', name: 'Palestinian Territory, Occupied' },\n { id: 'PA', name: 'Panama' },\n { id: 'PG', name: 'Papua New Guinea' },\n { id: 'PY', name: 'Paraguay' },\n { id: 'PE', name: 'Peru' },\n { id: 'PH', name: 'Philippines', state_label: 'Region' },\n { id: 'PN', name: 'Pitcairn' },\n { id: 'PL', name: 'Poland' },\n { id: 'PT', name: 'Portugal' },\n { id: 'QA', name: 'Qatar' },\n { id: 'RE', name: 'Reunion' },\n { id: 'RO', name: 'Romania' },\n { id: 'RU', name: 'Russia' },\n { id: 'RW', name: 'Rwanda' },\n { id: 'BL', name: 'Saint Barthelemy' },\n { id: 'SH', name: 'Saint Helena' },\n { id: 'KN', name: 'Saint Kitts And Nevis' },\n { id: 'LC', name: 'Saint Lucia' },\n { id: 'MF', name: 'Saint Martin' },\n { id: 'PM', name: 'Saint Pierre And Miquelon' },\n { id: 'VC', name: 'Saint Vincent' },\n { id: 'WS', name: 'Samoa' },\n { id: 'SM', name: 'San Marino' },\n { id: 'ST', name: 'Sao Tome And Principe' },\n { id: 'SA', name: 'Saudi Arabia' },\n { id: 'SN', name: 'Senegal' },\n { id: 'RS', name: 'Serbia' },\n { id: 'SC', name: 'Seychelles' },\n { id: 'SL', name: 'Sierra Leone' },\n { id: 'SG', name: 'Singapore' },\n { id: 'SK', name: 'Slovakia' },\n { id: 'SI', name: 'Slovenia' },\n { id: 'SB', name: 'Solomon Islands' },\n { id: 'SO', name: 'Somalia' },\n { id: 'ZA', name: 'South Africa' },\n { id: 'GS', name: 'South Georgia And The South Sandwich Islands' },\n { id: 'ES', name: 'Spain', state_label: 'Province' },\n { id: 'LK', name: 'Sri Lanka' },\n { id: 'SD', name: 'Sudan' },\n { id: 'SR', name: 'Suriname' },\n { id: 'SJ', name: 'Svalbard And Jan Mayen' },\n { id: 'SZ', name: 'Swaziland' },\n { id: 'SE', name: 'Sweden' },\n { id: 'CH', name: 'Switzerland' },\n { id: 'SY', name: 'Syria' },\n { id: 'TW', name: 'Taiwan' },\n { id: 'TJ', name: 'Tajikistan' },\n { id: 'TZ', name: 'Tanzania' },\n { id: 'TH', name: 'Thailand' },\n { id: 'TL', name: 'Timor-Leste' },\n { id: 'TG', name: 'Togo' },\n { id: 'TK', name: 'Tokelau' },\n { id: 'TO', name: 'Tonga' },\n { id: 'TT', name: 'Trinidad and Tobago' },\n { id: 'TN', name: 'Tunisia' },\n { id: 'TR', name: 'Turkey' },\n { id: 'TM', name: 'Turkmenistan' },\n { id: 'TC', name: 'Turks And Caicos Islands' },\n { id: 'TV', name: 'Tuvalu' },\n { id: 'UG', name: 'Uganda' },\n { id: 'UA', name: 'Ukraine' },\n { id: 'AE', name: 'United Arab Emirates', state_label: 'Emirate' },\n { id: 'UM', name: 'United States Minor Outlying Islands' },\n { id: 'UY', name: 'Uruguay' },\n { id: 'UZ', name: 'Uzbekistan' },\n { id: 'VU', name: 'Vanuatu' },\n { id: 'VE', name: 'Venezuela' },\n { id: 'VN', name: 'Vietnam' },\n { id: 'VG', name: 'Virgin Islands, British' },\n { id: 'WF', name: 'Wallis And Futuna' },\n { id: 'EH', name: 'Western Sahara' },\n { id: 'YE', name: 'Yemen' },\n { id: 'ZM', name: 'Zambia' },\n { id: 'ZW', name: 'Zimbabwe' },\n ],\n states: [\n { country: 'US', id: 'AL', name: 'Alabama' },\n { country: 'US', id: 'AK', name: 'Alaska' },\n { country: 'US', id: 'AZ', name: 'Arizona' },\n { country: 'US', id: 'AR', name: 'Arkansas' },\n { country: 'US', id: 'CA', name: 'California' },\n { country: 'US', id: 'CO', name: 'Colorado' },\n { country: 'US', id: 'CT', name: 'Connecticut' },\n { country: 'US', id: 'DE', name: 'Delaware' },\n { country: 'US', id: 'DC', name: 'District of Columbia' },\n { country: 'US', id: 'FL', name: 'Florida' },\n { country: 'US', id: 'GA', name: 'Georgia' },\n { country: 'US', id: 'HI', name: 'Hawaii' },\n { country: 'US', id: 'ID', name: 'Idaho' },\n { country: 'US', id: 'IL', name: 'Illinois' },\n { country: 'US', id: 'IN', name: 'Indiana' },\n { country: 'US', id: 'IA', name: 'Iowa' },\n { country: 'US', id: 'KS', name: 'Kansas' },\n { country: 'US', id: 'KY', name: 'Kentucky' },\n { country: 'US', id: 'LA', name: 'Louisiana' },\n { country: 'US', id: 'ME', name: 'Maine' },\n { country: 'US', id: 'MD', name: 'Maryland' },\n { country: 'US', id: 'MA', name: 'Massachusetts' },\n { country: 'US', id: 'MI', name: 'Michigan' },\n { country: 'US', id: 'MN', name: 'Minnesota' },\n { country: 'US', id: 'MS', name: 'Mississippi' },\n { country: 'US', id: 'MO', name: 'Missouri' },\n { country: 'US', id: 'MT', name: 'Montana' },\n { country: 'US', id: 'NE', name: 'Nebraska' },\n { country: 'US', id: 'NV', name: 'Nevada' },\n { country: 'US', id: 'NH', name: 'New Hampshire' },\n { country: 'US', id: 'NJ', name: 'New Jersey' },\n { country: 'US', id: 'NM', name: 'New Mexico' },\n { country: 'US', id: 'NY', name: 'New York' },\n { country: 'US', id: 'NC', name: 'North Carolina' },\n { country: 'US', id: 'ND', name: 'North Dakota' },\n { country: 'US', id: 'OH', name: 'Ohio' },\n { country: 'US', id: 'OK', name: 'Oklahoma' },\n { country: 'US', id: 'OR', name: 'Oregon' },\n { country: 'US', id: 'PA', name: 'Pennsylvania' },\n { country: 'US', id: 'RI', name: 'Rhode Island' },\n { country: 'US', id: 'SC', name: 'South Carolina' },\n { country: 'US', id: 'SD', name: 'South Dakota' },\n { country: 'US', id: 'TN', name: 'Tennessee' },\n { country: 'US', id: 'TX', name: 'Texas' },\n { country: 'US', id: 'UT', name: 'Utah' },\n { country: 'US', id: 'VT', name: 'Vermont' },\n { country: 'US', id: 'VA', name: 'Virginia' },\n { country: 'US', id: 'WA', name: 'Washington' },\n { country: 'US', id: 'WV', name: 'West Virginia' },\n { country: 'US', id: 'WI', name: 'Wisconsin' },\n { country: 'US', id: 'WY', name: 'Wyoming' },\n { country: 'US', id: 'AS', name: 'American Samoa' },\n { country: 'US', id: 'AA', name: 'Armed Forces Americas' },\n { country: 'US', id: 'AE', name: 'Armed Forces Europe' },\n { country: 'US', id: 'AP', name: 'Armed Forces Pacific' },\n { country: 'US', id: 'FM', name: 'Federated States of Micronesia' },\n { country: 'US', id: 'GU', name: 'Guam' },\n { country: 'US', id: 'MH', name: 'Marshall Islands' },\n { country: 'US', id: 'MP', name: 'Northern Mariana Islands' },\n { country: 'US', id: 'PW', name: 'Palau' },\n { country: 'US', id: 'PR', name: 'Puerto Rico' },\n { country: 'US', id: 'VI', name: 'Virgin Islands' },\n { country: 'CA', id: 'AB', name: 'Alberta' },\n { country: 'CA', id: 'BC', name: 'British Columbia' },\n { country: 'CA', id: 'MB', name: 'Manitoba' },\n { country: 'CA', id: 'NB', name: 'New Brunswick' },\n { country: 'CA', id: 'NL', name: 'Newfoundland' },\n { country: 'CA', id: 'NT', name: 'Northwest Territories' },\n { country: 'CA', id: 'NS', name: 'Nova Scotia' },\n { country: 'CA', id: 'NU', name: 'Nunavut' },\n { country: 'CA', id: 'ON', name: 'Ontario' },\n { country: 'CA', id: 'PE', name: 'Prince Edward Island' },\n { country: 'CA', id: 'QC', name: 'Quebec' },\n { country: 'CA', id: 'SK', name: 'Saskatchewan' },\n { country: 'CA', id: 'YT', name: 'Yukon' },\n { country: 'AU', id: 'ACT', name: 'Australian Capital Territory' },\n { country: 'AU', id: 'NSW', name: 'New South Wales' },\n { country: 'AU', id: 'NT', name: 'Northern Territory' },\n { country: 'AU', id: 'QLD', name: 'Queensland' },\n { country: 'AU', id: 'SA', name: 'South Australia' },\n { country: 'AU', id: 'TAS', name: 'Tasmania' },\n { country: 'AU', id: 'VIC', name: 'Victoria' },\n { country: 'AU', id: 'WA', name: 'Western Australia' },\n { country: 'BR', id: 'AC', name: 'Acre' },\n { country: 'BR', id: 'AL', name: 'Alagoas' },\n { country: 'BR', id: 'AP', name: 'Amapa' },\n { country: 'BR', id: 'AM', name: 'Amazonas' },\n { country: 'BR', id: 'BA', name: 'Bahia' },\n { country: 'BR', id: 'CE', name: 'Ceara' },\n { country: 'BR', id: 'BRDF', name: 'Distrito Federal' },\n { country: 'BR', id: 'ES', name: 'Espirito Santo' },\n { country: 'BR', id: 'GO', name: 'Goias;' },\n { country: 'BR', id: 'MA', name: 'Maranhao' },\n { country: 'BR', id: 'MT', name: 'Mato Grosso' },\n { country: 'BR', id: 'MS', name: 'Mato Grosso do Sul' },\n { country: 'BR', id: 'MG', name: 'Minas Gerais' },\n { country: 'BR', id: 'PA', name: 'Para;' },\n { country: 'BR', id: 'PB', name: 'Paraiba' },\n { country: 'BR', id: 'PR', name: 'Parana' },\n { country: 'BR', id: 'PE', name: 'Pernambuco' },\n { country: 'BR', id: 'PI', name: 'Piaui' },\n { country: 'BR', id: 'RJ', name: 'Rio de Janeiro' },\n { country: 'BR', id: 'RN', name: 'Rio Grande do Norte' },\n { country: 'BR', id: 'RS', name: 'Rio Grande do Sul' },\n { country: 'BR', id: 'RO', name: 'Rondonia' },\n { country: 'BR', id: 'RR', name: 'Roraima' },\n { country: 'BR', id: 'SC', name: 'Santa Catarina' },\n { country: 'BR', id: 'SP', name: 'Sao Paulo' },\n { country: 'BR', id: 'SE', name: 'Sergipe' },\n { country: 'BR', id: 'TO', name: 'Tocantins' },\n { country: 'GT', id: 'Alta Verapaz', name: 'Alta Verapaz' },\n { country: 'GT', id: 'Baja Verapaz', name: 'Baja Verapaz' },\n { country: 'GT', id: 'Chimaltenango', name: 'Chimaltenango' },\n { country: 'GT', id: 'Chiquimula', name: 'Chiquimula' },\n { country: 'GT', id: 'El Progreso', name: 'El Progreso' },\n { country: 'GT', id: 'Escuintla', name: 'Escuintla' },\n { country: 'GT', id: 'Guatemala', name: 'Guatemala' },\n { country: 'GT', id: 'Huehuetenango', name: 'Huehuetenango' },\n { country: 'GT', id: 'Izabal', name: 'Izabal' },\n { country: 'GT', id: 'Jalapa', name: 'Jalapa' },\n { country: 'GT', id: 'Jutiapa', name: 'Jutiapa' },\n { country: 'GT', id: 'Peten', name: 'Peten' },\n { country: 'GT', id: 'Quetzaltenango', name: 'Quetzaltenango' },\n { country: 'GT', id: 'Quiche', name: 'Quiche' },\n { country: 'GT', id: 'Retalhuleu', name: 'Retalhuleu' },\n { country: 'GT', id: 'Sacatepequez', name: 'Sacatepequez' },\n { country: 'GT', id: 'San Marcos', name: 'San Marcos' },\n { country: 'GT', id: 'Santa Rosa', name: 'Santa Rosa' },\n { country: 'GT', id: 'Solola', name: 'Solola' },\n { country: 'GT', id: 'Suchitepequez', name: 'Suchitepequez' },\n { country: 'GT', id: 'Totonicapan', name: 'Totonicapan' },\n { country: 'GT', id: 'Zacapa', name: 'Zacapa' },\n { country: 'IN', id: 'AN', name: 'Andaman and Nicobar' },\n { country: 'IN', id: 'AP', name: 'Andhra Pradesh' },\n { country: 'IN', id: 'AR', name: 'Arunachal Pradesh' },\n { country: 'IN', id: 'AS', name: 'Assam' },\n { country: 'IN', id: 'BR', name: 'Bihar' },\n { country: 'IN', id: 'CH', name: 'Chandigarh' },\n { country: 'IN', id: 'CT', name: 'Chattisgarh' },\n { country: 'IN', id: 'DN', name: 'Dadra and Nagar Haveli' },\n { country: 'IN', id: 'DD', name: 'Daman and Diu' },\n { country: 'IN', id: 'DL', name: 'Delhi' },\n { country: 'IN', id: 'GA', name: 'Goa' },\n { country: 'IN', id: 'GJ', name: 'Gujarat' },\n { country: 'IN', id: 'HR', name: 'Haryana' },\n { country: 'IN', id: 'HP', name: 'Himachal Pradesh' },\n { country: 'IN', id: 'JK', name: 'Jammu and Kashmir' },\n { country: 'IN', id: 'JH', name: 'Jharkhand' },\n { country: 'IN', id: 'KA', name: 'Karnataka' },\n { country: 'IN', id: 'KL', name: 'Kerala' },\n { country: 'IN', id: 'LD', name: 'Lakshadweep' },\n { country: 'IN', id: 'MP', name: 'Madhya Pradesh' },\n { country: 'IN', id: 'MH', name: 'Maharashtra' },\n { country: 'IN', id: 'MN', name: 'Manipur' },\n { country: 'IN', id: 'ML', name: 'Meghalaya' },\n { country: 'IN', id: 'MZ', name: 'Mizoram' },\n { country: 'IN', id: 'NL', name: 'Nagaland' },\n { country: 'IN', id: 'OR', name: 'Orissa' },\n { country: 'IN', id: 'PY', name: 'Puducherry' },\n { country: 'IN', id: 'PB', name: 'Punjab' },\n { country: 'IN', id: 'RJ', name: 'Rajasthan' },\n { country: 'IN', id: 'SK', name: 'Sikkim' },\n { country: 'IN', id: 'TN', name: 'Tamil Nadu' },\n { country: 'IN', id: 'TR', name: 'Tripura' },\n { country: 'IN', id: 'UP', name: 'Uttar Pradesh' },\n { country: 'IN', id: 'UT', name: 'Uttarakhand' },\n { country: 'IN', id: 'WB', name: 'West Bengal' },\n { country: 'MY', id: 'JHR', name: 'Johor' },\n { country: 'MY', id: 'KDH', name: 'Kedah' },\n { country: 'MY', id: 'KTN', name: 'Kelantan' },\n { country: 'MY', id: 'KUL', name: 'Kuala Lumpur' },\n { country: 'MY', id: 'LBN', name: 'Labuan' },\n { country: 'MY', id: 'MLK', name: 'Malacca' },\n { country: 'MY', id: 'NSN', name: 'Negeri Sembilan' },\n { country: 'MY', id: 'PHG', name: 'Pahang' },\n { country: 'MY', id: 'PNG', name: 'Penang' },\n { country: 'MY', id: 'PRK', name: 'Perak' },\n { country: 'MY', id: 'PLS', name: 'Perlis' },\n { country: 'MY', id: 'PJY', name: 'Putrajaya' },\n { country: 'MY', id: 'SBH', name: 'Sabah' },\n { country: 'MY', id: 'SRW', name: 'Sarawak' },\n { country: 'MY', id: 'SGR', name: 'Selangor' },\n { country: 'MY', id: 'TRG', name: 'Terengganu' },\n { country: 'MX', id: 'AG', name: 'Aguascalientes' },\n { country: 'MX', id: 'BJ', name: 'Baja California' },\n { country: 'MX', id: 'BS', name: 'Baja California Sur' },\n { country: 'MX', id: 'CI', name: 'Chihuahua' },\n { country: 'MX', id: 'CL', name: 'Colima' },\n { country: 'MX', id: 'CP', name: 'Campeche' },\n { country: 'MX', id: 'CU', name: 'Coahuila' },\n { country: 'MX', id: 'CH', name: 'Chiapas' },\n { country: 'MX', id: 'DF', name: 'Distrito Federal' },\n { country: 'MX', id: 'DG', name: 'Durango' },\n { country: 'MX', id: 'GR', name: 'Guerrero' },\n { country: 'MX', id: 'GJ', name: 'Guanajuato' },\n { country: 'MX', id: 'HG', name: 'Hidalgo' },\n { country: 'MX', id: 'JA', name: 'Jalisco' },\n { country: 'MX', id: 'MH', name: 'Michoacan' },\n { country: 'MX', id: 'MR', name: 'Morelos' },\n { country: 'MX', id: 'EM', name: 'Mexico' },\n { country: 'MX', id: 'NA', name: 'Nayarit' },\n { country: 'MX', id: 'NL', name: 'Nuevo Leon' },\n { country: 'MX', id: 'OA', name: 'Oaxaca' },\n { country: 'MX', id: 'PU', name: 'Puebla' },\n { country: 'MX', id: 'QR', name: 'Quintana Roo' },\n { country: 'MX', id: 'QA', name: 'Queretaro' },\n { country: 'MX', id: 'SI', name: 'Sinaloa' },\n { country: 'MX', id: 'SL', name: 'San Luis Potosi' },\n { country: 'MX', id: 'SO', name: 'Sonora' },\n { country: 'MX', id: 'TA', name: 'Tabasco' },\n { country: 'MX', id: 'TL', name: 'Tlaxcala' },\n { country: 'MX', id: 'TM', name: 'Tamaulipas' },\n { country: 'MX', id: 'VZ', name: 'Veracruz' },\n { country: 'MX', id: 'YC', name: 'Yucatan' },\n { country: 'MX', id: 'ZT', name: 'Zacatecas' },\n { country: 'NZ', id: 'AUK', name: 'Auckland' },\n { country: 'NZ', id: 'BOP', name: 'Bay of Plenty' },\n { country: 'NZ', id: 'CAN', name: 'Canterbury' },\n { country: 'NZ', id: 'GIS', name: 'Gisborne' },\n { country: 'NZ', id: 'HKB', name: \"Hawke's Bay\" },\n { country: 'NZ', id: 'MWT', name: 'Manawatu-Wanganui' },\n { country: 'NZ', id: 'MBH', name: 'Marlborough' },\n { country: 'NZ', id: 'NSN', name: 'Nelson' },\n { country: 'NZ', id: 'NTL', name: 'Northland' },\n { country: 'NZ', id: 'OTA', name: 'Otago' },\n { country: 'NZ', id: 'STL', name: 'Southland' },\n { country: 'NZ', id: 'TKI', name: 'Taranaki' },\n { country: 'NZ', id: 'NZTAS', name: 'Tasman' },\n { country: 'NZ', id: 'WKO', name: 'Waikato' },\n { country: 'NZ', id: 'WGN', name: 'Wellington' },\n { country: 'NZ', id: 'WTC', name: 'West Coast' },\n { country: 'ES', id: 'A Coruna', name: 'A Coruna' },\n { country: 'ES', id: 'Alava', name: 'Alava' },\n { country: 'ES', id: 'Albacete', name: 'Albacete' },\n { country: 'ES', id: 'Alicante', name: 'Alicante' },\n { country: 'ES', id: 'Almeria', name: 'Almeria' },\n { country: 'ES', id: 'Asturias', name: 'Asturias' },\n { country: 'ES', id: 'Avila', name: 'Avila' },\n { country: 'ES', id: 'Badajoz', name: 'Badajoz' },\n { country: 'ES', id: 'Baleares', name: 'Baleares' },\n { country: 'ES', id: 'Barcelona', name: 'Barcelona' },\n { country: 'ES', id: 'Burgos', name: 'Burgos' },\n { country: 'ES', id: 'Caceres', name: 'Caceres' },\n { country: 'ES', id: 'Cadiz', name: 'Cadiz' },\n { country: 'ES', id: 'Cantabria', name: 'Cantabria' },\n { country: 'ES', id: 'Castellon', name: 'Castellon' },\n { country: 'ES', id: 'Ceuta', name: 'Ceuta' },\n { country: 'ES', id: 'Ciudad Real', name: 'Ciudad Real' },\n { country: 'ES', id: 'Cordoba', name: 'Cordoba' },\n { country: 'ES', id: 'Cuenca', name: 'Cuenca' },\n { country: 'ES', id: 'Girona', name: 'Girona' },\n { country: 'ES', id: 'Granada', name: 'Granada' },\n { country: 'ES', id: 'Guadalajara', name: 'Guadalajara' },\n { country: 'ES', id: 'Guipuzcoa', name: 'Guipuzcoa' },\n { country: 'ES', id: 'Huelva', name: 'Huelva' },\n { country: 'ES', id: 'Huesca', name: 'Huesca' },\n { country: 'ES', id: 'Jaen', name: 'Jaen' },\n { country: 'ES', id: 'La Rioja', name: 'La Rioja' },\n { country: 'ES', id: 'Las Palmas', name: 'Las Palmas' },\n { country: 'ES', id: 'Leon', name: 'Leon' },\n { country: 'ES', id: 'Lleida', name: 'Lleida' },\n { country: 'ES', id: 'Lugo', name: 'Lugo' },\n { country: 'ES', id: 'Madrid', name: 'Madrid' },\n { country: 'ES', id: 'Malaga', name: 'Malaga' },\n { country: 'ES', id: 'Melilla', name: 'Melilla' },\n { country: 'ES', id: 'Murcia', name: 'Murcia' },\n { country: 'ES', id: 'Navarra', name: 'Navarra' },\n { country: 'ES', id: 'Ourense', name: 'Ourense' },\n { country: 'ES', id: 'Palencia', name: 'Palencia' },\n { country: 'ES', id: 'Pontevedra', name: 'Pontevedra' },\n { country: 'ES', id: 'Salamanca', name: 'Salamanca' },\n {\n country: 'ES',\n id: 'Santa Cruz de Tenerife',\n name: 'Santa Cruz de Tenerife',\n },\n { country: 'ES', id: 'Segovia', name: 'Segovia' },\n { country: 'ES', id: 'Sevilla', name: 'Sevilla' },\n { country: 'ES', id: 'Soria', name: 'Soria' },\n { country: 'ES', id: 'Tarragona', name: 'Tarragona' },\n { country: 'ES', id: 'Teruel', name: 'Teruel' },\n { country: 'ES', id: 'Toledo', name: 'Toledo' },\n { country: 'ES', id: 'Valencia', name: 'Valencia' },\n { country: 'ES', id: 'Valladolid', name: 'Valladolid' },\n { country: 'ES', id: 'Vizcaya', name: 'Vizcaya' },\n { country: 'ES', id: 'Zamora', name: 'Zamora' },\n { country: 'ES', id: 'Zaragoza', name: 'Zaragoza' },\n { country: 'AE', id: 'Abu Dhabi', name: 'Abu Dhabi' },\n { country: 'AE', id: 'Ajman', name: 'Ajman' },\n { country: 'AE', id: 'Dubai', name: 'Dubai' },\n { country: 'AE', id: 'Fujairah', name: 'Fujairah' },\n { country: 'AE', id: 'Ras al-Khaimah', name: 'Ras al-Khaimah' },\n { country: 'AE', id: 'Sharjah', name: 'Sharjah' },\n { country: 'AE', id: 'Umm al-Quwain', name: 'Umm al-Quwain' },\n { country: 'DZ', id: 'DZ-01', name: 'Adrar' },\n { country: 'DZ', id: 'DZ-44', name: 'A\u00EFn Defla' },\n { country: 'DZ', id: 'DZ-46', name: 'A\u00EFn T\u00E9mouchent' },\n { country: 'DZ', id: 'DZ-16', name: 'Algiers' },\n { country: 'DZ', id: 'DZ-23', name: 'Annaba' },\n { country: 'DZ', id: 'DZ-05', name: 'Batna' },\n { country: 'DZ', id: 'DZ-08', name: 'B\u00E9char' },\n { country: 'DZ', id: 'DZ-06', name: 'B\u00E9ja\u00EFa' },\n { country: 'DZ', id: 'DZ-53', name: 'B\u00E9ni Abb\u00E8s' },\n { country: 'DZ', id: 'DZ-07', name: 'Biskra' },\n { country: 'DZ', id: 'DZ-09', name: 'Blida' },\n { country: 'DZ', id: 'DZ-52', name: 'Bordj Baji Mokhtar' },\n { country: 'DZ', id: 'DZ-34', name: 'Bordj Bou Arr\u00E9ridj' },\n { country: 'DZ', id: 'DZ-10', name: 'Bou\u00EFra' },\n { country: 'DZ', id: 'DZ-35', name: 'Boumerd\u00E8s' },\n { country: 'DZ', id: 'DZ-02', name: 'Chlef' },\n { country: 'DZ', id: 'DZ-25', name: 'Constantine' },\n { country: 'DZ', id: 'DZ-56', name: 'Djanet' },\n { country: 'DZ', id: 'DZ-17', name: 'Djelfa' },\n { country: 'DZ', id: 'DZ-32', name: 'El Bayadh' },\n { country: 'DZ', id: 'DZ-49', name: \"El M'Ghair\" },\n { country: 'DZ', id: 'DZ-50', name: 'El Menia' },\n { country: 'DZ', id: 'DZ-39', name: 'El Oued' },\n { country: 'DZ', id: 'DZ-36', name: 'El Tarf' },\n { country: 'DZ', id: 'DZ-47', name: 'Gharda\u00EFa' },\n { country: 'DZ', id: 'DZ-24', name: 'Guelma' },\n { country: 'DZ', id: 'DZ-33', name: 'Illizi' },\n { country: 'DZ', id: 'DZ-58', name: 'In Guezzam' },\n { country: 'DZ', id: 'DZ-57', name: 'In Salah' },\n { country: 'DZ', id: 'DZ-18', name: 'Jijel' },\n { country: 'DZ', id: 'DZ-40', name: 'Khenchela' },\n { country: 'DZ', id: 'DZ-03', name: 'Laghouat' },\n { country: 'DZ', id: 'DZ-28', name: \"M'Sila\" },\n { country: 'DZ', id: 'DZ-29', name: 'Mascara' },\n { country: 'DZ', id: 'DZ-26', name: 'M\u00E9d\u00E9a' },\n { country: 'DZ', id: 'DZ-43', name: 'Mila' },\n { country: 'DZ', id: 'DZ-27', name: 'Mostaganem' },\n { country: 'DZ', id: 'DZ-45', name: 'Na\u00E2ma' },\n { country: 'DZ', id: 'DZ-31', name: 'Oran' },\n { country: 'DZ', id: 'DZ-30', name: 'Ouargla' },\n { country: 'DZ', id: 'DZ-51', name: 'Ouled Djellal' },\n { country: 'DZ', id: 'DZ-04', name: 'Oum El Bouaghi' },\n { country: 'DZ', id: 'DZ-48', name: 'Relizane' },\n { country: 'DZ', id: 'DZ-20', name: 'Sa\u00EFda' },\n { country: 'DZ', id: 'DZ-19', name: 'S\u00E9tif' },\n { country: 'DZ', id: 'DZ-22', name: 'Sidi Bel Abb\u00E8s' },\n { country: 'DZ', id: 'DZ-21', name: 'Skikda' },\n { country: 'DZ', id: 'DZ-41', name: 'Souk Ahras' },\n { country: 'DZ', id: 'DZ-11', name: 'Tamanrasset' },\n { country: 'DZ', id: 'DZ-12', name: 'T\u00E9bessa' },\n { country: 'DZ', id: 'DZ-14', name: 'Tiaret' },\n { country: 'DZ', id: 'DZ-54', name: 'Timimoun' },\n { country: 'DZ', id: 'DZ-37', name: 'Tindouf' },\n { country: 'DZ', id: 'DZ-42', name: 'Tipaza' },\n { country: 'DZ', id: 'DZ-38', name: 'Tissemsilt' },\n { country: 'DZ', id: 'DZ-15', name: 'Tizi Ouzou' },\n { country: 'DZ', id: 'DZ-13', name: 'Tlemcen' },\n { country: 'DZ', id: 'DZ-55', name: 'Touggourt' },\n { country: 'PH', id: 'PH-00', name: 'National Capital Region [NCR]' },\n { country: 'PH', id: 'PH-01', name: 'Ilocos [I]' },\n { country: 'PH', id: 'PH-02', name: 'Cagayan Valley [II]' },\n { country: 'PH', id: 'PH-03', name: 'Central Luzon [III]' },\n { country: 'PH', id: 'PH-05', name: 'Bicol [V]' },\n { country: 'PH', id: 'PH-06', name: 'Western Visayas [VI]' },\n { country: 'PH', id: 'PH-07', name: 'Central Visayas [VII]' },\n { country: 'PH', id: 'PH-08', name: 'Eastern Visayas [VIII]' },\n { country: 'PH', id: 'PH-09', name: 'Zamboanga Peninsula [IX]' },\n { country: 'PH', id: 'PH-10', name: 'Northern Mindanao [X]' },\n { country: 'PH', id: 'PH-11', name: 'Davao [XI]' },\n { country: 'PH', id: 'PH-12', name: 'Soccsksargen [XII]' },\n { country: 'PH', id: 'PH-13', name: 'Caraga [XIII]' },\n {\n country: 'PH',\n id: 'PH-14',\n name: 'Autonomous Region in Muslim Mindanao [ARMM]',\n },\n {\n country: 'PH',\n id: 'PH-15',\n name: 'Cordillera Administrative Region [CAR]',\n },\n { country: 'PH', id: 'PH-40', name: 'Calabarzon [IV-A]' },\n { country: 'PH', id: 'PH-41', name: 'Mimaropa [IV-B]' },\n ],\n timezones: [\n { id: 'Pacific/Kiritimati', name: 'Line Islands Time' },\n { id: 'Pacific/Enderbury', name: 'Phoenix Islands Time' },\n { id: 'Pacific/Tongatapu', name: 'Tonga Time' },\n { id: 'Pacific/Chatham', name: 'Chatham Daylight Time' },\n { id: 'Asia/Kamchatka', name: 'Petropavlovsk-Kamchatski Time' },\n { id: 'Pacific/Auckland', name: 'New Zealand Daylight Time' },\n { id: 'Pacific/Fiji', name: 'Fiji Time' },\n { id: 'Pacific/Norfolk', name: 'Norfolk Time' },\n { id: 'Pacific/Guadalcanal', name: 'Solomon Islands Time' },\n { id: 'Australia/Lord_Howe', name: 'Lord Howe Summer Time' },\n {\n id: 'Australia/Brisbane',\n name: 'Australian Eastern Standard Time (Brisbane)',\n },\n {\n id: 'Australia/Sydney',\n name: 'Australian Eastern Standard Time (Sydney)',\n },\n {\n id: 'Australia/Adelaide',\n name: 'Australian Central Standard Time (Adelaide)',\n },\n {\n id: 'Australia/Darwin',\n name: 'Australian Central Standard Time (Darwin)',\n },\n { id: 'Asia/Seoul', name: 'Korea Standard Time' },\n { id: 'Asia/Tokyo', name: 'Japan Standard Time' },\n { id: 'Asia/Hong_Kong', name: 'Hong Kong Time' },\n { id: 'Asia/Kuala_Lumpur', name: 'Malaysia Time' },\n { id: 'Asia/Manila', name: 'Philippines Time' },\n { id: 'Asia/Shanghai', name: 'China Standard Time (Shanghai)' },\n { id: 'Asia/Singapore', name: 'Singapore Time' },\n { id: 'Asia/Taipei', name: 'China Standard Time (Taipei)' },\n { id: 'Australia/Perth', name: 'Australian Western Standard Time' },\n { id: 'Asia/Bangkok', name: 'Indochina Time (Bangkok)' },\n { id: 'Asia/Jakarta', name: 'West Indonesia Time' },\n { id: 'Asia/Saigon', name: 'Indochina Time (Saigon)' },\n { id: 'Asia/Rangoon', name: 'Myanmar Time' },\n { id: 'Asia/Dacca', name: 'Bangladesh Time' },\n { id: 'Asia/Katmandu', name: 'Nepal Time' },\n { id: 'Asia/Calcutta', name: 'India Standard Time (Calcutta)' },\n { id: 'Asia/Colombo', name: 'India Standard Time (Colombo)' },\n { id: 'Asia/Karachi', name: 'Pakistan Summer Time' },\n { id: 'Asia/Tashkent', name: 'Uzbekistan Time' },\n { id: 'Asia/Yekaterinburg', name: 'Yekaterinburg Time' },\n { id: 'Asia/Kabul', name: 'Afghanistan Time' },\n { id: 'Asia/Baku', name: 'Azerbaijan Time' },\n { id: 'Asia/Dubai', name: 'Gulf Standard Time' },\n { id: 'Asia/Tbilisi', name: 'Georgia Time' },\n { id: 'Asia/Yerevan', name: 'Armenia Time' },\n { id: 'Asia/Tehran', name: 'Iran Standard Time' },\n { id: 'Africa/Nairobi', name: 'Eastern African Time' },\n { id: 'Asia/Baghdad', name: 'Arabia Standard Time (Baghdad)' },\n { id: 'Asia/Kuwait', name: 'Arabia Standard Time (Kuwait)' },\n { id: 'Asia/Riyadh', name: 'Arabia Standard Time (Riyadh)' },\n { id: 'Europe/Moscow', name: 'Moscow Standard Time' },\n { id: 'Africa/Cairo', name: 'Eastern European Time (Cairo)' },\n { id: 'Africa/Johannesburg', name: 'South Africa Standard Time' },\n { id: 'Asia/Beirut', name: 'Eastern European Time (Beirut)' },\n { id: 'Asia/Jerusalem', name: 'Israel Standard Time' },\n { id: 'Europe/Athens', name: 'Eastern European Time (Athens)' },\n { id: 'Europe/Bucharest', name: 'Eastern European Time (Bucharest)' },\n { id: 'Europe/Helsinki', name: 'Eastern European Time (Helsinki)' },\n { id: 'Europe/Istanbul', name: 'Eastern European Time (Istanbul)' },\n { id: 'Europe/Minsk', name: 'Eastern European Time (Minsk)' },\n { id: 'Europe/Amsterdam', name: 'Central European Time (Amsterdam)' },\n { id: 'Europe/Berlin', name: 'Central European Time (Berlin)' },\n { id: 'Europe/Brussels', name: 'Central European Time (Brussels)' },\n { id: 'Europe/Prague', name: 'Central European Time (Prague)' },\n { id: 'Europe/Rome', name: 'Central European Time (Rome)' },\n { id: 'Europe/Dublin', name: 'Irish Summer Time' },\n { id: 'Europe/Lisbon', name: 'Western European Summer Time' },\n { id: 'Europe/London', name: 'British Summer Time' },\n { id: 'GMT', name: 'Greenwich Mean Time' },\n { id: 'America/Scoresbysund', name: 'East Greenland Time' },\n { id: 'Atlantic/Azores', name: 'Azores Time' },\n { id: 'Atlantic/Cape_Verde', name: 'Cape Verde Time' },\n { id: 'Atlantic/South_Georgia', name: 'South Georgia Standard Time' },\n { id: 'America/Buenos_Aires', name: 'Argentine Summer Time' },\n { id: 'America/Sao_Paulo', name: 'Brasilia Summer Time' },\n { id: 'America/St_Johns', name: 'Newfoundland Daylight Time' },\n { id: 'America/Halifax', name: 'Atlantic Daylight Time (Halifax)' },\n { id: 'America/Puerto_Rico', name: 'Atlantic Standard Time' },\n { id: 'America/Santiago', name: 'Chile Summer Time' },\n { id: 'Atlantic/Bermuda', name: 'Atlantic Daylight Time (Bermuda)' },\n { id: 'America/Caracas', name: 'Venezuela Time' },\n { id: 'America/Bogota', name: 'Colombia Time' },\n {\n id: 'America/Indianapolis',\n name: 'Eastern Daylight Time (Indianapolis)',\n },\n { id: 'America/Lima', name: 'Peru Time' },\n { id: 'America/New_York', name: 'Eastern Daylight Time (New York)' },\n { id: 'America/Panama', name: 'Eastern Standard Time (Panama)' },\n { id: 'America/Chicago', name: 'Central Daylight Time (Chicago)' },\n { id: 'America/El_Salvador', name: 'Central Standard Time (El Salvador)' },\n { id: 'America/Mexico_City', name: 'Central Standard Time (Mexico City)' },\n { id: 'America/Denver', name: 'Mountain Daylight Time' },\n { id: 'America/Phoenix', name: 'Mountain Standard Time' },\n { id: 'America/Los_Angeles', name: 'Pacific Daylight Time' },\n { id: 'America/Tijuana', name: 'Pacific Standard Time' },\n { id: 'Pacific/Pitcairn', name: 'Pitcairn Standard Time' },\n { id: 'America/Anchorage', name: 'Alaska Daylight Time' },\n { id: 'Pacific/Gambier', name: 'Gambier Time' },\n { id: 'Pacific/Marquesas', name: 'Marquesas Time' },\n { id: 'Pacific/Honolulu', name: 'Hawaii Standard Time' },\n { id: 'America/Atka', name: 'Hawaii-Aleutian Standard Time' },\n { id: 'Pacific/Niue', name: 'Niue Time' },\n { id: 'Pacific/Pago_Pago', name: 'Samoa Standard Time' },\n ],\n locales: [\n { id: 'af', name: 'Afrikaans' },\n { id: 'af-ZA', name: 'Afrikaans (South Africa)' },\n { id: 'az', name: 'Azerbaijani' },\n { id: 'az-AZ', name: 'Azerbaijani (Azerbaijani)' },\n { id: 'id', name: 'Indonesian' },\n { id: 'id-ID', name: 'Indonesian (Indonesia)' },\n { id: 'ms', name: 'Malay' },\n { id: 'ms-MY', name: 'Malay (Malaysia)' },\n { id: 'ca', name: 'Catalan' },\n { id: 'ca-ES', name: 'Catalan (Spain)' },\n { id: 'cs', name: 'Czech' },\n { id: 'cs-CZ', name: 'Czech (Czech Republic)' },\n { id: 'da', name: 'Danish' },\n { id: 'da-DK', name: 'Danish (Denmark)' },\n { id: 'de', name: 'German' },\n { id: 'de-DE', name: 'German (Germany)' },\n { id: 'de-CH', name: 'German (Switzerland)' },\n { id: 'de-AT', name: 'German (Austria)' },\n { id: 'et', name: 'Estonian' },\n { id: 'et-EE', name: 'Estonian (Estonia)' },\n { id: 'en', name: 'English' },\n { id: 'en-AU', name: 'English (Australia)' },\n { id: 'en-CA', name: 'English (Canada)' },\n { id: 'en-IE', name: 'English (Ireland)' },\n { id: 'en-NZ', name: 'English (New Zealand)' },\n { id: 'en-GB', name: 'English (United Kingdom)' },\n { id: 'en-US', name: 'English (United States)' },\n { id: 'es', name: 'Spanish' },\n { id: 'es-AR', name: 'Spanish (Argentina)' },\n { id: 'es-CL', name: 'Spanish (Chile)' },\n { id: 'es-CO', name: 'Spanish (Colombia)' },\n { id: 'es-CR', name: 'Spanish (Costa Rica)' },\n { id: 'es-ES', name: 'Spanish (Spain)' },\n { id: 'es-MX', name: 'Spanish (Mexico)' },\n { id: 'es-PA', name: 'Spanish (Panama)' },\n { id: 'es-PE', name: 'Spanish (Peru)' },\n { id: 'es-VE', name: 'Spanish (Venezuela)' },\n { id: 'fil', name: 'Filipino' },\n { id: 'fil-PH', name: 'Filipino (Philippines)' },\n { id: 'fr', name: 'French' },\n { id: 'fr-CA', name: 'French (Canada)' },\n { id: 'fr-FR', name: 'French (France)' },\n { id: 'fr-CH', name: 'French (Switzerland)' },\n { id: 'gl', name: 'Galician' },\n { id: 'gl-ES', name: 'Galician (Spain)' },\n { id: 'hr', name: 'Croatian' },\n { id: 'hr-HR', name: 'Croatian (Croatia)' },\n { id: 'it', name: 'Italian' },\n { id: 'it-IT', name: 'Italian (Italy)' },\n { id: 'it-CH', name: 'Italian (Switzerland)' },\n { id: 'sw', name: 'Swahili' },\n { id: 'sw-KE', name: 'Swahili (Kenya)' },\n { id: 'sw-KE', name: 'Swahili (Tanzania)' },\n { id: 'lv', name: 'Latvian' },\n { id: 'lv-LV', name: 'Latvian (Latvia)' },\n { id: 'lt', name: 'Lithuanian' },\n { id: 'lt-LT', name: 'Lithuanian (Lithuania)' },\n { id: 'hu', name: 'Hungarian' },\n { id: 'hu-HU', name: 'Hungarian (Hungary)' },\n { id: 'nl', name: 'Dutch' },\n { id: 'nl-NL', name: 'Dutch (Netherlands)' },\n { id: 'nb', name: 'Norwegian Bokm\u00E5l' },\n { id: 'nb-NO', name: 'Norwegian Bokm\u00E5l (Norway)' },\n { id: 'nn', name: 'Norwegian Nynorsk' },\n { id: 'nn-NO', name: 'Norwegian Nynorsk (Norway)' },\n { id: 'pl', name: 'Polish' },\n { id: 'pl-PL', name: 'Polish (Poland)' },\n { id: 'pt', name: 'Portuguese' },\n { id: 'pt-BR', name: 'Portuguese (Brazil)' },\n { id: 'pt-PT', name: 'Portuguese (Portugal)' },\n { id: 'ro', name: 'Romanian' },\n { id: 'ro-MD', name: 'Romanian (Moldova)' },\n { id: 'ro-RO', name: 'Romanian (Romania)' },\n { id: 'sq', name: 'Albanian' },\n { id: 'sq-AL', name: 'Albanian (Albania)' },\n { id: 'sk', name: 'Slovak' },\n { id: 'sk-SK', name: 'Slovak (Slovakia)' },\n { id: 'sl', name: 'Slovenian' },\n { id: 'sl-SI', name: 'Slovenian (Slovenia)' },\n { id: 'fi', name: 'Finnish' },\n { id: 'fi-FI', name: 'Finnish (Finland)' },\n { id: 'sv', name: 'Swedish' },\n { id: 'sv-FI', name: 'Swedish (Finland)' },\n { id: 'sv-SE', name: 'Swedish (Sweden)' },\n { id: 'vi', name: 'Vietnamese' },\n { id: 'vi-VN', name: 'Vietnamese (Vietnam)' },\n { id: 'tr', name: 'Turkish' },\n { id: 'tr-TR', name: 'Turkish (Turkey)' },\n { id: 'is', name: 'Icelandic' },\n { id: 'is-IS', name: 'Icelandic (Iceland)' },\n { id: 'el', name: 'Greek' },\n { id: 'el-CY', name: 'Greek (Cyprus)' },\n { id: 'el-GR', name: 'Greek (Greece)' },\n { id: 'sr', name: 'Serbian' },\n { id: 'sr-RS', name: 'Serbian (Serbia)' },\n { id: 'be', name: 'Belarusian' },\n { id: 'be-BY', name: 'Belarusian (Belarus)' },\n { id: 'bg', name: '\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438' },\n { id: 'bg-BG', name: 'Bulgarian (Bulgaria)' },\n { id: 'mk', name: 'Macedonian' },\n { id: 'mk-MK', name: 'Macedonian (Macedonia)' },\n { id: 'ru', name: 'Russian' },\n { id: 'ru-MD', name: 'Russian (Moldova)' },\n { id: 'ru-RU', name: 'Russian (Russia)' },\n { id: 'ru-UA', name: 'Russian (Ukraine)' },\n { id: 'uk', name: 'Ukrainian' },\n { id: 'uk-UA', name: 'Ukrainian (Ukraine)' },\n { id: 'he', name: 'Hebrew' },\n { id: 'he-IL', name: 'Hebrew (Israel)' },\n { id: 'ar', name: 'Arabic' },\n { id: 'ar-DZ', name: 'Arabic (Algeria)' },\n { id: 'ar-KW', name: 'Arabic (Kuwait)' },\n { id: 'ar-MA', name: 'Arabic (Morocco)' },\n { id: 'ar-SA', name: 'Arabic (Saudi Arabia)' },\n { id: 'ar-EG', name: 'Arabic (Egypt)' },\n { id: 'hi', name: 'Hindi' },\n { id: 'hi-IN', name: 'Hindi (India)' },\n { id: 'th', name: 'Thai' },\n { id: 'th-TH', name: 'Thai (Thailand)' },\n { id: 'zh', name: 'Chinese' },\n { id: 'zh-CN', name: 'Chinese (China)' },\n { id: 'zh-HK', name: 'Chinese (Hong Kong)' },\n { id: 'zh-TW', name: 'Chinese (Taiwan)' },\n { id: 'ja', name: 'Japanese' },\n { id: 'ja-JP', name: 'Japanese (Japan)' },\n { id: 'ko', name: 'Korean' },\n { id: 'ko-KR', name: 'Korean (South Korea)' },\n { id: 'km', name: 'Khmer' },\n { id: 'km-KH', name: 'Khmer (Cambodia)' },\n ],\n currencies: [\n { id: 'AFN', name: 'Afghan Afghani' },\n { id: 'ALL', name: 'Albanian Lek' },\n { id: 'DZD', name: 'Algerian Dinar' },\n { id: 'AOA', name: 'Angolan Kwanza' },\n { id: 'ARS', name: 'Argentine Peso' },\n { id: 'AMD', name: 'Armenian Dram' },\n { id: 'AWG', name: 'Aruban Florin' },\n { id: 'AUD', name: 'Australian Dollar' },\n { id: 'AZN', name: 'Azerbaijani Manat' },\n { id: 'AZM', name: 'Azerbaijani Manat (1993-2006)' },\n { id: 'BSD', name: 'Bahamian Dollar' },\n { id: 'BHD', name: 'Bahraini Dinar' },\n { id: 'BDT', name: 'Bangladeshi Taka' },\n { id: 'BBD', name: 'Barbadian Dollar' },\n { id: 'BYR', name: 'Belarusian Ruble' },\n { id: 'BZD', name: 'Belize Dollar' },\n { id: 'BMD', name: 'Bermudan Dollar' },\n { id: 'BTN', name: 'Bhutanese Ngultrum' },\n { id: 'BOB', name: 'Bolivian Boliviano' },\n { id: 'BAM', name: 'Bosnia-Herzegovina Convertible Mark' },\n { id: 'BWP', name: 'Botswanan Pula' },\n { id: 'BRL', name: 'Brazilian Real' },\n { id: 'GBP', name: 'British Pound Sterling' },\n { id: 'BND', name: 'Brunei Dollar' },\n { id: 'BGN', name: 'Bulgarian Lev' },\n { id: 'BUK', name: 'Burmese Kyat' },\n { id: 'BIF', name: 'Burundian Franc' },\n { id: 'XOF', name: 'CFA Franc BCEAO' },\n { id: 'XPF', name: 'CFP Franc' },\n { id: 'KHR', name: 'Cambodian Riel' },\n { id: 'CAD', name: 'Canadian Dollar' },\n { id: 'CVE', name: 'Cape Verdean Escudo' },\n { id: 'KYD', name: 'Cayman Islands Dollar' },\n { id: 'CLP', name: 'Chilean Peso' },\n { id: 'CNY', name: 'Chinese Yuan Renminbi' },\n { id: 'COP', name: 'Colombian Peso' },\n { id: 'KMF', name: 'Comorian Franc' },\n { id: 'CDF', name: 'Congolese Franc' },\n { id: 'CRC', name: 'Costa Rican Col\u00F3n' },\n { id: 'HRK', name: 'Croatian Kuna' },\n { id: 'CUP', name: 'Cuban Peso' },\n { id: 'CZK', name: 'Czech Republic Koruna' },\n { id: 'DKK', name: 'Danish Krone' },\n { id: 'DJF', name: 'Djiboutian Franc' },\n { id: 'DOP', name: 'Dominican Peso' },\n { id: 'XCD', name: 'East Caribbean Dollar' },\n { id: 'EGP', name: 'Egyptian Pound' },\n { id: 'GQE', name: 'Equatorial Guinean Ekwele' },\n { id: 'ERN', name: 'Eritrean Nakfa' },\n { id: 'EEK', name: 'Estonian Kroon' },\n { id: 'ETB', name: 'Ethiopian Birr' },\n { id: 'EUR', name: 'Euro' },\n { id: 'FKP', name: 'Falkland Islands Pound' },\n { id: 'FJD', name: 'Fijian Dollar' },\n { id: 'GMD', name: 'Gambian Dalasi' },\n { id: 'GEK', name: 'Georgian Kupon Larit' },\n { id: 'GEL', name: 'Georgian Lari' },\n { id: 'GHS', name: 'Ghanaian Cedi' },\n { id: 'GIP', name: 'Gibraltar Pound' },\n { id: 'GTQ', name: 'Guatemalan Quetzal' },\n { id: 'GNF', name: 'Guinean Franc' },\n { id: 'GYD', name: 'Guyanaese Dollar' },\n { id: 'HTG', name: 'Haitian Gourde' },\n { id: 'HNL', name: 'Honduran Lempira' },\n { id: 'HKD', name: 'Hong Kong Dollar' },\n { id: 'HUF', name: 'Hungarian Forint' },\n { id: 'ISK', name: 'Icelandic Kr\u00F3na' },\n { id: 'INR', name: 'Indian Rupee' },\n { id: 'IDR', name: 'Indonesian Rupiah' },\n { id: 'IRR', name: 'Iranian Rial' },\n { id: 'IQD', name: 'Iraqi Dinar' },\n { id: 'ILS', name: 'Israeli New Sheqel' },\n { id: 'JMD', name: 'Jamaican Dollar' },\n { id: 'JPY', name: 'Japanese Yen' },\n { id: 'JOD', name: 'Jordanian Dinar' },\n { id: 'KZT', name: 'Kazakhstan Tenge' },\n { id: 'KES', name: 'Kenyan Shilling' },\n { id: 'KWD', name: 'Kuwaiti Dinar' },\n { id: 'KGS', name: 'Kyrgystani Som' },\n { id: 'LAK', name: 'Laotian Kip' },\n { id: 'LVL', name: 'Latvian Lats' },\n { id: 'LBP', name: 'Lebanese Pound' },\n { id: 'LSL', name: 'Lesotho Loti' },\n { id: 'LRD', name: 'Liberian Dollar' },\n { id: 'LYD', name: 'Libyan Dinar' },\n { id: 'LTL', name: 'Lithuanian Litas' },\n { id: 'MOP', name: 'Macanese Pataca' },\n { id: 'MKD', name: 'Macedonian Denar' },\n { id: 'MGA', name: 'Malagasy Ariary' },\n { id: 'MWK', name: 'Malawian Kwacha' },\n { id: 'MYR', name: 'Malaysian Ringgit' },\n { id: 'MVR', name: 'Maldivian Rufiyaa' },\n { id: 'MRO', name: 'Mauritanian Ouguiya' },\n { id: 'MUR', name: 'Mauritian Rupee' },\n { id: 'MXN', name: 'Mexican Peso' },\n { id: 'MDL', name: 'Moldovan Leu' },\n { id: 'MNT', name: 'Mongolian Tugrik' },\n { id: 'MAD', name: 'Moroccan Dirham' },\n { id: 'MZN', name: 'Mozambican Metical' },\n { id: 'MMK', name: 'Myanma Kyat' },\n { id: 'NAD', name: 'Namibian Dollar' },\n { id: 'NPR', name: 'Nepalese Rupee' },\n { id: 'ANG', name: 'Netherlands Antillean Guilder' },\n { id: 'TWD', name: 'New Taiwan Dollar' },\n { id: 'NZD', name: 'New Zealand Dollar' },\n { id: 'NIC', name: 'Nicaraguan Cordoba' },\n { id: 'NGN', name: 'Nigerian Naira' },\n { id: 'KPW', name: 'North Korean Won' },\n { id: 'NOK', name: 'Norwegian Krone' },\n { id: 'ROL', name: 'Old Romanian Leu' },\n { id: 'TRL', name: 'Old Turkish Lira' },\n { id: 'OMR', name: 'Omani Rial' },\n { id: 'PKR', name: 'Pakistani Rupee' },\n { id: 'PAB', name: 'Panamanian Balboa' },\n { id: 'PGK', name: 'Papua New Guinean Kina' },\n { id: 'PYG', name: 'Paraguayan Guarani' },\n { id: 'PEN', name: 'Peruvian Nuevo Sol' },\n { id: 'PHP', name: 'Philippine Peso' },\n { id: 'PLN', name: 'Polish Zloty' },\n { id: 'QAR', name: 'Qatari Rial' },\n { id: 'RHD', name: 'Rhodesian Dollar' },\n { id: 'RON', name: 'Romanian Leu' },\n { id: 'RUB', name: 'Russian Ruble' },\n { id: 'RWF', name: 'Rwandan Franc' },\n { id: 'SHP', name: 'Saint Helena Pound' },\n { id: 'SVC', name: 'Salvadoran Col\u00F3n' },\n { id: 'WST', name: 'Samoan Tala' },\n { id: 'SAR', name: 'Saudi Riyal' },\n { id: 'RSD', name: 'Serbian Dinar' },\n { id: 'SCR', name: 'Seychellois Rupee' },\n { id: 'SLL', name: 'Sierra Leonean Leone' },\n { id: 'SGD', name: 'Singapore Dollar' },\n { id: 'SKK', name: 'Slovak Koruna' },\n { id: 'SBD', name: 'Solomon Islands Dollar' },\n { id: 'SOS', name: 'Somali Shilling' },\n { id: 'ZAR', name: 'South African Rand' },\n { id: 'KRW', name: 'South Korean Won' },\n { id: 'LKR', name: 'Sri Lanka Rupee' },\n { id: 'SDG', name: 'Sudanese Pound' },\n { id: 'SRD', name: 'Surinamese Dollar' },\n { id: 'SZL', name: 'Swazi Lilangeni' },\n { id: 'SEK', name: 'Swedish Krona' },\n { id: 'CHF', name: 'Swiss Franc' },\n { id: 'SYP', name: 'Syrian Pound' },\n { id: 'STD', name: 'S\u00E3o Tom\u00E9 and Pr\u00EDncipe Dobra' },\n { id: 'TJS', name: 'Tajikistani Somoni' },\n { id: 'TZS', name: 'Tanzanian Shilling' },\n { id: 'THB', name: 'Thai Baht' },\n { id: 'TOP', name: 'Tongan Pa\u02BBanga' },\n { id: 'TTD', name: 'Trinidad and Tobago Dollar' },\n { id: 'TND', name: 'Tunisian Dinar' },\n { id: 'TRY', name: 'Turkish Lira' },\n { id: 'TMM', name: 'Turkmenistani Manat' },\n { id: 'USD', name: 'US Dollar' },\n { id: 'UGX', name: 'Ugandan Shilling' },\n { id: 'UAH', name: 'Ukrainian Hryvnia' },\n { id: 'AED', name: 'United Arab Emirates Dirham' },\n { id: 'UYU', name: 'Uruguayan Peso' },\n { id: 'UZS', name: 'Uzbekistan Som' },\n { id: 'VUV', name: 'Vanuatu Vatu' },\n { id: 'VEB', name: 'Venezuelan Bol\u00EDvar' },\n { id: 'VEF', name: 'Venezuelan Bol\u00EDvar Fuerte' },\n { id: 'VND', name: 'Vietnamese Dong' },\n { id: 'CHE', name: 'WIR Euro' },\n { id: 'CHW', name: 'WIR Franc' },\n { id: 'YER', name: 'Yemeni Rial' },\n { id: 'ZMK', name: 'Zambian Kwacha' },\n { id: 'ZWD', name: 'Zimbabwean Dollar' },\n ],\n id: 'geo',\n};\n\nexport const LANG_TO_COUNTRY_CODES: Record<string, string | undefined> = {\n aa: 'ET',\n ab: 'GE',\n abr: 'GH',\n ace: 'ID',\n ach: 'UG',\n ada: 'GH',\n ady: 'RU',\n ae: 'IR',\n aeb: 'TN',\n af: 'ZA',\n agq: 'CM',\n aho: 'IN',\n ak: 'GH',\n akk: 'IQ',\n aln: 'XK',\n alt: 'RU',\n am: 'ET',\n amo: 'NG',\n aoz: 'ID',\n apd: 'TG',\n ar: 'EG',\n arc: 'IR',\n 'arc-Nbat': 'JO',\n 'arc-Palm': 'SY',\n arn: 'CL',\n aro: 'BO',\n arq: 'DZ',\n ary: 'MA',\n arz: 'EG',\n as: 'IN',\n asa: 'TZ',\n ase: 'US',\n ast: 'ES',\n atj: 'CA',\n av: 'RU',\n awa: 'IN',\n ay: 'BO',\n az: 'AZ',\n 'az-Arab': 'IR',\n ba: 'RU',\n bal: 'PK',\n ban: 'ID',\n bap: 'NP',\n bar: 'AT',\n bas: 'CM',\n bax: 'CM',\n bbc: 'ID',\n bbj: 'CM',\n bci: 'CI',\n be: 'BY',\n bej: 'SD',\n bem: 'ZM',\n bew: 'ID',\n bez: 'TZ',\n bfd: 'CM',\n bfq: 'IN',\n bft: 'PK',\n bfy: 'IN',\n bg: 'BG',\n bgc: 'IN',\n bgn: 'PK',\n bgx: 'TR',\n bhb: 'IN',\n bhi: 'IN',\n bhk: 'PH',\n bho: 'IN',\n bi: 'VU',\n bik: 'PH',\n bin: 'NG',\n bjj: 'IN',\n bjn: 'ID',\n bjt: 'SN',\n bkm: 'CM',\n bku: 'PH',\n blt: 'VN',\n bm: 'ML',\n bmq: 'ML',\n bn: 'BD',\n bo: 'CN',\n bpy: 'IN',\n bqi: 'IR',\n bqv: 'CI',\n br: 'FR',\n bra: 'IN',\n brh: 'PK',\n brx: 'IN',\n bs: 'BA',\n bsq: 'LR',\n bss: 'CM',\n bto: 'PH',\n btv: 'PK',\n bua: 'RU',\n buc: 'YT',\n bug: 'ID',\n bum: 'CM',\n bvb: 'GQ',\n byn: 'ER',\n byv: 'CM',\n bze: 'ML',\n ca: 'ES',\n cch: 'NG',\n ccp: 'BD',\n ce: 'RU',\n ceb: 'PH',\n cgg: 'UG',\n ch: 'GU',\n chk: 'FM',\n chm: 'RU',\n cho: 'US',\n chp: 'CA',\n chr: 'US',\n cja: 'KH',\n cjm: 'VN',\n ckb: 'IQ',\n co: 'FR',\n cop: 'EG',\n cps: 'PH',\n cr: 'CA',\n crh: 'UA',\n crj: 'CA',\n crk: 'CA',\n crl: 'CA',\n crm: 'CA',\n crs: 'SC',\n cs: 'CZ',\n csb: 'PL',\n csw: 'CA',\n ctd: 'MM',\n cu: 'RU',\n 'cu-Glag': 'BG',\n cv: 'RU',\n cy: 'GB',\n da: 'DK',\n dak: 'US',\n dar: 'RU',\n dav: 'KE',\n dcc: 'IN',\n de: 'DE',\n den: 'CA',\n dgr: 'CA',\n dje: 'NE',\n dnj: 'CI',\n doi: 'IN',\n dsb: 'DE',\n dtm: 'ML',\n dtp: 'MY',\n dty: 'NP',\n dua: 'CM',\n dv: 'MV',\n dyo: 'SN',\n dyu: 'BF',\n dz: 'BT',\n ebu: 'KE',\n ee: 'GH',\n efi: 'NG',\n egl: 'IT',\n egy: 'EG',\n eky: 'MM',\n el: 'GR',\n en: 'US',\n 'en-Shaw': 'GB',\n es: 'ES',\n esu: 'US',\n et: 'EE',\n ett: 'IT',\n eu: 'ES',\n ewo: 'CM',\n ext: 'ES',\n fa: 'IR',\n fan: 'GQ',\n ff: 'SN',\n 'ff-Adlm': 'GN',\n ffm: 'ML',\n fi: 'FI',\n fia: 'SD',\n fil: 'PH',\n fit: 'SE',\n fj: 'FJ',\n fo: 'FO',\n fon: 'BJ',\n fr: 'FR',\n frc: 'US',\n frp: 'FR',\n frr: 'DE',\n frs: 'DE',\n fub: 'CM',\n fud: 'WF',\n fuf: 'GN',\n fuq: 'NE',\n fur: 'IT',\n fuv: 'NG',\n fvr: 'SD',\n fy: 'NL',\n ga: 'IE',\n gaa: 'GH',\n gag: 'MD',\n gan: 'CN',\n gay: 'ID',\n gbm: 'IN',\n gbz: 'IR',\n gcr: 'GF',\n gd: 'GB',\n gez: 'ET',\n ggn: 'NP',\n gil: 'KI',\n gjk: 'PK',\n gju: 'PK',\n gl: 'ES',\n glk: 'IR',\n gn: 'PY',\n gom: 'IN',\n gon: 'IN',\n gor: 'ID',\n gos: 'NL',\n got: 'UA',\n grc: 'CY',\n 'grc-Linb': 'GR',\n grt: 'IN',\n gsw: 'CH',\n gu: 'IN',\n gub: 'BR',\n guc: 'CO',\n gur: 'GH',\n guz: 'KE',\n gv: 'IM',\n gvr: 'NP',\n gwi: 'CA',\n ha: 'NG',\n hak: 'CN',\n haw: 'US',\n haz: 'AF',\n he: 'IL',\n hi: 'IN',\n hif: 'FJ',\n hil: 'PH',\n hlu: 'TR',\n hmd: 'CN',\n hnd: 'PK',\n hne: 'IN',\n hnj: 'LA',\n hnn: 'PH',\n hno: 'PK',\n ho: 'PG',\n hoc: 'IN',\n hoj: 'IN',\n hr: 'HR',\n hsb: 'DE',\n hsn: 'CN',\n ht: 'HT',\n hu: 'HU',\n hy: 'AM',\n hz: 'NA',\n ia: 'FR',\n iba: 'MY',\n ibb: 'NG',\n id: 'ID',\n ife: 'TG',\n ig: 'NG',\n ii: 'CN',\n ik: 'US',\n ikt: 'CA',\n ilo: 'PH',\n in: 'ID',\n inh: 'RU',\n is: 'IS',\n it: 'IT',\n iu: 'CA',\n iw: 'IL',\n izh: 'RU',\n ja: 'JP',\n jam: 'JM',\n jgo: 'CM',\n ji: 'UA',\n jmc: 'TZ',\n jml: 'NP',\n jut: 'DK',\n jv: 'ID',\n jw: 'ID',\n ka: 'GE',\n kaa: 'UZ',\n kab: 'DZ',\n kac: 'MM',\n kaj: 'NG',\n kam: 'KE',\n kao: 'ML',\n kbd: 'RU',\n kby: 'NE',\n kcg: 'NG',\n kck: 'ZW',\n kde: 'TZ',\n kdh: 'TG',\n kdt: 'TH',\n kea: 'CV',\n ken: 'CM',\n kfo: 'CI',\n kfr: 'IN',\n kfy: 'IN',\n kg: 'CD',\n kge: 'ID',\n kgp: 'BR',\n kha: 'IN',\n khb: 'CN',\n khn: 'IN',\n khq: 'ML',\n kht: 'IN',\n khw: 'PK',\n ki: 'KE',\n kiu: 'TR',\n kj: 'NA',\n kjg: 'LA',\n kk: 'KZ',\n 'kk-Arab': 'CN',\n kkj: 'CM',\n kl: 'GL',\n kln: 'KE',\n km: 'KH',\n kmb: 'AO',\n kn: 'IN',\n knf: 'SN',\n ko: 'KR',\n koi: 'RU',\n kok: 'IN',\n kos: 'FM',\n kpe: 'LR',\n krc: 'RU',\n kri: 'SL',\n krj: 'PH',\n krl: 'RU',\n kru: 'IN',\n ks: 'IN',\n ksb: 'TZ',\n ksf: 'CM',\n ksh: 'DE',\n ku: 'TR',\n 'ku-Arab': 'IQ',\n kum: 'RU',\n kv: 'RU',\n kvr: 'ID',\n kvx: 'PK',\n kw: 'GB',\n kxm: 'TH',\n kxp: 'PK',\n ky: 'KG',\n 'ky-Arab': 'CN',\n 'ky-Latn': 'TR',\n la: 'VA',\n lab: 'GR',\n lad: 'IL',\n lag: 'TZ',\n lah: 'PK',\n laj: 'UG',\n lb: 'LU',\n lbe: 'RU',\n lbw: 'ID',\n lcp: 'CN',\n lep: 'IN',\n lez: 'RU',\n lg: 'UG',\n li: 'NL',\n lif: 'NP',\n 'lif-Limb': 'IN',\n lij: 'IT',\n lis: 'CN',\n ljp: 'ID',\n lki: 'IR',\n lkt: 'US',\n lmn: 'IN',\n lmo: 'IT',\n ln: 'CD',\n lo: 'LA',\n lol: 'CD',\n loz: 'ZM',\n lrc: 'IR',\n lt: 'LT',\n ltg: 'LV',\n lu: 'CD',\n lua: 'CD',\n luo: 'KE',\n luy: 'KE',\n luz: 'IR',\n lv: 'LV',\n lwl: 'TH',\n lzh: 'CN',\n lzz: 'TR',\n mad: 'ID',\n maf: 'CM',\n mag: 'IN',\n mai: 'IN',\n mak: 'ID',\n man: 'GM',\n 'man-Nkoo': 'GN',\n mas: 'KE',\n maz: 'MX',\n mdf: 'RU',\n mdh: 'PH',\n mdr: 'ID',\n men: 'SL',\n mer: 'KE',\n mfa: 'TH',\n mfe: 'MU',\n mg: 'MG',\n mgh: 'MZ',\n mgo: 'CM',\n mgp: 'NP',\n mgy: 'TZ',\n mh: 'MH',\n mi: 'NZ',\n min: 'ID',\n mis: 'IQ',\n mk: 'MK',\n ml: 'IN',\n mls: 'SD',\n mn: 'MN',\n 'mn-Mong': 'CN',\n mni: 'IN',\n mnw: 'MM',\n moe: 'CA',\n moh: 'CA',\n mos: 'BF',\n mr: 'IN',\n mrd: 'NP',\n mrj: 'RU',\n mro: 'BD',\n ms: 'MY',\n mt: 'MT',\n mtr: 'IN',\n mua: 'CM',\n mus: 'US',\n mvy: 'PK',\n mwk: 'ML',\n mwr: 'IN',\n mwv: 'ID',\n mxc: 'ZW',\n my: 'MM',\n myv: 'RU',\n myx: 'UG',\n myz: 'IR',\n mzn: 'IR',\n na: 'NR',\n nan: 'CN',\n nap: 'IT',\n naq: 'NA',\n nb: 'NO',\n nch: 'MX',\n nd: 'ZW',\n ndc: 'MZ',\n nds: 'DE',\n ne: 'NP',\n new: 'NP',\n ng: 'NA',\n ngl: 'MZ',\n nhe: 'MX',\n nhw: 'MX',\n nij: 'ID',\n niu: 'NU',\n njo: 'IN',\n nl: 'NL',\n nmg: 'CM',\n nn: 'NO',\n nnh: 'CM',\n no: 'NO',\n nod: 'TH',\n noe: 'IN',\n non: 'SE',\n nqo: 'GN',\n nr: 'ZA',\n nsk: 'CA',\n nso: 'ZA',\n nus: 'SS',\n nv: 'US',\n nxq: 'CN',\n ny: 'MW',\n nym: 'TZ',\n nyn: 'UG',\n nzi: 'GH',\n oc: 'FR',\n om: 'ET',\n or: 'IN',\n os: 'GE',\n osa: 'US',\n otk: 'MN',\n pa: 'IN',\n 'pa-Arab': 'PK',\n pag: 'PH',\n pal: 'IR',\n 'pal-Phlp': 'CN',\n pam: 'PH',\n pap: 'AW',\n pau: 'PW',\n pcd: 'FR',\n pcm: 'NG',\n pdc: 'US',\n pdt: 'CA',\n peo: 'IR',\n pfl: 'DE',\n phn: 'LB',\n pka: 'IN',\n pko: 'KE',\n pl: 'PL',\n pms: 'IT',\n pnt: 'GR',\n pon: 'FM',\n pra: 'PK',\n prd: 'IR',\n ps: 'AF',\n pt: 'BR',\n puu: 'GA',\n qu: 'PE',\n quc: 'GT',\n qug: 'EC',\n raj: 'IN',\n rcf: 'RE',\n rej: 'ID',\n rgn: 'IT',\n ria: 'IN',\n rif: 'MA',\n rjs: 'NP',\n rkt: 'BD',\n rm: 'CH',\n rmf: 'FI',\n rmo: 'CH',\n rmt: 'IR',\n rmu: 'SE',\n rn: 'BI',\n rng: 'MZ',\n ro: 'RO',\n rob: 'ID',\n rof: 'TZ',\n rtm: 'FJ',\n ru: 'RU',\n rue: 'UA',\n rug: 'SB',\n rw: 'RW',\n rwk: 'TZ',\n ryu: 'JP',\n sa: 'IN',\n saf: 'GH',\n sah: 'RU',\n saq: 'KE',\n sas: 'ID',\n sat: 'IN',\n sav: 'SN',\n saz: 'IN',\n sbp: 'TZ',\n sc: 'IT',\n sck: 'IN',\n scn: 'IT',\n sco: 'GB',\n scs: 'CA',\n sd: 'PK',\n 'sd-Deva': 'IN',\n 'sd-Khoj': 'IN',\n 'sd-Sind': 'IN',\n sdc: 'IT',\n sdh: 'IR',\n se: 'NO',\n sef: 'CI',\n seh: 'MZ',\n sei: 'MX',\n ses: 'ML',\n sg: 'CF',\n sga: 'IE',\n sgs: 'LT',\n shi: 'MA',\n shn: 'MM',\n si: 'LK',\n sid: 'ET',\n sk: 'SK',\n skr: 'PK',\n sl: 'SI',\n sli: 'PL',\n sly: 'ID',\n sm: 'WS',\n sma: 'SE',\n smj: 'SE',\n smn: 'FI',\n smp: 'IL',\n sms: 'FI',\n sn: 'ZW',\n snk: 'ML',\n so: 'SO',\n sou: 'TH',\n sq: 'AL',\n sr: 'RS',\n srb: 'IN',\n srn: 'SR',\n srr: 'SN',\n srx: 'IN',\n ss: 'ZA',\n ssy: 'ER',\n st: 'ZA',\n stq: 'DE',\n su: 'ID',\n suk: 'TZ',\n sus: 'GN',\n sv: 'SE',\n sw: 'TZ',\n swb: 'YT',\n swc: 'CD',\n swg: 'DE',\n swv: 'IN',\n sxn: 'ID',\n syl: 'BD',\n syr: 'IQ',\n szl: 'PL',\n ta: 'IN',\n taj: 'NP',\n tbw: 'PH',\n tcy: 'IN',\n tdd: 'CN',\n tdg: 'NP',\n tdh: 'NP',\n te: 'IN',\n tem: 'SL',\n teo: 'UG',\n tet: 'TL',\n tg: 'TJ',\n 'tg-Arab': 'PK',\n th: 'TH',\n thl: 'NP',\n thq: 'NP',\n thr: 'NP',\n ti: 'ET',\n tig: 'ER',\n tiv: 'NG',\n tk: 'TM',\n tkl: 'TK',\n tkr: 'AZ',\n tkt: 'NP',\n tl: 'PH',\n tly: 'AZ',\n tmh: 'NE',\n tn: 'ZA',\n to: 'TO',\n tog: 'MW',\n tpi: 'PG',\n tr: 'TR',\n tru: 'TR',\n trv: 'TW',\n ts: 'ZA',\n tsd: 'GR',\n tsf: 'NP',\n tsg: 'PH',\n tsj: 'BT',\n tt: 'RU',\n ttj: 'UG',\n tts: 'TH',\n ttt: 'AZ',\n tum: 'MW',\n tvl: 'TV',\n twq: 'NE',\n txg: 'CN',\n ty: 'PF',\n tyv: 'RU',\n tzm: 'MA',\n udm: 'RU',\n ug: 'CN',\n 'ug-Cyrl': 'KZ',\n uga: 'SY',\n uk: 'UA',\n uli: 'FM',\n umb: 'AO',\n und: 'US',\n unr: 'IN',\n 'unr-Deva': 'NP',\n unx: 'IN',\n ur: 'PK',\n uz: 'UZ',\n 'uz-Arab': 'AF',\n vai: 'LR',\n ve: 'ZA',\n vec: 'IT',\n vep: 'RU',\n vi: 'VN',\n vic: 'SX',\n vls: 'BE',\n vmf: 'DE',\n vmw: 'MZ',\n vot: 'RU',\n vro: 'EE',\n vun: 'TZ',\n wa: 'BE',\n wae: 'CH',\n wal: 'ET',\n war: 'PH',\n wbp: 'AU',\n wbq: 'IN',\n wbr: 'IN',\n wls: 'WF',\n wni: 'KM',\n wo: 'SN',\n wtm: 'IN',\n wuu: 'CN',\n xav: 'BR',\n xcr: 'TR',\n xh: 'ZA',\n xlc: 'TR',\n xld: 'TR',\n xmf: 'GE',\n xmn: 'CN',\n xmr: 'SD',\n xna: 'SA',\n xnr: 'IN',\n xog: 'UG',\n xpr: 'IR',\n xsa: 'YE',\n xsr: 'NP',\n yao: 'MZ',\n yap: 'FM',\n yav: 'CM',\n ybb: 'CM',\n yo: 'NG',\n yrl: 'BR',\n yua: 'MX',\n yue: 'HK',\n 'yue-Hans': 'CN',\n za: 'CN',\n zag: 'SD',\n zdj: 'KM',\n zea: 'NL',\n zgh: 'MA',\n zh: 'CN',\n 'zh-Bopo': 'TW',\n 'zh-Hanb': 'TW',\n 'zh-Hant': 'TW',\n zlm: 'TG',\n zmi: 'MY',\n zu: 'ZA',\n zza: 'TR',\n};\n\nexport const CURRENCY_COUNTRIES = Object.freeze({\n USD: { name: 'United States', iso: 'US' },\n EUR: { name: 'Europe', iso: 'EU' },\n GBP: { name: 'United Kingdom', iso: 'GB' },\n JPY: { name: 'Japan', iso: 'JP' },\n CAD: { name: 'Canada', iso: 'CA' },\n AUD: { name: 'Australia', iso: 'AU' },\n CHF: { name: 'Switzerland', iso: 'CH' },\n CNY: { name: 'China', iso: 'CN' },\n SEK: { name: 'Sweden', iso: 'SE' },\n NZD: { name: 'New Zealand', iso: 'NZ' },\n NOK: { name: 'Norway', iso: 'NO' },\n MXN: { name: 'Mexico', iso: 'MX' },\n SGD: { name: 'Singapore', iso: 'SG' },\n HKD: { name: 'Hong Kong', iso: 'HK' },\n KRW: { name: 'South Korea', iso: 'KR' },\n INR: { name: 'India', iso: 'IN' },\n BRL: { name: 'Brazil', iso: 'BR' },\n RUB: { name: 'Russia', iso: 'RU' },\n ZAR: { name: 'South Africa', iso: 'ZA' },\n TRY: { name: 'Turkey', iso: 'TR' },\n AED: { name: 'United Arab Emirates', iso: 'AE' },\n THB: { name: 'Thailand', iso: 'TH' },\n IDR: { name: 'Indonesia', iso: 'ID' },\n SAR: { name: 'Saudi Arabia', iso: 'SA' },\n PLN: { name: 'Poland', iso: 'PL' },\n PHP: { name: 'Philippines', iso: 'PH' },\n ILS: { name: 'Israel', iso: 'IL' },\n MYR: { name: 'Malaysia', iso: 'MY' },\n CZK: { name: 'Czech Republic', iso: 'CZ' },\n HUF: { name: 'Hungary', iso: 'HU' },\n CLP: { name: 'Chile', iso: 'CL' },\n DKK: { name: 'Denmark', iso: 'DK' },\n RON: { name: 'Romania', iso: 'RO' },\n ARS: { name: 'Argentina', iso: 'AR' },\n COP: { name: 'Colombia', iso: 'CO' },\n TWD: { name: 'Taiwan', iso: 'TW' },\n BGN: { name: 'Bulgaria', iso: 'BG' },\n EGP: { name: 'Egypt', iso: 'EG' },\n PKR: { name: 'Pakistan', iso: 'PK' },\n NGN: { name: 'Nigeria', iso: 'NG' },\n VND: { name: 'Vietnam', iso: 'VN' },\n IQD: { name: 'Iraq', iso: 'IQ' },\n MAD: { name: 'Morocco', iso: 'MA' },\n KES: { name: 'Kenya', iso: 'KE' },\n DZD: { name: 'Algeria', iso: 'DZ' },\n UAH: { name: 'Ukraine', iso: 'UA' },\n XAF: { name: 'Cameroon', iso: 'CM' },\n XOF: { name: \"C\u00F4te d'Ivoire\", iso: 'CI' },\n GHS: { name: 'Ghana', iso: 'GH' },\n BYN: { name: 'Belarus', iso: 'BY' },\n LKR: { name: 'Sri Lanka', iso: 'LK' },\n SDG: { name: 'Sudan', iso: 'SD' },\n AFN: { name: 'Afghanistan', iso: 'AF' },\n ALL: { name: 'Albania', iso: 'AL' },\n AMD: { name: 'Armenia', iso: 'AM' },\n AOA: { name: 'Angola', iso: 'AO' },\n AWG: { name: 'Aruba', iso: 'AW' },\n AZN: { name: 'Azerbaijan', iso: 'AZ' },\n BAM: { name: 'Bosnia and Herzegovina', iso: 'BA' },\n BBD: { name: 'Barbados', iso: 'BB' },\n BDT: { name: 'Bangladesh', iso: 'BD' },\n BHD: { name: 'Bahrain', iso: 'BH' },\n BIF: { name: 'Burundi', iso: 'BI' },\n BMD: { name: 'Bermuda', iso: 'BM' },\n BND: { name: 'Brunei', iso: 'BN' },\n BOB: { name: 'Bolivia', iso: 'BO' },\n BSD: { name: 'Bahamas', iso: 'BS' },\n BTN: { name: 'Bhutan', iso: 'BT' },\n BWP: { name: 'Botswana', iso: 'BW' },\n BZD: { name: 'Belize', iso: 'BZ' },\n CDF: { name: 'Democratic Republic of the Congo', iso: 'CD' },\n CLF: { name: 'Chile (Unidad de Fomento)', iso: 'CL' },\n CRC: { name: 'Costa Rica', iso: 'CR' },\n CVE: { name: 'Cape Verde', iso: 'CV' },\n DJF: { name: 'Djibouti', iso: 'DJ' },\n DOP: { name: 'Dominican Republic', iso: 'DO' },\n ERN: { name: 'Eritrea', iso: 'ER' },\n ETB: { name: 'Ethiopia', iso: 'ET' },\n FKP: { name: 'Falkland Islands', iso: 'FK' },\n GEL: { name: 'Georgia', iso: 'GE' },\n GIP: { name: 'Gibraltar', iso: 'GI' },\n GMD: { name: 'Gambia', iso: 'GM' },\n GNF: { name: 'Guinea', iso: 'GN' },\n GTQ: { name: 'Guatemala', iso: 'GT' },\n GYD: { name: 'Guyana', iso: 'GY' },\n HNL: { name: 'Honduras', iso: 'HN' },\n HRK: { name: 'Croatia', iso: 'HR' },\n HTG: { name: 'Haiti', iso: 'HT' },\n IRR: { name: 'Iran', iso: 'IR' },\n ISK: { name: 'Iceland', iso: 'IS' },\n JMD: { name: 'Jamaica', iso: 'JM' },\n JOD: { name: 'Jordan', iso: 'JO' },\n KGS: { name: 'Kyrgyzstan', iso: 'KG' },\n KHR: { name: 'Cambodia', iso: 'KH' },\n KMF: { name: 'Comoros', iso: 'KM' },\n KPW: { name: 'North Korea', iso: 'KP' },\n KWD: { name: 'Kuwait', iso: 'KW' },\n KYD: { name: 'Cayman Islands', iso: 'KY' },\n KZT: { name: 'Kazakhstan', iso: 'KZ' },\n LAK: { name: 'Laos', iso: 'LA' },\n LBP: { name: 'Lebanon', iso: 'LB' },\n LRD: { name: 'Liberia', iso: 'LR' },\n LSL: { name: 'Lesotho', iso: 'LS' },\n LYD: { name: 'Libya', iso: 'LY' },\n MDL: { name: 'Moldova', iso: 'MD' },\n MGA: { name: 'Madagascar', iso: 'MG' },\n MKD: { name: 'North Macedonia', iso: 'MK' },\n MMK: { name: 'Myanmar', iso: 'MM' },\n MNT: { name: 'Mongolia', iso: 'MN' },\n MOP: { name: 'Macau', iso: 'MO' },\n MRO: { name: 'Mauritania', iso: 'MR' },\n MUR: { name: 'Mauritius', iso: 'MU' },\n MVR: { name: 'Maldives', iso: 'MV' },\n MWK: { name: 'Malawi', iso: 'MW' },\n NAD: { name: 'Namibia', iso: 'NA' },\n NPR: { name: 'Nepal', iso: 'NP' },\n OMR: { name: 'Oman', iso: 'OM' },\n PAB: { name: 'Panama', iso: 'PA' },\n PEN: { name: 'Peru', iso: 'PE' },\n PGK: { name: 'Papua New Guinea', iso: 'PG' },\n PYG: { name: 'Paraguay', iso: 'PY' },\n QAR: { name: 'Qatar', iso: 'QA' },\n RSD: { name: 'Serbia', iso: 'RS' },\n RWF: { name: 'Rwanda', iso: 'RW' },\n SBD: { name: 'Solomon Islands', iso: 'SB' },\n SCR: { name: 'Seychelles', iso: 'SC' },\n SHP: { name: 'Saint Helena', iso: 'SH-HL' },\n SLL: { name: 'Sierra Leone', iso: 'SL' },\n SOS: { name: 'Somalia', iso: 'SO' },\n SRD: { name: 'Suriname', iso: 'SR' },\n STD: { name: 'S\u00E3o Tom\u00E9 and Pr\u00EDncipe', iso: 'ST' },\n SZL: { name: 'Eswatini', iso: 'SZ' },\n TJS: { name: 'Tajikistan', iso: 'TJ' },\n TMT: { name: 'Turkmenistan', iso: 'TM' },\n TND: { name: 'Tunisia', iso: 'TN' },\n TOP: { name: 'Tonga', iso: 'TO' },\n TTD: { name: 'Trinidad and Tobago', iso: 'TT' },\n TZS: { name: 'Tanzania', iso: 'TZ' },\n UGX: { name: 'Uganda', iso: 'UG' },\n UYU: { name: 'Uruguay', iso: 'UY' },\n UZS: { name: 'Uzbekistan', iso: 'UZ' },\n VEF: { name: 'Venezuela', iso: 'VE' },\n VUV: { name: 'Vanuatu', iso: 'VU' },\n WST: { name: 'Samoa', iso: 'WS' },\n XCD: { name: 'Eastern Caribbean', iso: 'AG' },\n YER: { name: 'Yemen', iso: 'YE' },\n ZMW: { name: 'Zambia', iso: 'ZM' },\n ZWG: { name: 'Zimbabwe', iso: 'ZW' },\n});\n", "import JSON5 from 'json5';\n\nimport { getSectionLocation } from '@/utils';\n\nimport type { ShopifySectionSchema, ShopifySectionGroup } from 'types/shopify';\n\nimport type {\n SwellThemeConfig,\n SwellLocaleProp,\n ThemeLayoutSectionGroupConfig,\n ThemeSection,\n ThemeSectionBase,\n ThemeSectionConfig,\n ThemeSectionGroup,\n ThemeSectionSchema,\n ThemeSectionSchemaData,\n ThemeSectionSettings,\n ThemeSettingFieldSchema,\n ThemeSettings,\n ThemeSettingsBlock,\n ThemeSettingSectionSchema,\n} from 'types/swell';\n\nimport type { SwellTheme } from '../theme';\nimport type {\n CompiledComponentConfigBase,\n ExternalReference,\n ExternalSchemaProp,\n} from '@swell/easyblocks-core';\n\nexport async function getAllSections(\n theme: SwellTheme,\n themeConfigs: SwellThemeConfig[],\n): Promise<ThemeSectionSchema[]> {\n const allSections: ThemeSectionSchema[] = [];\n\n for (const config of themeConfigs) {\n if (filterSectionConfig(config, themeConfigs)) {\n const schema = await renderTemplateSchema(theme, config);\n\n if (schema) {\n allSections.push({\n ...schema,\n id: String(config.name || '')\n .split('.')\n .pop() as string,\n });\n }\n }\n }\n\n return allSections;\n}\n\nexport async function getPageSections(\n theme: SwellTheme,\n sectionGroup: ThemeSectionGroup,\n getSectionSchemaHandler: (\n theme: SwellTheme,\n sectionName: string,\n ) => Promise<ThemeSectionSchemaData | undefined> = getSectionSchema,\n): Promise<ThemeSectionConfig[]> {\n const order = Array.isArray(sectionGroup.order)\n ? sectionGroup.order\n : Object.keys(sectionGroup.sections || {});\n\n const pageSections: ThemeSectionConfig[] = [];\n\n for (let i = 0; i < order.length; ++i) {\n const key = order[i];\n const section: ThemeSection = sectionGroup.sections[key];\n\n const schemaData = await getSectionSchemaHandler(theme, section.type);\n\n if (!schemaData) {\n continue;\n }\n\n const schema: ThemeSectionSchema = { ...schemaData, id: key };\n\n const id = sectionGroup.id ? `page__${sectionGroup.id}__${key}` : schema.id;\n\n const blockOrder = Array.isArray(section.block_order)\n ? section.block_order\n : Object.keys(section.blocks || {});\n\n const blocks: ThemeSettingsBlock[] = blockOrder\n .map((key) => section.blocks?.[key])\n .filter(Boolean) as ThemeSettingsBlock[];\n\n const settings: ThemeSectionSettings = {\n section: {\n id,\n ...section,\n blocks,\n index0: i,\n index: i + 1,\n location: getSectionLocation(section.type),\n },\n };\n\n pageSections.push({\n id: id,\n settings: settings,\n section: { id, ...section },\n tag: schema.tag || 'div',\n class: schema.class,\n schema,\n });\n }\n\n return pageSections;\n}\n\nexport async function getLayoutSectionGroups(\n theme: SwellTheme,\n themeConfigs: SwellThemeConfig[],\n): Promise<ThemeLayoutSectionGroupConfig[]> {\n const layoutSectionGroupConfigs = themeConfigs.filter((config) =>\n filterAllLayoutSectionGroupConfigs(config, themeConfigs),\n );\n\n const getSectionSchema = async (\n theme: SwellTheme,\n type: string,\n ): Promise<ThemeSectionSchema | undefined> => {\n const config = themeConfigs.find((config) =>\n filterLayoutSectionGroupConfig(config, themeConfigs, type),\n );\n\n const schema = await renderTemplateSchema(\n theme,\n config as SwellThemeConfig,\n );\n\n if (!schema) {\n return undefined;\n }\n\n return {\n ...schema,\n id: String(config?.name || '')\n .split('.')\n .pop() as string,\n };\n };\n\n const layoutSectionGroups: ThemeLayoutSectionGroupConfig[] = [];\n for (const config of layoutSectionGroupConfigs) {\n let sectionGroup;\n try {\n sectionGroup = JSON5.parse<ThemeSectionGroup>(config.file_data);\n\n if (theme.shopifyCompatibility) {\n sectionGroup = theme.shopifyCompatibility.getSectionGroup(\n sectionGroup as ShopifySectionGroup,\n );\n }\n } catch (err) {\n // noop\n console.warn(err);\n }\n\n // Must have a type property\n if (sectionGroup?.type) {\n const sectionConfigs = await getPageSections(\n theme,\n sectionGroup,\n getSectionSchema,\n );\n\n layoutSectionGroups.push({\n ...sectionGroup,\n id: String(config.name || '')\n .split('.')\n .pop(),\n sectionConfigs,\n } as ThemeLayoutSectionGroupConfig);\n }\n }\n\n return layoutSectionGroups;\n}\n\nasync function getSectionSchema(\n theme: SwellTheme,\n sectionName: string,\n): Promise<ThemeSectionSchemaData | undefined> {\n const config = await theme.getThemeTemplateConfigByType(\n 'sections',\n sectionName,\n );\n\n return renderTemplateSchema(theme, config as SwellThemeConfig);\n}\n\nasync function renderTemplateSchema(\n theme: SwellTheme,\n config: SwellThemeConfig,\n): Promise<ThemeSectionSchemaData | undefined> {\n let schema: ThemeSectionSchemaData | undefined;\n\n if (config?.file_path?.endsWith('.liquid')) {\n if (theme.shopifyCompatibility) {\n // Extract {% schema %} from liquid files for Shopify compatibility\n theme.liquidSwell.lastSchema = undefined;\n\n await theme.renderTemplate(config);\n\n const lastSchema = theme.liquidSwell.lastSchema;\n\n if (lastSchema) {\n schema = theme.shopifyCompatibility.getSectionConfigSchema(\n lastSchema as ShopifySectionSchema,\n );\n }\n }\n } else if (config?.file_data) {\n try {\n schema =\n JSON5.parse<ThemeSectionSchemaData | undefined>(config?.file_data) ||\n undefined;\n\n if (theme.shopifyCompatibility) {\n schema = theme.shopifyCompatibility.getSectionConfigSchema(\n schema as unknown as ShopifySectionSchema,\n );\n }\n } catch (err) {\n // noop\n console.warn(err);\n }\n }\n\n return schema;\n}\n\nfunction filterSectionConfig(\n config: SwellThemeConfig,\n themeConfigs: SwellThemeConfig[],\n): boolean {\n if (!config.file_path.startsWith('theme/sections/')) {\n return false;\n }\n\n return isJsonOrLiquidConfig(config, themeConfigs);\n}\n\nfunction filterAllLayoutSectionGroupConfigs(\n config: SwellThemeConfig,\n themeConfigs: SwellThemeConfig[],\n): boolean {\n if (\n !config.file_path.startsWith('theme/sections/') ||\n !config.file_path.endsWith('.json')\n ) {\n return false;\n }\n\n const targetFilePath = config.file_path.replace(/\\.json$/, '.liquid');\n\n return !themeConfigs.some((c) => c.file_path === targetFilePath);\n}\n\nfunction filterLayoutSectionGroupConfig(\n config: SwellThemeConfig,\n themeConfigs: SwellThemeConfig[],\n type: string,\n): boolean {\n if (\n !config.file_path.endsWith(`/${type}.json`) &&\n !config.file_path.endsWith(`/${type}.liquid`)\n ) {\n return false;\n }\n\n return isJsonOrLiquidConfig(config, themeConfigs);\n}\n\nfunction isJsonOrLiquidConfig(\n config: SwellThemeConfig,\n themeConfigs: SwellThemeConfig[],\n): boolean {\n if (config.file_path.endsWith('.liquid')) {\n const targetFilePath = config.file_path.replace(/\\.liquid$/, '.json');\n\n const hasJsonFile = themeConfigs.find(\n (c) => c.file_path === targetFilePath,\n );\n\n if (!hasJsonFile) {\n return true;\n }\n } else if (config.file_path.endsWith('.json')) {\n return true;\n }\n\n return false;\n}\n\ntype EasyblocksFieldProps = Omit<ExternalSchemaProp, 'prop' | 'label'>;\n\nexport function schemaToEasyblocksProps(\n field: ThemeSettingFieldSchema,\n): EasyblocksFieldProps {\n const sharedProps: Omit<EasyblocksFieldProps, 'type'> = {\n description: field.description,\n defaultValue: field.default as ExternalReference,\n isLabelHidden: true,\n layout: 'column',\n params: field as unknown as Record<string, unknown>,\n };\n\n let typeProps;\n switch (field?.type) {\n case 'text':\n case 'short_text':\n typeProps = {\n type: 'swell_short_text',\n };\n break;\n\n case 'paragraph':\n typeProps = {\n type: 'swell_paragraph',\n };\n break;\n\n case 'textarea':\n case 'long_text':\n case 'liquid':\n typeProps = {\n type: 'swell_long_text',\n };\n break;\n\n case 'basic_html':\n case 'rich_text':\n case 'rich_html':\n case 'markdown':\n typeProps = {\n type: 'swell_editor',\n };\n break;\n\n case 'number':\n typeProps = {\n type: 'swell_number',\n };\n break;\n\n case 'select':\n typeProps = {\n type: 'swell_select',\n };\n break;\n\n case 'radio':\n typeProps = {\n type: 'swell_radio',\n };\n break;\n\n case 'checkbox':\n typeProps = {\n type: 'swell_boolean',\n };\n break;\n\n case 'color':\n typeProps = {\n type: 'swell_color',\n };\n break;\n\n case 'color_scheme':\n typeProps = {\n type: 'swell_color_scheme',\n };\n break;\n\n case 'color_scheme_group':\n typeProps = {\n type: 'swell_color_scheme_group',\n };\n break;\n\n case 'font':\n typeProps = {\n type: 'swell_font',\n };\n break;\n\n case 'header':\n typeProps = {\n type: 'swell_header',\n };\n break;\n\n case 'icon':\n typeProps = {\n type: 'swell_menu',\n };\n break;\n\n case 'menu':\n typeProps = {\n type: 'swell_menu',\n };\n break;\n\n case 'url':\n typeProps = {\n type: 'swell_url',\n };\n break;\n\n case 'lookup':\n case 'generic_lookup':\n case 'product_lookup':\n case 'category_lookup':\n case 'customer_lookup':\n typeProps = {\n type: 'swell_lookup',\n };\n break;\n\n case 'image':\n typeProps = {\n type: 'swell_image',\n defaultValue: null,\n };\n break;\n\n case 'asset':\n case 'document':\n case 'video':\n typeProps = {\n type: 'swell_file',\n };\n break;\n\n default:\n typeProps = {\n type: 'swell_short_text',\n };\n break;\n }\n\n return {\n ...sharedProps,\n ...typeProps,\n } as EasyblocksFieldProps;\n}\n\nexport function schemaToEasyblocksValue(\n fields: ThemeSettingFieldSchema[] | undefined,\n fieldId: string,\n value: unknown,\n) {\n if (value === undefined) {\n return null;\n }\n\n const field = fields?.find((field) => field.id === fieldId);\n\n switch (field?.type) {\n // These are needed for external type values\n /* case 'color':\n return {\n id: value,\n widgetId: 'SwellColor',\n };\n\n case 'lookup':\n case 'product_lookup':\n case 'category_lookup':\n case 'customer_lookup':\n return {\n id: value,\n widgetId: 'SwellLookup',\n };\n\n case 'menu':\n return {\n id: value,\n widgetId: 'SwellMenu',\n }; */\n\n default:\n return value;\n }\n}\n\nexport function getThemeSettingsFromProps(\n props: Record<string, unknown>,\n editorSchema: ThemeSettingSectionSchema[],\n): ThemeSettings | undefined {\n return editorSchema?.reduce<ThemeSettings>((acc, settingGroup) => {\n for (const field of settingGroup.fields || []) {\n if (field?.id) {\n acc[field.id] = props[field.id];\n }\n }\n\n return acc;\n }, {});\n}\n\ntype ReactEasyblocksCompiledComponent = React.ReactElement<{\n compiled: CompiledComponentConfigBase;\n}>;\n\ninterface PageSectionComponentProps {\n Blocks?: ReactEasyblocksCompiledComponent[];\n $locale?: SwellLocaleProp;\n [key: string]: unknown;\n}\n\nexport function getSectionSettingsFromProps(\n props: PageSectionComponentProps,\n sectionSchema?: ThemeSectionSchema,\n): ThemeSectionBase | undefined {\n if (!sectionSchema) {\n return;\n }\n\n return {\n settings: sectionSchema.fields.reduce<ThemeSettings>(\n (acc, field) => {\n if (field?.id) {\n acc[field.id] = props[field.id];\n }\n return acc;\n },\n {\n $locale: props.$locale,\n },\n ),\n id: sectionSchema.id,\n type: sectionSchema.id,\n blocks: props.Blocks?.filter((propBlock) =>\n Boolean(propBlock.props.compiled?._component),\n ).map((propBlock): ThemeSettingsBlock => {\n const {\n _id: id,\n _component: component,\n disabled: isDisabled,\n props: blockProps,\n } = propBlock.props.compiled;\n const blockType = component.split('__')[2];\n const blockSchema = sectionSchema.blocks?.find(\n (block) => block.type === blockType,\n );\n\n return {\n id: toBlockId(id),\n type: blockType,\n disabled: isDisabled,\n settings:\n blockSchema?.fields?.reduce<ThemeSettings>(\n (acc, field) => {\n if (field?.id) {\n acc[field.id] = blockProps[field.id] as unknown;\n }\n return acc;\n },\n { $locale: blockProps.$locale },\n ) || {},\n };\n }),\n location: getSectionLocation(sectionSchema.id),\n };\n}\n\nexport function toEasyblocksFieldId(fieldId?: string): string {\n if (!fieldId) {\n return fieldId as string;\n }\n\n return fieldId.replace(/\\./g, '\u00B7');\n}\n\nexport function toSchemaFieldId(fieldId?: string): string {\n if (!fieldId) {\n return fieldId as string;\n }\n\n return fieldId.replace(/\u00B7/g, '.');\n}\n\nexport function toBlockId(id: string): string {\n if (!id) {\n return id;\n }\n\n return id.replace(/\\./g, '_');\n}\n", "// @ts-nocheck\n\n// Formatted version of a popular md5 implementation\n// Original copyright (c) Paul Johnston & Greg Holt.\nexport function md5(inputString: string): string {\n var hc = '0123456789abcdef';\n function rh(n) {\n var j,\n s = '';\n for (j = 0; j <= 3; j++)\n s +=\n hc.charAt((n >> (j * 8 + 4)) & 0x0f) + hc.charAt((n >> (j * 8)) & 0x0f);\n return s;\n }\n function ad(x, y) {\n var l = (x & 0xffff) + (y & 0xffff);\n var m = (x >> 16) + (y >> 16) + (l >> 16);\n return (m << 16) | (l & 0xffff);\n }\n function rl(n, c) {\n return (n << c) | (n >>> (32 - c));\n }\n function cm(q, a, b, x, s, t) {\n return ad(rl(ad(ad(a, q), ad(x, t)), s), b);\n }\n function ff(a, b, c, d, x, s, t) {\n return cm((b & c) | (~b & d), a, b, x, s, t);\n }\n function gg(a, b, c, d, x, s, t) {\n return cm((b & d) | (c & ~d), a, b, x, s, t);\n }\n function hh(a, b, c, d, x, s, t) {\n return cm(b ^ c ^ d, a, b, x, s, t);\n }\n function ii(a, b, c, d, x, s, t) {\n return cm(c ^ (b | ~d), a, b, x, s, t);\n }\n function sb(x) {\n var i;\n var nblk = ((x.length + 8) >> 6) + 1;\n var blks = new Array(nblk * 16);\n for (i = 0; i < nblk * 16; i++) blks[i] = 0;\n for (i = 0; i < x.length; i++)\n blks[i >> 2] |= x.charCodeAt(i) << ((i % 4) * 8);\n blks[i >> 2] |= 0x80 << ((i % 4) * 8);\n blks[nblk * 16 - 2] = x.length * 8;\n return blks;\n }\n var i,\n x = sb('' + inputString),\n a = 1732584193,\n b = -271733879,\n c = -1732584194,\n d = 271733878,\n olda,\n oldb,\n oldc,\n oldd;\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n a = ff(a, b, c, d, x[i + 0], 7, -680876936);\n d = ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = ff(c, d, a, b, x[i + 10], 17, -42063);\n b = ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = gg(b, c, d, a, x[i + 0], 20, -373897302);\n a = gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = hh(a, b, c, d, x[i + 5], 4, -378558);\n d = hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = hh(d, a, b, c, x[i + 0], 11, -358537222);\n c = hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = ii(a, b, c, d, x[i + 0], 6, -198630844);\n d = ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = ad(a, olda);\n b = ad(b, oldb);\n c = ad(c, oldc);\n d = ad(d, oldd);\n }\n return rh(a) + rh(b) + rh(c) + rh(d);\n}\n", "// ABOUTME: Detects KV storage flavor based on runtime environment\n\nimport type { KVFlavor } from '../cache';\nimport type { CFThemeEnv } from '../../types/cloudflare';\nimport { logger } from './logger';\n\nlet cachedKVFlavor: KVFlavor | undefined;\n\n/**\n * Get KV storage flavor. Priority: KV_FLAVOR env var > auto-detection > miniflare default\n */\nexport function getKVFlavor(workerEnv?: CFThemeEnv): KVFlavor {\n if (cachedKVFlavor) {\n return cachedKVFlavor;\n }\n\n // No KV binding = memory\n if (!workerEnv?.THEME) {\n cachedKVFlavor = 'memory';\n return cachedKVFlavor;\n }\n\n // Priority 1: Explicit KV_FLAVOR env var\n const kvFlavor = workerEnv.KV_FLAVOR as string | undefined;\n if (kvFlavor) {\n const flavorLower = String(kvFlavor).toLowerCase();\n\n switch (flavorLower) {\n case 'cloudflare':\n case 'cf':\n cachedKVFlavor = 'cf';\n break;\n case 'miniflare':\n cachedKVFlavor = 'miniflare';\n break;\n case 'memory':\n cachedKVFlavor = 'memory';\n break;\n default:\n logger.warn(`[KV] Unknown KV_FLAVOR: ${kvFlavor}, using miniflare`);\n cachedKVFlavor = 'miniflare';\n }\n return cachedKVFlavor;\n }\n\n // Priority 2: Auto-detect Cloudflare Workers\n try {\n if (\n typeof navigator !== 'undefined' &&\n navigator.userAgent === 'Cloudflare-Workers'\n ) {\n cachedKVFlavor = 'cf';\n return cachedKVFlavor;\n }\n } catch {\n // Ignore navigator access errors\n }\n\n // Priority 3: Default to miniflare (safe for old versions without batch KV)\n cachedKVFlavor = 'miniflare';\n return cachedKVFlavor;\n}\n\nexport function resetKVFlavorCache(): void {\n cachedKVFlavor = undefined;\n}\n", "import { Cache, type CreateCacheOptions } from './cache';\n\nexport class RequestCache extends Cache {\n constructor(options?: CreateCacheOptions) {\n super({\n ...options,\n });\n }\n}\n", "import { Keyv } from 'keyv';\n\nimport { Cache, type CreateCacheOptions } from './cache';\n\nexport class ResourceCache extends Cache {\n constructor(options?: CreateCacheOptions) {\n super({\n stores: buildStores(),\n ...options,\n });\n }\n}\n\nfunction buildStores(): Keyv[] {\n return [\n new Keyv({\n // Disabling serialization allows for pure memoization of class instances\n // at the tradeoff of no support for compression.\n serialize: undefined,\n deserialize: undefined,\n }),\n ];\n}\n", "import { Cache, type CreateCacheOptions } from './cache';\n\nconst TTL = 90 * 24 * 60 * 60 * 1000; // 90 days\n\nexport class ThemeCache extends Cache {\n constructor(options?: CreateCacheOptions) {\n super({\n ttl: TTL,\n ...options,\n });\n }\n}\n", "// ABOUTME: Minimal KV wrapper for CF, Miniflare, and Memory implementations\n// Handles only the environment differences without retry logic or complexity\n\nimport type { CFWorkerKV, CFThemeEnv } from '../../types/cloudflare';\n\nexport interface ClientKV {\n get(keys: string[]): Promise<Map<string, string | null>>;\n put(\n key: string,\n value: string,\n metadata?: Record<string, any>,\n ): Promise<void>;\n}\n\nexport type KVFlavor = 'cf' | 'miniflare' | 'memory';\n\n/**\n * Direct Cloudflare KV implementation - uses native bulk operations\n */\nclass CFKV implements ClientKV {\n constructor(private kv: CFWorkerKV) {}\n\n async get(keys: string[]): Promise<Map<string, string | null>> {\n if (keys.length === 0) {\n return new Map();\n }\n\n // Direct CF bulk operation - no retry, no chunking\n // Chunking will be handled at a higher level with size awareness\n const result = await this.kv.get(keys, 'text');\n\n // Ensure we always return a Map\n if (!(result instanceof Map)) {\n const map = new Map<string, string | null>();\n for (const key of keys) {\n map.set(key, null);\n }\n return map;\n }\n\n return result;\n }\n\n async put(\n key: string,\n value: string,\n metadata?: Record<string, any>,\n ): Promise<void> {\n await this.kv.put(key, value, { metadata });\n }\n}\n\n/**\n * Miniflare KV implementation - works around missing bulk operations\n */\nclass MiniflareKV implements ClientKV {\n constructor(private kv: CFWorkerKV) {}\n\n async get(keys: string[]): Promise<Map<string, string | null>> {\n if (keys.length === 0) {\n return new Map();\n }\n\n const result = new Map<string, string | null>();\n\n // Execute all KV operations in parallel - workerd handles queueing\n await Promise.all(\n keys.map(async (key) => {\n const value = await this.kv.get(key, 'text');\n result.set(key, value);\n }),\n );\n\n return result;\n }\n\n async put(\n key: string,\n value: string,\n metadata?: Record<string, any>,\n ): Promise<void> {\n await this.kv.put(key, value, { metadata });\n }\n}\n\n/**\n * In-memory KV implementation for testing\n */\nclass MemoryKV implements ClientKV {\n private store = new Map<\n string,\n { value: string; metadata?: Record<string, any> }\n >();\n\n async get(keys: string[]): Promise<Map<string, string | null>> {\n const result = new Map<string, string | null>();\n\n for (const key of keys) {\n const entry = this.store.get(key);\n result.set(key, entry?.value ?? null);\n }\n\n return result;\n }\n\n async put(\n key: string,\n value: string,\n metadata?: Record<string, any>,\n ): Promise<void> {\n this.store.set(key, { value, metadata });\n }\n}\n\n/**\n * Factory function to create appropriate KV implementation\n */\nexport function createClientKV(\n env?: CFThemeEnv,\n flavor: KVFlavor = 'cf',\n): ClientKV {\n // If we have a KV namespace, use it\n if (env?.THEME) {\n if (flavor === 'miniflare') {\n return new MiniflareKV(env.THEME);\n }\n return new CFKV(env.THEME);\n }\n\n // Fallback to memory implementation\n return new MemoryKV();\n}\n", "import type { SwellThemeConfig } from '../../types/swell';\nimport type { CFThemeEnv } from '../../types/cloudflare';\nimport type { ClientKV, KVFlavor } from './kv-variety';\nimport { createClientKV } from './kv-variety';\nimport { logger, createTraceId } from '../utils/logger';\n\n/**\n * Main interface for theme file storage operations\n */\nexport interface ThemeFileCacheInterface {\n /**\n * Load files for given configs, intelligently batching to avoid 413 errors\n * Returns new configs with file_data populated\n */\n getFiles(configs: SwellThemeConfig[]): Promise<SwellThemeConfig[]>;\n\n /**\n * Store files, checking existence first to avoid redundant writes\n * Validates file sizes and returns detailed results\n */\n putFiles(configs: SwellThemeConfig[]): Promise<PutFilesResult>;\n}\n\n/**\n * Result of a putFiles operation\n */\nexport interface PutFilesResult {\n /** Number of files successfully written to storage */\n written: number;\n /** Number of files skipped due to size violations */\n skipped: number;\n /** Number of files skipped because they already exist */\n skippedExisting: number;\n /** Detailed warnings about file size issues */\n warnings: FileWarning[];\n}\n\n/**\n * Warning about a file that triggered size thresholds\n */\nexport interface FileWarning {\n /** Hash identifier of the file */\n hash: string;\n /** Path of the file for logging */\n filePath: string;\n /** Size of the file in bytes */\n size: number;\n /** Reason for the warning */\n reason: 'warning_1mb' | 'rejected_5mb' | 'exceeded_25mb';\n /** Action taken for this file */\n action: 'stored' | 'rejected';\n}\n\n/**\n * Configuration batch for GET operations\n */\ninterface ConfigBatch {\n configs: SwellThemeConfig[];\n keys: string[];\n estimatedSize: number;\n}\n\n/**\n * Theme file storage implementation\n * Manages efficient batch operations for theme files in KV storage\n */\nexport class ThemeFileCache implements ThemeFileCacheInterface {\n private kv: ClientKV;\n private maxBatchSize: number = 20 * 1024 * 1024; // 20MB safety margin\n\n constructor(env?: CFThemeEnv, flavor: KVFlavor = 'cf') {\n this.kv = createClientKV(env, flavor);\n }\n\n /**\n * Build a KV storage key from a file hash\n */\n private buildKey(hash: string): string {\n return `file_data:${hash}`;\n }\n\n /**\n * Extract hash from a KV storage key\n */\n private extractHashFromKey(key: string): string {\n return key.replace('file_data:', '');\n }\n\n /**\n * Plan GET batches based on file sizes to avoid 413 errors\n * Uses round-robin distribution for even batch sizes\n */\n private planGetBatches(configs: SwellThemeConfig[]): ConfigBatch[] {\n if (configs.length === 0) {\n return [];\n }\n\n // Sort by size (largest first) for better distribution\n const sorted = [...configs].sort((a, b) => {\n const sizeA = a.file?.length || 0;\n const sizeB = b.file?.length || 0;\n return sizeB - sizeA;\n });\n\n // Calculate minimum batches needed\n const totalSize = sorted.reduce((sum, config) => {\n return sum + (config.file?.length || 0);\n }, 0);\n\n // Determine batch count based on constraints\n const sizeBatches = Math.ceil(totalSize / this.maxBatchSize);\n const keyBatches = Math.ceil(sorted.length / 100); // CF limit\n const targetBatches = Math.max(sizeBatches, keyBatches);\n\n // Initialize batches\n const batches: ConfigBatch[] = Array.from(\n { length: targetBatches },\n () => ({\n configs: [],\n keys: [],\n estimatedSize: 0,\n }),\n );\n\n // Round-robin distribution for even batch sizes\n sorted.forEach((config, index) => {\n const batchIndex = index % targetBatches;\n const batch = batches[batchIndex];\n\n batch.configs.push(config);\n batch.keys.push(this.buildKey(config.hash));\n batch.estimatedSize += config.file?.length || 0;\n });\n\n // Filter out empty batches (shouldn't happen, but be safe)\n return batches.filter((batch) => batch.configs.length > 0);\n }\n\n /**\n * Load a single batch from KV storage\n */\n private async loadBatch(\n batch: ConfigBatch,\n ): Promise<Map<string, string | null>> {\n // Use underlying KV batch operation\n return this.kv.get(batch.keys);\n }\n\n /**\n * Merge batch results with original configs\n */\n private mergeResults(\n configs: SwellThemeConfig[],\n batchResults: Map<string, string | null>[],\n ): SwellThemeConfig[] {\n // Combine all batch results into a single map\n const allData = new Map<string, string | null>();\n for (const batchResult of batchResults) {\n for (const [key, value] of batchResult.entries()) {\n allData.set(key, value);\n }\n }\n\n // Return new config objects with file_data populated\n return configs.map((config) => {\n const key = this.buildKey(config.hash);\n const fileData = allData.get(key);\n\n if (fileData) {\n // Return new config with file_data populated\n return {\n ...config,\n file_data: fileData,\n };\n }\n\n // Return config without file_data if not found\n return config;\n });\n }\n\n async getFiles(configs: SwellThemeConfig[]): Promise<SwellThemeConfig[]> {\n if (configs.length === 0) {\n return [];\n }\n\n const trace = createTraceId();\n\n // Use intelligent batch planning to avoid 413 errors\n const batches = this.planGetBatches(configs);\n\n const totalSize = batches.reduce((sum, b) => sum + b.estimatedSize, 0);\n const maxBatchSize = Math.max(...batches.map((b) => b.estimatedSize));\n\n logger.debug('[ThemeFileStorage] Loading files start', {\n totalConfigs: configs.length,\n batchCount: batches.length,\n maxBatchSize,\n totalSize,\n trace,\n });\n\n // Execute batches in parallel - runtime handles queueing\n const results = await Promise.all(\n batches.map((batch) => this.loadBatch(batch)),\n );\n\n // Merge results and return new configs with file_data\n const mergedConfigs = this.mergeResults(configs, results);\n\n const loadedCount = mergedConfigs.filter((c) => c.file_data).length;\n\n logger.debug('[ThemeFileStorage] Loading files end', {\n requested: configs.length,\n loaded: loadedCount,\n missing: configs.length - loadedCount,\n batches: batches.length,\n trace,\n });\n\n return mergedConfigs;\n }\n\n /**\n * Validate file sizes and categorize by threshold\n */\n private validateFiles(configs: SwellThemeConfig[]): {\n valid: SwellThemeConfig[];\n warnings: FileWarning[];\n } {\n const valid: SwellThemeConfig[] = [];\n const warnings: FileWarning[] = [];\n\n for (const config of configs) {\n // Skip configs without file_data\n if (!config.file_data) {\n continue;\n }\n\n const size = config.file?.length || 0;\n\n if (size >= 25 * 1024 * 1024) {\n // 25MB+ - never attempt\n warnings.push({\n hash: config.hash,\n filePath: config.file_path,\n size,\n reason: 'exceeded_25mb',\n action: 'rejected',\n });\n } else if (size >= 5 * 1024 * 1024) {\n // 5MB+ - reject from cache\n warnings.push({\n hash: config.hash,\n filePath: config.file_path,\n size,\n reason: 'rejected_5mb',\n action: 'rejected',\n });\n } else {\n // Under 5MB - can be stored\n if (size >= 1024 * 1024) {\n // 1MB+ - warning but still store\n warnings.push({\n hash: config.hash,\n filePath: config.file_path,\n size,\n reason: 'warning_1mb',\n action: 'stored',\n });\n }\n valid.push(config);\n }\n }\n\n return { valid, warnings };\n }\n\n /**\n * Check which files already exist in KV storage\n * Uses batch planning to avoid 413 errors when checking existence\n */\n private async checkExistence(\n configs: SwellThemeConfig[],\n ): Promise<Set<string>> {\n if (configs.length === 0) {\n return new Set();\n }\n\n const existing = new Set<string>();\n\n // Use the same batch planning to avoid 413 errors\n // KV GET returns full values, so we need size-aware batching\n const batches = this.planGetBatches(configs);\n\n // Check existence using planned batches\n const results = await Promise.all(\n batches.map((batch) => this.kv.get(batch.keys)),\n );\n\n // Mark existing files\n for (const batchResult of results) {\n for (const [key, value] of batchResult.entries()) {\n if (value !== null) {\n const hash = this.extractHashFromKey(key);\n existing.add(hash);\n }\n }\n }\n\n return existing;\n }\n\n async putFiles(configs: SwellThemeConfig[]): Promise<PutFilesResult> {\n const result: PutFilesResult = {\n written: 0,\n skipped: 0,\n skippedExisting: 0,\n warnings: [],\n };\n\n if (configs.length === 0) {\n return result;\n }\n\n const trace = createTraceId();\n\n logger.debug('[ThemeFileStorage] Put files start', {\n totalConfigs: configs.length,\n trace,\n });\n\n // Validate files and filter by size\n const { valid, warnings } = this.validateFiles(configs);\n result.warnings = warnings;\n\n // Log validation warnings\n if (warnings.length > 0) {\n const rejectedCount = warnings.filter(\n (w) => w.action === 'rejected',\n ).length;\n const warnedCount = warnings.filter((w) => w.action === 'stored').length;\n\n logger.warn('[ThemeFileStorage] File size validation issues', {\n totalWarnings: warnings.length,\n rejected: rejectedCount,\n warned: warnedCount,\n trace,\n });\n\n // Log individual warnings for rejected files\n warnings\n .filter((w) => w.action === 'rejected')\n .forEach((w) => {\n logger.error('[ThemeFileStorage] File rejected due to size', {\n filePath: w.filePath,\n size: w.size,\n reason: w.reason,\n trace,\n });\n });\n }\n\n // Count rejected files as skipped\n const rejected = warnings.filter((w) => w.action === 'rejected').length;\n result.skipped =\n rejected + (configs.length - configs.filter((c) => c.file_data).length);\n\n // Check which valid files already exist\n logger.debug('[ThemeFileStorage] Checking existence', {\n validFiles: valid.length,\n trace,\n });\n\n const existing = await this.checkExistence(valid);\n result.skippedExisting = existing.size;\n\n // Filter out existing files\n const toWrite = valid.filter((config) => !existing.has(config.hash));\n\n if (toWrite.length > 0) {\n logger.debug('[ThemeFileStorage] Writing new files', {\n toWrite: toWrite.length,\n skippedExisting: existing.size,\n trace,\n });\n\n // Write only new files - runtime handles queueing\n await Promise.all(\n toWrite.map(async (config) => {\n const key = this.buildKey(config.hash);\n const metadata = config.file?.content_type\n ? { content_type: config.file.content_type }\n : undefined;\n\n await this.kv.put(key, config.file_data, { metadata });\n result.written++;\n }),\n );\n }\n\n logger.info('[ThemeFileStorage] Put files complete', {\n written: result.written,\n skipped: result.skipped,\n skippedExisting: result.skippedExisting,\n warnings: result.warnings.length,\n trace,\n });\n\n return result;\n }\n}\n", "import { Cache, type CreateCacheOptions } from './cache';\n\nconst DEFAULT_TTL = 90 * 24 * 60 * 60 * 1000; // 90 days\n\nexport interface ContentCacheOptions extends CreateCacheOptions {\n defaultTtl?: number;\n}\n\n/**\n * Simple content cache exposing only get/set operations.\n * Designed for caching versioned, immutable content like rendered assets.\n */\nexport class ContentCache {\n private cache: Cache;\n private defaultTtl: number;\n\n constructor(options?: ContentCacheOptions) {\n const { defaultTtl, ...cacheOptions } = options || {};\n this.defaultTtl = defaultTtl ?? DEFAULT_TTL;\n this.cache = new Cache({\n ttl: this.defaultTtl,\n ...cacheOptions,\n });\n }\n\n /**\n * Get content from cache\n */\n async get<T = any>(key: string): Promise<T | undefined> {\n return this.cache.get<T>(key);\n }\n\n /**\n * Set content in cache\n */\n async set<T = any>(key: string, value: T, ttl?: number): Promise<void> {\n await this.cache.set(key, value, ttl ?? this.defaultTtl);\n }\n}\n", "import { SwellStorefrontCollection } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellCollection, SwellData } from 'types/swell';\nimport type { SwellAddress } from './swell_types';\n\nexport default class SwellAddresses extends SwellStorefrontCollection<SwellAddress> {\n constructor(swell: Swell, query?: SwellData) {\n const { page, limit } = swell.queryParams;\n\n super(swell, 'accounts:addresses', { page, limit, ...query }, function () {\n return this._swell.storefront.account.listAddresses(\n this._query,\n ) as Promise<SwellCollection<SwellAddress>>;\n });\n }\n}\n", "import { SwellStorefrontCollection } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellOrder } from './swell_types';\nimport type { SwellCollection, SwellData } from 'types/swell';\n\nexport default class SwellOrders extends SwellStorefrontCollection<SwellOrder> {\n constructor(swell: Swell, query?: SwellData) {\n const { page, limit } = swell.queryParams;\n\n super(swell, 'accounts:orders', { page, limit, ...query }, function () {\n return this._swell.storefront.account.listOrders(this._query) as Promise<\n SwellCollection<SwellOrder>\n >;\n });\n }\n}\n", "import { SwellStorefrontCollection } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellSubscription } from './swell_types';\nimport type { SwellCollection, SwellData } from 'types/swell';\n\nexport default class SwellSubscriptions extends SwellStorefrontCollection<SwellSubscription> {\n constructor(swell: Swell, query?: SwellData) {\n const { page, limit } = swell.queryParams;\n\n super(\n swell,\n 'accounts:subscriptions',\n { page, limit, ...query },\n function () {\n return this._swell.storefront.subscriptions.list(\n this._query,\n ) as Promise<SwellCollection<SwellSubscription>>;\n },\n );\n }\n}\n", "import { SwellStorefrontSingleton } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type {\n SwellAccount as SwellAccountType,\n SwellAddress,\n SwellOrder,\n SwellSubscription,\n} from './swell_types';\nimport type { SwellCollection } from 'types/swell';\n\nimport SwellAddresses from './addresses';\nimport SwellOrders from './orders';\nimport SwellSubscriptions from './subscriptions';\n\nexport default class SwellAccount extends SwellStorefrontSingleton<SwellAccountType> {\n constructor(swell: Swell) {\n super(swell, 'account', async function () {\n const account = await this._defaultGetter().call(this);\n\n if (!account) {\n return null;\n }\n\n account.addresses = new SwellAddresses(\n this._swell,\n ) as SwellCollection<SwellAddress>;\n\n account.orders = new SwellOrders(\n this._swell,\n ) as SwellCollection<SwellOrder>;\n\n account.subscriptions = new SwellSubscriptions(\n this._swell,\n ) as SwellCollection<SwellSubscription>;\n\n return account;\n });\n\n return this._getProxy();\n }\n}\n", "import { SwellStorefrontRecord } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellData } from 'types/swell';\nimport type {\n SwellBlog as SwellBlogType,\n SwellBlogCategory,\n} from './swell_types';\n\nexport default class SwellBlog extends SwellStorefrontRecord<SwellBlogType> {\n constructor(\n swell: Swell,\n blogId: string,\n categoryId?: string,\n query?: SwellData,\n ) {\n super(swell, 'content/blogs', blogId, query, async function () {\n this._query = { ...this._query, expand: 'author' };\n\n const blog = await this._defaultGetter().call(this);\n\n if (!blog) {\n return null;\n }\n\n if (categoryId) {\n blog.category = new SwellStorefrontRecord<SwellBlogCategory>(\n this._swell,\n 'content/blog-categories',\n categoryId,\n ) as unknown as SwellBlogCategory;\n }\n\n return blog;\n });\n\n return this._getProxy();\n }\n}\n", "import { SwellStorefrontCollection, SwellStorefrontRecord } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellCollection, SwellData } from 'types/swell';\nimport type {\n SwellBlog,\n SwellBlogCategory as SwellBlogCategoryType,\n} from './swell_types';\n\nexport default class SwellBlogCategory extends SwellStorefrontRecord<SwellBlogCategoryType> {\n constructor(swell: Swell, id: string, query?: SwellData) {\n super(swell, 'content/blog-categories', id, query, async function () {\n const category = await this._defaultGetter().call(this);\n\n if (!category) {\n return null;\n }\n\n category.blogs = new SwellStorefrontCollection<SwellBlog>(\n this._swell,\n 'content/blogs',\n {\n category_id: category.id,\n expand: 'author',\n },\n ) as SwellCollection<SwellBlog>;\n\n return category;\n });\n\n return this._getProxy();\n }\n}\n", "import { SwellStorefrontSingleton } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellCart as SwellCartType } from './swell_types';\n\nexport default class SwellCart extends SwellStorefrontSingleton<SwellCartType> {\n constructor(swell: Swell) {\n super(swell, 'cart');\n\n return this._getProxy();\n }\n}\n", "// Functions to calculate product properties\n\nimport type { SwellData, SwellProductFilter } from 'types/swell';\n\nimport type {\n SwellProduct,\n SwellProductOption,\n SwellProductOptionValue,\n SwellProductPurchaseOptions,\n SwellProductPurchaseOptionSubscription,\n SwellSubscriptionPlan,\n SwellSortOption,\n SwellVariant,\n} from './swell_types';\n\nimport type { Swell } from '@/api';\n\nexport function isGiftcard(product: SwellProduct): boolean {\n return product.type === 'giftcard';\n}\n\nexport function isOptionAvailable(\n product: SwellProduct,\n option: SwellProductOption,\n): boolean {\n if (isGiftcard(product)) {\n return true;\n }\n\n return Boolean(option.active && option.name);\n}\n\nexport function isProductAvailable(\n product: SwellProduct,\n variant?: SwellVariant,\n): boolean {\n if (product.stock_purchasable) {\n return true;\n }\n\n const stockStatus = (variant || product).stock_status;\n\n return !stockStatus || stockStatus === 'in_stock';\n}\n\n// get available variants\nexport function getAvailableVariants(product: SwellProduct): SwellVariant[] {\n return (product.variants?.results?.slice()?.reverse() || []).filter(\n (variant: SwellVariant) => isProductAvailable(product, variant),\n );\n}\n\nexport function isOptionValueAvailable(\n option: SwellProductOption,\n value: SwellProductOptionValue,\n product: SwellProduct,\n availableVariants?: SwellVariant[],\n): boolean {\n if (!option.variant) {\n return true;\n }\n\n const hasVariants = product.variants?.results.length > 0;\n\n if (!hasVariants) {\n return true;\n }\n\n const variants = availableVariants || getAvailableVariants(product);\n // An option value is considered available\n // if there is at least one available variant that includes this value.\n return variants.some((variant: SwellVariant) =>\n variant.option_value_ids.includes(value.id),\n );\n}\n\nexport function isOptionValueSelected(\n option: SwellProductOption,\n value: SwellProductOptionValue,\n product: SwellProduct,\n queryParams: SwellData,\n selectedVariant?: SwellVariant,\n): boolean {\n let variant;\n\n if (option.variant) {\n variant = selectedVariant || getSelectedVariant(product, queryParams);\n }\n\n const selectedOptionValues = getSelectedVariantOptionValues(\n product,\n queryParams,\n variant,\n );\n\n return selectedOptionValues.includes(value.id);\n}\n\n// get selected variant from options\nexport function getSelectedVariant(\n product: SwellProduct,\n queryParams: SwellData,\n): SwellVariant | undefined {\n const {\n variant: queryVariant,\n option_values: queryOptionValues,\n selected_option_value: selectedOptionValue,\n } = queryParams as {\n variant?: string;\n option_values?: string;\n selected_option_value?: string;\n };\n const variants = getAvailableVariants(product);\n\n let selectedVariant = undefined;\n\n if (queryVariant) {\n selectedVariant = variants.find((variant) => variant.id === queryVariant);\n } else if (queryOptionValues) {\n const optionValues = queryOptionValues.split(',');\n\n // non-variant options are skipped\n selectedVariant = variants.find((variant) => {\n if (variant.option_value_ids.length !== optionValues.length) {\n return false;\n }\n\n return variant.option_value_ids.every((optionValueId: string) =>\n optionValues.includes(optionValueId),\n );\n });\n\n if (!selectedVariant && selectedOptionValue) {\n selectedVariant = variants.filter((variant) =>\n variant.option_value_ids.includes(selectedOptionValue),\n )[0];\n }\n }\n\n return selectedVariant || variants?.[0] || undefined;\n}\n\n// collect all option values including non-variant\nexport function getSelectedVariantOptionValues(\n product: SwellProduct,\n queryParams: SwellData,\n variant?: SwellVariant,\n): string[] {\n if (variant) {\n return variant.option_value_ids;\n }\n\n const { option_values: queryOptionValues = '' } = queryParams as {\n option_values?: string;\n };\n const optionValues = queryOptionValues.split(',');\n\n return (product.options || []).reduce((acc, option) => {\n if (!option.values) {\n return acc;\n }\n\n const hasOptionValues = option.values.length > 0;\n\n if (!isOptionAvailable(product, option) || !hasOptionValues) {\n return acc;\n }\n\n const value = option.values.find((value) =>\n optionValues.includes(value.id),\n );\n\n if (value) {\n acc.push(value.id);\n }\n\n return acc;\n }, [] as string[]);\n}\n\nexport function getPurchaseOptions(\n product: SwellProduct,\n queryParams: SwellData,\n): SwellProductPurchaseOptions | null {\n if (!product?.purchase_options) {\n return null;\n }\n\n const { standard, subscription } = product.purchase_options;\n const selectedPurchaseOptionType = getSelectedPurchaseOptionType(\n product,\n queryParams,\n );\n\n const purchaseOptions: SwellProductPurchaseOptions = {};\n\n if (standard) {\n purchaseOptions.standard = {\n ...standard,\n selected: selectedPurchaseOptionType === 'standard',\n };\n }\n\n if (subscription) {\n const selectedPlan = getSelectedSubscriptionPurchaseOptionPlan(\n selectedPurchaseOptionType,\n subscription,\n queryParams,\n );\n\n purchaseOptions.subscription = {\n ...subscription,\n selected: selectedPurchaseOptionType === 'subscription',\n plans: subscription.plans.map((plan) => ({\n ...plan,\n selected: selectedPlan ? plan.id === selectedPlan.id : false,\n })),\n };\n }\n\n return Object.keys(purchaseOptions).length > 0 ? purchaseOptions : null;\n}\n\nfunction getSelectedPurchaseOptionType(\n product: SwellProduct,\n queryParams: SwellData,\n): string | null {\n const { purchase_options: purchaseOptions } = product;\n\n if (!purchaseOptions) {\n return null;\n }\n\n const { purchase_option: purchaseOption } = queryParams as {\n purchase_option?: { type: string };\n };\n const purchaseOptionType = purchaseOption?.type;\n\n if (purchaseOptionType && purchaseOptionType in purchaseOptions) {\n return purchaseOptionType;\n }\n\n return purchaseOptions.standard ? 'standard' : 'subscription';\n}\n\nfunction getSelectedSubscriptionPurchaseOptionPlan(\n selectedPurchaseOptionType: string | null,\n subscriptionPurchaseOption: SwellProductPurchaseOptionSubscription,\n queryParams: SwellData,\n): SwellSubscriptionPlan | null {\n if (selectedPurchaseOptionType !== 'subscription') {\n return null;\n }\n\n const { purchase_option: purchaseOption } = queryParams as {\n purchase_option?: { plan_id?: string };\n };\n let selectedPlan = null;\n\n if (purchaseOption?.plan_id) {\n selectedPlan = subscriptionPurchaseOption.plans.find(\n (plan) => plan.id === purchaseOption.plan_id,\n );\n }\n\n return selectedPlan || subscriptionPurchaseOption.plans[0];\n}\n\nconst SORT_OPTIONS = Object.freeze<SwellSortOption[]>([\n { value: 'manual', name: 'Featured' },\n { value: 'popularity', name: 'Popularity', query: 'popularity desc' },\n { value: 'price_asc', name: 'Price, low to high', query: 'price asc' },\n { value: 'price_desc', name: 'Price, high to low', query: 'price desc' },\n { value: 'date_asc', name: 'Date, old to new', query: 'date_created asc' },\n { value: 'date_desc', name: 'Date, new to old', query: 'date_created desc' },\n { value: 'name_asc', name: 'Product name, A-Z', query: 'name asc' },\n { value: 'name_desc', name: 'Product name, Z-A', query: 'name desc' },\n]);\n\nexport async function getProductFilters(\n swell: Swell,\n productQuery?: SwellData,\n) {\n const sortBy = swell.queryParams.sort || 'manual';\n const filterQuery = productQueryWithFilters(swell, productQuery);\n\n return {\n filter_options: await getProductFiltersByQuery(swell, filterQuery),\n sort: SORT_OPTIONS.find((option) => option.value === sortBy)?.value,\n sort_options: [...SORT_OPTIONS],\n };\n}\n\nasync function getProductFiltersByQuery(\n swell: Swell,\n query: SwellData = {},\n): Promise<SwellProductFilter[]> {\n const filters =\n (await swell.get<SwellProductFilter[]>('/products/:filters', {\n ...query,\n sort: undefined,\n })) || [];\n\n if (!Array.isArray(filters)) {\n throw new Error('Product filters must be an array');\n }\n\n for (const filter of filters) {\n filter.param_name = `filter_${filter.id}`;\n\n if (Array.isArray(filter.options)) {\n filter.active_options = [];\n filter.inactive_options = [];\n\n // Option `active` state\n for (const option of filter.options) {\n const queryValue = swell.queryParams[filter.param_name];\n\n option.active = Array.isArray(queryValue)\n ? (queryValue as unknown[]).includes(option.value)\n : queryValue === option.value;\n\n // Active/inactive options\n const list = option.active\n ? filter.active_options\n : filter.inactive_options;\n\n list.push(option);\n }\n }\n }\n\n return filters;\n}\n\nexport function productQueryWithFilters(swell: Swell, query?: SwellData) {\n const filters = Object.keys(swell.queryParams).reduce(\n (acc: Record<string, unknown>, key) => {\n if (key.startsWith('filter_')) {\n const qkey = key.replace('filter_', '');\n const value = swell.queryParams[key];\n\n if (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n (value.gte !== undefined || value.lte !== undefined)\n ) {\n acc[qkey] = [value.gte || 0, value.lte || undefined];\n } else {\n acc[qkey] = value;\n }\n }\n\n return acc;\n },\n {},\n );\n\n const sortBy = swell.queryParams.sort || 'manual';\n\n return {\n sort:\n SORT_OPTIONS.find((option) => option.value === sortBy)?.query ||\n undefined,\n $filters: filters,\n ...query,\n };\n}\n", "import { SwellStorefrontRecord } from '@/resources';\n\nimport { getProductFilters } from './product_helpers';\n\nimport type { Swell } from '@/api';\nimport type { SwellData } from 'types/swell';\nimport type { SwellCategory as SwellCategoryType } from './swell_types';\n\nexport default class SwellCategory extends SwellStorefrontRecord<SwellCategoryType> {\n constructor(swell: Swell, id: string, query?: SwellData) {\n super(swell, 'categories', id, query, async function () {\n let category = await this._defaultGetter().call(this);\n\n if (!category && this._id === 'all') {\n category = {\n name: 'Products',\n id: 'all',\n slug: 'all',\n filter_options: [],\n sort_options: [],\n };\n }\n\n if (!category) {\n return null; // Not found\n }\n\n const productFilters = await getProductFilters(\n this._swell,\n category.id !== 'all'\n ? { category: category.id, $variants: true }\n : { $variants: true },\n );\n\n Object.assign(category, productFilters);\n\n return category;\n });\n\n return this._getProxy();\n }\n}\n", "import { SwellStorefrontCollection } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellData } from 'types/swell';\nimport type { SwellCategory, SwellProduct } from './swell_types';\n\nexport default class SwellCategories extends SwellStorefrontCollection<SwellCategory> {\n constructor(swell: Swell, query?: SwellData) {\n super(\n swell,\n 'categories',\n {\n limit: 100,\n top_id: null,\n ...query,\n },\n async function () {\n const categories = await this._defaultGetter().call(this);\n\n if (!categories) {\n return null;\n }\n\n for (const category of categories.results) {\n category.products = new SwellStorefrontCollection<SwellProduct>(\n this._swell,\n 'products',\n { category: category.id },\n );\n }\n\n return categories;\n },\n );\n }\n}\n", "import { SwellStorefrontRecord } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellOrder as SwellOrderType } from './swell_types';\nimport type { SwellData } from 'types/swell';\n\nexport default class SwellOrder extends SwellStorefrontRecord<SwellOrderType> {\n constructor(swell: Swell, id: string, query?: SwellData) {\n super(swell, 'accounts:orders', id, query, function () {\n return this._swell.storefront.account.getOrder(this._id);\n });\n\n return this._getProxy();\n }\n}\n", "import { SwellStorefrontRecord } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellData } from 'types/swell';\nimport type { SwellPage as SwellPageType } from './swell_types';\n\nexport default class SwellPage extends SwellStorefrontRecord<SwellPageType> {\n constructor(swell: Swell, id: string, query?: SwellData) {\n super(swell, 'content/pages', id, query);\n\n return this._getProxy();\n }\n}\n", "import { StorefrontResource, SwellStorefrontCollection } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type {\n SwellPredictiveSearch as SwellPredictiveSearchType,\n SwellProduct,\n} from './swell_types';\n\nexport default class SwellPredictiveSearch extends StorefrontResource<SwellPredictiveSearchType> {\n constructor(swell: Swell, query?: string) {\n super(async function () {\n const performed = String(query || '').length > 0;\n\n let products;\n if (performed) {\n products = new SwellStorefrontCollection<SwellProduct>(\n swell,\n 'products',\n {\n search: query,\n limit: 10,\n },\n );\n\n await products.resolve();\n }\n\n return {\n query,\n performed,\n products,\n };\n });\n }\n}\n", "import { SwellStorefrontRecord } from '@/resources';\nimport { getSelectedVariantOptionValues } from './product_helpers';\n\nimport type { Swell } from '@/api';\nimport type {\n SwellProduct,\n SwellVariant as SwellVariantType,\n} from './swell_types';\nimport type { SwellData } from 'types/swell';\n\nexport function transformSwellVariant(\n params: SwellData,\n product: SwellProduct,\n variant: SwellVariantType,\n): SwellVariantType {\n if (!product) {\n return product;\n }\n\n if (!variant) {\n return variant;\n }\n\n return {\n ...variant,\n // add swell properties there\n selected_option_values: getSelectedVariantOptionValues(\n product,\n params,\n variant,\n ),\n };\n}\n\nexport default class SwellVariant extends SwellStorefrontRecord<SwellVariantType> {\n public product: SwellStorefrontRecord<SwellProduct>;\n\n constructor(\n swell: Swell,\n product: SwellStorefrontRecord<SwellProduct>,\n id: string,\n query?: SwellData,\n ) {\n // current search parameters\n const params = swell.queryParams;\n\n super(swell, 'products:variants', id, query, async function () {\n const variant = await this._swell.get<SwellVariantType>(\n '/products:variants/:last',\n { $or: [{ id: this._id }, { sku: this._id }] },\n );\n\n // add swell properties to the resolved object\n return transformSwellVariant(\n params,\n product instanceof SwellStorefrontRecord\n ? ((await product.resolve()) as SwellProduct)\n : product,\n variant as SwellVariantType,\n );\n });\n\n this.product = product;\n }\n}\n", "import { SwellStorefrontRecord } from '@/resources';\n\nimport {\n getSelectedVariantOptionValues,\n getPurchaseOptions,\n} from './product_helpers';\n\nimport { transformSwellVariant } from './variant';\n\nimport type { Swell } from '@/api';\nimport type { SwellData } from 'types/swell';\nimport type { SwellProduct as SwellProductType } from './swell_types';\n\nfunction transformSwellProduct(\n params: SwellData,\n product: SwellProductType | null,\n): SwellProductType | null {\n if (!product) {\n return null;\n }\n\n const newProduct: SwellProductType = {\n ...product,\n // add swell properties there\n selected_option_values: getSelectedVariantOptionValues(product, params),\n purchase_options: getPurchaseOptions(product, params) ?? undefined,\n };\n\n // transform the variants. we always load variants as part of the product\n // when we apply shopify compatibility to a variant, it will be applied to the modified object with swell properties\n if (Array.isArray(newProduct.variants?.results)) {\n newProduct.variants = {\n ...newProduct.variants,\n results: newProduct.variants.results.map((variant) =>\n transformSwellVariant(params, product, variant),\n ),\n };\n }\n\n return newProduct;\n}\n\nexport default class SwellProduct extends SwellStorefrontRecord<SwellProductType> {\n constructor(swell: Swell, id: string, query?: SwellData) {\n // current search parameters\n const params = swell.queryParams;\n\n super(swell, 'products', id, query, async function () {\n const result = await this._defaultGetter().call(this);\n\n // add swell properties to the resolved object\n return transformSwellProduct(params, result);\n });\n\n return this._getProxy();\n }\n}\n", "import { StorefrontResource } from '@/resources';\n\nimport { getProductFilters } from './product_helpers';\n\nimport type { Swell } from '@/api';\nimport type { SwellSearch as SwellSearchType } from './swell_types';\n\nexport default class SwellSearch extends StorefrontResource<SwellSearchType> {\n constructor(swell: Swell, query?: string) {\n super(async () => {\n const performed = String(query || '').length > 0;\n\n const productFilters = await getProductFilters(\n swell,\n performed ? { search: query } : undefined,\n );\n\n return {\n query,\n performed,\n ...productFilters,\n };\n });\n }\n}\n", "import { SwellStorefrontRecord } from '@/resources';\n\nimport type { Swell } from '@/api';\nimport type { SwellSubscription as SwellSubscriptionType } from './swell_types';\nimport type { SwellData } from 'types/swell';\n\nexport default class SwellSubscription extends SwellStorefrontRecord<SwellSubscriptionType> {\n constructor(swell: Swell, id: string, query?: SwellData) {\n super(swell, 'accounts:subscriptions', id, query, function () {\n return this._swell.storefront.subscriptions.get(this._id, this._query);\n });\n }\n}\n", "import SwellAccount from './account';\nimport SwellAddresses from './addresses';\nimport SwellBlog from './blog';\nimport SwellBlogCategory from './blog_category';\nimport SwellCart from './cart';\nimport SwellCategory from './category';\nimport SwellCategories from './categories';\nimport SwellOrder from './order';\nimport SwellOrders from './orders';\nimport SwellPage from './page';\nimport SwellPredictiveSearch from './predictive_search';\nimport SwellProduct from './product';\nimport SwellSearch from './search';\nimport SwellSubscription from './subscription';\nimport SwellSubscriptions from './subscriptions';\nimport SwellVariant from './variant';\n\nexport class AccountResource extends SwellAccount {}\nexport class AccountAddressesResource extends SwellAddresses {}\nexport class BlogResource extends SwellBlog {}\nexport class BlogCategoryResource extends SwellBlogCategory {}\nexport class CartResource extends SwellCart {}\nexport class CategoryResource extends SwellCategory {}\nexport class CategoriesResource extends SwellCategories {}\nexport class AccountOrderResource extends SwellOrder {}\nexport class AccountOrdersResource extends SwellOrders {}\nexport class PageResource extends SwellPage {}\nexport class PredictiveSearchResource extends SwellPredictiveSearch {}\nexport class ProductResource extends SwellProduct {}\nexport class SearchResource extends SwellSearch {}\nexport class AccountSubscriptionResource extends SwellSubscription {}\nexport class AccountSubscriptionsResource extends SwellSubscriptions {}\nexport class VariantResource extends SwellVariant {}\n", "import {\n type Swell,\n SwellStorefrontCollection,\n SwellStorefrontRecord,\n} from './api';\n\nimport type { SwellData } from 'types/swell';\n\nexport function getContentModel(\n swell: Swell,\n name: string,\n): Promise<SwellData | undefined> {\n return swell.getCachedResource(`content-model-${name}`, [], () =>\n swell.get('/:content/{name}', {\n name,\n public: true,\n 'storefront.enabled': true,\n }),\n );\n}\n\nexport function getContentList(\n swell: Swell,\n type: string,\n query?: SwellData,\n): SwellStorefrontCollection<SwellData> {\n return new SwellStorefrontCollection(swell, `content/${type}`, query);\n}\n\nexport function getContentEntry(\n swell: Swell,\n type: string,\n id: string,\n query?: SwellData,\n): SwellStorefrontRecord<SwellData> {\n return new SwellStorefrontRecord(swell, `content/${type}`, id, query);\n}\n\nexport function getPage(\n swell: Swell,\n id: string,\n query?: object,\n): SwellStorefrontRecord<SwellData> {\n return getContentEntry(swell, 'pages', id, query);\n}\n\nexport function getBlogs(\n swell: Swell,\n query?: SwellData,\n): SwellStorefrontCollection<SwellData> {\n return getContentList(swell, 'blogs', query);\n}\n\nexport function getBlog(\n swell: Swell,\n id: string,\n query?: object,\n): SwellStorefrontRecord<SwellData> {\n return getContentEntry(swell, 'blogs', id, query);\n}\n", "import JSON5 from 'json5';\nimport { reduce, set } from 'lodash-es';\nimport ShopifyTemplate from '@/compatibility/shopify-objects/template';\n\nimport { SECTION_GROUP_CONTENT, getSectionGroupProp } from '../utils';\n\nimport {\n schemaToEasyblocksProps,\n schemaToEasyblocksValue,\n toEasyblocksFieldId,\n} from './utils';\n\nimport type {\n Backend,\n Document,\n ExternalSchemaProp,\n InternalTemplate,\n NoCodeComponentDefinition,\n NoCodeComponentEntry,\n SchemaProp,\n UserDefinedTemplate,\n} from '@swell/easyblocks-core';\n\nimport type { SwellTheme } from '../theme';\n\nimport type {\n SwellData,\n SwellThemeConfig,\n ThemeGlobals,\n ThemeLayoutSectionGroupConfig,\n ThemePageSectionSchema,\n ThemeSectionConfig,\n ThemeSectionEnabledDisabled,\n ThemeSettingFieldSchema,\n} from 'types/swell';\n\n// By default, Easyblocks wraps each section in a SelectionFrameController.\n// This wrapper interferes with CSS styles, and it is not needed,\n// as the Swell Theme Editor has its own logic for sections/blocks.\n// noInline=true disables the Easyblocks SelectionFrameController.\nconst NO_INLINE = true;\n\nexport async function getEasyblocksPageTemplate<T>(\n theme: SwellTheme,\n pageId: string,\n altTemplate?: string,\n): Promise<T | string | undefined> {\n let templateConfig: SwellThemeConfig | null = null;\n\n let templateData = {\n name: pageId,\n } as SwellData;\n\n if (theme.shopifyCompatibility) {\n templateData = ShopifyTemplate(theme.shopifyCompatibility, templateData);\n }\n\n const { name } = templateData;\n\n templateConfig = await theme.getThemeTemplateConfigByType(\n 'templates',\n name as string,\n altTemplate,\n );\n\n if (templateConfig) {\n let result = templateConfig.file_data;\n if (!templateConfig.file_path.endsWith('.liquid')) {\n try {\n result = JSON5.parse<string>(templateConfig.file_data);\n } catch {\n // use templateConfig.file_data\n }\n }\n\n if (result && typeof result === 'object') {\n (result as { id: string }).id = name as string;\n }\n\n return result;\n }\n}\n\nfunction getAcceptedLayoutSections(\n allSections: ThemePageSectionSchema[],\n groupType: string,\n): string[] {\n return allSections.reduce((acc: string[], section) => {\n if (section.enabled_on) {\n if (checkEnabledDisabledOn(section.enabled_on, 'groups', groupType)) {\n acc.push(String(section.id));\n }\n } else if (section.disabled_on) {\n if (!checkEnabledDisabledOn(section.disabled_on, 'groups', groupType)) {\n acc.push(String(section.id));\n }\n } else {\n // Default to section of the same type name\n // Note: limit is also supposed to be 1 for sections named after group types\n if (section.id === groupType) {\n acc.push(String(section.id));\n }\n }\n return acc;\n }, []);\n}\n\nfunction getLayoutSectionGroupComponentProps(\n allSections: ThemePageSectionSchema[],\n layoutSectionGroups: ThemeLayoutSectionGroupConfig[],\n): SchemaProp[] {\n return layoutSectionGroups.map<SchemaProp>((sectionGroup) => ({\n prop: getSectionGroupProp(sectionGroup.id),\n type: 'component-collection',\n label: sectionGroup.label,\n required: true,\n noInline: NO_INLINE,\n accepts: getAcceptedLayoutSections(allSections, sectionGroup.type),\n }));\n}\n\nfunction checkEnabledDisabledOn(\n config: ThemeSectionEnabledDisabled,\n key: 'groups' | 'templates',\n targetId: string,\n): boolean {\n if (config.templates === '*') {\n return true;\n }\n\n if (config[key]?.includes(targetId)) {\n return true;\n }\n\n return false;\n}\n\nfunction getAcceptedSections(\n allSections: ThemePageSectionSchema[],\n layoutSectionGroups: ThemeLayoutSectionGroupConfig[],\n pageId: string,\n): string[] {\n return allSections.reduce<string[]>((acc, section) => {\n if (section.enabled_on) {\n if (checkEnabledDisabledOn(section.enabled_on, 'templates', pageId)) {\n acc.push(String(section.id));\n }\n } else if (section.disabled_on) {\n if (!checkEnabledDisabledOn(section.disabled_on, 'templates', pageId)) {\n acc.push(String(section.id));\n }\n } else {\n // Default hide sections named after layout section group types\n if (!layoutSectionGroups.some(({ type }) => type === section.id)) {\n acc.push(String(section.id));\n }\n }\n return acc;\n }, []);\n}\n\nfunction getEditorSchemaComponentProps(\n themeGlobals: ThemeGlobals,\n): SchemaProp[] {\n return (themeGlobals?.configs?.editor?.settings ?? []).reduce<SchemaProp[]>(\n (acc, settingGroup) => {\n for (const field of settingGroup.fields || []) {\n acc.push({\n prop: toEasyblocksFieldId(field.id),\n label: field.label,\n optional: true,\n group: settingGroup.label,\n ...schemaToEasyblocksProps(field),\n });\n }\n\n return acc;\n },\n [],\n );\n}\n\nfunction getAllSectionComponents(\n allSections: ThemePageSectionSchema[],\n): NoCodeComponentDefinition[] {\n const list: NoCodeComponentDefinition[] = [];\n\n for (const section of allSections) {\n const hasBlocks =\n Array.isArray(section.blocks) && section.blocks.length > 0;\n\n list.push({\n id: section.id,\n label: section.label,\n schema: [\n ...(section.fields || []).reduce<ExternalSchemaProp[]>(\n (acc, field, currentIndex) => {\n if (field.type) {\n // generate missed field id\n const fieldId = field.id || `${field.type}_${currentIndex}`;\n\n acc.push({\n prop: toEasyblocksFieldId(fieldId),\n label: field.label,\n optional: true,\n ...schemaToEasyblocksProps(field),\n });\n }\n\n return acc;\n },\n [],\n ),\n ...(hasBlocks\n ? [\n {\n prop: 'Blocks',\n type: 'component-collection',\n required: true,\n noInline: NO_INLINE,\n accepts: (section.blocks || []).map(\n (block) => `Block__${section.id}__${block.type}`,\n ),\n // TODO: figure out how to make this work, doesn't work for collections normally\n defaultValue: section.presets?.reduce<NoCodeComponentEntry[]>(\n (acc, preset, index) => {\n if (!preset.blocks || !Array.isArray(preset.blocks)) {\n return acc;\n }\n\n return preset.blocks.reduce<NoCodeComponentEntry[]>(\n (acc, block) => {\n const blockDef = section.blocks?.find(\n ({ type }) => type === block.type,\n );\n\n if (blockDef) {\n acc.push({\n _id: `Block__${section.id}__${block.type}__preset_${index}`,\n _component: `Block__${section.id}__${block.type}`,\n ...reduce(\n blockDef.fields,\n (acc, blockField) => {\n if (blockField.id) {\n acc[blockField.id] = schemaToEasyblocksValue(\n blockDef.fields,\n blockField.id,\n blockField.default,\n );\n }\n\n return acc;\n },\n {} as Record<string, unknown>,\n ),\n });\n }\n\n return acc;\n },\n acc,\n );\n },\n [],\n ),\n placeholderAppearance: {\n height: 50,\n label: 'Add block',\n aspectRatio: 1,\n },\n } as ExternalSchemaProp,\n ]\n : []),\n {\n prop: 'custom_css',\n type: 'swell_css',\n label: 'Custom CSS',\n description: 'Add custom CSS for this section',\n layout: 'column',\n isLabelHidden: true,\n params: {\n rows: 5,\n placeholder: 'Enter custom CSS...',\n },\n } as ExternalSchemaProp,\n {\n prop: '$locale',\n type: 'swell_locale',\n isLabelHidden: true,\n },\n ],\n styles: () => {\n return {\n styled: {\n Root: {},\n },\n };\n },\n });\n\n if (hasBlocks) {\n list.push(\n ...(section.blocks || []).map<NoCodeComponentDefinition>((block) => ({\n id: `Block__${section.id}__${block.type}`,\n label: block.label,\n schema: (block.fields || []).reduce<SchemaProp[]>(\n (acc, field, currentIndex) => {\n if (field.type) {\n // generate missed field id\n const fieldId = field.id || `${field.type}_${currentIndex}`;\n\n acc.push({\n prop: toEasyblocksFieldId(fieldId),\n label: field.label,\n optional: true,\n ...schemaToEasyblocksProps(field),\n });\n }\n\n return acc;\n },\n [\n {\n prop: '$locale',\n type: 'swell_locale',\n isLabelHidden: true,\n },\n ],\n ),\n styles: () => {\n return {\n styled: {\n Root: {},\n },\n };\n },\n })),\n );\n }\n }\n\n return list;\n}\n\nfunction getEditorSchemaTemplateValues(\n themeGlobals: ThemeGlobals,\n): Partial<NoCodeComponentEntry> | undefined {\n return themeGlobals?.configs?.editor?.settings?.reduce(\n (acc, settingGroup) => {\n for (const field of settingGroup.fields || []) {\n if (field?.id) {\n acc[field.id] = schemaToEasyblocksValue(\n settingGroup.fields,\n field.id,\n themeGlobals?.configs?.theme?.[field.id],\n );\n }\n }\n return acc;\n },\n {} as Partial<NoCodeComponentEntry>,\n );\n}\n\nfunction getLayoutSectionGroupTemplateValues(\n layoutSectionGroups: ThemeLayoutSectionGroupConfig[],\n): Record<string, NoCodeComponentEntry[]> {\n return layoutSectionGroups.reduce(\n (acc, sectionGroup) => {\n acc[getSectionGroupProp(sectionGroup.id)] =\n sectionGroup.sectionConfigs.map<NoCodeComponentEntry>(\n ({ section, settings, schema }) => ({\n _id: `SectionGroup__${section.type}_${getRandomId()}`,\n _component: section.type,\n ...reduce(\n settings?.section.settings,\n (acc, value, key) => {\n acc[key] = schemaToEasyblocksValue(schema?.fields, key, value);\n return acc;\n },\n {} as Record<string, unknown>,\n ),\n custom_css: settings?.section['custom_css'] || '',\n ...(settings?.section.blocks\n ? {\n Blocks: settings.section.blocks.map<NoCodeComponentEntry>(\n (block) => ({\n _id: `Block__${section.type}__${block.type}_${getRandomId()}`,\n _component: `Block__${section.type}__${block.type}`,\n ...reduce(\n block.settings,\n (acc, value, key) => {\n acc[key] = schemaToEasyblocksValue(\n schema?.blocks?.find(\n ({ type }) => type === block.type,\n )?.fields,\n key,\n value,\n );\n\n return acc;\n },\n {} as Record<string, unknown>,\n ),\n }),\n ),\n }\n : undefined),\n }),\n );\n\n return acc;\n },\n {} as Record<string, NoCodeComponentEntry[]>,\n );\n}\n\nfunction prepareSectionId(id?: string): string {\n // we can't use / in script selectors\n return (id || '').replaceAll('/', '_');\n}\n\nfunction getAllSectionComponentTemplates(\n allSections: ThemePageSectionSchema[],\n): InternalTemplate[] {\n const list: InternalTemplate[] = [];\n\n // Helper to convert fields + $locale into easyblocks object\n const processFields = (\n fields: ThemeSettingFieldSchema[],\n settings: Record<string, unknown> = {},\n ): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n\n for (const field of fields) {\n if (!field?.id) {\n continue;\n }\n\n const { id: fieldId, $locale } = field;\n\n // Convert field to easyblocks value\n result[fieldId] = schemaToEasyblocksValue(\n fields,\n fieldId,\n settings[fieldId],\n );\n\n // Add localized values to $locale\n if ($locale) {\n for (const [locale, localeValues] of Object.entries($locale)) {\n const defaultValue = localeValues?.default;\n\n if (defaultValue) {\n set(result, `$locale.${locale}.${fieldId}`, defaultValue);\n }\n }\n }\n }\n\n return result;\n };\n\n for (const section of allSections) {\n // Process section presets\n if (section.presets) {\n for (let index = 0; index < section.presets.length; index++) {\n const preset = section.presets[index];\n\n const entry: InternalTemplate['entry'] = {\n _id: `${section.id}__preset_${index}`,\n _component: section.id,\n custom_css: (preset.settings?.['custom_css'] || '') as string,\n ...processFields(section.fields, preset.settings),\n // Process blocks inside the preset\n Blocks: (Array.isArray(preset.blocks) ? preset.blocks : [])\n .map((block) => {\n const blockSchema = section.blocks?.find(\n ({ type }) => type === block.type,\n );\n\n if (!blockSchema) {\n return null;\n }\n\n return {\n _id: `Block__${section.id}__${block.type}__preset_${index}`,\n _component: `Block__${section.id}__${block.type}`,\n ...processFields(blockSchema.fields, block.settings),\n };\n })\n .filter(Boolean) as NoCodeComponentEntry[],\n };\n\n list.push({\n id: `${section.id}__preset_${index}`,\n entry,\n });\n }\n }\n\n // Process standalone blocks\n if (section.blocks) {\n for (const block of section.blocks) {\n list.push({\n id: `Block__${section.id}__${block.type}`,\n entry: {\n _id: `Block__${section.id}__${block.type}`,\n _component: `Block__${section.id}__${block.type}`,\n ...processFields(\n block.fields,\n block.fields.reduce<Record<string, unknown>>((acc, f) => {\n if (f.id) acc[f.id] = f.default;\n return acc;\n }, {}),\n ),\n },\n });\n }\n }\n }\n\n return list;\n}\n\nexport function getEasyblocksPagePropsWithConfigs(\n themeGlobals: ThemeGlobals,\n allSections: ThemePageSectionSchema[],\n pageSections: ThemeSectionConfig[],\n layoutSectionGroups: ThemeLayoutSectionGroupConfig[],\n pageId: string,\n) {\n const rootComponent: NoCodeComponentDefinition = {\n id: 'swell_global',\n // label: 'Page: ' + pageId,\n label: 'Theme settings',\n schema: [\n {\n prop: 'swell_page',\n type: 'component',\n required: true,\n accepts: ['swell_page'],\n isNonChangable: true,\n noInline: NO_INLINE,\n },\n {\n prop: '$locale',\n type: 'swell_locale',\n isLabelHidden: true,\n },\n ...getEditorSchemaComponentProps(themeGlobals),\n ],\n // Collapse all global page settings\n groups: (themeGlobals?.configs?.editor?.settings ?? []).map(\n (settingGroup) => {\n return {\n key: settingGroup.label,\n label: settingGroup.label,\n collapsable: true,\n collapsed: true,\n };\n },\n ),\n styles: () => {\n return {\n styled: {\n Root: {},\n },\n };\n },\n };\n\n const pageComponent: NoCodeComponentDefinition = {\n id: 'swell_page',\n // label: 'Page: ' + pageId,\n label: 'Page settings',\n schema: [\n {\n prop: SECTION_GROUP_CONTENT,\n type: 'component-collection',\n required: true,\n noInline: NO_INLINE,\n accepts: getAcceptedSections(allSections, layoutSectionGroups, pageId),\n placeholderAppearance: {\n height: 250,\n label: 'Add section',\n aspectRatio: 1,\n },\n } as ExternalSchemaProp,\n ...getLayoutSectionGroupComponentProps(allSections, layoutSectionGroups),\n ],\n\n allowSave: true,\n styles: () => {\n return {\n styled: {\n Root: {},\n },\n };\n },\n };\n\n const components: NoCodeComponentDefinition[] = [\n rootComponent,\n pageComponent,\n ...getAllSectionComponents(allSections),\n ];\n\n const colorSchemeGroup = rootComponent.schema.find(\n (field) => field.prop === 'color_schemes',\n );\n\n if (colorSchemeGroup) {\n const params = (colorSchemeGroup as ExternalSchemaProp)\n .params as unknown as ThemeSettingFieldSchema;\n\n const { fields = [] } = params;\n\n components.push({\n id: 'swell_color_scheme_group',\n label: 'Swell color scheme',\n schema: fields.map<ExternalSchemaProp>((field) => ({\n prop: toEasyblocksFieldId(field.id),\n label: field.label,\n optional: true,\n ...schemaToEasyblocksProps({\n ...field,\n type: field.id === 'background_gradient' ? 'text' : field.type,\n }),\n })),\n styles() {\n return {\n styled: {\n Root: {},\n },\n };\n },\n });\n }\n\n const componentSet = new Set<string>();\n for (const component of components) {\n componentSet.add(component.id);\n }\n\n const templates: InternalTemplate[] = [\n // TODO: add templates for all other components (sections) with preset setting defaults\n {\n id: 'swell_global',\n entry: {\n _id: 'swell_global',\n _component: 'swell_global',\n ...getEditorSchemaTemplateValues(themeGlobals),\n $locale: themeGlobals?.configs?.theme?.$locale as string,\n swell_page: [\n {\n _id: 'swell_page',\n _component: 'swell_page',\n [SECTION_GROUP_CONTENT]: pageSections\n .filter((config) => componentSet.has(config.section.type))\n .map<NoCodeComponentEntry>(({ section, settings, schema }) => ({\n _id: prepareSectionId(section.id),\n _component: section.type,\n custom_css: settings?.section?.custom_css || '',\n disabled: settings?.section?.disabled || false,\n $locale: settings?.section?.settings?.$locale as string,\n ...reduce(\n schema?.fields,\n (acc, field) => {\n if (field?.id) {\n acc[field.id] = schemaToEasyblocksValue(\n schema?.fields,\n field.id,\n settings?.section?.settings?.[field.id],\n );\n }\n\n return acc;\n },\n {} as Record<string, unknown>,\n ),\n ...(section?.blocks\n ? {\n Blocks: Object.entries(section.blocks).map(\n ([key, block]): NoCodeComponentEntry => {\n return {\n _id: `Block__${key}__${block.type}_${Math.random()}`,\n _component: `Block__${section.type}__${block.type}`,\n disabled: block.disabled || false,\n ...reduce(\n block.settings,\n (acc, value, key) => {\n acc[key] = schemaToEasyblocksValue(\n schema?.blocks?.find(\n ({ type }) => type === block.type,\n )?.fields,\n key,\n value,\n );\n\n return acc;\n },\n {} as Record<string, unknown>,\n ),\n };\n },\n ),\n }\n : undefined),\n })),\n ...getLayoutSectionGroupTemplateValues(layoutSectionGroups),\n },\n ],\n },\n },\n {\n id: 'swell_page',\n entry: {\n _id: 'swell_page',\n _component: 'swell_page',\n },\n },\n ...getAllSectionComponentTemplates(allSections),\n ];\n\n return {\n easyblocksConfig: {\n components,\n templates,\n backend: getEasyblocksBackend(),\n hideCloseButton: true,\n allowSave: true,\n readOnly: false,\n locales: [\n {\n code: 'en-US',\n isDefault: true,\n },\n ],\n types: {\n swell_css: {\n type: 'inline',\n widget: {\n id: 'SwellCSS',\n },\n },\n swell_locale: {\n type: 'inline',\n widget: {\n id: 'SwellLocale',\n },\n },\n swell_boolean: {\n type: 'inline',\n widget: {\n id: 'SwellBoolean',\n },\n },\n swell_color: {\n type: 'inline',\n widget: {\n id: 'SwellColor',\n },\n },\n swell_color_scheme: {\n type: 'inline',\n widget: {\n id: 'SwellColorScheme',\n },\n },\n swell_color_scheme_group: {\n type: 'inline',\n widget: {\n id: 'SwellColorSchemeGroup',\n },\n },\n swell_font: {\n type: 'inline',\n widget: {\n id: 'SwellFont',\n },\n },\n swell_header: {\n type: 'inline',\n widget: {\n id: 'SwellHeader',\n },\n },\n swell_icon: {\n type: 'inline',\n widget: {\n id: 'SwellIcon',\n },\n },\n swell_lookup: {\n type: 'inline',\n widget: {\n id: 'SwellLookup',\n },\n },\n swell_menu: {\n type: 'inline',\n widget: {\n id: 'SwellMenu',\n },\n },\n swell_url: {\n type: 'inline',\n widget: {\n id: 'SwellUrl',\n },\n },\n swell_number: {\n type: 'inline',\n widget: {\n id: 'SwellNumber',\n },\n },\n swell_select: {\n type: 'inline',\n widget: {\n id: 'SwellSelect',\n },\n },\n swell_radio: {\n type: 'inline',\n widget: {\n id: 'SwellRadio',\n },\n },\n swell_short_text: {\n type: 'inline',\n widget: {\n id: 'SwellText',\n },\n },\n swell_long_text: {\n type: 'inline',\n widget: {\n id: 'SwellTextarea',\n },\n },\n swell_paragraph: {\n type: 'inline',\n widget: {\n id: 'SwellParagraph',\n },\n },\n swell_editor: {\n type: 'inline',\n widget: {\n id: 'SwellEditor',\n },\n },\n swell_file: {\n type: 'inline',\n widget: {\n id: 'SwellFile',\n },\n },\n swell_image: {\n type: 'inline',\n widget: {\n id: 'SwellImage',\n },\n },\n },\n tokens: {\n colors: [],\n fonts: [],\n },\n },\n };\n}\n\nexport function getEasyblocksComponentDefinitions(\n allSections: ThemePageSectionSchema[],\n layoutSectionGroups: ThemeLayoutSectionGroupConfig[],\n getComponent: (type: string, data?: unknown) => React.ComponentType,\n): Record<string, React.ComponentType> {\n const pageSectionComponents = allSections.reduce(\n (acc, section) => {\n acc[`${section.id}`] = getComponent('pageSection', section);\n return acc;\n },\n {} as Record<string, React.ComponentType>,\n );\n\n const layoutSectionGroupComponents = layoutSectionGroups.reduce(\n (acc, sectionGroup) => {\n acc[getSectionGroupProp(sectionGroup.id)] = getComponent(\n 'layoutSectionGroup',\n sectionGroup,\n );\n return acc;\n },\n {} as Record<string, React.ComponentType>,\n );\n\n const blockComponents = allSections.reduce(\n (acc, section) => {\n if (section.blocks) {\n for (const block of section.blocks) {\n const blockId = `Block__${section.id}__${block.type}`;\n acc[blockId] = getComponent('block', { section, block });\n }\n }\n return acc;\n },\n {} as Record<string, React.ComponentType>,\n );\n\n return {\n ...pageSectionComponents,\n ...layoutSectionGroupComponents,\n ...blockComponents,\n // Root component\n swell_page: getComponent('root'),\n swell_global: getComponent('global'),\n };\n}\n\nexport function getEasyblocksBackend() {\n // Only a mock backend for now\n const easyblocksBackend: Backend = {\n documents: {\n get({ id }) {\n console.log('Easyblocks backend documents.get()', id);\n const document = {\n id,\n version: 1,\n entry: {\n _id: 'page',\n _component: 'swell_page',\n },\n } as Document;\n return Promise.resolve(document);\n },\n create(payload) {\n console.log('Easyblocks backend documents.create()', payload);\n return Promise.resolve({} as Document);\n },\n update(payload) {\n console.log('Easyblocks backend documents.update()', payload);\n return Promise.resolve({} as Document);\n },\n },\n templates: {\n get(payload) {\n console.log('Easyblocks backend templates.get()', payload);\n return Promise.resolve({} as UserDefinedTemplate);\n },\n getAll() {\n console.log('Easyblocks backend get templates.getAll()');\n return Promise.resolve([] as UserDefinedTemplate[]);\n },\n create(payload) {\n console.log('Easyblocks backend get templates.create()', payload);\n return Promise.resolve({} as UserDefinedTemplate);\n },\n update(payload) {\n console.log('Easyblocks backend get templates.update()', payload);\n return Promise.resolve({} as UserDefinedTemplate);\n },\n delete(payload) {\n console.log('Easyblocks backend get templates.delete()', payload);\n return Promise.resolve();\n },\n },\n };\n\n return easyblocksBackend;\n}\n\nfunction getRandomId(): string {\n return (Math.random() + 1).toString(36).substring(7);\n}\n", "import { Drop } from 'liquidjs';\n\nimport type { ShopifyTemplate } from 'types/shopify';\n\nexport default class TemplateDrop extends Drop implements ShopifyTemplate {\n constructor(\n public name: ShopifyTemplate['name'],\n public directory?: string,\n public suffix?: string,\n ) {\n super();\n }\n\n valueOf() {\n return this.name;\n }\n}\n", "import TemplateDrop from '../drops/template';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellData } from 'types/swell';\nimport type { ShopifyTemplate } from 'types/shopify';\n\nexport default function ShopifyTemplate(\n instance: ShopifyCompatibility,\n template: SwellData,\n): ShopifyTemplate {\n return new TemplateDrop(\n instance.getPageType(template.name) as ShopifyTemplate['name'],\n template.path,\n template.alt_name,\n );\n}\n", "import { get } from 'lodash-es';\n\nimport { SwellTheme } from './theme';\nimport { SwellStorefrontRecord, SwellStorefrontCollection } from './api';\nimport { arrayToObject } from './utils';\n\nimport {\n SwellMenuItemType,\n type SwellMenu,\n type SwellMenuItem,\n} from '../types/swell';\n\nexport async function resolveMenuSettings(\n theme: SwellTheme,\n menus: SwellMenu[],\n options?: { currentUrl?: string },\n): Promise<Record<string, SwellMenu | undefined>> {\n const resolvedMenus = await Promise.all(\n menus?.map(async (menu): Promise<SwellMenu> => {\n const item: SwellMenu = {\n ...menu,\n items: await resolveMenuItems(theme, menu.items, options),\n };\n\n return item;\n }),\n );\n\n const compatibleMenus =\n resolvedMenus.map((menu) => {\n if (theme.shopifyCompatibility) {\n Object.assign(menu, theme.shopifyCompatibility.getMenuData(menu));\n }\n return menu;\n // todo set handle-based menu ids if set\n }) || [];\n\n return arrayToObject<SwellMenu>([\n ...compatibleMenus,\n // Add menus with id as handle for shopify compatibility\n ...(theme.shopifyCompatibility\n ? compatibleMenus.reduce<SwellMenu[]>((acc, menu) => {\n if (menu.handle) {\n acc.push({\n ...menu,\n id: menu.handle,\n });\n }\n\n return acc;\n }, [])\n : []),\n ]);\n}\n\nexport async function resolveMenuItems(\n theme: SwellTheme,\n menuItems: SwellMenuItem[],\n options?: { currentUrl?: string },\n): Promise<SwellMenuItem[]> {\n const hasMenuItems = menuItems?.length > 0;\n\n if (!hasMenuItems) {\n return [];\n }\n\n return Promise.all(\n menuItems.map(async (item) => {\n const { url, resource } = await resolveMenuItemUrlAndResource(\n theme,\n item,\n {\n trailingSlash:\n options?.currentUrl?.endsWith('/') && options.currentUrl !== '/',\n },\n );\n\n const childItems =\n item.items && (await resolveMenuItems(theme, item.items, options));\n\n return {\n ...item,\n url,\n resource,\n levels: countChildItemLevels(childItems),\n current: options?.currentUrl === url,\n active: options?.currentUrl?.startsWith(url),\n ...(childItems\n ? {\n items: childItems,\n child_current: isChildItemCurrent(childItems),\n child_active: isChildItemActive(childItems),\n }\n : undefined),\n };\n }),\n );\n}\n\nexport async function resolveMenuItemUrlAndResource(\n theme: SwellTheme,\n item: SwellMenuItem,\n options?: { trailingSlash?: boolean },\n): Promise<{\n url: string;\n resource?: SwellStorefrontRecord | SwellStorefrontCollection;\n}> {\n if (!item) return { url: '#invalid-link-item' };\n\n if (typeof item === 'object' && item !== null) {\n const { url: itemUrl, resource } = await getMenuItemUrlAndResource(\n theme,\n item,\n );\n\n let url = itemUrl;\n\n if (url.length > 1) {\n // Add/remove trailing slash\n const endsWithSlash = url.endsWith('/');\n\n if (options?.trailingSlash) {\n if (!endsWithSlash) {\n url = url + '/';\n }\n } else if (endsWithSlash) {\n url = url.slice(0, -1);\n }\n }\n\n return { url, resource }; // TODO wrap nuxt-i18n to generate localized path\n } else {\n // Treat item as complete URL\n return { url: item };\n }\n}\n\nfunction countChildItemLevels(items: SwellMenuItem[]): number {\n return (\n items?.reduce(\n (max, item) =>\n Math.max(max, item.items ? 1 + countChildItemLevels(item.items) : 0),\n 0,\n ) || 0\n );\n}\n\nfunction isChildItemCurrent(items: SwellMenuItem[]): boolean {\n return items.some(\n (item: SwellMenuItem) =>\n item.current || (item.items && isChildItemActive(item.items)),\n );\n}\n\nfunction isChildItemActive(items: SwellMenuItem[]): boolean {\n return items.some(\n (item: SwellMenuItem) =>\n item.active || (item.items && isChildItemActive(item.items)),\n );\n}\n\nexport function getMenuItemValueId(value: unknown): string {\n // Get slug from linked object slug or id, fall back to value itself\n const fallback = typeof value === 'string' ? value : '';\n const slug = get(value, 'id', get(value, 'slug', fallback)) || '';\n\n return slug;\n}\n\nexport async function getMenuItemUrlAndResource(\n theme: SwellTheme,\n menuItem: SwellMenuItem,\n): Promise<{\n url: string;\n resource?: SwellStorefrontRecord | SwellStorefrontCollection;\n}> {\n const { type, value, url, model } = menuItem;\n\n if (typeof type === 'undefined' && url) {\n return { url };\n }\n\n // Return URL value as-is\n if (type === SwellMenuItemType.Url) {\n return { url: typeof value === 'string' ? value : '' };\n }\n\n const id = getMenuItemValueId(value);\n\n // Build path based on content type of item\n switch (type) {\n case SwellMenuItemType.Home:\n return {\n url: getMenuItemStorefrontUrl(theme, 'index'),\n };\n\n case SwellMenuItemType.Category: {\n if (!id) {\n return {\n url: getMenuItemStorefrontUrl(theme, 'categories/index'),\n };\n }\n\n return deferMenuItemUrlAndResource(theme, 'categories/category', id);\n }\n\n case SwellMenuItemType.Product: {\n if (!id) {\n return {\n url: getMenuItemStorefrontUrl(theme, 'products/index'),\n };\n }\n\n return deferMenuItemUrlAndResource(theme, 'products/product', id);\n }\n\n case SwellMenuItemType.ProductList:\n return {\n url: getMenuItemStorefrontUrl(theme, 'products/index'),\n };\n\n case SwellMenuItemType.Page:\n return deferMenuItemUrlAndResource(theme, 'pages/page', id);\n\n case SwellMenuItemType.Blog:\n return deferMenuItemUrlAndResource(theme, 'blogs/blog', id, (blog) => {\n const blogCategory = new SwellStorefrontRecord(\n theme.swell,\n 'content/blog-categories',\n blog.category_id as string,\n );\n return blogCategory.slug as Promise<string>;\n });\n\n case SwellMenuItemType.BlogCategory:\n return deferMenuItemUrlAndResource(theme, 'blogs/category', id);\n\n case SwellMenuItemType.ContentList: {\n if (model) {\n const slug = model?.replace('content/', '');\n\n return {\n url: getMenuItemStorefrontUrl(theme, 'content/index', slug),\n resource: new SwellStorefrontCollection(theme.swell, model),\n };\n }\n\n break;\n }\n\n case SwellMenuItemType.Content: {\n if (model) {\n const collectionSlug = model?.replace('content/', '');\n\n return deferMenuItemUrlAndResource(\n theme,\n 'content/content',\n id,\n collectionSlug,\n );\n }\n\n break;\n }\n\n case SwellMenuItemType.Search:\n return {\n url: getMenuItemStorefrontUrl(theme, 'search'),\n };\n\n default:\n break;\n }\n\n return {\n url: `/${id}`,\n };\n}\n\nexport function getMenuItemStorefrontUrl(\n theme: SwellTheme,\n pageId: string,\n slug?: string,\n collectionSlug?: string,\n): string {\n // TODO: replace substitution logic with pathToRegexp\n\n const { props } = theme;\n let url = props?.pages?.find((page) => page.id === pageId)?.url;\n\n if (url?.includes(':collection') && collectionSlug) {\n url = url.replace(':collection', collectionSlug);\n }\n\n if (url?.includes(':slug')) {\n url = url.replace(':slug', slug || '');\n }\n\n return url || `/${slug || ''}`;\n}\n\nexport async function deferMenuItemUrlAndResource(\n theme: SwellTheme,\n pageId: string,\n id: string,\n collectionSlugOrHandler?:\n | string\n | ((resource: SwellStorefrontRecord) => Promise<string>),\n): Promise<{ url: string; resource?: SwellStorefrontRecord }> {\n const { props } = theme;\n\n const collection = props?.pages?.find(\n (page) => page.id === pageId,\n )?.collection;\n\n const resource = collection\n ? new SwellStorefrontRecord(theme.swell, collection, id)\n : undefined;\n\n const slug = ((await resource?.slug) as string) || id;\n\n let collectionSlug: string | undefined =\n typeof collectionSlugOrHandler === 'string'\n ? collectionSlugOrHandler\n : undefined;\n\n if (resource?.id && typeof collectionSlugOrHandler === 'function') {\n collectionSlug = await collectionSlugOrHandler(resource);\n }\n\n return {\n url: getMenuItemStorefrontUrl(\n theme,\n pageId,\n slug,\n typeof collectionSlug === 'string' ? collectionSlug : undefined,\n ),\n resource,\n };\n}\n", "import JSON5 from 'json5';\nimport { get, each, find, reduce, cloneDeep } from 'lodash-es';\n\nimport {\n Swell,\n StorefrontResource,\n SwellStorefrontCollection,\n SwellStorefrontRecord,\n SwellStorefrontSingleton,\n} from './api';\nimport { ShopifyCompatibility } from './compatibility/shopify';\nimport ShopifyTemplate from './compatibility/shopify-objects/template';\nimport ShopifyCart from './compatibility/shopify-objects/cart';\nimport ShopifyCustomer from './compatibility/shopify-objects/customer';\nimport RenderDrop from './liquid/drops/render';\nimport { GEO_DATA } from './constants';\nimport { LiquidSwell, ThemeColor, ThemeFont, ThemeForm } from './liquid';\nimport { resolveMenuSettings } from './menus';\nimport { ThemeLoader } from './theme/theme-loader';\nimport type { PutFilesResult } from './cache';\nimport {\n SECTION_GROUP_CONTENT,\n getSectionGroupProp,\n getAllSections,\n getPageSections,\n getLayoutSectionGroups,\n isObject,\n extractSettingsFromForm,\n scopeCustomCSS,\n getSectionLocation,\n} from './utils';\n\nimport { unescapeLiquidSyntax } from './utils/escape';\nimport { logger, createTraceId } from './utils/logger';\n\nimport {\n POWERED_BY_LINK,\n getRecordGlobals,\n getAllCountryOptionTags,\n getRobotsGlobals,\n} from './globals';\n\nimport type { FormatInput } from 'swell-js';\nimport type {\n ShopifySectionSchema,\n ShopifySettingsData,\n} from '../types/shopify';\nimport type {\n ThemeGlobals,\n ThemeConfigs,\n ThemeSettings,\n ThemeResources,\n ThemeFormConfig,\n ThemeInitGlobalsOptions,\n ThemeFormErrorMessages,\n ThemeLocaleConfig,\n ThemePresetSchema,\n ThemeSectionGroup,\n ThemeSectionGroupInfo,\n ThemeSectionSchema,\n ThemeSectionConfig,\n ThemeSectionSettings,\n ThemeBlockSchema,\n ThemeSettingFieldSchema,\n ThemeSettingSectionSchema,\n ThemeSettingsBlock,\n ThemePage,\n ThemePageSchema,\n ThemePageSectionSchema,\n ThemePageTemplateConfig,\n ThemeLayoutSectionGroupConfig,\n SwellData,\n SwellMenu,\n SwellRecord,\n SwellAppConfig,\n SwellThemeConfig,\n SwellThemePreload,\n SwellAppStorefrontThemeProps,\n SwellAppShopifyCompatibilityConfig,\n SwellPageRequest,\n SwellSettingsGeo,\n SwellThemeRecord,\n} from '../types/swell';\n\nexport class SwellTheme {\n public swell: Swell;\n public props: SwellAppStorefrontThemeProps;\n public globals: ThemeGlobals;\n public forms?: ThemeFormConfig[];\n public resources?: ThemeResources;\n public dynamicAssetUrl?: string;\n public liquidSwell: LiquidSwell;\n\n public themeLoader: ThemeLoader;\n\n public page?: ThemePage;\n public pageId: string | undefined;\n public shopifyCompatibility: ShopifyCompatibility | null = null;\n public shopifyCompatibilityClass: typeof ShopifyCompatibility =\n ShopifyCompatibility;\n public shopifyCompatibilityConfig: SwellAppShopifyCompatibilityConfig | null =\n null;\n\n public formData: Record<string, ThemeForm> = {};\n public globalData: SwellData = {};\n\n // Swell-native theme settings if not using Shopify compatibility\n public themeSettingFilePath = 'theme/config/theme.json';\n\n private pageSectionGroups: ThemeSectionGroupInfo[] | null = null;\n\n constructor(\n swell: Swell,\n options: {\n forms?: ThemeFormConfig[];\n resources?: ThemeResources;\n globals?: ThemeGlobals;\n dynamicAssetUrl?: string;\n shopifyCompatibilityClass?: typeof ShopifyCompatibility;\n } = {},\n ) {\n const {\n forms,\n resources,\n globals,\n dynamicAssetUrl,\n shopifyCompatibilityClass,\n } = options;\n\n this.swell = swell;\n this.props = this.getSwellAppThemeProps(swell.config);\n this.shopifyCompatibilityConfig = swell.shopifyCompatibilityConfig || null;\n\n this.globals = globals || ({} as ThemeGlobals);\n this.forms = forms;\n this.resources = resources;\n this.dynamicAssetUrl = dynamicAssetUrl;\n this.shopifyCompatibilityClass =\n shopifyCompatibilityClass || ShopifyCompatibility;\n\n this.liquidSwell = new LiquidSwell({\n theme: this,\n getThemeConfig: this.getThemeConfig.bind(this),\n getAssetUrl: this.getAssetUrl.bind(this),\n getThemeTemplateConfigByType:\n this.getThemeTemplateConfigByType.bind(this),\n renderTemplate: this.renderTemplate.bind(this),\n renderTemplateString: this.renderTemplateString.bind(this),\n renderPageSections: this.renderPageSections.bind(this),\n renderTranslation: this.lang.bind(this),\n renderCurrency: this.renderCurrency.bind(this),\n isEditor: swell.isEditor,\n });\n\n this.themeLoader = new ThemeLoader(swell);\n }\n\n /**\n * Getter for theme configs - returns the configs from the loader.\n * Used by editor and tests to access loaded configs.\n */\n get themeConfigs(): Map<string, SwellThemeConfig> | null {\n const configs = this.themeLoader.getConfigs();\n return configs.size > 0 ? configs : null;\n }\n\n /**\n * Setter for theme configs - directly sets configs in the loader.\n * Used by editor and tests to inject configs without API/KV loading.\n */\n set themeConfigs(configs: Map<string, SwellThemeConfig> | null) {\n if (configs) {\n this.themeLoader.setConfigs(configs);\n }\n }\n\n /**\n * Setter for theme record - directly sets theme record in the loader.\n */\n set themeRecord(themeRecord: SwellThemeRecord) {\n if (themeRecord) {\n this.themeLoader.setThemeRecord(themeRecord);\n }\n }\n\n getSwellAppThemeProps(\n swellConfig?: SwellAppConfig,\n ): SwellAppStorefrontThemeProps {\n return (\n swellConfig?.storefront?.theme || ({} as SwellAppStorefrontThemeProps)\n );\n }\n\n async initGlobals(\n pageId: string,\n options?: ThemeInitGlobalsOptions,\n ): Promise<void> {\n this.pageId = pageId;\n\n const pageRecord = options?.pageRecord;\n const altTemplate = options?.altTemplate;\n\n const trace = createTraceId();\n logger.debug('[SDK] Theme init start', { page: pageId, trace });\n\n await this.themeLoader.init(this.themeConfigs || undefined);\n logger.debug('[SDK] ThemeLoader init done', { page: pageId, trace });\n\n const { store, session, menus, geo, configs, storefrontSettings } =\n await this.getSettingsAndConfigs();\n logger.debug('[SDK] Theme settings load done', { page: pageId, trace });\n\n const { settings, request, page, cart, account, customer } =\n await this.resolvePageData(store, configs, pageId, altTemplate);\n logger.debug('[SDK] Theme page data load done', { page: pageId, trace });\n\n this.page = page;\n\n const countryOptions = getAllCountryOptionTags(geo);\n\n const globals: ThemeGlobals = {\n ...this.globalData,\n // return all storefront settings in the store\n store: { ...storefrontSettings, ...store },\n settings,\n session,\n request,\n menus,\n page,\n cart,\n account,\n customer,\n geo,\n configs,\n language: configs?.language,\n ...(pageRecord\n ? getRecordGlobals(this, pageRecord)\n : { page_title: page.title, page_description: page.description }),\n all_country_option_tags: countryOptions,\n country_option_tags: countryOptions,\n canonical_url: `${store.url}${this.swell.url?.pathname || ''}`,\n powered_by_link: POWERED_BY_LINK,\n // Flag to enable Shopify compatibility in sections and tags/filters\n shopify_compatibility: Boolean(settings.shopify_compatibility),\n };\n\n switch (pageId) {\n case 'robots.txt':\n globals.robots = getRobotsGlobals(globals.canonical_url);\n break;\n\n default:\n break;\n }\n\n if (this.shopifyCompatibility) {\n this.shopifyCompatibility.initGlobals(globals);\n }\n\n this.setGlobals(globals);\n\n if (this.shopifyCompatibility) {\n this.shopifyCompatibility.adaptQueryParams();\n }\n\n logger.debug('[SDK] Theme init end', { page: pageId, trace });\n }\n\n setGlobals(globals: Partial<ThemeGlobals>): void {\n if (this.shopifyCompatibility) {\n this.shopifyCompatibility.adaptGlobals(globals, this.globals);\n }\n\n this.globals = { ...this.globals, ...globals };\n\n this.liquidSwell.options.globals = { ...this.globals };\n }\n\n async getSettingsAndConfigs(): Promise<{\n store: SwellData;\n session: SwellData;\n menus: Record<string, SwellMenu | undefined>;\n geo: SwellSettingsGeo;\n configs: ThemeConfigs;\n storefrontSettings: SwellData;\n }> {\n const geo = GEO_DATA;\n\n // Get storefront settings asynchronously\n const storefrontSettings = await this.swell.getStorefrontSettings();\n\n // Get theme configs synchronously from pre-loaded data\n const settingConfigs = this.getThemeConfigsByPath('theme/config/', '.json');\n\n const configs: ThemeConfigs = {\n theme: {},\n editor: {},\n language: {},\n presets: [],\n ...Array.from(settingConfigs.values()).reduce(\n (acc, config) => {\n const configName = String(config?.name || '').split('.')[0];\n if (configName && config?.file_data) {\n let configValue: unknown;\n try {\n configValue = JSON5.parse<unknown>(config.file_data);\n } catch (err) {\n logger.error(`Error parsing config`, err, { configName });\n configValue = {};\n }\n acc[configName] = configValue;\n }\n return acc;\n },\n {} as Record<string, unknown>,\n ),\n };\n\n // get all settings that should be localized\n // These requests should get already loaded settings and not trigger endpoints if the setting exist\n const [session, storeSettings] = await Promise.all([\n storefrontSettings.session(),\n storefrontSettings.get(),\n ]);\n\n // Maintain backward compatibility for a few theme versions\n // TODO: remove this in the near future\n if (configs.translations) {\n configs.language = configs.translations;\n }\n\n if (Object.keys(configs.language).length > 0) {\n configs.language = this.resolveTranslationLocale(configs.language);\n } else {\n const { locale } = this.swell.getStorefrontLocalization();\n configs.language = await this.getLocaleConfig(locale);\n }\n\n await this.setCompatibilityConfigs(configs);\n\n // Resolve menus after compatibility is determined\n const menus = await this.resolveMenuSettings();\n\n return {\n store: storeSettings?.store,\n session,\n menus,\n geo,\n configs,\n // all settings\n storefrontSettings,\n };\n }\n\n async resolvePageData(\n store: SwellData,\n configs: ThemeConfigs,\n pageId?: string,\n altTemplate?: string,\n ): Promise<{\n settings: ThemeSettings;\n request: SwellPageRequest;\n page: ThemePage;\n cart: SwellStorefrontSingleton;\n account: SwellStorefrontSingleton | null;\n customer?: SwellStorefrontSingleton | null;\n }> {\n const configVersion = String(\n this.swell.swellHeaders['theme-config-version'],\n );\n\n // Cache normalized theme settings.\n const settings = await this.swell.getCachedResource<ThemeSettings>(\n `theme-settings-resolved:v@${configVersion}`,\n [],\n () => {\n if (configs.editor?.settings) {\n fillDefaultThemeSettings(configs.theme, configs.editor?.settings);\n }\n\n return resolveThemeSettings(\n this,\n configs.theme,\n configs.editor?.settings,\n );\n },\n );\n\n if (!settings) {\n throw new Error('Failed to resolve theme settings');\n }\n\n const { locale, currency } = this.swell.getStorefrontLocalization();\n\n const request: SwellPageRequest = {\n host: this.swell.url.host,\n origin: this.swell.url.origin,\n path: this.swell.url.pathname,\n query: this.swell.queryParams,\n locale: locale || store.locale,\n currency: currency || store.currency,\n is_editor: this.swell.isEditor,\n is_preview: this.swell.isPreview,\n };\n\n const swellPage = this.props.pages?.find(\n (page: ThemeSettings) => page.id === pageId,\n );\n\n const page = {\n ...swellPage,\n current: Number(this.swell.queryParams.page) || 1,\n url: this.swell.url.pathname,\n custom: !swellPage,\n title: swellPage?.label,\n slug: undefined,\n description: undefined,\n $locale: undefined,\n } as ThemePage;\n\n if (pageId) {\n // Use sync helper internally for better performance\n const templateConfig = this._getTemplateConfigByType(\n 'templates',\n pageId,\n altTemplate,\n );\n\n // TODO: add global.template\n\n let pageSchema: ThemePageSchema | undefined;\n try {\n pageSchema = JSON5.parse<ThemePageSchema>(\n templateConfig?.file_data || '{}',\n );\n } catch (err) {\n // noop\n logger.warn(err);\n }\n\n if (pageSchema?.page) {\n const {\n title,\n label, // 'label' is deprecated, kept for compatibility\n description,\n slug,\n $locale,\n } = pageSchema.page;\n\n page.label = page.label || title || label || ''; // `page.label` is used only for displaying the page name\n page.title = title || page.label; // `page.title` is used exclusively for SEO purposes\n page.slug = slug;\n page.description = description;\n page.$locale = $locale;\n }\n }\n\n const [cart, account] = await Promise.all([\n this.fetchSingletonResourceCached<StorefrontResource>(\n 'cart',\n // The cached cart may be null, but we need the StorefrontResource\n () => this.fetchCart(),\n // Default value (always StorefrontResource)\n () => this.fetchCart(),\n ),\n\n this.fetchAccount(),\n ]);\n\n if (!cart) {\n throw new Error('Failed to fetch cart');\n }\n\n // TODO: move this to compatibility class\n let customer;\n if (this.shopifyCompatibility) {\n customer = account;\n }\n\n return {\n settings,\n request,\n page,\n cart: cart as SwellStorefrontSingleton,\n account: account as SwellStorefrontSingleton,\n customer: customer as SwellStorefrontSingleton, // Shopify only\n };\n }\n\n async fetchSingletonResourceCached<R>(\n key: string,\n handler: () => Promise<R>,\n defaultValue: () => R | Promise<R>,\n isCacheble = true,\n ): Promise<R | undefined> {\n // Cookie should change when cart/account is updated\n const cacheKey = this.swell.storefront.session.getCookie();\n\n if (!cacheKey) {\n return defaultValue();\n }\n\n const result = await this.swell.getCachedResource(\n `${key}-${cacheKey}`,\n [],\n handler,\n isCacheble,\n );\n\n return result ?? defaultValue();\n }\n\n async fetchCart(): Promise<StorefrontResource> {\n const CartResource = this.resources?.singletons?.cart;\n const cart = CartResource\n ? new CartResource(this.swell)\n : new SwellStorefrontSingleton(this.swell, 'cart');\n\n // Use empty function to enable cart comparison with empty drop in liquid\n cart._isEmpty = function () {\n return !this._result?.items?.length;\n };\n\n await cart.id;\n\n if (this.shopifyCompatibility) {\n const compatProps = ShopifyCart(this.shopifyCompatibility, cart);\n cart.setCompatibilityProps(compatProps);\n }\n\n return cart;\n }\n\n async fetchAccount(): Promise<StorefrontResource | null> {\n const AccountResource = this.resources?.singletons?.account;\n const account = AccountResource\n ? new AccountResource(this.swell)\n : new SwellStorefrontSingleton(this.swell, 'account');\n\n await account.id;\n\n if (!account?.id) {\n return null;\n }\n\n if (this.shopifyCompatibility) {\n const compatProps = ShopifyCustomer(this.shopifyCompatibility, account);\n account.setCompatibilityProps(compatProps);\n }\n\n return account;\n }\n\n getFormConfig(formType: string): ThemeFormConfig | undefined {\n let formId = formType;\n\n if (this.shopifyCompatibility) {\n const shopifyType =\n this.shopifyCompatibility.getAdaptedFormType(formType);\n if (shopifyType) {\n formId = shopifyType;\n }\n }\n\n return this.forms?.find((form) => form.id === formId);\n }\n\n setFormData(\n formId: string,\n options: {\n params?: any;\n success?: boolean;\n withoutErrors?: boolean;\n errors?: ThemeFormErrorMessages;\n },\n ): void {\n const form = this.formData[formId] || new ThemeForm(formId);\n\n if (form instanceof ThemeForm) {\n if (options?.params) {\n form.setParams(options.params);\n }\n if (options?.errors) {\n form.setSuccess(false);\n form.setErrors(options.errors);\n } else if (options?.success) {\n if (options.withoutErrors && !form.errors) {\n form.setSuccess(true);\n } else if (!options.withoutErrors) {\n form.setSuccess(true);\n form.clearErrors();\n }\n }\n\n if (this.shopifyCompatibility) {\n Object.assign(form, this.shopifyCompatibility.getFormData(form));\n }\n }\n\n this.formData[formId] = form;\n\n this.setGlobals({ forms: this.formData });\n }\n\n setFormSuccessWithoutErrors(formId: string) {\n this.setFormData(formId, { success: true, withoutErrors: true });\n }\n\n clearFormData(formId?: string): void {\n if (!formId) {\n this.formData = {};\n } else {\n delete this.formData[formId];\n }\n\n this.setGlobals({ forms: this.formData });\n }\n\n serializeFormData(): SwellData | null {\n const serializedFormData: SwellData = {};\n\n for (const formId in this.formData) {\n const form = this.formData[formId];\n serializedFormData[formId] = {\n success: form.success,\n errors: form.errors && Array.from(form.errors),\n };\n }\n\n return Object.keys(serializedFormData).length > 0\n ? serializedFormData\n : null;\n }\n\n setGlobalData(data: SwellData = {}) {\n this.globalData = { ...this.globalData, ...data };\n\n this.setGlobals(this.globalData);\n }\n\n serializeGlobalData(): SwellData | null {\n return Object.keys(this.globalData).length > 0 ? this.globalData : null;\n }\n\n /**\n * Extracts values from the form according to the passed settings config\n *\n * @input\n * ```js\n * form = {\n * field1: { value: 'value1' },\n * field2: { value: 'value2' },\n * field3: { value: null },\n * extra: { value: 'value3' },\n * }\n * config = {\n * field1: 'old1',\n * field2: 'old2',\n * field3: 'old3',\n * field4: 'old4',\n * }\n * ```\n *\n * @output\n * ```js\n * return {\n * field1: 'value1',\n * field2: 'value2',\n * field3: 'old3',\n * field4: 'old4',\n * }\n * ```\n */\n updateSettings(\n form: Record<string, { value: unknown } | undefined>,\n config: Record<string, unknown>,\n ): ThemeSettings {\n if (this.shopifyCompatibility) {\n return this.shopifyCompatibility.adaptSettings(\n form,\n config as unknown as ShopifySettingsData,\n );\n }\n\n return extractSettingsFromForm(form, config);\n }\n\n resolveTranslationLocale(languageConfig: ThemeSettings, locale?: string) {\n if (!languageConfig) {\n return {};\n }\n\n locale = locale || this.swell.getStorefrontLocalization().locale;\n\n if (!locale) {\n return languageConfig;\n }\n\n const localeShortCode = locale.split('-')[0];\n\n return reduce(\n languageConfig,\n (acc, value, key) => {\n if (isObject(value)) {\n if (key === '$locale') {\n // Assign locale values to the main object\n for (const localeKey of Object.keys(value)) {\n const localeValues = value[localeKey];\n if (isObject(localeValues)) {\n Object.assign(\n acc,\n this.resolveTranslationLocale(localeValues, locale),\n );\n }\n }\n } else if (key[0] !== '$') {\n // Continue recursion\n acc[key] = this.resolveTranslationLocale(value, locale);\n }\n } else if (typeof value === 'string') {\n if (value.startsWith('t:')) {\n // Translate from global config\n const translationKey = value.slice(2);\n const translationParts = translationKey.split('.');\n const translationEnd = translationParts.pop();\n const translationPath = translationParts.join('.');\n const translationConfigGlobal = this.globals.language;\n\n acc[key] =\n get(\n translationConfigGlobal,\n `${translationPath}.$locale.${locale}.${translationEnd}`,\n ) ||\n get(\n translationConfigGlobal,\n `${translationPath}.$locale.${localeShortCode}.${translationEnd}`,\n ) ||\n get(translationConfigGlobal, translationKey) ||\n value;\n } else {\n // Translate from local config\n acc[key] =\n get(languageConfig, `$locale.${locale}.${key}`) ||\n get(languageConfig, `$locale.${localeShortCode}.${key}`) ||\n value;\n }\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n\n async setCompatibilityConfigs(configs: ThemeConfigs) {\n const shopifyCompatibility = () => {\n if (!this.shopifyCompatibility) {\n this.shopifyCompatibility = new this.shopifyCompatibilityClass(this);\n }\n return this.shopifyCompatibility;\n };\n\n if (Object.keys(configs.editor).length <= 0 && configs.settings_schema) {\n // The editor should use the store locale, not the storefront locale.\n const store = await this.swell.storefront.settings.get('store');\n\n configs.editor = shopifyCompatibility().getEditorConfig(\n configs.settings_schema,\n );\n configs.editor = await shopifyCompatibility().renderSchemaTranslations(\n this,\n configs.editor,\n (store.locale as string) || 'en-US',\n );\n }\n\n if (Object.keys(configs.theme).length <= 0 && configs.settings_data) {\n configs.theme = shopifyCompatibility().getThemeConfig(\n configs.settings_data,\n );\n this.themeSettingFilePath = 'theme/config/settings_data.json';\n }\n\n if (Object.keys(configs.presets).length <= 0 && configs.settings_data) {\n configs.presets = shopifyCompatibility().getPresetsConfig(\n configs.settings_data,\n );\n }\n\n // Make sure compatibility instance and config setting are resolved\n if (configs.theme.shopify_compatibility) {\n shopifyCompatibility();\n } else if (this.shopifyCompatibility) {\n configs.theme.shopify_compatibility = true;\n }\n }\n\n setCompatibilityData(pageData: SwellData) {\n if (!pageData || !this.shopifyCompatibility) {\n return;\n }\n this.shopifyCompatibility.adaptPageData(pageData);\n }\n\n async getLocaleConfig(\n localeCode = 'en',\n suffix = '.json',\n ): Promise<ThemeLocaleConfig> {\n const allLocaleConfigs = this.getThemeConfigsByPath(\n 'theme/locales/',\n suffix,\n );\n\n let localeConfig: SwellThemeConfig | null =\n allLocaleConfigs.get(`theme/locales/${localeCode}${suffix}`) ?? null;\n\n if (!localeConfig) {\n // Fall back to short code locale\n const localeShortCode = localeCode.split('-')[0];\n\n localeConfig =\n allLocaleConfigs.get(`theme/locales/${localeShortCode}${suffix}`) ??\n null;\n\n if (!localeConfig) {\n // Fall back to default locale\n const defaultLocale = `.default${suffix}`;\n\n for (const config of allLocaleConfigs.values()) {\n if (config.file_path?.endsWith(defaultLocale)) {\n localeConfig = config;\n break;\n }\n }\n }\n }\n\n if (localeConfig) {\n localeConfig = await this.getThemeConfig(localeConfig.file_path);\n\n try {\n return JSON5.parse<ThemeLocaleConfig>(localeConfig?.file_data || '{}');\n } catch (err) {\n // noop\n logger.warn(err);\n }\n }\n\n return {};\n }\n\n resolveLookupSetting(\n setting: ThemeSettingFieldSchema,\n value: unknown,\n ): SwellData | SwellStorefrontRecord | SwellStorefrontCollection | null {\n if (value instanceof StorefrontResource) {\n return value;\n }\n\n const collection = resolveLookupCollection(setting);\n\n if (collection) {\n if (setting.multiple) {\n if (Array.isArray(value)) {\n return value.map((id: string) =>\n this.resolveLookupResource(collection, id),\n );\n }\n } else if (value !== '' && value !== null && value !== undefined) {\n return this.resolveLookupResource(collection, value as string);\n }\n }\n\n return null;\n }\n\n resolveLookupResource(\n collection: string,\n id: string,\n ): StorefrontResource<SwellRecord> {\n const LookupResource = this.resources?.records?.[collection];\n const resource = LookupResource\n ? new LookupResource(this.swell, id)\n : new SwellStorefrontRecord(this.swell, collection, id);\n\n if (this.shopifyCompatibility) {\n this.shopifyCompatibility.adaptPageData({ resource });\n }\n\n return resource;\n }\n\n resolveMenuSettings(): Promise<Record<string, SwellMenu | undefined>> {\n return resolveMenuSettings(this, this.swell.getStorefrontMenus(), {\n currentUrl: this.swell.url.pathname,\n });\n }\n\n resolveMenuSetting(value: string): SwellMenu | null {\n if (!value) {\n return null;\n }\n\n const allMenus = this.globals.menus || {};\n const menu = allMenus[value] || allMenus[value.replace(/-/g, '_')];\n\n return menu || null;\n }\n\n async lang(key: string, data?: any, fallback?: string): Promise<string> {\n return await this.renderTranslation(key, data, fallback);\n }\n\n resolveFontSetting(value: string): ThemeFont {\n if (this.shopifyCompatibility) {\n const fontSetting =\n this.shopifyCompatibility.getFontFromShopifySetting(value);\n\n const adaptedFont = ThemeFont.get(fontSetting || value);\n Object.assign(\n adaptedFont,\n this.shopifyCompatibility.getFontData(adaptedFont),\n );\n\n return adaptedFont;\n }\n\n return ThemeFont.get(value);\n }\n\n resolveUrlSetting(value: string): string {\n let resolvedUrl = value;\n\n if (this.shopifyCompatibility) {\n // Remove shopify:// protocol\n if (value?.startsWith('shopify://')) {\n resolvedUrl = value.replace('shopify://', '/');\n }\n\n const adaptedUrl =\n this.shopifyCompatibility.getAdaptedPageUrl(resolvedUrl);\n\n if (adaptedUrl) {\n return adaptedUrl;\n }\n }\n\n return resolvedUrl;\n }\n\n resolveImageSetting(value: string): string {\n let resolvedUrl = value;\n\n if (this.shopifyCompatibility) {\n // Remove shopify images\n if (value?.startsWith('shopify://')) {\n resolvedUrl = '';\n }\n }\n\n return resolvedUrl;\n }\n\n async preloadThemeConfigs(\n payload: SwellThemePreload,\n ): Promise<PutFilesResult> {\n const result = await this.themeLoader.updateThemeCache(payload);\n\n // Log warnings at the theme level for visibility\n if (result.warnings && result.warnings.length > 0) {\n const rejected = result.warnings.filter(\n (w) => w.reason === 'rejected_5mb' || w.reason === 'exceeded_25mb',\n ).length;\n const warned = result.warnings.filter(\n (w) => w.reason === 'warning_1mb',\n ).length;\n\n logger.warn('[Theme] File size issues detected during cache update', {\n totalWarnings: result.warnings.length,\n rejected,\n warned,\n details: result.warnings.slice(0, 5), // Log first 5 warnings for debugging\n });\n }\n\n return result;\n }\n\n getPageConfigPath(pageId: string, altTemplate?: string): string | null {\n if (this.shopifyCompatibility) {\n const configPath = this.shopifyCompatibility.getThemeFilePath(\n 'templates',\n pageId,\n );\n\n return `${withSuffix(`theme/${configPath}`, altTemplate)}.json`;\n }\n\n return `${withSuffix(`theme/templates/${pageId}`, altTemplate)}.json`;\n }\n\n getThemeRecord(): SwellThemeRecord | null {\n return this.themeLoader.getThemeRecord();\n }\n\n async getThemeConfig(filePath: string): Promise<SwellThemeConfig | null> {\n // All configs are pre-loaded in themeLoader after init\n // Wrapped in Promise for backward compatibility with LiquidSwell\n return this.themeLoader.getConfig(filePath);\n }\n\n getThemeConfigsByPath(\n pathPrefix: string,\n pathSuffix?: string,\n ): Map<string, SwellThemeConfig> {\n // Get configs directly from pre-loaded data\n const configs = this.themeLoader.getConfigsByPath(pathPrefix, pathSuffix);\n\n const configsByPath = new Map<string, SwellThemeConfig>();\n for (const config of configs) {\n configsByPath.set(config.file_path, config);\n }\n\n return configsByPath;\n }\n\n async getThemeTemplateConfig(\n filePath: string,\n ): Promise<SwellThemeConfig | null> {\n // Use internal sync helper and wrap result in Promise\n return this._getTemplateConfig(filePath);\n }\n\n /**\n * Internal synchronous helper for getting template configs by type.\n * Used internally within theme.ts to avoid async overhead.\n */\n private _getTemplateConfigByType(\n type: string,\n name: string,\n suffix?: string,\n ): SwellThemeConfig | null {\n const templatesByPriority = [withSuffix(`${type}/${name}`, suffix)];\n\n if (this.shopifyCompatibility) {\n const path = this.shopifyCompatibility.getThemeFilePath(type, name);\n templatesByPriority.push(withSuffix(path, suffix));\n }\n\n for (const filePath of templatesByPriority) {\n // Use sync helper internally\n const templateConfig = this._getTemplateConfig(`theme/${filePath}`);\n if (templateConfig) {\n return templateConfig;\n }\n }\n\n return null;\n }\n\n /**\n * Internal synchronous helper for getting template configs.\n */\n private _getTemplateConfig(filePath: string): SwellThemeConfig | null {\n // Explicit extension\n if (filePath.endsWith('.json') || filePath.endsWith('.liquid')) {\n return this.themeLoader.getConfig(filePath);\n }\n\n // Try to find a JSON template first\n const jsonTemplate = this.themeLoader.getConfig(`${filePath}.json`);\n\n if (jsonTemplate) {\n return jsonTemplate;\n }\n\n return this.themeLoader.getConfig(`${filePath}.liquid`);\n }\n\n async getThemeTemplateConfigByType(\n type: string,\n name: string,\n suffix?: string,\n ): Promise<SwellThemeConfig | null> {\n // Use internal sync helper\n return this._getTemplateConfigByType(type, name, suffix);\n }\n\n async getAssetConfig(assetName: string): Promise<SwellThemeConfig | null> {\n // Asset support both inside and outside theme folder\n return (\n (await this.getThemeConfig(`theme/assets/${assetName}`)) ??\n (await this.getThemeConfig(`assets/${assetName}`)) ??\n null\n );\n }\n\n async getDynamicAssetUrl(filePath: string): Promise<string | null> {\n if (!this.dynamicAssetUrl) {\n return null;\n }\n\n const assetName = `${filePath}.liquid`;\n const assetConfig = await this.getAssetConfig(assetName);\n\n if (!assetConfig) {\n return null;\n }\n\n // Make sure asset url is followed by a slash\n if (!this.dynamicAssetUrl.endsWith('/')) {\n this.dynamicAssetUrl += '/';\n }\n\n const settingsConfig = this._getTemplateConfigByType(\n 'config',\n 'settings_data',\n 'json',\n );\n const settingsHash = settingsConfig?.hash;\n\n return settingsHash\n ? `${this.dynamicAssetUrl}v/${settingsHash}/${assetName}`\n : `${this.dynamicAssetUrl}${assetName}`;\n }\n\n async getAssetUrl(filePath: string): Promise<string | null> {\n const assetConfig = await this.getAssetConfig(filePath);\n const file = assetConfig?.file;\n\n if (!file) {\n return this.getDynamicAssetUrl(filePath);\n }\n\n const fileUrl: string | null = file.url || null;\n\n if (!fileUrl) {\n return fileUrl;\n }\n\n return fileUrl.endsWith(filePath) ? fileUrl : `${fileUrl}/${filePath}`;\n }\n\n async renderTemplate(\n config: SwellThemeConfig | null,\n data?: SwellData,\n ): Promise<string> {\n let template = config?.file_data || null;\n\n if (config === null || template === null) {\n return '';\n }\n\n template = unescapeLiquidSyntax(template);\n try {\n const result = await this.liquidSwell.parseAndRender(template, data);\n return result;\n } catch (err: any) {\n logger.error(err);\n return `<!-- template render error: ${err.message} -->`;\n }\n }\n\n async renderTemplateString(\n templateString: string,\n data?: SwellData,\n ): Promise<string> {\n try {\n return await this.liquidSwell.parseAndRender(templateString, data);\n } catch (err) {\n logger.error(err);\n return '';\n }\n }\n\n async getSectionSchema(\n sectionName: string,\n ): Promise<Partial<ThemeSectionSchema> | undefined> {\n let result: Partial<ThemeSectionSchema> | undefined;\n\n // Use sync helper internally\n const config = this._getTemplateConfigByType('sections', sectionName);\n\n if (config?.file_path?.endsWith('.json')) {\n try {\n result =\n JSON5.parse<Partial<ThemeSectionSchema>>(config.file_data) ||\n undefined;\n\n if (this.shopifyCompatibility) {\n result = this.shopifyCompatibility.getSectionConfigSchema(\n result as ShopifySectionSchema,\n );\n\n result = await this.shopifyCompatibility.renderSchemaTranslations(\n this,\n result,\n this.globals.store?.locale as string,\n );\n }\n } catch (err) {\n // noop\n logger.warn(err);\n return undefined;\n }\n } else if (config?.file_path?.endsWith('.liquid')) {\n // Fallback to the liquid file schema\n if (this.shopifyCompatibility) {\n this.liquidSwell.lastSchema = undefined;\n\n const configWithSchema = this.getSectionConfigWithSchemaTagOnly(config);\n if (!configWithSchema) {\n return;\n }\n\n await this.renderTemplate(configWithSchema);\n\n const schema = this.liquidSwell.lastSchema;\n if (schema) {\n result = this.shopifyCompatibility.getSectionConfigSchema(schema);\n\n result = await this.shopifyCompatibility.renderSchemaTranslations(\n this,\n result,\n this.globals.store?.locale as string,\n );\n }\n }\n }\n\n // Normalize schema properties\n if (result) {\n result.id = result.id || sectionName;\n result.label = result.label || sectionName;\n result.fields = result.fields || [];\n }\n\n return result;\n }\n\n getSectionConfigWithSchemaTagOnly(\n config: SwellThemeConfig,\n ): SwellThemeConfig | null {\n const schemaTag = '{% schema %}';\n const schemaEndTag = '{% endschema %}';\n const schemaStartIndex = config.file_data.indexOf(schemaTag);\n const schemaEndIndex = config.file_data.indexOf(schemaEndTag);\n const schemaData = config.file_data.slice(\n schemaStartIndex + schemaTag.length,\n schemaEndIndex,\n );\n\n if (schemaStartIndex === -1 || schemaEndIndex === -1) {\n return null;\n }\n\n return { ...config, file_data: schemaTag + schemaData + schemaEndTag };\n }\n\n async renderThemeTemplate(\n filePath: `${string}.liquid`,\n data?: SwellData,\n ): Promise<string>;\n\n async renderThemeTemplate(\n filePath: `${string}.json`,\n data?: SwellData,\n ): Promise<ThemePageTemplateConfig>;\n\n async renderThemeTemplate(\n filePath: string,\n data?: SwellData,\n ): Promise<string | ThemePageTemplateConfig>;\n\n async renderThemeTemplate(\n filePath: string,\n data?: SwellData,\n ): Promise<string | ThemePageTemplateConfig> {\n const config = await this.getThemeTemplateConfig(filePath);\n\n const content = await this.renderTemplate(config, data);\n\n if (config?.file_path?.endsWith('.json')) {\n try {\n return JSON5.parse<ThemePageTemplateConfig>(content);\n } catch (err) {\n logger.error('[SDK] Unable to render theme template', {\n file: config.file_path,\n content,\n });\n throw new PageError(err as Error);\n }\n }\n\n return content;\n }\n\n async renderLayoutTemplate(name: string, data?: SwellData): Promise<string> {\n // Use sync helper internally\n const templateConfig = this._getTemplateConfigByType('layouts', name);\n\n if (!templateConfig) {\n throw new Error(`Layout template not found: ${name}`);\n }\n\n let content = await this.renderThemeTemplate(\n templateConfig.file_path,\n data,\n );\n\n if (typeof content !== 'string') {\n return `<!-- invalid layout: ${name}--> {{ content_for_layout }}`;\n }\n\n // Inject custom css\n if (!this.globals.request.is_editor) {\n let customCss = (this.globals.settings.custom_css || '') as\n | string\n | string[];\n\n if (Array.isArray(customCss)) {\n customCss = customCss.join('\\n').trim();\n }\n\n if (customCss) {\n let pos = -1;\n let match = null;\n const regex = /<\\/body\\s*?>/gi;\n\n // Get last occurrence of </body> tag in the content\n while ((match = regex.exec(content)) !== null) {\n pos = match.index;\n }\n\n if (pos !== -1) {\n content = `${content.slice(0, pos)}\n<style>${customCss}</style>\n${content.slice(pos)}`;\n }\n }\n }\n\n return content;\n }\n\n async renderPageTemplate(\n name: string,\n data?: SwellData,\n altTemplateId?: string,\n ): Promise<string | ThemePageTemplateConfig> {\n let templateConfig: SwellThemeConfig | null = null;\n\n if (altTemplateId) {\n // Use sync helper internally\n templateConfig = this._getTemplateConfigByType(\n 'templates',\n name,\n altTemplateId,\n );\n }\n\n // Fall back to default template if alt not found\n if (!templateConfig) {\n templateConfig = this._getTemplateConfigByType('templates', name);\n }\n\n if (templateConfig) {\n const templatePath = name.split('/').splice(1).join('/') || null;\n\n let templateData = {\n name,\n alt_name: altTemplateId || null,\n path: templatePath || null,\n } as SwellData;\n\n if (this.shopifyCompatibility) {\n templateData = ShopifyTemplate(this.shopifyCompatibility, templateData);\n }\n\n this.setGlobals({ template: templateData });\n\n const themeTemplate = await this.renderThemeTemplate(\n templateConfig.file_path,\n data,\n );\n\n if (themeTemplate && typeof themeTemplate !== 'string') {\n themeTemplate.id = String(templateConfig.name);\n }\n\n return themeTemplate;\n }\n\n throw new PageNotFound('Page template not found', 404, `templates/${name}`);\n }\n\n async renderPage(\n pageData?: SwellData,\n altTemplateId?: string,\n ): Promise<string | ThemePageTemplateConfig> {\n // Set page data as globals\n if (pageData) {\n this.setGlobals(pageData);\n }\n\n let pageConfig;\n\n if (this.pageId) {\n pageConfig = await this.renderPageTemplate(\n this.pageId,\n pageData,\n altTemplateId,\n );\n } else {\n pageConfig = await this.renderPageTemplate('404', pageData);\n }\n\n if (typeof pageConfig !== 'string' && pageConfig?.page) {\n if (pageConfig.page.published === false) {\n throw new PageNotFound();\n }\n\n pageConfig.page = this.resolveTranslationLocale(\n pageConfig.page as ThemeSettings,\n );\n }\n\n return pageConfig;\n }\n\n getShopify1HomePageSectionGroup(): ThemeSectionGroup {\n // Special case: Shopify 1.0 index page has section data in global theme settings\n const themeSettings = this.globals.configs.theme || {};\n\n return {\n sections: themeSettings.sections || {},\n // Section order is handled by `content_for_index`\n // If undefined or empty we'll use natural attribute order\n order: themeSettings.content_for_index || [],\n };\n }\n\n async getShopify1HomePageSections(\n resolveSettings: boolean = true,\n ): Promise<ThemeSectionConfig[]> {\n const sectionGroup = this.getShopify1HomePageSectionGroup();\n return this.getPageSections(sectionGroup, resolveSettings);\n }\n\n async renderShopify1HomePage(pageContent: string): Promise<string> {\n const sectionGroup = this.getShopify1HomePageSectionGroup();\n const contentForIndex = await this.renderPageSections(sectionGroup);\n return this.renderTemplateString(pageContent, {\n content_for_index: contentForIndex,\n });\n }\n\n isShopify1HomePage(\n pageId: string,\n pageContent: unknown,\n ): pageContent is string {\n return Boolean(pageId === 'index' && typeof pageContent === 'string');\n }\n\n getSectionClassName(): string {\n return this.shopifyCompatibility ? 'shopify-section' : 'swell-section';\n }\n\n getSectionIdPrefix(): string {\n return this.shopifyCompatibility ? 'shopify-section' : 'swell-section';\n }\n\n async renderAllSections(\n sectionsIds: string | Array<string>,\n pageData?: SwellData,\n ): Promise<Record<string, string | undefined>> {\n const sections =\n typeof sectionsIds === 'string'\n ? sectionsIds.split(/\\s*,\\s*/)\n : sectionsIds;\n\n const sectionsRendered = await Promise.all(\n sections.map((sectionId) => {\n return this.renderSection(sectionId, pageData);\n }),\n );\n\n const sectionClassName = this.getSectionClassName();\n const sectionIdPrefix = this.getSectionIdPrefix();\n return sectionsRendered.reduce(\n (acc, section, index) => {\n const sectionId = sections[index];\n // TODO: figure out a way to use compatibility class for this\n acc[sectionId] = `\n <div id=\"${sectionIdPrefix}-${sectionId}\" class=\"${sectionClassName}\">${String(section)}</div>\n `.trim();\n\n return acc;\n },\n {} as Record<string, string>,\n );\n }\n\n async renderSection(\n sectionId: string,\n pageData?: SwellData,\n ): Promise<string | ThemePageTemplateConfig> {\n // Set page data as globals\n if (pageData) {\n this.setGlobals(pageData);\n }\n\n // Section ID could be a section name or a given config ID within a template\n const [sectionKey, originalPageId] = sectionId\n .split(/__/) // Split generated IDs if needed\n .reverse();\n\n // return replaced '/' back\n const pageId = (originalPageId || '').replaceAll('_', '/');\n\n // Use sync helper internally\n const templateConfig = this._getTemplateConfigByType(\n pageId ? 'templates' : 'sections',\n pageId ? pageId : sectionKey,\n );\n\n if (templateConfig) {\n const sectionContent = await this.renderThemeTemplate(\n templateConfig.file_path,\n pageData,\n );\n\n // Render a section of a page template\n if (pageId && (sectionContent as ThemeSectionGroup)?.sections) {\n const oldSections = (sectionContent as ThemeSectionGroup)?.sections;\n\n const pageSectionGroup = {\n // use original pageId to return exactly the requested section id\n id: originalPageId,\n sections: { [sectionKey]: oldSections[sectionKey] },\n };\n\n const [pageSection] = await this.renderPageSections(\n pageSectionGroup,\n pageData,\n );\n\n return pageSection.output || '';\n }\n\n return sectionContent;\n }\n\n return '';\n }\n\n async renderLayout(\n layoutName?: string,\n data?: SwellData,\n contentForLayout?: string,\n contentForHeader?: string,\n ): Promise<string> {\n layoutName = layoutName || this.liquidSwell.layoutName;\n\n if (layoutName) {\n if (data) {\n data = await this.renderDataFields(data, [\n 'page_title',\n 'page_description',\n ]);\n }\n\n return this.renderLayoutTemplate(layoutName, {\n ...data,\n content_for_layout: contentForLayout,\n content_for_header: contentForHeader,\n });\n } else {\n // Render content directly when layout is `none`\n return contentForLayout || '';\n }\n }\n\n private async renderDataFields(\n data: SwellData,\n fields: string[],\n ): Promise<SwellData> {\n const promises: Promise<void>[] = [];\n\n for (const key of fields) {\n const promise =\n typeof data[key] === 'string'\n ? this.renderTemplateString(data[key], data)\n : Promise.resolve();\n\n promises.push(\n promise\n .then((value: string | void) => {\n // fallback to globals value that can be string or RenderDrop\n return value ? value : (this.globals[key] as Promise<string>);\n })\n .then((value: string) => {\n data[key] = value;\n }),\n );\n }\n\n if (promises.length > 0) {\n data = { ...data };\n await Promise.all(promises);\n }\n\n return data;\n }\n\n getContentForHeader(): string {\n let content = '\\n';\n\n // Include google font stylesheet for global font settings\n // Note: this means fonts will not be loaded if they are used in section settings\n content += this.renderFontHeaderLinks();\n\n if (this.shopifyCompatibility) {\n content += `\\n${this.shopifyCompatibility.getContentForHeader()}`;\n }\n\n return content;\n }\n\n renderFontHeaderLinks(): string {\n const themeSettings = this.globals.settings;\n const editorSettings = this.globals.configs?.editor?.settings || [];\n\n if (themeSettings && editorSettings) {\n const fontSettings = findThemeSettingsByType(\n 'font',\n themeSettings,\n editorSettings,\n );\n\n const combinedFonts: string[] = [];\n for (let i = 0; i < fontSettings.length; i++) {\n const value = fontSettings[i].value?.id || fontSettings[i].value;\n // Adapt shopify fonts first if applicable\n if (this.shopifyCompatibility) {\n const fontSetting =\n this.shopifyCompatibility.getFontFromShopifySetting(value);\n if (!combinedFonts.includes(fontSetting || value)) {\n combinedFonts.push(fontSetting || value);\n }\n } else if (!combinedFonts.includes(value)) {\n combinedFonts.push(value);\n }\n }\n\n if (fontSettings.length > 0) {\n const fontUrl = ThemeFont.combinedGoogleFontUrl(combinedFonts);\n return `<link href=\"${fontUrl}\" rel=\"stylesheet\">`;\n }\n }\n\n return '';\n }\n\n async getTemplateSchema(\n config: SwellThemeConfig,\n ): Promise<ThemeSectionSchema | undefined> {\n let schema: ThemeSectionSchema | undefined;\n\n const resolvedConfig = await this.getThemeConfig(config.file_path);\n\n if (!resolvedConfig) {\n return;\n }\n\n if (resolvedConfig.file_path.endsWith('.liquid')) {\n if (this.shopifyCompatibility) {\n // Extract {% schema %} from liquid files for Shopify compatibility\n this.liquidSwell.lastSchema = undefined;\n\n // Get only the schema tag from the template,\n // as other tags may need data for rendering\n const schemaConfig: SwellThemeConfig = {\n ...resolvedConfig,\n file_data: extractSchemaTag(resolvedConfig.file_data),\n };\n\n await this.renderTemplate(schemaConfig);\n\n const lastSchema = (this.liquidSwell.lastSchema ||\n {}) as ShopifySectionSchema;\n\n if (lastSchema) {\n const configSchema =\n this.shopifyCompatibility.getSectionConfigSchema(lastSchema);\n\n schema =\n await this.shopifyCompatibility.renderSchemaTranslations<ThemeSectionSchema>(\n this,\n configSchema as ThemeSectionSchema,\n this.globals.store?.locale,\n );\n }\n }\n } else if (resolvedConfig.file_data) {\n try {\n schema = JSON5.parse(resolvedConfig?.file_data) || undefined;\n } catch (err) {\n // noop\n logger.warn(err);\n }\n }\n\n return schema;\n }\n\n resolveStaticSectionSettings(\n sectionSchema: ThemeSectionSchema,\n presetSchema?: ThemePresetSchema,\n ): SwellData {\n const defaults: SwellData = {};\n\n const defaultSchema: ThemePresetSchema =\n presetSchema || sectionSchema?.default || ({} as ThemePresetSchema);\n\n if (sectionSchema?.fields) {\n for (const field of sectionSchema.fields) {\n if (field.id && field.default !== undefined) {\n defaults[field.id] = field.default;\n }\n }\n }\n\n Object.assign(defaults, defaultSchema.settings, {\n blocks: defaultSchema.blocks,\n });\n\n if (Array.isArray(defaults.blocks)) {\n defaults.blocks = defaults.blocks.map(\n (block: ThemeSettingsBlock): ThemeSettingsBlock => {\n const blockDefaults: SwellData = {};\n\n const blockSchema = sectionSchema?.blocks?.find(\n (schema) => schema.type === block.type,\n );\n\n if (blockSchema?.fields) {\n for (const field of blockSchema.fields) {\n if (field.id && field.default !== undefined) {\n blockDefaults[field.id] = field.default;\n }\n }\n }\n\n return {\n ...block,\n settings: { ...blockDefaults, ...(block.settings || undefined) },\n };\n },\n );\n }\n\n return defaults;\n }\n\n async getAllSections(): Promise<ThemePageSectionSchema[]> {\n // Get configs synchronously from pre-loaded data\n const configs = this.getThemeConfigsByPath('theme/sections/');\n return getAllSections(configs, this.getTemplateSchema.bind(this));\n }\n\n /**\n * Returns all theme block schemas from /blocks folder.\n */\n getAllThemeBlockSchemas(): ThemeBlockSchema[] {\n const schemas: ThemeBlockSchema[] = [];\n const configs = this.getThemeConfigsByPath('theme/blocks/');\n\n for (const config of configs.values()) {\n const { name, file_path: filePath, file_data: fileData } = config;\n const rawSchema = extractSchemaTag(fileData, true);\n\n if (!rawSchema) {\n continue;\n }\n\n try {\n const schema = JSON5.parse<ThemeBlockSchema>(rawSchema);\n\n // If a block schema has no `type`, uses the config `name` as fallback\n if (!schema.type) {\n schema.type = name;\n }\n\n schemas.push(schema);\n } catch (error) {\n console.warn(`Invalid schema in block: ${filePath}`, error);\n }\n }\n\n return schemas;\n }\n\n async getPageSections(\n sectionGroup: ThemeSectionGroup,\n resolveSettings: boolean = true,\n ): Promise<ThemeSectionConfig[]> {\n const sectionConfigs = await getPageSections(sectionGroup, (type) =>\n this.getSectionSchema(type),\n );\n\n // Resolve page section settings\n if (resolveSettings) {\n for (const sectionConfig of sectionConfigs) {\n const { schema } = sectionConfig;\n if (schema?.fields && this.globals && sectionConfig.settings) {\n sectionConfig.settings = resolveSectionSettings(this, sectionConfig);\n }\n }\n }\n\n return sectionConfigs;\n }\n\n async addPageSection(sectionFileName: string, group: boolean): Promise<void> {\n if (this.pageSectionGroups === null) {\n return;\n }\n\n const { pageSectionGroups } = this;\n const sectionSchema = await this.getSectionSchema(sectionFileName);\n const sectionName = sectionSchema?.label || sectionFileName;\n\n let sourcePath = '';\n\n if (group) {\n // Use sync helper internally\n const sectionConfig = this._getTemplateConfigByType(\n 'sections',\n `${sectionFileName}.json`,\n );\n\n sourcePath = sectionConfig?.file_path ?? '';\n }\n\n pageSectionGroups.push({\n prop: getSectionGroupProp(sectionFileName),\n label: sectionName,\n source: sourcePath,\n group,\n });\n }\n\n /**\n * Get a list of sections and section groups in a page layout.\n */\n async getPageSectionGroups(\n pageId: string,\n altTemplate?: string,\n ): Promise<ThemeSectionGroupInfo[]> {\n // Use sync helper internally\n let pageConfig = this._getTemplateConfigByType(\n 'templates',\n pageId,\n altTemplate,\n );\n\n // Fall back to default template if alt not found\n if (!pageConfig) {\n pageConfig = this._getTemplateConfigByType('templates', pageId);\n }\n\n if (pageConfig === null) {\n return [];\n }\n\n const pageSchema = parseJsonConfig<ThemePageSchema>(pageConfig);\n const pageLayout = pageSchema.layout || '';\n\n const pageSectionGroups: ThemeSectionGroupInfo[] = [];\n this.pageSectionGroups = pageSectionGroups;\n\n await this.renderLayout(\n pageLayout,\n {},\n new RenderDrop(() => {\n pageSectionGroups.push({\n prop: SECTION_GROUP_CONTENT,\n label: 'Template',\n source: pageConfig.file_path,\n group: true,\n });\n\n return '';\n }) as unknown as string,\n );\n\n this.pageSectionGroups = null;\n\n return pageSectionGroups;\n }\n\n async getLayoutSectionGroups(\n sectionGroups: ThemeSectionGroupInfo[],\n resolveSettings: boolean = true,\n ): Promise<ThemeLayoutSectionGroupConfig[]> {\n const configs = new Map<string, SwellThemeConfig>();\n\n for (const sectionGroup of sectionGroups) {\n const config = await this.getThemeConfig(sectionGroup.source);\n\n if (config) {\n configs.set(config.file_path, config);\n }\n }\n\n // TODO: de-dupe with getAllSections\n const layoutSectionGroups = await getLayoutSectionGroups(\n configs,\n this.getTemplateSchema.bind(this),\n );\n\n // Resolve section config settings\n if (resolveSettings) {\n for (const layoutSectionGroup of layoutSectionGroups) {\n for (const sectionConfig of layoutSectionGroup.sectionConfigs) {\n const { schema } = sectionConfig;\n if (schema?.fields && this.globals && sectionConfig.settings) {\n sectionConfig.settings = resolveSectionSettings(\n this,\n sectionConfig,\n );\n }\n }\n }\n }\n\n return layoutSectionGroups;\n }\n\n async renderPageSections(\n sectionGroup: ThemeSectionGroup,\n data?: SwellData,\n ): Promise<ThemeSectionConfig[]> {\n let sectionConfigs = await this.getPageSections(sectionGroup, true);\n // skip disabled sections\n sectionConfigs = sectionConfigs.filter(\n (sectionConfig) => sectionConfig.section.disabled !== true,\n );\n return this.renderSectionConfigs(sectionConfigs, data);\n }\n\n async renderSectionConfigs(\n sectionConfigs: ThemeSectionConfig[],\n data?: SwellData,\n ): Promise<ThemeSectionConfig[]> {\n return Promise.all(\n sectionConfigs.map(async (sectionConfig, index) => {\n const { section, schema } = sectionConfig;\n const settings =\n schema?.fields && this.globals\n ? resolveSectionSettings(this, sectionConfig, index)\n : { ...sectionConfig.settings };\n\n // Use sync helper internally\n const templateConfig = this._getTemplateConfigByType(\n 'sections',\n `${section.type}.liquid`,\n );\n let output = '';\n if (templateConfig) {\n output = await this.renderTemplate(templateConfig, {\n ...data,\n ...settings,\n index,\n });\n\n if (settings?.section?.custom_css) {\n output += `<style>${scopeCustomCSS(\n settings.section.custom_css,\n sectionConfig.id,\n )}</style>`;\n }\n }\n\n return { ...sectionConfig, output };\n }),\n );\n }\n\n async renderTranslation(\n key: string,\n data?: unknown,\n fallback?: string,\n ): Promise<string> {\n const langObject = this.globals.language;\n const localeCode = this.globals.request?.locale;\n\n return this.renderTranslationValue(\n localeCode,\n langObject,\n key,\n data,\n fallback,\n );\n }\n\n async renderTranslationValue(\n localeCode: string,\n langConfig: any,\n key: string,\n data?: any,\n fallback?: string,\n ): Promise<string> {\n if (key === undefined) {\n return fallback || '';\n }\n\n const keyParts = key?.split('.') || [];\n const keyName = keyParts.pop() || '';\n const keyPath = keyParts.join('.');\n const langObject = get(langConfig, keyPath);\n\n let localeValue =\n get(langObject?.[localeCode], keyName) ||\n get(langObject?.[localeCode.split('-')[0]], keyName) ||\n langObject?.[keyName];\n\n // Plural vs singular\n if (data?.count !== undefined && localeValue?.one) {\n localeValue = data.count === 1 ? localeValue.one : localeValue.other;\n }\n\n if (typeof localeValue !== 'string' || localeValue === '') {\n return fallback || '';\n }\n\n const result = await this.renderTemplateString(localeValue, data);\n\n return result || fallback || '';\n }\n\n renderCurrency(amount: number, params?: FormatInput): string {\n return this.swell.storefront.currency.format(amount, params as FormatInput);\n }\n}\n\nexport class PageError extends Error {\n public title: string;\n public status: number = 500;\n public description?: string;\n\n constructor(\n title: string | Error = 'Something went wrong',\n status: number = 500,\n description?: string,\n ) {\n title = String(title);\n super(title + (description ? `: ${description}` : ''));\n this.title = title;\n this.status = status;\n this.description = description;\n }\n\n toString(): string {\n return this.message;\n }\n}\n\nexport class PageNotFound extends PageError {\n constructor(\n title: string = 'Page not found',\n status: number = 404,\n description?: string,\n ) {\n super(title, status, description);\n }\n}\n\nexport function resolveSectionSettings(\n theme: SwellTheme,\n sectionConfig: ThemeSectionConfig,\n index?: number,\n): ThemeSectionSettings | undefined {\n const { settings, schema } = sectionConfig;\n\n if (!schema || !settings?.section?.settings) {\n return settings;\n }\n\n const editorSettings: ThemeSettingSectionSchema[] = [\n { label: schema.label, fields: schema.fields },\n ];\n\n // skip disabled blocks\n let blocks = settings.section.blocks?.filter(\n (block) => block.disabled !== true,\n );\n\n blocks = blocks\n ?.filter((block) => Boolean(block.type))\n .map((block) => ({\n ...block,\n ...getBlockAttributes(theme, block),\n settings: resolveThemeSettings(\n theme,\n block.settings,\n schema.blocks?.filter((schemaBlock) => schemaBlock.type === block.type),\n ),\n }));\n\n return {\n ...settings,\n section: {\n ...settings.section,\n settings: resolveThemeSettings(\n theme,\n settings.section.settings,\n editorSettings,\n ),\n blocks,\n index0: index,\n index: typeof index === 'number' ? index + 1 : undefined,\n location: getSectionLocation(settings.section.type),\n },\n };\n}\n\nfunction fillDefaultThemeSettings(\n themeSettings: ThemeSettings,\n editorSchemaSettings: ThemeSettingSectionSchema[],\n): void {\n for (const section of editorSchemaSettings) {\n for (const field of section.fields) {\n if (field.id && !Object.hasOwn(themeSettings, field.id)) {\n themeSettings[field.id] =\n typeof field.default !== 'undefined' ? field.default : '';\n }\n }\n }\n}\n\nexport function resolveThemeSettings(\n theme: SwellTheme,\n themeSettings: ThemeSettings,\n editorSchemaSettings?: ThemeSettingSectionSchema[],\n): ThemeSettings {\n const settings = cloneDeep(themeSettings);\n\n if (settings.$locale) {\n const { locale } = theme.swell.getStorefrontLocalization();\n const localeConfig = settings.$locale[locale] || {};\n\n for (const [key, value] of Object.entries(localeConfig)) {\n if (value) {\n settings[key] = value;\n }\n }\n }\n\n each(settings, (value, key) => {\n const setting =\n (editorSchemaSettings && findEditorSetting(editorSchemaSettings, key)) ??\n null;\n\n if (isObject(value) && !(value instanceof StorefrontResource)) {\n // Object-based setting types\n switch (setting?.type) {\n case 'color_scheme_group': {\n each(value, (scheme, schemeId) => {\n if (\n isObject(scheme) &&\n typeof scheme.settings === 'object' &&\n scheme.settings\n ) {\n const settings = scheme.settings as Record<\n string,\n string | ThemeColor\n >;\n\n each(settings, (colorValue, colorId) => {\n const fieldDef = find(setting.fields, { id: colorId });\n\n // Skip empty values and gradient field\n if (fieldDef?.type === 'color' && colorValue) {\n scheme.id = schemeId;\n settings[colorId] = new ThemeColor(colorValue);\n }\n });\n }\n });\n\n return;\n }\n\n case 'color':\n settings[key] = ThemeColor.get(value as any);\n return;\n\n default:\n break;\n }\n // Nested settings\n settings[key] = resolveThemeSettings(theme, value, editorSchemaSettings);\n } else {\n switch (setting?.type) {\n case 'lookup':\n case 'product_lookup':\n case 'category_lookup':\n case 'customer_lookup':\n settings[key] = theme.resolveLookupSetting(setting, value);\n break;\n case 'color':\n if (value) {\n settings[key] = new ThemeColor(value);\n }\n break;\n case 'font':\n settings[key] = theme.resolveFontSetting(value);\n break;\n case 'menu':\n settings[key] = theme.resolveMenuSetting(value);\n break;\n case 'url':\n settings[key] = theme.resolveUrlSetting(value);\n break;\n case 'image':\n settings[key] = theme.resolveImageSetting(value);\n break;\n default:\n break;\n }\n }\n });\n\n return settings;\n}\n\nexport interface ThemeSettingFieldValue {\n setting: ThemeSettingFieldSchema;\n value: any;\n}\n\nexport function findThemeSettingsByType(\n type: string,\n themeSettings: ThemeSettings,\n editorSchemaSettings: ThemeSettingSectionSchema[],\n): ThemeSettingFieldValue[] {\n const foundSettings: ThemeSettingFieldValue[] = [];\n\n each(themeSettings, (value, key) => {\n // Ignore ThemeFont and StorefrontResource\n if (\n isObject(value) &&\n !(value instanceof ThemeFont) &&\n !(value instanceof StorefrontResource)\n ) {\n // Nested settings\n foundSettings.push(\n ...findThemeSettingsByType(type, value, editorSchemaSettings),\n );\n } else {\n const setting = findEditorSetting(editorSchemaSettings, key);\n if (setting?.type === type) {\n foundSettings.push({ setting, value });\n }\n }\n });\n\n return foundSettings;\n}\n\nexport function resolveLookupCollection(\n setting: ThemeSettingFieldSchema,\n): string | null | undefined {\n if (setting.collection) {\n return setting.collection;\n }\n switch (setting.type) {\n case 'product_lookup':\n return 'products';\n case 'category_lookup':\n return 'categories';\n case 'customer_lookup':\n return 'accounts';\n default:\n break;\n }\n}\n\nexport function findEditorSetting(\n editorSchemaSettings: ThemeSettingSectionSchema[],\n key: string,\n): ThemeSettingFieldSchema | null {\n for (const section of editorSchemaSettings || []) {\n for (const field of section.fields) {\n if (field.id === key) {\n return field;\n }\n }\n }\n\n return null;\n}\n\nfunction getBlockAttributes(theme: SwellTheme, block: ThemeSettingsBlock) {\n if (!theme.swell.isEditor) {\n return;\n }\n\n const { id } = block;\n const attributes = `data-editor-block=\"${JSON.stringify({ id }).replaceAll('\"', '&quot;')}\"`;\n\n return {\n swell_attributes: attributes,\n shopify_attributes: attributes,\n };\n}\n\nfunction parseJsonConfig<T>(config?: SwellThemeConfig | null): T {\n try {\n return JSON5.parse<T>(config?.file_data || '{}');\n } catch (err) {\n logger.warn(err);\n return {} as T;\n }\n}\n\nfunction extractSchemaTag(template: string, inner = false): string {\n const list = template.match(\n /\\{%-?\\s*schema\\s*-?%\\}(.*)\\{%-?\\s*endschema\\s*-?%\\}/s,\n );\n\n if (list === null) {\n return template;\n }\n\n return inner ? list[1] : list[0];\n}\n\nfunction withSuffix(path: string, suffix?: string) {\n return suffix ? `${path}.${suffix}` : path;\n}\n", "import { get, set, isObject, merge } from 'lodash-es';\n\nimport { Swell, StorefrontResource } from '@/api';\nimport { ThemeFont } from '@/liquid/font';\nimport { ThemeForm } from '@/liquid/form';\nimport { SwellTheme } from '@/theme';\nimport { extractSettingsFromForm } from '@/utils';\n\nimport {\n convertShopifySettingsSchema,\n convertShopifySettingsData,\n convertShopifySettingsPresets,\n convertShopifySectionSchema,\n convertShopifySectionGroup,\n SHOPIFY_TO_SWELL_SORTING,\n} from './shopify-configs';\nimport { shopifyFontToThemeFront } from './shopify-fonts';\nimport {\n adaptShopifyMenuData,\n adaptShopifyFontData,\n adaptShopifyFormData,\n ShopifyResource,\n} from './shopify-objects';\nimport * as ShopifyObjects from './shopify-objects';\nimport ShopifyShop from './shopify-objects/shop';\nimport ShopifyLocalization from './shopify-objects/localization';\nimport AllProductsDrop from './drops/all_products';\nimport ArticlesDrop from './drops/articles';\nimport BlogsDrop from './drops/blogs';\nimport CollectionsDrop from './drops/collections';\nimport ImagesDrop from './drops/images';\nimport ObjectHandlesDrop from './drops/object-handles';\nimport PagesDrop from './drops/pages';\n\nimport type {\n ThemeGlobals,\n ThemeSettings,\n ThemePresetSchema,\n ThemeEditorConfigSchema,\n ThemeSectionSchemaData,\n ThemeSectionGroup,\n ThemeLocaleConfig,\n SwellData,\n SwellMenu,\n SwellAppShopifyCompatibilityConfig,\n} from '../../types/swell';\n\nimport type {\n ShopifySettingsData,\n ShopifySettingsSchema,\n ShopifySectionSchema,\n ShopifySectionGroup,\n ShopifyPageResourceMap,\n ShopifyObjectResourceMap,\n ShopifyFormResourceMap,\n ShopifyQueryParamsMap,\n} from '../../types/shopify';\n\n/**\n * This class is meant to be extended by a storefront app to provide compatibility with Shopify's Liquid\n */\nexport class ShopifyCompatibility {\n public theme: SwellTheme;\n public swell: Swell;\n public pageId?: string;\n public pageResourceMap: ShopifyPageResourceMap;\n public objectResourceMap: ShopifyObjectResourceMap;\n public formResourceMap: ShopifyFormResourceMap;\n public queryParamsMap: ShopifyQueryParamsMap;\n public shopifyCompatibilityConfig?: SwellAppShopifyCompatibilityConfig;\n\n public editorLocaleConfig?: Record<string, ThemeLocaleConfig | undefined>;\n\n constructor(theme: SwellTheme) {\n this.theme = theme;\n this.swell = theme.swell;\n this.shopifyCompatibilityConfig =\n this.swell.shopifyCompatibilityConfig ?? undefined;\n\n this.pageResourceMap = this.getPageResourceMap();\n this.objectResourceMap = this.getObjectResourceMap();\n this.formResourceMap = this.getFormResourceMap();\n this.queryParamsMap = this.getQueryParamsMap();\n }\n\n initGlobals(globals: ThemeGlobals): void {\n const { request, page } = globals;\n\n globals.additional_checkout_buttons = false;\n // globals.all_country_option_tags = ''; // implemented in theme globals\n globals.all_products = new AllProductsDrop(this);\n globals.articles = new ArticlesDrop(this);\n globals.blogs = new BlogsDrop(this);\n globals.closest = {}; // TODO: implement\n globals.collections = new CollectionsDrop(this);\n globals.content_for_additional_checkout_buttons = ''; // TODO: implement\n globals.content_for_header = ''; // Should be pass in theme.renderLayout\n globals.content_for_index = ''; // Should be pass in theme.renderTemplateString\n globals.content_for_layout = ''; // Should be pass in theme.renderLayout\n // globals.country_option_tags = ''; // implemented in theme globals\n globals.current_page = this.swell.queryParams.page || 1;\n // globals.customer = {}; // implemented in theme globals\n // globals.handle = null; // implemented in theme globals\n globals.images = new ImagesDrop(this);\n globals.linklists = null; // init in adaptGlobals\n globals.localization = null; // init in adaptGlobals\n globals.metaobjects = {}; // TODO: implement\n\n globals.page = { ...(page || undefined) };\n\n // globals.page_description = null; // implemented in theme globals\n // globals.page_image = null; // implemented in theme globals\n // globals.page_title = null; // implemented in theme globals\n globals.pages = new PagesDrop(this); // TODO: implement\n // globals.powered_by_link = ''; // implemented in theme globals\n\n globals.request = {\n ...(request || undefined),\n design_mode: this.swell.isEditor,\n visual_section_preview: false, // TODO: Add support for visual section preview\n page_type: page?.id,\n };\n\n globals.routes = this.getPageRoutes();\n globals.scripts = {}; // deprecated\n // globals.settings = {}; implemented in theme globals\n globals.shop = null; // init in adaptGlobals\n globals.template = {}; // TODO: implement\n globals.theme = {}; // TODO: implement (deprecated)\n }\n\n adaptGlobals(\n globals: Partial<ThemeGlobals>,\n prevGlobals: ThemeGlobals,\n ): void {\n if (globals.page) {\n this.pageId = this.getPageType(globals.page.id);\n\n const request = globals.request || prevGlobals.request;\n request.page_type = globals.page.id;\n }\n\n if (globals.request) {\n const page = globals.page || prevGlobals.page;\n\n globals.request = {\n ...(globals.request || undefined),\n design_mode: this.swell.isEditor,\n visual_section_preview: false, // TODO: Add support for visual section preview\n page_type: page.id,\n };\n }\n\n if (globals.menus) {\n globals.linklists = new ObjectHandlesDrop<SwellMenu>(globals.menus);\n }\n\n if (globals.store) {\n globals.shop = this.getShopData(globals.store);\n\n const request = globals.request || prevGlobals.request;\n\n globals.localization = this.getLocalizationObject(globals.store, request);\n }\n }\n\n /**\n * Extracts values from the form according to the passed settings config\n *\n * @input\n * ```js\n * form = {\n * field1: { value: 'value1' },\n * field2: { value: 'value2' },\n * field3: { value: null },\n * extra: { value: 'value3' },\n * }\n * config = {\n * current: {\n * field1: 'old1',\n * field2: 'old2',\n * field3: 'old3',\n * field4: 'old4',\n * },\n * presets: {},\n * }\n * ```\n *\n * @output\n * ```js\n * return {\n * current: {\n * field1: 'value1',\n * field2: 'value2',\n * field3: 'old3',\n * field4: 'old4',\n * },\n * presets: {},\n * }\n * ```\n */\n adaptSettings(\n form: Record<string, { value: unknown } | undefined>,\n config: ShopifySettingsData,\n ) {\n const { current, presets } = config;\n\n const customCssValue = form.custom_css?.value;\n const customCssArray =\n typeof customCssValue === 'string'\n ? [customCssValue]\n : Array.isArray(customCssValue)\n ? customCssValue\n : [];\n\n // If current is undefined, return empty object with platform customizations\n if (typeof current === 'undefined') {\n return {\n current: {},\n presets: presets || {},\n platform_customizations: { custom_css: customCssArray },\n };\n }\n\n // `current` can be a preset object\n if (typeof current === 'object' && current) {\n return {\n current: extractSettingsFromForm(form, current),\n presets,\n platform_customizations: { custom_css: customCssArray },\n };\n }\n\n // Or the `current` one can be a string key\n const preset = presets?.[current];\n\n if (!preset) {\n throw new Error(\n `Failed to build settings config: \"${current}\" preset is not defined`,\n );\n }\n\n return {\n current,\n presets: { ...presets, [current]: extractSettingsFromForm(form, preset) },\n platform_customizations: { custom_css: customCssArray },\n };\n }\n\n adaptPageData(pageData: SwellData) {\n const pageMap = this.pageResourceMap.get(this.pageId || '');\n\n // Add object resources to the page based on the page resource map\n if (pageMap) {\n for (const [key, value] of Object.entries(pageData)) {\n const keyObject = `${key}.`;\n\n const resourceMap = pageMap.resources.find(\n ({ from }) => from === key || from.startsWith(keyObject),\n );\n\n if (resourceMap && value instanceof StorefrontResource) {\n const resource = resourceMap.object(this, value);\n const composed = Object.assign({}, value.toObject(), resource);\n\n Object.setPrototypeOf(composed, Object.getPrototypeOf(resource));\n\n pageData[resourceMap.to] = composed;\n }\n }\n }\n\n this.adaptObjectData(pageData);\n }\n\n adaptObjectData(objectData: SwellData) {\n // Adapt individual resources to Shopify objects from page data\n for (const value of Object.values(objectData)) {\n const objectMap = this.objectResourceMap.get(value?.constructor.name);\n\n if (objectMap) {\n const objectProps = objectMap.object(this, value);\n if (value instanceof StorefrontResource) {\n value.setCompatibilityProps(objectProps);\n } else {\n Object.assign(value, objectProps);\n }\n }\n }\n }\n\n adaptQueryParams() {\n // Adapt query params from Shopify to Swell compatible format\n const adaptedParams: SwellData = {};\n for (const [key, value] of Object.entries(this.swell.queryParams)) {\n const paramMap = this.queryParamsMap.find(({ from }) =>\n typeof from === 'function' ? from(key) : from === key,\n );\n if (paramMap) {\n const toObject =\n typeof paramMap.to === 'function'\n ? paramMap.to(key, value as string)\n : { [paramMap.to]: value };\n\n merge(adaptedParams, toObject);\n } else {\n adaptedParams[key] = value;\n }\n }\n\n this.swell.queryParams = adaptedParams;\n }\n\n getAdaptedFormType(shopifyType: string) {\n const formMap = this.formResourceMap.find(\n (form) => form.shopifyType === shopifyType,\n );\n return formMap?.type;\n }\n\n async getAdaptedFormClientParams(\n formType: string,\n scope: SwellData,\n arg?: any,\n ) {\n const formMap = this.formResourceMap.find((form) => form.type === formType);\n if (formMap?.clientParams) {\n return formMap.clientParams(scope, arg);\n }\n }\n\n async getAdaptedFormClientHtml(\n formType: string,\n scope: SwellData,\n arg?: any,\n ) {\n const formMap = this.formResourceMap.find((form) => form.type === formType);\n const formTypeConfig = this.shopifyCompatibilityConfig?.forms?.find(\n (form) => form.id === formType,\n );\n\n if (formMap && formTypeConfig) {\n return formTypeConfig.client_params?.reduce((acc, param) => {\n return (\n `<input type=\"hidden\" name=\"${param.name}\" value=\"${param.value}\" />` +\n acc\n );\n }, ``);\n }\n }\n\n async getAdaptedFormServerParams(formType: string, context: SwellData) {\n const formMap = this.formResourceMap.find(\n (form) => form.type === formType || form.shopifyType === formType,\n );\n if (typeof formMap?.serverParams === 'function') {\n return formMap.serverParams(context);\n }\n }\n\n async getAdaptedFormServerResponse(formType: string, context: SwellData) {\n const formMap = this.formResourceMap.find(\n (form) => form.type === formType || form.shopifyType === formType,\n );\n if (typeof formMap?.serverResponse === 'function') {\n return formMap.serverResponse(context);\n }\n }\n\n getShopData(store: SwellData) {\n if (store) {\n return ShopifyShop(this, store);\n }\n return {};\n }\n\n getContentForHeader() {\n const { shop, store, request } = this.theme.globals;\n\n const shopifyTheme = {\n id: 1,\n name: store.name as string,\n schema_name: shop.name as string,\n schema_version: '1.0.0',\n theme_store_id: null,\n role: request.design_mode\n ? 'development'\n : request.is_preview\n ? 'unpublished'\n : 'main',\n };\n\n const injects: string[] = [];\n\n if (request.design_mode) {\n injects.push('Shopify.designMode = true;');\n }\n\n if (request.is_preview) {\n injects.push('Shopify.inspectMode = true;');\n }\n\n if (request.visual_section_preview) {\n injects.push('Shopify.visualPreviewMode = true;');\n }\n\n return `<script>var Shopify = Shopify || {};\nShopify.shop = \"${shop.domain}\";\nShopify.locale = \"${store.locale}\";\nShopify.currency = {\"active\":\"${store.currency}\",\"rate\":\"1.0\"};\nShopify.country = \"${store.country}\";\nShopify.theme = ${JSON.stringify(shopifyTheme)};\nShopify.theme.handle = \"null\";\nShopify.theme.style = {\"id\":null,\"handle\":null};\nShopify.cdnHost = \"cdn.swell.io\";\nShopify.routes = Shopify.routes || {};\nShopify.routes.root = \"/\";\n${injects.join('\\n')}</script>`;\n }\n\n getMenuData(menu: SwellMenu): SwellData {\n return adaptShopifyMenuData(this, menu);\n }\n\n getFontData(font: ThemeFont): SwellData {\n return adaptShopifyFontData(this, font);\n }\n\n getFormData(form: ThemeForm): SwellData {\n return adaptShopifyFormData(this, form);\n }\n\n getFontFromShopifySetting(fontSetting: string) {\n return shopifyFontToThemeFront(fontSetting);\n }\n\n getThemeConfig(settingsData: ShopifySettingsData): ThemeSettings {\n return convertShopifySettingsData(settingsData);\n }\n\n getPresetsConfig(settingsData: ShopifySettingsData): ThemePresetSchema[] {\n return convertShopifySettingsPresets(settingsData);\n }\n\n getEditorConfig(\n settingsSchema: ShopifySettingsSchema,\n ): ThemeEditorConfigSchema {\n const { locale } = this.swell.getStorefrontLocalization();\n return convertShopifySettingsSchema(settingsSchema, locale);\n }\n\n getSectionConfigSchema(\n sectionSchema: ShopifySectionSchema,\n ): ThemeSectionSchemaData {\n const { locale } = this.swell.getStorefrontLocalization();\n return convertShopifySectionSchema(sectionSchema, locale);\n }\n\n getSectionGroup(sectionGroup: ShopifySectionGroup): ThemeSectionGroup {\n const { locale } = this.swell.getStorefrontLocalization();\n return convertShopifySectionGroup(sectionGroup, locale);\n }\n\n async getEditorLocaleConfig(\n theme: SwellTheme,\n localeCode: string,\n ): Promise<ThemeLocaleConfig> {\n if (this.editorLocaleConfig?.[localeCode]) {\n return this.editorLocaleConfig[localeCode];\n }\n\n const editorLocaleConfig = await theme.getLocaleConfig(\n localeCode,\n '.schema.json',\n );\n\n this.editorLocaleConfig = { [localeCode]: editorLocaleConfig };\n\n return editorLocaleConfig;\n }\n\n async renderSchemaTranslations<T>(\n theme: SwellTheme,\n schema: T,\n localeCode: string = 'en',\n ): Promise<T> {\n if (!isObject(schema)) {\n return schema;\n }\n\n // Fetch all available locales from the storefront\n const locales = await theme.swell.storefront.locale.list();\n // Combine the default locale with other locale codes\n const localeCodes = new Set([\n localeCode,\n ...locales.map((locale) => locale.code),\n ]);\n\n // Load editor locale configurations for each locale\n const localeConfigs: Record<string, ThemeLocaleConfig> = {};\n for (const locale of localeCodes) {\n localeConfigs[locale] = await this.getEditorLocaleConfig(theme, locale);\n }\n\n return this.renderSchemaTranslationValue(\n theme,\n schema,\n localeCode,\n localeConfigs,\n );\n }\n\n renderSchemaTranslationValue<T>(\n theme: SwellTheme,\n schemaValue: T,\n localeCode: string,\n localeConfigs: Record<string, ThemeLocaleConfig>,\n ): T {\n switch (typeof schemaValue) {\n case 'string': {\n if (schemaValue.startsWith('t:')) {\n const localeConfig = localeConfigs[localeCode];\n const key = schemaValue.slice(2);\n const keyParts = key?.split('.');\n const keyName = keyParts.pop() || '';\n const keyPath = keyParts.join('.');\n const langObject = get(localeConfig, keyPath);\n\n return (langObject?.[keyName] ?? key) as T;\n }\n\n break;\n }\n\n case 'object': {\n if (Array.isArray(schemaValue)) {\n const result = [];\n\n for (const value of schemaValue) {\n result.push(\n this.renderSchemaTranslationValue(\n theme,\n value,\n localeCode,\n localeConfigs,\n ),\n );\n }\n\n return result as T;\n }\n\n if (schemaValue !== null) {\n const result = { ...schemaValue } as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(schemaValue)) {\n result[key] = this.renderSchemaTranslationValue<unknown>(\n theme,\n value,\n localeCode,\n localeConfigs,\n );\n\n // Handle other locales for fields starting with \"t:\"\n if (typeof value === 'string' && value.startsWith('t:')) {\n for (const locale of Object.keys(localeConfigs)) {\n if (locale === localeCode) {\n continue;\n }\n\n const localeValue = this.renderSchemaTranslationValue<unknown>(\n theme,\n value,\n locale,\n localeConfigs,\n );\n\n // Store translation in $locale key\n set(result, `$locale.${locale}.${key}`, localeValue);\n }\n }\n }\n\n return result as T;\n }\n\n break;\n }\n\n default:\n break;\n }\n\n return schemaValue;\n }\n\n /*\n * Override these methods for app compatibility implementation\n */\n\n getPageType(pageId: string) {\n return this.shopifyCompatibilityConfig?.page_types?.[pageId] || pageId;\n }\n\n getPageRouteUrl(pageId: string): string {\n return (\n this.theme.props.pages?.find((page) => page.id === pageId)?.url || pageId\n );\n }\n\n getPageRoutes() {\n const routes = {\n account_addresses_url: this.getPageRouteUrl('account/addresses'),\n account_login_url: this.getPageRouteUrl('account/login'),\n account_logout_url: this.getPageRouteUrl('account/logout'),\n account_recover_url: this.getPageRouteUrl('account/recover'),\n account_register_url: this.getPageRouteUrl('account/signup'),\n account_url: this.getPageRouteUrl('account/index'),\n all_products_collection_url: this.getPageRouteUrl('products/index'),\n cart_add_url: this.getPageRouteUrl('cart/add'),\n cart_change_url: this.getPageRouteUrl('cart/change'),\n cart_clear_url: this.getPageRouteUrl('cart/clear'),\n cart_update_url: this.getPageRouteUrl('cart/update'),\n cart_url: this.getPageRouteUrl('cart/index'),\n collections_url: this.getPageRouteUrl('categories/index'),\n predictive_search_url: this.getPageRouteUrl('search/suggest'),\n product_recommendations_url: this.getPageRouteUrl('products/index'),\n root_url: this.getPageRouteUrl('index'),\n search_url: this.getPageRouteUrl('search'),\n };\n\n type RouteKey = keyof typeof routes;\n\n if (this.shopifyCompatibilityConfig?.page_routes) {\n for (const [key, value] of Object.entries(\n this.shopifyCompatibilityConfig.page_routes,\n )) {\n if (value && typeof value === 'object' && value.page_id) {\n routes[key as RouteKey] = this.getPageRouteUrl(value.page_id);\n } else if (typeof value === 'string') {\n routes[key as RouteKey] = value;\n }\n }\n }\n\n return routes;\n }\n\n getLocalizationObject(store: SwellData, request: SwellData) {\n return ShopifyLocalization(this, store, request);\n }\n\n getAdaptedPageUrl(url: string): string | undefined {\n if (!url) return;\n\n let pageId;\n const urlParams: Record<string, string | undefined> = {};\n\n const [pathname, query] = url.split('?');\n const pathExtParts = pathname.split('.');\n const ext = pathExtParts[1] ? pathExtParts.pop() : null;\n const [, segment1, segment2, segment3] = pathExtParts.join('.').split('/');\n\n switch (segment1) {\n case 'account':\n switch (segment2) {\n case 'order':\n pageId = 'account/order';\n urlParams.id = segment3;\n break;\n case 'subscriptions':\n pageId = 'account/subscription';\n urlParams.id = segment3;\n break;\n case 'register':\n pageId = 'account/signup';\n break;\n default:\n break;\n }\n break;\n\n case 'blog':\n if (segment2) {\n pageId = 'blogs/category';\n urlParams.category = segment2;\n }\n if (segment3) {\n pageId = 'blogs/blog';\n urlParams.slug = segment3;\n }\n break;\n\n case 'collections':\n if (segment2) {\n if (segment2 === 'all') {\n pageId = 'products/index';\n } else {\n pageId = 'categories/category';\n urlParams.slug = segment2;\n }\n } else {\n pageId = 'categories/index';\n }\n break;\n\n case 'gift_card':\n if (segment2) {\n pageId = 'gift-card';\n urlParams.code = segment2;\n }\n break;\n }\n\n if (pageId) {\n const pageUrl = this.getPageRouteUrl(pageId);\n if (pageUrl) {\n // TODO: replace with pathToRegexp\n const adaptedUrl = pageUrl.replace(\n /:(\\w+)/g,\n (_match, key) => urlParams[key] as string,\n );\n return adaptedUrl + (ext ? `.${ext}` : '') + (query ? `?${query}` : '');\n }\n }\n }\n\n getThemeFilePath(type: string, name: string): string {\n switch (type) {\n case 'assets':\n return `assets/${name}`;\n case 'components':\n return `snippets/${name}`;\n case 'config':\n return `config/${name}`;\n case 'layouts':\n return `layout/${name}`;\n case 'templates':\n return `templates/${this.getPageType(name)}`;\n case 'sections':\n return `sections/${name}`;\n case 'blocks':\n return `blocks/${name}`;\n default:\n throw new Error(`Theme file type not supported: ${type}`);\n }\n }\n\n getPageResourceMap(): ShopifyPageResourceMap {\n if (!this.shopifyCompatibilityConfig?.page_resources) {\n return new Map();\n }\n\n return this.shopifyCompatibilityConfig.page_resources.reduce(\n (map, item) => {\n return map.set(item.page, {\n page: item.page,\n resources: item.resources.map(({ from, to, object }) => {\n const shopifyObject =\n ShopifyObjects[object as keyof typeof ShopifyObjects];\n\n if (!shopifyObject) {\n throw new Error(`ShopifyObject for '${object}' not found.`);\n }\n\n return {\n from,\n to,\n object: shopifyObject as (\n shopify: ShopifyCompatibility,\n value: StorefrontResource<SwellData>,\n ) => ShopifyResource<SwellData>,\n };\n }),\n });\n },\n new Map() as ShopifyPageResourceMap,\n );\n }\n\n getObjectResourceMap(): ShopifyObjectResourceMap {\n if (!this.shopifyCompatibilityConfig?.object_resources) {\n return new Map();\n }\n\n return this.shopifyCompatibilityConfig.object_resources.reduce(\n (map, item) => {\n const shopifyObject =\n ShopifyObjects[item.object as keyof typeof ShopifyObjects];\n\n if (!shopifyObject) {\n throw new Error(`ShopifyObject for '${item.object}' not found.`);\n }\n\n return map.set(item.from, {\n from: item.from,\n object: shopifyObject as (\n shopify: ShopifyCompatibility,\n value: StorefrontResource<SwellData>,\n ) => ShopifyResource<SwellData>,\n });\n },\n new Map() as ShopifyObjectResourceMap,\n );\n }\n\n getFormResourceMap(): ShopifyFormResourceMap {\n if (this.shopifyCompatibilityConfig?.forms) {\n return this.shopifyCompatibilityConfig.forms.map((form) => ({\n shopifyType: form.shopify_type,\n type: form.id,\n }));\n }\n return [];\n }\n\n getQueryParamsMap(): ShopifyQueryParamsMap {\n return [\n {\n from(param) {\n return param === 'sort_by';\n },\n to(_param, value) {\n return { sort: SHOPIFY_TO_SWELL_SORTING[value] ?? (value || '') };\n },\n },\n {\n from(param) {\n return param.startsWith('filter.v.');\n },\n to(param, value) {\n const [attribute, attributeScope] = param\n .split('filter.v.')[1]\n .split('.');\n const filterKey = `filter_${attribute}`;\n\n return attributeScope\n ? { [filterKey]: { [attributeScope]: value } }\n : { [filterKey]: value };\n },\n },\n ];\n }\n\n getCompatibilityFeatures(): Record<string, boolean> | undefined {\n const themeRecord = this.theme.getThemeRecord();\n\n return get(themeRecord, 'storefront.compatibility.features');\n }\n\n supportsSwellPrices(): boolean {\n const features = this.getCompatibilityFeatures();\n\n return Boolean(features?.swell_prices);\n }\n\n supportsSwellVariants(): boolean {\n const features = this.getCompatibilityFeatures();\n\n return Boolean(features?.swell_variants);\n }\n\n toShopifyPrice<T>(amount: T): number | T {\n if (typeof amount !== 'number' || this.supportsSwellPrices()) {\n return amount;\n }\n\n return Math.round(amount * 100);\n }\n\n fromShopifyPrice(amount: number): number {\n if (this.supportsSwellPrices()) {\n return amount;\n }\n\n return amount / 100;\n }\n\n // returns true if this URL is used for script actions\n isScriptFormActionUrl(url: string): boolean {\n if (!url) {\n return false;\n }\n\n const routes =\n this.shopifyCompatibilityConfig?.editor_configs?.script_actions_routes ||\n {};\n\n for (const value of Object.values(routes)) {\n if (url === value) {\n return true;\n }\n }\n\n return false;\n }\n\n // returns true if this URL is used from scripts\n isScriptUrl(url: string): boolean {\n if (!url) {\n return false;\n }\n\n const routes =\n this.shopifyCompatibilityConfig?.editor_configs?.script_routes || {};\n\n for (const value of Object.values(routes)) {\n if (url.startsWith(value)) {\n return true;\n }\n }\n\n return false;\n }\n\n // returns true if we should redirect to page start (#) after this action\n needRedirectToPageStart(formId: string): boolean {\n if (!formId) {\n return false;\n }\n const formIds =\n this.shopifyCompatibilityConfig?.editor_configs\n ?.redirect_to_page_start_forms || [];\n return formIds.includes(formId);\n }\n\n // returns true for checkout action\n isCheckoutForm(formId: string): boolean {\n if (!formId) {\n return false;\n }\n\n return (\n this.shopifyCompatibilityConfig?.editor_configs?.checkout_form === formId\n );\n }\n}\n", "import type { ThemeFontConfig } from '../types/swell';\n\n/**\n * Map of all fonts supported by Swell.\n */\nexport const fontMap: Array<ThemeFontConfig> = [\n // System fonts\n {\n family: 'monospace',\n label: 'Monospace',\n fallback:\n 'Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol',\n axes: ['wght', 'ital'],\n variants: [{ wght: 400 }, { wght: 400, ital: 1 }, { wght: 600, ital: 1 }],\n system: true,\n },\n {\n family: 'serif',\n label: 'Serif',\n fallback:\n 'Iowan Old Style, Apple Garamond, Baskerville, Times New Roman, Droid Serif, Times, Source Serif Pro, serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol',\n axes: ['wght', 'ital'],\n variants: [{ wght: 400 }, { wght: 400, ital: 1 }, { wght: 600, ital: 1 }],\n system: true,\n },\n {\n family: 'sans-serif',\n label: 'Sans-serif',\n fallback:\n 'BlinkMacSystemFont, Segoe UI, Roboto, Ubuntu, Helvetica Neue, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol',\n axes: ['wght', 'ital'],\n variants: [{ wght: 400 }, { wght: 400, ital: 1 }, { wght: 600, ital: 1 }],\n system: true,\n },\n // Google fonts\n {\n family: 'Abel',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Abril Fatface',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Alegreya',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Alegreya Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Amiri',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Anonymous Pro',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Arapey',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n ],\n },\n {\n family: 'Archivo',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Archivo Narrow',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Arimo',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Armata',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Arvo',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Asap',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Assistant',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n ],\n },\n {\n family: 'Asul',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Bio Rhyme',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n ],\n },\n {\n family: 'Bitter',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Cabin',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Cardo',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Catamaran',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Chivo',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Cormorant',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Crimson Text',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'DM Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Domine',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Dosis',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n ],\n },\n {\n family: 'Eczar',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n ],\n },\n {\n family: 'Fira Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Fjalla One',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Glegoo',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'IBM Plex Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Inconsolata',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Inknut Antiqua',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Inter',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Josefin Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Josefin Slab',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Kalam',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Karla',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Kreon',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Lato',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Libre Baskerville',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Libre Franklin',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Lobster',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Lobster Two',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Lora',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Maven Pro',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 700,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Megrim',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Merriweather Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n ],\n },\n {\n family: 'Montserrat',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Mouse Memoirs',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Muli',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Neuton',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n ],\n },\n {\n family: 'News Cycle',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Newsreader',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n ],\n },\n {\n family: 'Nobile',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Noticia Text',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Noto Serif',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Nunito',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Nunito Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Old Standard TT',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Open Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n ],\n },\n {\n family: 'Open Sans Condensed',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Oswald',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Ovo',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Oxygen',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'PT Mono',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'PT Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'PT Sans Narrow',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'PT Serif',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Pacifico',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Playball',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Playfair Display',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Poppins',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Prata',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Prompt',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Proza Libre',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n ],\n },\n {\n family: 'Quantico',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Quattrocento',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Quattrocento Sans',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Questrial',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Quicksand',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Rajdhani',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Raleway',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 800,\n },\n {\n wght: 800,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Righteous',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Roboto',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Roboto Condensed',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Roboto Mono',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 100,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Roboto Slab',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Rubik',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Shadows Into Light',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Slabo 13px',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Smooch',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Source Code Pro',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Source Sans Pro',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Space Mono',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Syne',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n ],\n },\n {\n family: 'Tenor Sans',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Tinos',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Titillium Web',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 200,\n ital: 1,\n },\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Ubuntu',\n fallback: 'sans-serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 300,\n ital: 1,\n },\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 500,\n },\n {\n wght: 500,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Unica One',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Unna',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Varela',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Varela Round',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Vidaloka',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Volkhov',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n ],\n },\n {\n family: 'Vollkorn',\n fallback: 'serif',\n axes: ['wght', 'ital'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 400,\n ital: 1,\n },\n {\n wght: 600,\n },\n {\n wght: 600,\n ital: 1,\n },\n {\n wght: 700,\n },\n {\n wght: 700,\n ital: 1,\n },\n {\n wght: 900,\n },\n {\n wght: 900,\n ital: 1,\n },\n ],\n },\n {\n family: 'Work Sans',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'BIZ UDPMincho',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Dela Gothic One',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Hina Mincho',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Kaisei Decol',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Kaisei Opti',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 700,\n },\n ],\n },\n {\n family: 'Kaisei Tokumin',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n ],\n },\n {\n family: 'M PLUS 1',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'M PLUS Rounded 1c',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Mochiy Pop P One',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Murecho',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Noto Sans Japanese',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 100,\n },\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Noto Serif Japanese',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 200,\n },\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Shippori Mincho',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 800,\n },\n ],\n },\n {\n family: 'Zen Kaku Gothic New',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 700,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Zen Kurenaido',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n ],\n },\n {\n family: 'Zen Maru Gothic',\n fallback: 'sans-serif',\n axes: ['wght'],\n variants: [\n {\n wght: 300,\n },\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 700,\n },\n {\n wght: 900,\n },\n ],\n },\n {\n family: 'Zen Old Mincho',\n fallback: 'serif',\n axes: ['wght'],\n variants: [\n {\n wght: 400,\n },\n {\n wght: 500,\n },\n {\n wght: 600,\n },\n {\n wght: 700,\n },\n {\n wght: 900,\n },\n ],\n },\n];\n\nexport const systemFonts = fontMap\n .filter((font) => font.system)\n .map((font) => font.family);\n", "import { fontMap } from '../fonts';\n\nimport type {\n ThemeFontConfig,\n ThemeFontVariant,\n ThemeFontVariantSetting,\n} from '../../types/swell';\n\nexport class ThemeFont {\n public id: string = '';\n public family: string = 'sans-serif';\n public weight: number = 400;\n public style: string = 'normal';\n public fallback_families?: string = 'sans-serif'; // TODO\n\n public system: boolean = true;\n public variant: ThemeFontVariant = { wght: 400 };\n\n public variants: ThemeFont[] = [];\n\n public definition?: ThemeFontConfig;\n\n constructor(fontSetting: ThemeFontVariantSetting | string) {\n let family, style, weight, variant;\n\n if (typeof fontSetting === 'string') {\n ({ family, style, weight, variant } =\n ThemeFont.stringToSetting(fontSetting));\n } else if (fontSetting) {\n ({ family, style, weight, variant } =\n ThemeFont.resolveSetting(fontSetting));\n }\n\n if (family) {\n this.id =\n typeof fontSetting === 'string'\n ? fontSetting\n : ThemeFont.settingToString({ family, weight, style, variant });\n this.family = family;\n this.style = style || 'normal';\n\n if (weight) {\n this.weight = weight;\n }\n if (variant) {\n this.variant = variant;\n }\n\n this.definition = ThemeFont.findByFamily(family);\n\n if (this.definition) {\n this.fallback_families = this.definition.fallback;\n this.system = this.definition.system || false;\n /* this.variants = this.definition.variants.map(\n (variant: ThemeFontVariant) => {\n return new ThemeFont({\n family,\n weight,\n variant,\n });\n },\n ); */\n }\n }\n }\n\n static get(value: string | ThemeFont): ThemeFont {\n if (isThemeFontLike(value)) {\n return value;\n }\n\n return new ThemeFont(value);\n }\n\n static clone(value: string | ThemeFont): ThemeFont {\n if (isThemeFontLike(value)) {\n return new ThemeFont(ThemeFont.get(value).toString());\n }\n\n return new ThemeFont(value);\n }\n\n static findByFamily(family: string) {\n return family\n ? fontMap.find((f) => f.family.toLowerCase() === family.toLowerCase())\n : undefined;\n }\n\n static stringToSetting(fontSetting: string) {\n const [family, variant] = fontSetting.split(':');\n const [axisId, valueId] = variant?.toLowerCase().split('@') || [];\n\n const axes = axisId?.split(',') || [];\n const values = valueId?.split(',') || [];\n const weight = Number.parseInt(values[axes.indexOf('wght')], 10);\n\n return {\n family,\n weight,\n style: axes.includes('ital')\n ? 'italic'\n : axes.includes('slnt')\n ? 'oblique'\n : 'normal',\n variant: {\n wght: weight,\n wdth: axes.includes('wdth')\n ? Number.parseInt(values[axes.indexOf('wdth')], 10)\n : undefined,\n slnt: axes.includes('slnt')\n ? Number.parseInt(values[axes.indexOf('slnt')], 10)\n : undefined,\n opsz: axes.includes('opsz')\n ? Number.parseInt(values[axes.indexOf('opsz')], 10)\n : undefined,\n ital: axes.includes('ital')\n ? Number.parseInt(values[axes.indexOf('ital')], 10)\n : undefined,\n },\n };\n }\n\n static settingToString(setting: ThemeFontVariantSetting) {\n const { family, variant } = ThemeFont.resolveSetting(setting);\n return `${family}:${ThemeFont.variantToString(variant)}`;\n }\n\n static variantToString(variant: ThemeFontVariant) {\n // Note: axes must be listed in alphabetical order\n const axes = [];\n const values = [];\n\n if (variant.ital !== undefined) {\n axes.push('ital');\n values.push(variant.ital || 0);\n }\n\n if (variant.opsz !== undefined) {\n axes.push('opsz');\n values.push(variant.opsz || 0);\n }\n\n if (variant.slnt !== undefined) {\n axes.push('slnt');\n values.push(variant.slnt || 0);\n }\n\n if (variant.wdth !== undefined) {\n axes.push('wdth');\n values.push(variant.wdth || 0);\n }\n\n axes.push('wght');\n values.push(variant.wght);\n\n const axisId = axes.join(',');\n const valueId = values.join(',');\n return `${axisId}@${valueId}`;\n }\n\n static resolveSetting(setting: ThemeFontVariantSetting) {\n const { family, style, weight, variant } = setting;\n\n const font = ThemeFont.findByFamily(family);\n\n const wdthValue =\n typeof variant?.wdth === 'number' ? variant.wdth : undefined;\n\n const italValue =\n typeof variant?.ital === 'number'\n ? variant.ital\n : style === 'italic'\n ? font?.variants.find((v) => v.ital && v.ital > 0)?.ital\n : undefined;\n\n const opszValue =\n typeof variant?.opsz === 'number' ? variant.opsz : undefined;\n\n const slntValue =\n typeof variant?.slnt === 'number'\n ? variant.slnt\n : style === 'oblique'\n ? font?.variants.find((v) => v.slnt && v.slnt > 0)?.slnt\n : undefined;\n\n return {\n family,\n weight: weight || variant?.wght,\n style:\n italValue !== undefined\n ? 'italic'\n : slntValue !== undefined\n ? 'oblique'\n : 'normal',\n variant: {\n wght: weight || variant?.wght,\n wdth: wdthValue,\n slnt: slntValue,\n opsz: opszValue,\n ital: italValue,\n },\n };\n }\n\n static combinedGoogleFontUrl(fontSettings: string[]): string {\n const allFonts = fontSettings.map((font) => ThemeFont.get(font));\n\n const allFamilies: string[] = [];\n for (const font of allFonts) {\n const googleFamily = font.googleFamily();\n if (!allFamilies.includes(googleFamily)) {\n allFamilies.push(googleFamily);\n }\n }\n\n return `https://fonts.googleapis.com/css2?family=${allFamilies.join(\n '&family=',\n )}&display=swap`;\n }\n\n toString(): string {\n return this.id;\n }\n\n googleFamily(): string {\n if (this.definition) {\n const allAxes = this.definition.axes.sort(); // Must be alphabetical\n const allValues = this.definition.variants\n .map((variant: ThemeFontVariant) =>\n allAxes.map((axis) => variant[axis] || 0).join(','),\n )\n .sort();\n return `${this.family}:${allAxes.join(',')}@${allValues.join(';')}`;\n }\n\n return '';\n }\n\n url(): string {\n return `https://fonts.googleapis.com/css2?family=${this.googleFamily()}&display=swap`;\n }\n\n face(options: { font_display?: string } = {}): string {\n const css = `\n @font-face {\n font-family: '${this.family}';\n font-style: ${this.style};\n font-weight: ${this.weight};${\n options.font_display\n ? `\\n font-display: ${options.font_display};`\n : ''\n }\n }\n `;\n // trim whitespace\n return css.replace(/^ {3} */gm, '').trim();\n }\n\n modify(prop: string, value: string): ThemeFont | null {\n // Returns null if modified property is invalid\n switch (prop) {\n case 'style': {\n const validStyle = this.resolveValidProperty(prop, value);\n\n if (validStyle) {\n this.style = value;\n\n switch (value) {\n case 'oblique':\n this.variant.slnt = 1;\n break;\n\n case 'italic':\n this.variant.ital = 1;\n break;\n\n default:\n this.variant.slnt = 0;\n this.variant.ital = 0;\n break;\n }\n\n break;\n }\n\n return null;\n }\n\n // Modify weight by relative or absolute value\n case 'weight': {\n let targetWeight;\n\n switch (value) {\n case 'normal':\n targetWeight = 400;\n break;\n\n case 'bold':\n targetWeight = 700;\n break;\n\n case 'lighter': {\n if (this.weight <= 400) {\n targetWeight = 100;\n } else if (this.weight <= 700) {\n targetWeight = 400;\n } else {\n targetWeight = 700;\n }\n\n break;\n }\n\n case 'bolder': {\n if (this.weight < 400) {\n targetWeight = 400;\n } else if (this.weight < 700) {\n targetWeight = 700;\n } else {\n targetWeight = 900;\n }\n\n break;\n }\n\n default: {\n switch (value.slice(0, 1)) {\n case '+':\n targetWeight =\n this.weight + Number.parseInt(value.slice(1), 10);\n break;\n\n case '-':\n targetWeight =\n this.weight - Number.parseInt(value.slice(1), 10);\n break;\n\n default:\n targetWeight = Number.parseInt(value, 10);\n break;\n }\n\n break;\n }\n }\n\n const validWeight = this.resolveValidProperty(\n prop,\n targetWeight,\n ) as number;\n\n if (validWeight) {\n this.weight = targetWeight;\n this.variant.wght = validWeight;\n break;\n }\n\n return null;\n }\n\n // Modify variant properties\n case 'wght':\n case 'wdth':\n case 'slnt':\n case 'opsz':\n case 'ital': {\n const validValue = this.resolveValidProperty(prop, value) as number;\n\n if (validValue) {\n this.variant[prop] = validValue;\n\n if (prop === 'slnt' && validValue > 0) {\n this.style = 'oblique';\n } else if (prop === 'ital' && validValue > 0) {\n this.style = 'italic';\n } else if (prop === 'slnt' || prop === 'ital') {\n this.style = 'normal';\n }\n\n break;\n }\n\n return null;\n }\n\n default:\n throw new Error(`Invalid font property: ${prop}`);\n }\n\n this.id = ThemeFont.settingToString({\n variant: this.variant,\n family: this.family,\n weight: this.weight,\n style: this.style,\n });\n\n return this;\n }\n\n resolveValidProperty(prop: string, value: string | number) {\n if (!this.definition) {\n return null;\n }\n if (prop === 'style') {\n switch (value) {\n case 'italic':\n return this.definition.axes.includes('ital') ? 'italic' : null;\n case 'oblique':\n return this.definition.axes.includes('slnt') ? 'oblique' : null;\n default:\n return null;\n }\n }\n\n const targetValue =\n typeof value === 'string' ? Number.parseInt(value, 10) : value;\n\n switch (prop) {\n case 'wght':\n case 'weight':\n return (\n this.definition.variants.find((v) => v.wght === targetValue) || null\n );\n case 'wdth':\n return (\n this.definition.variants.find((v) => v.wdth === targetValue) || null\n );\n case 'slnt':\n return (\n this.definition.variants.find((v) => v.slnt === targetValue) || null\n );\n case 'opsz':\n return (\n this.definition.variants.find((v) => v.opsz === targetValue) || null\n );\n case 'ital':\n return (\n this.definition.variants.find((v) => v.ital === targetValue) || null\n );\n default:\n return null;\n }\n }\n}\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isThemeFontLike(value: unknown): value is ThemeFont {\n return (\n isObjectLike(value) &&\n typeof value.style === 'string' &&\n typeof value.family === 'string' &&\n typeof value.weight === 'number' &&\n typeof value.modify === 'function' &&\n typeof value.googleFamily === 'function'\n );\n}\n", "import type { SwellData, ThemeFormErrorMessages } from 'types/swell';\n\nexport class ThemeForm {\n public id: string;\n public success: boolean = false;\n public errors: ThemeFormErrors | null = null;\n\n constructor(id: string) {\n this.id = id;\n }\n\n setSuccess(success: boolean = true) {\n this.success = success;\n }\n\n setParams(params: SwellData) {\n Object.assign(this, params);\n }\n\n setErrors(errors: ThemeFormErrorMessages) {\n this.errors = new ThemeFormErrors(errors);\n }\n\n clearErrors() {\n this.errors = null;\n }\n}\n\nexport class ThemeFormErrors {\n private errors: ThemeFormErrorMessages;\n\n constructor(errors?: ThemeFormErrorMessages) {\n this.errors = errors || [];\n }\n\n *[Symbol.iterator]() {\n yield* this.errors;\n }\n\n // Used by {% form.errors contains 'code' %}\n some(callbackFn: (code?: string) => boolean, thisArg?: unknown) {\n return this.errors.some((error) => callbackFn(error?.code), thisArg);\n }\n}\n", "import { isObject } from '@/utils';\n\nimport type {\n ShopifySectionBlockSchema,\n ShopifySectionGroup,\n ShopifySectionPresetSchema,\n ShopifySectionSchema,\n ShopifySettingSchema,\n ShopifySettingsData,\n ShopifySettingSection,\n ShopifySettingsSchema,\n PlatformCustomizations,\n} from 'types/shopify';\n\nimport type {\n ThemeBlockSchema,\n ThemeEditorConfigSchema,\n ThemePresetSchema,\n ThemeSectionSchemaData,\n ThemeSectionGroup,\n ThemeSettingFieldSchema,\n ThemeSettings,\n ThemeSettingSectionSchema,\n} from 'types/swell';\n\nexport const SHOPIFY_TO_SWELL_SORTING: Record<string, string> = {\n 'best-selling': 'popularity',\n 'title-ascending': 'name_asc',\n 'title-descending': 'name_desc',\n 'price-ascending': 'price_asc',\n 'price-descending': 'price_desc',\n 'created-ascending': 'date_asc',\n 'created-descending': 'date_desc',\n manual: '',\n};\n\nexport function convertShopifySettingsSchema(\n settingsSchema: ShopifySettingsSchema,\n locale: string,\n): ThemeEditorConfigSchema {\n const editor: ThemeEditorConfigSchema = { settings: [] };\n\n if (!Array.isArray(settingsSchema)) {\n return editor;\n }\n\n // Ignore theme info\n if (settingsSchema[0]?.name === 'theme_info') {\n settingsSchema.shift();\n }\n\n settingsSchema.forEach((section: ShopifySettingSection) => {\n editor.settings?.push(\n shopifySchemaSectionToSwellSettingSection(section, locale),\n );\n });\n\n return editor;\n}\n\nexport function convertShopifySettingsData(\n settingsData: ShopifySettingsData,\n): ThemeSettings {\n const settingsCustomizations = settingsData.platform_customizations as\n | PlatformCustomizations\n | undefined;\n const customCss = settingsCustomizations?.custom_css || [];\n\n // Current may refer to a preset\n if (\n typeof settingsData.current === 'string' &&\n settingsData.presets?.[settingsData.current]\n ) {\n return {\n ...settingsData.presets[settingsData.current],\n custom_css: customCss,\n };\n }\n\n if (typeof settingsData.current === 'object') {\n // Shopify's current settings in the first object\n return { ...(settingsData.current || {}), custom_css: customCss };\n }\n\n return { custom_css: customCss };\n}\n\nexport function convertShopifySettingsPresets(\n settingsData: ShopifySettingsData,\n): ThemePresetSchema[] {\n return Object.entries(settingsData.presets || {}).map(([name, preset]) => ({\n label: name,\n settings: preset,\n }));\n}\n\nexport function convertShopifySectionSchema(\n sectionSchema: ShopifySectionSchema,\n locale: string = 'en',\n): ThemeSectionSchemaData {\n const schema: ThemeSectionSchemaData = {\n label: getLocalizedValue(sectionSchema.name, locale),\n type: sectionSchema.type,\n tag: sectionSchema.tag,\n class: sectionSchema.class,\n limit: sectionSchema.limit,\n enabled_on: sectionSchema.enabled_on,\n disabled_on: sectionSchema.disabled_on,\n fields: (sectionSchema.settings || []).map((setting) =>\n shopifySchemaSettingToSwellSettingField(setting, locale),\n ),\n blocks: (sectionSchema.blocks || []).map((block) =>\n shopifySchemaBlockToSwellBlockSchema(block, locale),\n ),\n presets: (sectionSchema.presets || []).map((preset) =>\n shopifySchemaPresetToSwellPresetSchema(preset, locale),\n ),\n default: sectionSchema.default\n ? shopifySchemaPresetToSwellPresetSchema(sectionSchema.default, locale)\n : undefined,\n };\n\n return schema;\n}\n\nexport function convertShopifySectionGroup(\n sectionGroup: ShopifySectionGroup,\n locale: string = 'en',\n): ThemeSectionGroup {\n const group: ThemeSectionGroup = {\n label: getLocalizedValue(sectionGroup.name, locale),\n type: sectionGroup.type,\n order: sectionGroup.order,\n sections: sectionGroup.sections,\n };\n\n return group;\n}\n\nfunction shopifySchemaBlockToSwellBlockSchema(\n block: ShopifySectionBlockSchema,\n locale: string,\n): ThemeBlockSchema {\n const schema: ThemeBlockSchema = {\n type: block.type,\n label: getLocalizedValue(block.name, locale),\n limit: block.limit,\n fields: (block.settings || []).map((setting) =>\n shopifySchemaSettingToSwellSettingField(setting, locale),\n ),\n };\n\n return schema;\n}\n\nfunction shopifySchemaPresetToSwellPresetSchema(\n preset: ShopifySectionPresetSchema,\n locale: string,\n): ThemePresetSchema {\n const schema: ThemePresetSchema = {\n label: getLocalizedValue(preset.name, locale),\n settings: preset.settings,\n blocks: preset.blocks,\n };\n\n return schema;\n}\n\nfunction shopifySchemaSectionToSwellSettingSection(\n section: ShopifySettingSection,\n locale: string,\n): ThemeSettingSectionSchema {\n const swellSettingSection: ThemeSettingSectionSchema = {\n label: getLocalizedValue(section.name, locale),\n fields: (section.settings || []).map((setting) =>\n shopifySchemaSettingToSwellSettingField(setting, locale),\n ),\n };\n\n return swellSettingSection;\n}\n\nfunction shopifySchemaSettingToSwellSettingField(\n setting: ShopifySettingSchema,\n locale: string,\n): ThemeSettingFieldSchema {\n let swellProps: Partial<ThemeSettingFieldSchema> = {};\n\n switch (setting.type) {\n case 'text':\n swellProps = { type: 'text' };\n break;\n\n case 'textarea':\n swellProps = { type: 'textarea' };\n break;\n\n case 'paragraph':\n swellProps = {\n type: 'paragraph',\n label: setting.content\n ? getLocalizedValue(setting.content, locale)\n : undefined,\n };\n break;\n\n case 'select':\n swellProps = {\n type: 'select',\n options: setting.options?.map((option) => ({\n label: getLocalizedValue(option.label, locale),\n value: option.value,\n })),\n };\n break;\n\n case 'checkbox':\n swellProps = { type: 'checkbox' };\n break;\n\n case 'radio':\n swellProps = {\n type: 'radio',\n options: setting.options?.map((option) => ({\n label: getLocalizedValue(option.label, locale),\n value: option.value,\n })),\n };\n break;\n\n case 'number':\n swellProps = { type: 'integer' };\n break;\n\n case 'range':\n swellProps = {\n type: 'number',\n min: setting.min,\n max: setting.max,\n increment: setting.step,\n unit: setting.unit,\n };\n break;\n\n case 'article':\n swellProps = {\n type: 'lookup',\n collection: 'content/blogs',\n titleField: 'title',\n };\n break;\n\n case 'blog':\n swellProps = {\n type: 'lookup',\n collection: 'content/blogs',\n titleField: 'title',\n };\n break;\n\n case 'collection':\n swellProps = { type: 'category_lookup' };\n break;\n\n case 'collection_list':\n swellProps = {\n type: 'category_lookup',\n multiple: true,\n limit: setting.limit,\n };\n break;\n\n case 'color':\n case 'color_background':\n swellProps = { type: 'color' };\n break;\n\n case 'color_scheme':\n swellProps = { type: 'color_scheme' };\n break;\n\n case 'color_scheme_group':\n swellProps = {\n type: 'color_scheme_group',\n fields: (setting.definition || []).map((setting) =>\n shopifySchemaSettingToSwellSettingField(\n setting as ShopifySettingSchema,\n locale,\n ),\n ),\n role: setting.role,\n };\n break;\n\n case 'font_picker':\n swellProps = { type: 'font' };\n break;\n\n case 'html':\n swellProps = { type: 'basic_html' };\n break;\n\n case 'image_picker':\n swellProps = { type: 'image' };\n break;\n\n case 'inline_richtext':\n swellProps = { type: 'rich_text' };\n break;\n\n case 'link_list':\n swellProps = { type: 'menu' };\n break;\n\n case 'liquid':\n swellProps = { type: 'liquid' };\n break;\n\n case 'page':\n swellProps = {\n type: 'lookup',\n collection: 'content/pages',\n titleField: 'title',\n };\n break;\n\n case 'product':\n swellProps = { type: 'product_lookup' };\n break;\n\n case 'product_list':\n swellProps = {\n type: 'product_lookup',\n multiple: true,\n limit: setting.limit,\n };\n break;\n\n case 'richtext':\n swellProps = { type: 'rich_html' };\n break;\n\n case 'text_alignment':\n swellProps = {\n type: 'select',\n options: [\n { value: 'left', label: 'Left' },\n { value: 'center', label: 'Center' },\n { value: 'right', label: 'Right' },\n ],\n };\n break;\n\n case 'url':\n swellProps = { type: 'url' };\n break;\n\n case 'video':\n swellProps = { type: 'video' };\n break;\n\n case 'video_url':\n swellProps = { type: 'url' };\n break;\n\n case 'header':\n swellProps = {\n type: 'header',\n label: setting.content\n ? getLocalizedValue(setting.content, locale)\n : undefined,\n };\n break;\n\n default:\n break;\n }\n\n return {\n ...setting,\n id: setting.id,\n label: getLocalizedValue(setting.label, locale),\n default:\n typeof setting.default !== 'undefined'\n ? getLocalizedValue(setting.default, locale)\n : undefined,\n description: setting.info\n ? getLocalizedValue(setting.info, locale)\n : undefined,\n ...swellProps,\n } as ThemeSettingFieldSchema;\n}\n\nfunction getLocalizedValue(\n value: string | Record<string, string | undefined>,\n locale: string,\n): string {\n if (isObject(value)) {\n const localized = value[locale];\n\n if (localized) {\n return localized;\n }\n\n const shortLocale = locale.slice(0, 2);\n\n return value[shortLocale] as string;\n }\n\n return value;\n}\n", "export function shopifyFontToThemeFront(\n shopifyFontSetting: string | null,\n): string | null {\n if (typeof shopifyFontSetting !== 'string') {\n return null;\n }\n\n const pos = shopifyFontSetting.lastIndexOf('_');\n const familyId = shopifyFontSetting.substring(0, pos);\n const variantId = shopifyFontSetting.substring(pos + 1);\n const shopifyFont = shopifyFontMap[familyId];\n\n if (shopifyFont) {\n const variant = shopifyFont.variants[variantId];\n return `${shopifyFont.family}:${variant}`;\n }\n\n return null;\n}\n\ninterface ShopifyFont {\n family: string;\n variants: Record<string, string | undefined>;\n}\n\n/**\n * Map of all available shopify fonts to their equivalent theme font.\n * @see https://shopify.dev/docs/themes/architecture/settings/fonts#available-fonts\n */\nconst shopifyFontMap: Record<string, ShopifyFont | undefined> = {\n abel: { family: 'Abel', variants: { n4: 'wght@400' } },\n abril_fatface: { family: 'Abril Fatface', variants: { n4: 'wght@400' } },\n alegreya: {\n family: 'Alegreya',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n alegreya_sans: {\n family: 'Alegreya Sans',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n amiri: {\n family: 'Amiri',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n anonymous_pro: {\n family: 'Anonymous Pro',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n arapey: {\n family: 'Arapey',\n variants: { n4: 'wght@400', i4: 'ital,wght@1,400' },\n },\n archivo: {\n family: 'Archivo',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n archivo_narrow: {\n family: 'Archivo Narrow',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n arimo: {\n family: 'Arimo',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n armata: { family: 'Armata', variants: { n4: 'wght@400' } },\n arvo: {\n family: 'Arvo',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n asap: {\n family: 'Asap',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n assistant: {\n family: 'Assistant',\n variants: {\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n },\n },\n asul: { family: 'Asul', variants: { n4: 'wght@400', n7: 'wght@700' } },\n bio_rhyme: {\n family: 'Bio Rhyme',\n variants: {\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n7: 'wght@700',\n n8: 'wght@800',\n },\n },\n bitter: {\n family: 'Bitter',\n variants: { n4: 'wght@400', i4: 'ital,wght@1,400', n7: 'wght@700' },\n },\n cabin: {\n family: 'Cabin',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n cardo: {\n family: 'Cardo',\n variants: { n4: 'wght@400', i4: 'ital,wght@1,400', n7: 'wght@700' },\n },\n catamaran: {\n family: 'Catamaran',\n variants: {\n n1: 'wght@100',\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n n9: 'wght@900',\n },\n },\n chivo: {\n family: 'Chivo',\n variants: {\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n cormorant: {\n family: 'Cormorant',\n variants: {\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n crimson_text: {\n family: 'Crimson Text',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n dm_sans: {\n family: 'DM Sans',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n domine: { family: 'Domine', variants: { n4: 'wght@400', n7: 'wght@700' } },\n dosis: {\n family: 'Dosis',\n variants: {\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n },\n },\n eczar: {\n family: 'Eczar',\n variants: {\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n },\n },\n fira_sans: {\n family: 'Fira Sans',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n fjalla_one: { family: 'Fjalla One', variants: { n4: 'wght@400' } },\n glegoo: { family: 'Glegoo', variants: { n4: 'wght@400', n7: 'wght@700' } },\n ibm_plex_sans: {\n family: 'IBM Plex Sans',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n inconsolata: {\n family: 'Inconsolata',\n variants: { n4: 'wght@400', n7: 'wght@700' },\n },\n inknut_antiqua: {\n family: 'Inknut Antiqua',\n variants: {\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n n9: 'wght@900',\n },\n },\n inter: {\n family: 'Inter',\n variants: {\n n1: 'wght@100',\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n n9: 'wght@900',\n },\n },\n josefin_sans: {\n family: 'Josefin Sans',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n josefin_slab: {\n family: 'Josefin Slab',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n kalam: {\n family: 'Kalam',\n variants: { n3: 'wght@300', n4: 'wght@400', n7: 'wght@700' },\n },\n karla: {\n family: 'Karla',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n kreon: {\n family: 'Kreon',\n variants: { n3: 'wght@300', n4: 'wght@400', n7: 'wght@700' },\n },\n lato: {\n family: 'Lato',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n libre_baskerville: {\n family: 'Libre Baskerville',\n variants: { n4: 'wght@400', i4: 'ital,wght@1,400', n7: 'wght@700' },\n },\n libre_franklin: {\n family: 'Libre Franklin',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n lobster: { family: 'Lobster', variants: { n4: 'wght@400' } },\n lobster_two: {\n family: 'Lobster Two',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n lora: {\n family: 'Lora',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n maven_pro: {\n family: 'Maven Pro',\n variants: {\n n4: 'wght@400',\n n5: 'wght@500',\n n7: 'wght@700',\n n9: 'wght@900',\n },\n },\n megrim: { family: 'Megrim', variants: { n4: 'wght@400' } },\n merriweather_sans: {\n family: 'Merriweather Sans',\n variants: {\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n },\n },\n montserrat: {\n family: 'Montserrat',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n mouse_memoirs: { family: 'Mouse Memoirs', variants: { n4: 'wght@400' } },\n muli: {\n family: 'Muli',\n variants: {\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n neuton: {\n family: 'Neuton',\n variants: {\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n n8: 'wght@800',\n },\n },\n news_cycle: {\n family: 'News Cycle',\n variants: { n4: 'wght@400', n7: 'wght@700' },\n },\n newsreader: {\n family: 'Newsreader',\n variants: {\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n },\n },\n nobile: {\n family: 'Nobile',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n noticia_text: {\n family: 'Noticia Text',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n noto_serif: {\n family: 'Noto Serif',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n nunito: {\n family: 'Nunito',\n variants: {\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n nunito_sans: {\n family: 'Nunito Sans',\n variants: {\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n old_standard_tt: {\n family: 'Old Standard TT',\n variants: { n4: 'wght@400', i4: 'ital,wght@1,400', n7: 'wght@700' },\n },\n open_sans: {\n family: 'Open Sans',\n variants: {\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n },\n },\n open_sans_condensed: {\n family: 'Open Sans Condensed',\n variants: { n3: 'wght@300', i3: 'ital,wght@1,300', n7: 'wght@700' },\n },\n oswald: {\n family: 'Oswald',\n variants: {\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n },\n },\n ovo: { family: 'Ovo', variants: { n4: 'wght@400' } },\n oxygen: {\n family: 'Oxygen',\n variants: { n3: 'wght@300', n4: 'wght@400', n7: 'wght@700' },\n },\n pt_mono: { family: 'PT Mono', variants: { n4: 'wght@400' } },\n pt_sans: {\n family: 'PT Sans',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n pt_sans_narrow: {\n family: 'PT Sans Narrow',\n variants: { n4: 'wght@400', n7: 'wght@700' },\n },\n pt_serif: {\n family: 'PT Serif',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n pacifico: { family: 'Pacifico', variants: { n4: 'wght@400' } },\n playball: { family: 'Playball', variants: { n4: 'wght@400' } },\n playfair_display: {\n family: 'Playfair Display',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n poppins: {\n family: 'Poppins',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n prata: { family: 'Prata', variants: { n4: 'wght@400' } },\n prompt: {\n family: 'Prompt',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n proza_libre: {\n family: 'Proza Libre',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n },\n },\n quantico: {\n family: 'Quantico',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n quattrocento: {\n family: 'Quattrocento',\n variants: { n4: 'wght@400', n7: 'wght@700' },\n },\n quattrocento_sans: {\n family: 'Quattrocento Sans',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n questrial: { family: 'Questrial', variants: { n4: 'wght@400' } },\n quicksand: {\n family: 'Quicksand',\n variants: {\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n7: 'wght@700',\n },\n },\n rajdhani: {\n family: 'Rajdhani',\n variants: {\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n },\n },\n raleway: {\n family: 'Raleway',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n8: 'wght@800',\n i8: 'ital,wght@1,800',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n righteous: { family: 'Righteous', variants: { n4: 'wght@400' } },\n roboto: {\n family: 'Roboto',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n roboto_condensed: {\n family: 'Roboto Condensed',\n variants: {\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n roboto_mono: {\n family: 'Roboto Mono',\n variants: {\n n1: 'wght@100',\n i1: 'ital,wght@1,100',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n roboto_slab: {\n family: 'Roboto Slab',\n variants: {\n n1: 'wght@100',\n n3: 'wght@300',\n n4: 'wght@400',\n n7: 'wght@700',\n },\n },\n rubik: {\n family: 'Rubik',\n variants: {\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n shadows_into_light: {\n family: 'Shadows Into Light',\n variants: { n4: 'wght@400' },\n },\n slabo_13px: { family: 'Slabo 13px', variants: { n4: 'wght@400' } },\n smooch: { family: 'Smooch', variants: { n4: 'wght@400' } },\n source_code_pro: {\n family: 'Source Code Pro',\n variants: {\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n9: 'wght@900',\n },\n },\n source_sans_pro: {\n family: 'Source Sans Pro',\n variants: {\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n space_mono: {\n family: 'Space Mono',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n syne: {\n family: 'Syne',\n variants: {\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n },\n },\n tenor_sans: { family: 'Tenor Sans', variants: { n4: 'wght@400' } },\n tinos: {\n family: 'Tinos',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n titillium_web: {\n family: 'Titillium Web',\n variants: {\n n2: 'wght@200',\n i2: 'ital,wght@1,200',\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n9: 'wght@900',\n },\n },\n ubuntu: {\n family: 'Ubuntu',\n variants: {\n n3: 'wght@300',\n i3: 'ital,wght@1,300',\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n5: 'wght@500',\n i5: 'ital,wght@1,500',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n unica_one: { family: 'Unica One', variants: { n4: 'wght@400' } },\n unna: {\n family: 'Unna',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n varela: { family: 'Varela', variants: { n4: 'wght@400' } },\n varela_round: { family: 'Varela Round', variants: { n4: 'wght@400' } },\n vidaloka: { family: 'Vidaloka', variants: { n4: 'wght@400' } },\n volkhov: {\n family: 'Volkhov',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n },\n },\n vollkorn: {\n family: 'Vollkorn',\n variants: {\n n4: 'wght@400',\n i4: 'ital,wght@1,400',\n n6: 'wght@600',\n i6: 'ital,wght@1,600',\n n7: 'wght@700',\n i7: 'ital,wght@1,700',\n n9: 'wght@900',\n i9: 'ital,wght@1,900',\n },\n },\n work_sans: {\n family: 'Work Sans',\n variants: {\n n1: 'wght@100',\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n n9: 'wght@900',\n },\n },\n biz_udpmincho: {\n family: 'BIZ UDPMincho',\n variants: { n4: 'wght@400', n7: 'wght@700' },\n },\n dela_gothic_one: { family: 'Dela Gothic One', variants: { n4: 'wght@400' } },\n hina_mincho: { family: 'Hina Mincho', variants: { n4: 'wght@400' } },\n kaisei_decol: {\n family: 'Kaisei Decol',\n variants: { n4: 'wght@400', n5: 'wght@500', n7: 'wght@700' },\n },\n kaisei_opti: {\n family: 'Kaisei Opti',\n variants: { n4: 'wght@400', n5: 'wght@500', n7: 'wght@700' },\n },\n kaisei_tokumin: {\n family: 'Kaisei Tokumin',\n variants: {\n n4: 'wght@400',\n n5: 'wght@500',\n n7: 'wght@700',\n n8: 'wght@800',\n },\n },\n m_plus_1: {\n family: 'M PLUS 1',\n variants: {\n n1: 'wght@100',\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n n9: 'wght@900',\n },\n },\n m_plus_rounded_1c: {\n family: 'M PLUS Rounded 1c',\n variants: {\n n1: 'wght@100',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n7: 'wght@700',\n n8: 'wght@800',\n n9: 'wght@900',\n },\n },\n mochiy_pop_p_one: {\n family: 'Mochiy Pop P One',\n variants: { n4: 'wght@400' },\n },\n murecho: {\n family: 'Murecho',\n variants: {\n n1: 'wght@100',\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n n9: 'wght@900',\n },\n },\n noto_sans_japanese: {\n family: 'Noto Sans Japanese',\n variants: {\n n1: 'wght@100',\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n n9: 'wght@900',\n },\n },\n noto_serif_japanese: {\n family: 'Noto Serif Japanese',\n variants: {\n n2: 'wght@200',\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n9: 'wght@900',\n },\n },\n shippori_mincho: {\n family: 'Shippori Mincho',\n variants: {\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n8: 'wght@800',\n },\n },\n zen_kaku_gothic_new: {\n family: 'Zen Kaku Gothic New',\n variants: {\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n7: 'wght@700',\n n9: 'wght@900',\n },\n },\n zen_kurenaido: { family: 'Zen Kurenaido', variants: { n4: 'wght@400' } },\n zen_maru_gothic: {\n family: 'Zen Maru Gothic',\n variants: {\n n3: 'wght@300',\n n4: 'wght@400',\n n5: 'wght@500',\n n7: 'wght@700',\n n9: 'wght@900',\n },\n },\n zen_old_mincho: {\n family: 'Zen Old Mincho',\n variants: {\n n4: 'wght@400',\n n5: 'wght@500',\n n6: 'wght@600',\n n7: 'wght@700',\n n9: 'wght@900',\n },\n },\n};\n", "import type { ShopifyCompatibility } from '@/compatibility/shopify';\nimport type { ThemeFont } from '@/liquid/font';\nimport type { ThemeForm } from '@/liquid/form';\n\nimport ShopifyArticle from './article';\nimport ShopifyBlog from './blog';\nimport ShopifyCart from './cart';\nimport ShopifyCollection from './collection';\nimport ShopifyCollections from './collections';\nimport ShopifyCustomer from './customer';\nimport ShopifyFont from './font';\nimport ShopifyForm from './form';\nimport ShopifyLink from './link';\nimport ShopifyLocalization from './localization';\nimport ShopifyOrder from './order';\nimport ShopifyPaginate from './paginate';\nimport ShopifyPredictiveSearch from './predictive_search';\nimport ShopifyProduct from './product';\nimport ShopifyRecommendations from './recommendations';\nimport ShopifyPage from './page';\nimport { DeferredShopifyResource, ShopifyResource } from './resource';\nimport ShopifySearch from './search';\nimport ShopifyVariant from './variant';\n\nimport type { SwellMenu, SwellData } from '../../../types/swell';\n\nexport {\n DeferredShopifyResource,\n ShopifyResource,\n ShopifyArticle,\n ShopifyBlog,\n ShopifyCart,\n ShopifyCollection,\n ShopifyCollections,\n ShopifyCustomer,\n ShopifyFont,\n ShopifyForm,\n ShopifyOrder,\n ShopifyPaginate,\n ShopifyPredictiveSearch,\n ShopifyProduct,\n ShopifyRecommendations,\n ShopifyPage,\n ShopifyLink,\n ShopifyLocalization,\n ShopifySearch,\n ShopifyVariant,\n};\n\nexport function adaptShopifyMenuData(\n instance: ShopifyCompatibility,\n menu: SwellMenu,\n): SwellData {\n const shopifyLinkList = {\n ...menu,\n handle: menu.id.replace(/_/g, '-'),\n title: menu.name,\n };\n return {\n ...shopifyLinkList,\n links: menu.items?.map((item) =>\n ShopifyLink(instance, shopifyLinkList, item),\n ),\n };\n}\n\nexport function adaptShopifyFontData(\n instance: ShopifyCompatibility,\n font: ThemeFont,\n): SwellData {\n return ShopifyFont(instance, font);\n}\n\nexport function adaptShopifyFormData(\n instance: ShopifyCompatibility,\n form: ThemeForm,\n): SwellData {\n return ShopifyForm(instance, form);\n}\n", "import { Drop } from 'liquidjs';\n\nimport { ImageSrcDrop } from './image-src';\n\nimport type { StorefrontResource } from '@/resources';\nimport type { SwellData, SwellRecord } from 'types/swell';\nimport type {\n ShopifyImage,\n ShopifyImagePresentation,\n ShopifyImageSrc,\n ShopifyVariant,\n} from 'types/shopify';\n\ninterface ShopifyImageOptions {\n media_type?: 'image';\n position?: number;\n product_id?: number;\n}\n\nexport class ImageDrop extends Drop implements ShopifyImage {\n public id: number;\n public alt: string;\n public src: ShopifyImageSrc;\n public media_type?: 'image' | undefined;\n public preview_image?: ShopifyImage | undefined;\n public presentation?: ShopifyImagePresentation | undefined;\n public aspect_ratio: number;\n public 'attached_to_variant?': boolean | undefined;\n public width: number;\n public height: number;\n public position?: number | undefined;\n public product_id?: number | undefined;\n public variants?: ShopifyVariant[] | undefined;\n\n constructor(\n image: SwellData,\n options: ShopifyImageOptions = {},\n product?: StorefrontResource | SwellRecord,\n variant?: StorefrontResource | SwellRecord, // TODO\n ) {\n super();\n\n const file = image.file ?? { url: '', width: 0, height: 0 };\n\n this.id = file.id;\n this.alt = image.alt || product?.name;\n this.src = new ImageSrcDrop(file.url, file.width, file.height);\n this.media_type = options.media_type;\n this.preview_image = undefined; // TODO\n this.presentation = undefined; // TODO\n this.aspect_ratio =\n image.width && image.height ? image.width / image.height : 1;\n this.width = image.width;\n this.height = image.height;\n this['attached_to_variant?'] = Boolean(variant);\n this.position = options.position ?? undefined;\n this.product_id = options.product_id ?? undefined;\n this.variants = undefined; // TODO\n }\n\n toString() {\n return this.src.toString();\n }\n\n [Symbol.toPrimitive]() {\n return this.toString();\n }\n\n toJSON() {\n return this.toString();\n }\n}\n", "import { Drop } from 'liquidjs';\n\nimport type { ShopifyImageSrc } from 'types/shopify';\n\nexport class ImageSrcDrop extends Drop implements ShopifyImageSrc {\n constructor(\n public url: string,\n public width: number,\n public height: number,\n ) {\n super();\n }\n\n toString() {\n return this.url;\n }\n\n toJSON() {\n return this.toString();\n }\n\n toLiquid() {\n return {\n url: this.url,\n width: this.width,\n height: this.height,\n };\n }\n}\n", "import { ImageDrop } from '../drops/image';\n\nimport type { StorefrontResource } from '@/resources';\nimport type { SwellData, SwellRecord } from 'types/swell';\nimport type { ShopifyImage } from 'types/shopify';\n\ninterface ShopifyImageOptions {\n media_type?: 'image';\n position?: number;\n product_id?: number;\n}\n\nexport default function ShopifyImage(\n image: SwellData,\n options: ShopifyImageOptions = {},\n product?: StorefrontResource | SwellRecord,\n variant?: StorefrontResource | SwellRecord,\n): ShopifyImage {\n return new ImageDrop(image, options, product, variant);\n}\n", "import { StorefrontResource, cloneStorefrontResource } from '@/resources';\nimport { ShopifyResource, defer, deferWith } from './resource';\nimport ShopifyImage from './image';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellRecord } from 'types/swell';\nimport type { ShopifyArticle } from 'types/shopify';\n\nexport default function ShopifyArticle(\n instance: ShopifyCompatibility,\n blog: StorefrontResource | SwellRecord,\n blogCategory?: StorefrontResource | SwellRecord,\n): ShopifyResource<ShopifyArticle> {\n if (blog instanceof ShopifyResource) {\n return blog.clone() as ShopifyResource<ShopifyArticle>;\n }\n\n if (blog instanceof StorefrontResource) {\n blog = cloneStorefrontResource(blog);\n }\n\n if (blogCategory) {\n if (blogCategory instanceof StorefrontResource) {\n blogCategory = cloneStorefrontResource(blogCategory);\n }\n\n blog.category = blogCategory;\n }\n\n return new ShopifyResource<ShopifyArticle>({\n author: deferWith(blog, (blog) => blog.author?.name || blog.author?.email),\n content: defer(() => blog.content),\n created_at: defer(() => blog.date_created),\n excerpt: defer(() => blog.summary),\n excerpt_or_content: deferWith(blog, (blog) => blog.summary || blog.content),\n handle: defer(() => blog.slug),\n id: defer(() => blog.id),\n image: deferWith(blog, (blog) =>\n blog.image ? ShopifyImage(blog.image) : undefined,\n ),\n metafields: {},\n published_at: deferWith(\n blog,\n (blog) => blog.date_published || blog.date_created,\n ),\n tags: defer(() => blog.tags),\n template_suffix: defer(() => blog.theme_template),\n title: defer(() => blog.title),\n updated_at: deferWith(\n blog,\n (blog) => blog.date_updated || blog.date_created,\n ),\n url: deferWith([blog, blog.category], (blog, blogCategory) => {\n const blogCategoryId =\n blogCategory?.slug || blogCategory?.id || blog.category_id;\n return blogCategoryId ? `/blogs/${blogCategoryId}/${blog.slug}` : '';\n }),\n user: defer(() => blog.author),\n\n // Comments not supported\n comment_post_url: '',\n comments: [],\n comments_count: 0,\n 'comments_enabled?': false,\n 'moderated?': false,\n });\n}\n\nexport function isLikeShopifyArticle(value: unknown): value is ShopifyArticle {\n return (\n typeof value === 'object' &&\n value !== null &&\n Object.hasOwn(value, 'title') &&\n Object.hasOwn(value, 'content') &&\n Object.hasOwn(value, 'comments') &&\n Object.hasOwn(value, 'moderated?') &&\n Object.hasOwn(value, 'published_at') &&\n Object.hasOwn(value, 'excerpt_or_content')\n );\n}\n", "import {\n StorefrontResource,\n SwellStorefrontCollection,\n cloneStorefrontResource,\n} from '@/resources';\nimport { ShopifyResource, defer, deferWith } from './resource';\nimport ShopifyArticle from './article';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellData, SwellRecord } from 'types/swell';\nimport type { ShopifyBlog } from 'types/shopify';\n\nexport default function ShopifyBlog(\n instance: ShopifyCompatibility,\n blogCategory: StorefrontResource | SwellRecord,\n): ShopifyResource<ShopifyBlog> {\n if (blogCategory instanceof ShopifyResource) {\n return blogCategory.clone() as ShopifyResource<ShopifyBlog>;\n }\n\n if (blogCategory instanceof StorefrontResource) {\n blogCategory = cloneStorefrontResource(blogCategory);\n }\n\n const allTags = deferWith(blogCategory.blogs, (blogs) => {\n if (!Array.isArray(blogs?.results)) {\n return [];\n }\n\n const set: Set<string> = blogs.results.reduce(\n (set: Set<string>, blog: SwellData) => {\n for (const tag of blog.tags || []) {\n set.add(tag);\n }\n\n return set;\n },\n new Set(),\n );\n\n return Array.from(set.values());\n });\n\n return new ShopifyResource<ShopifyBlog>({\n all_tags: allTags,\n articles: deferWith(blogCategory, (blogCategory: SwellRecord) => {\n const { page, limit } = instance.swell.queryParams;\n const categoryBlogs = new SwellStorefrontCollection(\n instance.swell,\n 'content/blogs',\n {\n page,\n limit,\n category_id: blogCategory.id,\n expand: 'author',\n },\n async function () {\n return this._defaultGetter().call(this);\n },\n );\n\n return (\n categoryBlogs._cloneWithCompatibilityResult((blogs) => {\n return {\n ...blogs,\n results: blogs?.results?.map((blog) =>\n ShopifyArticle(\n instance,\n blog as StorefrontResource,\n blogCategory,\n ),\n ),\n };\n }) || []\n );\n }),\n articles_count: deferWith(blogCategory.blogs, (blogs) => blogs?.count || 0),\n handle: defer(() => blogCategory.slug),\n id: defer(() => blogCategory.id),\n metafields: {},\n next_article: undefined, // TODO\n previous_article: undefined, // TODO\n tags: allTags, // TODO: this should only apply to articles in the current view\n template_suffix: defer(() => blogCategory.theme_template),\n title: defer(() => blogCategory.title),\n url: deferWith(\n blogCategory,\n (blogCategory) => `/blogs/${blogCategory.slug}`,\n ),\n\n // Not supported\n 'comments_enabled?': false,\n 'moderated?': false,\n });\n}\n", "import { ShopifyResource } from './resource';\nimport ShopifyImage from './image';\n\nimport type { SwellData } from 'types/swell';\nimport type { ShopifyMedia } from 'types/shopify';\n\ninterface ShopifyMediaOptions {\n media_type?: ShopifyMedia['media_type'];\n position?: ShopifyMedia['position'];\n}\n\nexport default function ShopifyMedia(\n image: SwellData,\n options?: ShopifyMediaOptions,\n): ShopifyResource<ShopifyMedia> {\n if (image instanceof ShopifyResource) {\n return image.clone() as ShopifyResource<ShopifyMedia>;\n }\n\n return new ShopifyResource<ShopifyMedia>({\n alt: image.alt,\n id: image.id || image.file?.id,\n media_type: options?.media_type ?? 'image',\n position: options?.position,\n preview_image: ShopifyImage(image),\n });\n}\n", "import { StorefrontResource, cloneStorefrontResource } from '@/resources';\n\nimport {\n type DeferredShopifyResource,\n ShopifyResource,\n deferWith,\n defer,\n} from './resource';\nimport ShopifyProduct from './product';\nimport ShopifyMedia from './media';\nimport ShopifyImage from './image';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellRecord } from 'types/swell';\nimport type {\n ShopifyProduct as ShopifyProductType,\n ShopifyProductOptionValue,\n ShopifyQuantityPriceBreak,\n ShopifyVariant,\n} from 'types/shopify';\nimport type { SwellProduct, SwellVariant } from '@/resources/swell_types';\nimport { isProductAvailable } from '@/resources/product_helpers';\n\nexport default function ShopifyVariant(\n instance: ShopifyCompatibility,\n variant: StorefrontResource | SwellRecord,\n productIn?: StorefrontResource | SwellRecord,\n depth: number = 0,\n): ShopifyResource<ShopifyVariant> {\n if (variant instanceof ShopifyResource) {\n return variant.clone() as ShopifyResource<ShopifyVariant>;\n }\n\n let swellVariant = {};\n if (variant instanceof StorefrontResource) {\n variant = cloneStorefrontResource(variant);\n } else {\n // variant is a resolved object with swell variant properies\n swellVariant = { ...variant };\n }\n\n const product = productIn || variant.product || {};\n\n return new ShopifyResource<ShopifyVariant>({\n ...swellVariant,\n available: deferWith([product, variant], (product, variant) =>\n isProductAvailable(product as SwellProduct, variant as SwellVariant),\n ),\n barcode: undefined,\n compare_at_price: defer<number>(() =>\n instance.toShopifyPrice(\n getPriceField(product as SwellRecord, variant, 'orig_price'),\n ),\n ),\n featured_image: deferWith(\n [product, variant],\n (product: SwellRecord, variant: SwellRecord) => {\n const image = variant.images?.[0] || product.images?.[0];\n return image ? ShopifyImage(image, {}, product, variant) : undefined;\n },\n ),\n featured_media: deferWith([product, variant], (product, variant) => {\n const image = variant.images?.[0] || product.images?.[0];\n return image ? ShopifyMedia(image, { media_type: 'image' }) : undefined;\n }),\n id: defer(() => variant.id),\n image: deferWith(\n [product, variant],\n (product: SwellRecord, variant: SwellRecord) => {\n const image = variant.images?.[0] || product.images?.[0];\n return image ? ShopifyImage(image, {}, product, variant) : undefined;\n },\n ),\n incoming: false,\n inventory_management: undefined,\n inventory_policy: deferWith(product, (product) =>\n product.stock_tracking ? 'deny' : 'continue',\n ),\n inventory_quantity: deferWith(variant, (variant) => {\n if (!variant.stock_status) {\n return null;\n }\n\n let inventory = variant.stock_level || 0;\n if (inventory < 0) {\n inventory = 0;\n }\n return inventory;\n }),\n matched: false,\n metafields: {},\n next_incoming_date: undefined,\n options: getOptions(product, variant),\n option1: getOptionByIndex(product, variant, 0), // Deprecated by Shopify\n option2: getOptionByIndex(product, variant, 1), // Deprecated by Shopify\n option3: getOptionByIndex(product, variant, 2), // Deprecated by Shopify\n price: deferWith(\n [product, variant],\n (product: SwellRecord, variant: SwellRecord) => {\n return instance.toShopifyPrice(\n getPriceField(product, variant, 'price'),\n );\n },\n ),\n product: deferWith(product, (product: SwellRecord) => {\n return ShopifyProduct(\n instance,\n product,\n depth + 1,\n ) as ShopifyResource<ShopifyProductType>;\n }),\n quantity_price_breaks: deferWith(variant, (variant) => {\n if (!Array.isArray(variant.prices)) {\n return [];\n }\n\n return variant.prices.reduce((acc: ShopifyQuantityPriceBreak[], item) => {\n if (!item.account_group) {\n acc.push({\n minimum_quantity: item.quantity_min,\n price: instance.toShopifyPrice(item.price),\n });\n }\n\n return acc;\n }, []);\n }),\n 'quantity_price_breaks_configured?': deferWith(\n variant,\n (variant) => variant.prices?.length > 0,\n ),\n quantity_rule: { min: 1, max: null, increment: 1 },\n requires_selling_plan: false,\n requires_shipping: deferWith(product, (product) =>\n Boolean(product.delivery?.includes('shipment')),\n ),\n selected: false,\n selected_selling_plan_allocation: undefined,\n selling_plan_allocations: [],\n sku: defer<string>(() => variant.sku),\n store_availabilities: [],\n taxable: true,\n title: defer<string>(() => variant.name),\n unit_price: defer<number>(() =>\n instance.toShopifyPrice(\n getPriceField(product as SwellRecord, variant, 'price'),\n ),\n ),\n unit_price_measurement: undefined,\n url: defer<string>(() => product.url),\n weight: defer<number>(() => variant.weight),\n weight_in_unit: defer(() => variant.weight_unit),\n weight_unit: defer(() => variant.weight_unit),\n });\n}\n\nfunction getOptions(\n product: StorefrontResource | SwellRecord,\n variant: StorefrontResource | SwellRecord,\n): DeferredShopifyResource<ShopifyProductOptionValue[]> {\n return deferWith([product, variant], (product, variant) => {\n if (\n !Array.isArray(product.options) ||\n !Array.isArray(variant.option_value_ids)\n ) {\n return [];\n }\n\n const optionValuesById = product.options.reduce((acc: any, option: any) => {\n for (const value of option.values || []) {\n if (!acc[value.id]) {\n acc[value.id] = value.name;\n }\n }\n return acc;\n }, {});\n\n return variant.option_value_ids\n .map((id: string) => optionValuesById[id])\n .filter(Boolean);\n });\n}\n\nfunction getPriceField(\n product: StorefrontResource | SwellRecord,\n variant: StorefrontResource | SwellRecord,\n field: string,\n): number {\n return (variant[field] ?? product[field]) as number;\n}\n\n// deprecated\nfunction getOptionByIndex(\n product: StorefrontResource | SwellRecord,\n variant: StorefrontResource | SwellRecord,\n index: number,\n): DeferredShopifyResource<string | undefined> {\n return deferWith(\n [product, variant],\n (product: SwellRecord, variant: SwellRecord) => {\n const value = variant.option_value_ids?.[index];\n\n if (!value) {\n return;\n }\n\n const optionValuesById = product.options?.reduce(\n (acc: any, option: any) => {\n for (const value of option.values || []) {\n if (!acc[value.id]) {\n acc[value.id] = value.name;\n }\n }\n return acc;\n },\n {},\n );\n\n return optionValuesById?.[value];\n },\n );\n}\n", "import { isObject } from 'lodash-es';\n\nimport { stringifyQueryParams } from '@/utils';\n\nimport { ShopifyResource } from './resource';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type {\n QueryParams,\n SwellProductFilter,\n SwellProductFilterOption,\n} from 'types/swell';\nimport type { ShopifyFilter, ShopifyFilterValue } from 'types/shopify';\n\nexport default function ShopifyFilter(\n instance: ShopifyCompatibility,\n filter: SwellProductFilter,\n): ShopifyResource<ShopifyFilter> {\n const isRange = filter.type === 'range';\n const isBoolean = filter.type === 'boolean';\n const isList = !isRange && !isBoolean;\n\n return new ShopifyResource<ShopifyFilter>({\n active_values: !isRange\n ? filter.active_options?.map((option) =>\n ShopifyFilterValue(instance, option, filter),\n )\n : undefined,\n false_value: isBoolean\n ? ShopifyFilterValue(instance, { value: '' }, filter)\n : undefined,\n inactive_values: !isRange\n ? filter.inactive_options?.map((option) =>\n ShopifyFilterValue(instance, option, filter),\n )\n : undefined,\n label: filter.label,\n max_value: isRange\n ? ShopifyFilterValue(\n instance,\n { value: instance.toShopifyPrice(filter.range_max) },\n filter,\n 'lte',\n )\n : undefined,\n min_value: isRange\n ? ShopifyFilterValue(\n instance,\n { value: instance.toShopifyPrice(filter.range_min) },\n filter,\n 'gte',\n )\n : undefined,\n operator: isRange ? 'AND' : 'OR',\n param_name: filter.param_name,\n presentation: isList ? 'text' : undefined, // TODO: image, swatch\n range_max: instance.toShopifyPrice(filter.range_max),\n true_value: isBoolean\n ? ShopifyFilterValue(\n instance,\n { value: filter.options?.[0].value },\n filter,\n )\n : undefined,\n type: isRange ? 'price_range' : isBoolean ? 'boolean' : 'list',\n url_to_remove: removeFilterFromUrl(instance, `filter_${filter.id}`, true),\n values: !isRange\n ? filter.options?.map((option) =>\n ShopifyFilterValue(instance, option, filter),\n )\n : undefined,\n });\n}\n\nexport function ShopifyFilterValue(\n instance: ShopifyCompatibility,\n filterOption: SwellProductFilterOption,\n filter: SwellProductFilter,\n paramSuffix?: string,\n): ShopifyResource<ShopifyFilterValue> {\n const paramName = paramSuffix\n ? `${filter.param_name}[${paramSuffix}]`\n : filter.param_name;\n\n return new ShopifyResource<ShopifyFilterValue>({\n active: filterOption.active ?? false,\n count: filterOption.count ?? 0,\n image: undefined, // TODO when we support images in options\n label: filterOption.label ?? '',\n param_name: paramName,\n swatch: undefined, // TODO when we support swatches\n url_to_add: addFilterValueToUrl(\n instance,\n paramName,\n filterOption.value as string,\n ),\n url_to_remove: removeFilterValueFromUrl(\n instance,\n filter.param_name,\n filterOption.value as string,\n ),\n value: filterOptionValue(\n instance,\n filterOption,\n filter,\n paramSuffix,\n ) as string,\n });\n}\n\nfunction filterOptionValue(\n instance: ShopifyCompatibility,\n filterOption: SwellProductFilterOption,\n filter: SwellProductFilter,\n paramSuffix?: string,\n) {\n const { queryParams } = instance.swell;\n\n const queryValue: string | undefined = paramSuffix\n ? (queryParams[filter.param_name] as Record<string, string>)?.[paramSuffix]\n : (queryParams[filter.param_name] as string);\n\n return filter.type === 'range'\n ? queryValue !== undefined && queryValue !== ''\n ? instance.toShopifyPrice(Number(queryValue))\n : null\n : filterOption.value;\n}\n\nfunction cleanQueryParams(queryParams: QueryParams): Record<string, unknown> {\n return Object.keys(queryParams).reduce(\n (acc, key) => {\n const value = queryParams[key];\n\n if (value !== '') {\n acc[key] =\n isObject(value) && !Array.isArray(value)\n ? cleanQueryParams(value)\n : value;\n }\n\n return acc;\n },\n {} as Record<string, unknown>,\n );\n}\n\nfunction removeFilterFromUrl(\n instance: ShopifyCompatibility,\n paramName: string,\n isRange: boolean = false,\n): string {\n const { queryParams } = instance.swell;\n\n const queryString = stringifyQueryParams({\n ...cleanQueryParams(queryParams),\n ...(isRange\n ? { [`${paramName}[gte]`]: undefined, [`${paramName}[lte]`]: undefined }\n : undefined),\n [paramName]: undefined,\n page: undefined,\n });\n\n return urlWithQueryString(instance, queryString);\n}\n\nfunction removeFilterValueFromUrl(\n instance: ShopifyCompatibility,\n paramName: string,\n value: string,\n): string {\n const { queryParams } = instance.swell;\n\n const queryString = stringifyQueryParams({\n ...cleanQueryParams(queryParams),\n [paramName]: Array.isArray(queryParams[paramName])\n ? queryParams[paramName].filter((v) => v !== value)\n : undefined,\n page: undefined,\n });\n\n return urlWithQueryString(instance, queryString);\n}\n\nfunction addFilterValueToUrl(\n instance: ShopifyCompatibility,\n paramName: string,\n value: string,\n): string {\n const { queryParams } = instance.swell;\n\n const queryString = stringifyQueryParams({\n ...cleanQueryParams(queryParams),\n [paramName]: Array.isArray(queryParams[paramName])\n ? queryParams[paramName].concat(value)\n : typeof queryParams[paramName] === 'string'\n ? [queryParams[paramName], value]\n : value,\n page: undefined,\n });\n\n return urlWithQueryString(instance, queryString);\n}\n\nfunction urlWithQueryString(\n instance: ShopifyCompatibility,\n queryString: string,\n): string {\n const { url } = instance.swell;\n return `${url.pathname}${queryString ? `?${queryString}` : ''}`;\n}\n", "import {\n StorefrontResource,\n SwellStorefrontCollection,\n cloneStorefrontResource,\n} from '@/resources';\nimport { productQueryWithFilters } from '@/resources/product_helpers';\n\nimport { ShopifyResource, defer, deferWith } from './resource';\nimport ShopifyProduct from './product';\nimport ShopifyImage from './image';\nimport ShopifyFilter from './filter';\nimport { SHOPIFY_TO_SWELL_SORTING } from '../shopify-configs';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type {\n SwellCollection,\n SwellData,\n SwellRecord,\n SwellProductQuery,\n} from 'types/swell';\nimport type { ShopifyCollection, ShopifySorting } from 'types/shopify';\n\nexport default function ShopifyCollection(\n instance: ShopifyCompatibility,\n category: StorefrontResource | SwellRecord,\n): ShopifyResource<ShopifyCollection> {\n if (category instanceof ShopifyResource) {\n return category.clone() as ShopifyResource<ShopifyCollection>;\n }\n\n if (category instanceof StorefrontResource) {\n category = cloneStorefrontResource(category);\n }\n\n const productMapper = (product: SwellData) =>\n ShopifyProduct(instance, product as SwellRecord);\n\n const resolveProducts = makeProductsCollectionResolve(\n instance,\n category,\n productMapper,\n );\n\n return new ShopifyResource<ShopifyCollection>({\n all_products_count: defer(\n async () => (await resolveProducts())?.count || 0,\n ),\n all_tags: defer(async () => {\n const resolved = await resolveProducts();\n\n if (!resolved) {\n return [];\n }\n\n const set = new Set<string>();\n\n await Promise.all(\n resolved.results.map(async (product) => {\n const tags = await Promise.resolve().then(() => product.tags);\n\n if (Array.isArray(tags)) {\n for (const tag of tags) {\n set.add(tag);\n }\n }\n }),\n );\n\n return Array.from(set.values());\n }),\n all_types: defer(async () => {\n const products = await resolveProducts();\n\n if (!products?.results) {\n return [];\n }\n\n const types = new Set<string>();\n\n await Promise.all(\n products.results.map(async (product) => {\n const type = await Promise.resolve().then(() => product.type);\n\n if (type) {\n types.add(type);\n }\n }),\n );\n\n return Array.from(types.values());\n }),\n all_vendors: [],\n current_type: undefined,\n current_vendor: undefined,\n default_sort_by: deferWith(category, (category) =>\n convertToShopifySorting(category.sort_options?.[0].value ?? ''),\n ),\n description: defer(() => category.description),\n featured_image: deferWith(category, (category) => getFirstImage(category)),\n filters: deferWith(category, (category) =>\n (category?.filter_options ?? []).map((filter: any) =>\n ShopifyFilter(instance, filter),\n ),\n ),\n handle: defer(() => category.slug),\n id: defer(() => category.id),\n image: deferWith(category, (category) => getFirstImage(category)),\n metafields: {},\n next_product: undefined,\n previous_product: undefined,\n products: getProducts(instance, category, productMapper),\n products_count: defer(\n async () => (await resolveProducts())?.results?.length || 0,\n ),\n published_at: deferWith(\n category,\n (category) => category.date_updated || category.date_created,\n ),\n sort_by: defer(() => category.sort),\n sort_options: defer(() => category.sort_options),\n tags: [],\n template_suffix: defer(() => category.theme_template),\n title: defer(() => category.name),\n url: deferWith(category, (category) =>\n category.slug ? `/collections/${category.slug}` : '',\n ),\n });\n}\n\nfunction getFirstImage(category: SwellData) {\n const image = category.images?.[0];\n return image ? ShopifyImage(image) : undefined;\n}\n\nfunction convertToShopifySorting(swellValue: string): ShopifySorting {\n const entry = Object.entries(SHOPIFY_TO_SWELL_SORTING).find(\n ([, value]) => value === swellValue,\n );\n\n return entry ? entry[0] : 'manual';\n}\n\nfunction getProducts<T extends SwellData>(\n instance: ShopifyCompatibility,\n object: StorefrontResource | SwellRecord,\n mapper: (product: SwellData) => T,\n) {\n return deferWith(object, (object) => {\n const { page, limit } = instance.swell.queryParams;\n const productQuery: SwellProductQuery = { $variants: true };\n\n if (typeof object.id === 'string' && object.id !== 'all') {\n productQuery.category = object.id;\n }\n\n if (object.performed && typeof object.query === 'string') {\n productQuery.search = object.query;\n }\n\n const filterQuery = productQueryWithFilters(instance.swell, productQuery);\n const products = new SwellStorefrontCollection(\n instance.swell,\n 'products',\n { page, limit, ...filterQuery },\n async function () {\n return this._defaultGetter().call(this);\n },\n );\n\n return products._cloneWithCompatibilityResult<T>((products) => {\n return { ...products, results: products.results.map(mapper) };\n });\n });\n}\n\nexport function makeProductsCollectionResolve<T extends SwellData>(\n instance: ShopifyCompatibility,\n object: StorefrontResource | SwellRecord,\n mapper: (product: SwellData) => T,\n): () => Promise<SwellCollection<T> | null | undefined> {\n const products = getProducts(instance, object, mapper);\n\n async function resolveProducts(): Promise<\n SwellCollection<T> | null | undefined\n > {\n const resolved = await products.resolve();\n\n if (resolved && '_resolve' in resolved) {\n return resolved._resolve();\n }\n\n return resolved;\n }\n\n return resolveProducts;\n}\n", "import { Drop } from 'liquidjs';\nimport type { SwellRecord } from 'types/swell';\nimport { StorefrontResource } from '@/resources';\n\n/* \n Combines product content and description\n Use {{ product.content }} to render the description\n Use {{ product.content.content_field }} to render the content field\n*/\nexport class ShopifySwellContent extends Drop {\n public content: Record<string, string>;\n public description: string;\n constructor(product?: StorefrontResource | SwellRecord) {\n super();\n this.content = (product?.content as Record<string, string>) || {};\n this.description = (product?.description as string) || '';\n }\n\n toString() {\n return this.description;\n }\n\n toObject() {\n const combined = Object.assign({}, this.content);\n\n return combined;\n }\n\n toJSON() {\n return this.toObject();\n }\n\n toLiquid() {\n return this.toObject();\n }\n}\n", "import { StorefrontResource, cloneStorefrontResource } from '@/resources';\n\nimport { ShopifyResource, defer, deferWith } from './resource';\nimport ShopifyVariant from './variant';\nimport ShopifyImage from './image';\nimport ShopifyMedia from './media';\nimport ShopifyCollection from './collection';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellData, SwellRecord } from 'types/swell';\nimport type {\n SwellProduct,\n SwellProductOption,\n SwellProductOptionValue,\n SwellVariant,\n} from '@/resources/swell_types';\nimport type {\n ShopifyProduct,\n ShopifyProductOption,\n ShopifyProductOptionValue,\n} from 'types/shopify';\nimport {\n getSelectedVariant,\n getAvailableVariants,\n isOptionValueAvailable,\n isOptionValueSelected,\n isProductAvailable,\n isOptionAvailable,\n isGiftcard,\n} from '@/resources/product_helpers';\nimport { ShopifySwellContent } from './content';\n\nexport default function ShopifyProduct(\n instance: ShopifyCompatibility,\n product: StorefrontResource | SwellRecord,\n): ShopifyResource<ShopifyProduct>;\n\nexport default function ShopifyProduct(\n instance: ShopifyCompatibility,\n product: StorefrontResource | SwellRecord,\n depth: number,\n): ShopifyResource<ShopifyProduct> | null;\n\nexport default function ShopifyProduct(\n instance: ShopifyCompatibility,\n product: StorefrontResource | SwellRecord,\n depth: number = 0,\n): ShopifyResource<ShopifyProduct> | null {\n if (product instanceof ShopifyResource) {\n return product.clone() as ShopifyResource<ShopifyProduct>;\n }\n\n if (product instanceof StorefrontResource) {\n product = cloneStorefrontResource(product);\n }\n\n // TODO: find a better way to prevent infinite loop\n if (depth > 1) {\n return null;\n }\n\n const compareAtPrice = deferWith(product, (product) =>\n instance.toShopifyPrice(product.orig_price || false),\n );\n\n return new ShopifyResource<ShopifyProduct>({\n available: deferWith(product, (product: SwellProduct) =>\n isProductAvailable(product),\n ),\n collections: deferWith(product, (product: SwellProduct) => {\n if (!Array.isArray(product.categories)) {\n return [];\n }\n\n return product.categories.map((category) =>\n ShopifyCollection(instance, category),\n );\n }),\n compare_at_price: compareAtPrice, // Note: This field hasn't been standardized as of May 2024\n compare_at_price_max: compareAtPrice,\n compare_at_price_min: compareAtPrice,\n compare_at_price_varies: false,\n content: defer(() => new ShopifySwellContent(product)),\n created_at: defer(() => product.date_created),\n description: defer(() => product.description),\n featured_image: deferWith(product, (product: SwellRecord) => {\n const image = product.images?.[0];\n return image ? ShopifyImage(image, {}, product) : undefined;\n }),\n featured_media: deferWith(product, (product) => {\n const image = product.images?.[0];\n return image ? ShopifyMedia(image) : undefined;\n }),\n // not used\n first_available_variant: deferWith(product, (product: SwellProduct) => {\n // it returns first variant with empty query\n const variant = getSelectedVariant(product, {});\n\n return variant\n ? ShopifyVariant(instance, variant, product, depth + 1)\n : undefined;\n }),\n 'gift_card?': deferWith(product, isGiftcard),\n handle: defer(() => product.slug),\n // indicates that product has any options\n has_only_default_variant: deferWith(\n product,\n (product) => !product.options?.length,\n ),\n id: defer(() => product.id),\n images: deferWith(product, (product: SwellRecord) => {\n if (!Array.isArray(product.images)) {\n return [];\n }\n\n return product.images.map((image: SwellData, index) =>\n ShopifyImage(image, { position: index + 1 }, product),\n );\n }),\n media: deferWith(product, (product) => {\n if (!Array.isArray(product.images)) {\n return [];\n }\n\n return product.images.map((image: SwellData, index) =>\n ShopifyMedia(image, { media_type: 'image', position: index + 1 }),\n );\n }),\n metafields: {},\n options: deferWith(product, (product: SwellProduct): string[] => {\n adjustProduct(instance, product);\n\n if (!Array.isArray(product.options)) {\n return [];\n }\n\n return product.options\n .filter((option: SwellProductOption) =>\n isOptionAvailable(product, option),\n )\n .map((option: SwellData) => option.name);\n }),\n options_by_name: deferWith(product, (product: SwellProduct) => {\n adjustProduct(instance, product);\n\n if (!Array.isArray(product.options)) {\n return {};\n }\n\n const { queryParams } = instance.swell;\n const variants = getAvailableVariants(product);\n const variant = getSelectedVariant(product, queryParams);\n\n return product.options.reduce(\n (\n acc: Record<string, ShopifyProductOption | undefined>,\n option: SwellProductOption,\n index: number,\n ) => {\n if (!isOptionAvailable(product, option)) {\n return acc;\n }\n\n acc[option.name.toLowerCase()] = getOption(\n option,\n index,\n product,\n instance,\n depth,\n variants,\n variant,\n );\n\n return acc;\n },\n {},\n );\n }),\n options_with_values: deferWith<ShopifyProductOption[], SwellProduct>(\n product,\n (product: SwellProduct) => {\n adjustProduct(instance, product);\n\n if (!Array.isArray(product.options)) {\n return [];\n }\n\n const { queryParams } = instance.swell;\n const variants = getAvailableVariants(product);\n const variant = getSelectedVariant(product, queryParams);\n\n return product.options\n .filter((option) => isOptionAvailable(product, option))\n .map((option: SwellProductOption, index: number) =>\n getOption(\n option,\n index,\n product,\n instance,\n depth,\n variants,\n variant,\n ),\n );\n },\n ),\n price: deferWith(product, (product) =>\n instance.toShopifyPrice(product.price),\n ),\n price_max: deferWith<number, SwellRecord>(product, (product) => {\n if (!Array.isArray(product.variants?.results)) {\n return instance.toShopifyPrice(product.price);\n }\n\n const max = product.variants.results.reduce(\n (max: number, variant: SwellRecord) => {\n if (variant.price === undefined || variant.price === null) {\n return max;\n }\n\n return Math.max(max, variant.price);\n },\n 0,\n );\n\n return instance.toShopifyPrice(max);\n }),\n price_min: deferWith<number, SwellRecord>(product, (product) => {\n if (!Array.isArray(product.variants?.results)) {\n return instance.toShopifyPrice(product.price);\n }\n\n const min = product.variants.results.reduce(\n (min: number, variant: SwellRecord) => {\n if (variant.price === undefined || variant.price === null) {\n return min;\n }\n\n return Math.min(min, variant.price);\n },\n Infinity,\n );\n\n return instance.toShopifyPrice(min);\n }),\n price_varies: deferWith<boolean, SwellRecord>(product, (product) => {\n if (!Array.isArray(product.variants?.results)) {\n return false;\n }\n\n return product.variants.results.some(\n (variant: SwellRecord) =>\n variant.price !== undefined &&\n variant.price !== null &&\n variant.price !== product.price,\n );\n }),\n published_at: deferWith(\n product,\n (product) => product.date_updated || product.date_created,\n ),\n 'quantity_price_breaks_configured?': deferWith(\n product,\n (product) => product.prices?.length > 0,\n ),\n // ShopifyProduct does not have this property\n // @ts-expect-error property\n quantity_rule: deferWith(product, (product) => {\n let inventory = product.stock_level || 0;\n if (inventory < 0) {\n inventory = 0;\n }\n const max = !product.stock_status ? null : inventory;\n return { min: 1, max, increment: 1 };\n }),\n inventory_quantity: deferWith(product, (product) => {\n if (!product.stock_status) {\n return null;\n }\n\n let inventory = product.stock_level || 0;\n if (inventory < 0) {\n inventory = 0;\n }\n return inventory;\n }),\n requires_selling_plan: false,\n selected_or_first_available_selling_plan_allocation: undefined,\n selected_or_first_available_variant: deferWith(\n product,\n (product: SwellProduct) => {\n adjustProduct(instance, product);\n\n const variant = getSelectedVariant(product, instance.swell.queryParams);\n\n return variant\n ? ShopifyVariant(instance, variant, product, depth + 1)\n : undefined;\n },\n ),\n selected_selling_plan: undefined,\n selected_variant: undefined,\n selling_plan_groups: [],\n tags: defer(() => product.tags),\n template_suffix: defer(() => product.theme_template),\n title: defer(() => product.name),\n type: defer(() => product.type),\n url: deferWith(product, (product) => `/products/${product.slug}`), // TODO: pass theme settings to get this correctly\n variants: deferWith(product, (product: SwellProduct) => {\n adjustProduct(instance, product);\n\n if (!Array.isArray(product.variants?.results)) {\n return [];\n }\n\n // Note variants must be in the same order as options\n const variants = product.variants.results\n .map((variant: SwellRecord) =>\n ShopifyVariant(instance, variant, product, depth + 1),\n )\n .reverse();\n\n return variants;\n }),\n variants_count: deferWith(product, (product: SwellProduct) => {\n adjustProduct(instance, product);\n\n return product.variants?.count || 0;\n }),\n vendor: undefined,\n });\n}\n\nexport function ShopifyProductOptionValue(values: ShopifyProductOptionValue) {\n return new ShopifyResource<ShopifyProductOptionValue>(values, 'name');\n}\n\nexport function isLikeShopifyProduct(value: unknown): value is ShopifyProduct {\n return (\n typeof value === 'object' &&\n value !== null &&\n Object.hasOwn(value, 'variants') &&\n Object.hasOwn(value, 'gift_card?') &&\n Object.hasOwn(value, 'price_varies') &&\n Object.hasOwn(value, 'has_only_default_variant')\n );\n}\n\nfunction getOption(\n option: SwellProductOption,\n index: number,\n product: SwellProduct,\n instance: ShopifyCompatibility,\n depth: number,\n variants?: SwellVariant[],\n variant?: SwellVariant,\n) {\n const { queryParams } = instance.swell;\n\n return {\n ...option,\n name: option.name,\n position: index + 1,\n selected_value: undefined,\n values: option.values?.map((value: SwellProductOptionValue) =>\n ShopifyProductOptionValue({\n ...value,\n available: isOptionValueAvailable(option, value, product, variants),\n id: value.id as unknown as number,\n name: value.name,\n product_url: undefined,\n selected: isOptionValueSelected(\n option,\n value,\n product,\n queryParams,\n variant,\n ),\n swatch: undefined,\n variant: ShopifyVariant(\n instance,\n variant || product,\n product,\n depth + 1,\n ),\n }),\n ),\n };\n}\n\nfunction adjustProduct(instance: ShopifyCompatibility, product: SwellProduct) {\n adjustProductVariants(instance, product);\n}\n\nfunction adjustProductVariants(\n instance: ShopifyCompatibility,\n product: SwellProduct,\n) {\n // If Swell variants are supported directly, no adjustment is needed\n if (instance.supportsSwellVariants()) {\n return;\n }\n\n const hasOptions =\n Array.isArray(product.options) && product.options.length > 0;\n\n if (hasOptions) {\n // Shopify does not support non-variant options, so filter them out\n product.options = product.options?.filter((option) => option.variant);\n }\n\n const hasVariants =\n Array.isArray(product.variants?.results) &&\n product.variants.results.length > 0;\n\n if (hasVariants) {\n // Product already has variants, nothing to adjust\n return;\n }\n\n // Shopify requires every product to have at least one variant.\n // If missing, create a default \"Title / Default Title\" variant.\n const optionName = 'Title';\n const valueName = 'Default Title';\n const defaultShopifyOptionValueId = 'default_option_value_id';\n\n product.options = [\n {\n active: true,\n variant: true,\n name: optionName,\n input_type: 'select',\n values: [{ id: defaultShopifyOptionValueId, name: valueName }],\n },\n ];\n\n product.variants = {\n page: 1,\n count: 1,\n page_count: 1,\n limit: 1000,\n results: [\n {\n id: product.id,\n name: valueName,\n price: product.price,\n option_value_ids: [defaultShopifyOptionValueId],\n selected_option_values: [defaultShopifyOptionValueId],\n },\n ],\n };\n}\n", "import { StorefrontResource, cloneStorefrontResource } from '@/resources';\nimport { ShopifyResource, deferWith } from './resource';\nimport ShopifyImage from './image';\nimport ShopifyProduct from './product';\nimport ShopifyVariant from './variant';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellData, SwellRecord } from 'types/swell';\nimport type {\n ShopifyDiscount,\n ShopifyDiscountAllocation,\n ShopifyDiscountApplication,\n ShopifyFulfillment,\n ShopifyLineItem,\n ShopifySellingPlanAllocation,\n} from 'types/shopify';\nimport { isGiftcard } from '@/resources/product_helpers';\n\nexport default function ShopifyLineItem(\n instance: ShopifyCompatibility,\n item: StorefrontResource | SwellRecord,\n cart: StorefrontResource | SwellRecord,\n options: SwellData = {},\n): ShopifyResource<ShopifyLineItem> {\n if (item instanceof ShopifyResource) {\n return item.clone() as ShopifyResource<ShopifyLineItem>;\n }\n\n let swellItem = {};\n if (item instanceof StorefrontResource) {\n item = cloneStorefrontResource(item);\n } else {\n swellItem = { ...item };\n }\n\n const discountAllocations = getDiscountAllocations(instance, cart, item);\n\n return new ShopifyResource<ShopifyLineItem>({\n ...swellItem,\n // Deprecated by Shopify\n discounts: getDeprecatedDiscounts(instance, cart, item),\n discount_allocations: discountAllocations,\n error_message: undefined, // N/A\n final_line_price: isTrialSubscriptionItem(item)\n ? 0\n : instance.toShopifyPrice(item.price_total - item.discount_total),\n final_price: isTrialSubscriptionItem(item)\n ? 0\n : instance.toShopifyPrice(item.price - item.discount_each),\n // May not want to support this\n /* fulfillment: options.order\n ? deferWith(cart, async (cart: any) => {\n return await resolveFulfillment(instance, cart, item);\n })\n : undefined, */\n fulfillment_service: 'manual', // TODO\n gift_card: isGiftcard(item.product),\n grams: item.shipment_weight,\n id: item.id,\n image: deferWith(\n [item.product, item.variant],\n (product: SwellRecord, variant: SwellRecord) => {\n const image = product?.images?.[0];\n return image ? ShopifyImage(image, {}, product, variant) : undefined;\n },\n ),\n item_components: (item.bundle_items ?? []).map((bundleItem: SwellRecord) =>\n ShopifyLineItem(instance, bundleItem, cart, {\n ...options,\n bundle: true,\n }),\n ),\n key: item.id, // Good enough\n line_level_discount_allocations: discountAllocations, // TODO\n line_level_total_discount: instance.toShopifyPrice(item.discount_total), // TODO should be line discount only\n line_price: instance.toShopifyPrice(item.price_total),\n message: undefined, // N/A\n options_with_values: (item.options ?? []).map((option: SwellData) => ({\n name: option.name,\n value: option.value,\n })),\n original_line_price: isTrialSubscriptionItem(item)\n ? 0\n : instance.toShopifyPrice(item.price * item.quantity),\n original_price: isTrialSubscriptionItem(item)\n ? 0\n : instance.toShopifyPrice(item.price),\n price: instance.toShopifyPrice(item.price),\n product: deferWith(\n item.product,\n () => item.product && ShopifyProduct(instance, item.product),\n ),\n product_id: item.product_id,\n properties: item.metadata ?? {},\n quantity: item.quantity,\n requires_shipping: item.delivery === 'shipment',\n selling_plan_allocation: resolveSubscription(item),\n sku: deferWith(item.product, (product) => product.sku),\n successfully_fulfilled_quantity: item.quantity_delivered,\n tax_lines: (item.taxes ?? []).map((tax: SwellData) => {\n const cartTax = cart.taxes?.find(\n (cartTax: SwellData) => cartTax.id === tax.id,\n );\n return {\n price: instance.toShopifyPrice(tax.amount),\n rate: (cartTax?.rate || 0) / 100,\n rate_percentage: cartTax?.rate || 0,\n title: tax.name,\n };\n }),\n taxable: item.tax_total > 0,\n title: deferWith(\n item.product,\n (product) => product?.name || item.product_id,\n ),\n total_discount: instance.toShopifyPrice(item.discount_total),\n unit_price: undefined, // only available in germany and france\n unit_price_measurement: undefined, // only available in germany and france\n url: deferWith(item.product, (product) => `/products/${product.slug}`), // TODO: use page mapping\n url_to_remove: '', // TODO\n variant: deferWith([item.product, item.variant], () => {\n let { variant } = item;\n\n if (!variant) {\n variant = item.product;\n }\n\n return ShopifyVariant(instance, variant, item.product);\n }),\n variant_id: deferWith([item.product, item.variant], (product, variant) => {\n return variant?.id || product?.id;\n }),\n vendor: undefined,\n });\n}\n\nexport function countItemQuantity(\n items: SwellData[],\n quantityField = 'quantity',\n) {\n return items?.reduce((sum, item) => sum + item[quantityField], 0) || 0;\n}\n\nasync function resolveFulfillment(\n instance: ShopifyCompatibility,\n order: SwellData,\n item: SwellData,\n): Promise<ShopifyResource<ShopifyFulfillment> | undefined> {\n const shipments = await instance.swell.getCachedResource(\n `shipments-${order.id}`,\n [],\n async () => {\n return (\n // Note: this does not work with the current Swell API\n (\n await (instance.swell.storefront.account as any).getOrder(order.id, {\n include: {\n url: '/shipments',\n data: {\n limit: 10,\n canceled: { $ne: true },\n },\n },\n })\n )?.shipments?.results\n );\n },\n );\n\n if (!shipments) {\n return undefined;\n }\n\n const trackingNumbers: string[] = [];\n const shippedLineItems: any = [];\n let carrierName;\n\n for (const shipment of shipments || []) {\n for (const shippedItem of shipment.items || []) {\n const orderItem = order.items?.find(\n (item: any) => item.id === shippedItem.order_item_id,\n );\n\n if (orderItem) {\n if (shippedItem.bundle_item_id) {\n const orderBundleItem = orderItem.bundle_items?.find(\n (bundleItem: any) => bundleItem.id === shippedItem.bundle_item_id,\n );\n if (orderBundleItem) {\n shippedLineItems.push(orderBundleItem);\n }\n } else {\n shippedLineItems.push(orderItem);\n }\n\n if (\n shipment.tracking_code &&\n !trackingNumbers.includes(shipment.tracking_code)\n ) {\n trackingNumbers.push(shipment.tracking_code);\n\n if (!carrierName) {\n carrierName = shipment.carrier_name || shipment.carrier;\n }\n }\n }\n }\n }\n\n if (shippedLineItems.length === 0) {\n return undefined;\n }\n\n return new ShopifyResource<ShopifyFulfillment>({\n created_at: shipments[0].date_created,\n fulfillment_line_items: shippedLineItems.map((lineItem: SwellRecord) =>\n ShopifyLineItem(instance, lineItem, order as SwellRecord),\n ),\n item_count: countItemQuantity(shippedLineItems),\n tracking_company: carrierName,\n tracking_number: trackingNumbers[0],\n tracking_numbers: trackingNumbers,\n tracking_url: '', // TODO\n });\n}\n\nfunction isTrialSubscriptionItem(item: StorefrontResource | SwellRecord) {\n const purchaseOption = item?.purchase_option;\n if (purchaseOption?.type !== 'subscription') {\n return false;\n }\n\n return purchaseOption.billing_schedule.trial_days > 0;\n}\n\nfunction resolveSubscription(\n item: StorefrontResource | SwellRecord,\n): ShopifySellingPlanAllocation | undefined {\n const purchaseOption = item?.purchase_option;\n\n if (purchaseOption?.type !== 'subscription') {\n return;\n }\n\n return {\n checkout_charge_amount: item.price,\n compare_at_price: item.price,\n per_delivery_price: item.price,\n price: item.price,\n price_adjustments: [],\n remaining_balance_charge_amount: 0,\n selling_plan_group_id: purchaseOption.plan_id,\n selling_plan: {\n id: purchaseOption.plan_id,\n group_id: purchaseOption.plan_id,\n name: purchaseOption.plan_name,\n description: purchaseOption.plan_description,\n options: [],\n checkout_charge: { value: item.price, value_type: 'price' },\n recurring_deliveries: item.delivery === 'shipment',\n price_adjustments: [],\n selected: false,\n },\n unit_price: undefined,\n };\n}\n\nfunction findCartDiscount(\n cart: StorefrontResource | SwellRecord,\n discountId: string,\n): SwellRecord | undefined {\n return cart.discounts?.find(\n (cartDiscount: SwellRecord) => cartDiscount.id === discountId,\n );\n}\n\nfunction getDiscountSourceName(\n cart: StorefrontResource | SwellRecord,\n cartDiscount?: SwellRecord,\n): string {\n if (!cartDiscount?.source_id) {\n return '';\n }\n\n if (cartDiscount.source_id === cart.coupon_id) {\n return cart.coupon?.name || cartDiscount.source_id;\n }\n\n const promo = cart.promotions?.results?.find(\n (promo: SwellRecord) => cartDiscount.source_id === promo.id,\n );\n\n return promo?.name || cartDiscount.source_id;\n}\n\nfunction getDiscountAllocations(\n instance: ShopifyCompatibility,\n cart: StorefrontResource | SwellRecord,\n item: StorefrontResource | SwellRecord,\n): ShopifyDiscountAllocation[] {\n if (!Array.isArray(item.discounts)) {\n return [];\n }\n\n return item.discounts.map(\n (discount: SwellRecord): ShopifyDiscountAllocation => {\n const cartDiscount = findCartDiscount(cart, discount.id);\n const discountSourceName = getDiscountSourceName(cart, cartDiscount);\n\n return {\n amount: instance.toShopifyPrice(discount.amount),\n discount_application: cartDiscount\n ? {\n target_selection:\n cartDiscount.type === 'order'\n ? 'all'\n : ['shipment', 'product'].includes(cartDiscount.type)\n ? 'entitled'\n : 'explicit',\n target_type:\n cartDiscount.type === 'shipment'\n ? 'shipping_line'\n : 'line_item',\n title: discountSourceName,\n total_allocated_amount: instance.toShopifyPrice(\n cartDiscount.amount,\n ),\n type:\n cartDiscount.type === 'promo'\n ? 'automatic'\n : cartDiscount.type === 'coupon'\n ? 'discount_code'\n : 'manual',\n value:\n cartDiscount.rule?.value_type === 'fixed'\n ? cartDiscount.rule.value_fixed\n : cartDiscount.rule?.value_percent,\n value_type:\n cartDiscount.rule?.value_type === 'fixed'\n ? 'fixed_amount'\n : 'percentage',\n }\n : ({} as ShopifyDiscountApplication),\n };\n },\n );\n}\n\nfunction getDeprecatedDiscounts(\n instance: ShopifyCompatibility,\n cart: StorefrontResource | SwellRecord,\n item: StorefrontResource | SwellRecord,\n): ShopifyDiscount[] {\n if (!Array.isArray(item.discounts)) {\n return [];\n }\n\n return item.discounts.map((discount: SwellRecord): ShopifyDiscount => {\n const cartDiscount = findCartDiscount(cart, discount.id);\n const discountSourceName = getDiscountSourceName(cart, cartDiscount);\n\n return {\n amount: instance.toShopifyPrice(discount.amount),\n code: discountSourceName,\n savings: -instance.toShopifyPrice(discount.amount),\n title: discountSourceName,\n total_amount: instance.toShopifyPrice(discount.amount),\n total_savings: -instance.toShopifyPrice(discount.amount),\n type:\n cartDiscount?.type === 'shipment'\n ? 'ShippingDiscount'\n : cartDiscount?.rule?.value_type === 'fixed'\n ? 'FixedAmountDiscount'\n : 'PercentageDiscount',\n };\n });\n}\n", "import type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyCurrency } from 'types/shopify';\nimport type { SwellCurrency } from 'types/swell';\n\nexport default function ShopifyCurrency(\n instance: ShopifyCompatibility,\n currencyCode: string,\n): ShopifyCurrency {\n const swellCurrency = getSwellCurrency(instance, currencyCode);\n\n return {\n iso_code: swellCurrency.code,\n name: swellCurrency.name,\n symbol: swellCurrency.symbol,\n };\n}\n\nexport function getSwellCurrency(\n instance: ShopifyCompatibility,\n currencyCode: string,\n): SwellCurrency {\n const store =\n instance.theme.globals.store ??\n (instance.swell.storefront.settings as any).state.store;\n\n return (\n store.currencies.find(\n (currency: any) => currency.code === currencyCode,\n ) ?? {\n code: 'USD',\n symbol: '$',\n name: 'US Dollar',\n decimals: 2,\n rate: 1,\n priced: true,\n type: 'base',\n }\n );\n}\n", "import { StorefrontResource, cloneStorefrontResource } from '@/resources';\nimport { ShopifyResource, defer, deferWith } from './resource';\nimport ShopifyLineItem, { countItemQuantity } from './line_item';\nimport ShopifyCurrency from './currency';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellRecord } from 'types/swell';\nimport type { ShopifyCart } from 'types/shopify';\n\nexport default function ShopifyCart(\n instance: ShopifyCompatibility,\n cart: StorefrontResource | SwellRecord,\n): ShopifyResource<ShopifyCart> {\n if (cart instanceof ShopifyResource) {\n return cart.clone() as ShopifyResource<ShopifyCart>;\n }\n\n if (cart instanceof StorefrontResource) {\n cart = cloneStorefrontResource(cart);\n }\n\n return new ShopifyResource<ShopifyCart>({\n attributes: defer(() => cart.metadata),\n cart_level_discount_applications: [], // TODO cart-level promotions\n checkout_charge_amount: defer(() =>\n instance.toShopifyPrice(cart.capture_total),\n ),\n currency: deferWith(cart, (cart) =>\n ShopifyCurrency(instance, cart.currency),\n ),\n discounts: [],\n discount_applications: [], // TODO all promotions\n duties_included: defer(() => cart.item_tax_included),\n 'empty?': deferWith(cart, (cart) => !cart.items?.length),\n item_count: deferWith(cart, (cart) => countItemQuantity(cart.items)),\n items: deferWith(cart, (cart: SwellRecord) => {\n if (!Array.isArray(cart.items)) {\n return [];\n }\n\n return cart.items.map((item: SwellRecord) =>\n ShopifyLineItem(instance, item, cart),\n );\n }),\n items_subtotal_price: defer(() => instance.toShopifyPrice(cart.sub_total)),\n note: deferWith(cart, (cart) => cart.comments),\n original_total_price: deferWith(cart, (cart) =>\n instance.toShopifyPrice(cart.sub_total),\n ),\n requires_shipping: defer(() => Boolean(cart.shipment_delivery)),\n taxes_included: defer(() => Boolean(cart.item_tax_included)),\n total_discount: defer(() => instance.toShopifyPrice(cart.discount_total)),\n total_price: defer(() => instance.toShopifyPrice(cart.grand_total)),\n total_weight: defer(() => cart.item_shipment_weight),\n });\n}\n", "import { SwellStorefrontCollection } from '@/resources';\nimport ShopifyCollection from './collection';\n\nimport type { ShopifyResource } from './resource';\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyCollection as ShopifyCollectionType } from 'types/shopify';\nimport type { SwellRecord } from 'types/swell';\n\nexport default function ShopifyCollections<T extends SwellRecord = SwellRecord>(\n instance: ShopifyCompatibility,\n categories: SwellStorefrontCollection<T>,\n) {\n return new SwellStorefrontCollection<ShopifyResource<ShopifyCollectionType>>(\n instance.swell,\n categories._collection,\n categories._query,\n async () => {\n const results = (await categories.results)?.map((category) => {\n return ShopifyCollection(instance, category);\n });\n\n return {\n page: categories.page ?? 1,\n count: categories.count ?? 0,\n results: results ?? [],\n page_count: categories.page_count ?? 0,\n limit: categories.limit,\n pages: categories.pages ?? {},\n };\n },\n );\n}\n", "import { StorefrontResource, cloneStorefrontResource } from '@/resources';\nimport { getCurrencyByCountry } from '@/utils';\n\nimport { ShopifyResource, defer, deferWith } from './resource';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellRecord } from 'types/swell';\nimport type { ShopifyAddress, ShopifyCountry } from 'types/shopify';\n\nexport default function ShopifyAddress(\n instance: ShopifyCompatibility,\n address: StorefrontResource | SwellRecord,\n account?: StorefrontResource | SwellRecord,\n): ShopifyResource<ShopifyAddress> {\n if (address instanceof ShopifyResource) {\n return address.clone() as ShopifyResource<ShopifyAddress>;\n }\n\n if (address instanceof StorefrontResource) {\n address = cloneStorefrontResource(address);\n }\n\n // address can be null\n if (!address) {\n address = {} as SwellRecord;\n }\n\n return new ShopifyResource<ShopifyAddress>({\n address1: defer(() => address.address1),\n address2: defer(() => address.address2),\n city: defer(() => address.city),\n company: defer(() => address.company),\n country: deferWith(address, (address) =>\n ShopifyCountry(instance, address.country),\n ),\n country_code: defer(() => address.country_code),\n first_name: deferWith(\n address,\n (address) => address.first_name || account?.first_name,\n ),\n id: defer(() => address.id || address.account_address_id),\n last_name: deferWith(\n address,\n (address) => address.last_name || account?.last_name,\n ),\n name: deferWith(address, (address) => address.name || account?.name),\n phone: defer(() => address.phone),\n province: defer(() => address.state),\n province_code: deferWith(address, (address) =>\n String(address.state || '').substring(0, 2),\n ),\n street: deferWith(address, (address) =>\n joinAddressLines(address.address1, address.address2),\n ),\n summary: deferWith(address, (address) =>\n joinAddressLines(\n address.name || account?.name,\n address.company,\n address.address1,\n address.address2,\n address.city,\n address.state,\n address.country,\n ),\n ),\n url: deferWith(\n address,\n (address) =>\n `/account/addresses/${address.id || address.account_address_id}`,\n ),\n zip: defer(() => address.zip),\n });\n}\n\nfunction joinAddressLines(...props: string[]): string {\n return props.filter(Boolean).join('\\n');\n}\n\nexport function ShopifyCountry(\n _instance: ShopifyCompatibility,\n countryCode: string,\n): ShopifyResource<ShopifyCountry> {\n const currencyCode = getCurrencyByCountry(countryCode) || 'USD';\n\n return new ShopifyResource<ShopifyCountry>(\n {\n available_languages: [], // TODO\n continent: '' as 'North America', // TODO\n currency: {\n iso_code: currencyCode,\n name: currencyCode,\n symbol: currencyCode,\n }, // TODO\n iso_code: countryCode,\n market: {\n handle: 'unknown',\n id: 0,\n metafields: {},\n }, // TODO\n name: countryCode, // TODO\n 'popular?': true, // TODO\n unit_system: 'metric', // TODO\n },\n 'iso_code',\n );\n}\n", "import { StorefrontResource, cloneStorefrontResource } from '@/resources';\nimport { ShopifyResource, defer, deferWith } from './resource';\nimport ShopifyLineItem, { countItemQuantity } from './line_item';\nimport ShopifyAddress from './address';\nimport ShopifyCustomer from './customer';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellData, SwellRecord } from 'types/swell';\nimport type { ShopifyOrder, ShopifyShippingMethod } from 'types/shopify';\n\nexport default function ShopifyOrder(\n instance: ShopifyCompatibility,\n order: StorefrontResource | SwellRecord,\n account?: StorefrontResource | SwellRecord,\n): ShopifyResource<ShopifyOrder> {\n if (order instanceof ShopifyResource) {\n return order.clone() as ShopifyResource<ShopifyOrder>;\n }\n\n if (order instanceof StorefrontResource) {\n order = cloneStorefrontResource(order);\n }\n\n const customerAccount = account || order.account;\n\n const lineItems = deferWith(order, (order: SwellRecord) => {\n if (!Array.isArray(order.items)) {\n return [];\n }\n\n return order.items.map((item: SwellRecord) =>\n ShopifyLineItem(instance, item, order, { order: true }),\n );\n });\n\n return new ShopifyResource<ShopifyOrder>({\n attributes: defer(() => order.metadata),\n billing_address: deferWith(order, () =>\n ShopifyAddress(instance, order.billing),\n ),\n cancelled: defer(() => order.canceled),\n cancelled_at: defer(() => order.date_canceled),\n cart_level_discount_applications: [], // TODO\n confirmation_number: defer(() => order.number),\n created_at: defer(() => order.date_created),\n customer:\n customerAccount &&\n defer(() => ShopifyCustomer(instance, customerAccount)),\n customer_order_url: deferWith(\n order,\n (order) => `/account/orders/${order.id}`,\n ),\n customer_url: deferWith(order, (order) => `/account/orders/${order.id}`),\n discounts: [], // TODO\n discount_applications: [], // TODO\n email:\n customerAccount && deferWith(customerAccount, (account) => account.email),\n financial_status: deferWith(order, (order) =>\n shopifyFinancialStatus(order),\n ),\n financial_status_label: deferWith(order, (order) =>\n shopifyFinancialStatusLabel(order),\n ),\n fulfillment_status: deferWith(order, (order) =>\n shopifyFulfillmentStatus(order),\n ),\n fulfillment_status_label: deferWith(order, (order) =>\n shopifyFulfillmentStatusLabel(order),\n ),\n id: defer(() => order.id),\n item_count: deferWith(order, (order) => countItemQuantity(order.items)),\n line_items: lineItems,\n line_items_subtotal_price: defer(() =>\n instance.toShopifyPrice(order.sub_total),\n ),\n metafields: {},\n name: defer(() => order.number),\n note: defer(() => order.comments),\n order_number: defer(() => order.number),\n order_status_url: '', // TODO\n phone:\n customerAccount &&\n deferWith(\n [order, customerAccount],\n (order, account) =>\n order.billing?.phone || order.shipping.phone || account.phone,\n ),\n 'pickup_in_store?': false, // TODO\n shipping_address: deferWith(order, () =>\n ShopifyAddress(instance, order.shipping),\n ),\n shipping_methods: defer(() => {\n const shippingMethod = ShopifyShippingMethod(instance, order);\n return shippingMethod ? [shippingMethod] : [];\n }),\n shipping_price: defer(() => instance.toShopifyPrice(order.shipment_total)),\n subtotal_line_items: lineItems,\n subtotal_price: defer(() => instance.toShopifyPrice(order.sub_total)),\n tags: [], // N/A\n tax_lines: [], // TODO\n tax_price: defer(() => instance.toShopifyPrice(order.tax_total)),\n total_discounts: defer(() => instance.toShopifyPrice(order.discount_total)),\n total_duties: 0,\n total_net_amount: defer(() => instance.toShopifyPrice(order.grand_total)),\n total_price: defer(() => instance.toShopifyPrice(order.grand_total)),\n total_refunded_amount: defer(() =>\n instance.toShopifyPrice(order.refund_total),\n ),\n transactions: [],\n\n // TODO\n // cancel_reason\n // cancel_reason_label\n });\n}\n\nexport function shopifyFinancialStatus(order: SwellData) {\n if (refundDue(order)) {\n return 'paid'; // 'refund_due';\n }\n if (\n order.payment_total > 0 &&\n order.payment_total > order.refund_total &&\n order.payment_total < order.grand_total &&\n paymentDue(order) > 0\n ) {\n return 'partially_paid';\n }\n if (order.refund_total > 0 && order.refund_total < order.payment_total) {\n return 'partially_refunded';\n }\n if (order.refund_total > 0 && order.refund_total === order.payment_total) {\n return 'refunded';\n }\n if (order.payment_total > 0 && order.payment_balance === 0) {\n return 'paid';\n }\n if (order.authorized_payment_id && !order.paid) {\n return 'authorized';\n }\n if (order.grand_total > 0) {\n return 'unpaid';\n }\n\n // TODO: expired, voided, pending\n return 'paid'; // 'complete';\n}\n\nexport function shopifyFulfillmentStatus(order: SwellData) {\n // TODO: figure out what the options are on shopify, they're not documented\n if (order.canceled) {\n return 'restocked';\n }\n\n if (order.hold || order.status === 'hold') {\n return 'unfulfilled'; // 'on_hold';\n }\n\n if (order.delivered) {\n if (order.item_quantity_returned > 0 || order.return_total > 0) {\n if (order.item_quantity_returned === order.item_quantity) {\n return 'restocked'; // 'returned';\n }\n\n return 'partial'; // 'partially_returned';\n }\n\n return 'fulfilled';\n }\n\n if (order.item_quantity_delivered > 0) {\n return 'partial'; // 'partially_fulfilled';\n }\n\n if (order.item_quantity_deliverable > 0) {\n return 'unfulfilled';\n }\n\n return 'complete';\n}\n\nexport function shopifyFinancialStatusLabel(order: SwellData) {\n // TODO: localization\n return statusToLabel(shopifyFinancialStatus(order));\n}\n\nexport function shopifyFulfillmentStatusLabel(order: SwellData) {\n // TODO: localization\n return statusToLabel(shopifyFulfillmentStatus(order));\n}\n\nfunction statusToLabel(status: string) {\n const label = status.replace(/\\_/g, ' ');\n return label.charAt(0).toUpperCase() + label.slice(1);\n}\n\nfunction paymentDue(order: SwellData) {\n if (!order.canceled && order.payment_balance < 0) {\n return -order.payment_balance;\n }\n\n return 0;\n}\n\nexport function refundDue(order: SwellData) {\n if (order.canceled) {\n return order.payment_total - order.refund_total;\n }\n if (order.payment_balance > 0) {\n return order.payment_balance;\n }\n return 0;\n}\n\nfunction ShopifyShippingMethod(\n instance: ShopifyCompatibility,\n order: SwellData,\n): ShopifyResource<ShopifyShippingMethod> | undefined {\n if (!order.shipping?.service) {\n return undefined;\n }\n\n return new ShopifyResource<ShopifyShippingMethod>({\n id: order.shipping.service,\n discount_allocations: [],\n handle: `${order.shipping.service}-${order.shipping.price}`,\n original_price: instance.toShopifyPrice(order.shipment_price),\n price: instance.toShopifyPrice(order.shipment_total),\n price_with_discounts: instance.toShopifyPrice(order.shipment_total),\n tax_lines: [], // N/A\n title: order.shipping.service_name || order.shipping.service,\n });\n}\n", "import { Drop } from 'liquidjs';\n\nimport type { ShopifyCurrency, ShopifyMoney } from 'types/shopify';\n\nexport default class MoneyDrop extends Drop implements ShopifyMoney {\n constructor(\n public value: number,\n public decimals: number,\n public currency: ShopifyCurrency,\n ) {\n super();\n }\n\n valueOf() {\n return this.value * 10 ** this.decimals;\n }\n\n toFloat() {\n return this.value;\n }\n}\n", "import MoneyDrop from '../drops/money';\n\nimport { getSwellCurrency } from './currency';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyMoney } from 'types/shopify';\n\nexport default function ShopifyMoney(\n instance: ShopifyCompatibility,\n value: number,\n currencyCode?: string,\n): ShopifyMoney {\n const code = currencyCode || instance.theme.globals.store.currency;\n const currency = getSwellCurrency(instance, code);\n\n // For currencies without decimal places, two zeros are added.\n const decimals = currency.decimals || 2;\n\n return new MoneyDrop(value, decimals, {\n iso_code: currency.code,\n name: currency.name,\n symbol: currency.symbol,\n });\n}\n", "import { StorefrontResource, cloneStorefrontResource } from '@/resources';\n\nimport { ShopifyResource, defer, deferWith } from './resource';\nimport ShopifyAddress from './address';\nimport ShopifyOrder from './order';\nimport ShopifyMoney from './money';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellRecord } from 'types/swell';\nimport type { ShopifyCustomer } from 'types/shopify';\n\nexport default function ShopifyCustomer(\n instance: ShopifyCompatibility,\n account: StorefrontResource | SwellRecord,\n): ShopifyResource<ShopifyCustomer> {\n if (account instanceof ShopifyResource) {\n return account.clone() as ShopifyResource<ShopifyCustomer>;\n }\n\n if (account instanceof StorefrontResource) {\n account = cloneStorefrontResource(account);\n }\n\n return new ShopifyResource<ShopifyCustomer>({\n accepts_marketing: defer(() => account.email_optin),\n addresses: deferWith(account.addresses, (addresses) =>\n (addresses?.results || []).map((address: SwellRecord) =>\n ShopifyAddress(instance, address),\n ),\n ),\n addresses_count: deferWith(\n account.addresses,\n (addresses) => addresses.count || 0,\n ),\n 'b2b?': deferWith(account, () => account.type === 'business'),\n company_available_locations: [], // TODO\n company_available_locations_count: 0,\n current_company: undefined, // TODO\n current_location: undefined, // TODO\n default_address: deferWith(account, (account: SwellRecord) =>\n ShopifyAddress(\n instance,\n account.shipping || account.billing || {},\n account,\n ),\n ),\n email: defer(() => account.email),\n first_name: defer(() => account.first_name),\n has_account: true, // TODO: return something from the swell api to indicate when password exists\n 'has_avatar?': false, // N/A\n id: defer(() => account.id),\n last_name: defer(() => account.last_name),\n last_order: defer(() => resolveLastOrder(instance, account)),\n name: defer(() => account.name),\n orders: deferWith(account.orders, (orders) =>\n (orders?.results || []).map((order: SwellRecord) =>\n ShopifyOrder(instance, order),\n ),\n ),\n orders_count: defer(() => account.order_count),\n payment_methods: [],\n phone: deferWith(\n account,\n (account) =>\n account.phone || account.shipping?.phone || account.billing?.phone,\n ),\n store_credit_account: deferWith(account, (account) => ({\n balance: ShopifyMoney(instance, Number(account.balance)),\n })),\n tags: deferWith(account, (account) => account.tags || [account.group]), // TODO: replace with segments in future\n tax_exempt: defer(() => account.tax_exempt),\n total_spent: defer(() => account.order_value),\n });\n}\n\nasync function resolveLastOrder(\n instance: ShopifyCompatibility,\n account: StorefrontResource | SwellRecord,\n) {\n const accountId = await account.id;\n\n const lastOrder = await instance.swell.getCachedResource(\n `last-order-${accountId}`,\n [],\n async () => {\n return (\n await instance.swell.storefront.account.listOrders({\n limit: 1,\n })\n )?.results?.[0];\n },\n );\n\n if (!lastOrder) {\n return;\n }\n\n return ShopifyOrder(instance, lastOrder as SwellRecord, account);\n}\n", "import { ShopifyResource } from './resource';\n\nimport type { ThemeFont } from '@/liquid/font';\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyFont } from 'types/shopify';\n\nexport default function ShopifyFont(\n _instance: ShopifyCompatibility,\n font: ThemeFont,\n): ShopifyResource<ShopifyFont> {\n if (font instanceof ShopifyResource) {\n return font.clone() as ShopifyResource<ShopifyFont>;\n }\n\n return new ShopifyResource<ShopifyFont>({\n baseline_ratio: 1, // TODO\n fallback_families: font.fallback_families || 'sans-serif',\n family: font.family,\n style: font.style,\n 'system?': font.system,\n variants: font.variants.map((variant) => ShopifyFont(_instance, variant)),\n weight: font.weight,\n });\n}\n", "import { ShopifyResource } from './resource';\n\nimport type { ThemeForm } from '@/liquid/form';\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyFormObject } from 'types/shopify';\n\nconst SHOPIFY_FORMS = {\n account_login: {\n params: () => ({\n password_needed: true,\n }),\n },\n};\n\nexport default function ShopifyForm(\n _instance: ShopifyCompatibility,\n form: ThemeForm,\n): ShopifyResource<ShopifyFormObject> {\n if (form instanceof ShopifyResource) {\n return form.clone() as ShopifyResource<ShopifyFormObject>;\n }\n\n const shopifyForm = (SHOPIFY_FORMS as any)[form.id];\n\n return new ShopifyResource<ShopifyFormObject>({\n ...(shopifyForm?.params?.(form) || undefined),\n errors: form.errors ? new ShopifyFormErrors(form.errors) : undefined,\n 'posted_successfully?': form.success,\n });\n}\n\nexport class ShopifyFormError {\n public code: string;\n public message: string;\n public field_name: string;\n public field_label: string;\n public type: string;\n\n constructor(error: any) {\n this.code = error.code;\n this.message = error.message;\n this.field_name = error.field_name;\n this.field_label = error.field_label;\n this.type = this.getShopifyErrorType(error);\n }\n\n getShopifyErrorType(error: any) {\n if (error.field_name === 'email') {\n return 'email';\n }\n if (error.field_name === 'password') {\n return 'password';\n }\n return 'form';\n }\n\n valueOf() {\n return this.type;\n }\n\n toString() {\n return this.type;\n }\n}\n\nexport class ShopifyFormErrors {\n private errors: any[];\n private pointer: number = 0;\n\n public messages: ShopifyFormErrorArrayByType;\n public translated_fields: ShopifyFormErrorArrayByType;\n\n constructor(errors: any) {\n this.errors = Array.from(errors).map(\n (error: any) => new ShopifyFormError(error),\n );\n\n this.messages = new ShopifyFormErrorArrayByType(\n this.errors,\n this.errors.map((error: any) => error.message),\n );\n\n this.translated_fields = new ShopifyFormErrorArrayByType(\n this.errors,\n this.errors.map((error: any) => error.field_label),\n );\n\n return new Proxy(this.errors as any, {\n get: (target, prop) => {\n const instance = target;\n\n if (prop === 'toJSON') {\n return this.errors;\n }\n\n if (prop === 'some') {\n return this.some.bind(this);\n }\n\n if (prop === 'messages') {\n return this.messages;\n }\n\n if (prop === 'translated_fields') {\n return this.translated_fields;\n }\n\n return instance[prop];\n },\n\n getPrototypeOf() {\n return ShopifyFormErrors.prototype;\n },\n });\n }\n\n *[Symbol.iterator]() {\n yield* this.errors;\n }\n\n some(callbackFn: any, thisArg?: any) {\n return this.errors.some((error: any) => callbackFn(error?.type), thisArg);\n }\n}\n\n// Class to handle indexing messages by error object\nexport class ShopifyFormErrorArrayByType {\n values: any[];\n\n constructor(errors: any, values: any) {\n this.values = values;\n\n return new Proxy(values, {\n get: (target, prop) => {\n const instance = target;\n\n if (prop === 'toJSON') {\n return values;\n }\n\n const foundIndex = errors?.findIndex?.(\n (value: any) => value?.type === prop,\n );\n if (foundIndex !== -1) {\n return values[foundIndex];\n }\n\n return instance[prop];\n },\n });\n }\n}\n", "import { snakeCase } from 'lodash-es';\n\nimport { ShopifyResource } from './resource';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellMenu, SwellMenuItem } from 'types/swell';\nimport type { ShopifyLink } from 'types/shopify';\n\nexport default function ShopifyLink(\n instance: ShopifyCompatibility,\n parent: SwellMenu | SwellMenuItem,\n menuItem: SwellMenuItem,\n): ShopifyResource<ShopifyLink> {\n const parentHandle = (parent as any).handle || (parent as any).id;\n\n return new ShopifyResource<ShopifyLink>({\n active: Boolean(menuItem.active),\n child_active: Boolean(menuItem.child_active),\n child_current: Boolean(menuItem.child_current),\n current: Boolean(menuItem.current),\n handle: `${parentHandle}-${snakeCase(menuItem.name)}`,\n levels: menuItem.levels,\n links: menuItem.items?.map((item) => ShopifyLink(instance, menuItem, item)),\n object: menuItem.resource,\n title: menuItem.name,\n type: getLinkType(menuItem.type),\n url: String(menuItem.url),\n });\n}\n\nfunction getLinkType(type: string) {\n switch (type) {\n case 'home':\n return 'frontpage_link';\n case 'category':\n return 'collection_link';\n case 'product':\n return 'product_link';\n case 'search':\n return 'search_link';\n default:\n return 'page_link';\n }\n}\n", "import { getCountryByCurrency, isObject } from '@/utils';\n\nimport type { SwellData } from 'types/swell';\nimport type { ShopifyCompatibility } from '../shopify';\nimport type {\n ShopifyCountry,\n ShopifyLocale,\n ShopifyLocalization,\n} from 'types/shopify';\n\nexport default function ShopifyLocalization(\n instance: ShopifyCompatibility,\n store: SwellData,\n request: SwellData,\n): ShopifyLocalization {\n const { currency: storefrontCurrency, locale: storefrontLocale } =\n instance.swell.getStorefrontLocalization();\n\n const requestCurrency =\n store.currencies.find(\n (currency: any) =>\n currency.code === (storefrontCurrency || request.currency),\n ) || store.currencies[0];\n\n const requestLocale =\n store.locales.find(\n (locale: any) => locale.code === (storefrontLocale || request.locale),\n ) || store.locales[0];\n\n return {\n available_countries: getAvailableCountries(store),\n available_languages: getAvailableLanguages(store),\n country:\n requestCurrency && getShopifyCountryFromCurrency(requestCurrency, store),\n language: requestLocale && getShopifyLocaleFromLocale(requestLocale, store),\n market: {\n handle: 'unknown',\n id: 0,\n metafields: {},\n },\n };\n}\n\nfunction getAvailableCountries(store: SwellData): ShopifyCountry[] {\n return (\n store.currencies.map((currency: any) =>\n getShopifyCountryFromCurrency(currency, store),\n ) || []\n );\n}\n\nfunction getAvailableLanguages(store: SwellData): ShopifyLocale[] {\n return (\n store.locales.map((locale: any) =>\n getShopifyLocaleFromLocale(locale, store),\n ) || []\n );\n}\n\nfunction getShopifyLocaleFromLocale(\n locale: any,\n store: SwellData,\n): ShopifyLocale {\n return {\n // Shopify shop_locale object\n endonym_name: locale.name,\n iso_code: locale.code,\n name: locale.name,\n primary: locale.code === store.locale,\n root_url: store.url, // TODO\n };\n}\n\nfunction getShopifyCountryFromCurrency(\n currency: SwellData,\n store: SwellData,\n): ShopifyCountry {\n return {\n available_languages: getAvailableLanguages(store), // All languages are available for all countries\n continent: 'North America', // TODO\n currency: {\n // Shopify currency object\n iso_code: currency.code,\n name: currency.name,\n symbol: currency.symbol,\n },\n iso_code: getCountryByCurrency(currency.code)?.iso as string,\n market: {\n // N/A\n handle: 'unknown',\n id: 0,\n metafields: {},\n },\n name: getCountryByCurrency(currency.code)?.name as string,\n 'popular?': false, // TODO\n unit_system: 'metric', // TODO\n };\n}\n\nexport function isLikeShopifyCountry(value: unknown): value is ShopifyCountry {\n return (\n isObject(value) &&\n Object.hasOwn(value, 'iso_code') &&\n Object.hasOwn(value, 'name') &&\n Object.hasOwn(value, 'continent') &&\n Object.hasOwn(value, 'unit_system')\n );\n}\n", "import { stringifyQueryParams } from '@/utils';\nimport { ShopifyResource } from './resource';\n\nimport type { SwellStorefrontPagination } from '@/resources';\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyPaginate, ShopifyPart } from 'types/shopify';\n\nexport default function ShopifyPaginate(\n instance: ShopifyCompatibility,\n pagination: SwellStorefrontPagination,\n): ShopifyResource<ShopifyPaginate> {\n const { page, count, pages, page_count, limit, next, previous } = pagination;\n const currentPage = pages[page] || {};\n\n return new ShopifyResource<ShopifyPaginate>({\n current_offset: currentPage.start || 0,\n current_page: page,\n items: count || 0,\n next: next ? getPartObject(String(page + 1), next?.url) : undefined,\n page_param: 'page',\n page_size: limit,\n pages: page_count,\n parts: Object.keys(pages).map((page) =>\n getPartObject(\n page,\n Number(page) !== Number(pagination.page)\n ? `${instance.swell.url.pathname}?${stringifyQueryParams({\n ...instance.swell.queryParams,\n page,\n })}`\n : undefined,\n ),\n ),\n previous: previous\n ? getPartObject(String(page - 1), previous?.url)\n : undefined,\n });\n}\n\nfunction getPartObject(page: string, url?: string): ShopifyPart {\n return {\n is_link: url ? true : false,\n title: page,\n url: url || undefined,\n };\n}\n", "import { ShopifyResource, defer, deferWith } from './resource';\nimport ShopifyProduct from './product';\n\nimport { cloneStorefrontResource, StorefrontResource } from '@/resources';\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellCollection, SwellRecord } from 'types/swell';\nimport type {\n ShopifyPredictiveSearch,\n ShopifyPredictiveSearchResources,\n} from 'types/shopify';\n\nexport default function ShopifyPredictiveSearch(\n instance: ShopifyCompatibility,\n search: StorefrontResource,\n): ShopifyResource<ShopifyPredictiveSearch> {\n if (search instanceof ShopifyResource) {\n return search.clone() as ShopifyResource<ShopifyPredictiveSearch>;\n }\n\n if (search instanceof StorefrontResource) {\n search = cloneStorefrontResource(search);\n }\n\n return new ShopifyResource<ShopifyPredictiveSearch>({\n performed: deferWith(search, (search) => search.performed),\n resources: ShopifyPredictiveSearchResources(instance, search),\n terms: deferWith(search, (search) => search.query),\n types: ['product'],\n });\n}\n\nfunction ShopifyPredictiveSearchResources(\n instance: ShopifyCompatibility,\n search: StorefrontResource,\n): ShopifyResource<ShopifyPredictiveSearchResources> {\n if (search instanceof ShopifyResource) {\n return search.clone() as ShopifyResource<ShopifyPredictiveSearchResources>;\n }\n\n return new ShopifyResource<ShopifyPredictiveSearchResources>({\n articles: [],\n collections: [],\n pages: [],\n products: deferWith(\n search.products,\n (products: SwellCollection<SwellRecord>) => {\n return products?.results?.map((product) => {\n const shopifyProduct = ShopifyProduct(instance, product) as any;\n shopifyProduct.object_type = 'product';\n return shopifyProduct;\n });\n },\n ),\n });\n}\n", "import { ShopifyResource, deferWith } from './resource';\nimport ShopifyProduct from './product';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellData, SwellRecord } from 'types/swell';\nimport type { ShopifyRecommendations } from 'types/shopify';\n\nexport default function ShopifyRecommendations(\n instance: ShopifyCompatibility,\n product: SwellData,\n): ShopifyResource<ShopifyRecommendations> {\n if (product instanceof ShopifyResource) {\n return product.clone() as ShopifyResource<ShopifyRecommendations>;\n }\n\n return new ShopifyResource<ShopifyRecommendations>({\n products: deferWith(product, (product) => {\n return (product?.recommendations || []).map(\n (recommendation: SwellRecord) =>\n ShopifyProduct(instance, recommendation),\n );\n }),\n products_count: deferWith(product, (product: SwellData) => {\n return product?.recommendations?.length || 0;\n }),\n 'performed?': true,\n });\n}\n", "import { ShopifyResource, deferWith } from './resource';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellData } from 'types/swell';\nimport type { ShopifyPageObject } from 'types/shopify';\n\nexport default function ShopifyPage(\n _instance: ShopifyCompatibility,\n page: SwellData,\n): ShopifyResource<ShopifyPageObject> {\n if (page instanceof ShopifyResource) {\n return page.clone() as ShopifyResource<ShopifyPageObject>;\n }\n\n return new ShopifyResource<ShopifyPageObject>({\n author: undefined, // Not supported\n content: deferWith(page, (page) => page.content),\n handle: deferWith(page, (page) => page.slug),\n id: 0,\n metafields: {},\n published_at: deferWith(\n page,\n (page) => page.date_published || page.date_created,\n ),\n template_suffix: deferWith(page, (page) => page.theme_template),\n title: deferWith(page, (page) => page.title || page.name), // Due to deprecated name field\n url: deferWith(page, (page) => `/pages/${page.slug}`),\n });\n}\n", "import { ShopifyResource, defer, deferWith } from './resource';\nimport { makeProductsCollectionResolve } from './collection';\nimport ShopifyProduct from './product';\nimport ShopifyFilter from './filter';\n\nimport { cloneStorefrontResource, StorefrontResource } from '@/resources';\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifySearch } from 'types/shopify';\nimport type { SwellRecord } from 'types/swell';\n\nexport default function ShopifySearch(\n instance: ShopifyCompatibility,\n search: StorefrontResource,\n): ShopifyResource<ShopifySearch> {\n if (search instanceof ShopifyResource) {\n return search.clone() as ShopifyResource<ShopifySearch>;\n }\n\n if (search instanceof StorefrontResource) {\n search = cloneStorefrontResource(search);\n }\n\n const resolveProducts = makeProductsCollectionResolve(\n instance,\n search,\n (product) => {\n const shopifyProduct = ShopifyProduct(instance, product as SwellRecord);\n (shopifyProduct as any).object_type = 'product';\n return shopifyProduct;\n },\n );\n\n return new ShopifyResource<ShopifySearch>({\n default_sort_by: deferWith(\n search,\n (search) => search.sort_options?.[0].value,\n ),\n filters: defer(async () => {\n return ((await resolveProducts())?.filter_options ?? []).map((filter) =>\n ShopifyFilter(instance, filter),\n );\n }),\n performed: deferWith(search, (search) => search.performed),\n results: defer(async () => (await resolveProducts())?.results ?? []),\n results_count: defer(async () => (await resolveProducts())?.count || 0),\n sort_by: defer(() => search.sort),\n sort_options: deferWith(search, (search) => search.sort_options),\n terms: defer(() => search.query),\n types: ['product'],\n });\n}\n", "import { ShopifyResource, defer } from './resource';\nimport { ShopifyCompatibility } from '../shopify';\n\nimport type { SwellData } from 'types/swell';\nimport type { ShopifyAddress, ShopifyBrand, ShopifyShop } from 'types/shopify';\n\nexport default function ShopifyShop(\n instance: ShopifyCompatibility,\n store: SwellData,\n): ShopifyResource<ShopifyShop> {\n const currency = store.currencies.find(\n (currency: any) => currency.code === store.currency,\n ) ?? { code: 'USD', symbol: '$', name: 'US Dollar', decimals: 2 };\n\n return new ShopifyResource<ShopifyShop>({\n accepts_gift_cards: true, // TODO\n address: {} as ShopifyAddress, // TODO\n brand: {} as ShopifyBrand, // TODO\n collections_count: defer<number>(async () => {\n const { count } = await instance.swell.storefront.categories.list({\n limit: 1,\n });\n\n return count;\n }),\n currency: store.currency as string,\n customer_accounts_enabled: true, // TODO: consider if we should provide a standard option\n customer_accounts_optional: true, // TODO\n description: store.description as string, // TODO\n domain: store.url.replace(/^http[s]?:\\/\\//, '') as string,\n email: store.support_email as string,\n enabled_currencies: store.currencies.map((currency: any) => ({\n // currency object\n iso_code: currency.code,\n name: currency.name,\n symbol: currency.symbol,\n })),\n enabled_locales: [],\n enabled_payment_types: [], // TODO\n id: store.id as number,\n locale: store.locale as string,\n metafields: {},\n metaobjects: {},\n money_format: `${currency.symbol}{{amount}}`,\n money_with_currency_format: `${currency.symbol}{{amount}} ${currency.code}`,\n name: store.name as string,\n password_message: '', // TODO\n permanent_domain: `${store.id}.swell.store`,\n phone: store.support_phone as string,\n published_locales: store.locales.map((locale: any) => ({\n // shop_locale object\n endonym_name: locale.name,\n iso_code: locale.code,\n name: locale.name,\n primary: locale.code === store.locale,\n root_url: store.url, // TODO\n })),\n secure_url: store.url as string,\n types: [], // TODO: product types\n url: store.url as string,\n vendors: [], // TODO: product vendors\n\n policies: [], // TODO\n privacy_policy: undefined, // TODO\n refund_policy: undefined, // TODO\n shipping_policy: undefined, // TODO\n subscription_policy: undefined, // TODO\n terms_of_service: undefined, // TODO\n taxes_included: false,\n products_count: defer<number>(async () => {\n const { count } = await instance.swell.storefront.products.list({\n limit: 1,\n });\n\n return count;\n }),\n });\n}\n", "import { Drop } from 'liquidjs';\n\nimport { isLikePromise } from '@/liquid/utils';\nimport { SwellStorefrontRecord } from '@/resources';\nimport { ShopifyProduct, type ShopifyResource } from '../shopify-objects';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyProduct as ShopifyProductType } from 'types/shopify';\n\nexport default class AllProductsDrop extends Drop {\n #instance: ShopifyCompatibility;\n #map: Map<string, ShopifyResource<ShopifyProductType>>;\n\n constructor(instance: ShopifyCompatibility) {\n super();\n this.#instance = instance;\n this.#map = new Map();\n }\n\n liquidMethodMissing(key: unknown): unknown {\n switch (typeof key) {\n case 'string': {\n return this.getProduct(key);\n }\n\n case 'object': {\n if (key !== null) {\n const obj = key as Record<string, unknown>;\n const id = (obj.handle || obj.id || obj._id) as string;\n\n if (isLikePromise(id)) {\n return id.then((id) => this.getProduct(id as string));\n }\n\n return this.getProduct(id);\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n\n getProduct(slug: string): ShopifyResource<ShopifyProductType> | null {\n let resource = this.#map.get(slug);\n\n // Limit: 20 unique handles per page\n if (resource === undefined && this.#map.size < 20) {\n resource = ShopifyProduct(\n this.#instance,\n new SwellStorefrontRecord(this.#instance.swell, 'products', slug),\n );\n\n this.#map.set(slug, resource);\n }\n\n return resource ?? null;\n }\n}\n", "import { Drop } from 'liquidjs';\n\nimport { isLikePromise } from '@/liquid/utils';\nimport { SwellStorefrontRecord } from '@/resources';\nimport { ShopifyArticle, type ShopifyResource } from '../shopify-objects';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyArticle as ShopifyArticleType } from 'types/shopify';\n\nexport default class ArticlesDrop extends Drop {\n #instance: ShopifyCompatibility;\n #map: Map<string, ShopifyResource<ShopifyArticleType>>;\n\n constructor(instance: ShopifyCompatibility) {\n super();\n this.#instance = instance;\n this.#map = new Map();\n }\n\n liquidMethodMissing(key: unknown): unknown {\n switch (typeof key) {\n case 'string': {\n return this.getArticle(key);\n }\n\n case 'object': {\n if (key !== null) {\n const obj = key as Record<string, unknown>;\n const id = (obj.handle || obj.id || obj._id) as string;\n\n if (isLikePromise(id)) {\n return id.then((id) => this.getArticle(id as string));\n }\n\n return this.getArticle(id);\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n\n getArticle(slug: string): ShopifyResource<ShopifyArticleType> {\n let resource = this.#map.get(slug);\n\n if (resource === undefined) {\n resource = ShopifyArticle(\n this.#instance,\n new SwellStorefrontRecord(this.#instance.swell, 'content/blogs', slug),\n );\n\n this.#map.set(slug, resource);\n }\n\n return resource;\n }\n}\n", "import { Drop } from 'liquidjs';\n\nimport { isLikePromise } from '@/liquid/utils';\nimport { SwellStorefrontRecord } from '@/resources';\nimport { ShopifyBlog, type ShopifyResource } from '../shopify-objects';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyBlog as ShopifyBlogType } from 'types/shopify';\n\nexport default class BlogsDrop extends Drop {\n #instance: ShopifyCompatibility;\n #map: Map<string, ShopifyResource<ShopifyBlogType>>;\n\n constructor(instance: ShopifyCompatibility) {\n super();\n this.#instance = instance;\n this.#map = new Map();\n }\n\n liquidMethodMissing(key: unknown): unknown {\n switch (typeof key) {\n case 'string': {\n return this.getBlog(key);\n }\n\n case 'object': {\n if (key !== null) {\n const obj = key as Record<string, unknown>;\n const id = (obj.handle || obj.id || obj._id) as string;\n\n if (isLikePromise(id)) {\n return id.then((id) => this.getBlog(id as string));\n }\n\n return this.getBlog(id);\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n\n getBlog(slug: string): ShopifyResource<ShopifyBlogType> {\n let resource = this.#map.get(slug);\n\n if (resource === undefined) {\n resource = ShopifyBlog(\n this.#instance,\n new SwellStorefrontRecord(\n this.#instance.swell,\n 'content/blog-categories',\n slug,\n ),\n );\n\n this.#map.set(slug, resource);\n }\n\n return resource;\n }\n}\n", "import { Drop } from 'liquidjs';\n\nimport { isObject } from '@/utils';\nimport { isLikePromise } from '@/liquid/utils';\nimport {\n StorefrontResource,\n SwellStorefrontRecord,\n SwellStorefrontCollection,\n} from '@/resources';\n\nimport {\n ShopifyCollection,\n ShopifyProduct,\n type ShopifyResource,\n} from '../shopify-objects';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { SwellCollection, SwellData, SwellRecord } from 'types/swell';\nimport type { ShopifyCollection as ShopifyCollectionType } from 'types/shopify';\n\n// TODO: remove this once backend is implemented for \"all\"\nclass AllCategoryResource extends StorefrontResource<SwellData> {\n constructor(instance: ShopifyCompatibility) {\n super(() => {\n const category: SwellData = {\n id: 'all',\n slug: 'all',\n name: 'Products',\n products: new SwellStorefrontProducts(instance, { $variants: true }),\n };\n\n return category;\n });\n }\n}\n\nclass CollectionsDrop extends Drop {\n #instance: ShopifyCompatibility;\n #map: Map<string, ShopifyResource<ShopifyCollectionType>>;\n\n constructor(instance: ShopifyCompatibility) {\n super();\n this.#instance = instance;\n this.#map = new Map();\n }\n\n liquidMethodMissing(key: unknown): unknown {\n switch (typeof key) {\n case 'string': {\n if (key === 'all') {\n return this.getAllCollection();\n }\n\n if (key === 'size') {\n return this.getAllCollectionsSize();\n }\n\n return this.getCollection(key);\n }\n\n case 'object': {\n if (key !== null) {\n const obj = key as Record<string, unknown>;\n const id = (obj.handle || obj.id || obj._id) as string;\n\n if (isLikePromise(id)) {\n return id.then((id) => this.getCollection(id as string));\n }\n\n return this.getCollection(id);\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n\n getCollection(slug: string): ShopifyResource<ShopifyCollectionType> {\n let resource = this.#map.get(slug);\n\n if (resource === undefined) {\n resource = ShopifyCollection(\n this.#instance,\n new SwellStorefrontCategory(this.#instance, slug),\n );\n\n this.#map.set(slug, resource);\n }\n\n return resource;\n }\n\n getAllCollection(): ShopifyResource<ShopifyCollectionType> {\n let resource = this.#map.get('all');\n\n if (resource === undefined) {\n resource = ShopifyCollection(\n this.#instance,\n new AllCategoryResource(this.#instance),\n );\n\n this.#map.set('all', resource);\n }\n\n return resource;\n }\n\n getAllCollectionsSize(): Promise<number> | number {\n const count = this.#instance.theme.globals.shop\n ?.collections_count as number;\n return count || 0;\n }\n}\n\nexport default class Collections extends SwellStorefrontCollection<ShopifyCollectionType> {\n #drop: CollectionsDrop;\n\n constructor(instance: ShopifyCompatibility) {\n super(instance.swell, 'categories', {}, async () => {\n const response = await this._defaultGetter().call(this);\n\n if (!response) {\n return null;\n }\n\n return {\n ...response,\n page_count: response.page_count || 0,\n results: response.results.map((item) =>\n ShopifyCollection(instance, item as unknown as SwellRecord),\n ),\n };\n });\n\n this.#drop = new CollectionsDrop(instance);\n }\n\n toLiquid() {\n return this.#drop;\n }\n}\n\nclass SwellStorefrontCategory extends StorefrontResource<SwellData> {\n constructor(instance: ShopifyCompatibility, id: string, query?: SwellData) {\n super(async () => {\n const category = new SwellStorefrontRecord(\n instance.swell,\n 'categories',\n id,\n query,\n );\n\n const record = await category.resolve();\n\n if (isObject(record) && record.id) {\n record.products = new SwellStorefrontProducts(\n instance,\n {\n category: record.id,\n $variants: true,\n },\n (result) => {\n return {\n ...result,\n results: result.results.map(\n (product) =>\n ShopifyProduct(instance, product) as unknown as SwellRecord,\n ),\n };\n },\n );\n }\n\n return record;\n });\n }\n}\n\nclass SwellStorefrontProducts extends SwellStorefrontCollection<SwellRecord> {\n constructor(\n instance: ShopifyCompatibility,\n query?: SwellData,\n transform?: (\n result: SwellCollection<SwellRecord>,\n ) => SwellCollection<SwellRecord>,\n ) {\n super(instance.swell, 'products', query, async function () {\n const result = await this._defaultGetter().call(this);\n\n if (!result) {\n return result;\n }\n\n return transform ? transform(result) : result;\n });\n }\n}\n", "import { Drop } from 'liquidjs';\n\nimport { isLikePromise } from '@/liquid/utils';\nimport { StorefrontResource } from '@/resources';\nimport ShopifyImage from '../shopify-objects/image';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyImage as ShopifyImageType } from 'types/shopify';\nimport type { SwellData } from 'types/swell';\nimport type { Swell } from '@/api';\n\nexport default class ImagesDrop extends Drop {\n #instance: ShopifyCompatibility;\n #map: Map<string, ShopifyImageType>;\n\n constructor(instance: ShopifyCompatibility) {\n super();\n this.#instance = instance;\n this.#map = new Map();\n }\n\n liquidMethodMissing(key: unknown): unknown {\n switch (typeof key) {\n case 'string': {\n return this.getImage(key);\n }\n\n case 'object': {\n if (key !== null) {\n const obj = key as Record<string, unknown>;\n const id = (obj.handle || obj.id || obj._id) as string;\n\n if (isLikePromise(id)) {\n return id.then((id) => this.getImage(id as string));\n }\n\n return this.getImage(id);\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n\n getImage(name: string): ShopifyImageType {\n let resource = this.#map.get(name);\n\n if (resource === undefined) {\n resource = ShopifyImage(new SwellImage(this.#instance.swell, name));\n\n this.#map.set(name, resource);\n }\n\n return resource;\n }\n}\n\nclass SwellImage extends StorefrontResource<SwellData> {\n constructor(swell: Swell, name: string) {\n super(async () => {\n const file = await swell.get<SwellData>('/:files/:last', {\n private: { $ne: true },\n content_type: { $regex: '^image/' },\n filename: name,\n });\n\n if (!file) {\n return null;\n }\n\n return { file };\n });\n }\n}\n", "import { Drop } from 'liquidjs';\n\nexport default class ObjectHandlesDrop<T> extends Drop {\n #map: Map<string, T>;\n\n constructor(map?: Record<string, T | undefined> | Map<string, T>) {\n super();\n\n switch (typeof map) {\n case 'object': {\n if (map === null) {\n this.#map = new Map();\n break;\n }\n\n this.#map = new Map(\n map instanceof Map ? map : Object.entries(map as Record<string, T>),\n );\n break;\n }\n\n default:\n this.#map = new Map();\n break;\n }\n }\n\n liquidMethodMissing(key: unknown): T | undefined {\n switch (typeof key) {\n case 'string':\n return this.#map.get(key);\n\n case 'object': {\n if (key !== null && 'handle' in key) {\n const { handle } = key;\n\n if (typeof handle === 'string') {\n return this.#map.get(handle);\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n}\n", "import { Drop } from 'liquidjs';\n\nimport { isLikePromise } from '@/liquid/utils';\nimport { SwellStorefrontCollection, SwellStorefrontRecord } from '@/resources';\nimport { ShopifyPage, type ShopifyResource } from '../shopify-objects';\n\nimport type { ShopifyCompatibility } from '../shopify';\nimport type { ShopifyPageObject } from 'types/shopify';\n\nclass PagesDrop extends Drop {\n #instance: ShopifyCompatibility;\n #map: Map<string, ShopifyResource<ShopifyPageObject>>;\n\n constructor(instance: ShopifyCompatibility) {\n super();\n this.#instance = instance;\n this.#map = new Map();\n }\n\n liquidMethodMissing(key: unknown): unknown {\n switch (typeof key) {\n case 'string': {\n return this.getPage(key);\n }\n\n case 'object': {\n if (key !== null) {\n const obj = key as Record<string, unknown>;\n const id = (obj.handle || obj.id || obj._id) as string;\n\n if (isLikePromise(id)) {\n return id.then((id) => this.getPage(id as string));\n }\n\n return this.getPage(id);\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n\n getPage(slug: string): ShopifyResource<ShopifyPageObject> {\n let resource = this.#map.get(slug);\n\n if (resource === undefined) {\n resource = ShopifyPage(\n this.#instance,\n new SwellStorefrontRecord(this.#instance.swell, 'content/pages', slug),\n );\n\n this.#map.set(slug, resource);\n }\n\n return resource;\n }\n}\n\nexport default class Pages extends SwellStorefrontCollection<ShopifyPageObject> {\n #drop: PagesDrop;\n\n constructor(instance: ShopifyCompatibility) {\n super(instance.swell, 'content/pages', {}, async () => {\n const response = await this._defaultGetter().call(this);\n\n if (!response) {\n return null;\n }\n\n return {\n ...response,\n page_count: response.page_count || 0,\n results: response.results.map((page) => ShopifyPage(instance, page)),\n };\n });\n\n this.#drop = new PagesDrop(instance);\n }\n\n toLiquid() {\n return this.#drop;\n }\n}\n", "import { Drop } from 'liquidjs';\nimport { noop } from 'lodash-es';\n\nexport default class RenderDrop<T> extends Drop {\n #result: unknown;\n #handler: () => T | Promise<T>;\n\n constructor(handler: () => T | Promise<T>) {\n super();\n\n this.#result = undefined;\n this.#handler = handler;\n }\n\n /**\n * For `Drop` we usually use `valueOf` to convert the `object` to a `string`.\n * Use `then` instead of `valueOf` since `valueOf` doesn't work for `Promise`.\n */\n then(\n onfulfilled: (value: unknown) => void,\n onrejected: (err: unknown) => void,\n ) {\n if (this.#handler !== noop) {\n this.#result = Promise.resolve()\n .then(this.#handler)\n .then((result) => {\n this.#result = result;\n return this.#result;\n })\n .then(onfulfilled, onrejected) as T;\n\n // Reset handler as it will no longer be used (free memory)\n this.#handler = noop as () => T | Promise<T>;\n\n return;\n }\n\n onfulfilled(this.#result);\n }\n}\n", "import { Liquid, type FS } from 'liquidjs';\n\nimport { unescapeLiquidSyntax } from '../utils/escape';\n\nimport { SwellTheme } from '../theme';\nimport { bindTags } from './tags';\nimport { bindFilters } from './filters';\nimport { swellOperators } from './operators';\n\nimport type {\n GetAssetUrl,\n GetThemeConfig,\n GetThemeTemplateConfigByType,\n RenderCurrency,\n RenderTemplate,\n RenderPageSections,\n RenderTemplateString,\n RenderTranslation,\n ThemeSectionSchema,\n} from 'types/swell';\n\nexport * from './color';\nexport * from './form';\nexport * from './font';\n\ninterface LiquidSwellOptions {\n theme: SwellTheme;\n getThemeConfig?: GetThemeConfig;\n getThemeTemplateConfigByType?: GetThemeTemplateConfigByType;\n getAssetUrl?: GetAssetUrl;\n renderTemplate?: RenderTemplate;\n renderTemplateString?: RenderTemplateString;\n renderPageSections?: RenderPageSections;\n renderTranslation?: RenderTranslation;\n renderCurrency?: RenderCurrency;\n isEditor: boolean;\n locale?: string;\n currency?: string;\n layoutName?: string;\n extName?: string;\n componentsDir?: string;\n sectionsDir?: string;\n blocksDir?: string;\n}\n\nexport class LiquidSwell extends Liquid {\n public theme: SwellTheme;\n public getThemeConfig: GetThemeConfig;\n public getThemeTemplateConfigByType: GetThemeTemplateConfigByType;\n public getAssetUrl: GetAssetUrl;\n public renderTemplate: RenderTemplate;\n public renderTemplateString: RenderTemplateString;\n public renderPageSections: RenderPageSections;\n public renderTranslation: RenderTranslation;\n public renderCurrency: RenderCurrency;\n\n public isEditor: boolean;\n public locale: string;\n public currency: string;\n public layoutName: string;\n public extName: string;\n public componentsDir: string;\n public sectionsDir: string;\n public blocksDir: string;\n\n public lastSchema: ThemeSectionSchema | undefined;\n\n constructor({\n theme,\n getThemeConfig,\n getThemeTemplateConfigByType,\n getAssetUrl,\n renderTemplate,\n renderTemplateString,\n renderPageSections,\n renderTranslation,\n renderCurrency,\n isEditor,\n locale,\n currency,\n layoutName,\n extName,\n componentsDir,\n sectionsDir,\n blocksDir,\n }: LiquidSwellOptions) {\n getThemeConfig = getThemeConfig || theme.getThemeConfig.bind(theme);\n extName = extName || 'liquid';\n const fs = new LiquidFS(extName);\n\n super({\n cache: true,\n relativeReference: false,\n fs,\n ownPropertyOnly: false,\n operators: swellOperators,\n });\n\n fs.liquidSwell = this;\n\n this.theme = theme;\n this.getThemeConfig = getThemeConfig;\n this.getThemeTemplateConfigByType =\n getThemeTemplateConfigByType ||\n theme.getThemeTemplateConfigByType.bind(theme);\n this.getAssetUrl = getAssetUrl || theme.getAssetUrl.bind(theme);\n this.renderTemplate = renderTemplate || theme.renderTemplate.bind(theme);\n this.renderTemplateString =\n renderTemplateString || theme.renderTemplateString.bind(theme);\n this.renderPageSections =\n renderPageSections || theme.renderPageSections.bind(theme);\n this.renderTranslation =\n renderTranslation || theme.renderTranslation.bind(theme);\n this.renderCurrency = renderCurrency || theme.renderCurrency.bind(theme);\n this.isEditor = Boolean(isEditor);\n this.locale = locale || 'en-US';\n this.currency = currency || 'USD';\n this.layoutName = layoutName || 'theme';\n this.extName = extName;\n this.componentsDir = componentsDir || 'components';\n this.sectionsDir = sectionsDir || 'sections';\n this.blocksDir = blocksDir || 'blocks';\n this.lastSchema = undefined;\n\n bindTags(this);\n bindFilters(this);\n }\n\n async parseAndRender(template: string, data?: object): Promise<string> {\n return super.parseAndRender(template, data);\n }\n\n async resolveFilePathByType(\n type: string,\n name: string,\n ): Promise<string | undefined> {\n const config = await this.getThemeTemplateConfigByType(type, name);\n\n if (config?.file_path) {\n return config.file_path;\n }\n }\n\n async getComponentPath(componentName: string): Promise<string> {\n return (\n (await this.resolveFilePathByType('components', componentName)) ||\n resolveFilePath(`${this.componentsDir}/${componentName}`, this.extName)\n );\n }\n\n async getSectionPath(sectionName: string): Promise<string> {\n return (\n (await this.resolveFilePathByType('sections', sectionName)) ||\n resolveFilePath(`${this.sectionsDir}/${sectionName}`, this.extName)\n );\n }\n\n async getSectionGroupPath(sectionName: string): Promise<string> {\n return (\n (await this.resolveFilePathByType('sections', `${sectionName}.json`)) ||\n resolveFilePath(`${this.sectionsDir}/${sectionName}`, 'json')\n );\n }\n\n async getThemeBlockPath(blockName: string): Promise<string> {\n return (\n (await this.resolveFilePathByType('blocks', blockName)) ||\n resolveFilePath(`${this.blocksDir}/${blockName}`, this.extName)\n );\n }\n}\n\nfunction resolveFilePath(fileName: string, extName: string): string {\n return `theme/${fileName}.${extName}`;\n}\n\nclass LiquidFS implements FS {\n public liquidSwell!: LiquidSwell;\n\n constructor(_extName: string) {}\n\n async readFile(filePath: string): Promise<string> {\n const template = await this.liquidSwell.getThemeConfig(filePath);\n\n return unescapeLiquidSyntax(\n template?.file_data || `<!-- theme template not found: ${filePath} -->`,\n );\n }\n\n async exists(filePath: string): Promise<boolean> {\n const template = await this.liquidSwell.getThemeConfig(filePath);\n\n return Boolean(template);\n }\n\n readFileSync(_filePath: string): string {\n return '';\n }\n\n existsSync(_filePath: string): boolean {\n return false;\n }\n\n contains(_root: string, _file: string): boolean {\n return true;\n }\n\n resolve(_dir: string, file: string, _ext: string): string {\n return file;\n }\n\n fallback(_filePath: string): string | undefined {\n return;\n }\n}\n", "function replacerUnescape(match: string): string {\n return match.includes('\\\\\"') ? (JSON.parse(`\"${match}\"`) as string) : match;\n}\n\nexport function unescapeLiquidSyntax(template: string): string {\n return template.replace(/\\{\\{.*?\\}\\}/g, replacerUnescape);\n}\n", "import {\n Value,\n Liquid,\n type TopLevelToken,\n TagToken,\n Context,\n Tag,\n} from 'liquidjs';\nimport type { IdentifierToken } from 'liquidjs/dist/tokens';\nimport type { Argument, TagClass } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\nexport default function bind(_liquidSwell: LiquidSwell): TagClass {\n return class AssignTag extends Tag {\n private key: string;\n private value?: Value;\n private identifier?: IdentifierToken;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n ) {\n super(token, remainTokens, liquid);\n this.identifier = this.tokenizer.readIdentifier();\n this.key = this.identifier.content;\n this.tokenizer.assert(this.key, 'expected variable name');\n\n this.tokenizer.skipBlank();\n this.tokenizer.advance();\n\n try {\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\n } catch (e) {\n // Ignore the error and continue\n console.warn(\n `Liquid \"assign\" tag: ${e instanceof Error ? e.stack : String(e)}`,\n );\n this.value = undefined;\n }\n }\n\n *render(ctx: Context): Generator<unknown, void, unknown> {\n if (!this.value) {\n return;\n }\n\n (ctx.bottom() as any)[this.key] = yield this.value.value(\n ctx,\n this.liquid.options.lenientIf,\n );\n }\n\n public *arguments(): Iterable<Argument | undefined> {\n yield this.value;\n }\n\n public *localScope(): Iterable<IdentifierToken | undefined> {\n yield this.identifier;\n }\n };\n}\n", "import { Tag, Value, evalToken, toValue } from 'liquidjs';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Template,\n ValueToken,\n TopLevelToken,\n Emitter,\n Parser,\n Liquid,\n TagToken,\n Context,\n ParseStream,\n} from 'liquidjs';\nimport type {\n TagClass,\n Arguments,\n TagRenderReturn,\n} from 'liquidjs/dist/template';\n\n/*\n{% case variable %}\n {% when first_value %}\n first_expression\n {% when second_value %}\n second_expression\n {% else %}\n third_expression\n{% endcase %}\n*/\n\n// Note: Re-implemented to support wrapping blocks in container elements for theme editor functionality\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class CaseTag extends Tag {\n value: Value;\n branches: { values: ValueToken[]; templates: Template[] }[];\n elseTemplates: Template[];\n isBlock: boolean;\n\n constructor(\n tagToken: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(tagToken, remainTokens, liquid);\n\n // Determine if the variable is a block\n const begin = this.tokenizer.p;\n const caseVar = (this.tokenizer.readValue() as ValueToken)?.getText();\n this.isBlock = Boolean(caseVar?.startsWith('block.'));\n this.tokenizer.p = begin;\n\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\n this.branches = [];\n this.elseTemplates = [];\n\n let p: Template[] = [];\n let elseCount = 0;\n const stream: ParseStream = parser\n .parseStream(remainTokens)\n .on('tag:when', (token: TagToken) => {\n if (elseCount > 0) {\n return;\n }\n\n p = [];\n\n const values: ValueToken[] = [];\n while (!token.tokenizer.end()) {\n values.push(token.tokenizer.readValueOrThrow());\n token.tokenizer.skipBlank();\n if (token.tokenizer.peek() === ',') {\n token.tokenizer.readTo(',');\n } else {\n token.tokenizer.readTo('or');\n }\n }\n this.branches.push({\n values,\n templates: p,\n });\n })\n .on('tag:else', () => {\n elseCount++;\n p = this.elseTemplates;\n })\n .on('tag:endcase', () => stream.stop())\n .on('template', (tpl: Template) => {\n if (p !== this.elseTemplates || elseCount === 1) {\n p.push(tpl);\n }\n })\n .on('end', () => {\n throw new Error(`tag ${tagToken.getText()} not closed`);\n });\n\n stream.start();\n }\n\n *render(ctx: Context, emitter: Emitter): TagRenderReturn {\n const r = this.liquid.renderer;\n const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf));\n let branchHit = false;\n\n let output = '';\n for (const branch of this.branches) {\n for (const valueToken of branch.values) {\n const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf);\n if (target === value) {\n const blockOutput = yield r.renderTemplates(branch.templates, ctx);\n output += blockOutput;\n branchHit = true;\n break;\n }\n }\n }\n\n if (!branchHit) {\n output += yield r.renderTemplates(this.elseTemplates, ctx);\n }\n\n if (output) {\n emitter.write(output);\n }\n\n return;\n }\n\n public *arguments(): Arguments {\n yield this.value;\n yield* this.branches.flatMap((b) => b.values);\n }\n\n // eslint-disable-next-line require-yield\n public *children(): Generator<unknown, Template[]> {\n const templates = this.branches.flatMap((b) => b.templates);\n if (this.elseTemplates) {\n templates.push(...this.elseTemplates);\n }\n return templates;\n }\n };\n}\n", "import { Tag, TypeGuards } from 'liquidjs';\n\nimport type { LiquidSwell } from '..';\nimport type { Liquid, TopLevelToken, TagToken } from 'liquidjs';\nimport type { TagClass } from 'liquidjs/dist/template';\n\nexport default function bind(_liquidSwell: LiquidSwell): TagClass {\n return class CommentTag extends Tag {\n constructor(\n tagToken: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n ) {\n super(tagToken, remainTokens, liquid);\n\n let nested = 1;\n\n while (remainTokens.length > 0) {\n const token = remainTokens.shift();\n\n if (TypeGuards.isTagToken(token)) {\n switch (token.name) {\n case 'comment':\n // Nested comment tag\n nested += 1;\n break;\n\n case 'endcomment': {\n nested -= 1;\n\n if (nested === 0) {\n // End of comment\n return;\n }\n\n break;\n }\n\n default:\n // Ignore other tags inside the comment\n break;\n }\n }\n }\n\n throw new Error(`tag ${tagToken.getText()} not closed`);\n }\n\n render() {}\n };\n}\n", "import { Hash, Tag } from 'liquidjs';\nimport { assign } from 'lodash-es';\nimport HashSwell from '../hash';\n\nimport type {\n Liquid,\n Context,\n Emitter,\n TagToken,\n TopLevelToken,\n} from 'liquidjs';\nimport type { QuotedToken } from 'liquidjs/dist/tokens';\nimport type { TagClass, Template } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\nimport { isObject } from '@/utils';\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class ContentForTag extends Tag {\n name: string;\n\n private hash: Hash;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n ) {\n super(token, remainTokens, liquid);\n\n const tokenizer = token.tokenizer;\n\n this.name = (tokenizer.readValue() as QuotedToken)?.content;\n this.hash = new HashSwell(tokenizer.remaining());\n }\n\n *render(ctx: Context, emitter: Emitter): Generator<unknown, void, unknown> {\n const section = yield ctx._get(['section']);\n const block = yield ctx._get(['block']);\n const hash = yield this.hash.render(ctx);\n const blocks = this.getBlocks(section, block, hash);\n\n for (const block of blocks) {\n if (!isObject(block) || typeof block.type !== 'string') {\n continue;\n }\n\n const blockPath = (yield liquidSwell.getThemeBlockPath(\n block.type,\n )) as string;\n\n if (!blockPath) {\n continue;\n }\n\n const childCtx = ctx.spawn();\n const scope = childCtx.bottom() as Record<string, unknown>;\n\n assign(scope, { section });\n assign(scope, { block });\n assign(scope, hash);\n\n const templates = (yield this.liquid._parseFile(\n blockPath,\n childCtx.sync,\n )) as Template[];\n\n yield this.liquid.renderer.renderTemplates(\n templates,\n childCtx,\n emitter,\n );\n }\n }\n\n getBlocks(section: unknown, block: unknown, hash: unknown): unknown[] {\n const blockConfigs = this.getBlockConfigs(section, block);\n\n if (!isObject(hash) || !hash.type) {\n return blockConfigs;\n }\n\n const blockConfig = blockConfigs.find(\n (blockConfig) =>\n isObject(blockConfig) && blockConfig.type === hash.type,\n );\n\n return blockConfig ? [blockConfig] : [];\n }\n\n getBlockConfigs(section: unknown, block: unknown): unknown[] {\n if (isObject(block) && block.blocks) {\n return Object.values(block.blocks);\n }\n\n if (isObject(section) && Array.isArray(section.blocks)) {\n return section.blocks;\n }\n\n return [];\n }\n };\n}\n", "import { set } from 'lodash-es';\nimport { Hash, Context, Tokenizer, evalToken } from 'liquidjs';\nimport TokenizerSwell from './tokienizer';\n\nexport default class HashSwell extends Hash {\n constructor(input: string | Tokenizer, jekyllStyle?: boolean | string) {\n super(input, jekyllStyle);\n\n const tokenizer =\n input instanceof Tokenizer ? input : new TokenizerSwell(input, {});\n\n for (const hash of tokenizer.readHashes(jekyllStyle)) {\n this.hash[hash.name.content] = hash.value;\n }\n }\n\n *render(ctx: Context): Generator<unknown, Record<string, unknown>, unknown> {\n const hash: Record<string, unknown> = {};\n\n for (const key of Object.keys(this.hash)) {\n const token = this.hash[key];\n\n if (token !== undefined) {\n const value = yield evalToken(token, ctx);\n\n set(hash, key, value);\n }\n }\n\n return hash;\n }\n}\n", "import { Tokenizer } from 'liquidjs';\nimport { IdentifierToken } from './tokens';\n\nconst isNumber = (c: string) => c >= '0' && c <= '9';\n\nconst isCharacter = (c: string) =>\n (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n\nconst isWord = (c: string) =>\n '_-?'.includes(c) || isCharacter(c) || isNumber(c);\n\nexport default class TokenizerSwell extends Tokenizer {\n readIdentifier(): IdentifierToken {\n this.skipBlank();\n const begin = this.p;\n\n while (!this.end()) {\n const char = this.peek();\n\n if (isWord(char) || char === '.') {\n this.p++;\n } else {\n break;\n }\n }\n\n return new IdentifierToken(this.input, begin, this.p, this.file);\n }\n}\n", "import { Token, TokenKind } from 'liquidjs';\n\nexport default class IdentifierToken extends Token {\n public content: string;\n constructor(\n public input: string,\n public begin: number,\n public end: number,\n public file?: string,\n ) {\n super(TokenKind.Word, input, begin, end, file);\n this.content = this.getText();\n }\n}\n", "import { Tag } from 'liquidjs';\nimport type {\n Liquid,\n TagToken,\n TopLevelToken,\n Parser,\n ParseStream,\n} from 'liquidjs';\n\nimport type { TagClass } from 'liquidjs/dist/template';\n\nexport default function bind(): TagClass {\n return class DocTag extends Tag {\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n\n const stream: ParseStream = parser\n .parseStream(remainTokens)\n .on<TagToken>('tag:enddoc', () => {\n stream.stop();\n });\n\n stream.start();\n }\n\n render() {}\n };\n}\n", "import { evalToken, ForTag as LiquidForTag } from 'liquidjs';\n\nimport { ForloopDrop, resolveEnumerable, isObject } from '../utils';\n\nimport type { LiquidSwell } from '..';\nimport type { Context, Emitter, Scope } from 'liquidjs';\nimport type { TagClass, Template } from 'liquidjs/dist/template';\n\nconst MODIFIERS = Object.freeze(['offset', 'limit', 'reversed']);\n\n// Adapted from liquidjs/src/tags/for.ts\n// 1) to use our own toEnumerable implementation for compatibility\n\nexport default function bind(_liquidSwell: LiquidSwell): TagClass {\n return class ForTag extends LiquidForTag {\n *render(\n ctx: Context,\n emitter: Emitter,\n ): Generator<unknown, void | string, Template[]> {\n const r = this.liquid.renderer;\n\n let collection: unknown[] = yield evalToken(this.collection, ctx);\n collection = yield resolveEnumerable(collection);\n\n if (!collection.length) {\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\n return;\n }\n\n const continueKey =\n 'continue-' + this.variable + '-' + this.collection.getText();\n\n ctx.push({\n continue: ctx.getRegister(continueKey) as number | undefined,\n } as Scope);\n\n const hash = (yield this.hash.render(ctx)) as unknown as Record<\n string,\n unknown\n >;\n\n ctx.pop();\n\n const modifiers = this.liquid.options.orderedFilterParameters\n ? Object.keys(hash).filter((x) => MODIFIERS.includes(x))\n : MODIFIERS.filter((x) => hash[x] !== undefined);\n\n collection = modifiers.reduce((collection: unknown[], modifier) => {\n switch (modifier) {\n case 'offset':\n return offset(collection, hash['offset'] as number);\n\n case 'limit':\n return limit(collection, hash['limit'] as number);\n\n case 'reversed':\n return reversed(collection);\n\n default:\n return collection;\n }\n }, collection);\n\n // Maximum 50 iterations\n // https://shopify.dev/docs/api/liquid/tags/for\n const length = Math.min(collection.length, 50);\n const parent = ctx.getRegister('parentloop') as ForloopDrop | undefined;\n\n ctx.setRegister(continueKey, ((hash['offset'] as number) || 0) + length);\n\n const forloop = new ForloopDrop(\n length,\n this.collection.getText(),\n this.variable,\n parent,\n );\n\n const scope: { forloop: ForloopDrop; [key: string]: unknown } = {\n forloop,\n };\n\n ctx.push(scope);\n ctx.setRegister('parentloop', forloop);\n\n for (let i = 0; i < length; ++i) {\n const value = collection[i];\n\n if (isObject(value)) {\n value.index = i;\n }\n\n scope[this.variable] = value;\n ctx.continueCalled = ctx.breakCalled = false;\n yield r.renderTemplates(this.templates, ctx, emitter);\n if (ctx.breakCalled) break;\n scope.forloop.next();\n }\n\n ctx.continueCalled = ctx.breakCalled = false;\n ctx.setRegister('parentloop', parent);\n ctx.pop();\n }\n };\n}\n\nfunction reversed<T>(arr: T[]): T[] {\n return [...arr].reverse();\n}\n\nfunction offset<T>(arr: T[], count: number): T[] {\n return arr.slice(count);\n}\n\nfunction limit<T>(arr: T[], count: number): T[] {\n return arr.slice(0, count);\n}\n", "import { Tag, Hash, TypeGuards, evalToken } from 'liquidjs';\n\nimport { ThemeForm } from '../form';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Liquid,\n TagToken,\n Parser,\n Context,\n Emitter,\n Template,\n TopLevelToken,\n ValueToken,\n} from 'liquidjs';\nimport type { QuotedToken } from 'liquidjs/dist/tokens';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\nimport type { ThemeFormConfig } from 'types/swell';\n\n// {% form 'form_type' %}\n// {% form 'form_type', param %}\n// {% form 'form_type', return_to: 'url %}\n\nconst IGNORED_SHOPIFY_FORMS = Object.freeze(['new_comment', 'guest_login']);\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class FormTag extends Tag {\n private formType: string;\n private formConfig?: ThemeFormConfig;\n private templates: Template[];\n private hash: Hash;\n private arg?: ValueToken;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n\n const { tokenizer } = token;\n this.formType = (tokenizer.readValue() as QuotedToken)?.content;\n this.formConfig = liquidSwell.theme.getFormConfig(this.formType);\n\n this.arg = tokenizer.readValue();\n this.templates = [];\n this.hash = new Hash(this.tokenizer.remaining());\n\n while (remainTokens.length > 0) {\n const token = remainTokens.shift() as TopLevelToken;\n\n if (TypeGuards.isTagToken(token) && token.name === 'endform') {\n return;\n }\n\n this.templates.push(parser.parseToken(token, remainTokens));\n }\n\n if (!this.formConfig && !IGNORED_SHOPIFY_FORMS.includes(this.formType)) {\n return;\n }\n\n throw new Error(`tag ${token.getText()} not closed`);\n }\n\n *render(ctx: Context, emitter: Emitter): TagRenderReturn {\n if (!this.formConfig) {\n emitter.write(\n `<!-- form '${this.formType}' not found in theme configuration -->`,\n );\n return;\n }\n\n const r = this.liquid.renderer;\n const arg: unknown = yield evalToken(this.arg, ctx);\n const hash = yield this.hash.render(ctx);\n\n const scope = ctx.getAll();\n\n const attrs =\n ' ' +\n Object.entries({ id: `${this.formConfig.id}_form`, ...hash })\n .reduce((acc: string[], [key, value]: [string, unknown]) => {\n if (value !== true) {\n // true represents the form type\n acc.push(`${key}=\"${String(value)}\"`);\n }\n\n return acc;\n }, [])\n .join(' ');\n\n const exForm = liquidSwell.theme.formData[this.formConfig.id];\n const form = exForm || new ThemeForm(this.formConfig.id);\n\n let compatibilityHtml = '';\n\n if (liquidSwell.theme.shopifyCompatibility) {\n Object.assign(\n form,\n liquidSwell.theme.shopifyCompatibility.getFormData(form),\n );\n\n const compatibilityOutput =\n yield liquidSwell.theme.shopifyCompatibility.getAdaptedFormClientHtml(\n this.formConfig.id,\n scope,\n arg,\n );\n\n if (compatibilityOutput) {\n compatibilityHtml =\n yield liquidSwell.renderTemplateString(compatibilityOutput);\n }\n\n const compatibilityParams =\n yield liquidSwell.theme.shopifyCompatibility.getAdaptedFormClientParams(\n this.formConfig.id,\n scope,\n arg,\n );\n if (compatibilityParams) {\n form.setParams(compatibilityParams);\n }\n }\n\n ctx.push({ form: { ...(arg || undefined), ...form } });\n\n const html = yield r.renderTemplates(this.templates, ctx);\n\n // TODO: params and return_to\n // return_to should be used by default by the server if the middleware doesn't explicitly redirect\n\n const paramInputs: string[] = Array.isArray(this.formConfig.params)\n ? yield Promise.all(\n this.formConfig.params.map(async (param) => {\n const value = await liquidSwell.renderTemplateString(\n param.value,\n { value: arg },\n );\n\n return `<input type=\"hidden\" name=\"${param.name}\" value=\"${value}\" />`;\n }),\n )\n : [];\n\n const returnTo =\n hash.return_to || liquidSwell.theme.globals.request?.path;\n\n emitter.write(`\n <form action=\"${\n this.formConfig.url\n }\" method=\"post\" accept-charset=\"UTF-8\" enctype=\"multipart/form-data\"${attrs}>\n <input type=\"hidden\" name=\"form_type\" value=\"${this.formConfig.id}\" />\n ${paramInputs.join('')}\n ${\n returnTo\n ? `<input type=\"hidden\" name=\"return_to\" value=\"${returnTo}\" />`\n : ''\n }\n ${compatibilityHtml}\n ${html}\n </form>\n `);\n\n ctx.pop();\n }\n };\n}\n", "import {\n assert,\n Liquid,\n Tag,\n Value,\n type Emitter,\n isTruthy,\n TagToken,\n type TopLevelToken,\n Context,\n type Template,\n Parser,\n type Arguments,\n} from 'liquidjs';\nimport type { TagClass } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\nexport default function bind(_liquidSwell: LiquidSwell): TagClass {\n return class IfTag extends Tag {\n branches: { value: Value; templates: Template[] }[] = [];\n elseTemplates: Template[] | undefined;\n\n constructor(\n tagToken: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(tagToken, remainTokens, liquid);\n let p: Template[] = [];\n parser\n .parseStream(remainTokens)\n .on('start', () =>\n this.branches.push({\n value: new Value(\n tagToken.tokenizer.readFilteredValue(),\n this.liquid,\n ),\n templates: (p = []),\n }),\n )\n .on('tag:elsif', (token: TagToken) => {\n assert(!this.elseTemplates, 'unexpected elsif after else');\n this.branches.push({\n value: new Value(token.tokenizer.readFilteredValue(), this.liquid),\n templates: (p = []),\n });\n })\n .on<TagToken>('tag:else', (tag) => {\n if (tag.args.length > 0) {\n this.branches.push({\n value: new Value(tag.tokenizer.readFilteredValue(), this.liquid),\n templates: (p = []),\n });\n } else {\n p = [];\n this.elseTemplates = p;\n }\n })\n .on<TagToken>('tag:endif', function (tag) {\n assertEmpty(tag.args);\n this.stop();\n })\n .on('template', (tpl: Template) => p.push(tpl))\n .on('end', () => {\n throw new Error(`tag ${tagToken.getText()} not closed`);\n })\n .start();\n }\n\n *render(ctx: Context, emitter: Emitter): Generator<unknown, void, string> {\n const r = this.liquid.renderer;\n\n for (const { value, templates } of this.branches) {\n const v = yield value.value(ctx, ctx.opts.lenientIf);\n if (isTruthy(v, ctx)) {\n yield r.renderTemplates(templates, ctx, emitter);\n return;\n }\n }\n yield r.renderTemplates(this.elseTemplates || [], ctx, emitter);\n }\n\n // eslint-disable-next-line require-yield\n public *children(): Generator<unknown, Template[]> {\n const templates = this.branches.flatMap((b) => b.templates);\n if (this.elseTemplates) {\n templates.push(...this.elseTemplates);\n }\n return templates;\n }\n\n public arguments(): Arguments {\n return this.branches.map((b) => b.value);\n }\n };\n}\n\nexport function assertEmpty<T>(\n predicate: T | null | undefined,\n message = `unexpected ${JSON.stringify(predicate)}`,\n): void {\n assert(!predicate, message);\n}\n", "import { Tag, TypeGuards } from 'liquidjs';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Liquid,\n TagToken,\n Parser,\n Context,\n Emitter,\n Template,\n TopLevelToken,\n} from 'liquidjs';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\n\n// {% javascript %}\n\nexport default function bind(_liquidSwell: LiquidSwell): TagClass {\n return class JavascriptTag extends Tag {\n private templates: Template[];\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n\n this.templates = [];\n\n while (remainTokens.length > 0) {\n const token = remainTokens.shift() as TopLevelToken;\n\n if (TypeGuards.isTagToken(token) && token.name === 'endjavascript') {\n return;\n }\n\n this.templates.push(parser.parseToken(token, remainTokens));\n }\n\n throw new Error(`tag ${token.getText()} not closed`);\n }\n\n *render(ctx: Context, emitter: Emitter): TagRenderReturn {\n const r = this.liquid.renderer;\n const javascript = yield r.renderTemplates(this.templates, ctx);\n\n emitter.write(\n `<script type=\"text/javascript\" data-swell>${javascript}</script>`,\n );\n }\n };\n}\n", "import { Tag } from 'liquidjs';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Liquid,\n TagToken,\n Context,\n Parser,\n TopLevelToken,\n} from 'liquidjs';\nimport type { QuotedToken } from 'liquidjs/dist/tokens';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\n\n// {% layout 'name' %}\n// {% layout none %}\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class LayoutTag extends Tag {\n private fileName: string;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n _parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n const { tokenizer } = token;\n this.fileName = (tokenizer.readValue() as QuotedToken)?.content;\n }\n\n // eslint-disable-next-line require-yield\n *render(_ctx: Context): TagRenderReturn {\n // Layout is actually rendered separately\n liquidSwell.layoutName = this.fileName;\n return;\n }\n };\n}\n", "import { Tag, Hash, evalToken } from 'liquidjs';\n\nimport {\n SwellStorefrontCollection,\n SwellStorefrontPagination,\n} from '../../resources';\n\nimport ShopifyPaginate from '@/compatibility/shopify-objects/paginate';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Liquid,\n TagToken,\n Parser,\n Context,\n ParseStream,\n Emitter,\n Template,\n ValueToken,\n TopLevelToken,\n} from 'liquidjs';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\n\n/*\n {% paginate array by page_size %}\n {% for item in array %}\n forloop_content\n {% endfor %}\n {% endpaginate %}\n*/\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class PaginateTag extends Tag {\n private collection: ValueToken;\n private pageSize: ValueToken | undefined;\n private templates: Template[];\n private hash: Hash;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n\n const collection = this.tokenizer.readValue();\n const byStr = this.tokenizer.readIdentifier();\n this.pageSize = this.tokenizer.readValue();\n if (byStr.content !== 'by' || !collection) {\n throw new Error(`illegal tag: ${token.getText()}`);\n }\n\n this.templates = [];\n this.collection = collection;\n this.hash = new Hash(this.tokenizer.remaining());\n\n const stream: ParseStream = parser\n .parseStream(remainTokens)\n .on('tag:endpaginate', () => stream.stop())\n .on('template', (tpl: Template) => {\n this.templates.push(tpl);\n })\n .on('end', () => {\n throw new Error(`tag ${token.getText()} not closed`);\n });\n\n stream.start();\n }\n\n *render(ctx: Context, emitter: Emitter): TagRenderReturn {\n const r = this.liquid.renderer;\n\n const collection = yield evalToken(this.collection, ctx);\n const pageSize = Number(yield evalToken(this.pageSize, ctx));\n const hash = yield this.hash.render(ctx);\n\n if (\n !Number.isNaN(pageSize) &&\n collection instanceof SwellStorefrontCollection &&\n collection.limit !== pageSize\n ) {\n yield collection._get({\n limit: pageSize,\n window: hash.window_size || undefined,\n });\n }\n\n if (collection) {\n const paginate = new SwellStorefrontPagination(collection);\n if (liquidSwell.theme.shopifyCompatibility) {\n paginate.setCompatibilityProps(\n ShopifyPaginate(liquidSwell.theme.shopifyCompatibility, paginate),\n );\n }\n\n ctx.push({ paginate });\n }\n\n yield r.renderTemplates(this.templates, ctx, emitter);\n\n if (collection) {\n ctx.pop();\n }\n }\n };\n}\n", "import { assign } from 'lodash-es';\nimport { assert, evalToken, RenderTag as LiquidRenderTag } from 'liquidjs';\n\nimport { ForloopDrop, resolveEnumerable } from '../utils';\n\nimport type { LiquidSwell } from '..';\nimport type { Context, Emitter, Liquid, ValueToken } from 'liquidjs';\nimport type { Hash, TagClass, Template } from 'liquidjs/dist/template';\nimport type { ParsedFileName } from 'liquidjs/dist/tags/render';\n\n// {% render 'component', variable: value %}\n// {% render 'component' for array as item %}\n// {% render 'component' with object as name %}\n// Preferred over { % include % } for rendering components\n\ninterface TokenAlias {\n value: ValueToken;\n alias: string;\n}\n\ninterface LiquidRenderTagProps {\n file: ParsedFileName;\n currentFile: string;\n hash: Hash;\n with?: TokenAlias;\n for?: TokenAlias;\n}\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class RenderTag extends LiquidRenderTag {\n *render(\n this: LiquidRenderTag,\n ctx: Context,\n emitter: Emitter,\n ): Generator<unknown, void, unknown> {\n const self = this as unknown as LiquidRenderTagProps;\n const { liquid } = this;\n const { hash } = self;\n\n const filename = (yield renderFilePath(\n self['file'],\n ctx,\n liquid,\n )) as string;\n assert(filename, () => `illegal file path \"${filename}\"`);\n\n const configPath = (yield liquidSwell.getComponentPath(\n filename,\n )) as string;\n\n const childCtx = ctx.spawn();\n const scope = childCtx.bottom() as Record<string, unknown>;\n\n // Append parent scope\n assign(scope, ctx.bottom());\n\n // Append section from parent scope if present\n const parentSection = yield ctx._get(['section']);\n if (parentSection) assign(scope, { section: parentSection });\n\n // Append block from parent scope if present\n const parentBlock = yield ctx._get(['block']);\n if (parentBlock) assign(scope, { block: parentBlock });\n\n // Append hash\n assign(scope, yield hash.render(ctx));\n\n if (self['with']) {\n const { value, alias } = self['with'];\n const aliasName = alias || filename;\n scope[aliasName] = yield evalToken(value, ctx);\n }\n\n if (self['for']) {\n const { value, alias } = self['for'];\n let collection: any = yield evalToken(value, ctx);\n collection = yield resolveEnumerable(collection);\n\n scope['forloop'] = new ForloopDrop(\n collection.length,\n value.getText(),\n alias,\n );\n\n for (const item of collection) {\n scope[alias] = item;\n\n const templates = (yield liquid._parseFile(\n configPath,\n childCtx.sync,\n undefined,\n self['currentFile'],\n )) as Template[];\n\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\n\n (scope['forloop'] as ForloopDrop).next();\n }\n } else {\n const templates = (yield liquid._parseFile(\n configPath,\n childCtx.sync,\n undefined,\n self['currentFile'],\n )) as Template[];\n\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\n }\n }\n };\n}\n\nexport function* renderFilePath(\n file: ParsedFileName,\n ctx: Context,\n liquid: Liquid,\n): IterableIterator<unknown> {\n switch (typeof file) {\n case 'string':\n return file;\n\n case 'object': {\n if (Array.isArray(file)) {\n return liquid.renderer.renderTemplates(file, ctx);\n }\n\n break;\n }\n\n default:\n break;\n }\n\n return yield evalToken(file, ctx);\n}\n", "import { Tag } from 'liquidjs';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Liquid,\n TagToken,\n Context,\n Parser,\n TopLevelToken,\n Emitter,\n} from 'liquidjs';\nimport type { QuotedToken } from 'liquidjs/dist/tokens';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\nimport type {\n SwellData,\n SwellThemeConfig,\n ThemeSectionSchema,\n} from '../../../types/swell';\n\n// {% section 'name' %}\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class SectionTag extends Tag {\n private fileName: string;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n _parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n const { tokenizer } = token;\n this.fileName = (tokenizer.readValue() as QuotedToken)?.content;\n }\n\n *render(_ctx: Context, emitter: Emitter): TagRenderReturn {\n const filePath = (yield liquidSwell.getSectionPath(\n this.fileName,\n )) as string;\n\n const themeConfig = (yield liquidSwell.getThemeConfig(\n filePath,\n )) as SwellThemeConfig | null;\n\n if (!themeConfig) {\n console.error(`Section not found: ${filePath}`);\n return;\n }\n\n let schema: ThemeSectionSchema | undefined;\n let settings: SwellData | undefined;\n\n const output = (yield liquidSwell.theme\n .getTemplateSchema(themeConfig)\n .then((sectionSchema) => {\n if (!sectionSchema) {\n console.error(`Section schema not found: ${filePath}`);\n return '';\n }\n\n schema = sectionSchema;\n\n const defaultSettings =\n liquidSwell.theme.resolveStaticSectionSettings(sectionSchema);\n\n settings = defaultSettings;\n\n return liquidSwell.renderTemplate(themeConfig, {\n section: {\n id: this.fileName,\n settings: { ...defaultSettings, blocks: undefined },\n blocks: defaultSettings.blocks,\n location: 'static',\n },\n });\n })) as string;\n\n if (output && schema && settings) {\n const tag = schema.tag || 'div';\n\n const sectionClassName = liquidSwell.theme.getSectionClassName();\n const sectionIdPrefix = liquidSwell.theme.getSectionIdPrefix();\n const id = `${sectionIdPrefix}-${settings.id || this.fileName}`;\n\n emitter.write(\n `<${tag} id=\"${id}\" class=\"${sectionClassName} ${schema.class || ''}\">${output}</${tag}>`,\n );\n\n // TODO: if we decide to support static sections\n // yield liquidSwell.theme.addPageSection(this.fileName, false);\n }\n }\n };\n}\n", "import { Tag } from 'liquidjs';\nimport JSON5 from 'json5';\n\nimport type { LiquidSwell } from '..';\nimport type {\n SwellThemeConfig,\n ThemeSectionConfig,\n ThemeSectionGroup,\n} from 'types/swell';\nimport type {\n Liquid,\n TagToken,\n Context,\n Parser,\n TopLevelToken,\n Emitter,\n} from 'liquidjs';\nimport type { QuotedToken } from 'liquidjs/dist/tokens';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\n\n// {% sections 'section-group' %}\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class SectionsTag extends Tag {\n private fileName: string;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n _parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n const { tokenizer } = token;\n this.fileName = (tokenizer.readValue() as QuotedToken)?.content;\n }\n\n *render(_ctx: Context, emitter: Emitter): TagRenderReturn {\n const filePath = (yield liquidSwell.getSectionGroupPath(\n this.fileName,\n )) as string;\n\n const themeConfig = (yield liquidSwell.getThemeConfig(\n filePath,\n )) as SwellThemeConfig;\n\n try {\n const sectionGroup = JSON5.parse<ThemeSectionGroup>(\n themeConfig.file_data,\n );\n\n const sectionConfigs = (yield liquidSwell.renderPageSections(\n sectionGroup,\n )) as ThemeSectionConfig[];\n\n const sectionClassName = liquidSwell.theme.getSectionClassName();\n const sectionIdPrefix = liquidSwell.theme.getSectionIdPrefix();\n\n emitter.write(\n `<div id=\"swell-section-group__${this.fileName}\">${sectionConfigs\n .map((section) => {\n const tag = section.tag || 'div';\n\n const id = `${sectionIdPrefix}-sections--${themeConfig.hash}__${section.id}`;\n\n const className = `${sectionClassName} ${sectionClassName}-group-${this.fileName} section-${section.id}`;\n\n return `<${tag} id=\"${id}\" class=\"${className} ${section.class || ''}\">${\n section.output\n }</${tag}>`;\n })\n .join('')}</div>`,\n );\n\n yield liquidSwell.theme.addPageSection(this.fileName, true);\n } catch (err) {\n // noop\n console.warn(err);\n }\n }\n };\n}\n", "import { Tag, TypeGuards } from 'liquidjs';\nimport { md5 } from '@/utils';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Liquid,\n TagToken,\n Context,\n Parser,\n Template,\n TopLevelToken,\n Emitter,\n} from 'liquidjs';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\n\n// {% style %} div: { color: {{ settings.color }}; } {% endstyle %}\n\nexport default function bind(_liquidSwell: LiquidSwell): TagClass {\n return class StyleTag extends Tag {\n private templates: Template[];\n private hash: string;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n\n this.templates = [];\n const tagBegin = token.begin;\n\n while (remainTokens.length > 0) {\n const token = remainTokens.shift() as TopLevelToken;\n\n if (TypeGuards.isTagToken(token) && token.name === 'endstyle') {\n this.hash = md5(token.input.slice(tagBegin, token.end));\n return;\n }\n\n this.templates.push(parser.parseToken(token, remainTokens));\n }\n\n throw new Error(`tag ${token.getText()} not closed`);\n }\n\n *render(ctx: Context, emitter: Emitter): TagRenderReturn {\n const r = this.liquid.renderer;\n const css = yield r.renderTemplates(this.templates, ctx);\n // add section id to hash if presents\n const contextEnvironments = ctx?.environments as {\n section: { id: string };\n };\n const styleSectionId = contextEnvironments?.section?.id || '';\n let hash = this.hash;\n if (styleSectionId) {\n hash = md5(`${hash}${styleSectionId}`);\n }\n\n // This is used to update CSS in real-time from the theme editor without a page refresh\n emitter.write(`<style data-swell data-hash=\"${hash}\">${css}</style>`);\n }\n };\n}\n", "import { Tag, TypeGuards } from 'liquidjs';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Liquid,\n TagToken,\n Parser,\n Context,\n Emitter,\n Template,\n TopLevelToken,\n} from 'liquidjs';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\n\n// {% stylesheet %}\n\nexport default function bind(_liquidSwell: LiquidSwell): TagClass {\n return class StyleSheetTag extends Tag {\n private templates: Template[];\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n\n this.templates = [];\n\n while (remainTokens.length > 0) {\n const token = remainTokens.shift() as TopLevelToken;\n\n if (TypeGuards.isTagToken(token) && token.name === 'endstylesheet') {\n return;\n }\n\n this.templates.push(parser.parseToken(token, remainTokens));\n }\n\n throw new Error(`tag ${token.getText()} not closed`);\n }\n\n *render(ctx: Context, emitter: Emitter): TagRenderReturn {\n const r = this.liquid.renderer;\n const stylesheet = yield r.renderTemplates(this.templates, ctx);\n\n emitter.write(`<style data-swell>${stylesheet}</style>`);\n }\n };\n}\n", "import { assert, evalToken, IncludeTag as LiquidIncludeTag } from 'liquidjs';\n\nimport { renderFilePath } from '../render';\n\nimport type { LiquidSwell } from '../..';\nimport type { TagClass } from 'liquidjs/dist/template';\nimport type { Context, Scope, Emitter } from 'liquidjs';\n\n// Deprecated in Shopify, supported for backward compatibility\n// Replaced by {% render %}\n\n// {% include 'component' %}\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class IncludeTag extends LiquidIncludeTag {\n *render(\n this: any,\n ctx: Context,\n emitter: Emitter,\n ): Generator<unknown, void, unknown> {\n const { hash } = this;\n\n const filepath = (yield renderFilePath(\n this['file'],\n ctx,\n this.liquid,\n )) as string;\n\n assert(filepath, () => `illegal file path \"${filepath}\"`);\n\n const saved = ctx.saveRegister('blocks', 'blockMode');\n ctx.setRegister('blocks', {});\n ctx.setRegister('blockMode', 0);\n\n const scope = (yield hash.render(ctx)) as Scope;\n\n if (this.withVar) {\n (scope as any)[filepath] = yield evalToken(this.withVar, ctx);\n }\n\n ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope);\n\n const output = yield liquidSwell\n .getComponentPath(filepath)\n .then((path) => liquidSwell.getThemeConfig(path))\n .then((themeConfig) => liquidSwell.renderTemplate(themeConfig, ctx));\n\n emitter.write(output);\n\n ctx.pop();\n ctx.restoreRegister(saved);\n }\n };\n}\n", "import { Tag } from 'liquidjs';\nimport JSON5 from 'json5';\n\nimport type { LiquidSwell } from '../..';\nimport type {\n Liquid,\n TagToken,\n Context,\n Parser,\n Emitter,\n Template,\n TopLevelToken,\n} from 'liquidjs';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\n\n// Swell prefers separate JSON files, but this is supported for backward compatibility\n\n// {% schema %}\n\nexport default function bind(liquidSwell: LiquidSwell): TagClass {\n return class SchemaTag extends Tag {\n private templates: Template[];\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n\n this.templates = [];\n\n parser\n .parseStream(remainTokens)\n .on('template', (tpl: Template) => {\n this.templates.push(tpl);\n })\n .on('tag:endschema', function () {\n this.stop();\n })\n .on('end', () => {\n throw new Error(`tag ${token.getText()} not closed`);\n })\n .start();\n }\n\n *render(ctx: Context, _emitter: Emitter): TagRenderReturn {\n const jsonOutput = yield this.liquid.renderer.renderTemplates(\n this.templates,\n ctx,\n );\n\n try {\n liquidSwell.lastSchema = undefined;\n\n if (typeof jsonOutput === 'string') {\n // Parse the JSON schema from the rendered {% schema %} tag\n liquidSwell.lastSchema = JSON5.parse(jsonOutput);\n\n // Replace any \"@theme\" in blocks with actual theme blocks\n expandThemeBlocks(liquidSwell);\n }\n } catch (err) {\n console.warn(err);\n liquidSwell.lastSchema = undefined;\n }\n\n // no output\n return;\n }\n };\n}\n\n/**\n * Replaces any \"@theme\" entries in section.blocks\n * with the actual theme block schemas from /blocks.\n */\nfunction expandThemeBlocks(liquidSwell: LiquidSwell) {\n const blocks = liquidSwell.lastSchema?.blocks;\n\n if (!Array.isArray(blocks)) {\n return;\n }\n\n for (let i = 0; i < blocks.length; i++) {\n if (blocks[i].type === '@theme') {\n blocks.splice(i, 1, ...liquidSwell.theme.getAllThemeBlockSchemas());\n }\n }\n}\n", "import { Tag } from 'liquidjs';\n\nimport type { LiquidSwell } from '..';\nimport type {\n Liquid,\n TagToken,\n Context,\n Parser,\n TopLevelToken,\n Emitter,\n} from 'liquidjs';\nimport type { TagClass, TagRenderReturn } from 'liquidjs/dist/template';\n\n// {% inline_editable setting: 'heading', value: block.settings.heading %}\n\nexport default function bind(_liquidSwell: LiquidSwell): TagClass {\n return class InlineEditableTag extends Tag {\n private key: string;\n private value: string;\n\n constructor(\n token: TagToken,\n remainTokens: TopLevelToken[],\n liquid: Liquid,\n _parser: Parser,\n ) {\n super(token, remainTokens, liquid);\n\n const args = token.args.split(',').map((arg) => arg.trim());\n const settingArg = args.find((arg) => arg.startsWith('setting:'));\n const valueArg = args.find((arg) => arg.startsWith('value:'));\n\n this.key = settingArg\n ? settingArg.split(':')[1].trim().replace(/['\"]/g, '')\n : args[0].split('.')[args[0].split('.').length - 1];\n\n this.value = valueArg ? valueArg.split(':')[1].trim() : args[0];\n }\n\n *render(ctx: Context, emitter: Emitter): TagRenderReturn {\n let renderedValue = yield this.liquid.evalValue(this.value, ctx);\n\n if (renderedValue.value) {\n renderedValue = renderedValue.value;\n }\n\n emitter.write(\n `<span data-swell-inline-editable=\"${this.key}\">${renderedValue}</span>`,\n );\n }\n };\n}\n", "import type { LiquidSwell } from '..';\n\nimport assignTag from './assign';\nimport caseTag from './case';\nimport comment from './comment';\nimport contentFor from './content_for';\nimport doc from './doc';\nimport forTag from './for';\nimport form from './form';\nimport ifTag from './if';\nimport javascript from './javascript';\nimport layout from './layout';\nimport paginate from './paginate';\nimport render from './render';\nimport section from './section';\nimport sections from './sections';\nimport style from './style';\nimport stylesheet from './stylesheet';\n\n// Shopify compatibility only\nimport include from './shopify/include';\nimport schema from './shopify/schema';\n\n// Swell only\nimport inline_editable from './inline_editable';\n\nexport const tags = {\n assign: assignTag,\n case: caseTag,\n comment,\n content_for: contentFor,\n doc,\n for: forTag,\n form,\n if: ifTag,\n javascript,\n layout,\n paginate,\n render,\n section,\n sections,\n style,\n\n // Shopify compatibility only\n include,\n schema,\n stylesheet,\n\n // Swell only\n inline_editable,\n};\n\nexport function bindTags(liquidSwell: LiquidSwell): void {\n Object.entries(tags).forEach(([tag, bind]) =>\n liquidSwell.registerTag(tag, bind(liquidSwell)),\n );\n}\n", "import type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ 'asset.css' | asset_url }}\n\nexport default function bind(liquidSwell: LiquidSwell): FilterHandler {\n return function filterAssetUrl(assetPath: string): Promise<string> {\n return liquidSwell.getAssetUrl(assetPath).then((url) => url || '');\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#E800B0' | brightness_difference: '#FECEE9' }} => 134\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color1: string | ThemeColor, color2: string | ThemeColor): number => {\n return ThemeColor.get(color1).brightnessDifference(ThemeColor.get(color2));\n };\n}\n", "import { LiquidSwell, ThemeColor } from \"..\";\n\n// {{ '#EA5AB9' | color_brightness }} => 143.89\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor): number => {\n return ThemeColor.get(color).brightness();\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#E800B0' | color_contrast: '#D9D8FF' }} => 3.0\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color1: string | ThemeColor, color2: string | ThemeColor): string => {\n return ThemeColor.get(color1).contrast(ThemeColor.get(color2));\n };\n}\n", "import { LiquidSwell, ThemeColor } from \"..\";\n\n// {{ '#EA5AB9' | color_darken: 30 }} => #98136b\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor, percent: number): string => {\n return ThemeColor.get(color).darken(percent);\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#EA5AB9' | color_desaturate: 30 }} => #d470b2\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor, value: number): string => {\n return ThemeColor.get(color).desaturate(value);\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#720955' | color_difference: '#FFF3F9' }} => 539\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color1: string | ThemeColor, color2: string | ThemeColor): number => {\n return ThemeColor.get(color1).difference(ThemeColor.get(color2));\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#EA5AB9' | color_extract: 'red' }} => 234\n\ntype ColorField =\n | 'red'\n | 'green'\n | 'blue'\n | 'alpha'\n | 'hue'\n | 'saturation'\n | 'lightness';\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor, field: ColorField): string => {\n return ThemeColor.get(color).extract(field);\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#EA5AB9' | color_lighten: 30 }} => #f5b0de\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor, percent: number): string => {\n return ThemeColor.get(color).lighten(percent);\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#E800B0' | color_mix: '#00936F', 50 }} => #744a90\n// {{ 'rgba(232, 0, 176, 0.75)' | color_mix: '#00936F', 50 }} => rgba(116, 74, 144, 0.875)\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (\n color1: string | ThemeColor,\n color2: string | ThemeColor,\n ratio: number,\n ): string => {\n return ThemeColor.get(color1).mix(ThemeColor.get(color2), ratio);\n };\n}\n", "import { type LiquidSwell, ThemeColor } from '..';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\n\n// {{ '#EA5AB9' | color_modify: 'red', 255 }} => #ff5ab9\n// {{ '#EA5AB9' | color_modify: 'alpha', 0.85 }} => rgba(234, 90, 185, 0.85)\n\ntype ColorField =\n | 'red'\n | 'green'\n | 'blue'\n | 'alpha'\n | 'hue'\n | 'saturation'\n | 'lightness';\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function filterColorModify(\n color: string | ThemeColor,\n field: ColorField,\n value: unknown,\n ): string {\n return ThemeColor.get(color).modify(field, Number(value) || 0);\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#EA5AB9' | color_saturate: 30 }} => #ff44c0\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor, value: number): string => {\n return ThemeColor.get(color).saturate(value);\n };\n}\n", "import { LiquidSwell, ThemeColor } from \"..\";\n\n// {{ 'rgb(234, 90, 185)' | color_to_hex }} => #ea5ab9\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor): string => {\n return ThemeColor.get(color).hex();\n };\n}\n", "import { LiquidSwell, ThemeColor } from '..';\n\n// {{ '#EA5AB9' | color_to_hsl }} => hsl(320, 77%, 64%)\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor): string => {\n return ThemeColor.get(color).hsl();\n };\n}\n", "import { LiquidSwell, ThemeColor } from \"..\";\n\n// Note this also supports Alpha channel, but Shopify does not\n// {{ '#EA5AB9' | color_to_rgb }} => rgb(234, 90, 185)\n// {{ '#EA5AB9' | color_to_rgb: 0.5 }} => rgba(234, 90, 185, 0.5)\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor, alpha?: number): string => {\n return alpha !== undefined\n ? ThemeColor.get(color).rgba(alpha)\n : ThemeColor.get(color).rgb();\n };\n}\n", "import strftime from 'strftime';\nimport { LiquidSwell } from '..';\nimport { paramsToProps } from '../utils';\n\n// {{ '2024-10-01T12:00:00.000Z' | date: '%B %d, %Y' }} => October 01, 2024\n// {{ '2024-10-01T12:00:00.000Z' | date: format: '%B %d, %Y' }} => October 01, 2024\n// {{ '2024-10-01T12:00:00.000Z' | date: 'date_at_time' }} => Oct 01, 2024\n// {{ '2024-10-01T12:00:00.000Z' | date: format: 'date_at_time' }} => Oct 01, 2024\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (dateValue: string, ...params: any[]): string => {\n const date = ensureDate(dateValue);\n const { format } = getDateFilterParams(params);\n\n return applyDateFormat(format as string, date);\n };\n}\n\nexport function ensureDate(dateValue: string | Date) {\n if (dateValue === 'now' || dateValue === 'today') {\n return new Date();\n }\n if (dateValue instanceof Date) {\n return dateValue;\n }\n if (typeof dateValue === 'string') {\n return new Date(dateValue);\n }\n\n return new Date();\n}\n\nexport function getDateFilterParams(params: any[]) {\n // params = ['%B %d, %Y']\n if (typeof params[0] === 'string') {\n return { format: params[0] };\n }\n\n // params = [['format', '%B %d, %Y']]\n return paramsToProps(params);\n}\n\nexport function applyDateFormat(type: string, date: Date): string {\n if (isCustomDateFormat(type)) {\n return applyStrftimeFormat(type, date);\n }\n\n switch (type) {\n case 'abbreviated_date':\n // Apr 3, 2024\n return strftime('%b %d, %Y', date);\n case 'basic':\n // 04/03/2024\n return strftime('%m/%d/%Y', date);\n case 'date':\n // April 3, 2024\n return strftime('%B %d, %Y', date);\n case 'date_at_time':\n // April 3, 2024 at 12:00 pm\n return `${strftime('%B %d, %Y', date)} at ${strftime('%I:%M %P', date)}`;\n case 'default':\n // Wednesday, April 3, 2024 at 1:40 pm -0400\n return strftime('%A, %B %d, %Y at %I:%M %P %z', date);\n case 'on_date':\n // on Apr 3, 2024\n return `on ${strftime('%b %d, %Y', date)}`;\n case 'short': // deprecated by shopify\n // 3 Apr 13:40\n return strftime('%-d %b %H:%M', date);\n case 'long': // deprecated by shopify\n // April 3, 2024 13:40\n return strftime('%B %d, %Y %H:%M', date);\n default:\n // TODO: support custom date formats from theme locale settings\n return date.toLocaleString();\n }\n}\n\nexport function isCustomDateFormat(format: string): boolean {\n return Boolean(format) && format.includes('%');\n}\n\nexport function applyStrftimeFormat(format: string, date: Date) {\n return strftime(format, date);\n}\n", "import { LiquidSwell } from '..';\nimport { ensureDate } from './date';\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (\n dateValue: string,\n interval: string | number,\n intervalCount: string | number,\n ): string => {\n const date = ensureDate(dateValue);\n const result = getNextIntervalDate(date, interval, Number(intervalCount));\n\n return result ? new Date(result).toISOString() : new Date().toISOString();\n };\n}\n\nexport function getNextIntervalDate(\n date: Date,\n interval: string | number,\n intervalCount: number,\n): number | undefined {\n if (!interval || !date) {\n return;\n }\n\n // Interval represents number of days (daily = 1, weekly = 7, monthly = 30)\n // Special case for Monthly which should always land on the same day of the month\n if (interval === 'monthly' || interval === 30) {\n return dateNextMonth(date, intervalCount);\n }\n\n let intervalDays = 0;\n\n if (typeof interval === 'string') {\n if (interval === 'daily') {\n intervalDays = 1;\n } else if (interval === 'weekly') {\n intervalDays = 7;\n } else if (interval === 'yearly') {\n intervalDays = 365;\n }\n }\n\n if (intervalDays <= 0) {\n return;\n }\n\n return time(date) + intervalDays * intervalCount * 86400 * 1000;\n}\n\nfunction dateNextMonth(startDate: Date, intervalCount: number) {\n const date = new Date(startDate);\n const nextDate = new Date(date);\n\n nextDate.setUTCMonth(date.getMonth() + (intervalCount || 1));\n // Correct for shorter month days and auto rollover\n if (nextDate.getDate() !== date.getDate()) {\n nextDate.setDate(nextDate.getDate() - nextDate.getDate());\n }\n\n return nextDate.getTime();\n}\n\nfunction time(date: Date) {\n if (date === undefined) {\n return Date.now();\n }\n\n if (typeof date === 'number' || typeof date === 'string') {\n return new Date(date).getTime();\n }\n\n if (date instanceof Date) {\n return date.getTime();\n }\n\n return Date.now();\n}\n", "import type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ form.errors | default_errors }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return async function filterDefaultError(errors) {\n if (!errors) {\n return '';\n }\n\n const errorMessages = await Promise.all(\n Array.from(errors).map((error: any) => error?.message || 'Unknown error'),\n );\n\n if (errorMessages.length === 0) {\n return '';\n }\n\n return `\n <div class=\"errors\">\n <ul>\n ${errorMessages\n .map(\n (message: string) => `\n <li>${message}</li>\n `,\n )\n .join('')}\n </ul>\n </div>\n `;\n };\n}\n", "import { LiquidSwell } from '..';\nimport { isNumber } from '../utils';\n\n/*\n {{ 4 | divided_by: 2 }}\n\n divisor is an integer\n {{ 20 | divided_by: 7 }}\n\n divisor is a float\n {{ 20 | divided_by: 7.0 }}\n\n with `integerArithmetic` argument to enforce integer divide\n {{ 5 | divided_by: 3, true }}\n*/\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (dividend: number, divisor: number, integerArithmetic: boolean) => {\n if (!isNumber(dividend) || !isNumber(divisor)) {\n return dividend;\n }\n\n return integerArithmetic\n ? Math.floor(dividend / divisor)\n : dividend / divisor;\n };\n}\n", "import { LiquidSwell } from '..';\nimport { unescape } from 'lodash-es';\n\n// {{ iframe | embedded_content }} // iframe by default\n// {{ iframe | embedded_content: 'video' }}\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (value: string, tag = 'iframe') => {\n // escape main tags to keep them\n const escapeIframes = value\n .replaceAll(`<${tag}`, `&lt;${tag}`)\n .replaceAll(`</${tag}`, `&lt;/${tag}`);\n // remove all tags\n const removeTags = escapeIframes.replaceAll(/<(.*?)>/gi, '');\n // unescape\n const unescaped = unescape(removeTags);\n // replace spaces\n const replaceSpaces = unescaped.replaceAll('&nbsp;', ' ');\n return replaceSpaces;\n };\n}\n", "import { escape } from 'lodash-es';\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ 'text' | escape }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function escapeTag(input: string): string {\n if (!input?.startsWith) {\n return input;\n }\n\n // in Shopify img and video are not escaped\n if (input.startsWith('<img') || input.startsWith('<video')) {\n return input;\n }\n\n return escape(input);\n };\n}\n", "import { LiquidSwell } from '..';\nimport { ThemeFont } from '../font';\nimport { paramsToProps } from '../utils';\n\n// {{ settings.type_header_font | font_face: font_display: 'swap' }}\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (fontSetting: any, ...params: any[]) => {\n if (!fontSetting) {\n return null;\n }\n\n const font = ThemeFont.get(fontSetting);\n const options = paramsToProps(params);\n\n return font.face(options);\n };\n}\n", "import { LiquidSwell } from '..';\nimport { ThemeFont } from '../font';\n\n// {%- assign bold_font = settings.type_body_font | font_modify: 'weight', 'bold' -%}\n// h2 { font-weight: {{ bold_font.weight }}; }\n// Note: if property is invalid, returns null\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (fontSetting: any, prop: string, value: string) => {\n // Do not modify the original value\n return ThemeFont.clone(fontSetting).modify(prop, value);\n };\n}\n", "import { LiquidSwell } from '..';\nimport { ThemeFont } from '../font';\n\n// {{ settings.type_header_font | font_url }}\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (fontSetting: string) => {\n return ThemeFont.get(fontSetting).url();\n };\n}\n", "import { LiquidSwell } from '..';\n\n// {{ account.shipping | format_address }}\n\nexport default {\n bind(_liquidSwell: LiquidSwell) {\n return async (address: any) => {\n if (address) {\n const country =\n address.country?.iso_code ||\n address.country_code ||\n (typeof address.country === 'string' ? address.country : null);\n\n if (address.name || address.address1 || address.state || country) {\n const addressLines = [\n address.name,\n address.company,\n address.address1,\n address.address2,\n address.city,\n address.state,\n country,\n address.zip,\n ].filter(Boolean);\n\n if (addressLines.length > 0) {\n return `\n <p>${addressLines.join('<br />')}</p>\n `;\n }\n }\n }\n\n return '<p></p>';\n };\n },\n resolve: [\n [\n 'name',\n 'company',\n 'address1',\n 'address2',\n 'city',\n 'state',\n 'country_code',\n 'country',\n 'zip',\n ],\n ],\n};\n", "import { kebabCase } from 'lodash-es';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ product.title | handleize }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function filterHandleize(handle: string): string {\n return kebabCase(handle);\n };\n}\n", "import { paramsToProps } from '../utils';\n\nimport type { LiquidSwell } from '..';\nimport type { FilterHandler } from 'liquidjs/dist/template';\n\n// {{ product | image_url | image_tag }}\n// TODO: focal point\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function filterImageTag(imageUrl: string, ...params: any[]): string {\n imageUrl = String(imageUrl || '');\n\n let {\n width,\n height,\n widths,\n srcset,\n preload,\n alt,\n loading = 'lazy',\n ...attrs\n } = paramsToProps(params);\n\n if (width === undefined) {\n width = getSizeFromUrlQuery(imageUrl, 'width');\n }\n\n if (height === undefined) {\n height = getSizeFromUrlQuery(imageUrl, 'height');\n }\n\n if (widths === undefined && typeof width === 'number') {\n widths = generateSmartWidths(width);\n }\n\n if (srcset === undefined && Array.isArray(widths) && widths.length > 0) {\n srcset = generateSmartSrcset(imageUrl, widths);\n }\n\n if (loading === null) {\n loading = undefined;\n } else if (preload) {\n loading = 'eager';\n }\n\n const imgAttrs = {\n src: imageUrl,\n width,\n height,\n srcset,\n alt,\n loading,\n ...attrs,\n };\n\n return `<img ${Object.entries(imgAttrs)\n .reduce((acc: string[], [key, value]) => {\n if (value !== undefined && value !== null) {\n acc.push(`${key}=\"${String(value)}\"`);\n }\n\n return acc;\n }, [])\n .join(' ')} />`;\n };\n}\n\nfunction makeRegexForParam(param: string): RegExp {\n switch (param) {\n case 'width':\n return /width=(\\d+)/;\n case 'height':\n return /height=(\\d+)/;\n default:\n return new RegExp(`${param}=(\\\\d+)`);\n }\n}\n\nfunction getSizeFromUrlQuery(imageUrl: string, param: string): number | null {\n const regex = makeRegexForParam(param);\n const match = imageUrl.match(regex);\n\n if (match !== null) {\n return parseInt(match[1]) / 2; // divide by 2 for retina\n }\n\n return null;\n}\n\nfunction generateSmartWidths(width: number): number[] {\n // TODO: see if this actually makes sense\n const widths: number[] = [];\n\n while (width > 256) {\n width = Math.round(width * 0.8);\n widths.push(width);\n }\n\n return widths;\n}\n\nfunction generateSmartSrcset(imageUrl: string, widths: number[]): string {\n return widths\n .map((w) => {\n let url = imageUrl;\n\n if (url.includes('?')) {\n url = url.replace(/width=\\d+/, `width=${w}`).replace(/height=\\d+/, '');\n } else {\n url = `${url}?width=${w}`;\n }\n\n return `${url} ${w}w`;\n })\n .join(', ');\n}\n", "import { isLikePromise, paramsToProps } from '../utils';\nimport { getCountryCodeFromLocale, isLikeSwellLocale, isObject } from '@/utils';\nimport { isLikeShopifyCountry } from '@/compatibility/shopify-objects/localization';\n\nimport type { LiquidSwell } from '..';\nimport type { FilterHandler } from 'liquidjs/dist/template';\n\n// {{ product | image_url: width: 450 }} or {{ product | image_url: width: 450, height: 300 }}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nasync function getImageObjectFromInput(input: unknown): Promise<unknown> {\n if (isObject(input)) {\n if (Array.isArray(input.images) && input.images.length > 0) {\n return input.images[0];\n }\n\n if (input.image) {\n return input.image;\n }\n\n // Shopify specific\n if (input.preview_image) {\n return input.preview_image;\n }\n }\n\n return input;\n}\n\nasync function getImageSrcFromObject(input: unknown): Promise<unknown> {\n if (isObject(input)) {\n if (input.url) {\n return input.url;\n }\n\n if (isObject(input.file)) {\n return input.file.url;\n }\n\n // Shopify specific\n let image: unknown = input.src;\n\n if (isObject(image)) {\n if (isLikePromise(image)) {\n image = await image;\n }\n\n return isObject(image) ? image.url : '';\n }\n\n return '';\n }\n\n return input;\n}\n\nfunction getCountryFlagUrl(countryIsoCode: string): string {\n return `https://cdnjs.cloudflare.com/ajax/libs/flag-icons/7.3.2/flags/1x1/${countryIsoCode.toLowerCase()}.svg`;\n}\n\nexport async function getImageUrlFromInput(\n input: unknown,\n liquidSwell: LiquidSwell,\n): Promise<unknown> {\n if (isLikeSwellLocale(input)) {\n const code = getCountryCodeFromLocale(input.code);\n\n if (code) {\n return getCountryFlagUrl(code);\n }\n\n return '';\n }\n\n if (liquidSwell.theme.shopifyCompatibility && isLikeShopifyCountry(input)) {\n if (input.iso_code) {\n return getCountryFlagUrl(input.iso_code);\n }\n\n return '';\n }\n\n const imageSrc = await getImageObjectFromInput(input).then(\n getImageSrcFromObject,\n );\n\n return imageSrc;\n}\n\nconst filterDefinition = {\n bind(liquidSwell: LiquidSwell): FilterHandler {\n return async function filterImageUrl(\n input: unknown,\n ...params: string[]\n ): Promise<string> {\n const imageUrl = await getImageUrlFromInput(input, liquidSwell);\n\n if (typeof imageUrl !== 'string' || imageUrl === '') {\n return '';\n }\n\n const props = paramsToProps(params);\n const query: string[] = [];\n\n if (props.width) {\n query.push(`width=${Number(props.width) * 2}`);\n }\n\n if (props.height) {\n query.push(`height=${Number(props.height) * 2}`);\n }\n\n return query.length > 0 ? `${imageUrl}?${query.join('&')}` : imageUrl;\n };\n },\n resolve: [['images', 'image', 'preview_image']],\n};\n\nexport default filterDefinition;\n", "import { LiquidSwell } from '..';\n\n// {{ 'icon.svg' | inline_asset_content }}\n\nexport default function bind(liquidSwell: LiquidSwell) {\n return async (assetPath: string) => {\n const config = await liquidSwell.theme.getThemeConfig(\n `theme/assets/${assetPath}`,\n );\n return config?.file_data || '';\n };\n}\n", "import { jsonStringifyAsync } from '../utils';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ product | json }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return async function filterJson(\n input: unknown,\n space: number = 0,\n ): Promise<string> {\n return jsonStringifyAsync(input, space);\n };\n}\n", "import { jsonStringifyAsync } from '../utils';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ product | json_pretty }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return async function filterJsonPretty(\n input: unknown,\n space: number = 2,\n ): Promise<string> {\n const output = await jsonStringifyAsync(input, space);\n return `<pre>${output}</pre>`;\n };\n}\n", "import { hasFlag } from 'country-flag-icons';\nimport * as flags from 'country-flag-icons/string/1x1';\nimport { getCountryCodeFromLocale } from '@/utils';\nimport { LiquidSwell } from '..';\n\n// {{ localization.language.iso_code | locale_flag }}\n\ntype Flags = {\n [key: string]: string;\n};\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (localeCode: unknown) => {\n if (typeof localeCode !== 'string') {\n return flags.US;\n }\n\n const countryCode = getCountryCodeFromLocale(localeCode).toUpperCase();\n\n return hasFlag(countryCode) ? (flags as Flags)[countryCode] : flags.US;\n };\n}\n", "import { LiquidSwell } from '..';\nimport { isNumber } from '../utils';\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (first: number, second: number) => {\n const firstValue = isNumber(first) ? first : 0;\n const secondValue = isNumber(second) ? second : 0;\n\n return firstValue - secondValue;\n };\n}\n", "import MoneyDrop from '@/compatibility/drops/money';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ product.price | money }}\n\nexport default function bind(liquidSwell: LiquidSwell): FilterHandler {\n return function filterMoney(value: unknown) {\n const amount = getMoneyAmount(liquidSwell, value);\n\n return liquidSwell.renderCurrency(amount);\n };\n}\n\nexport function getMoneyAmount(liquidSwell: LiquidSwell, value: unknown) {\n const { shopifyCompatibility } = liquidSwell.theme;\n\n if (value instanceof MoneyDrop) {\n return value.toFloat();\n } else if (shopifyCompatibility) {\n return shopifyCompatibility.fromShopifyPrice(Number(value || 0));\n }\n\n return Number(value || 0);\n}\n", "import { getMoneyAmount } from './money';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ product.price | money_with_currency }}\n\nexport default function bind(liquidSwell: LiquidSwell): FilterHandler {\n return function filterMoneyWithCurrency(value: unknown) {\n const { currency } = liquidSwell.theme.swell.getStorefrontLocalization();\n const amount = getMoneyAmount(liquidSwell, value);\n\n return `${liquidSwell.renderCurrency(amount)} ${currency?.toUpperCase()}`;\n };\n}\n", "import { getMoneyAmount } from './money';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ product.price | money_without_currency }}\n\nexport default function bind(liquidSwell: LiquidSwell): FilterHandler {\n return function filterMoneyWithoutCurrency(value: unknown) {\n const amount = getMoneyAmount(liquidSwell, value);\n\n return liquidSwell.renderCurrency(amount).replace(/[^0-9.,]/g, '');\n };\n}\n", "import { getMoneyAmount } from './money';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ product.price | money_without_trailing_zeros }}\n\nexport default function bind(liquidSwell: LiquidSwell): FilterHandler {\n return function filterMoneyWithoutTrailingZeros(value: unknown) {\n const amount = getMoneyAmount(liquidSwell, value);\n\n return liquidSwell.renderCurrency(amount).split('.')[0].split(',')[0];\n };\n}\n", "import { paramsToProps } from '../utils';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ 'asset.css' | asset_url | preload_tag }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function filterPreloadTag(assetUrl: string, ...params: any[]): string {\n if (!assetUrl) {\n return '';\n }\n\n const { as } = paramsToProps(params);\n\n let attributes = '';\n if (typeof as === 'string' && as) {\n attributes += `as=\"${as}\"`;\n }\n\n return `<link href=\"${assetUrl}\" rel=\"preload\" ${attributes} />`;\n };\n}\n", "import type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ 'cart.js' | asset_url | script_tag }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function filterScriptTag(assetUrl: string): string {\n return `<script src=\"${assetUrl}\" type=\"text/javascript\"></script>`;\n };\n}\n", "import type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ 'asset.css' | asset_url | stylesheet_tag }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function filterStyleSheetTag(assetUrl: string): string {\n return `<link href=\"${assetUrl}\" rel=\"stylesheet\" type=\"text/css\" media=\"all\" />`;\n };\n}\n", "import { LiquidSwell } from '..';\nimport { default as bindDate, ensureDate } from './date';\nimport { paramsToProps } from '../utils';\n\n// {{ blog.date_published | time_tag: format: 'date_at_time' }}\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n const dateFilter = bindDate(_liquidSwell);\n return (dateValue: string, ...params: any[]) => {\n const date = ensureDate(dateValue);\n const formattedDate = dateFilter(dateValue, ...params);\n const formattedDatetime = date.toISOString();\n\n return `<time datetime=\"${formattedDatetime}\">${formattedDate}</time>`;\n };\n}\n", "import { paramsToProps } from '../utils';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {{ 'translation.key' | t: prop: value }}\n\nexport default function bind(liquidSwell: LiquidSwell): FilterHandler {\n return async function filterTranslate(\n key: string,\n params?: string[],\n ): Promise<string> {\n const props = params && paramsToProps(params);\n const str = await liquidSwell.renderTranslation(key, props);\n return str.replace(/(?!\\\\)\"/g, '&#34;').replace(/(?!\\\\)'/g, '&#39;');\n };\n}\n", "import { stringify, isComparable, isTruthy, resolveEnumerable } from '../utils';\n\nimport type { Context } from 'liquidjs';\nimport type { FilterHandler, FilterImpl } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '..';\n\n// {% assign specials = collection.products | where: 'special', true %}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function* filterWhere(\n this: FilterImpl,\n arr: unknown,\n property: string,\n expected?: unknown,\n ): IterableIterator<unknown> {\n const results: unknown[] = [];\n\n const list = yield resolveEnumerable(arr);\n\n for (const item of list) {\n const value = yield this.context._getFromScope(\n item,\n stringify(property).replace(/\\?$/, '').split('.'),\n false,\n );\n\n if (filterValue(value, expected, this.context)) {\n results.push(item);\n }\n }\n\n return results;\n };\n}\n\nfunction filterValue(\n value: unknown,\n expected: unknown,\n context: Context,\n): boolean {\n if (expected === undefined) return isTruthy(value, context);\n if (isComparable(expected)) return expected.equals(value);\n return value === expected;\n}\n", "import type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '../..';\n\n// {{ 'image.jpg' | asset_img_url: 'large' }}\n\ninterface AssetImageSize {\n width?: number;\n height?: number;\n}\n\nfunction getSizesFromParam(param: string): AssetImageSize {\n switch (param) {\n case 'pico':\n return { width: 16, height: 16 };\n case 'icon':\n return { width: 32, height: 32 };\n case 'thumb':\n return { width: 50, height: 50 };\n case 'small':\n return { width: 100, height: 100 };\n case 'compact':\n return { width: 160, height: 160 };\n case 'medium':\n return { width: 240, height: 240 };\n case 'large':\n return { width: 480, height: 480 };\n case 'grande':\n return { width: 600, height: 600 };\n case 'original':\n case 'master':\n return { width: 1024, height: 1024 };\n default:\n break;\n }\n\n const [width, height] = param.split('x');\n\n return {\n width: width ? Number(width) : undefined,\n height: height ? Number(height) : undefined,\n };\n}\n\nexport default function bind(liquidSwell: LiquidSwell): FilterHandler {\n return async function filterAssetImgUrl(\n assetPath: string,\n size: string = 'small',\n ): Promise<string> {\n const imageUrl = await liquidSwell\n .getAssetUrl(assetPath)\n .then((url) => url || '');\n\n const sizes = getSizesFromParam(size);\n const query = [];\n\n if (sizes.width) {\n query.push(`width=${sizes.width}`);\n }\n\n if (sizes.height) {\n query.push(`height=${sizes.height}`);\n }\n\n return query.length > 0 ? `${imageUrl}?${query.join('&')}` : imageUrl;\n };\n}\n", "import { LiquidSwell, ThemeColor } from \"../..\";\n\n// Deprecated in Shopify, supported for backward compatibility\n// Replaced by color_to_rgb\n\n// {{ '#EA5AB9' | hex_to_rgba: 0.5 }} => rgba(234,90,185,0.5)\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (color: string | ThemeColor, alpha?: number): string => {\n return ThemeColor.get(color).rgba(alpha || 1);\n };\n}\n", "import { getImageUrlFromInput } from '../image_url';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '../..';\n\ninterface ImgSrcObject {\n url: string;\n width?: number;\n height?: number;\n}\n\nexport default function bind(liquidSwell: LiquidSwell): FilterHandler {\n return async function filterImgUrl(\n input: string | ImgSrcObject,\n ...params: string[]\n ): Promise<string> {\n const url = await getImageUrlFromInput(input, liquidSwell);\n\n if (typeof url !== 'string' || url === '') {\n return '';\n }\n\n const query: string[] = [];\n\n params.forEach((param) => {\n if (!param) {\n return;\n }\n\n const [key, value] = param.includes(':')\n ? param.split(':').map((s) => s.trim())\n : [param, undefined];\n\n if (/^w\\d+$/.test(key)) {\n query.push(`width=${key.slice(1)}`);\n } else if (/^h\\d+$/.test(key)) {\n query.push(`height=${key.slice(1)}`);\n } else if (key === 'crop' && value) {\n query.push(`crop=${encodeURIComponent(value)}`);\n }\n });\n\n return query.length ? `${url}?${query.join('&')}` : url;\n };\n}\n", "import { LiquidSwell } from '../..';\n\n// {{ cart | item_count_for_variant: 650c737e2f5fb6f22124c823 }}\n\nexport default {\n bind(_liquidSwell: LiquidSwell) {\n return (cart: any, variantId: string) => {\n const variantItem = cart?.items?.find(\n (item: any) => item.variant_id === variantId,\n );\n\n return variantItem?.quantity || 0;\n };\n },\n resolve: [['items']],\n};\n", "import { LiquidSwell } from '../..';\n\n// {{ form | payment_button }}\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (form: any) => {\n // TODO\n return `<button style=\"display: block; visibility: hidden;\"></button>`;\n };\n}\n", "import { LiquidSwell } from '../..';\n\n// {{ form | payment_terms }}\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (form: any) => {\n // TODO\n return null;\n };\n}\n", "// Export all svgs documented at https://shopify.dev/docs/api/liquid/filters/placeholder_svg_tag\n\ninterface SvgImage {\n src: string;\n}\n\nconst svgs: Record<string, SvgImage | string | undefined> = {\n image: {\n src: 'https://cdn.swell.store/schema/685ef58ab79e3e0012cf3253/79fe22ba0c0881be2fbd5d5b51861d82/image.png',\n },\n 'product-1': {\n src: 'https://cdn.swell.store/schema/685ef58cb79e3e0012cf3260/fd636e87f58fa4313e1d70d0a3dd6662/product-1.png',\n },\n 'product-2': {\n src: 'https://cdn.swell.store/schema/685ef58cb79e3e0012cf3267/318f4f837862aae26cb1cb329a864872/product-2.png',\n },\n 'product-3': {\n src: 'https://cdn.swell.store/schema/685ef58db79e3e0012cf326a/6337ef0ed2126cf696263f43b5b57bb9/product-3.png',\n },\n 'product-4': {\n src: 'https://cdn.swell.store/schema/685ef58db79e3e0012cf326d/8c52d4e48500e2ae9506de6513222415/product-4.png',\n },\n 'product-5': {\n src: 'https://cdn.swell.store/schema/685ef58db79e3e0012cf3270/566583407481d7e8e69c2e35d5da33c7/product-5.png',\n },\n 'product-6': {\n src: 'https://cdn.swell.store/schema/685ef58db79e3e0012cf3273/0c3b3349d195386674958e0e60ac87d7/product-6.png',\n },\n 'collection-1': {\n src: 'https://cdn.swell.store/schema/685ef580b79e3e0012cf320f/0d5d4baa5c890d87bcc356958459f1f6/collection-1.png',\n },\n 'collection-2': {\n src: 'https://cdn.swell.store/schema/685ef580b79e3e0012cf3216/1b976d3a480f06c2ebf3a4606da8d015/collection-2.png',\n },\n 'collection-3': {\n src: 'https://cdn.swell.store/schema/685ef580b79e3e0012cf3219/69efc2130f37ba4965e3355ec3c131ba/collection-3.png',\n },\n 'collection-4': {\n src: 'https://cdn.swell.store/schema/685ef581b79e3e0012cf321c/1cee5756d424e0a79bca3a3f8f33f24e/collection-4.png',\n },\n 'collection-5': {\n src: 'https://cdn.swell.store/schema/685ef581b79e3e0012cf321f/b802f4b9521281160df2d17bbecf40d7/collection-5.png',\n },\n 'collection-6': {\n src: 'https://cdn.swell.store/schema/685ef581b79e3e0012cf3222/fba884c7fe8122c472e130355fb52db7/collection-6.png',\n },\n 'lifestyle-1': {\n src: 'https://cdn.swell.store/schema/6870eddc1657130012643fc6/1777bcff40736610093833ef858b5936/lifestyle-1.png',\n },\n 'lifestyle-2': {\n src: 'https://cdn.swell.store/schema/6870eddc1657130012643fcb/4d29197e3fa0b6d8255c1b7770f8dc12/lifestyle-2.png',\n },\n 'product-apparel-1': {\n src: 'https://cdn.swell.store/schema/685ef58eb79e3e0012cf3276/37c3c973a01287a580ab9db2e05dd36d/product-apparel-1.png',\n },\n 'product-apparel-2': {\n src: 'https://cdn.swell.store/schema/685ef58eb79e3e0012cf3280/2a4dce99e9af0730afdfd6c3465c4487/product-apparel-2.png',\n },\n 'product-apparel-3': {\n src: 'https://cdn.swell.store/schema/685ef58fb79e3e0012cf3283/b96835507260828b6b744a05c1e1b92c/product-apparel-3.png',\n },\n 'product-apparel-4': {\n src: 'https://cdn.swell.store/schema/685ef58fb79e3e0012cf3286/e8efc104bd3e813ca00847ab243852f2/product-apparel-4.png',\n },\n 'collection-apparel-1': {\n src: 'https://cdn.swell.store/schema/685ef582b79e3e0012cf322c/9cecfb1b5f6a22a1a7432f7b2bb93cf6/collection-apparel-1.png',\n },\n 'collection-apparel-2': {\n src: 'https://cdn.swell.store/schema/685ef584b79e3e0012cf322f/6b191f029e811c69eff721d1da07fabc/collection-apparel-2.png',\n },\n 'collection-apparel-3': {\n src: 'https://cdn.swell.store/schema/685ef585b79e3e0012cf3234/98ca327590d41a9b81fce28eae8593ba/collection-apparel-3.png',\n },\n 'collection-apparel-4': {\n src: 'https://cdn.swell.store/schema/685ef585b79e3e0012cf3237/e559f1d5a48b5ff04a47fab387c57b2d/collection-apparel-4.png',\n },\n 'hero-apparel-1': {\n src: 'https://cdn.swell.store/schema/685ef587b79e3e0012cf3247/ef96bbd7b852a2641fbca87bbeca63de/hero-apparel-1.png',\n },\n 'hero-apparel-2': {\n src: 'https://cdn.swell.store/schema/685ef588b79e3e0012cf324b/660460dd8576215ccd55c85c975b3c37/hero-apparel-2.png',\n },\n 'hero-apparel-3': {\n src: 'https://cdn.swell.store/schema/685ef58ab79e3e0012cf3250/431a7970525bf3b5d6ab54243cd77f78/hero-apparel-3.png',\n },\n 'blog-apparel-1': {\n src: 'https://cdn.swell.store/schema/685ef57db79e3e0012cf3202/bd81d93a97554b06c9e74ff2e74e3339/blog-apparel-1.png',\n },\n 'blog-apparel-2': {\n src: 'https://cdn.swell.store/schema/685ef57eb79e3e0012cf3207/d2cf238c341d9302966123c52c746b34/blog-apparel-2.png',\n },\n 'blog-apparel-3': {\n src: 'https://cdn.swell.store/schema/685ef57fb79e3e0012cf320c/4665a3df383e06552307b57e432458b7/blog-apparel-3.png',\n },\n 'detailed-apparel-1': {\n src: 'https://cdn.swell.store/schema/685ef586b79e3e0012cf3241/47d7848d3e50d094cc9cd5e16aa543f2/detailed-apparel-1.png',\n },\n};\n\nexport default svgs;\n", "import placeholderSvgs from './placeholder-svgs';\n\nimport type { LiquidSwell } from '../..';\nimport type { FilterHandler } from 'liquidjs/dist/template';\n\n// {{ 'image' | placeholder_svg_tag }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function filterPlaceholderSvgTag(\n name: string,\n className: string,\n ): string {\n const svg = placeholderSvgs[name];\n\n if (typeof svg === 'object' && svg !== null) {\n return `<img src=\"${svg.src}\" alt=\"${name}\"${className ? ` class=\"${className}\"` : ''} />`;\n }\n\n // TODO: add className to svg\n return svg || name;\n };\n}\n", "import type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '../..';\n\n// {{ 'option_selection.js' | shopify_asset_url }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return function filterShopifyAssetUrl(input: unknown): unknown {\n if (typeof input === 'string') {\n switch (input) {\n case 'option_selection.js':\n return 'https://cdn.shopify.com/s/shopify/option_selection.js';\n case 'api.jquery.js':\n return 'https://cdn.shopify.com/s/shopify/api.jquery.js';\n case 'shopify_common.js':\n return 'https://cdn.shopify.com/s/shopify/shopify_common.js';\n case 'customer_area.js':\n return 'https://cdn.shopify.com/s/shopify/customer_area.js';\n case 'currencies.js':\n return 'https://cdn.shopify.com/s/javascripts/currencies.js';\n case 'customer.css':\n return 'https://cdn.shopify.com/s/shopify/customer.css';\n default:\n break;\n }\n }\n\n return input;\n };\n}\n", "import { StorefrontResource } from '@/resources';\nimport { isLikeShopifyArticle } from '@/compatibility/shopify-objects/article';\nimport { isLikeShopifyProduct } from '@/compatibility/shopify-objects/product';\nimport { resolveAllKeys } from '@/liquid/utils';\nimport { isObject } from '@/utils';\n\nimport type { FilterHandler } from 'liquidjs/dist/template';\nimport type { LiquidSwell } from '../..';\nimport type {\n ShopifyArticle,\n ShopifyProduct,\n ShopifyVariant,\n} from 'types/shopify';\n\n// {{ product | structured_data }}\n\nexport default function bind(_liquidSwell: LiquidSwell): FilterHandler {\n return async function filterStructuredData(input: unknown): Promise<unknown> {\n let value = input;\n\n if (value instanceof StorefrontResource) {\n value = await value.resolve();\n }\n\n await resolveAllKeys(value);\n\n if (isObject(value)) {\n if (isLikeShopifyProduct(value)) {\n return JSON.stringify(\n value.variants_count > 0\n ? convertToSchemaOrgProductGroup(value)\n : convertToSchemaOrgProduct(\n value as unknown as ShopifyVariant,\n value,\n ),\n );\n }\n\n if (isLikeShopifyArticle(value)) {\n return JSON.stringify(convertToSchemaOrgArticle(value));\n }\n }\n\n return value;\n };\n}\n\ninterface SchemaOrgArticle {\n '@context': 'https://schema.org';\n '@type': 'Article';\n '@id': string;\n url: string;\n name: string;\n author: string;\n image?: string;\n abstract: string;\n keywords: string[];\n articleBody: string;\n dateCreated: string;\n dateModified: string;\n datePublished: string;\n}\n\nfunction convertToSchemaOrgArticle(article: ShopifyArticle): SchemaOrgArticle {\n const schemaOrgArticle: SchemaOrgArticle = {\n '@context': 'https://schema.org',\n '@type': 'Article',\n '@id': article.url,\n url: article.url,\n name: article.title,\n author: article.author,\n image: article.image?.src.url || undefined,\n abstract: article.excerpt,\n keywords: article.tags,\n articleBody: article.content,\n dateCreated: article.created_at,\n dateModified: article.updated_at,\n datePublished: article.published_at,\n };\n\n return schemaOrgArticle;\n}\n\ninterface SchemaOrgOffer {\n '@type': 'Offer';\n availability: string;\n price: number;\n priceCurrency: string;\n}\n\ninterface SchemaOrgProduct {\n '@context': 'https://schema.org';\n '@type': 'Product';\n '@id': string;\n url: string;\n sku: string;\n name: string;\n image?: string;\n keywords: string[];\n description: string;\n offers: SchemaOrgOffer;\n}\n\nfunction convertToSchemaOrgProduct(\n variant: ShopifyVariant,\n product: ShopifyProduct,\n): SchemaOrgProduct {\n const schemaOrgProduct: SchemaOrgProduct = {\n '@context': 'https://schema.org',\n '@type': 'Product',\n '@id': variant.url,\n url: variant.url,\n sku: variant.sku,\n name: variant.title,\n image: variant.featured_image?.src.url || undefined,\n keywords: product.tags,\n description: product.description,\n offers: {\n '@type': 'Offer',\n availability: variant.available\n ? 'https://schema.org/InStock'\n : 'https://schema.org/OutOfStock',\n price: variant.price,\n priceCurrency: 'USD',\n },\n };\n\n return schemaOrgProduct;\n}\n\ninterface SchemaOrgProductGroup {\n '@context': 'https://schema.org';\n '@type': 'ProductGroup';\n productGroupID: string;\n url: string;\n name: string;\n description: string;\n variesBy: string[];\n hasVariant: SchemaOrgProduct[];\n}\n\nfunction convertToSchemaOrgProductGroup(\n product: ShopifyProduct,\n): SchemaOrgProductGroup {\n const schemaOrgProductGroup: SchemaOrgProductGroup = {\n '@context': 'https://schema.org',\n '@type': 'ProductGroup',\n productGroupID: String(product.id),\n url: product.url,\n name: product.title,\n description: product.description,\n variesBy: product.options,\n hasVariant: product.variants.map((variant) =>\n convertToSchemaOrgProduct(variant, product),\n ),\n };\n\n return schemaOrgProductGroup;\n}\n", "import { LiquidSwell } from '..';\nimport { paramsToProps } from '../utils';\n\n// {{ block.settings.heading | inline_editable: 'heading' }}\n\nexport default function bind(_liquidSwell: LiquidSwell) {\n return (value: string | { value: string }, key?: string) => {\n if (typeof value === 'object' && 'value' in value) {\n value = value.value;\n }\n return `<span data-swell-inline-editable=\"${key}\">${value}</span>`;\n };\n}\n", "import asset_url from './asset_url';\nimport brightness_difference from './brightness_difference';\nimport color_brightness from './color_brightness';\nimport color_contrast from './color_contrast';\nimport color_darken from './color_darken';\nimport color_desaturate from './color_desaturate';\nimport color_difference from './color_difference';\nimport color_extract from './color_extract';\nimport color_lighten from './color_lighten';\nimport color_mix from './color_mix';\nimport color_modify from './color_modify';\nimport color_saturate from './color_saturate';\nimport color_to_hex from './color_to_hex';\nimport color_to_hsl from './color_to_hsl';\nimport color_to_rgb from './color_to_rgb';\nimport date_next_interval from './date_next_interval';\nimport date from './date';\nimport default_errors from './default_errors';\nimport divided_by from './divided_by';\nimport embedded_content from './embedded_content';\nimport escape from './escape';\nimport font_face from './font_face';\nimport font_modify from './font_modify';\nimport font_url from './font_url';\nimport format_address from './format_address';\nimport handleize from './handleize';\nimport image_tag from './image_tag';\nimport image_url from './image_url';\nimport inline_asset_content from './inline_asset_content';\nimport json from './json';\nimport json_pretty from './json_pretty';\nimport locale_flag from './locale_flag';\nimport minus from './minus';\nimport money from './money';\nimport money_with_currency from './money_with_currency';\nimport money_without_currency from './money_without_currency';\nimport money_without_trailing_zeros from './money_without_trailing_zeros';\nimport preload_tag from './preload_tag';\nimport script_tag from './script_tag';\nimport stylesheet_tag from './stylesheet_tag';\nimport time_tag from './time_tag';\nimport translate from './translate';\nimport where from './where';\n\n// Shopify compatibility only\nimport asset_img_url from './shopify/asset_img_url';\nimport hex_to_rgba from './shopify/hex_to_rgba';\nimport img_url from './shopify/img_url';\nimport item_count_for_variant from './shopify/item_count_for_variant';\nimport payment_button from './shopify/payment_button';\nimport payment_terms from './shopify/payment_terms';\nimport placeholder_svg_tag from './shopify/placeholder_svg_tag';\nimport shopify_asset_url from './shopify/shopify_asset_url';\nimport structured_data from './shopify/structured_data';\n\n// Swell only\nimport inline_editable from './inline_editable';\n\n// Utils\nimport { isLikePromise, isFunction, isObject } from '../utils';\n\nimport type { LiquidSwell } from '..';\nimport type {\n FilterHandler,\n FilterImpl,\n FilterImplOptions,\n} from 'liquidjs/dist/template';\n\nexport const filters = {\n asset_url,\n brightness_difference,\n color_brightness,\n color_contrast,\n color_darken,\n color_desaturate,\n color_difference,\n color_extract,\n color_lighten,\n color_mix,\n color_modify,\n color_saturate,\n color_to_hex,\n color_to_hsl,\n color_to_rgb,\n date_next_interval,\n date,\n default_errors,\n divided_by,\n embedded_content,\n escape,\n font_face,\n font_modify,\n font_url,\n format_address,\n handle: handleize, // alias\n handleize,\n image_tag,\n image_url,\n inline_asset_content,\n json,\n json_pretty,\n locale_flag,\n minus,\n money,\n money_with_currency,\n money_without_currency,\n money_without_trailing_zeros,\n preload_tag,\n script_tag,\n stylesheet_tag,\n time_tag,\n translate,\n t: translate, // alias\n where,\n\n // Shopify compatibility only\n asset_img_url,\n hex_to_rgba,\n img_url,\n item_count_for_variant,\n payment_button,\n payment_terms,\n placeholder_svg_tag,\n shopify_asset_url,\n structured_data,\n\n // Swell only\n inline_editable,\n};\n\nexport function bindFilters(liquidSwell: LiquidSwell): void {\n for (const [tag, handler] of Object.entries(filters)) {\n if (typeof handler === 'function') {\n liquidSwell.registerFilter(tag, handler(liquidSwell));\n } else if (typeof handler.bind === 'function') {\n liquidSwell.registerFilter(\n tag,\n bindWithResolvedProps(liquidSwell, handler.bind, handler.resolve),\n );\n }\n }\n}\n\n// Resolve specific nested props\nfunction bindWithResolvedProps(\n liquidSwell: LiquidSwell,\n bind: (liquidSwell: LiquidSwell) => FilterHandler,\n resolve: Array<string[] | boolean> = [],\n): FilterImplOptions {\n const handler = bind(liquidSwell);\n if (!Array.isArray(resolve)) {\n return handler;\n }\n\n return async function (this: FilterImpl, ...props: unknown[]) {\n const [arg0, ...args] = await Promise.all(\n props.map((prop, index) => {\n if (Array.isArray(resolve[index]) || resolve[index] === true) {\n return resolveAsyncProps(prop, resolve[index]);\n }\n return prop;\n }),\n );\n\n return handler.call(this, arg0, ...args);\n };\n}\n\nexport async function resolveAsyncProps(\n propArg: unknown,\n resolveProps: boolean | string[],\n): Promise<unknown> {\n if (!propArg) {\n return propArg;\n }\n\n let prop = propArg as Record<string, unknown>;\n\n if (isLikePromise(prop)) {\n prop = (await prop) as Record<string, unknown>;\n }\n\n try {\n if (Array.isArray(resolveProps)) {\n for (const propPath of resolveProps) {\n if (typeof propPath !== 'string') {\n continue;\n }\n\n const [key, ...remainingKeys] = propPath.split('.');\n const targetProp = prop[key];\n\n if (isObject(targetProp)) {\n if (isLikePromise(targetProp)) {\n prop[key] = await targetProp;\n } else if (isFunction(targetProp.resolve)) {\n prop[key] = await targetProp.resolve();\n }\n }\n\n if (remainingKeys.length > 0) {\n prop[key] = await resolveAsyncProps(prop[key], [\n remainingKeys.join('.'),\n ]);\n }\n }\n }\n } catch {\n // noop\n }\n\n return prop;\n}\n", "import { defaultOperators } from 'liquidjs';\n\nimport { isComparable, toValue, isArray, isFunction } from './utils';\n\nimport type { Context } from 'liquidjs';\ntype UnaryOperatorHandler = (operand: any, ctx: Context) => boolean;\ntype BinaryOperatorHandler = (lhs: any, rhs: any, ctx: Context) => boolean;\ntype CustomOperatorHandler = (lhs: any, rhs: any, ctx: Context) => any;\ntype OperatorHandler =\n | UnaryOperatorHandler\n | BinaryOperatorHandler\n | CustomOperatorHandler;\n\ntype Operators = Record<string, OperatorHandler>;\nexport const swellOperators: Operators = {\n ...defaultOperators,\n '==': equal,\n '!=': (l: any, r: any) => !equal(l, r),\n contains: (l: any, r: any) => {\n l = toValue(l);\n if (isArray(l)) return l.some((i) => equal(i, r));\n if (isFunction(l?.indexOf)) return l.indexOf(toValue(r)) > -1;\n return false;\n },\n ',': (l: any, r: any) => `${l},${r}`,\n};\n\nexport function equal(lhs: unknown, rhs: unknown): boolean {\n if (isComparable(lhs)) return lhs.equals(rhs);\n if (isComparable(rhs)) return rhs.equals(lhs);\n lhs = toValue(lhs);\n rhs = toValue(rhs);\n if (isArray(lhs)) {\n return isArray(rhs) && arrayEqual(lhs, rhs);\n }\n // Modified to use `==' instead of `==='\n return lhs == rhs;\n}\n\nexport function arrayEqual(lhs: unknown[], rhs: unknown[]): boolean {\n if (lhs.length !== rhs.length) return false;\n return !lhs.some((value, i) => !equal(value, rhs[i]));\n}\n", "import Color from 'color';\nimport { Drop } from 'liquidjs';\n\nexport type ColorParam =\n | Color\n | string\n | ArrayLike<number>\n | number\n | Record<string, unknown>;\n\nexport class ThemeColor extends Drop {\n public color: Color;\n public colorValues: ColorParam;\n public red: number;\n public green: number;\n public blue: number;\n\n constructor(value: ThemeColor | string) {\n super();\n\n try {\n this.color = isThemeColorLike(value)\n ? typeof value.color.object === 'function' // ensure we have this required method\n ? value.color\n : Color(value.colorValues) // create a new Color otherwise\n : Color(value);\n this.colorValues = this.color.object();\n\n this.red = Number(this.colorValues.r);\n this.green = Number(this.colorValues.g);\n this.blue = Number(this.colorValues.b);\n } catch (_err) {\n // Just default to black in case of parse error\n this.color = Color('#000000');\n this.colorValues = this.color.object();\n this.red = Number(this.colorValues.r);\n this.green = Number(this.colorValues.g);\n this.blue = Number(this.colorValues.b);\n }\n }\n\n static get(value: string | ThemeColor): ThemeColor {\n return value instanceof ThemeColor ? value : new ThemeColor(value);\n }\n\n static clone(value: string | ThemeColor): ThemeColor {\n if (isThemeColorLike(value)) {\n return new ThemeColor(ThemeColor.get(value).toString());\n }\n\n return new ThemeColor(value);\n }\n\n toString(): string {\n return this.color.string();\n }\n\n valueOf(): string {\n return this.toString();\n }\n\n lighten(percent: number): string {\n return this.color\n .lighten(percent / 100)\n .hex()\n .toLowerCase();\n }\n\n darken(percent: number): string {\n return this.color\n .darken(percent / 100)\n .hex()\n .toLowerCase();\n }\n\n rgb(): string {\n return `${this.red} ${this.green} ${this.blue}`;\n }\n\n rgba(alpha?: number): string {\n const colorValues = this.color.object();\n const alphaValue = alpha || colorValues.alpha;\n const rgb = this.rgb();\n\n if (alphaValue === undefined) {\n return rgb;\n }\n\n return `${rgb} / ${Number(alphaValue).toFixed(2)}`;\n }\n\n hsl(): string {\n return this.color.hsl().round().toString();\n }\n\n hex(): string {\n return this.color.hex().toLowerCase();\n }\n\n saturate(value: number): string {\n return this.color\n .saturate(value / 100)\n .hex()\n .toLowerCase();\n }\n\n desaturate(value: number): string {\n return this.color\n .desaturate(value / 100)\n .hex()\n .toLowerCase();\n }\n\n modify(field: string, value: number): string {\n switch (field) {\n case 'red':\n case 'green':\n case 'blue':\n case 'alpha':\n case 'hue':\n case 'lightness':\n break;\n\n case 'saturation':\n return this.color.saturationl(value).hex();\n\n default:\n return this.toString();\n }\n\n const color = this.color[field](value);\n\n return field === 'alpha' ? color.string() : color.hex();\n }\n\n extract(field: string): string {\n switch (field) {\n case 'red':\n case 'green':\n case 'blue':\n case 'alpha':\n case 'hue':\n case 'lightness':\n break;\n\n case 'saturation':\n return this.color.saturationl().toString();\n\n default:\n return this.toString();\n }\n\n return this.color[field]().toString();\n }\n\n mix(color2: ThemeColor, ratio: number): string {\n const c1 = this.color;\n const c2 = color2.color;\n const [r1, g1, b1] = c1.rgb().array();\n const [r2, g2, b2] = c2.rgb().array();\n\n const mixedColor = Color.rgb([\n mix(r1, r2, ratio),\n mix(g1, g2, ratio),\n mix(b1, b2, ratio),\n ]).alpha(mix(c1.alpha(), c2.alpha(), ratio));\n\n return c1.alpha() !== 1 ? mixedColor.string() : mixedColor.hex();\n }\n\n contrast(color2: ThemeColor): string {\n return this.color.contrast(color2.color).toFixed(1);\n }\n\n /**\n * Color perceived brightness/difference algorithms from https://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n */\n\n difference(color2: ThemeColor): number {\n const [r1, g1, b1] = this.color.rgb().array();\n const [r2, g2, b2] = color2.color.rgb().array();\n return diff(r1, r2) + diff(g1, g2) + diff(b1, b2);\n }\n\n brightness(): number {\n return (this.red * 299 + this.green * 587 + this.blue * 114) / 1000;\n }\n\n brightnessDifference(color2: ThemeColor): number {\n return (\n Math.max(this.brightness(), color2.brightness()) -\n Math.min(this.brightness(), color2.brightness())\n );\n }\n}\n\nfunction mix(a: number, b: number, r: number): number {\n return (a * r + b * (100 - r)) / 100;\n}\n\nfunction diff(v1: number, v2: number): number {\n return Math.max(v1, v2) - Math.min(v1, v2);\n}\n\n// function brightness(colorStr: string): number {\n// const [r, g, b] = Color(colorStr).rgb().array();\n// return (r * 299 + g * 587 + b * 114) / 1000;\n// }\n\nfunction isThemeColorLike(value: unknown): value is ThemeColor {\n return (\n typeof value === 'object' &&\n value !== null &&\n Object.hasOwn(value, 'color') &&\n Object.hasOwn(value, 'colorValues') &&\n Object.hasOwn(value, 'red') &&\n Object.hasOwn(value, 'green') &&\n Object.hasOwn(value, 'blue')\n );\n}\n", "import { FILE_DATA_INCLUDE_QUERY } from '../constants';\nimport { logger, createTraceId } from '../utils/logger';\nimport { getKVFlavor } from '../utils/kv-flavor';\nimport { md5 } from '../utils';\n\nimport type { Swell } from '@/api';\nimport { ThemeFileCache, ThemeCache } from '../cache';\nimport type { PutFilesResult } from '../cache';\nimport type {\n SwellCollection,\n SwellThemeConfig,\n SwellThemePreload,\n SwellThemeRecord,\n} from 'types/swell';\n\n// Max individual theme configs to fetch from source when fetching missing data\nconst MAX_INDIVIDUAL_CONFIGS_TO_FETCH = 50;\n\n/**\n * Responsible for loading and managing theme configurations.\n * Uses a single batch loading strategy for optimal performance.\n */\nexport class ThemeLoader {\n private static cache: ThemeCache | null = null;\n private swell: Swell;\n private themeRecord: SwellThemeRecord | null = null;\n private configs: Map<string, SwellThemeConfig>;\n\n constructor(swell: Swell) {\n this.swell = swell;\n this.configs = new Map();\n }\n\n /**\n * Initialize the theme loader with all configurations.\n * Either uses provided configs (editor mode) or loads from storage.\n */\n async init(themeConfigs?: Map<string, SwellThemeConfig>): Promise<void> {\n if (themeConfigs) {\n this.setConfigs(themeConfigs);\n return;\n }\n\n if (!this.getThemeId()) {\n logger.debug('[ThemeLoader] No theme ID, skipping init');\n return;\n }\n\n await this.loadAllConfigs();\n await this.loadThemeRecord();\n\n logger.info('[ThemeLoader] Initialization complete', {\n configCount: this.configs.size,\n themeId: this.getThemeId(),\n });\n }\n\n getThemeRecord(): SwellThemeRecord | null {\n return this.themeRecord ?? null;\n }\n\n /**\n * Get a single config by file path (synchronous).\n * Returns null if config not found.\n */\n getConfig(filePath: string): SwellThemeConfig | null {\n return this.configs.get(filePath) ?? null;\n }\n\n /**\n * Get all loaded configs.\n * Used by theme getter to expose configs to editor/tests.\n */\n getConfigs(): Map<string, SwellThemeConfig> {\n return this.configs;\n }\n\n /**\n * Get multiple configs by path pattern (synchronous).\n * Filters configs by prefix and optional suffix.\n */\n getConfigsByPath(\n pathPrefix: string,\n pathSuffix?: string,\n ): SwellThemeConfig[] {\n const results: SwellThemeConfig[] = [];\n for (const [path, config] of this.configs) {\n if (\n path.startsWith(pathPrefix) &&\n (!pathSuffix || path.endsWith(pathSuffix))\n ) {\n results.push(config);\n }\n }\n return results;\n }\n\n /**\n * Load theme configs from internal data, typically in the editor.\n * Used when configs are provided externally (e.g., from editor).\n */\n setConfigs(themeConfigs: Map<string, SwellThemeConfig>): void {\n this.configs = new Map(themeConfigs);\n }\n\n /**\n * Load theme record from internal data, typically in the editor.\n * Used when theme record is provided externally (e.g., from editor).\n */\n setThemeRecord(themeRecord: SwellThemeRecord) {\n this.themeRecord = themeRecord;\n }\n\n /**\n * Updates KV with file_data for provided theme configs (warmup path).\n * Uses the new ThemeFileStorage abstraction for optimized operations.\n */\n async updateThemeCache(payload: SwellThemePreload): Promise<PutFilesResult> {\n const configs = payload?.configs || [];\n\n if (configs.length === 0) {\n logger.debug('[ThemeLoader] No configs to cache');\n return { written: 0, skipped: 0, skippedExisting: 0, warnings: [] };\n }\n\n // Use centralized KV flavor detection\n const flavor = getKVFlavor(this.swell.workerEnv);\n const trace = createTraceId();\n logger.info('[ThemeLoader] Starting theme cache update', {\n totalConfigs: configs.length,\n flavor,\n trace,\n });\n\n const storage = new ThemeFileCache(this.swell.workerEnv, flavor);\n const result = await storage.putFiles(configs);\n\n // Log summary with appropriate level based on results\n if (result.warnings.length > 0) {\n logger.warn('[ThemeLoader] Theme cache updated with warnings', {\n total: configs.length,\n written: result.written,\n skipped: result.skipped,\n skippedExisting: result.skippedExisting,\n warnings: result.warnings.length,\n trace,\n });\n } else {\n logger.info('[ThemeLoader] Theme cache updated successfully', {\n total: configs.length,\n written: result.written,\n skipped: result.skipped,\n skippedExisting: result.skippedExisting,\n trace,\n });\n }\n\n return result;\n }\n\n /**\n * Load theme record (/:themes/{themeId}) with caching.\n */\n private async loadThemeRecord(): Promise<SwellThemeRecord | null> {\n const themeId = this.getThemeId();\n if (!themeId) {\n logger.warn('[ThemeLoader] Cannot load theme record: no themeId');\n return null;\n }\n\n const versionHash = this.getThemeVersionHash();\n const cacheKey = this.buildThemeRecordCacheKey(themeId, versionHash);\n const cache = this.getCache();\n\n // 1. Check cache first\n const cached = await cache.get<SwellThemeRecord>(cacheKey);\n if (cached) {\n logger.debug('[ThemeLoader] Theme record cache hit', {\n themeId,\n versionHash,\n });\n this.themeRecord = cached;\n return cached;\n }\n\n // 2. Fetch from API\n logger.debug('[ThemeLoader] Fetching theme record from API', {\n themeId,\n versionHash,\n });\n const record = await this.swell.get<SwellThemeRecord>(\n `/:themes/${themeId}`,\n {\n fields: 'id, name, description, storefront',\n },\n );\n\n // 3. Cache result for future use\n if (record) {\n this.themeRecord = record;\n await cache.set(cacheKey, record);\n }\n\n return record ?? null;\n }\n\n /**\n * Main loading logic - loads all configs at once.\n * 1. Fetches lightweight metadata (cached when possible)\n * 2. Batch hydrates file_data from KV\n * 3. Fetches missing file_data from API if needed\n */\n private async loadAllConfigs(): Promise<void> {\n // Step 1: Get lightweight metadata (cached when possible)\n const configMetadata = await this.fetchConfigMetadata();\n\n if (configMetadata.length === 0) {\n logger.warn('[ThemeLoader] No configs found');\n return;\n }\n\n // Step 2: Filter to only configs eligible for file_data\n const eligibleConfigs = this.filterConfigsForDataInclusion(configMetadata);\n\n logger.debug('[ThemeLoader] Loading configs', {\n total: configMetadata.length,\n eligible: eligibleConfigs.length,\n filtered: configMetadata.length - eligibleConfigs.length,\n });\n\n // Step 3: Batch hydrate file_data from KV (only for eligible configs)\n const flavor = getKVFlavor(this.swell.workerEnv);\n const storage = new ThemeFileCache(this.swell.workerEnv, flavor);\n const kvHydrated = await storage.getFiles(eligibleConfigs);\n\n // Step 4: Ensure all eligible configs have data (fetch missing from API if needed)\n const completeConfigs = await this.ensureConfigsHaveData(kvHydrated);\n\n // Step 5: Store in memory for fast access\n for (const config of completeConfigs) {\n this.configs.set(config.file_path, config);\n }\n\n logger.info('[ThemeLoader] All configs loaded', {\n total: completeConfigs.length,\n withData: completeConfigs.filter((c) => c.file_data).length,\n });\n }\n\n /**\n * Fetch lightweight config metadata from API or cache.\n * Does NOT include file_data to minimize payload size.\n */\n private async fetchConfigMetadata(): Promise<SwellThemeConfig[]> {\n const query = {\n ...this.themeVersionQueryFilter(),\n limit: 1000,\n type: 'theme',\n fields: 'id, name, type, file, file_path, hash',\n };\n\n const versionHash = this.getThemeVersionHash();\n const cacheKey = this.buildMetadataCacheKey(versionHash, query);\n const cache = this.getCache();\n\n // Check cache first - version-based, valid forever for that version\n const cached = await cache.get<SwellThemeConfig[]>(cacheKey);\n if (cached) {\n logger.debug('[ThemeLoader] Config metadata cache hit');\n return cached;\n }\n\n logger.debug('[ThemeLoader] Fetching config metadata from API');\n const response = await this.swell.get<SwellCollection<SwellThemeConfig>>(\n '/:themes:configs',\n query,\n );\n\n const configs = response?.results || [];\n\n // Cache for this version\n await cache.set(cacheKey, configs);\n\n return configs;\n }\n\n /**\n * Helper to ensure all configs have file_data.\n * Fetches missing data from API and updates KV cache.\n */\n private async ensureConfigsHaveData(\n configs: SwellThemeConfig[],\n ): Promise<SwellThemeConfig[]> {\n const missingData = configs.filter((c) => !c.file_data);\n\n if (missingData.length === 0) {\n logger.debug('[ThemeLoader] All configs have file_data from KV');\n return configs;\n }\n\n const trace = createTraceId();\n\n logger.info(\n `[ThemeLoader] Loading ${missingData.length} missing file_data from API`,\n { trace },\n );\n\n // Fetch from API with file_data\n const hashes = missingData.map((c) => c.hash);\n const apiResponse = await this.fetchThemeConfigsFromSource(hashes);\n const fetched = apiResponse.results || [];\n\n logger.info(`[ThemeLoader] Fetched ${fetched.length} configs from API`, {\n trace,\n });\n\n // Cache for next time\n if (fetched.length > 0) {\n const cacheResult = await this.updateThemeCache({\n api: 1, // Required by SwellThemePreload type\n configs: fetched,\n });\n\n if (cacheResult.warnings.length > 0) {\n logger.warn('[ThemeLoader] Some files had size issues', {\n warnings: cacheResult.warnings.length,\n });\n }\n }\n\n // Merge results\n const fetchedMap = new Map(fetched.map((c) => [c.hash, c]));\n const mergedConfigs = configs.map((config) => {\n if (!config.file_data) {\n const withData = fetchedMap.get(config.hash);\n if (withData?.file_data) {\n return { ...config, file_data: withData.file_data };\n }\n }\n return config;\n });\n\n // Log final status\n const stillMissing = mergedConfigs.filter((c) => !c.file_data).length;\n if (stillMissing > 0) {\n logger.warn(\n `[ThemeLoader] ${stillMissing} configs still missing file_data after fetch`,\n );\n }\n\n return mergedConfigs;\n }\n\n /**\n * Fetches theme configs with file_data from Swell Backend API.\n * Used to retrieve missing file_data for configs.\n */\n private async fetchThemeConfigsFromSource(\n configHashes: string[] | undefined = undefined,\n ): Promise<SwellCollection<SwellThemeConfig>> {\n configHashes = configHashes || [];\n\n const { swellHeaders } = this.swell;\n const version = String(swellHeaders['theme-config-version']);\n\n // Determine whether we need to fetch all or just some of the theme configs\n const fetchAll =\n configHashes.length === 0 ||\n configHashes.length > MAX_INDIVIDUAL_CONFIGS_TO_FETCH;\n\n logger.debug(\n `[ThemeLoader] Fetching ${fetchAll ? 'all' : configHashes.length} configs with file_data`,\n { version },\n );\n\n const configs = await this.swell.get<SwellCollection<SwellThemeConfig>>(\n '/:themes:configs',\n {\n ...this.themeVersionQueryFilter(),\n ...(fetchAll ? undefined : { hash: { $in: configHashes } }),\n limit: 1000,\n type: 'theme',\n fields: 'name, file, file_path, hash',\n include: { file_data: FILE_DATA_INCLUDE_QUERY },\n },\n );\n\n return configs as SwellCollection<SwellThemeConfig>;\n }\n\n /**\n * Get the current theme ID from headers.\n */\n private getThemeId(): string | undefined {\n return this.swell.swellHeaders['theme-id'];\n }\n\n /**\n * Get the current theme version hash from headers.\n */\n private getThemeVersionHash(): string | undefined {\n return this.swell.swellHeaders['theme-version-hash'];\n }\n\n /**\n * Generate a Swell API query filter for this theme version.\n */\n private themeVersionQueryFilter(): Record<string, unknown> {\n const { swellHeaders } = this.swell;\n const themeId = swellHeaders['theme-id'];\n\n if (!themeId) {\n throw new Error('Theme ID is required');\n }\n\n return {\n parent_id: themeId,\n branch_id: swellHeaders['theme-branch-id'] || null,\n preview:\n swellHeaders['deployment-mode'] === 'editor' ||\n swellHeaders['deployment-mode'] === 'preview'\n ? true\n : { $ne: true },\n };\n }\n\n /**\n * Check if a config should have file_data based on FILE_DATA_INCLUDE_QUERY rules.\n * This mirrors the server-side logic to avoid fetching data for configs that won't have it.\n */\n private shouldIncludeFileData(config: SwellThemeConfig): boolean {\n const { file_path, file } = config;\n\n // File path conditions - must match at least one\n const pathConditionMet =\n !/^theme\\/assets\\//.test(file_path) || // NOT in theme/assets/\n /\\.liquid$/.test(file_path) || // ends with .liquid\n /\\.(css|js|svg|png|jpg)$/.test(file_path); // ends with .css/.js/.svg/.png/.jpg\n\n // Content type conditions - must match at least one\n const contentTypeMet =\n (!file.content_type?.startsWith('image') &&\n !file.content_type?.startsWith('video')) || // NOT image AND NOT video\n file.content_type?.startsWith('image/svg') || // OR is SVG\n file.content_type?.startsWith('image/png') || // OR is PNG\n file.content_type?.startsWith('image/jpeg'); // OR is JPG\n // Both conditions must be satisfied\n return pathConditionMet && contentTypeMet;\n }\n\n /**\n * Filter configs to only those eligible for file_data.\n * Aligns with FILE_DATA_INCLUDE_QUERY server-side logic.\n */\n private filterConfigsForDataInclusion(\n configs: SwellThemeConfig[],\n ): SwellThemeConfig[] {\n return configs.filter((config) => this.shouldIncludeFileData(config));\n }\n\n /**\n * Build cache key with tenant isolation for metadata\n */\n private buildMetadataCacheKey(\n version: string | undefined,\n query: Record<string, unknown>,\n ): string {\n // Hash all args including instanceId for tenant isolation\n const args = [this.swell.instanceId, version || 'default', query];\n return `theme_configs:${md5(JSON.stringify(args))}`;\n }\n\n /**\n * Build cache key for theme record.\n */\n private buildThemeRecordCacheKey(\n themeId: string,\n version: string | undefined,\n ): string {\n const args = [this.swell.instanceId, themeId, version || 'default'];\n return `theme_record:${md5(JSON.stringify(args))}`;\n }\n\n /**\n * Get or create the theme cache instance\n */\n private getCache(): ThemeCache {\n if (!ThemeLoader.cache) {\n ThemeLoader.cache = new ThemeCache({\n kvStore: this.swell.workerEnv?.THEME,\n workerCtx: this.swell.workerCtx,\n });\n }\n return ThemeLoader.cache;\n }\n}\n", "import { trimEnd } from 'lodash-es';\n\nimport RenderDrop from './liquid/drops/render';\nimport RobotsRule from './compatibility/drops/robots-rule';\nimport ShopifyImage from './compatibility/shopify-objects/image';\n\nimport type {\n ThemeGlobals,\n SwellData,\n SwellSettingsGeo,\n SwellSettingsGeoState,\n} from 'types/swell';\n\nimport type { ShopifyRobots } from 'types/shopify';\nimport type { SwellTheme } from './theme';\n\nasync function getFirstFilledValue(values: unknown[]): Promise<unknown> {\n for (const promise of values) {\n const value = await promise;\n\n if (value) {\n return value;\n }\n }\n}\n\nexport function getRecordGlobals(\n theme: SwellTheme,\n record: Record<string, unknown>,\n): Partial<ThemeGlobals> {\n const globals: Partial<ThemeGlobals> = {};\n\n globals.handle = new RenderDrop(() => record.slug);\n\n globals.page_title = new RenderDrop(() =>\n getFirstFilledValue([\n record.meta_title, // filled SEO\n record.name, // all records\n record.title, // content/pages, content/blogs, content/blog-categories\n theme.page?.title, // default page title\n theme.globals.store?.name, // fallback to store name\n ]),\n );\n\n globals.page_description = new RenderDrop(() =>\n getFirstFilledValue([\n record.meta_description, // filled SEO\n record.description, // product and category\n record.summary, // content/blogs\n theme.page?.description,\n ]),\n );\n\n globals.page_image = new RenderDrop(() =>\n getFirstFilledValue([\n record.images, // product and category\n record.image, // article\n ]).then((images) => {\n if (typeof images !== 'object' || images === null) {\n return;\n }\n\n const image: SwellData | undefined = Array.isArray(images)\n ? (images[0] as SwellData | undefined)\n : images;\n\n return image ? ShopifyImage(image) : undefined;\n }),\n );\n\n return globals;\n}\n\nexport const POWERED_BY_LINK =\n '<a target=\"_blank\" rel=\"nofollow\" href=\"https://www.swell.is/?utm_campaign=poweredby&amp;utm_medium=swell&amp;utm_source=onlinestore\">Powered by Swell</a>';\n\nexport function getAllCountryOptionTags(geoSettings: SwellSettingsGeo): string {\n if (!geoSettings) {\n return '';\n }\n\n const stateMap = (geoSettings.states || []).reduce((map, state) => {\n let list = map.get(state.country);\n\n if (list === undefined) {\n list = [];\n map.set(state.country, list);\n }\n\n list.push(state);\n\n return map;\n }, new Map<string, SwellSettingsGeoState[]>());\n\n return (geoSettings.countries || [])\n .map((country) => {\n if (!country) return '';\n\n const provinces = (stateMap.get(country.id) || []).map((state) => [\n state.id,\n state.name,\n ]);\n\n const provincesEncoded = JSON.stringify(provinces).replace(\n /\"/g,\n '&quot;',\n );\n\n return `<option value=\"${country.id}\" data-provinces=\"${provincesEncoded}\">${country.name}</option>`;\n })\n .filter(Boolean)\n .join('\\n');\n}\n\nexport function getRobotsGlobals(canonicalUrl: string): ShopifyRobots {\n const sitemapUrl = `${trimEnd(canonicalUrl, '/')}/sitemap.xml`;\n\n const defaultRules = [\n { directive: 'Disallow', value: '/admin' },\n { directive: 'Disallow', value: '/cart' },\n { directive: 'Disallow', value: '/account' },\n { directive: 'Disallow', value: '/search' },\n { directive: 'Disallow', value: '/categories/*sort_by*' },\n { directive: 'Disallow', value: '/*/categories/*sort_by*' },\n ];\n\n return {\n default_groups: [\n {\n user_agent: RobotsRule.from('User-agent', '*'),\n sitemap: RobotsRule.from('Sitemap', sitemapUrl),\n rules: defaultRules.map((rule) =>\n RobotsRule.from(rule.directive, rule.value),\n ),\n },\n {\n user_agent: RobotsRule.from('User-agent', 'AhrefsBot'),\n sitemap: RobotsRule.from('Sitemap', sitemapUrl),\n rules: [\n RobotsRule.from('Crawl-delay', '10'),\n ...defaultRules.map((rule) =>\n RobotsRule.from(rule.directive, rule.value),\n ),\n ],\n },\n {\n user_agent: RobotsRule.from('User-agent', 'AhrefsSiteAudit'),\n sitemap: RobotsRule.from('Sitemap', sitemapUrl),\n rules: [\n RobotsRule.from('Crawl-delay', '10'),\n ...defaultRules.map((rule) =>\n RobotsRule.from(rule.directive, rule.value),\n ),\n ],\n },\n {\n user_agent: RobotsRule.from('User-agent', 'Nutch'),\n rules: [RobotsRule.from('Crawl-delay', '10')],\n },\n {\n user_agent: RobotsRule.from('User-agent', 'MJ12bot'),\n rules: [RobotsRule.from('Crawl-delay', '10')],\n },\n {\n user_agent: RobotsRule.from('User-agent', 'Pinterest'),\n rules: [RobotsRule.from('Crawl-delay', '1')],\n },\n ],\n };\n}\n", "import { Drop } from 'liquidjs';\n\nimport type { ShopifyRule } from 'types/shopify';\n\nexport default class RobotsRule extends Drop implements ShopifyRule {\n static from(directive: string, value: string): RobotsRule {\n return new RobotsRule(directive, value);\n }\n\n constructor(\n public directive: string,\n public value: string,\n ) {\n super();\n }\n\n valueOf(): string {\n return `${this.directive}: ${this.value}\\n`;\n }\n}\n", "import type { Swell } from '@/api';\nimport {\n SwellStorefrontCollection,\n SwellStorefrontRecord,\n StorefrontResource,\n SwellStorefrontSingleton,\n} from '@/resources';\nimport type { SwellCollection, SwellData, SwellRecord } from 'types/swell';\n\n// use getCookie function which is set in swell.storefront\nfunction getCookie(swell: Swell, name: string): string {\n const storefront = swell?.storefront as {\n options?: { getCookie?: (key: string) => string | undefined };\n };\n const getCookie = storefront?.options?.getCookie;\n if (typeof getCookie === 'function') {\n return getCookie(name) || '';\n }\n\n return '';\n}\n\nexport class MockRecordResource extends SwellStorefrontRecord {\n constructor(swell: Swell, slug: string, query: SwellData = {}) {\n super(swell, '', slug, query, async function (): Promise<SwellRecord> {\n const data = await fetchResourceData<SwellRecord>(\n swell,\n this._resourceName,\n slug,\n query,\n );\n\n return compileData(this._resourceName, data, swell, '', slug, query);\n });\n }\n}\n\nexport class MockRecordSingleton extends SwellStorefrontSingleton {\n constructor(swell: Swell, slug: string, query: SwellData = {}) {\n super(swell, '', async function (): Promise<SwellRecord> {\n const data = await fetchResourceData<SwellRecord>(\n swell,\n this._resourceName,\n slug,\n query,\n );\n\n const compiled = compileData<SwellRecord>(\n this._resourceName,\n data,\n swell,\n '',\n slug,\n query,\n );\n\n return compiled;\n });\n }\n}\n\nasync function fetchResourceData<T>(\n swell: Swell,\n resource: string,\n slug?: string,\n query?: SwellData,\n): Promise<T> {\n const params = new URLSearchParams({\n ...(slug && { slug }),\n ...(query && { query: JSON.stringify(query) }),\n });\n\n const search = params.size > 0 ? `?${params}` : '';\n const session = getCookie(swell, 'swell-session');\n const swellData = getCookie(swell, 'swell-data') || {};\n\n const response = await fetch(\n `${swell.storefront_url}/resources/${resource}.json/${search}`,\n {\n headers: {\n 'X-Session': session,\n 'Swell-Data': JSON.stringify(swellData),\n },\n },\n );\n\n return response.json() as T;\n}\n\nfunction compileData<T>(\n resource: string,\n data: object,\n swell: Swell,\n path = '',\n parent_slug: string,\n parent_query: SwellData,\n): T {\n const compiled: Record<string, unknown> = {};\n\n for (const [key, item] of Object.entries(data)) {\n const updatedPath = path + `${path === '' ? '' : '/'}${key}`;\n let handler;\n\n switch (item?._type) {\n case 'SwellStorefrontCollection':\n handler = createCollection;\n break;\n case 'SwellStorefrontRecord':\n handler = createStorefrontRecord;\n break;\n case 'createStorefrontResource':\n handler = createStorefrontResource;\n break;\n default:\n break;\n }\n\n compiled[key] = handler\n ? handler(resource, swell, updatedPath, parent_slug, parent_query)\n : item;\n }\n\n return compiled as T;\n}\n\nfunction createStorefrontResource(\n resource: string,\n swell: Swell,\n path: string,\n parent_slug: string,\n parent_query: SwellData,\n): StorefrontResource {\n return new StorefrontResource(async function (): Promise<SwellData> {\n const data = await fetchResourceDataByPath<SwellRecord>(\n swell,\n resource,\n path,\n parent_slug,\n parent_query,\n );\n return compileData(resource, data, swell, path, parent_slug, parent_query);\n });\n}\n\nfunction createStorefrontRecord(\n resource: string,\n swell: Swell,\n path: string,\n parent_slug: string,\n parent_query: SwellData,\n): SwellStorefrontRecord {\n const query = getResourceQuery(parent_slug, parent_query);\n\n return new SwellStorefrontRecord(\n swell,\n resource,\n path,\n query,\n async function (): Promise<SwellRecord> {\n const data = await fetchResourceDataByPath<SwellRecord>(\n swell,\n resource,\n path,\n parent_slug,\n parent_query,\n );\n\n return compileData<SwellRecord>(\n resource,\n data,\n swell,\n path,\n parent_slug,\n parent_query,\n );\n },\n );\n}\n\nfunction createCollection(\n resource: string,\n swell: Swell,\n path: string,\n parent_slug: string,\n parent_query: SwellData,\n): SwellStorefrontCollection<SwellRecord> {\n const query = getResourceQuery(parent_slug, parent_query);\n // we need to distinguish AccountResource in cache, I add a fictive parameter with resource path\n query.$resource_path = path;\n return new SwellStorefrontCollection<SwellRecord>(\n swell,\n resource,\n query,\n async function (): Promise<SwellCollection<SwellRecord>> {\n const data = await fetchResourceDataByPath<SwellRecord>(\n swell,\n resource,\n path,\n parent_slug,\n parent_query,\n );\n\n return compileData<SwellCollection<SwellRecord>>(\n resource,\n data,\n swell,\n path,\n parent_slug,\n parent_query,\n );\n },\n );\n}\n\nasync function fetchResourceDataByPath<T>(\n swell: Swell,\n resource: string,\n path: string,\n slug?: string,\n query?: SwellData,\n): Promise<T> {\n const params = new URLSearchParams({\n path,\n ...(slug && { slug }),\n ...(query && { query: JSON.stringify(query) }),\n });\n\n const search = params.size > 0 ? `?${params}` : '';\n const session = getCookie(swell, 'swell-session');\n const swellData = getCookie(swell, 'swell-data') || {};\n\n const response = await fetch(\n `${swell.storefront_url}/resources/${resource}.json${search}`,\n {\n headers: {\n 'X-Session': session,\n 'Swell-Data': JSON.stringify(swellData),\n },\n },\n );\n\n return response.json() as T;\n}\n\nfunction getResourceQuery(slug?: string, query?: SwellData): SwellData {\n return {\n ...(slug && { slug }),\n ...query,\n };\n}\n", "import { md5 } from '../../utils';\nimport { logger, createTraceId } from '../../utils/logger';\n\nimport type { CacheBackend, CachedEntry } from './html-cache-backend';\n\nconst CACHE_KEY_ORIGIN = 'https://cache.swell.store';\n\n/**\n * Configuration for path-specific cache behavior.\n *\n * Paths support wildcards:\n * - `*` matches any characters except `/`\n * - `**` matches any characters including `/`\n *\n * Examples: `/account/*`, `/api/**`, `*.json`\n *\n * First matching rule wins.\n */\nexport interface PathRule {\n path: string;\n /** Time-to-live in seconds */\n ttl?: number;\n /** Stale-while-revalidate in seconds */\n swr?: number;\n /** If true, skip caching for this path */\n skip?: boolean;\n /**\n * Optional list of allowed Content-Types for caching.\n *\n * If provided, responses whose Content-Type starts with one of these values are cacheable.\n *\n * If omitted, defaults to only allowing `text/html`.\n */\n contentTypes?: string[];\n}\n\nexport interface CacheRules {\n defaults: {\n live: { ttl: number; swr: number };\n preview: { ttl: number; swr: number };\n };\n pathRules?: PathRule[];\n}\n\nexport const DEFAULT_CACHE_RULES: CacheRules = {\n defaults: {\n live: { ttl: 20, swr: 60 * 60 * 24 * 7 }, // 20s TTL, 1 week SWR\n preview: { ttl: 10, swr: 60 * 60 * 24 * 7 }, // 10s TTL, 1 week SWR\n },\n pathRules: [{ path: '/checkout/*', skip: true }],\n};\n\ninterface PathRuleInner extends PathRule {\n regex: RegExp;\n}\n\ninterface CacheRulesInner {\n defaults: {\n live: { ttl: number; swr: number };\n preview: { ttl: number; swr: number };\n };\n pathRules?: PathRuleInner[];\n}\n\ntype DeploymentMode = 'live' | 'preview';\n\nexport interface CacheResult {\n found: boolean;\n stale?: boolean;\n response?: Response;\n cacheable?: boolean;\n age?: number;\n notModified?: boolean;\n conditional304?: Response;\n}\n\nconst SANITIZE_CLIENT_HEADERS = Object.freeze([\n 'connection',\n 'proxy-connection',\n 'keep-alive',\n 'transfer-encoding',\n 'upgrade',\n 'proxy-authenticate',\n 'proxy-authorization',\n 'te',\n 'trailers',\n 'via',\n 'alt-svc',\n 'content-length',\n 'content-encoding',\n // Also strip any legacy internal metadata keys\n 'x-original-ttl',\n 'x-original-swr',\n 'x-cache-time',\n]);\n\nconst CACHE_KEY_HEADERS = Object.freeze([\n 'cookie',\n 'swell-storefront-id',\n 'swell-app-id',\n 'swell-access-token',\n 'swell-theme-version-hash',\n 'swell-cache-modified',\n 'x-locale',\n 'swell-storefront-context',\n]);\n\n/**\n * Contains all the storage-agnostic HTML caching logic.\n * It determines what to cache, for how long, how to build cache keys,\n * and how to construct client responses, while delegating the actual\n * read/write operations to a pluggable backend.\n */\nexport class HtmlCache {\n protected epoch: string;\n protected backend: CacheBackend;\n protected cacheRules: CacheRulesInner;\n\n constructor(\n epoch: string,\n backend: CacheBackend,\n cacheRules: CacheRules = DEFAULT_CACHE_RULES,\n ) {\n this.epoch = epoch;\n this.backend = backend;\n\n this.cacheRules = {\n ...cacheRules,\n pathRules: cacheRules.pathRules?.map((rule) => ({\n ...rule,\n regex: this.convertPathToRegex(rule.path),\n })),\n };\n }\n\n /**\n * Converts wildcard pattern to regex and tests against path.\n *\n * - `*` matches any characters except `/`\n * - `**` matches any characters including `/`\n */\n protected convertPathToRegex(pattern: string): RegExp {\n // Escape special regex chars except * and /\n const regex = pattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&') // Escape special chars\n .replace(/\\*\\*/g, '___DOUBLE_STAR___') // Temporarily replace **\n .replace(/\\*/g, '[^/]*') // * matches anything except /\n .replace(/___DOUBLE_STAR___/g, '.*'); // ** matches anything\n\n return new RegExp(`^${regex}$`);\n }\n\n async get(request: Request): Promise<CacheResult | null> {\n const trace = createTraceId();\n\n if (!this.canReadFromCache(request)) {\n logger.debug('[SDK Html-cache] non-cacheable request', { trace });\n return { found: false, cacheable: false };\n }\n\n try {\n const cacheKey = this.buildCacheKey(request);\n const entry = await this.backend.read(cacheKey);\n\n if (!entry) {\n logger.debug('[SDK Html-cache] cacheable, MISS', { trace });\n return { found: false, cacheable: true };\n }\n\n const age = this.getEntryAge(entry);\n const { ttl, swr } = entry;\n\n const isStale = age >= ttl;\n const isExpired = age >= ttl + swr;\n\n if (!isExpired) {\n logger.debug('[SDK Html-cache] cacheable, HIT', {\n stale: isStale,\n age,\n trace,\n });\n\n const clientResponse = this.buildClientResponse(entry, isStale, age);\n\n return {\n found: true,\n stale: isStale,\n response: clientResponse,\n cacheable: true,\n age: Math.floor(age),\n };\n }\n\n logger.debug('[SDK Html-cache] cacheable, hit, expired', { trace });\n return { found: false, cacheable: true };\n } catch (e) {\n logger.warn('[SDK Html-cache] get failed', {\n trace,\n error: e instanceof Error ? e.message : String(e),\n });\n return null;\n }\n }\n\n async getWithConditionals(request: Request): Promise<CacheResult | null> {\n const result = await this.get(request);\n\n if (!result?.found || result.stale) {\n return result;\n }\n\n const ifModifiedSince = request.headers.get('If-Modified-Since');\n const ifNoneMatch = request.headers.get('If-None-Match');\n\n if ((ifModifiedSince || ifNoneMatch) && result.response) {\n const lastModified = result.response.headers.get('Last-Modified');\n const etag = result.response.headers.get('ETag');\n\n if (\n this.checkNotModified(ifModifiedSince, ifNoneMatch, lastModified, etag)\n ) {\n result.notModified = true;\n result.conditional304 = new Response(null, {\n status: 304,\n headers: {\n 'Last-Modified': lastModified || '',\n ETag: etag || '',\n 'Cache-Control': result.response.headers.get('Cache-Control') || '',\n 'Cloudflare-CDN-Cache-Control':\n result.response.headers.get('Cloudflare-CDN-Cache-Control') || '',\n 'X-Cache-Status': 'HIT-304',\n },\n });\n }\n }\n\n return result;\n }\n\n async put(request: Request, response: Response): Promise<void> {\n const trace = createTraceId();\n\n if (!this.canWriteToCache(request, response)) {\n logger.debug('[SDK Html-cache] put skipped, non-cacheable', { trace });\n return;\n }\n\n try {\n const cacheKey = this.buildCacheKey(request);\n const ttl = this.getTTLForRequest(request);\n const swr = this.getSWRForRequest(request);\n // Don't clone here - the response passed in is already dedicated for caching\n const body = await response.text();\n\n if (!body || body.trim().length === 0) {\n logger.warn(\n '[SDK Html-cache] put skipped, empty or minimal response body',\n {\n trace,\n bodyLength: body.length,\n },\n );\n return;\n }\n\n const date = new Date();\n const headers = this.normalizeHeaders(response.headers);\n\n const entry: CachedEntry = {\n status: response.status,\n statusText: response.statusText,\n headers,\n body,\n cacheTimeISO: date.toISOString(),\n ttl,\n swr,\n etag: this.quoteETag(headers['etag'] || md5(body)),\n lastModifiedUTC: headers['last-modified'] || date.toUTCString(),\n };\n\n const hardExpireSeconds = ttl + swr;\n\n await this.backend.write(cacheKey, entry, hardExpireSeconds);\n logger.debug('[SDK Html-cache] put done', { trace });\n } catch (e) {\n logger.warn('[SDK Html-cache] put failed', {\n trace,\n error: e instanceof Error ? e.message : String(e),\n });\n }\n }\n\n public async delete(requestOrKey: Request | string): Promise<void> {\n try {\n const key =\n typeof requestOrKey === 'string'\n ? requestOrKey\n : this.buildCacheKey(requestOrKey);\n if (this.backend.delete) {\n await this.backend.delete(key);\n }\n } catch (e) {\n logger.warn('[SDK Html-cache] delete failed', {\n error: e instanceof Error ? e.message : String(e),\n });\n }\n }\n\n public canReadFromCache(request: Request): boolean {\n switch (request.method.toUpperCase()) {\n case 'GET':\n case 'HEAD':\n break;\n\n default:\n return false;\n }\n\n const res = this.resolvePathRule(request);\n if (res.skip) return false;\n return this.isRequestCacheable(request);\n }\n\n public canWriteToCache(request: Request, response: Response): boolean {\n const method = request.method.toUpperCase();\n if (method !== 'GET' || !response.ok) return false;\n const res = this.resolvePathRule(request);\n if (res.skip) return false;\n if (!this.isRequestCacheable(request)) return false;\n return this.isResponseCacheable(response, res.rule);\n }\n\n public createRevalidationRequest(request: Request): Request {\n const headers = new Headers(request.headers);\n headers.set('X-Cache-Bypass', 'revalidation');\n headers.delete('If-None-Match');\n headers.delete('If-Modified-Since');\n headers.delete('Cache-Control');\n headers.delete('Pragma');\n\n return new Request(request.url, {\n method: 'GET',\n headers,\n });\n }\n\n protected buildClientResponse(\n entry: CachedEntry,\n isStale: boolean,\n age: number,\n ): Response {\n const headers = new Headers(entry.headers);\n\n headers.set('Cache-Control', 'public, max-age=1, must-revalidate');\n headers.set(\n 'Cloudflare-CDN-Cache-Control',\n `public, s-maxage=${entry.ttl}, stale-while-revalidate=${entry.swr}, stale-if-error=60`,\n );\n\n if (entry.lastModifiedUTC) {\n headers.set('Last-Modified', entry.lastModifiedUTC);\n }\n if (entry.etag) {\n headers.set('ETag', entry.etag);\n }\n\n headers.set('X-Cache-Status', isStale ? 'STALE' : 'HIT');\n headers.set('X-Cache-Age', Math.floor(age).toString());\n\n this.sanitizeClientHeaders(headers);\n\n return new Response(entry.body, {\n status: entry.status,\n statusText: entry.statusText,\n headers,\n });\n }\n\n protected buildCacheKey(request: Request): string {\n const url = new URL(request.url);\n const versionHash = this.generateVersionHash(request.headers);\n const normalizedQuery = this.normalizeSearchParams(url.searchParams);\n const cacheKeyPath = `${versionHash}${url.pathname}`;\n const keyUrl = new URL(`${CACHE_KEY_ORIGIN}${cacheKeyPath}`);\n\n if (normalizedQuery) {\n keyUrl.search = `?${normalizedQuery}`;\n }\n\n // The full URL string is the logical cache key.\n // Backends can hash it if they have key length limitations.\n return keyUrl.toString();\n }\n\n protected checkNotModified(\n ifModifiedSince: string | null,\n ifNoneMatch: string | null,\n lastModified: string | null,\n etag: string | null,\n ): boolean {\n if (this.ifNoneMatchMatches(ifNoneMatch, etag)) {\n return true;\n }\n if (ifModifiedSince && lastModified) {\n try {\n const ifModDate = new Date(ifModifiedSince);\n const lastModDate = new Date(lastModified);\n if (\n Number.isNaN(ifModDate.getTime()) ||\n Number.isNaN(lastModDate.getTime())\n ) {\n return false;\n }\n return ifModDate >= lastModDate;\n } catch {\n return false;\n }\n }\n return false;\n }\n\n protected ifNoneMatchMatches(\n ifNoneMatch: string | null,\n etag: string | null,\n ): boolean {\n if (!ifNoneMatch || !etag) return false;\n const header = ifNoneMatch.trim();\n if (header === '*') return true;\n const tokens = header.split(',').map((t) => t.trim());\n const normalizedEtag = etag.replace(/^W\\//, '');\n\n for (const token of tokens) {\n if (token === etag) return true;\n const normalizedToken = token.replace(/^W\\//, '');\n if (normalizedToken === normalizedEtag) return true;\n }\n return false;\n }\n\n protected quoteETag(value: string): string {\n if (!value) return value;\n if (value.startsWith('\"') || value.startsWith('W/\"')) return value;\n if (value.startsWith('W/')) return `W/\"${value.slice(2)}\"`;\n return `\"${value}\"`;\n }\n\n protected sanitizeClientHeaders(headers: Headers): void {\n for (const name of SANITIZE_CLIENT_HEADERS) {\n headers.delete(name);\n }\n }\n\n public getCacheKeyHeaders(headers: Headers): Headers {\n const acc = new Headers();\n\n for (const name of CACHE_KEY_HEADERS) {\n const value = headers.get(name);\n\n if (value) {\n acc.set(name, value);\n }\n }\n\n return acc;\n }\n\n protected generateVersionHash(headers: Headers): string {\n const swellData = this.extractSwellData(headers.get('cookie'));\n\n const versionFactors = {\n store: headers.get('swell-storefront-id') || '',\n app: headers.get('swell-app-id') || '',\n auth: headers.get('swell-access-token') || '',\n theme: headers.get('swell-theme-version-hash') || '',\n modified: headers.get('swell-cache-modified') || '',\n currency: (swellData['swell-currency'] as string) || 'USD',\n locale:\n headers.get('x-locale') ||\n (swellData['swell-locale'] as string) ||\n 'en-US',\n context: headers.get('swell-storefront-context'),\n epoch: this.epoch,\n };\n\n return md5(JSON.stringify(versionFactors));\n }\n\n protected extractSwellData(cookie: string | null): Record<string, unknown> {\n if (!cookie) return {};\n const swellDataMatch = cookie.match(/swell-data=([^;]+)/);\n if (!swellDataMatch) return {};\n try {\n return (\n (JSON.parse(decodeURIComponent(swellDataMatch[1])) as Record<\n string,\n unknown\n >) || {}\n );\n } catch {\n return {};\n }\n }\n\n protected isRequestCacheable(request: Request): boolean {\n if (request.headers.get('swell-deployment-mode') === 'editor') return false;\n\n if (request.headers.get('cache-control')?.includes('no-cache'))\n return false;\n\n // Reject caching if critical headers are missing to prevent cache poisoning\n const storefrontId = request.headers.get('swell-storefront-id');\n const themeVersionHash = request.headers.get('swell-theme-version-hash');\n\n if (!storefrontId || !themeVersionHash) {\n return false;\n }\n\n return true;\n }\n\n protected isResponseCacheable(\n response: Response,\n matchedRule?: PathRule,\n ): boolean {\n const contentType = response.headers.get('content-type') || '';\n const allowed = matchedRule?.contentTypes;\n if (Array.isArray(allowed) && allowed.length > 0) {\n const ok = allowed.some((ct) => contentType.toLowerCase().startsWith(ct));\n if (!ok) return false;\n } else {\n if (!contentType.includes('text/html')) return false;\n }\n if (response.headers.get('set-cookie')) return false;\n const cacheControl = response.headers.get('cache-control');\n if (cacheControl?.includes('no-store') || cacheControl?.includes('private'))\n return false;\n return true;\n }\n\n protected getDeploymentMode(headers: Headers): DeploymentMode {\n const mode = headers.get('swell-deployment-mode');\n // Editor mode is never cacheable, so we treat it as live for defaults\n return mode === 'preview' ? 'preview' : 'live';\n }\n\n protected getTTLForRequest(request: Request): number {\n return this.resolvePathRule(request).effectiveTTL;\n }\n\n protected getSWRForRequest(request: Request): number {\n return this.resolvePathRule(request).effectiveSWR;\n }\n\n protected getEntryAge(entry: CachedEntry): number {\n const t = Date.parse(entry.cacheTimeISO);\n if (Number.isNaN(t)) return Infinity;\n const age = (Date.now() - t) / 1000;\n return age < 0 ? 0 : age;\n }\n\n protected normalizeHeaders(headers: Headers): Record<string, string> {\n const normalized: Record<string, string> = {};\n headers.forEach((value, key) => {\n normalized[key.toLowerCase()] = value;\n });\n return normalized;\n }\n\n protected resolvePathRule(request: Request): {\n rule?: PathRule;\n mode: 'live' | 'preview';\n effectiveTTL: number;\n effectiveSWR: number;\n skip: boolean;\n } {\n const url = new URL(request.url);\n const mode = this.getDeploymentMode(request.headers);\n const defaults =\n this.cacheRules.defaults?.[mode] ?? DEFAULT_CACHE_RULES.defaults?.[mode];\n\n const rule = this.cacheRules.pathRules?.find((r) =>\n r.regex.test(url.pathname),\n );\n\n const effectiveTTL =\n (rule?.ttl !== undefined ? rule.ttl : defaults?.ttl) ?? defaults.ttl;\n const effectiveSWR =\n (rule?.swr !== undefined ? rule.swr : defaults?.swr) ?? defaults.swr;\n\n return {\n rule,\n mode,\n effectiveTTL,\n effectiveSWR,\n skip: Boolean(rule?.skip),\n };\n }\n\n protected normalizeSearchParams(searchParams: URLSearchParams): string {\n const relevantParams: string[] = [];\n\n searchParams.forEach((value, key) => {\n switch (key) {\n case 'utm_source':\n case 'utm_medium':\n case 'utm_campaign':\n case 'utm_content':\n case 'utm_term':\n case 'fbclid':\n case 'gclid':\n case 'gbraid':\n case 'wbraid':\n case 'ref':\n case 'source':\n case 'mc_cid':\n case 'mc_eid':\n // Ignore params\n break;\n\n default: {\n relevantParams.push(\n `${encodeURIComponent(key)}=${encodeURIComponent(value)}`,\n );\n\n break;\n }\n }\n });\n\n return relevantParams.sort().join('&');\n }\n}\n", "import type { CacheBackend, CachedEntry } from './html-cache-backend';\n\nimport { md5 } from '../../utils';\n\ntype KVNamespace = import('@cloudflare/workers-types').KVNamespace;\n\ntype KVValueV1 = {\n v: 1;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n body: string;\n cacheTimeISO: string;\n ttl: number;\n swr: number;\n etag?: string;\n lastModifiedUTC?: string;\n};\n\ntype KVMetaV1 = {\n v: 1;\n cacheTimeISO: string;\n ttl: number;\n swr: number;\n etag?: string;\n lastModifiedUTC?: string;\n};\n\nexport type KVCacheBackendOptions = {\n /**\n * Optional key prefix to help with namespacing and easier debugging.\n * Example: \"html\" -> \"html:<hash>\"\n */\n prefix?: string;\n\n /**\n * If true (default), the logical key will be hashed with md5 to ensure\n * it stays under the 512-byte KV key length limit and is URL-safe.\n */\n hashKeys?: boolean;\n\n /**\n * Safety headroom against the 25 MiB KV value limit.\n * Default ~24.5 MiB to leave some slack for encoding overhead.\n */\n maxValueBytes?: number;\n};\n\n/**\n * Cloudflare KV implementation of CacheBackend.\n * Stores the entire CachedEntry as a compact JSON blob (value),\n * and a tiny summary in metadata for potential future use.\n */\nexport class KVCacheBackend implements CacheBackend {\n private readonly kv: KVNamespace;\n private readonly prefix: string | undefined;\n private readonly hashKeys: boolean;\n private readonly maxValueBytes: number;\n\n constructor(kv: KVNamespace, opts: KVCacheBackendOptions = {}) {\n this.kv = kv;\n this.prefix = opts.prefix;\n this.hashKeys = opts.hashKeys !== false; // default true\n this.maxValueBytes = opts.maxValueBytes ?? Math.floor(24.5 * 1024 * 1024);\n }\n\n async read(key: string): Promise<CachedEntry | null> {\n const kvKey = this.makeKey(key);\n const value = await this.kv.get<KVValueV1>(kvKey, 'json');\n if (!value) return null;\n\n // Headers were stored as plain object; keep them as-is (lowercased recommended upstream)\n const entry: CachedEntry = {\n status: value.status,\n statusText: value.statusText,\n headers: value.headers,\n body: value.body,\n cacheTimeISO: value.cacheTimeISO,\n ttl: value.ttl,\n swr: value.swr,\n etag: value.etag,\n lastModifiedUTC: value.lastModifiedUTC,\n };\n return entry;\n }\n\n async write(\n key: string,\n entry: CachedEntry,\n hardExpireSeconds: number,\n ): Promise<void> {\n const kvKey = this.makeKey(key);\n\n // Persist the full entry as value JSON\n const payload: KVValueV1 = {\n v: 1,\n status: entry.status,\n statusText: entry.statusText,\n headers: entry.headers,\n body: entry.body,\n cacheTimeISO: entry.cacheTimeISO,\n ttl: entry.ttl,\n swr: entry.swr,\n etag: entry.etag,\n lastModifiedUTC: entry.lastModifiedUTC,\n };\n\n const json = JSON.stringify(payload);\n this.assertSize(json);\n\n // Keep a tiny summary in metadata (\u2264 1 KB)\n const metadata: KVMetaV1 = {\n v: 1,\n cacheTimeISO: entry.cacheTimeISO,\n ttl: entry.ttl,\n swr: entry.swr,\n etag: entry.etag,\n lastModifiedUTC: entry.lastModifiedUTC,\n };\n\n await this.kv.put(kvKey, json, {\n expirationTtl: hardExpireSeconds + 60, // natural hard expiry after SWR + grace period\n metadata,\n });\n }\n\n async delete(key: string): Promise<void> {\n const kvKey = this.makeKey(key);\n await this.kv.delete(kvKey);\n }\n\n // ---- private helpers ----\n\n private makeKey(raw: string): string {\n const core = this.hashKeys ? md5(raw) : raw;\n return this.prefix ? `${this.prefix}:${core}` : core;\n }\n\n private assertSize(json: string) {\n // UTF-8 byte length (fast path; JS strings are UTF-16 but this is close enough for HTML.\n // If you need exact, use new TextEncoder().encode(json).length).\n const bytes =\n typeof TextEncoder !== 'undefined'\n ? new TextEncoder().encode(json).length\n : this.approxUtf8Bytes(json);\n\n if (bytes > this.maxValueBytes) {\n throw new Error(\n `KV value too large: ${bytes} bytes exceeds limit ${this.maxValueBytes} bytes`,\n );\n }\n }\n\n private approxUtf8Bytes(str: string): number {\n // Approximation: ASCII -> 1, others -> up to 3 bytes (BMP).\n // This errs on the low side for rare astral chars; prefer TextEncoder when available.\n let count = 0;\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n if (code <= 0x7f) count += 1;\n else if (code <= 0x7ff) count += 2;\n else count += 3;\n }\n return count;\n }\n}\n", "import type { CacheBackend, CachedEntry } from './html-cache-backend';\n\nconst CACHE_NAME_PREFIX = 'swell-html-v0';\n\nexport class WorkerCacheBackend implements CacheBackend {\n private readonly cacheName: string;\n\n constructor(epoch: string) {\n this.cacheName = CACHE_NAME_PREFIX + epoch;\n }\n\n async read(key: string): Promise<CachedEntry | null> {\n const cache = await caches.open(this.cacheName);\n const request = new Request(key);\n const response = await cache.match(request);\n if (!response) return null;\n\n // Normalize header names to lowercase for consistency with base.\n const headers: Record<string, string> = {};\n response.headers.forEach((value, name) => {\n headers[name.toLowerCase()] = value;\n });\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers,\n body: await response.text(),\n cacheTimeISO:\n response.headers.get('x-cache-time') || new Date(0).toISOString(),\n ttl: parseInt(response.headers.get('x-original-ttl') || '0', 10),\n swr: parseInt(response.headers.get('x-original-swr') || '0', 10),\n etag: response.headers.get('etag') || undefined,\n lastModifiedUTC: response.headers.get('last-modified') || undefined,\n };\n }\n\n async write(\n key: string,\n entry: CachedEntry,\n _hardExpireSeconds: number,\n ): Promise<void> {\n const cache = await caches.open(this.cacheName);\n const request = new Request(key);\n\n const headers = new Headers(entry.headers);\n\n // Ensure conditional metadata is present even if origin didn't send it\n if (entry.lastModifiedUTC && !headers.get('Last-Modified')) {\n headers.set('Last-Modified', entry.lastModifiedUTC);\n }\n if (entry.etag && !headers.get('ETag')) {\n headers.set('ETag', entry.etag);\n }\n\n // Persist internal metadata for future reads\n headers.set('X-Cache-Time', entry.cacheTimeISO);\n headers.set('X-Original-TTL', String(entry.ttl));\n headers.set('X-Original-SWR', String(entry.swr));\n\n // Avoid mismatched encodings/length with reconstituted body\n headers.delete('content-encoding');\n headers.delete('content-length');\n\n // Optional parity with legacy behavior\n const existing = headers.get('Cache-Control');\n if (!existing || existing.trim().toLowerCase() === 'public') {\n headers.set('Cache-Control', `public, max-age=${entry.ttl + entry.swr}`);\n }\n\n const response = new Response(entry.body, {\n status: entry.status,\n statusText: entry.statusText,\n headers,\n });\n\n await cache.put(request, response);\n }\n\n async delete(key: string): Promise<void> {\n const cache = await caches.open(this.cacheName);\n const request = new Request(key);\n await cache.delete(request);\n }\n}\n", "import type { KVNamespace } from '@cloudflare/workers-types';\nimport { HtmlCache, type CacheRules } from './html-cache';\nimport { KVCacheBackend } from './html-cache-kv';\nimport { WorkerCacheBackend } from './html-cache-worker';\n\nexport type HtmlCacheEnv = {\n NAMESPACE?: KVNamespace;\n HTML_CACHE_EPOCH?: string;\n HTML_CACHE_BACKEND?: 'kv' | 'worker';\n HTML_CACHE_RULES?: CacheRules;\n};\n\nexport function getHtmlCache(\n env?: HtmlCacheEnv,\n cacheRules?: CacheRules,\n): HtmlCache | null {\n const epoch = env?.HTML_CACHE_EPOCH;\n if (typeof epoch !== 'string' || !epoch) return null;\n\n const kv = env?.NAMESPACE;\n const rules = cacheRules || env?.HTML_CACHE_RULES;\n if (env?.HTML_CACHE_BACKEND !== 'worker' && kv) {\n return new HtmlCache(epoch, new KVCacheBackend(kv), rules);\n }\n return new HtmlCache(epoch, new WorkerCacheBackend(epoch), rules);\n}\n"],
5
- "mappings": "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AA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AA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",
6
- "names": ["LiquidSwell", "ShopifyCompatibility", "SwellTheme", "forEachKeyDeep", "isArray", "isObject", "import_qs", "import_liquidjs", "import_lodash_es", "import_json5", "import_lodash_es", "value", "prop", "value", "field", "x", "c", "a", "b", "d", "i", "config", "JSON5", "key", "isArray", "isObject", "forEachKeyDeep", "value", "qs", "import_keyv", "buildStores", "DEFAULT_TTL", "limit", "limit", "limit", "value", "filters", "headers", "swellHeaders", "qs", "getCookie", "SwellJS", "isObject", "import_json5", "import_lodash_es", "import_liquidjs", "JSON5", "acc", "key", "import_lodash_es", "import_json5", "import_lodash_es", "import_lodash_es", "setting", "isObject", "import_liquidjs", "import_liquidjs", "blog", "blogCategory", "set", "blogCategory", "limit", "product", "variant", "value", "import_lodash_es", "set", "tags", "category", "object", "limit", "products", "import_liquidjs", "product", "max", "min", "cartTax", "promo", "cart", "address", "order", "account", "import_liquidjs", "account", "import_lodash_es", "isObject", "limit", "page", "search", "product", "page", "search", "currency", "import_liquidjs", "id", "import_liquidjs", "id", "import_liquidjs", "id", "import_liquidjs", "id", "isObject", "import_liquidjs", "id", "import_liquidjs", "import_liquidjs", "id", "ShopifyCompatibility", "import_liquidjs", "import_lodash_es", "import_liquidjs", "import_liquidjs", "import_liquidjs", "bind", "import_liquidjs", "bind", "import_liquidjs", "import_lodash_es", "import_lodash_es", "import_liquidjs", "import_liquidjs", "import_liquidjs", "isNumber", "bind", "block", "isObject", "blockConfig", "import_liquidjs", "bind", "import_liquidjs", "bind", "LiquidForTag", "collection", "import_liquidjs", "bind", "token", "import_liquidjs", "bind", "import_liquidjs", "bind", "token", "import_liquidjs", "bind", "import_liquidjs", "bind", "import_lodash_es", "import_liquidjs", "bind", "LiquidRenderTag", "import_liquidjs", "bind", "import_liquidjs", "import_json5", "bind", "JSON5", "import_liquidjs", "bind", "token", "import_liquidjs", "bind", "token", "import_liquidjs", "bind", "LiquidIncludeTag", "import_liquidjs", "import_json5", "bind", "JSON5", "import_liquidjs", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "strftime", "bind", "bind", "bind", "import_lodash_es", "bind", "import_lodash_es", "bind", "bind", "bind", "bind", "import_lodash_es", "bind", "bind", "isObject", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "bind", "isObject", "bind", "bind", "import_liquidjs", "import_liquidjs", "Color", "LiquidSwell", "import_lodash_es", "import_liquidjs", "SwellTheme", "ShopifyCompatibility", "LiquidSwell", "JSON5", "page", "CartResource", "AccountResource", "isObject", "settings", "getCookie"]
7
- }