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,21 +0,0 @@
1
- const fs = require('fs-extra');
2
- const path = require('path');
3
- const init = require('../init');
4
- const execa = require('execa');
5
-
6
- jest.mock('execa', () => jest.fn());
7
-
8
- describe('theme init', () => {
9
- it('clone repo', async () => {
10
- jest.setTimeout(20 * 1000);
11
- if (fs.existsSync(path.join(process.cwd(), 'test'))) {
12
- fs.rmSync(path.join(process.cwd(), 'test'), { recursive: true });
13
- }
14
- expect(fs.existsSync(path.join(process.cwd(), 'test'))).toBe(false);
15
- console.log = jest.fn;
16
- await init({ name: 'test' });
17
- expect(execa).toHaveBeenCalledWith('git', ['clone', 'https://github.com/Shoplazza/LifeStyle', 'test']);
18
- expect(fs.existsSync(path.join(process.cwd(), 'test'))).toBe(true);
19
- fs.rmSync(path.join(process.cwd(), 'test'), { recursive: true });
20
- });
21
- });
@@ -1,80 +0,0 @@
1
- const chalk = require('chalk');
2
- const MockAdapter = require('axios-mock-adapter');
3
- const listCommand = require('../list');
4
- const openAPI = require('../../../openAPI');
5
- const { set, empty } = require('../../../db/user');
6
-
7
- jest.mock('ora', () => () => ({
8
- start: () => ({
9
- stop: () => {}
10
- })
11
- }));
12
- jest.mock('../../../db');
13
- jest.mock('../../../openAPI/index');
14
-
15
- describe('theme list', () => {
16
- let mock;
17
-
18
- beforeEach(() => {
19
- set({
20
- store_domain: 'developer.myshoplaza.com'
21
- });
22
- mock = new MockAdapter(openAPI);
23
- });
24
-
25
- afterEach(() => {
26
- mock.reset();
27
- empty();
28
- });
29
-
30
- it('list info', async () => {
31
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes`).replyOnce(200, {
32
- data: {
33
- themes: [
34
- {
35
- id: 'theme_id1',
36
- name: 'theme1'
37
- }
38
- ]
39
- }
40
- });
41
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/default-theme`).replyOnce(200, {
42
- data: {
43
- id: 'theme_id',
44
- name: 'default_theme'
45
- }
46
- });
47
-
48
- console.log = jest.fn();
49
- await listCommand();
50
- expect(console.log.mock.calls[0][0]).toBe(
51
- `${chalk.yellow('⭑')} List of ${chalk.green('developer.myshoplaza.com')} themes:`
52
- );
53
- expect(console.log.mock.calls[1][0]).toBe(
54
- [
55
- {
56
- id: 'theme_id',
57
- name: 'default_theme'
58
- },
59
- {
60
- id: 'theme_id1',
61
- name: 'theme1'
62
- }
63
- ].reduce(
64
- (acc, theme) =>
65
- (acc += `${theme.name} (${chalk.green(theme.id)}) ${
66
- theme.id === 'theme_id' ? chalk.green('[live]') : chalk.yellow('[unpublished]')
67
- }\n`),
68
- ''
69
- )
70
- );
71
- });
72
-
73
- it('fetch failed', async () => {
74
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/default-theme`).replyOnce(500);
75
-
76
- console.log = jest.fn();
77
- await listCommand();
78
- expect(console.log.mock.calls[0][0]).toBe(chalk.red(`✗ Failed to get theme list`));
79
- });
80
- });
@@ -1,17 +0,0 @@
1
- const chalk = require('chalk');
2
- const path = require('path');
3
- const fs = require('fs-extra');
4
- const { packageCommand } = require('../package');
5
- const { fstat } = require('fs');
6
-
7
- describe('theme package', () => {
8
- it('zip theme', async () => {
9
- process.chdir(path.join(process.cwd(), '/fixtures'));
10
- console.log = jest.fn();
11
- await packageCommand();
12
- expect(console.log.mock.calls[0][0]).toBe(`${chalk.green('✓')} Theme packaged in TestLifeStyle-1.0.zip`);
13
- expect(fs.existsSync(path.join(process.cwd(), 'TestLifeStyle-1.0.zip'))).toBe(true);
14
- fs.rmSync(path.join(process.cwd(), 'TestLifeStyle-1.0.zip'));
15
- process.chdir(path.join(process.cwd(), '../'));
16
- });
17
- });
@@ -1,61 +0,0 @@
1
- const chalk = require('chalk');
2
- const path = require('path');
3
- const MockAdapter = require('axios-mock-adapter');
4
- const publishCommand = require('../publish');
5
- const openAPI = require('../../../openAPI');
6
- const { set, empty } = require('../../../db/user');
7
-
8
- jest.mock('inquirer', () => ({
9
- prompt: () => Promise.resolve({ confirm: 'Yes' })
10
- }));
11
- jest.mock('../../../db');
12
- jest.mock('../../../openAPI/index');
13
-
14
- describe('theme publish', () => {
15
- let mock;
16
-
17
- beforeEach(() => {
18
- set({
19
- store_domain: 'developer.myshoplaza.com'
20
- });
21
- mock = new MockAdapter(openAPI);
22
- });
23
-
24
- afterEach(() => {
25
- mock.reset();
26
- empty();
27
- });
28
-
29
- it('publish success', async () => {
30
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id`).replyOnce(200, {
31
- data: { name: 'TestLifeStyle', merchant_theme_id: 'merchant_theme_id' }
32
- });
33
- mock.onPatch(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id/publish`).replyOnce(200);
34
-
35
- process.chdir(path.join(process.cwd(), '/fixtures'));
36
-
37
- console.log = jest.fn();
38
- await publishCommand({
39
- theme: 'theme_id'
40
- });
41
-
42
- expect(console.log.mock.calls[0][0]).toBe(
43
- chalk.green(`✓ Your theme is now live at https://developer.myshoplaza.com`)
44
- );
45
- process.chdir(path.join(process.cwd(), '../'));
46
- });
47
-
48
- it('publish failed', async () => {
49
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id`).replyOnce(200, {
50
- data: { name: 'TestLifeStyle', merchant_theme_id: 'merchant_theme_id' }
51
- });
52
- mock.onPatch(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id/publish`).replyOnce(500);
53
-
54
- console.log = jest.fn();
55
- await publishCommand({
56
- theme: 'theme_id'
57
- });
58
-
59
- expect(console.log.mock.calls[0][0]).toBe(chalk.red(`✗ Failed to publish theme`));
60
- });
61
- });
@@ -1,69 +0,0 @@
1
- const chalk = require('chalk');
2
- const fs = require('fs-extra');
3
- const path = require('path');
4
- const MockAdapter = require('axios-mock-adapter');
5
- const AdmZip = require('adm-zip');
6
- const pullCommand = require('../pull');
7
- const openAPI = require('../../../openAPI');
8
- const { set, empty } = require('../../../db/user');
9
-
10
- jest.mock('ora', () => () => ({
11
- start: () => ({
12
- stop: () => {}
13
- })
14
- }));
15
- jest.mock('../../../db');
16
- jest.mock('../../../openAPI/index');
17
-
18
- describe('theme pull', () => {
19
- let mock;
20
-
21
- beforeEach(() => {
22
- set({
23
- store_domain: 'developer.myshoplaza.com'
24
- });
25
- mock = new MockAdapter(openAPI);
26
- });
27
-
28
- afterEach(() => {
29
- mock.reset();
30
- empty();
31
- });
32
-
33
- it('pull success', async () => {
34
- const zip = new AdmZip();
35
- zip.addLocalFolder(path.join(process.cwd(), '/fixtures'), 'test');
36
- zip.writeZip(path.join(process.cwd(), 'test.zip'));
37
- fs.ensureDirSync(path.join(process.cwd(), '/fixtures/theme'));
38
-
39
- mock
40
- .onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id/download`)
41
- .replyOnce(200, fs.createReadStream(path.join(process.cwd(), 'test.zip')));
42
-
43
- fs.rmSync(path.join(process.cwd(), 'test.zip'));
44
-
45
- process.chdir(path.join(process.cwd(), '/fixtures/theme'));
46
-
47
- console.log = jest.fn();
48
- await pullCommand({
49
- theme: 'theme_id'
50
- });
51
-
52
- expect(console.log.mock.calls[0][0]).toBe(chalk.green(`✓ Theme pulled successfully`));
53
- expect(fs.existsSync(path.join(process.cwd(), '/config/settings_schema.json'))).toBe(true);
54
- fs.rmSync(process.cwd(), { recursive: true });
55
-
56
- process.chdir(path.join(process.cwd(), '../../'));
57
- });
58
-
59
- it('pull failed', async () => {
60
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id/download`).replyOnce(500);
61
-
62
- console.log = jest.fn();
63
- await pullCommand({
64
- theme: 'theme_id'
65
- });
66
-
67
- expect(console.log.mock.calls[0][0]).toBe(chalk.red(`✗ Failed to pull theme`));
68
- });
69
- });
@@ -1,63 +0,0 @@
1
- const chalk = require('chalk');
2
- const path = require('path');
3
- const MockAdapter = require('axios-mock-adapter');
4
- const { pushCommand } = require('../push');
5
- const openAPI = require('../../../openAPI');
6
- const { set, empty } = require('../../../db/user');
7
-
8
- jest.mock('ora', () => () => ({
9
- start: () => ({
10
- stop: () => {}
11
- })
12
- }));
13
- jest.mock('../../../db');
14
- jest.mock('../../../openAPI/index');
15
-
16
- describe('theme push', () => {
17
- let mock;
18
-
19
- beforeEach(() => {
20
- set({
21
- store_domain: 'developer.myshoplaza.com'
22
- });
23
- mock = new MockAdapter(openAPI);
24
- });
25
-
26
- afterEach(() => {
27
- mock.reset();
28
- empty();
29
- });
30
-
31
- it('push success', async () => {
32
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id`).replyOnce(200, {
33
- data: { merchant_theme_id: 'merchant_theme_id' }
34
- });
35
- mock.onPost(`https://developer.myshoplaza.com/openapi/2020-07/themes/upload`).replyOnce(200, {
36
- task: { task: { id: 1 } }
37
- });
38
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/task/1`).replyOnce(200, {
39
- task: { status: 1, info: JSON.stringify({ name: 'TestLifeStyle', theme_id: 'theme_id' }) }
40
- });
41
-
42
- process.chdir(path.join(process.cwd(), '/fixtures'));
43
-
44
- console.log = jest.fn();
45
- await pushCommand({
46
- theme: 'theme_id'
47
- });
48
-
49
- expect(console.log.mock.calls[0][0]).toBe(chalk.green(`✓ The TestLifeStyle theme pushed successfully`));
50
- process.chdir(path.join(process.cwd(), '../'));
51
- });
52
-
53
- it('push failed', async () => {
54
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id`).replyOnce(500);
55
-
56
- console.log = jest.fn();
57
- await pushCommand({
58
- theme: 'theme_id'
59
- });
60
-
61
- expect(console.log.mock.calls[0][0]).toBe(chalk.red(`✗ Failed to push theme`));
62
- });
63
- });
@@ -1,107 +0,0 @@
1
- const path = require('path');
2
- const fs = require('fs-extra');
3
- const chalk = require('chalk');
4
- const MockAdapter = require('axios-mock-adapter');
5
- const serve = require('../serve');
6
- const openAPI = require('../../../openAPI');
7
- const { set, empty } = require('../../../db/user');
8
-
9
- jest.mock('ora', () => () => ({
10
- start: () => ({
11
- stop: () => {}
12
- })
13
- }));
14
- jest.mock('../../../db');
15
- jest.mock('../../../openAPI/index');
16
-
17
- describe('theme serve', () => {
18
- let mock;
19
-
20
- beforeEach(() => {
21
- set({
22
- store_domain: 'developer.myshoplaza.com'
23
- });
24
- mock = new MockAdapter(openAPI);
25
- });
26
-
27
- afterEach(() => {
28
- mock.reset();
29
- empty();
30
- });
31
-
32
- it('start dev server', async () => {
33
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id`).replyOnce(200, {
34
- data: { merchant_theme_id: 'merchant_theme_id' }
35
- });
36
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id/doctree`).replyOnce(200, {
37
- assets: [
38
- {
39
- id: '7848a198-9809-4163-91c7-556e6960a0c6',
40
- location: 'blog.css'
41
- },
42
- {
43
- id: '651a9948-d4e5-4fe0-bcd7-e88349f6eeaf',
44
- location: 'blog.scss'
45
- }
46
- ],
47
- config: [
48
- {
49
- id: '9e7a0930-6f6e-42f3-88ee-31e40bc28fdf',
50
- location: 'settings_data.json'
51
- },
52
- {
53
- id: '1799d8b6-82dd-4a42-bad4-32d11a98a924',
54
- location: 'settings_schema.json'
55
- }
56
- ]
57
- });
58
- mock.onPost(`https://developer.myshoplaza.com/openapi/2020-07/themes/upload`).replyOnce(200, {
59
- task: { task: { id: 1 } }
60
- });
61
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/task/1`).replyOnce(200, {
62
- task: { status: 1, info: JSON.stringify({ name: 'TestLifeStyle', theme_id: 'theme_id' }) }
63
- });
64
- mock.onPost(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id/doc`).replyOnce(200);
65
- mock.onPatch(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id/doc`).replyOnce(200);
66
- mock.onDelete(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id/doc`).replyOnce(200);
67
-
68
- process.chdir(path.join(process.cwd(), '/fixtures'));
69
- console.log = jest.fn();
70
- const watcher = await serve({ theme: 'theme_id' });
71
-
72
- expect(console.log.mock.calls[0][0]).toBe(
73
- `Please open this URL in your browser:
74
- ${chalk.green('https://developer.myshoplaza.com/?preview_theme_id=theme_id')}
75
-
76
- Customize this theme in the Theme Editor, and use 'theme pull' to get the changes:
77
- ${chalk.green(`https://developer.myshoplaza.com/admin/smart_apps/editor?theme_id=theme_id`)}`.replace(
78
- /^[^\S\n]+/gm,
79
- ''
80
- )
81
- );
82
- expect(console.log.mock.calls[1][0]).toBe(`\nListening for file changes ...`);
83
-
84
- fs.writeFileSync(path.join(process.cwd(), 'assets/test.scss'), 'body { color: red; }', 'utf8');
85
- await new Promise((r) => setTimeout(r, 1000));
86
- expect(console.log.mock.calls[2][0]).toBe(chalk.green(`[update]: ${path.join(process.cwd(), 'assets/test.scss')}`));
87
- expect(console.log.mock.calls[3][0]).toBe(
88
- chalk.cyan(`Updated, please refresh your browser, will continue listening for file changes ...`)
89
- );
90
- fs.rmSync(path.join(process.cwd(), 'assets/test.scss'));
91
- await new Promise((r) => setTimeout(r, 1000));
92
- expect(console.log.mock.calls[4][0]).toBe(chalk.green(`[remove]: ${path.join(process.cwd(), 'assets/test.scss')}`));
93
-
94
- process.chdir(path.join(process.cwd(), '../'));
95
- watcher.close();
96
- });
97
-
98
- it('not a theme directory', async () => {
99
- mock.onGet(`https://developer.myshoplaza.com/openapi/2020-07/themes/theme_id`).replyOnce(200, {
100
- data: { merchant_theme_id: 'merchant_theme_id' }
101
- });
102
- await serve({ theme: 'theme_id' });
103
- expect(console.log.mock.calls[0][0]).toBe(
104
- chalk.red('✗ Provide a config/settings_schema.json to package your theme')
105
- );
106
- });
107
- });
@@ -1,64 +0,0 @@
1
- const ora = require('ora');
2
- const chalk = require('chalk');
3
- const Sentry = require('@sentry/node');
4
- const inquirer = require('inquirer');
5
- const { getThemeDetail, getThemes, deleteTheme } = require('../../openAPI/api');
6
- const { get } = require('../../db/user');
7
- const log = require('../../log');
8
- const { formatThemeList } = require('../../utils/utils');
9
-
10
- const confirmAndDeleteTheme = async (themeName, themeId) => {
11
- const answers = await inquirer.prompt([
12
- {
13
- name: 'confirm',
14
- type: 'list',
15
- message: `Are you sure you want to delete ${themeName} on ${get('store_domain')}? ${chalk.yellow(
16
- '(Choose with ↑ ↓ ⏎)'
17
- )}`,
18
- choices: ['Yes', 'No']
19
- }
20
- ]);
21
- if (answers.confirm === 'Yes') {
22
- try {
23
- await deleteTheme(themeId);
24
- log.info(chalk.green(`✓ ${themeName} (${themeId}) theme deleted`));
25
- } catch (error) {
26
- log.error(chalk.red(`✗ Failed to delete theme`));
27
- Sentry.captureException(error);
28
- }
29
- }
30
- };
31
-
32
- module.exports = async (options) => {
33
- try {
34
- if (options.theme) {
35
- const { data } = await getThemeDetail(options.theme);
36
- if (!data) {
37
- log.error(chalk.red(`✗ Theme ${options.theme} does not exist`));
38
- return;
39
- }
40
- return confirmAndDeleteTheme(data.data.name, options.theme);
41
- } else {
42
- const storeDomain = get('store_domain');
43
- const spinner = ora(chalk.cyan(`Fetching theme lists from ${storeDomain}`)).start();
44
- const { data } = await getThemes();
45
- spinner.stop();
46
- inquirer
47
- .prompt([
48
- {
49
- name: 'theme',
50
- type: 'rawlist',
51
- message: `Select a theme to delete ${chalk.cyan('(Choose with ↑ ↓ ⏎)')}`,
52
- choices: formatThemeList(data.data.themes)
53
- }
54
- ])
55
- .then((answers) => {
56
- const themeObj = data.data.themes.find((theme) => theme.id === answers.theme);
57
- return confirmAndDeleteTheme(themeObj.name, answers.theme);
58
- });
59
- }
60
- } catch (error) {
61
- log.error(chalk.red(`✗ Failed to delete theme`));
62
- Sentry.captureException(error);
63
- }
64
- };
@@ -1,51 +0,0 @@
1
- const path = require('path');
2
- const process = require('process');
3
- const fs = require('fs-extra');
4
- const chalk = require('chalk');
5
- const inquirer = require('inquirer');
6
- const Sentry = require('@sentry/node');
7
- const execa = require('execa');
8
- const ora = require('ora');
9
- const log = require('../../log');
10
-
11
- const createDirAndCloneTheme = async (directory) => {
12
- const themeDir = path.join(process.cwd(), directory);
13
- if (fs.existsSync(themeDir)) {
14
- log.error(chalk.red(`✗ Destination path ${directory} already exists and is not an empty directory.`));
15
- return;
16
- }
17
- fs.mkdirSync(themeDir);
18
- const spinner = ora(chalk.cyan(`Cloning https://github.com/Shoplazza/Nova-2023 into ${directory}…`)).start();
19
- await execa('git', ['clone', 'https://github.com/Shoplazza/Nova-2023', directory]);
20
- fs.rmSync(path.join(process.cwd(), `${directory}/.git`), { recursive: true });
21
- spinner.stop();
22
- log.info(chalk.green(`✓ Cloned into ${directory}`));
23
- log.info(`Please run ${chalk.green(`cd ${directory}`)}`);
24
- };
25
-
26
- module.exports = async (options) => {
27
- try {
28
- if (options.name) {
29
- await createDirAndCloneTheme(options.name);
30
- return;
31
- }
32
- inquirer
33
- .prompt([
34
- {
35
- name: 'name',
36
- type: 'input',
37
- message: 'Theme directory name'
38
- }
39
- ])
40
- .then((answers) => {
41
- if (answers.name) {
42
- createDirAndCloneTheme(answers.name);
43
- } else {
44
- log.error(chalk.red(`✗ Please input theme directory name.`));
45
- }
46
- });
47
- } catch (error) {
48
- log.error(chalk.red(`✗ Failed to init theme`));
49
- Sentry.captureException(error);
50
- }
51
- };
@@ -1,28 +0,0 @@
1
- const ora = require('ora');
2
- const chalk = require('chalk');
3
- const Sentry = require('@sentry/node');
4
- const { get } = require('../../db/user');
5
- const { getDefaultThemeDetail, getThemes } = require('../../openAPI/api');
6
- const log = require('../../log');
7
-
8
- module.exports = async () => {
9
- try {
10
- const storeDomain = get('store_domain');
11
- const spinner = ora(chalk.cyan(`Fetching theme lists from ${storeDomain}`)).start();
12
- const [themesRes, defaultThemeRes] = await Promise.all([getThemes(), getDefaultThemeDetail()]);
13
- spinner.stop();
14
- log.info(`${chalk.yellow('⭑')} List of ${chalk.green(storeDomain)} themes:`);
15
- log.info(
16
- [defaultThemeRes.data.data, ...themesRes.data.data.themes].reduce(
17
- (acc, theme) =>
18
- (acc += `${theme.name} (${chalk.green(theme.id)}) ${
19
- theme.id === defaultThemeRes.data.data.id ? chalk.green('[live]') : chalk.yellow('[unpublished]')
20
- }\n`),
21
- ''
22
- )
23
- );
24
- } catch (error) {
25
- log.error(chalk.red(`✗ Failed to get theme list`));
26
- Sentry.captureException(error);
27
- }
28
- };
@@ -1,37 +0,0 @@
1
- const path = require('path');
2
- const fs = require('fs-extra');
3
- const chalk = require('chalk');
4
- const Sentry = require('@sentry/node');
5
- const log = require('../../log');
6
- const { zipTheme } = require('../../utils/utils');
7
-
8
- const checkAndZipThemes = () => {
9
- const configPath = path.join(process.cwd(), 'config/settings_schema.json');
10
- if (!fs.pathExistsSync(configPath)) {
11
- log.error(chalk.red('✗ Provide a config/settings_schema.json to package your theme'));
12
- return;
13
- }
14
- const config = fs.readJSONSync(configPath);
15
- const themeInfo = config.find((section) => section.name === 'theme_info');
16
- const { theme_name, theme_version = '' } = themeInfo;
17
- if (!theme_name) {
18
- log.error(chalk.red('✗ Provide a theme_info.theme_name configuration in config/settings_schema.json'));
19
- return;
20
- }
21
- const zipName = `${theme_name}${theme_version ? `-${theme_version}` : ''}`;
22
- const zipPath = path.join(process.cwd(), `${zipName}.zip`);
23
- fs.removeSync(zipPath);
24
- zipTheme(process.cwd(), zipName);
25
- return { theme_name, theme_version, zipName, zipPath };
26
- };
27
-
28
- exports.checkAndZipThemes = checkAndZipThemes;
29
- exports.packageCommand = () => {
30
- try {
31
- const { zipName } = checkAndZipThemes();
32
- log.info(`${chalk.green('✓')} Theme packaged in ${zipName}.zip`);
33
- } catch (error) {
34
- log.error(chalk.red(`✗ Failed to package theme`));
35
- Sentry.captureException(error);
36
- }
37
- };
@@ -1,56 +0,0 @@
1
- const ora = require('ora');
2
- const chalk = require('chalk');
3
- const inquirer = require('inquirer');
4
- const Sentry = require('@sentry/node');
5
- const { getThemeDetail, getThemes, publishTheme } = require('../../openAPI/api');
6
- const { get } = require('../../db/user');
7
- const log = require('../../log');
8
- const { formatThemeList } = require('../../utils/utils');
9
-
10
- const confirmAndExecPublish = async (themeName, themeId) => {
11
- const answers = await inquirer.prompt([
12
- {
13
- name: 'confirm',
14
- type: 'list',
15
- message: `Are you sure you want to make ${themeName} the new live theme on ${get('store_domain')}? ${chalk.yellow(
16
- '(Choose with ↑ ↓ ⏎)'
17
- )}`,
18
- choices: ['Yes', 'No']
19
- }
20
- ]);
21
- if (answers.confirm === 'Yes') {
22
- await publishTheme(themeId);
23
- log.info(chalk.green(`✓ Your theme is now live at https://${get('store_domain')}`));
24
- }
25
- };
26
-
27
- module.exports = async (options) => {
28
- try {
29
- if (options.theme) {
30
- const { data } = await getThemeDetail(options.theme);
31
- if (!data) {
32
- log.error(chalk.red(`✗ Theme ${options.theme} does not exist`));
33
- return;
34
- }
35
- await confirmAndExecPublish(data.data.name, options.theme);
36
- } else {
37
- const storeDomain = get('store_domain');
38
- const spinner = ora(chalk.cyan(`Fetching theme lists from ${storeDomain}`)).start();
39
- const { data } = await getThemes();
40
- spinner.stop();
41
- const answers = await inquirer.prompt([
42
- {
43
- name: 'theme',
44
- type: 'rawlist',
45
- message: `Select a theme to publish ${chalk.cyan('(Choose with ↑ ↓ ⏎)')}`,
46
- choices: formatThemeList(data.data.themes)
47
- }
48
- ]);
49
- const themeObj = data.data.themes.find((theme) => theme.id === answers.theme);
50
- await confirmAndExecPublish(themeObj.name, answers.theme);
51
- }
52
- } catch (error) {
53
- log.error(chalk.red(`✗ Failed to publish theme`));
54
- Sentry.captureException(error);
55
- }
56
- };