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,40 +0,0 @@
1
- const path = require('path');
2
-
3
- const { getAppCompleteInfoRequest } = require('../../../api/cli');
4
- const { configStore } = require('../../../store');
5
- const { withErrorHandling } = require('../../../utils/error');
6
- const { getTomlConfigFiles, parseTomlFile } = require('../../../utils/toml');
7
- const { successMessageRender } = require('../../../utils/views/message');
8
- const { selectOne } = require('../../../utils/views/select');
9
- async function useAction(options) {
10
- const { path: argPath = '.' } = options;
11
- const projectDir = path.resolve(argPath);
12
-
13
- const configFiles = getTomlConfigFiles(projectDir);
14
- const selectedConfigFile = await selectOne(configFiles, {
15
- message: 'Configuration file:',
16
- formatChoice: (name) => ({
17
- name,
18
- value: name
19
- })
20
- });
21
-
22
- if (!selectedConfigFile) {
23
- throw new Error(`Couldn't find an app toml file at ${projectDir}, is this an app directory?`);
24
- }
25
-
26
- const configInfo = await parseTomlFile(selectedConfigFile);
27
- const { app } = await getAppCompleteInfoRequest(configInfo.client_id);
28
-
29
- configStore.setProjectConfig(projectDir, {
30
- configFile: selectedConfigFile,
31
- clientId: app.client_id,
32
- directory: projectDir
33
- });
34
-
35
- successMessageRender(`Using configuration file ${selectedConfigFile}`);
36
- }
37
-
38
- module.exports = {
39
- useAction: withErrorHandling(useAction)
40
- };
@@ -1,25 +0,0 @@
1
- const { Command } = require('commander');
2
- const { useCommand } = require('./use');
3
- const { linkCommand } = require('./link');
4
- const chalk = require('chalk');
5
-
6
- const configCommand = new Command('config')
7
- .description('Manage app configuration')
8
- .addCommand(useCommand)
9
- .addCommand(linkCommand);
10
-
11
- configCommand.helpInformation = function () {
12
- return `Manage app configuration.
13
-
14
- ${chalk.bold('USAGE')}
15
- $ shoplazza app config COMMAND
16
-
17
- ${chalk.bold('COMMANDS')}
18
- app config link Fetch your app configuration from the Partner Dashboard
19
- app config use Activate an app configuration
20
- `;
21
- };
22
-
23
- module.exports = {
24
- configCommand
25
- };
@@ -1,11 +0,0 @@
1
- const { Command } = require('commander');
2
- const { linkAction } = require('./actions/link');
3
-
4
- const linkCommand = new Command('link')
5
- .option('--path <path>', 'The path to your app directory')
6
- .option('--client-id <client-id>', 'The client id of your app')
7
- .action(linkAction);
8
-
9
- module.exports = {
10
- linkCommand
11
- };
@@ -1,11 +0,0 @@
1
- const { Command } = require('commander');
2
- const { useAction } = require('./actions/use');
3
-
4
- const useCommand = new Command('use')
5
- .option('--path <path>', 'The path to your app directory')
6
- .description('Activate an app configuration')
7
- .action(useAction);
8
-
9
- module.exports = {
10
- useCommand
11
- };
@@ -1,196 +0,0 @@
1
- const { withErrorHandling } = require('../../../utils/error');
2
- const { getAppCompleteInfo } = require('../../../services/config');
3
- const { parseTomlFile, modifyTomlFile } = require('../../../utils/toml');
4
- const path = require('path');
5
- const glob = require('glob');
6
- const { getAppExtensionsRequest, generateVersionRequest, extensionDeploy } = require('../../../api/cli');
7
- const fs = require('fs');
8
- const { extensionDiff } = require('../../../services/extension-diff');
9
- const { getPartnerAccessToken, getStoreAccessToken } = require('../../../services/auth');
10
- const { upsertExtension } = require('../../../services/extension-upsert');
11
- const ora = require('ora');
12
- const { buildExtension } = require('../../../services/extension-build');
13
- const { useOss } = require('../../../../oss');
14
- const { successMessageRender, infoMessageRender } = require('../../../utils/views/message');
15
- const chalk = require('chalk');
16
- // 获取 localExtensions
17
- function getLocalExtensions(projectDir = process.env.APP_PROJECT_DIR) {
18
- const extensionsDir = path.join(projectDir, 'extensions');
19
- const extensionFiles = glob.sync(path.join(extensionsDir, '**/*.toml'));
20
- const result = extensionFiles.map((extensionFile) => {
21
- const extensionInfo = parseTomlFile(extensionFile);
22
- return {
23
- extension_id: extensionInfo.id, // 扩展ID
24
- extension_name: extensionInfo.name, // 扩展名称
25
- extension_type: extensionInfo.type, // 扩展类型
26
- extension_version: '', // 扩展版本
27
- extension_version_id: '', // 扩展版本ID
28
- resource_url: '', // 资源地址
29
- configPath: extensionFile, // 扩展配置文件路径
30
- distPath: '' // 打包后的资源路径
31
- };
32
- });
33
- return result;
34
- }
35
-
36
- // 获取 remoteExtensions
37
- async function getRemoteExtensions(appClientId, partnerId) {
38
- const res = await getAppExtensionsRequest({ partner_id: partnerId, app_client_id: appClientId, is_dev: 1 });
39
-
40
- return res.extensions.map((extension) => ({
41
- extension_id: extension.extension_id,
42
- extension_name: extension.extension_name,
43
- extension_type: extension.extension_type,
44
- resource_url: extension.resource_url,
45
- extension_version: extension.extension_version,
46
- extension_version_id: extension.extension_version_id
47
- }));
48
- }
49
-
50
- // 生成版本
51
- async function generateNewVersion(partnerId, appClientId) {
52
- const res = await generateVersionRequest({
53
- partner_id: partnerId,
54
- app_client_id: appClientId,
55
- is_dev: true
56
- });
57
-
58
- const { extensions, app_version } = res;
59
- const extensionVersions = extensions.reduce((acc, { extension_id, extension_version }) => {
60
- return {
61
- ...acc,
62
- [extension_id]: extension_version
63
- };
64
- }, {});
65
-
66
- return {
67
- newAppVersion: app_version,
68
- newExtensionVersions: extensionVersions
69
- };
70
- }
71
-
72
- // 成功提示
73
- function successTips(appName, newAppVersion) {
74
- successMessageRender(`New version ${appName}(${newAppVersion}) is deployed successfully`);
75
- }
76
-
77
- // app 信息展示
78
- function appInfoShow({ app, partner }) {
79
- infoMessageRender(`${chalk.bold('Your app info:\n')}
80
- • ${'Partner:'.padEnd(10)} ${partner.business_name}
81
- • ${'App:'.padEnd(10)} ${app.name}`);
82
- }
83
-
84
- async function deployAction(options) {
85
- // 获取 app 信息
86
- const { app, partner, user } = await getAppCompleteInfo();
87
-
88
- appInfoShow({ app, partner });
89
-
90
- const localExtensions = getLocalExtensions();
91
- const remoteExtensions = await getRemoteExtensions(app.client_id, partner.id);
92
-
93
- const { newAppVersion, newExtensionVersions } = await generateNewVersion(partner.id, app.client_id);
94
-
95
- const appAccessToken = await getPartnerAccessToken(app.client_id, app.secret);
96
- const {
97
- addExtensions, // 需要创建新的 extension & version
98
- updateExtensions, // 需要更新 version
99
- deleteExtensions // 需要删除 extension 目前不支持删除,直接传回服务端
100
- } = await extensionDiff(localExtensions, remoteExtensions);
101
-
102
- // 更新 extension 版本
103
- [...updateExtensions, ...deleteExtensions].forEach((extension) => {
104
- extension.extension_version = newExtensionVersions[extension.extension_id];
105
- });
106
-
107
- // 清空 app-deploy
108
- fs.rmSync(path.join(process.env.APP_PROJECT_DIR, 'app-deploy'), { recursive: true, force: true });
109
- fs.mkdirSync(path.join(process.env.APP_PROJECT_DIR, 'app-deploy'));
110
-
111
- const buildExtensionResults = await Promise.all(
112
- [...addExtensions, ...updateExtensions].map(async (extension) => {
113
- const distPath = await buildExtension(extension);
114
- extension.distPath = distPath;
115
- return distPath;
116
- })
117
- );
118
-
119
- // 🎯 获取动态的店铺认证信息
120
- const { store_domain, access_token } = await getStoreAccessToken(app.client_id, partner.id);
121
-
122
- // 上传资源到 OSS
123
- await Promise.all(
124
- [...addExtensions, ...updateExtensions].map(async (extension) => {
125
- const { distPath } = extension;
126
- // 🎯 使用 useOss 替换原来的上传逻辑
127
- const { uploadOss } = useOss(access_token, store_domain, `✗ 未找到店铺信息。请检查app配置。`);
128
- const resourceUrl = await uploadOss(distPath);
129
- extension.resource_url = resourceUrl;
130
- })
131
- );
132
-
133
-
134
- // 创建或更新 extension
135
- const upsertExtensionResults = await Promise.all(
136
- [...addExtensions, ...updateExtensions, ...deleteExtensions].map(async (extension) => {
137
- const spinner = ora(`${extension.extension_name}(${extension.extension_version}) upserting...`).start();
138
- try {
139
- const res = await upsertExtension(extension, app.client_id, partner.id, appAccessToken);
140
- extension.extension_id = res.extension_id;
141
- extension.extension_version = res.extension_version;
142
- extension.extension_version_id = res.extension_version_id;
143
- spinner.succeed(`${extension.extension_name}(${extension.extension_version}) upsert success`);
144
- return res;
145
- } catch (error) {
146
- spinner.fail(`${extension.extension_name}(${extension.extension_version}) upsert failed`);
147
- throw error;
148
- }
149
- })
150
- );
151
-
152
-
153
- // 更新本地配置文件信息
154
- await Promise.all(
155
- [...addExtensions, ...updateExtensions].map(async (extension) => {
156
- try {
157
- await modifyTomlFile(extension.configPath, (config) => {
158
- config.id = extension.extension_id;
159
- config.name = extension.extension_name;
160
- config.type = extension.extension_type;
161
- return config;
162
- });
163
- } catch (error) {
164
- throw error;
165
- }
166
- })
167
- );
168
-
169
- const completeExtensions = [...addExtensions, ...updateExtensions, ...deleteExtensions].map((extension) => ({
170
- extension_id: extension.extension_id,
171
- extension_name: extension.extension_name,
172
- extension_type: extension.extension_type,
173
- extension_version: extension.extension_version,
174
- extension_version_id: extension.extension_version_id,
175
- resource_url: extension.resource_url,
176
- }));
177
-
178
-
179
- const deployResponse = await extensionDeploy({
180
- partner_id: partner.id,
181
- app_client_id: app.client_id,
182
- data: {
183
- app: {
184
- version: newAppVersion,
185
- extensions: completeExtensions
186
- }
187
- }
188
- });
189
-
190
-
191
- successTips(app.name, newAppVersion);
192
- }
193
-
194
- module.exports = {
195
- deployAction: withErrorHandling(deployAction)
196
- };
@@ -1,11 +0,0 @@
1
- const { Command } = require('commander');
2
- const deployCommand = new Command('deploy');
3
- const { deployAction } = require('./actions/deploy');
4
-
5
- deployCommand.option('--path <path>', 'The path to your app directory');
6
-
7
- deployCommand.action(deployAction);
8
-
9
- module.exports = {
10
- deployCommand
11
- };
@@ -1,206 +0,0 @@
1
- const { withErrorHandling } = require('../../../utils/error');
2
- const { getAppCompleteInfo } = require('../../../services/config');
3
- const { parseTomlFile, modifyTomlFile } = require('../../../utils/toml');
4
- const path = require('path');
5
- const glob = require('glob');
6
- const { getAppExtensionsRequest, extensionDev, generateVersionRequest } = require('../../../api/cli');
7
- const fs = require('fs');
8
- const { extensionDiff } = require('../../../services/extension-diff');
9
- const { getPartnerAccessToken, getStoreAccessToken } = require('../../../services/auth');
10
- const { startDevServer } = require('../../../services/devServer');
11
- const { upsertExtension } = require('../../../services/extension-upsert');
12
- const { infoMessageRender } = require('../../../utils/views/message');
13
- const ora = require('ora');
14
- const { buildExtension } = require('../../../services/extension-build');
15
- const chalk = require('chalk');
16
- const { useOss } = require('../../../../oss');
17
- // 获取 localExtensions
18
- function getLocalExtensions(projectDir = process.env.APP_PROJECT_DIR) {
19
- const extensionsDir = path.join(projectDir, 'extensions');
20
- const extensionFiles = glob.sync(path.join(extensionsDir, '**/*.toml'));
21
- const result = extensionFiles.map((extensionFile) => {
22
- const extensionInfo = parseTomlFile(extensionFile);
23
- return {
24
- extension_id: extensionInfo.id, // 扩展ID
25
- extension_name: extensionInfo.name, // 扩展名称
26
- extension_type: extensionInfo.type, // 扩展类型
27
- extension_version: '', // 扩展版本
28
- extension_version_id: '', // 扩展版本ID
29
- resource_url: '', // 资源地址
30
- configPath: extensionFile, // 扩展配置文件路径
31
- distPath: '' // 打包后的资源路径
32
- };
33
- });
34
- return result;
35
- }
36
-
37
- // 获取 remoteExtensions
38
- async function getRemoteExtensions(appClientId, partnerId) {
39
- const res = await getAppExtensionsRequest({ partner_id: partnerId, app_client_id: appClientId, is_dev: 1 });
40
- return res.extensions.map((extension) => ({
41
- extension_id: extension.extension_id,
42
- extension_name: extension.extension_name,
43
- extension_type: extension.extension_type,
44
- resource_url: extension.resource_url
45
- }));
46
- }
47
-
48
- // 生成版本
49
- async function generateNewVersion(partnerId, appClientId) {
50
- const res = await generateVersionRequest({
51
- partner_id: partnerId,
52
- app_client_id: appClientId,
53
- is_dev: true
54
- });
55
-
56
- const { extensions, app_version } = res;
57
- const extensionVersions = extensions.reduce((acc, { extension_id, extension_version }) => {
58
- return {
59
- ...acc,
60
- [extension_id]: extension_version
61
- };
62
- }, {});
63
-
64
- return {
65
- newAppVersion: app_version,
66
- newExtensionVersions: extensionVersions
67
- };
68
- }
69
-
70
- // app 信息展示
71
- function appInfoShow({ app, partner }) {
72
- infoMessageRender(`${chalk.bold('Your app info:\n')}
73
- • ${'Partner:'.padEnd(10)} ${partner.business_name}
74
- • ${'App:'.padEnd(10)} ${app.name}`);
75
- }
76
-
77
- async function devAction(options) {
78
- // const { path: argPath = '.' } = options;
79
- // 获取 app 信息
80
- const { app, partner, user, configContent } = await getAppCompleteInfo();
81
-
82
- appInfoShow({ app, partner });
83
-
84
- const localExtensions = getLocalExtensions();
85
- const remoteExtensions = await getRemoteExtensions(app.client_id, partner.id);
86
-
87
- const appAccessToken = await getPartnerAccessToken(app.client_id, app.secret);
88
-
89
- const { newAppVersion, newExtensionVersions } = await generateNewVersion(partner.id, app.client_id);
90
-
91
- // 清空 app-deploy
92
- fs.rmSync(path.join(process.env.APP_PROJECT_DIR, 'app-deploy'), { recursive: true, force: true });
93
- fs.mkdirSync(path.join(process.env.APP_PROJECT_DIR, 'app-deploy'));
94
-
95
- const {
96
- addExtensions, // 需要创建新的 extension & version
97
- updateExtensions, // 需要更新 version
98
- deleteExtensions // 需要删除 extension 目前不支持删除,直接传回服务端
99
- } = await extensionDiff(localExtensions, remoteExtensions);
100
-
101
- [...updateExtensions, ...deleteExtensions].forEach((extension) => {
102
- if (extension.extension_id in newExtensionVersions) {
103
- extension.extension_version = newExtensionVersions[extension.extension_id];
104
- }
105
- });
106
-
107
- const buildFunctionResults = await Promise.all(
108
- [...addExtensions, ...updateExtensions].map(async (extension) => {
109
- const distPath = await buildExtension(extension);
110
- extension.distPath = distPath;
111
- return distPath;
112
- })
113
- );
114
-
115
- // 🎯 获取动态的店铺认证信息
116
- const { store_domain, access_token } = await getStoreAccessToken(app.client_id, partner.id);
117
-
118
- // 上传资源到 OSS
119
- await Promise.all(
120
- [...addExtensions, ...updateExtensions].map(async (extension) => {
121
- const { distPath } = extension;
122
-
123
- // 🎯 使用 useOss 替换原来的上传逻辑
124
- const { uploadOss } = useOss(access_token, store_domain, `✗ 未找到店铺信息。请检查app配置。`);
125
-
126
- const resourceUrl = await uploadOss(distPath);
127
- extension.resource_url = resourceUrl;
128
- })
129
- );
130
-
131
-
132
- // 创建或更新 extension
133
- const upsertExtensionResults = await Promise.all(
134
- [...addExtensions, ...updateExtensions, ...deleteExtensions].map(async (extension) => {
135
- const spinner = ora(`${extension.extension_name}(${extension.extension_version}) upserting...`).start();
136
- try {
137
- const res = await upsertExtension(extension, app.client_id, partner.id, appAccessToken);
138
- extension.extension_id = res.extension_id;
139
- extension.extension_version = res.extension_version;
140
- extension.extension_version_id = res.extension_version_id;
141
- spinner.succeed(`${extension.extension_name}(${extension.extension_version}) upsert success`);
142
- return res;
143
- } catch (error) {
144
- spinner.fail(`${extension.extension_name}(${extension.extension_version}) upsert failed`);
145
- throw error;
146
- }
147
- })
148
- );
149
-
150
-
151
- // 更新本地配置文件信息
152
- await Promise.all(
153
- [...addExtensions, ...updateExtensions].map(async (extension) => {
154
- try {
155
- await modifyTomlFile(extension.configPath, (config) => {
156
- config.id = extension.extension_id;
157
- config.name = extension.extension_name;
158
- config.type = extension.extension_type;
159
- return config;
160
- });
161
- } catch (error) {
162
- throw error;
163
- }
164
- })
165
- );
166
-
167
- const completeExtensions = [...addExtensions, ...updateExtensions, ...deleteExtensions].map((extension) => ({
168
- extension_id: extension.extension_id,
169
- extension_name: extension.extension_name,
170
- extension_type: extension.extension_type,
171
- extension_version: extension.extension_version,
172
- extension_version_id: extension.extension_version_id,
173
- resource_url: extension.resource_url
174
- }));
175
-
176
-
177
- const { appUrl, redirectUrl } = await startDevServer({
178
- clientId: app.client_id,
179
- clientSecret: app.secret,
180
- scopes: configContent.scopes
181
- });
182
-
183
- // 展示 App URL 和 Redirect URL
184
-
185
- const { install_url } = await extensionDev({
186
- partner_id: partner.id,
187
- app_client_id: app.client_id,
188
- data: {
189
- app: {
190
- version: newAppVersion,
191
- extensions: completeExtensions,
192
- dev_app_uri: appUrl,
193
- dev_redirect_uri: redirectUrl
194
- }
195
- }
196
- });
197
-
198
- console.log(chalk.bold('Your App URL:'), chalk.underline.green(appUrl));
199
- console.log(chalk.bold('Your Redirect URL:'), chalk.underline.green(redirectUrl));
200
- console.log(chalk.bold('Your Install URL:'), chalk.underline.green(install_url));
201
-
202
- }
203
-
204
- module.exports = {
205
- devAction: withErrorHandling(devAction)
206
- };
@@ -1,11 +0,0 @@
1
- const { Command } = require('commander');
2
- const devCommand = new Command('dev');
3
- const { devAction } = require('./actions/dev');
4
-
5
- devCommand.option('--path <path>', 'The path to your app directory');
6
-
7
- devCommand.action(devAction);
8
-
9
- module.exports = {
10
- devCommand
11
- };
@@ -1,97 +0,0 @@
1
- const path = require('path');
2
- const fs = require('fs');
3
- const inquirer = require('inquirer');
4
-
5
- const { withErrorHandling } = require('../../../utils/error');
6
- const { EXTENSION_TYPES } = require('../../../constant/extension');
7
-
8
- const { generateTheme } = require('./generateTheme');
9
- const { generateCheckout } = require('./generateCheckout');
10
- const { generateFunction } = require('./generateFunction');
11
-
12
- const strategies = {
13
- [EXTENSION_TYPES.THEME]: generateTheme,
14
- [EXTENSION_TYPES.CHECKOUT]: generateCheckout,
15
- [EXTENSION_TYPES.FUNCTION]: generateFunction
16
- };
17
-
18
- async function selectExtensionType(targetDirectory) {
19
- // 只允许一个 theme extension
20
- // const extensionTomlPath = path.join(targetDirectory, 'extensions', '**', 'shoplazza.extension.toml');
21
- // const extensionTomlPaths = glob.sync(extensionTomlPath);
22
- // const isExistsThemeExtension = extensionTomlPaths.some((path) => {
23
- // const toml = parseTomlFile(path);
24
- // return toml.type === EXTENSION_TYPES.THEME;
25
- // });
26
-
27
- // // 创建选项列表
28
- // const choices = [];
29
-
30
- // Object.values(EXTENSION_TYPES).forEach((type) => {
31
- // if (type === EXTENSION_TYPES.THEME && isExistsThemeExtension) {
32
- // // 使用自定义分隔符替代禁用的选项
33
- // choices.push(new inquirer.Separator(chalk.gray(`${type} (limit reached)`)));
34
- // } else {
35
- // choices.push({
36
- // name: type,
37
- // value: type
38
- // });
39
- // }
40
- // });
41
-
42
- // 允许有多个 theme extension
43
- const choices = Object.values(EXTENSION_TYPES);
44
-
45
- const { type } = await inquirer.prompt([
46
- {
47
- type: 'list',
48
- name: 'type',
49
- message: 'Type of extension?',
50
- choices: choices
51
- }
52
- ]);
53
-
54
- return type;
55
- }
56
-
57
- // 校验项目地址
58
- async function checkProjectDir(projectDir) {
59
- // 检查目录是否已存在
60
- if (fs.existsSync(projectDir)) {
61
- throw new Error(
62
- `A directory with this name (${path.basename(projectDir)}) already exists.\nChoose a new name for your extension.`
63
- );
64
- }
65
- }
66
-
67
- async function extensionAction(options) {
68
- const { path: argPath = '.' } = options;
69
- const extensionType = await selectExtensionType(path.resolve(argPath));
70
-
71
- // 交互获取扩展名称
72
- const { extensionName } = await inquirer.prompt([
73
- {
74
- type: 'input',
75
- name: 'extensionName',
76
- message: 'Extension name?',
77
- validate: (value) => (value.trim() === '' ? 'Extension name is required' : true)
78
- }
79
- ]);
80
-
81
- const targetDirectory = path.resolve(argPath, 'extensions', extensionName);
82
-
83
- const strategy = strategies[extensionType];
84
-
85
- if (!strategy) {
86
- throw new Error(`Unknown extension type: ${extensionType}`);
87
- }
88
-
89
- // 校验项目地址
90
- await checkProjectDir(targetDirectory);
91
-
92
- await strategy({ targetDirectory });
93
- }
94
-
95
- module.exports = {
96
- extensionAction: withErrorHandling(extensionAction)
97
- };
@@ -1,58 +0,0 @@
1
- const path = require('path');
2
- const fs = require('fs');
3
- const simpleGit = require('simple-git');
4
-
5
- const { getTemplateGitRequest } = require('../../../api/cli');
6
- const { checkGit } = require('../../../utils/git');
7
- const { withTempDir } = require('../../../utils/withTempDir');
8
- const { EXTENSION_TYPES } = require('../../../constant/extension');
9
- const { successMessageRender } = require('../../../utils/views/message');
10
- const { modifyTomlFile } = require('../../../utils/toml');
11
- const { modifyJsonFile } = require('../../../utils/json');
12
-
13
- // 生成结账扩展
14
- async function generateCheckout(params) {
15
- const { targetDirectory } = params;
16
- const extensionName = path.basename(targetDirectory);
17
-
18
- // 检查 git 是否安装
19
- checkGit();
20
-
21
- await withTempDir(async (tempDir) => {
22
- const { https } = await getTemplateGitRequest('ext_co');
23
-
24
- const tempDirPath = path.join(tempDir, 'extension');
25
-
26
- // 克隆项目到本地
27
- await simpleGit().clone(https, tempDirPath);
28
-
29
- // 删除 .git 文件夹
30
- fs.rmSync(path.join(tempDirPath, '.git'), { recursive: true, force: true });
31
-
32
- // 修改 package.json
33
- await modifyJsonFile(path.join(tempDirPath, 'package.json'), (config) => {
34
- return {
35
- ...config,
36
- name: extensionName
37
- };
38
- });
39
-
40
- // 修改 shoplazza.extension.toml
41
- await modifyTomlFile(path.join(tempDirPath, 'shoplazza.extension.toml'), (config) => {
42
- return {
43
- ...config,
44
- name: extensionName,
45
- type: EXTENSION_TYPES.CHECKOUT
46
- };
47
- });
48
-
49
- // 复制目录到目标位置
50
- fs.cpSync(tempDirPath, targetDirectory, { recursive: true });
51
- });
52
-
53
- successMessageRender(`Your extension was created in extensions/${extensionName}.`);
54
- }
55
-
56
- module.exports = {
57
- generateCheckout
58
- };