shoplazza-cli 1.1.2 → 2.0.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 (400) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +206 -332
  4. package/README.zh.md +318 -0
  5. package/package.json +24 -70
  6. package/scripts/install.js +144 -0
  7. package/scripts/jsbuild/dev/index.js +123 -0
  8. package/scripts/jsbuild/index.js +77 -0
  9. package/{lib/checkout/build → scripts/jsbuild}/plugin/vite-plugin-add-extension-id.js +4 -2
  10. package/scripts/jsbuild/vite.config.js +35 -0
  11. package/scripts/run.js +29 -0
  12. package/.editorconfig +0 -28
  13. package/.prettierrc +0 -9
  14. package/bin/shoplazza +0 -137
  15. package/fixtures/assets/blog.scss +0 -74
  16. package/fixtures/assets/cart_modal.scss +0 -450
  17. package/fixtures/assets/collection_detail.js +0 -234
  18. package/fixtures/assets/collection_detail.scss +0 -345
  19. package/fixtures/assets/collection_list.scss +0 -11
  20. package/fixtures/assets/collection_slider.scss +0 -169
  21. package/fixtures/assets/feature_columns.scss +0 -26
  22. package/fixtures/assets/feature_product.scss +0 -109
  23. package/fixtures/assets/footer.js +0 -58
  24. package/fixtures/assets/footer.scss +0 -337
  25. package/fixtures/assets/four_images.scss +0 -29
  26. package/fixtures/assets/gallery.scss +0 -55
  27. package/fixtures/assets/header.js +0 -178
  28. package/fixtures/assets/header.scss +0 -929
  29. package/fixtures/assets/image_text.scss +0 -72
  30. package/fixtures/assets/logo_bar.scss +0 -11
  31. package/fixtures/assets/newsletter.scss +0 -90
  32. package/fixtures/assets/not_found.scss +0 -39
  33. package/fixtures/assets/page_detail.scss +0 -16
  34. package/fixtures/assets/pagination.scss +0 -150
  35. package/fixtures/assets/postcss.config.js +0 -6
  36. package/fixtures/assets/product_description.scss +0 -88
  37. package/fixtures/assets/product_detail.js +0 -634
  38. package/fixtures/assets/product_detail.scss +0 -1106
  39. package/fixtures/assets/relative_product.scss +0 -45
  40. package/fixtures/assets/reviews.scss +0 -70
  41. package/fixtures/assets/rich_text.scss +0 -71
  42. package/fixtures/assets/search.js +0 -87
  43. package/fixtures/assets/search.scss +0 -67
  44. package/fixtures/assets/slide.scss +0 -51
  45. package/fixtures/assets/slider.scss +0 -141
  46. package/fixtures/assets/test.scss +0 -1
  47. package/fixtures/assets/theme.css +0 -976
  48. package/fixtures/assets/theme.scss +0 -1100
  49. package/fixtures/assets/three_images.scss +0 -20
  50. package/fixtures/assets/tools.scss +0 -23
  51. package/fixtures/assets/two_images.scss +0 -24
  52. package/fixtures/assets/video.scss +0 -45
  53. package/fixtures/assets/video_text.scss +0 -63
  54. package/fixtures/config/settings_data.json +0 -107
  55. package/fixtures/config/settings_schema.json +0 -690
  56. package/fixtures/layout/theme.liquid +0 -76
  57. package/fixtures/locales/ar-SA.json +0 -212
  58. package/fixtures/locales/de-DE.json +0 -290
  59. package/fixtures/locales/en-US.json +0 -290
  60. package/fixtures/locales/es-ES.json +0 -290
  61. package/fixtures/locales/fr-FR.json +0 -290
  62. package/fixtures/locales/id-ID.json +0 -212
  63. package/fixtures/locales/it-IT.json +0 -212
  64. package/fixtures/locales/ja-JP.json +0 -289
  65. package/fixtures/locales/ko-KR.json +0 -290
  66. package/fixtures/locales/nl-NL.json +0 -290
  67. package/fixtures/locales/pl-PL.json +0 -290
  68. package/fixtures/locales/pt-PT.json +0 -212
  69. package/fixtures/locales/ru-RU.json +0 -212
  70. package/fixtures/locales/th-TH.json +0 -212
  71. package/fixtures/locales/zh-CN.json +0 -290
  72. package/fixtures/locales/zh-TW.json +0 -290
  73. package/fixtures/sections/apps.liquid +0 -47
  74. package/fixtures/sections/blog.liquid +0 -137
  75. package/fixtures/sections/collection_desc.liquid +0 -34
  76. package/fixtures/sections/collection_detail.liquid +0 -436
  77. package/fixtures/sections/collection_image.liquid +0 -104
  78. package/fixtures/sections/collection_list.liquid +0 -161
  79. package/fixtures/sections/collection_name.liquid +0 -34
  80. package/fixtures/sections/collection_slider.liquid +0 -330
  81. package/fixtures/sections/feature_columns.liquid +0 -275
  82. package/fixtures/sections/feature_product.liquid +0 -227
  83. package/fixtures/sections/footer.liquid +0 -488
  84. package/fixtures/sections/four_images.liquid +0 -160
  85. package/fixtures/sections/gallery.liquid +0 -258
  86. package/fixtures/sections/header.liquid +0 -1157
  87. package/fixtures/sections/html.liquid +0 -40
  88. package/fixtures/sections/image_text.liquid +0 -350
  89. package/fixtures/sections/instagram_plus.liquid +0 -393
  90. package/fixtures/sections/logo_bar.liquid +0 -183
  91. package/fixtures/sections/newsletter.liquid +0 -225
  92. package/fixtures/sections/not_found.liquid +0 -39
  93. package/fixtures/sections/overlay_image.liquid +0 -648
  94. package/fixtures/sections/page_detail.liquid +0 -39
  95. package/fixtures/sections/photo_collection.liquid +0 -433
  96. package/fixtures/sections/product_description.liquid +0 -208
  97. package/fixtures/sections/product_detail.liquid +0 -611
  98. package/fixtures/sections/products.liquid +0 -216
  99. package/fixtures/sections/relative_product.liquid +0 -121
  100. package/fixtures/sections/reviews.liquid +0 -115
  101. package/fixtures/sections/rich_text.liquid +0 -157
  102. package/fixtures/sections/search.liquid +0 -163
  103. package/fixtures/sections/slide.liquid +0 -719
  104. package/fixtures/sections/three_images.liquid +0 -157
  105. package/fixtures/sections/two_images.liquid +0 -125
  106. package/fixtures/sections/video.liquid +0 -95
  107. package/fixtures/sections/video_text.liquid +0 -128
  108. package/fixtures/snippets/bgset.liquid +0 -21
  109. package/fixtures/snippets/card_title.liquid +0 -8
  110. package/fixtures/snippets/cart_modal.liquid +0 -74
  111. package/fixtures/snippets/collection.liquid +0 -77
  112. package/fixtures/snippets/collection_filter_modal.liquid +0 -56
  113. package/fixtures/snippets/default_image_4.liquid +0 -14
  114. package/fixtures/snippets/default_image_6.liquid +0 -18
  115. package/fixtures/snippets/default_image_8.liquid +0 -23
  116. package/fixtures/snippets/four_images_item.liquid +0 -8
  117. package/fixtures/snippets/header_ads.liquid +0 -95
  118. package/fixtures/snippets/hero_image.liquid +0 -94
  119. package/fixtures/snippets/icon_video_play_large.liquid +0 -1
  120. package/fixtures/snippets/icon_video_play_medium.liquid +0 -4
  121. package/fixtures/snippets/icon_video_play_small.liquid +0 -4
  122. package/fixtures/snippets/lazyimg.liquid +0 -22
  123. package/fixtures/snippets/lazyimg_art.liquid +0 -36
  124. package/fixtures/snippets/lazysizes.liquid +0 -41
  125. package/fixtures/snippets/link.liquid +0 -2
  126. package/fixtures/snippets/pagination.liquid +0 -48
  127. package/fixtures/snippets/product.liquid +0 -126
  128. package/fixtures/snippets/product_art_tpl.liquid +0 -152
  129. package/fixtures/snippets/product_info_body.liquid +0 -337
  130. package/fixtures/snippets/product_info_tpl.liquid +0 -423
  131. package/fixtures/snippets/product_label.liquid +0 -46
  132. package/fixtures/snippets/settings.liquid +0 -295
  133. package/fixtures/snippets/social-meta-tags.liquid +0 -106
  134. package/fixtures/snippets/video_html.liquid +0 -11
  135. package/fixtures/snippets/video_source.liquid +0 -98
  136. package/fixtures/snippets/video_thumb_icon.liquid +0 -2
  137. package/fixtures/templates/404.liquid +0 -1
  138. package/fixtures/templates/collection.liquid +0 -92
  139. package/fixtures/templates/index.liquid +0 -206
  140. package/fixtures/templates/page.liquid +0 -1
  141. package/fixtures/templates/product.liquid +0 -99
  142. package/fixtures/templates/search.liquid +0 -1
  143. package/jest.config.js +0 -192
  144. package/lib/__tests__/log.test.js +0 -15
  145. package/lib/__tests__/utils.test.js +0 -69
  146. package/lib/app/api/cli.js +0 -225
  147. package/lib/app/api/openapi.js +0 -121
  148. package/lib/app/api/partnerOpenapi.js +0 -104
  149. package/lib/app/bin/index.js +0 -20
  150. package/lib/app/bin/javy/javy-arm-linux-v5.0.1 +0 -0
  151. package/lib/app/bin/javy/javy-arm-macos-v5.0.1 +0 -0
  152. package/lib/app/bin/javy/javy-x86_64-linux-v5.0.1 +0 -0
  153. package/lib/app/bin/javy/javy-x86_64-macos-v5.0.1 +0 -0
  154. package/lib/app/bin/javy/javy-x86_64-windows-v5.0.1 +0 -0
  155. package/lib/app/commands/config/actions/link.js +0 -189
  156. package/lib/app/commands/config/actions/use.js +0 -40
  157. package/lib/app/commands/config/index.js +0 -25
  158. package/lib/app/commands/config/link.js +0 -11
  159. package/lib/app/commands/config/use.js +0 -11
  160. package/lib/app/commands/deploy/actions/deploy.js +0 -196
  161. package/lib/app/commands/deploy/index.js +0 -11
  162. package/lib/app/commands/dev/actions/dev.js +0 -206
  163. package/lib/app/commands/dev/index.js +0 -11
  164. package/lib/app/commands/generate/actions/extension.js +0 -97
  165. package/lib/app/commands/generate/actions/generateCheckout.js +0 -58
  166. package/lib/app/commands/generate/actions/generateFunction.js +0 -56
  167. package/lib/app/commands/generate/actions/generateTheme.js +0 -128
  168. package/lib/app/commands/generate/extension.js +0 -11
  169. package/lib/app/commands/generate/index.js +0 -22
  170. package/lib/app/commands/index.js +0 -82
  171. package/lib/app/commands/info/actions/info.js +0 -168
  172. package/lib/app/commands/info/index.js +0 -11
  173. package/lib/app/commands/init/actions/init.js +0 -176
  174. package/lib/app/commands/init/index.js +0 -14
  175. package/lib/app/commands/versions/actions/list.js +0 -210
  176. package/lib/app/commands/versions/index.js +0 -22
  177. package/lib/app/commands/versions/list.js +0 -14
  178. package/lib/app/constant/code.js +0 -7
  179. package/lib/app/constant/color.js +0 -18
  180. package/lib/app/constant/extension.js +0 -16
  181. package/lib/app/constant/host.js +0 -23
  182. package/lib/app/constant/sso.js +0 -7
  183. package/lib/app/index.js +0 -8
  184. package/lib/app/services/auth/config.js +0 -33
  185. package/lib/app/services/auth/index.js +0 -9
  186. package/lib/app/services/auth/oauth-server.js +0 -70
  187. package/lib/app/services/auth/partner-token.js +0 -45
  188. package/lib/app/services/auth/sso-token.js +0 -69
  189. package/lib/app/services/auth/store-token.js +0 -100
  190. package/lib/app/services/auth/url-builder.js +0 -23
  191. package/lib/app/services/config/index.js +0 -41
  192. package/lib/app/services/devServer/app.js +0 -76
  193. package/lib/app/services/devServer/index.js +0 -103
  194. package/lib/app/services/devServer/middleware/hmacValidatorMiddleWare.js +0 -20
  195. package/lib/app/services/devServer/middleware/index.js +0 -5
  196. package/lib/app/services/devServer/tunnel/index.js +0 -43
  197. package/lib/app/services/devServer/tunnel/providers/cloudflare.js +0 -364
  198. package/lib/app/services/devServer/tunnel/providers/ngrok.js +0 -70
  199. package/lib/app/services/devServer/utils/index.js +0 -5
  200. package/lib/app/services/devServer/utils/secureCompare.js +0 -5
  201. package/lib/app/services/devServer/views/app.ejs +0 -133
  202. package/lib/app/services/extension-build/buildCheckout.js +0 -47
  203. package/lib/app/services/extension-build/buildFunction.js +0 -57
  204. package/lib/app/services/extension-build/buildTheme.js +0 -100
  205. package/lib/app/services/extension-build/index.js +0 -23
  206. package/lib/app/services/extension-build/plugins/vite-plugin-add-extension-id.js +0 -26
  207. package/lib/app/services/extension-diff/index.js +0 -132
  208. package/lib/app/services/extension-upsert/index.js +0 -21
  209. package/lib/app/services/extension-upsert/upsertCheckout.js +0 -44
  210. package/lib/app/services/extension-upsert/upsertFunction.js +0 -52
  211. package/lib/app/services/extension-upsert/upsertTheme.js +0 -113
  212. package/lib/app/services/oss/index.js +0 -45
  213. package/lib/app/services/partner/index.js +0 -52
  214. package/lib/app/store/base-store.js +0 -37
  215. package/lib/app/store/config-store.js +0 -55
  216. package/lib/app/store/config.js +0 -21
  217. package/lib/app/store/index.js +0 -14
  218. package/lib/app/store/install-store.js +0 -41
  219. package/lib/app/store/sso-store.js +0 -55
  220. package/lib/app/utils/asyncPool.js +0 -42
  221. package/lib/app/utils/debug/index.js +0 -16
  222. package/lib/app/utils/env.js +0 -24
  223. package/lib/app/utils/error.js +0 -20
  224. package/lib/app/utils/git.js +0 -20
  225. package/lib/app/utils/json.js +0 -27
  226. package/lib/app/utils/path.js +0 -33
  227. package/lib/app/utils/platform.js +0 -37
  228. package/lib/app/utils/request/cli.js +0 -72
  229. package/lib/app/utils/request/debug.js +0 -13
  230. package/lib/app/utils/request/openapi.js +0 -67
  231. package/lib/app/utils/request/partnerOpenapi.js +0 -47
  232. package/lib/app/utils/toml.js +0 -56
  233. package/lib/app/utils/views/message.js +0 -68
  234. package/lib/app/utils/views/select.js +0 -36
  235. package/lib/app/utils/withTempDir.js +0 -55
  236. package/lib/auth/__mocks__/getCode.js +0 -7
  237. package/lib/auth/__mocks__/index.js +0 -0
  238. package/lib/auth/child.js +0 -23
  239. package/lib/auth/getCode.js +0 -39
  240. package/lib/auth/index.js +0 -134
  241. package/lib/check.js +0 -28
  242. package/lib/checkout/api.js +0 -164
  243. package/lib/checkout/build/plugin/vite-plugin-transform-extension-html.js +0 -207
  244. package/lib/checkout/build/vite.config.js +0 -34
  245. package/lib/checkout/build.js +0 -38
  246. package/lib/checkout/config.js +0 -97
  247. package/lib/checkout/create.js +0 -132
  248. package/lib/checkout/delete.js +0 -26
  249. package/lib/checkout/deploy.js +0 -59
  250. package/lib/checkout/dev/index.js +0 -143
  251. package/lib/checkout/fields.js +0 -29
  252. package/lib/checkout/index.js +0 -63
  253. package/lib/checkout/preview.js +0 -52
  254. package/lib/checkout/pull.js +0 -22
  255. package/lib/checkout/push.js +0 -141
  256. package/lib/checkout/template/README.md +0 -34
  257. package/lib/checkout/template/_gitignore +0 -4
  258. package/lib/checkout/template/extension.config.js +0 -4
  259. package/lib/checkout/template/extensions/extension-template/extension.json +0 -10
  260. package/lib/checkout/template/extensions/extension-template/src/content.html +0 -3
  261. package/lib/checkout/template/extensions/extension-template/src/index.html +0 -5
  262. package/lib/checkout/template/extensions/extension-template/src/index.js +0 -11
  263. package/lib/checkout/template/extensions/extension-template/src/script.html +0 -3
  264. package/lib/checkout/template/extensions/extension-template/src/style.html +0 -3
  265. package/lib/checkout/template/package.json +0 -17
  266. package/lib/checkout/undeploy.js +0 -40
  267. package/lib/checkout/util.js +0 -201
  268. package/lib/checkout/verify.js +0 -16
  269. package/lib/checkout/version.js +0 -7
  270. package/lib/commands/__tests__/login.test.js +0 -77
  271. package/lib/commands/__tests__/logout.test.js +0 -29
  272. package/lib/commands/__tests__/store.test.js +0 -44
  273. package/lib/commands/__tests__/switch.test.js +0 -45
  274. package/lib/commands/login.js +0 -120
  275. package/lib/commands/logout.js +0 -23
  276. package/lib/commands/store.js +0 -14
  277. package/lib/commands/switch.js +0 -52
  278. package/lib/commands/theme/__tests__/delete.test.js +0 -49
  279. package/lib/commands/theme/__tests__/init.test.js +0 -21
  280. package/lib/commands/theme/__tests__/list.test.js +0 -80
  281. package/lib/commands/theme/__tests__/package.test.js +0 -17
  282. package/lib/commands/theme/__tests__/publish.test.js +0 -61
  283. package/lib/commands/theme/__tests__/pull.test.js +0 -69
  284. package/lib/commands/theme/__tests__/push.test.js +0 -63
  285. package/lib/commands/theme/__tests__/serve.test.js +0 -107
  286. package/lib/commands/theme/delete.js +0 -64
  287. package/lib/commands/theme/init.js +0 -51
  288. package/lib/commands/theme/list.js +0 -28
  289. package/lib/commands/theme/package.js +0 -37
  290. package/lib/commands/theme/publish.js +0 -56
  291. package/lib/commands/theme/pull.js +0 -62
  292. package/lib/commands/theme/push.js +0 -106
  293. package/lib/commands/theme/serve.js +0 -153
  294. package/lib/commands/theme/share.js +0 -20
  295. package/lib/commands/version.js +0 -6
  296. package/lib/common/constants.js +0 -24
  297. package/lib/common/db/partner.js +0 -91
  298. package/lib/common/inquirers/choose-app.js +0 -79
  299. package/lib/common/inquirers/choose-partner.js +0 -74
  300. package/lib/common/log.js +0 -15
  301. package/lib/common/login.js +0 -125
  302. package/lib/common/logout.js +0 -16
  303. package/lib/db/__mocks__/index.js +0 -9
  304. package/lib/db/__tests__/analytics.test.js +0 -19
  305. package/lib/db/__tests__/user.test.js +0 -20
  306. package/lib/db/analytics.js +0 -48
  307. package/lib/db/index.js +0 -9
  308. package/lib/db/user.js +0 -71
  309. package/lib/function/bin/index.js +0 -20
  310. package/lib/function/bin/javy/javy-arm-linux-v5.0.1 +0 -0
  311. package/lib/function/bin/javy/javy-arm-macos-v5.0.1 +0 -0
  312. package/lib/function/bin/javy/javy-x86_64-linux-v5.0.1 +0 -0
  313. package/lib/function/bin/javy/javy-x86_64-macos-v5.0.1 +0 -0
  314. package/lib/function/bin/javy/javy-x86_64-windows-v5.0.1 +0 -0
  315. package/lib/function/commands/compile.js +0 -43
  316. package/lib/function/commands/create.js +0 -77
  317. package/lib/function/commands/list.js +0 -18
  318. package/lib/function/commands/release.js +0 -69
  319. package/lib/function/index.js +0 -24
  320. package/lib/function/template/js/README.md +0 -37
  321. package/lib/function/template/js/_gitignore +0 -4
  322. package/lib/function/template/js/extension.config.json +0 -5
  323. package/lib/function/template/js/package.json +0 -17
  324. package/lib/function/template/js/src/index.js +0 -64
  325. package/lib/function/utils.js +0 -29
  326. package/lib/log.js +0 -13
  327. package/lib/openAPI/__mocks__/index.js +0 -20
  328. package/lib/openAPI/api.js +0 -76
  329. package/lib/openAPI/index.js +0 -56
  330. package/lib/oss.js +0 -102
  331. package/lib/partner-api/axios.js +0 -67
  332. package/lib/partner-api/index.js +0 -79
  333. package/lib/report.js +0 -37
  334. package/lib/theme-extension/api/index.js +0 -96
  335. package/lib/theme-extension/commands/build.js +0 -114
  336. package/lib/theme-extension/commands/connect.js +0 -73
  337. package/lib/theme-extension/commands/create.js +0 -105
  338. package/lib/theme-extension/commands/deploy.js +0 -56
  339. package/lib/theme-extension/commands/list.js +0 -35
  340. package/lib/theme-extension/commands/release.js +0 -59
  341. package/lib/theme-extension/commands/serve.js +0 -179
  342. package/lib/theme-extension/commands/versions.js +0 -55
  343. package/lib/theme-extension/index.js +0 -29
  344. package/lib/theme-extension/template/basic-app/README.md +0 -125
  345. package/lib/theme-extension/template/basic-app/extension.config.json +0 -4
  346. package/lib/theme-extension/template/basic-app/package.json +0 -18
  347. package/lib/theme-extension/template/basic-app/theme-app/assets/index.css +0 -4
  348. package/lib/theme-extension/template/basic-app/theme-app/assets-manifest.json +0 -1
  349. package/lib/theme-extension/template/basic-app/theme-app/blocks/index.liquid +0 -16
  350. package/lib/theme-extension/template/basic-app/theme-app/locales/ar-SA.json +0 -1
  351. package/lib/theme-extension/template/basic-app/theme-app/locales/de-DE.json +0 -1
  352. package/lib/theme-extension/template/basic-app/theme-app/locales/en-US.json +0 -6
  353. package/lib/theme-extension/template/basic-app/theme-app/locales/es-ES.json +0 -1
  354. package/lib/theme-extension/template/basic-app/theme-app/locales/fr-FR.json +0 -1
  355. package/lib/theme-extension/template/basic-app/theme-app/locales/id-ID.json +0 -1
  356. package/lib/theme-extension/template/basic-app/theme-app/locales/it-IT.json +0 -1
  357. package/lib/theme-extension/template/basic-app/theme-app/locales/ja-JP.json +0 -1
  358. package/lib/theme-extension/template/basic-app/theme-app/locales/ko-KR.json +0 -1
  359. package/lib/theme-extension/template/basic-app/theme-app/locales/nl-NL.json +0 -1
  360. package/lib/theme-extension/template/basic-app/theme-app/locales/pl-PL.json +0 -1
  361. package/lib/theme-extension/template/basic-app/theme-app/locales/pt-PT.json +0 -1
  362. package/lib/theme-extension/template/basic-app/theme-app/locales/ru-RU.json +0 -1
  363. package/lib/theme-extension/template/basic-app/theme-app/locales/th-TH.json +0 -1
  364. package/lib/theme-extension/template/basic-app/theme-app/locales/zh-CN.json +0 -6
  365. package/lib/theme-extension/template/basic-app/theme-app/locales/zh-TW.json +0 -1
  366. package/lib/theme-extension/template/basic-app/theme-app/snippets/index.liquid +0 -8
  367. package/lib/theme-extension/template/embed-app/README.md +0 -125
  368. package/lib/theme-extension/template/embed-app/extension.config.json +0 -4
  369. package/lib/theme-extension/template/embed-app/package.json +0 -18
  370. package/lib/theme-extension/template/embed-app/theme-app/assets-manifest.json +0 -1
  371. package/lib/theme-extension/template/embed-app/theme-app/blocks/index.liquid +0 -18
  372. package/lib/theme-extension/template/embed-app/theme-app/locales/ar-SA.json +0 -1
  373. package/lib/theme-extension/template/embed-app/theme-app/locales/de-DE.json +0 -1
  374. package/lib/theme-extension/template/embed-app/theme-app/locales/en-US.json +0 -6
  375. package/lib/theme-extension/template/embed-app/theme-app/locales/es-ES.json +0 -1
  376. package/lib/theme-extension/template/embed-app/theme-app/locales/fr-FR.json +0 -1
  377. package/lib/theme-extension/template/embed-app/theme-app/locales/id-ID.json +0 -1
  378. package/lib/theme-extension/template/embed-app/theme-app/locales/it-IT.json +0 -1
  379. package/lib/theme-extension/template/embed-app/theme-app/locales/ja-JP.json +0 -1
  380. package/lib/theme-extension/template/embed-app/theme-app/locales/ko-KR.json +0 -1
  381. package/lib/theme-extension/template/embed-app/theme-app/locales/nl-NL.json +0 -1
  382. package/lib/theme-extension/template/embed-app/theme-app/locales/pl-PL.json +0 -1
  383. package/lib/theme-extension/template/embed-app/theme-app/locales/pt-PT.json +0 -1
  384. package/lib/theme-extension/template/embed-app/theme-app/locales/ru-RU.json +0 -1
  385. package/lib/theme-extension/template/embed-app/theme-app/locales/th-TH.json +0 -1
  386. package/lib/theme-extension/template/embed-app/theme-app/locales/zh-CN.json +0 -6
  387. package/lib/theme-extension/template/embed-app/theme-app/locales/zh-TW.json +0 -1
  388. package/lib/theme-extension/template/embed-app/theme-app/snippets/index.liquid +0 -8
  389. package/lib/theme-extension/template/embed-app/theme-app/snippets/index_css.liquid +0 -6
  390. package/lib/theme-extension/utils/config.js +0 -32
  391. package/lib/theme-extension/utils/index.js +0 -213
  392. package/lib/tracing.js +0 -50
  393. package/lib/utils/config.js +0 -12
  394. package/lib/utils/console.js +0 -33
  395. package/lib/utils/env.js +0 -17
  396. package/lib/utils/file.js +0 -48
  397. package/lib/utils/platform.js +0 -37
  398. package/lib/utils/utils.js +0 -165
  399. /package/{lib/checkout → scripts/jsbuild}/dev/client.js +0 -0
  400. /package/{lib/app/services/extension-build/plugins → scripts/jsbuild/plugin}/vite-plugin-transform-extension-html.js +0 -0
@@ -1,70 +0,0 @@
1
- const ngrok = require('@ngrok/ngrok');
2
- const chalk = require('chalk');
3
- const inquirer = require('inquirer');
4
- const path = require('path');
5
- const { writeEnvWithDotenv } = require('../../../../utils/env');
6
-
7
- module.exports = class NgrokTunnel {
8
- constructor(port, token, domain) {
9
- this.port = port;
10
- this.token = token;
11
- this.domain = domain;
12
- }
13
-
14
- async start() {
15
- if (!this.token) {
16
- console.log(
17
- `\nGet your ngrok token from ${chalk.underline.green('https://dashboard.ngrok.com/get-started/your-authtoken')}`
18
- );
19
-
20
- const token = await inquirer
21
- .prompt({
22
- type: 'input',
23
- name: 'token',
24
- message: 'Please input your ngrok token:',
25
- validate: (value) => {
26
- return value.trim() !== '' ? true : "NGROK_AUTHTOKEN can't be empty";
27
- }
28
- })
29
- .then((r) => r.token);
30
-
31
- this.token = token;
32
- }
33
-
34
- if (!this.domain) {
35
- console.log(
36
- `\nGet your ngrok domain from ${chalk.underline.green('https://dashboard.ngrok.com/domains')}`
37
- );
38
-
39
- const domain = await inquirer
40
- .prompt({
41
- type: 'input',
42
- name: 'domain',
43
- message: 'Please input your ngrok domain:'
44
- })
45
- .then((r) => r.domain);
46
- this.domain = domain;
47
- }
48
-
49
- // 存储 token(创建或更新 .env,而不覆盖其它键)
50
- await writeEnvWithDotenv(path.join(process.cwd(), '.env'), {
51
- NGROK_AUTHTOKEN: this.token,
52
- NGROK_DOMAIN: this.domain
53
- });
54
-
55
- const listener = await ngrok
56
- .forward({
57
- addr: this.port,
58
- authtoken: this.token,
59
- domain: this.domain
60
- })
61
- .catch((err) => {
62
- throw err;
63
- });
64
-
65
- return {
66
- url: listener.url(),
67
- close: () => listener.close()
68
- };
69
- }
70
- };
@@ -1,5 +0,0 @@
1
- const secureCompare = require('./secureCompare');
2
-
3
- module.exports = {
4
- secureCompare
5
- };
@@ -1,5 +0,0 @@
1
- const crypto = require('crypto');
2
-
3
- module.exports = function secureCompare(a, b) {
4
- return crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b));
5
- };
@@ -1,133 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Shoplazza Dev Server</title>
7
- <style>
8
- * {
9
- margin: 0;
10
- padding: 0;
11
- box-sizing: border-box;
12
- }
13
-
14
- body {
15
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;
16
- background: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);
17
- min-height: 100vh;
18
- display: flex;
19
- align-items: center;
20
- justify-content: center;
21
- color: #333;
22
- line-height: 1.6;
23
- }
24
-
25
- .container {
26
- background: rgba(255, 255, 255, 0.95);
27
- backdrop-filter: blur(20px);
28
- border-radius: 20px;
29
- padding: 3rem 2.5rem;
30
- text-align: center;
31
- max-width: 500px;
32
- width: 90%;
33
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
34
- border: 1px solid rgba(255, 255, 255, 0.2);
35
- }
36
-
37
- .logo {
38
- width: 80px;
39
- height: 80px;
40
- background: linear-gradient(135deg, #e53e3e, #c53030);
41
- border-radius: 20px;
42
- margin: 0 auto 2rem;
43
- display: flex;
44
- align-items: center;
45
- justify-content: center;
46
- font-size: 2rem;
47
- font-weight: bold;
48
- color: white;
49
- text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
50
- }
51
-
52
- h1 {
53
- font-size: 2.2rem;
54
- margin-bottom: 1rem;
55
- background: linear-gradient(135deg, #e53e3e, #c53030);
56
- -webkit-background-clip: text;
57
- -webkit-text-fill-color: transparent;
58
- background-clip: text;
59
- font-weight: 700;
60
- letter-spacing: -0.5px;
61
- }
62
-
63
- p {
64
- font-size: 1.1rem;
65
- color: #666;
66
- margin-bottom: 2rem;
67
- opacity: 0.8;
68
- }
69
-
70
- .status {
71
- display: inline-flex;
72
- align-items: center;
73
- gap: 0.5rem;
74
- background: #e8f5e8;
75
- color: #2e7d2e;
76
- padding: 0.6rem 1.2rem;
77
- border-radius: 50px;
78
- font-size: 0.9rem;
79
- font-weight: 500;
80
- border: 1px solid #c3e6c3;
81
- }
82
-
83
- .status-dot {
84
- width: 8px;
85
- height: 8px;
86
- background: #4ade80;
87
- border-radius: 50%;
88
- animation: pulse 2s infinite;
89
- }
90
-
91
- @keyframes pulse {
92
- 0%, 100% { opacity: 1; }
93
- 50% { opacity: 0.5; }
94
- }
95
-
96
- .footer {
97
- margin-top: 2rem;
98
- font-size: 0.85rem;
99
- color: #999;
100
- opacity: 0.7;
101
- }
102
-
103
- @media (max-width: 480px) {
104
- .container {
105
- padding: 2rem 1.5rem;
106
- margin: 1rem;
107
- }
108
-
109
- h1 {
110
- font-size: 1.8rem;
111
- }
112
-
113
- p {
114
- font-size: 1rem;
115
- }
116
- }
117
- </style>
118
- </head>
119
- <body>
120
- <div class="container">
121
- <div class="logo">S</div>
122
- <h1>Welcome to Shoplazza</h1>
123
- <p>Development server is running smoothly</p>
124
- <div class="status">
125
- <div class="status-dot"></div>
126
- Server Active
127
- </div>
128
- <div class="footer">
129
- Ready to build amazing apps
130
- </div>
131
- </div>
132
- </body>
133
- </html>
@@ -1,47 +0,0 @@
1
- const path = require('path');
2
- const { build } = require('vite');
3
- const { vitePluginAddExtensionId } = require('./plugins/vite-plugin-add-extension-id');
4
- const { vitePluginTransformExtensionHtml } = require('./plugins/vite-plugin-transform-extension-html');
5
-
6
- async function buildCheckout(extension) {
7
- // build checkout extension
8
- const extensionDir = path.dirname(extension.configPath);
9
-
10
- // entry file
11
- const entryFile = path.join(extensionDir, 'src', 'index.js');
12
-
13
- // outputDir
14
- const outputDir = path.join(extensionDir, '..', '..', 'app-deploy');
15
-
16
- const pageEntry = { [extension.extension_name]: entryFile };
17
-
18
- const res = await build({
19
- plugins: [vitePluginTransformExtensionHtml(), vitePluginAddExtensionId(extension.extension_name)],
20
- root: path.dirname(entryFile),
21
- build: {
22
- minify: false,
23
- emptyOutDir: false,
24
- copyPublicDir: false,
25
- rollupOptions: {
26
- input: pageEntry,
27
- output: {
28
- entryFileNames: '[name].[hash].js',
29
- chunkFileNames: '[name].[hash].js',
30
- assetFileNames: '[name].[hash].[ext]',
31
- compact: true,
32
- inlineDynamicImports: false,
33
- dir: outputDir
34
- }
35
- }
36
- }
37
- });
38
-
39
- // 返回打包后的文件路径
40
- const outputFile = path.join(outputDir, res.output[0].fileName);
41
-
42
- return outputFile;
43
- }
44
-
45
- module.exports = {
46
- buildCheckout
47
- };
@@ -1,57 +0,0 @@
1
- const path = require('path');
2
- const fs = require('fs');
3
- const crypto = require('crypto');
4
- const { getLibPath } = require('../../bin');
5
- const { exec } = require('child_process');
6
- const { promisify } = require('util');
7
-
8
- const execPromise = promisify(exec);
9
-
10
- function hashFileStream(filePath, algorithm = 'md5') {
11
- return new Promise((resolve, reject) => {
12
- const hash = crypto.createHash(algorithm);
13
- const stream = fs.createReadStream(filePath);
14
-
15
- stream.on('data', (chunk) => hash.update(chunk));
16
- stream.on('end', () => resolve(hash.digest('hex')));
17
- stream.on('error', reject);
18
- });
19
- }
20
-
21
- async function buildFunction(extension) {
22
- // build function extension
23
- const extensionDir = path.dirname(extension.configPath);
24
-
25
- // entry file
26
- const entryFile = path.join(extensionDir, 'src', 'index.js');
27
-
28
- // entry file hash
29
- const entryFileHash = await hashFileStream(entryFile);
30
-
31
- // output file
32
- const outputFile = path.join(
33
- extensionDir,
34
- '..',
35
- '..',
36
- 'app-deploy',
37
- `${extension.extension_name}.${entryFileHash}.wasm`
38
- );
39
-
40
- // javy path
41
- const javyPath = getLibPath('javy');
42
-
43
- try {
44
- const { stderr } = await execPromise(`"${javyPath}" build "${entryFile}" -o "${outputFile}"`);
45
- if (stderr) {
46
- throw new Error(stderr);
47
- }
48
- } catch (err) {
49
- throw err;
50
- }
51
-
52
- return outputFile;
53
- }
54
-
55
- module.exports = {
56
- buildFunction
57
- };
@@ -1,100 +0,0 @@
1
- const path = require('path');
2
- const fs = require('fs/promises');
3
- const chalk = require('chalk');
4
- const AdmZip = require('adm-zip');
5
- const crypto = require('crypto');
6
-
7
- /**
8
- * 计算文件夹内容的哈希值
9
- * @param {string} dirPath - 文件夹路径
10
- * @returns {Promise<string>} 返回基于文件夹内容的哈希值
11
- */
12
- async function calculateFolderHash(dirPath) {
13
- if (!(await pathExists(dirPath))) {
14
- throw new Error(chalk.red(`Calculate folder hash path does not exist: ${dirPath}`));
15
- }
16
-
17
- const hash = crypto.createHash('md5');
18
-
19
- async function walk(currentPath) {
20
- const stat = await fs.stat(currentPath);
21
- if (stat.isDirectory()) {
22
- const entries = (await fs.readdir(currentPath)).sort(); // 排序保证跨平台一致
23
- for (const entry of entries) {
24
- await walk(path.join(currentPath, entry));
25
- }
26
- } else {
27
- const content = await fs.readFile(currentPath);
28
- hash.update(content);
29
- }
30
- }
31
-
32
- await walk(dirPath);
33
- return hash.digest('hex');
34
- }
35
-
36
- /**
37
- * 检查路径是否存在
38
- * @param {string} targetPath
39
- * @returns {Promise<boolean>}
40
- */
41
- async function pathExists(targetPath) {
42
- try {
43
- await fs.access(targetPath);
44
- return true;
45
- } catch {
46
- return false;
47
- }
48
- }
49
-
50
- /**
51
- * 压缩目录或文件
52
- * @param {string} sourcePath - 需要压缩的目录或文件路径
53
- * @param {string} outputDir - 压缩文件输出目录
54
- * @param {Object} [options] - 压缩选项
55
- * @param {string} [options.rename] - 压缩包中目录的重命名
56
- * @returns {Promise<Object>} 返回压缩文件路径和文件名
57
- */
58
- async function compress(sourcePath, outputDir, options = {}) {
59
- const { rename } = options;
60
-
61
- if (!(await pathExists(sourcePath))) {
62
- throw new Error(chalk.red(`Compress path does not exist: ${sourcePath}`));
63
- }
64
-
65
- const sourceName = path.basename(sourcePath);
66
- const sourceHash = await calculateFolderHash(sourcePath);
67
- const fileName = `${sourceName}-${sourceHash.substring(0, 8)}${Date.now().toString(16).substring(0, 8)}.zip`;
68
- const outputPath = path.resolve(outputDir, fileName);
69
-
70
- // 确保输出目录存在
71
- await fs.mkdir(path.dirname(outputPath), { recursive: true });
72
-
73
- return new Promise(async (resolve, reject) => {
74
- const zip = new AdmZip();
75
- const stat = await fs.stat(sourcePath);
76
-
77
- if (stat.isDirectory()) {
78
- zip.addLocalFolder(sourcePath, rename || sourceName);
79
- } else {
80
- zip.addLocalFile(sourcePath);
81
- }
82
-
83
- zip.writeZip(outputPath, (err) => {
84
- if (err) reject(err);
85
- else resolve({ zipPath: outputPath, zipName: fileName });
86
- });
87
- });
88
- }
89
-
90
- async function buildTheme(extension) {
91
- const extensionDir = path.dirname(extension.configPath);
92
-
93
- const outputDir = path.join(extensionDir, '..', '..', 'app-deploy');
94
- const zipInfo = await compress(extensionDir, outputDir, { rename: 'theme-app' });
95
- return zipInfo.zipPath; // 返回压缩包路径
96
- }
97
-
98
- module.exports = {
99
- buildTheme
100
- };
@@ -1,23 +0,0 @@
1
- const { buildFunction } = require('./buildFunction');
2
- const { buildCheckout } = require('./buildCheckout');
3
- const { buildTheme } = require('./buildTheme');
4
- const { EXTENSION_TYPES } = require('../../constant/extension');
5
-
6
- const strategies = {
7
- [EXTENSION_TYPES.THEME]: buildTheme,
8
- [EXTENSION_TYPES.CHECKOUT]: buildCheckout,
9
- [EXTENSION_TYPES.FUNCTION]: buildFunction
10
- };
11
-
12
- async function buildExtension(extension) {
13
- const strategy = strategies[extension.extension_type];
14
- if (strategy) {
15
- return strategy(extension);
16
- }
17
-
18
- throw new Error(`Unsupported extension type: ${extension.extension_type}`);
19
- }
20
-
21
- module.exports = {
22
- buildExtension
23
- };
@@ -1,26 +0,0 @@
1
- const parseExtension = (str, name) => {
2
- const data = str.split(/(?:import\s*(?:.*?)\s*from\s*(?:.*?)\s*;)/g);
3
- const main = data[data.length - 1];
4
- const id = JSON.stringify(name);
5
- const importString = str.match(/(?:import\s*(?:.*?)\s*from\s*(?:.*?)\s*;)/g)?.join(' ') || '';
6
- return `${importString}(function(){const __EXTENSION_ID__=${id};${main}})()`;
7
- };
8
-
9
- module.exports = {
10
- vitePluginAddExtensionId: function (id) {
11
- return {
12
- name: 'vitePluginAddExtensionId',
13
- enforce: 'pre',
14
- apply: 'build',
15
- transform: (code, _id) => {
16
- if (/.*\/extensions\/.*\/src\/index\.js/.test(_id)) {
17
- return parseExtension(code, id);
18
- }
19
- return code;
20
- },
21
- buildEnd: () => {
22
- console.log('vitePluginAddExtensionId end');
23
- }
24
- };
25
- }
26
- };
@@ -1,132 +0,0 @@
1
- const chalk = require('chalk');
2
-
3
- /**
4
- * @typedef {Object} Extension
5
- * @property {string} [extension_id] 扩展ID
6
- * @property {string} extension_name 扩展名称
7
- * @property {string} extension_type 扩展类型 theme | checkout | function
8
- * @property {string} [extension_version] 扩展版本
9
- * @property {string} [extension_version_id] 扩展版本ID
10
- * @property {string} [resource_url] 资源地址
11
- */
12
-
13
- /**
14
- * 高阶匹配函数
15
- * @param {Array<Extension>} localList
16
- * @param {Array<Extension>} remoteList
17
- * @param {(local: Extension, remote: Extension) => boolean} matchFn 匹配条件
18
- * @param {(local: Extension, remote: Extension) => void} [updateFn] 匹配成功时的更新规则
19
- */
20
- function matchAndExtract(localList, remoteList, matchFn, updateFn) {
21
- const matched = [];
22
- const remainingLocal = [];
23
- const remainingRemote = [...remoteList];
24
-
25
- for (const local of localList) {
26
- const idx = remainingRemote.findIndex((remote) => matchFn(local, remote));
27
- if (idx !== -1) {
28
- if (updateFn) updateFn(local, remainingRemote[idx]);
29
- matched.push(local);
30
- remainingRemote.splice(idx, 1);
31
- } else {
32
- remainingLocal.push(local);
33
- }
34
- }
35
-
36
- return { matched, remainingLocal, remainingRemote };
37
- }
38
-
39
- /**
40
- * 默认的 CLI 交互函数(依赖 inquirer)
41
- */
42
- async function defaultPrompt(localExt, sameTypeRemoteExtensions) {
43
- const inquirer = require('inquirer');
44
- const { isUseRemoteExt } = await inquirer.prompt({
45
- type: 'confirm',
46
- name: 'isUseRemoteExt',
47
- message: `Do you want to reuse the extension ${chalk.green(localExt.extension_name)} (${chalk.green(
48
- localExt.extension_type
49
- )})?`,
50
- default: true
51
- });
52
- if (!isUseRemoteExt) return null;
53
-
54
- const { selected } = await inquirer.prompt({
55
- type: 'list',
56
- name: 'selected',
57
- message: `Please select the extension to match ${chalk.green(localExt.extension_name)} (${chalk.green(
58
- localExt.extension_type
59
- )})`,
60
- choices: sameTypeRemoteExtensions.map((remoteExt) => ({
61
- name: remoteExt.extension_name,
62
- value: remoteExt
63
- }))
64
- });
65
-
66
- return selected;
67
- }
68
-
69
- /**
70
- * 对比本地扩展和远程扩展
71
- * @param {Array<Extension>} localExtensions
72
- * @param {Array<Extension>} remoteExtensions
73
- * @param {Object} [options]
74
- * @param {(localExt: Extension, candidates: Array<Extension>) => Promise<Extension|null>} [options.promptFn] 自定义交互函数
75
- * @returns {Promise<{updateExtensions: Extension[], deleteExtensions: Extension[], addExtensions: Extension[]}>}
76
- */
77
- async function extensionDiff(localExtensions, remoteExtensions, { promptFn = defaultPrompt } = {}) {
78
- let updateExtensions = [];
79
- let localRest = [...localExtensions];
80
- let remoteRest = [...remoteExtensions];
81
- let matched = [];
82
-
83
- // 1. 按 ID 匹配
84
- ({
85
- matched,
86
- remainingLocal: localRest,
87
- remainingRemote: remoteRest
88
- } = matchAndExtract(localRest, remoteRest, (l, r) => !!l.extension_id && l.extension_id === r.extension_id));
89
- updateExtensions.push(...matched);
90
-
91
- // 2. 按 title+type 匹配
92
- ({
93
- matched,
94
- remainingLocal: localRest,
95
- remainingRemote: remoteRest
96
- } = matchAndExtract(
97
- localRest,
98
- remoteRest,
99
- (l, r) => l.extension_name === r.extension_name && l.extension_type === r.extension_type,
100
- (l, r) => {
101
- if (r.extension_id) l.extension_id = r.extension_id;
102
- }
103
- ));
104
- updateExtensions.push(...matched);
105
-
106
- // 3. 按 type 匹配(需要交互)
107
- for (const localExt of [...localRest]) {
108
- const sameTypeRemote = remoteRest.filter((r) => r.extension_type === localExt.extension_type);
109
- if (sameTypeRemote.length === 0) continue;
110
-
111
- const selected = await promptFn(localExt, sameTypeRemote);
112
- if (selected) {
113
- localExt.extension_id = selected.extension_id;
114
- updateExtensions.push(localExt);
115
- localRest = localRest.filter((l) => l !== localExt);
116
- remoteRest = remoteRest.filter((r) => r.extension_id !== selected.extension_id);
117
- }
118
- }
119
-
120
- // 4. 剩余 local → 新增
121
- const addExtensions = localRest.map((localExt) => ({
122
- ...localExt,
123
- extension_id: ''
124
- }));
125
-
126
- // 5. 剩余 remote → 删除
127
- const deleteExtensions = remoteRest;
128
-
129
- return { updateExtensions, deleteExtensions, addExtensions };
130
- }
131
-
132
- module.exports = { extensionDiff, defaultPrompt };
@@ -1,21 +0,0 @@
1
- const upsertFunction = require('./upsertFunction');
2
- const upsertCheckout = require('./upsertCheckout');
3
- const upsertTheme = require('./upsertTheme');
4
-
5
- const strategies = {
6
- function: upsertFunction,
7
- checkout: upsertCheckout,
8
- theme: upsertTheme
9
- };
10
-
11
- async function upsertExtension(extension, appClientId, partnerId, appAccessToken) {
12
- const strategy = strategies[extension.extension_type];
13
- if (!strategy) {
14
- throw new Error(`Unsupported extension type: ${extension.extension_type}`);
15
- }
16
- return strategy(extension, appClientId, partnerId, appAccessToken);
17
- }
18
-
19
- module.exports = {
20
- upsertExtension
21
- };
@@ -1,44 +0,0 @@
1
- const { createCheckoutExtensionRequest, commitCheckoutExtensionRequest } = require('../../api/openapi');
2
-
3
- // 提取 返回结果
4
- function extractCheckoutResult(res) {
5
- return {
6
- extension_id: res.data.extension.extension_id,
7
- extension_version: res.data.extension.version,
8
- extension_version_id: res.data.extension.id
9
- };
10
- }
11
-
12
- async function upsertCheckout(extension, appClientId, partnerId, appAccessToken) {
13
- // 有 extension_id 则 升级,没有则创建
14
- if (extension.extension_id && extension.extension_version) {
15
- // 升级
16
- const res = await commitCheckoutExtensionRequest(appClientId, partnerId, {
17
- name: extension.extension_name,
18
- version: extension.extension_version,
19
- extension_id: extension.extension_id,
20
- resource_url: extension.resource_url
21
- });
22
-
23
- if (res?.status === 0) {
24
- return extractCheckoutResult(res);
25
- }
26
-
27
- throw new Error(res?.message || 'upsert checkout extension failed');
28
- } else {
29
- // 创建
30
- const res = await createCheckoutExtensionRequest(appClientId, partnerId, {
31
- version: '1.0.0',
32
- name: extension.extension_name,
33
- resource_url: extension.resource_url
34
- });
35
-
36
- if (res?.status === 0) {
37
- return extractCheckoutResult(res);
38
- }
39
-
40
- throw new Error(res?.message || 'upsert checkout extension failed');
41
- }
42
- }
43
-
44
- module.exports = upsertCheckout;