@shopify/cli-hydrogen 4.0.0-alpha.9 → 4.0.1

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 (383) hide show
  1. package/dist/commands/hydrogen/build.d.ts +20 -0
  2. package/dist/commands/hydrogen/build.js +36 -33
  3. package/dist/commands/hydrogen/check.d.ts +18 -0
  4. package/dist/commands/hydrogen/check.js +35 -0
  5. package/dist/commands/hydrogen/dev.d.ts +14 -0
  6. package/dist/commands/hydrogen/dev.js +56 -60
  7. package/dist/commands/hydrogen/generate/route.d.ts +34 -0
  8. package/dist/commands/hydrogen/generate/route.js +165 -0
  9. package/dist/commands/hydrogen/generate/route.test.d.ts +1 -0
  10. package/dist/commands/hydrogen/generate/route.test.js +126 -0
  11. package/dist/commands/hydrogen/generate/routes.d.ts +16 -0
  12. package/dist/commands/hydrogen/generate/routes.js +22 -0
  13. package/dist/commands/hydrogen/init.d.ts +22 -0
  14. package/dist/commands/hydrogen/init.js +169 -25
  15. package/dist/commands/hydrogen/preview.d.ts +17 -0
  16. package/dist/commands/hydrogen/preview.js +2 -2
  17. package/dist/create-app.d.ts +1 -0
  18. package/dist/create-app.js +4 -0
  19. package/dist/{templates/demo-store/app/routes/($lang) → generator-templates/routes}/[robots.txt].tsx +2 -1
  20. package/dist/{templates/demo-store/app/routes/($lang) → generator-templates/routes}/[sitemap.xml].tsx +8 -6
  21. package/dist/generator-templates/routes/account/login.tsx +74 -0
  22. package/dist/generator-templates/routes/account/register.tsx +74 -0
  23. package/dist/generator-templates/routes/cart.tsx +43 -0
  24. package/dist/generator-templates/routes/collections/$collectionHandle.tsx +65 -0
  25. package/dist/{templates/demo-store/app → generator-templates}/routes/graphiql.tsx +0 -0
  26. package/dist/{templates/hello-world/app → generator-templates}/routes/index.tsx +0 -0
  27. package/dist/generator-templates/routes/pages/$pageHandle.tsx +74 -0
  28. package/dist/{templates/demo-store/app/routes/($lang) → generator-templates/routes}/policies/$policyHandle.tsx +9 -38
  29. package/dist/generator-templates/routes/policies/index.tsx +65 -0
  30. package/dist/generator-templates/routes/products/$productHandle.tsx +57 -0
  31. package/dist/hooks/init.d.ts +5 -0
  32. package/dist/utils/check-lockfile.d.ts +3 -0
  33. package/dist/utils/check-lockfile.js +78 -0
  34. package/dist/utils/check-version.d.ts +3 -0
  35. package/dist/utils/check-version.js +50 -0
  36. package/dist/utils/config.d.ts +18 -0
  37. package/dist/utils/config.js +116 -43
  38. package/dist/utils/flags.d.ts +10 -0
  39. package/dist/utils/flags.js +15 -3
  40. package/dist/utils/flags.test.d.ts +1 -0
  41. package/dist/utils/flags.test.js +18 -0
  42. package/dist/utils/log.d.ts +5 -0
  43. package/dist/utils/mini-oxygen.d.ts +11 -0
  44. package/dist/utils/mini-oxygen.js +7 -4
  45. package/dist/utils/missing-routes.d.ts +6 -0
  46. package/dist/utils/missing-routes.js +71 -0
  47. package/dist/utils/template-downloader.d.ts +11 -0
  48. package/dist/utils/template-downloader.js +66 -0
  49. package/dist/utils/transpile-ts.d.ts +16 -0
  50. package/dist/utils/transpile-ts.js +169 -0
  51. package/dist/utils/virtual-routes.d.ts +7 -0
  52. package/dist/utils/virtual-routes.js +47 -0
  53. package/dist/utils/virtual-routes.test.d.ts +1 -0
  54. package/dist/utils/virtual-routes.test.js +46 -0
  55. package/dist/virtual-routes/assets/dummy.d.ts +1 -0
  56. package/dist/virtual-routes/assets/dummy.js +1 -0
  57. package/dist/virtual-routes/assets/dummy.ts +1 -0
  58. package/dist/{templates/demo-store/dist/client → virtual-routes/assets}/favicon.svg +0 -0
  59. package/dist/virtual-routes/assets/styles.css +207 -0
  60. package/dist/virtual-routes/components/HydrogenLogoBaseBW.jsx +7 -0
  61. package/dist/virtual-routes/components/HydrogenLogoBaseColor.jsx +13 -0
  62. package/dist/virtual-routes/components/IconBanner.jsx +47 -0
  63. package/dist/virtual-routes/components/IconDiscord.jsx +4 -0
  64. package/dist/virtual-routes/components/IconError.jsx +20 -0
  65. package/dist/virtual-routes/components/IconGithub.jsx +4 -0
  66. package/dist/virtual-routes/components/IconTwitter.jsx +4 -0
  67. package/dist/virtual-routes/components/Layout.jsx +6 -0
  68. package/dist/virtual-routes/routes/graphiql.jsx +5 -0
  69. package/dist/virtual-routes/routes/index.jsx +140 -0
  70. package/dist/virtual-routes/virtual-root.jsx +38 -0
  71. package/oclif.manifest.json +1 -131
  72. package/package.json +36 -7
  73. package/dist/templates/demo-store/.cache/content-v2/sha512/02/76/13bbea15bb42b81a204b0dc5f14726e0bfa8d012a7b284f887cc2e3c92195d6b07a78f199f990b311ca5fafa9079563503cdd81808cd9b7e496d86c72732 +0 -1
  74. package/dist/templates/demo-store/.cache/content-v2/sha512/08/56/c9a478b8c5c2fbfb6eed219f0861db568eceecbb45155124491ca25125ca421aac7e1b10d29151e5294a776ae10e02e01dc2da3561da793d111c4f908502 +0 -1
  75. package/dist/templates/demo-store/.cache/content-v2/sha512/0f/d5/950a1e0708f440217f567601ee2bfed73c56ada7491058d1ebb769f9a348484d29d4c3897d848d5f9123b0cfb8be69de4ebddc9d964a368e779e2927be5b +0 -1
  76. package/dist/templates/demo-store/.cache/content-v2/sha512/10/31/47b4061a63eaedea6368416dff9248ab2e51a4bea4004882a27c1437490c8150a4709438d28bbd8fd71a7516c9af612204f6116b0604e18902b5c6f69453 +0 -1
  77. package/dist/templates/demo-store/.cache/content-v2/sha512/13/f6/b7f804d45a961ca1e392429e75ad80f23ba46cbba0e960c6a70f8de81f3f3763af59651474176798d1a1a4bd2a5109b1d441f6d1c8ba070b678b38378adf +0 -1
  78. package/dist/templates/demo-store/.cache/content-v2/sha512/28/7c/c71b0c6367bdf7307a8061fe1c4568c9f1e9603d835b6fc917fe8042535a867c37154e35376a01ad6bdb3c2d6f29b88b41902fd6f20b1227e02081682d01 +0 -1
  79. package/dist/templates/demo-store/.cache/content-v2/sha512/29/62/a788055902cff8e9403b901ebd715b56541b0ee4dc9f13cb739cd906ae89ae1fa7199831d613ab21c3ee5d84c5456608dc8707d9199ae3d8ba5e9fd7ce95 +0 -1
  80. package/dist/templates/demo-store/.cache/content-v2/sha512/2b/b2/d5a8e11c89553d08b26b4a7ba8b901de31c0b182f745f8c5d1c5aba44bf46d0d69e3d8042f5917728d0b69d5eba102e3de332f8141aef67a12d215a66843 +0 -1
  81. package/dist/templates/demo-store/.cache/content-v2/sha512/34/dd/ec66f7075936ba94dd741485089904914960fd50a4886c31783c27c27ca08852be43dea712e8aaea6f5197b83ccf1949c8a24c27ff61f5280377917d722e +0 -1
  82. package/dist/templates/demo-store/.cache/content-v2/sha512/46/04/af285aee74d96b28b24f75d7911de65e6c7bb26475ab5219fe5308028fda55060cf45650dfa09c0731ec73ece453c1e24e0c38715e8d4c5c80fd6365a1f4 +0 -1
  83. package/dist/templates/demo-store/.cache/content-v2/sha512/4e/ea/2fe739931285fa2839b54fe6c91470491475eac2d960e35ef0c6750313c08fbf2b2d784c0bb71c5fb2ef6c4a27f2202a4c29199b53bf7fd43c5721f90ecf +0 -1
  84. package/dist/templates/demo-store/.cache/content-v2/sha512/51/ab/e165384df6374c7b2d0ebebc8642ecb0e0c14f7c5b57970ec5d2e17f7d1643e0b01eda69e5ffbefde85ecba6d613bcc5175c5564e36bfb73d966c8ea4153 +0 -1
  85. package/dist/templates/demo-store/.cache/content-v2/sha512/54/b2/a99146d18769ec698b6c61e4c3e63689a24110cca7c671d926fc1320f5a2ac5cdbf143db9074dcfb383359307c50ccbe2512f2d9ee992eb53f2ed98997af +0 -1
  86. package/dist/templates/demo-store/.cache/content-v2/sha512/57/7e/37b69b357be4c488e5fca37c009c908201ac2107ddaa589143bcb108e9c5f7e4ca91a36f068b3f88bb0da655d7832bd040dcbef25d807faf0804a7f93c9a +0 -1
  87. package/dist/templates/demo-store/.cache/content-v2/sha512/6d/d8/5ad2b238dcc09122c8977b26e2a2eb94e12b1cda5181a020ec77d9364ea2efdc2ddddaf2ba766ced871d8cc33e5862fb4ae0c6591080b7523e5e779dceb5 +0 -1
  88. package/dist/templates/demo-store/.cache/content-v2/sha512/72/e4/3df1f2ae672aa3148b6afde9bd16b5371250464c301be7a4ca40e459768db712d39fb7039ce9710264f726b531b7dd346e43fe260b53789206a05f665393 +0 -1
  89. package/dist/templates/demo-store/.cache/content-v2/sha512/73/40/c822831f11f08a9ceea944d0145b072ba6164a3e2e75f98fda5437cda6dfddf9ca9450445c1f3236228d6259ac95e4cde9bb6e5996490ed00b7b13b06121 +0 -1
  90. package/dist/templates/demo-store/.cache/content-v2/sha512/73/ad/c5cb88faf344aa1be4c7f263610bbf4e5b4b4122a277e9f8adb20bdaabf46a65f647d902bf885172c5e17f16d63c69d9f0213938ad0648099d627bcdc7a3 +0 -1
  91. package/dist/templates/demo-store/.cache/content-v2/sha512/79/6a/c7905d20904ce592cd04dabc941dcfb9ae88a2936f564c6ca21dba66c7b89f44c697504d1fef3427d5121f3ce0abfc72225a25a5985cc2f823c50cb1a4e0 +0 -1
  92. package/dist/templates/demo-store/.cache/content-v2/sha512/7e/bd/739d3492efb96a9a5952538eee6f83dd7123c59a4b48538a5a554b8684ba84a1e65dd626b5aa9c6dc74c96734c46e3303ab93e6a5fcc56ecb4150c036aea +0 -1
  93. package/dist/templates/demo-store/.cache/content-v2/sha512/88/76/d18fdfbb05293909609d42368642fc6da4bd138c5864ec2f721212b52e595b84ae46f48021ed3e6240edf443f78bdea557d56d700e3da848459ea3077a80 +0 -1
  94. package/dist/templates/demo-store/.cache/content-v2/sha512/88/d0/847cc94057b70b5352a6f097d172883a789eedabfe597475672bec5495d323bc41e185cd5a6477aa691befeb69bd6f19f77b4735ebd8f230d39491bdabae +0 -1
  95. package/dist/templates/demo-store/.cache/content-v2/sha512/93/6b/e60098157f6bff8ba570cab2ffd97a14983109006f7fa87e4432728366f96dfb19e957d28754daa45f1b6cb2421d26ab59bbd5ce5a448d6102e8e662403d +0 -1
  96. package/dist/templates/demo-store/.cache/content-v2/sha512/bc/1c/74650cdfe58d3295c52501b3572b71ca4d0bcebe895291b39d63fc57d60b1924315d5b6292c825bec288196d39acf45d63688726fd77e85d99ce18e52f28 +0 -1
  97. package/dist/templates/demo-store/.cache/content-v2/sha512/bc/33/6e26ece5ac53d9eac9ac8a192ef39faf2a587a5808253c659fb1d371c477fc8074d428c8d1929b0d85dd1fec66fc79ea6b9fcb01507e2efec75fb7fbc2cc +0 -1
  98. package/dist/templates/demo-store/.cache/content-v2/sha512/cb/63/324e426b4c93a3fa8db83dab506b9abbe2d7628897dfd1369642f19d66f140c090e1c3834728d5082f8cffe846f7c54d112e11f5d934d629ed996d177a1f +0 -1
  99. package/dist/templates/demo-store/.cache/content-v2/sha512/d6/bd/656ddf1b02384b21b4fb55c615f28bba616f85c0992a8555bfbc3b0cf0692e2b3f20a534b4c3baef86e7c9ccf36b8d3a9239747b3d8422ff4dbe7dd2d0a6 +0 -1
  100. package/dist/templates/demo-store/.cache/content-v2/sha512/da/84/b6d27e02f9b109d7cff3095b08e2e2ed1802c8b6829c98f6e297d1c404059f8bacfdc278afd07e2f81cbc487318396a3775037b678ab6aff9a5231c94c0d +0 -1
  101. package/dist/templates/demo-store/.cache/content-v2/sha512/e8/ae/9b467e1d23913d4584d9417875b3cdc25f6dfed8b228f3a0c818129010b778aae1af1eb200b015ab428e79afe0ef1061262392fbdb96ed7da95efbe7f758 +0 -1
  102. package/dist/templates/demo-store/.cache/content-v2/sha512/f4/ba/e578b89fa1a4a0549fa2e68e0ba078fa8c9207c376189d1550a7ae0e54c4c0548d0a29a0cef532ca613e25832b9343e74f6a8bc7338fcc28d51e6e3d7898 +0 -1
  103. package/dist/templates/demo-store/.cache/content-v2/sha512/fb/75/9195d7f913bc6ae5a345003e0863e0c38c00e744334e2ae61feba1a3099be8207599085a8264590dbd0fd9e1fff1d58037183d106cdbc750c7ad6f979d88 +0 -1
  104. package/dist/templates/demo-store/.cache/content-v2/sha512/fd/ef/df6382410602f345da5bb420585629c22c350bc028c87eb6da71e611f381c5ccba09b435b9b5fb31d7c8beb5b8abfa87abdb874b189a3211efe61840fbac +0 -1
  105. package/dist/templates/demo-store/.cache/content-v2/sha512/fd/f3/986b7ee5ea5ad1d89af5c08de69d43c025b54381092e0a19fd7e7a1e0352552aa85c056315ce5e11a46ec75a252b1a44e2083abb73cd6df8407dfdb0ac48 +0 -1
  106. package/dist/templates/demo-store/.cache/index-v5/05/44/bebd201ef5e9e9a7c41bd789ff110691a32c7f7fbbbdd630f33d96667cd1 +0 -2
  107. package/dist/templates/demo-store/.cache/index-v5/26/b5/113aeb17f9f4ef406a1f8b143895199ca545fd0cc1e7972435a092910963 +0 -2
  108. package/dist/templates/demo-store/.cache/index-v5/2c/09/e60b5cd818510e0cbec908aae3b74175e35e446f4383e87c21489433a11e +0 -2
  109. package/dist/templates/demo-store/.cache/index-v5/38/21/c3fb7841590b85142018ba88a01045ef1249ac34211342579f0129eae294 +0 -2
  110. package/dist/templates/demo-store/.cache/index-v5/3a/98/8858fe7de4bf85d37c71adc322cc95335b498bef9a4ae41db324bf5696cc +0 -2
  111. package/dist/templates/demo-store/.cache/index-v5/3e/40/7021422a7cae2c05484b491fb5b85edd82b325e598ac9e5c6afb858049da +0 -2
  112. package/dist/templates/demo-store/.cache/index-v5/47/2f/8e9ec62247eca3464d07de774855bb30a56145adc6525b907490e0c1bda0 +0 -2
  113. package/dist/templates/demo-store/.cache/index-v5/5e/83/14bed234cd143eaf4043de721fcf4250a5adc7008e76d663365e8a322c88 +0 -2
  114. package/dist/templates/demo-store/.cache/index-v5/5f/87/f79366b4aab5423acdda7930c6c989c49dd1c6607885df3afaa5e6873c9f +0 -2
  115. package/dist/templates/demo-store/.cache/index-v5/6e/9e/dc622ea9b5c66089a08f3e8b7a0e62a29e85bab337da0a3b28d6126185ec +0 -2
  116. package/dist/templates/demo-store/.cache/index-v5/71/4c/401eb7f3b2db5e56857a3ddd90e61181e636a5d01cc569ff8671ddf7f14b +0 -2
  117. package/dist/templates/demo-store/.cache/index-v5/78/84/46021cf9ede94313b5bc2cbf2355909ae811d4879a7747f9e2341f6b5bfb +0 -2
  118. package/dist/templates/demo-store/.cache/index-v5/79/2e/b0dd8fcd37a11ecb71cfd33184651560cabda672e55e0b244fc6f825190c +0 -2
  119. package/dist/templates/demo-store/.cache/index-v5/7b/e1/807e64f6a84e568bf9163283e9d49b77b24ff24bd8eed751d9fd94ea404a +0 -2
  120. package/dist/templates/demo-store/.cache/index-v5/85/07/e0c4be5b8442583f11be2d0b6f09171d22721437456b745eb2c977294995 +0 -2
  121. package/dist/templates/demo-store/.cache/index-v5/87/4d/89bc172664efe0dc7f86d8e67559073b2900ae079bd42ae9e3c015d38ab0 +0 -2
  122. package/dist/templates/demo-store/.cache/index-v5/8c/0d/a633a8771437b330d83eef0fdd99a81c41356b2bdc81f80ec9277f92b060 +0 -2
  123. package/dist/templates/demo-store/.cache/index-v5/a3/fc/e2e503290d165b9b0e20c6880bc23ff8ec39a440482418b5103c36be66b9 +0 -2
  124. package/dist/templates/demo-store/.cache/index-v5/a5/bc/d87ab9468457cb872d6c360f8acecd05e0f88b7239b50754f120706fabd4 +0 -2
  125. package/dist/templates/demo-store/.cache/index-v5/a5/c0/8e6e4f498a17b6198e54f204247ba544e6404b282d4ce3065d85fa69a8a4 +0 -2
  126. package/dist/templates/demo-store/.cache/index-v5/af/65/89b0c9eb41779c1658ace443604fea125c524bc95cfc71c9b6300da2dc81 +0 -2
  127. package/dist/templates/demo-store/.cache/index-v5/b2/75/51549baf010c977c70017db497fd9bd20e1efa9b658a6d52761c559f9c0b +0 -2
  128. package/dist/templates/demo-store/.cache/index-v5/b3/75/d3e7a4a5df68530007409daf1d2e66ab789c8b658d1819d7e5fd183f5f57 +0 -2
  129. package/dist/templates/demo-store/.cache/index-v5/bb/db/9dc2cbdcdc6ff352f9a34463a02e198aa2123a4c2e4ef37fea8b8ccae413 +0 -2
  130. package/dist/templates/demo-store/.cache/index-v5/d0/c4/d960260ece228d28f70e317741b3f3f3df05c53956d870235837ae2b73b4 +0 -2
  131. package/dist/templates/demo-store/.cache/index-v5/d3/ca/ff5860148f0bedafb91dab72b54462de81a32a21210324c45a051b197b48 +0 -2
  132. package/dist/templates/demo-store/.cache/index-v5/d4/55/296e80e87e2652f4cf1aebd5419fe73ef16c94ab20cd0400166d44ea1746 +0 -2
  133. package/dist/templates/demo-store/.cache/index-v5/da/7a/4b6977be684885e550a0d8fd21c955d0195371ffc3a9535a5a7b950a5ac9 +0 -2
  134. package/dist/templates/demo-store/.cache/index-v5/dd/aa/599a1cd855476ba058c63ae75a9c006ca11f7fbc2efc00b361d7f1b95cb4 +0 -2
  135. package/dist/templates/demo-store/.cache/index-v5/df/d2/bcfa3853e61309abab85dbd561dbc632ad0ea79b24f1b77c95f861eead5f +0 -2
  136. package/dist/templates/demo-store/.cache/index-v5/df/f5/cc3a1197c607eac768ab1b1cdb7b53a7f87b67c23c92da957d45a5bd0bda +0 -2
  137. package/dist/templates/demo-store/.cache/index-v5/e4/bd/743967c269ef70a14ba6b5dd223d26759eae9295d79f165c66f514b7d8d3 +0 -2
  138. package/dist/templates/demo-store/.cache/index-v5/e5/d3/0de6bfbb93ef9271b53f0ded9696291312b19ff087c2826d679ee2c74c01 +0 -2
  139. package/dist/templates/demo-store/.editorconfig +0 -8
  140. package/dist/templates/demo-store/.eslintignore +0 -4
  141. package/dist/templates/demo-store/.eslintrc.js +0 -16
  142. package/dist/templates/demo-store/.graphqlrc.yml +0 -1
  143. package/dist/templates/demo-store/.prettierignore +0 -2
  144. package/dist/templates/demo-store/_env +0 -6
  145. package/dist/templates/demo-store/_gitignore +0 -13
  146. package/dist/templates/demo-store/app/components/AccountAddressBook.tsx +0 -97
  147. package/dist/templates/demo-store/app/components/AccountDetails.tsx +0 -41
  148. package/dist/templates/demo-store/app/components/AddToCartButton.tsx +0 -42
  149. package/dist/templates/demo-store/app/components/Breadcrumbs.tsx +0 -36
  150. package/dist/templates/demo-store/app/components/Button.tsx +0 -56
  151. package/dist/templates/demo-store/app/components/Cart.tsx +0 -431
  152. package/dist/templates/demo-store/app/components/CartLoading.tsx +0 -50
  153. package/dist/templates/demo-store/app/components/CountrySelector.tsx +0 -180
  154. package/dist/templates/demo-store/app/components/Drawer.tsx +0 -115
  155. package/dist/templates/demo-store/app/components/FeaturedCollections.tsx +0 -54
  156. package/dist/templates/demo-store/app/components/FeaturedProducts.tsx +0 -116
  157. package/dist/templates/demo-store/app/components/FeaturedSection.tsx +0 -39
  158. package/dist/templates/demo-store/app/components/GenericError.tsx +0 -58
  159. package/dist/templates/demo-store/app/components/Grid.tsx +0 -44
  160. package/dist/templates/demo-store/app/components/Hero.tsx +0 -129
  161. package/dist/templates/demo-store/app/components/Icon.tsx +0 -253
  162. package/dist/templates/demo-store/app/components/Input.tsx +0 -24
  163. package/dist/templates/demo-store/app/components/Layout.tsx +0 -492
  164. package/dist/templates/demo-store/app/components/Link.tsx +0 -46
  165. package/dist/templates/demo-store/app/components/Modal.tsx +0 -46
  166. package/dist/templates/demo-store/app/components/NotFound.tsx +0 -22
  167. package/dist/templates/demo-store/app/components/OrderCard.tsx +0 -82
  168. package/dist/templates/demo-store/app/components/Pagination.tsx +0 -277
  169. package/dist/templates/demo-store/app/components/ProductCard.tsx +0 -140
  170. package/dist/templates/demo-store/app/components/ProductGallery.tsx +0 -114
  171. package/dist/templates/demo-store/app/components/ProductGrid.tsx +0 -93
  172. package/dist/templates/demo-store/app/components/ProductSwimlane.tsx +0 -30
  173. package/dist/templates/demo-store/app/components/Skeleton.tsx +0 -24
  174. package/dist/templates/demo-store/app/components/SortFilter.tsx +0 -414
  175. package/dist/templates/demo-store/app/components/Text.tsx +0 -192
  176. package/dist/templates/demo-store/app/components/index.ts +0 -28
  177. package/dist/templates/demo-store/app/data/countries.ts +0 -194
  178. package/dist/templates/demo-store/app/data/index.ts +0 -1027
  179. package/dist/templates/demo-store/app/entry.client.tsx +0 -4
  180. package/dist/templates/demo-store/app/entry.server.tsx +0 -26
  181. package/dist/templates/demo-store/app/hooks/useCartFetchers.tsx +0 -14
  182. package/dist/templates/demo-store/app/hooks/useIsHydrated.tsx +0 -12
  183. package/dist/templates/demo-store/app/lib/const.ts +0 -10
  184. package/dist/templates/demo-store/app/lib/placeholders.ts +0 -244
  185. package/dist/templates/demo-store/app/lib/seo/common.tsx +0 -367
  186. package/dist/templates/demo-store/app/lib/seo/debugger.tsx +0 -175
  187. package/dist/templates/demo-store/app/lib/seo/image.tsx +0 -32
  188. package/dist/templates/demo-store/app/lib/seo/index.ts +0 -4
  189. package/dist/templates/demo-store/app/lib/seo/seo.tsx +0 -24
  190. package/dist/templates/demo-store/app/lib/seo/types.ts +0 -84
  191. package/dist/templates/demo-store/app/lib/session.server.ts +0 -57
  192. package/dist/templates/demo-store/app/lib/type.ts +0 -21
  193. package/dist/templates/demo-store/app/lib/utils.ts +0 -310
  194. package/dist/templates/demo-store/app/root.tsx +0 -279
  195. package/dist/templates/demo-store/app/routes/($lang)/$.tsx +0 -7
  196. package/dist/templates/demo-store/app/routes/($lang)/account/__private/address/$id.tsx +0 -320
  197. package/dist/templates/demo-store/app/routes/($lang)/account/__private/edit.tsx +0 -273
  198. package/dist/templates/demo-store/app/routes/($lang)/account/__private/logout.ts +0 -25
  199. package/dist/templates/demo-store/app/routes/($lang)/account/__private/orders.$id.tsx +0 -322
  200. package/dist/templates/demo-store/app/routes/($lang)/account/__public/activate.$id.$activationToken.tsx +0 -218
  201. package/dist/templates/demo-store/app/routes/($lang)/account/__public/login.tsx +0 -197
  202. package/dist/templates/demo-store/app/routes/($lang)/account/__public/recover.tsx +0 -144
  203. package/dist/templates/demo-store/app/routes/($lang)/account/__public/register.tsx +0 -184
  204. package/dist/templates/demo-store/app/routes/($lang)/account/__public/reset.$id.$resetToken.tsx +0 -214
  205. package/dist/templates/demo-store/app/routes/($lang)/account.tsx +0 -188
  206. package/dist/templates/demo-store/app/routes/($lang)/api/countries.tsx +0 -22
  207. package/dist/templates/demo-store/app/routes/($lang)/api/products.tsx +0 -116
  208. package/dist/templates/demo-store/app/routes/($lang)/cart.tsx +0 -510
  209. package/dist/templates/demo-store/app/routes/($lang)/collections/$collectionHandle.tsx +0 -300
  210. package/dist/templates/demo-store/app/routes/($lang)/collections/all.tsx +0 -5
  211. package/dist/templates/demo-store/app/routes/($lang)/collections/index.tsx +0 -188
  212. package/dist/templates/demo-store/app/routes/($lang)/discounts.$code.tsx +0 -60
  213. package/dist/templates/demo-store/app/routes/($lang)/featured-products.tsx +0 -58
  214. package/dist/templates/demo-store/app/routes/($lang)/index.tsx +0 -241
  215. package/dist/templates/demo-store/app/routes/($lang)/journal/$journalHandle.tsx +0 -141
  216. package/dist/templates/demo-store/app/routes/($lang)/journal/index.tsx +0 -152
  217. package/dist/templates/demo-store/app/routes/($lang)/og-image.tsx +0 -19
  218. package/dist/templates/demo-store/app/routes/($lang)/pages/$pageHandle.tsx +0 -75
  219. package/dist/templates/demo-store/app/routes/($lang)/policies/index.tsx +0 -97
  220. package/dist/templates/demo-store/app/routes/($lang)/products/$productHandle.tsx +0 -551
  221. package/dist/templates/demo-store/app/routes/($lang)/products/index.tsx +0 -148
  222. package/dist/templates/demo-store/app/routes/($lang)/search.tsx +0 -198
  223. package/dist/templates/demo-store/app/styles/app.css +0 -4203
  224. package/dist/templates/demo-store/app/styles/custom-font.css +0 -13
  225. package/dist/templates/demo-store/app/styles/fonts/IBMPlexSerif-Text.woff2 +0 -0
  226. package/dist/templates/demo-store/app/styles/fonts/IBMPlexSerif-TextItalic.woff2 +0 -0
  227. package/dist/templates/demo-store/dist/client/build/_assets/IBMPlexSerif-Text-YFMZNZW6.woff2 +0 -0
  228. package/dist/templates/demo-store/dist/client/build/_assets/IBMPlexSerif-TextItalic-CS6L5H7S.woff2 +0 -0
  229. package/dist/templates/demo-store/dist/client/build/_assets/app-PPSD2NK6.css +0 -1
  230. package/dist/templates/demo-store/dist/client/build/_assets/custom-font-WVPOFKHF.css +0 -1
  231. package/dist/templates/demo-store/dist/client/build/_assets/favicon-5FIZBM2K.svg +0 -28
  232. package/dist/templates/demo-store/dist/client/build/_shared/chunk-7CASD2US.js +0 -9
  233. package/dist/templates/demo-store/dist/client/build/_shared/chunk-7CASD2US.js.map +0 -7
  234. package/dist/templates/demo-store/dist/client/build/_shared/chunk-7CKXJRLM.js +0 -2
  235. package/dist/templates/demo-store/dist/client/build/_shared/chunk-7CKXJRLM.js.map +0 -7
  236. package/dist/templates/demo-store/dist/client/build/_shared/chunk-AYHDHSL7.js +0 -2
  237. package/dist/templates/demo-store/dist/client/build/_shared/chunk-AYHDHSL7.js.map +0 -7
  238. package/dist/templates/demo-store/dist/client/build/_shared/chunk-EW52HEI6.js +0 -133
  239. package/dist/templates/demo-store/dist/client/build/_shared/chunk-EW52HEI6.js.map +0 -7
  240. package/dist/templates/demo-store/dist/client/build/_shared/chunk-MEPKJ2VW.js +0 -2
  241. package/dist/templates/demo-store/dist/client/build/_shared/chunk-MEPKJ2VW.js.map +0 -7
  242. package/dist/templates/demo-store/dist/client/build/_shared/chunk-NIVT6A2W.js +0 -2
  243. package/dist/templates/demo-store/dist/client/build/_shared/chunk-NIVT6A2W.js.map +0 -7
  244. package/dist/templates/demo-store/dist/client/build/_shared/chunk-SYP5DAMV.js +0 -2
  245. package/dist/templates/demo-store/dist/client/build/_shared/chunk-SYP5DAMV.js.map +0 -7
  246. package/dist/templates/demo-store/dist/client/build/_shared/chunk-SZCP6RSO.js +0 -7
  247. package/dist/templates/demo-store/dist/client/build/_shared/chunk-SZCP6RSO.js.map +0 -7
  248. package/dist/templates/demo-store/dist/client/build/_shared/chunk-YCAWB56Y.js +0 -31
  249. package/dist/templates/demo-store/dist/client/build/_shared/chunk-YCAWB56Y.js.map +0 -7
  250. package/dist/templates/demo-store/dist/client/build/entry.client-3PUQSZFF.js +0 -2
  251. package/dist/templates/demo-store/dist/client/build/entry.client-3PUQSZFF.js.map +0 -7
  252. package/dist/templates/demo-store/dist/client/build/manifest-E4E22121.js +0 -1
  253. package/dist/templates/demo-store/dist/client/build/root-6BHVTOEY.js +0 -14
  254. package/dist/templates/demo-store/dist/client/build/root-6BHVTOEY.js.map +0 -7
  255. package/dist/templates/demo-store/dist/client/build/routes/($lang)/$-HDBACFGJ.js +0 -2
  256. package/dist/templates/demo-store/dist/client/build/routes/($lang)/$-HDBACFGJ.js.map +0 -7
  257. package/dist/templates/demo-store/dist/client/build/routes/($lang)/[robots.txt]-KDA3EX2G.js +0 -2
  258. package/dist/templates/demo-store/dist/client/build/routes/($lang)/[robots.txt]-KDA3EX2G.js.map +0 -7
  259. package/dist/templates/demo-store/dist/client/build/routes/($lang)/[sitemap.xml]-AAQRJL2R.js +0 -2
  260. package/dist/templates/demo-store/dist/client/build/routes/($lang)/[sitemap.xml]-AAQRJL2R.js.map +0 -7
  261. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__private/address/$id-3WQU2LQT.js +0 -2
  262. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__private/address/$id-3WQU2LQT.js.map +0 -7
  263. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__private/edit-3XQ4BLHS.js +0 -2
  264. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__private/edit-3XQ4BLHS.js.map +0 -7
  265. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__private/logout-7KXWFBCX.js +0 -2
  266. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__private/logout-7KXWFBCX.js.map +0 -7
  267. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__private/orders.$id-7VQDCWO5.js +0 -2
  268. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__private/orders.$id-7VQDCWO5.js.map +0 -7
  269. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/activate.$id.$activationToken-Z5BQE6J5.js +0 -2
  270. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/activate.$id.$activationToken-Z5BQE6J5.js.map +0 -7
  271. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/login-K6QUN2VF.js +0 -2
  272. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/login-K6QUN2VF.js.map +0 -7
  273. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/recover-UV5PLPS5.js +0 -2
  274. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/recover-UV5PLPS5.js.map +0 -7
  275. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/register-SZW3ORRR.js +0 -2
  276. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/register-SZW3ORRR.js.map +0 -7
  277. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/reset.$id.$resetToken-WOUXQWZU.js +0 -2
  278. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account/__public/reset.$id.$resetToken-WOUXQWZU.js.map +0 -7
  279. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account-PRE5HSJE.js +0 -25
  280. package/dist/templates/demo-store/dist/client/build/routes/($lang)/account-PRE5HSJE.js.map +0 -7
  281. package/dist/templates/demo-store/dist/client/build/routes/($lang)/api/countries-UD6BGYL2.js +0 -2
  282. package/dist/templates/demo-store/dist/client/build/routes/($lang)/api/countries-UD6BGYL2.js.map +0 -7
  283. package/dist/templates/demo-store/dist/client/build/routes/($lang)/api/products-KIFIWUFE.js +0 -2
  284. package/dist/templates/demo-store/dist/client/build/routes/($lang)/api/products-KIFIWUFE.js.map +0 -7
  285. package/dist/templates/demo-store/dist/client/build/routes/($lang)/cart-3AJ7UOZX.js +0 -55
  286. package/dist/templates/demo-store/dist/client/build/routes/($lang)/cart-3AJ7UOZX.js.map +0 -7
  287. package/dist/templates/demo-store/dist/client/build/routes/($lang)/collections/$collectionHandle-ORDYEBM3.js +0 -83
  288. package/dist/templates/demo-store/dist/client/build/routes/($lang)/collections/$collectionHandle-ORDYEBM3.js.map +0 -7
  289. package/dist/templates/demo-store/dist/client/build/routes/($lang)/collections/all-IXDFOKCK.js +0 -2
  290. package/dist/templates/demo-store/dist/client/build/routes/($lang)/collections/all-IXDFOKCK.js.map +0 -7
  291. package/dist/templates/demo-store/dist/client/build/routes/($lang)/collections/index-3AJFWRDR.js +0 -2
  292. package/dist/templates/demo-store/dist/client/build/routes/($lang)/collections/index-3AJFWRDR.js.map +0 -7
  293. package/dist/templates/demo-store/dist/client/build/routes/($lang)/discounts.$code-GYKQBNLQ.js +0 -2
  294. package/dist/templates/demo-store/dist/client/build/routes/($lang)/discounts.$code-GYKQBNLQ.js.map +0 -7
  295. package/dist/templates/demo-store/dist/client/build/routes/($lang)/featured-products-KNUST6DD.js +0 -2
  296. package/dist/templates/demo-store/dist/client/build/routes/($lang)/featured-products-KNUST6DD.js.map +0 -7
  297. package/dist/templates/demo-store/dist/client/build/routes/($lang)/index-4US2D5XK.js +0 -32
  298. package/dist/templates/demo-store/dist/client/build/routes/($lang)/index-4US2D5XK.js.map +0 -7
  299. package/dist/templates/demo-store/dist/client/build/routes/($lang)/journal/$journalHandle-BCHHYOJX.js +0 -2
  300. package/dist/templates/demo-store/dist/client/build/routes/($lang)/journal/$journalHandle-BCHHYOJX.js.map +0 -7
  301. package/dist/templates/demo-store/dist/client/build/routes/($lang)/journal/index-LZR4YNUM.js +0 -2
  302. package/dist/templates/demo-store/dist/client/build/routes/($lang)/journal/index-LZR4YNUM.js.map +0 -7
  303. package/dist/templates/demo-store/dist/client/build/routes/($lang)/og-image-KUOACO4J.js +0 -2
  304. package/dist/templates/demo-store/dist/client/build/routes/($lang)/og-image-KUOACO4J.js.map +0 -7
  305. package/dist/templates/demo-store/dist/client/build/routes/($lang)/pages/$pageHandle-5WR6PFRU.js +0 -2
  306. package/dist/templates/demo-store/dist/client/build/routes/($lang)/pages/$pageHandle-5WR6PFRU.js.map +0 -7
  307. package/dist/templates/demo-store/dist/client/build/routes/($lang)/policies/$policyHandle-C5ATUMN6.js +0 -2
  308. package/dist/templates/demo-store/dist/client/build/routes/($lang)/policies/$policyHandle-C5ATUMN6.js.map +0 -7
  309. package/dist/templates/demo-store/dist/client/build/routes/($lang)/policies/index-MJDYZG5P.js +0 -2
  310. package/dist/templates/demo-store/dist/client/build/routes/($lang)/policies/index-MJDYZG5P.js.map +0 -7
  311. package/dist/templates/demo-store/dist/client/build/routes/($lang)/products/$productHandle-IB2WTXB6.js +0 -68
  312. package/dist/templates/demo-store/dist/client/build/routes/($lang)/products/$productHandle-IB2WTXB6.js.map +0 -7
  313. package/dist/templates/demo-store/dist/client/build/routes/($lang)/products/index-266HKDAN.js +0 -24
  314. package/dist/templates/demo-store/dist/client/build/routes/($lang)/products/index-266HKDAN.js.map +0 -7
  315. package/dist/templates/demo-store/dist/client/build/routes/($lang)/search-CH57YG7S.js +0 -54
  316. package/dist/templates/demo-store/dist/client/build/routes/($lang)/search-CH57YG7S.js.map +0 -7
  317. package/dist/templates/demo-store/dist/client/build/routes/graphiql-ZHVT5SA7.js +0 -2
  318. package/dist/templates/demo-store/dist/client/build/routes/graphiql-ZHVT5SA7.js.map +0 -7
  319. package/dist/templates/demo-store/dist/worker/_assets/IBMPlexSerif-Text-YFMZNZW6.woff2 +0 -0
  320. package/dist/templates/demo-store/dist/worker/_assets/IBMPlexSerif-TextItalic-CS6L5H7S.woff2 +0 -0
  321. package/dist/templates/demo-store/dist/worker/index.js +0 -1385
  322. package/dist/templates/demo-store/dist/worker/index.js.map +0 -7
  323. package/dist/templates/demo-store/package.json +0 -67
  324. package/dist/templates/demo-store/playwright.config.ts +0 -109
  325. package/dist/templates/demo-store/postcss.config.js +0 -10
  326. package/dist/templates/demo-store/public/favicon.svg +0 -28
  327. package/dist/templates/demo-store/remix.env.d.ts +0 -40
  328. package/dist/templates/demo-store/remix.init/index.js +0 -25
  329. package/dist/templates/demo-store/remix.init/package.json +0 -7
  330. package/dist/templates/demo-store/server.ts +0 -73
  331. package/dist/templates/demo-store/styles/app.css +0 -182
  332. package/dist/templates/demo-store/tailwind.config.js +0 -70
  333. package/dist/templates/demo-store/tests/cart.test.ts +0 -70
  334. package/dist/templates/demo-store/tests/seo.test.ts +0 -36
  335. package/dist/templates/demo-store/tests/utils.ts +0 -100
  336. package/dist/templates/demo-store/tsconfig.json +0 -25
  337. package/dist/templates/hello-world/.cache/content-v2/sha512/13/f6/b7f804d45a961ca1e392429e75ad80f23ba46cbba0e960c6a70f8de81f3f3763af59651474176798d1a1a4bd2a5109b1d441f6d1c8ba070b678b38378adf +0 -1
  338. package/dist/templates/hello-world/.cache/content-v2/sha512/4b/d3/aedf0c5a14c0f852936adb81a3bbd15ad1d5d9964ffe11a40d56bbdb2f2a4c7588ffa1d1ee657a3c3be4f6e6194465365f5d4213ef3b4e5086aa4bf0a5a4 +0 -1
  339. package/dist/templates/hello-world/.cache/content-v2/sha512/fa/dd/9bc10a1cb1f145eabd96bdba509178e20484197fefd8469ace9f53bf277e875751db3c4dddf229807c48cbe8db19494fe2a5aab7d2a4b7ae8bebbd67509c +0 -1
  340. package/dist/templates/hello-world/.cache/index-v5/09/f6/fe4b05c4157320b8b59b3f84116195be0437d87357d743d21acd638a4606 +0 -2
  341. package/dist/templates/hello-world/.cache/index-v5/b3/75/d3e7a4a5df68530007409daf1d2e66ab789c8b658d1819d7e5fd183f5f57 +0 -2
  342. package/dist/templates/hello-world/.cache/index-v5/d0/c4/d960260ece228d28f70e317741b3f3f3df05c53956d870235837ae2b73b4 +0 -2
  343. package/dist/templates/hello-world/.eslintignore +0 -4
  344. package/dist/templates/hello-world/.eslintrc.js +0 -6
  345. package/dist/templates/hello-world/.graphqlrc.yml +0 -1
  346. package/dist/templates/hello-world/README.md +0 -20
  347. package/dist/templates/hello-world/_env +0 -6
  348. package/dist/templates/hello-world/_gitignore +0 -8
  349. package/dist/templates/hello-world/app/components/Layout.tsx +0 -15
  350. package/dist/templates/hello-world/app/components/index.ts +0 -1
  351. package/dist/templates/hello-world/app/entry.client.tsx +0 -4
  352. package/dist/templates/hello-world/app/entry.server.tsx +0 -21
  353. package/dist/templates/hello-world/app/root.tsx +0 -212
  354. package/dist/templates/hello-world/app/routes/graphiql.tsx +0 -10
  355. package/dist/templates/hello-world/app/styles/app.css +0 -38
  356. package/dist/templates/hello-world/dist/client/build/_assets/app-NBPUE4H5.css +0 -1
  357. package/dist/templates/hello-world/dist/client/build/_assets/favicon-5FIZBM2K.svg +0 -28
  358. package/dist/templates/hello-world/dist/client/build/_shared/chunk-MEPKJ2VW.js +0 -2
  359. package/dist/templates/hello-world/dist/client/build/_shared/chunk-MEPKJ2VW.js.map +0 -7
  360. package/dist/templates/hello-world/dist/client/build/_shared/chunk-SYP5DAMV.js +0 -2
  361. package/dist/templates/hello-world/dist/client/build/_shared/chunk-SYP5DAMV.js.map +0 -7
  362. package/dist/templates/hello-world/dist/client/build/_shared/chunk-UWGFS4PS.js +0 -31
  363. package/dist/templates/hello-world/dist/client/build/_shared/chunk-UWGFS4PS.js.map +0 -7
  364. package/dist/templates/hello-world/dist/client/build/entry.client-YKLPLTIJ.js +0 -9
  365. package/dist/templates/hello-world/dist/client/build/entry.client-YKLPLTIJ.js.map +0 -7
  366. package/dist/templates/hello-world/dist/client/build/manifest-5BEA23FF.js +0 -1
  367. package/dist/templates/hello-world/dist/client/build/root-YMCCM3GG.js +0 -2
  368. package/dist/templates/hello-world/dist/client/build/root-YMCCM3GG.js.map +0 -7
  369. package/dist/templates/hello-world/dist/client/build/routes/graphiql-ZHVT5SA7.js +0 -2
  370. package/dist/templates/hello-world/dist/client/build/routes/graphiql-ZHVT5SA7.js.map +0 -7
  371. package/dist/templates/hello-world/dist/client/build/routes/index-TH4MKESG.js +0 -2
  372. package/dist/templates/hello-world/dist/client/build/routes/index-TH4MKESG.js.map +0 -7
  373. package/dist/templates/hello-world/dist/client/favicon.svg +0 -28
  374. package/dist/templates/hello-world/dist/worker/index.js +0 -172
  375. package/dist/templates/hello-world/dist/worker/index.js.map +0 -7
  376. package/dist/templates/hello-world/package.json +0 -41
  377. package/dist/templates/hello-world/public/favicon.svg +0 -28
  378. package/dist/templates/hello-world/remix.env.d.ts +0 -35
  379. package/dist/templates/hello-world/remix.init/index.js +0 -25
  380. package/dist/templates/hello-world/remix.init/package.json +0 -7
  381. package/dist/templates/hello-world/server.ts +0 -129
  382. package/dist/templates/hello-world/tsconfig.json +0 -25
  383. package/dist/tmp-create-app.js +0 -33
@@ -1,3 +1,5 @@
1
+ import { renderFatalError } from '@shopify/cli-kit/node/ui';
2
+ import { output, file } from '@shopify/cli-kit';
1
3
  import { createRequire } from 'module';
2
4
  import path from 'path';
3
5
  import fs from 'fs/promises';
@@ -11,62 +13,133 @@ function getProjectPaths(appPath, entry) {
11
13
  const buildPath = path.join(root, BUILD_DIR);
12
14
  const buildPathClient = path.join(buildPath, CLIENT_SUBDIR);
13
15
  const buildPathWorkerFile = path.join(buildPath, WORKER_SUBDIR, "index.js");
14
- const entryFile = entry ? path.join(root, entry) : "";
15
16
  return {
16
17
  root,
17
- entryFile,
18
18
  buildPath,
19
19
  buildPathClient,
20
20
  buildPathWorkerFile,
21
21
  publicPath
22
22
  };
23
23
  }
24
- let cachedConfig;
25
- async function getRemixConfig(root, entryFile, publicPath, bustCacheFile, mode = process.env.NODE_ENV) {
26
- if (!cachedConfig || bustCacheFile) {
27
- let env = process.env.NODE_ENV;
28
- if (bustCacheFile) {
29
- const require2 = createRequire(import.meta.url);
30
- delete require2.cache[bustCacheFile];
31
- process.env.NODE_ENV = "test";
32
- }
33
- const { readConfig } = await import('@remix-run/dev/dist/config.js');
34
- const config = await readConfig(root, mode);
35
- process.env.NODE_ENV = env;
36
- const hydrogenAssetBase = process.env.HYDROGEN_ASSET_BASE_URL;
37
- if (hydrogenAssetBase) {
38
- const suffix = config.publicPath?.replace(/\\/g, "/").replace(/^\//, "");
39
- config.publicPath = hydrogenAssetBase + suffix;
40
- }
41
- config.serverEntryPoint ??= entryFile;
24
+ async function getRemixConfig(root, mode = process.env.NODE_ENV) {
25
+ const { readConfig } = await import('@remix-run/dev/dist/config.js');
26
+ const config = await readConfig(root, mode);
27
+ if (!config.serverConditions) {
28
+ const require2 = createRequire(import.meta.url);
29
+ const actualConfigFile = require2(path.join(root, "remix.config"));
42
30
  config.serverBuildTarget = "cloudflare-workers";
43
- config.serverModuleFormat = "esm";
44
- config.serverPlatform = "neutral";
45
- config.serverBuildPath = path.resolve(
46
- root,
47
- path.join(BUILD_DIR, WORKER_SUBDIR, "index.js")
31
+ config.serverConditions = actualConfigFile.serverConditions;
32
+ config.serverMainFields = actualConfigFile.serverMainFields;
33
+ }
34
+ if (!config.serverEntryPoint) {
35
+ throwConfigError(
36
+ "Could not find a server entry point.",
37
+ "Please add a server option to your remix.config.js pointing to an Oxygen worker entry file."
38
+ );
39
+ } else {
40
+ assertEntryFileExists(config.rootDirectory, config.serverEntryPoint);
41
+ }
42
+ if (config.serverPlatform !== "neutral") {
43
+ throwConfigError(
44
+ 'The serverPlatform in remix.config.js must be "neutral".'
45
+ );
46
+ }
47
+ if (config.serverModuleFormat !== "esm") {
48
+ throwConfigError(
49
+ 'The serverModuleFormat in remix.config.js must be "esm".'
50
+ );
51
+ }
52
+ if (config.serverDependenciesToBundle !== "all") {
53
+ throwConfigError(
54
+ 'The serverDependenciesToBundle in remix.config.js must be "all".'
55
+ );
56
+ }
57
+ if (!config.serverConditions?.includes("worker")) {
58
+ throwConfigError(
59
+ 'The serverConditions in remix.config.js must include "worker".'
60
+ );
61
+ }
62
+ if (process.env.NODE_ENV === "development" && !config.serverConditions?.includes("development")) {
63
+ output.warn(
64
+ "Add `process.env.NODE_ENV` value to serverConditions in remix.config.js to enable debugging features in development."
48
65
  );
49
- config.relativeAssetsBuildDirectory = path.join(
50
- BUILD_DIR,
51
- CLIENT_SUBDIR,
52
- "build"
66
+ }
67
+ const expectedServerMainFields = ["browser", "module", "main"];
68
+ if (!config.serverMainFields || !expectedServerMainFields.every(
69
+ (v, i) => config.serverMainFields?.[i] === v
70
+ )) {
71
+ throwConfigError(
72
+ `The serverMainFields in remix.config.js must be ${JSON.stringify(
73
+ expectedServerMainFields
74
+ )}.`
75
+ );
76
+ }
77
+ const cdnUrl = process.env.HYDROGEN_ASSET_BASE_URL;
78
+ if (cdnUrl && !config.publicPath.startsWith(cdnUrl)) {
79
+ throwConfigError(
80
+ "The publicPath in remix.config.js must be prepended with the value of `process.env.HYDROGEN_ASSET_BASE_URL`."
53
81
  );
54
- config.assetsBuildDirectory = path.resolve(
55
- root,
56
- config.relativeAssetsBuildDirectory
82
+ }
83
+ const expectedServerBuildPath = path.join(
84
+ BUILD_DIR,
85
+ WORKER_SUBDIR,
86
+ "index.js"
87
+ );
88
+ if (config.serverBuildPath !== path.resolve(root, expectedServerBuildPath)) {
89
+ throwConfigError(
90
+ `The serverBuildPath in remix.config.js must be "${expectedServerBuildPath}".`
57
91
  );
58
- config.watchPaths = [publicPath, path.resolve(root, "remix.config.*")];
59
- if (process.env.LOCAL_DEV) {
60
- const packagesPath = new URL("../../..", import.meta.url).pathname;
61
- config.watchPaths.push(
62
- ...(await fs.readdir(packagesPath)).map(
63
- (pkg) => path.resolve(packagesPath, pkg, "dist", "development", "index.js")
64
- )
65
- );
92
+ }
93
+ const expectedAssetsBuildDirectory = path.join(BUILD_DIR, CLIENT_SUBDIR);
94
+ if (!config.assetsBuildDirectory.startsWith(
95
+ path.resolve(root, expectedAssetsBuildDirectory)
96
+ )) {
97
+ throwConfigError(
98
+ `The assetsBuildDirectory in remix.config.js must be in "${expectedAssetsBuildDirectory}".`
99
+ );
100
+ }
101
+ if (process.env.LOCAL_DEV) {
102
+ const packagesPath = new URL("../../..", import.meta.url).pathname;
103
+ config.watchPaths ??= [];
104
+ config.watchPaths.push(
105
+ ...(await fs.readdir(packagesPath)).map(
106
+ (pkg) => path.resolve(packagesPath, pkg, "dist", "development", "index.js")
107
+ )
108
+ );
109
+ config.watchPaths.push(
110
+ path.join(packagesPath, "cli", "dist", "virtual-routes", "**", "*")
111
+ );
112
+ }
113
+ return config;
114
+ }
115
+ function throwConfigError(message, tryMessage = null) {
116
+ renderFatalError({
117
+ name: "ConfigError",
118
+ type: 0,
119
+ message,
120
+ tryMessage
121
+ });
122
+ process.exit(1);
123
+ }
124
+ async function assertEntryFileExists(root, fileRelative) {
125
+ const fileAbsolute = path.resolve(root, fileRelative);
126
+ const exists = await file.exists(fileAbsolute);
127
+ if (!exists) {
128
+ if (!path.extname(fileAbsolute)) {
129
+ const { readdir } = await import('fs/promises');
130
+ const files = await readdir(path.dirname(fileAbsolute));
131
+ const exists2 = files.some((file2) => {
132
+ const { name, ext } = path.parse(file2);
133
+ return name === path.basename(fileAbsolute) && /^\.[jt]s$/.test(ext);
134
+ });
135
+ if (exists2)
136
+ return;
66
137
  }
67
- cachedConfig = config;
138
+ throwConfigError(
139
+ `Entry file "${fileRelative}" not found.`,
140
+ "Please ensure the file exists and that the path is correctly added to the `server` property in remix.config.js."
141
+ );
68
142
  }
69
- return cachedConfig;
70
143
  }
71
144
 
72
- export { getProjectPaths, getRemixConfig };
145
+ export { assertEntryFileExists, getProjectPaths, getRemixConfig };
@@ -0,0 +1,10 @@
1
+ import * as _oclif_core_lib_interfaces_parser_js from '@oclif/core/lib/interfaces/parser.js';
2
+
3
+ declare const commonFlags: {
4
+ path: _oclif_core_lib_interfaces_parser_js.OptionFlag<string | undefined>;
5
+ port: _oclif_core_lib_interfaces_parser_js.OptionFlag<number>;
6
+ force: _oclif_core_lib_interfaces_parser_js.BooleanFlag<boolean>;
7
+ };
8
+ declare function flagsToCamelObject(obj: Record<string, any>): any;
9
+
10
+ export { commonFlags, flagsToCamelObject };
@@ -1,15 +1,27 @@
1
1
  import Flags from '@oclif/core/lib/flags.js';
2
+ import { string } from '@shopify/cli-kit';
2
3
 
3
4
  const commonFlags = {
4
5
  path: Flags.string({
5
- description: "the path to your hydrogen storefront",
6
+ description: "The path to the directory of the Hydrogen storefront. The default is the current directory.",
6
7
  env: "SHOPIFY_HYDROGEN_FLAG_PATH"
7
8
  }),
8
9
  port: Flags.integer({
9
- description: "Port to run the preview server on",
10
+ description: "Port to run the server on.",
10
11
  env: "SHOPIFY_HYDROGEN_FLAG_PORT",
11
12
  default: 3e3
13
+ }),
14
+ force: Flags.boolean({
15
+ description: "Overwrite the destination directory and files if they already exist.",
16
+ env: "SHOPIFY_HYDROGEN_FLAG_FORCE",
17
+ char: "f"
12
18
  })
13
19
  };
20
+ function flagsToCamelObject(obj) {
21
+ return Object.entries(obj).reduce((acc, [key, value]) => {
22
+ acc[string.camelize(key)] = value;
23
+ return acc;
24
+ }, {});
25
+ }
14
26
 
15
- export { commonFlags };
27
+ export { commonFlags, flagsToCamelObject };
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,18 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { flagsToCamelObject } from './flags.js';
3
+
4
+ describe("CLI flag utils", () => {
5
+ it("turns kebab-case flags to camelCase", async () => {
6
+ expect(
7
+ flagsToCamelObject({
8
+ "kebab-case": "value",
9
+ "another-kebab-case": "value",
10
+ flag: "value"
11
+ })
12
+ ).toMatchObject({
13
+ kebabCase: "value",
14
+ anotherKebabCase: "value",
15
+ flag: "value"
16
+ });
17
+ });
18
+ });
@@ -0,0 +1,5 @@
1
+ declare function muteDevLogs({ workerReload }?: {
2
+ workerReload?: boolean;
3
+ }): void;
4
+
5
+ export { muteDevLogs };
@@ -0,0 +1,11 @@
1
+ type MiniOxygenOptions = {
2
+ root: string;
3
+ port?: number;
4
+ watch?: boolean;
5
+ buildPathClient: string;
6
+ buildPathWorkerFile: string;
7
+ };
8
+ declare function startMiniOxygen({ root, port, watch, buildPathWorkerFile, buildPathClient, }: MiniOxygenOptions): Promise<void>;
9
+ declare function logResponse(request: Request, response: Response): void;
10
+
11
+ export { logResponse, startMiniOxygen };
@@ -1,5 +1,4 @@
1
- import path from 'path';
2
- import { output } from '@shopify/cli-kit';
1
+ import { path, file, output } from '@shopify/cli-kit';
3
2
  import colors from '@shopify/cli-kit/node/colors';
4
3
 
5
4
  async function startMiniOxygen({
@@ -11,6 +10,7 @@ async function startMiniOxygen({
11
10
  }) {
12
11
  const { default: miniOxygen } = await import('@shopify/mini-oxygen');
13
12
  const miniOxygenPreview = miniOxygen.default ?? miniOxygen;
13
+ const dotenvPath = path.resolve(root, ".env");
14
14
  const { port: actualPort } = await miniOxygenPreview({
15
15
  workerFile: buildPathWorkerFile,
16
16
  assetsDir: buildPathClient,
@@ -20,11 +20,14 @@ async function startMiniOxygen({
20
20
  autoReload: watch,
21
21
  modules: true,
22
22
  env: process.env,
23
- envPath: path.resolve(root, ".env"),
23
+ envPath: await file.exists(dotenvPath) ? dotenvPath : void 0,
24
24
  log: () => {
25
25
  },
26
26
  buildWatchPaths: watch ? [path.resolve(root, buildPathWorkerFile)] : void 0,
27
- onResponse: (request, response) => logResponse(request, response)
27
+ onResponse: (request, response) => logResponse(
28
+ request,
29
+ response
30
+ )
28
31
  });
29
32
  const listeningAt = `http://localhost:${actualPort}`;
30
33
  output.info(
@@ -0,0 +1,6 @@
1
+ import { RemixConfig } from '@remix-run/dev/dist/config.js';
2
+
3
+ declare function findMissingRoutes(config: RemixConfig): string[];
4
+ declare function logMissingRoutes(routes: string[]): void;
5
+
6
+ export { findMissingRoutes, logMissingRoutes };
@@ -0,0 +1,71 @@
1
+ import { renderWarning, renderSuccess } from '@shopify/cli-kit/node/ui';
2
+
3
+ const REQUIRED_ROUTES = [
4
+ "",
5
+ "cart",
6
+ "products",
7
+ "products/:productHandle",
8
+ "collections",
9
+ "collections/:collectionHandle",
10
+ "sitemap.xml",
11
+ "robots.txt",
12
+ "pages/:pageHandle",
13
+ "policies/:policyHandle",
14
+ "search",
15
+ "discounts/:discountCode",
16
+ "account",
17
+ "account/login",
18
+ "account/register",
19
+ "account/orders/:orderId",
20
+ "account/reset/:id/:token",
21
+ "account/activate/:id/:token"
22
+ ];
23
+ function findMissingRoutes(config) {
24
+ const userRoutes = Object.values(config.routes);
25
+ const requiredRoutes = new Set(REQUIRED_ROUTES);
26
+ for (const requiredRoute of requiredRoutes) {
27
+ for (const userRoute of userRoutes) {
28
+ if (!requiredRoute && !userRoute.path) {
29
+ requiredRoutes.delete(requiredRoute);
30
+ } else if (requiredRoute && userRoute.path) {
31
+ const currentRoute = {
32
+ path: userRoute.path,
33
+ parentId: userRoute.parentId
34
+ };
35
+ while (currentRoute.parentId && currentRoute.parentId !== "root") {
36
+ const parentRoute = userRoutes.find(
37
+ (r) => r.id === currentRoute.parentId
38
+ );
39
+ if (!parentRoute)
40
+ break;
41
+ currentRoute.path = `${parentRoute.path}/${currentRoute.path}`;
42
+ currentRoute.parentId = parentRoute.parentId;
43
+ }
44
+ const reString = "^(:[^\\/\\?]+\\?\\/)?" + requiredRoute.replaceAll(".", "\\.").replace(/:[^/]+/g, ":[^\\/]+") + "$";
45
+ if (new RegExp(reString).test(currentRoute.path)) {
46
+ requiredRoutes.delete(requiredRoute);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ return [...requiredRoutes];
52
+ }
53
+ const LINE_LIMIT = 100;
54
+ function logMissingRoutes(routes) {
55
+ if (routes.length) {
56
+ renderWarning({
57
+ headline: "Standard Shopify routes missing",
58
+ body: `Your Hydrogen project is missing ${routes.length} standard Shopify route${routes.length > 1 ? "s" : ""}.
59
+ Including these routes improves compatibility with Shopify\u2019s platform:
60
+
61
+ ` + routes.slice(0, LINE_LIMIT - (routes.length <= LINE_LIMIT ? 0 : 1)).map((route) => `\u2022 /${route}`).join("\n") + (routes.length > LINE_LIMIT ? `
62
+ \u2022 ...and ${routes.length - LINE_LIMIT + 1} more` : "")
63
+ });
64
+ } else {
65
+ renderSuccess({
66
+ headline: "All standard Shopify routes present"
67
+ });
68
+ }
69
+ }
70
+
71
+ export { findMissingRoutes, logMissingRoutes };
@@ -0,0 +1,11 @@
1
+ declare function getLatestReleaseDownloadUrl(): Promise<{
2
+ version: string;
3
+ url: string;
4
+ }>;
5
+ declare function downloadTarball(url: string, storageDir: string): Promise<void>;
6
+ declare function getLatestTemplates(): Promise<{
7
+ version: string;
8
+ templatesDir: string;
9
+ }>;
10
+
11
+ export { downloadTarball, getLatestReleaseDownloadUrl, getLatestTemplates };
@@ -0,0 +1,66 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { pipeline } from 'stream/promises';
4
+ import gunzipMaybe from 'gunzip-maybe';
5
+ import { extract } from 'tar-fs';
6
+ import { http } from '@shopify/cli-kit';
7
+
8
+ const REPO_RELEASES_URL = `https://api.github.com/repos/shopify/hydrogen/releases/latest`;
9
+ async function getLatestReleaseDownloadUrl() {
10
+ const response = await http.fetch(REPO_RELEASES_URL);
11
+ if (!response.ok || response.status >= 400) {
12
+ throw new Error(
13
+ `Failed to fetch the latest release information. Status ${response.status} ${response.statusText}`
14
+ );
15
+ }
16
+ const release = await response.json();
17
+ return {
18
+ version: release.name.split("/").pop() ?? release.name,
19
+ url: release.tarball_url
20
+ };
21
+ }
22
+ async function downloadTarball(url, storageDir) {
23
+ const response = await http.fetch(url);
24
+ if (!response.ok || response.status >= 400) {
25
+ throw new Error(
26
+ `Failed to download the latest release files. Status ${response.status} ${response.statusText}}`
27
+ );
28
+ }
29
+ await pipeline(
30
+ response.body,
31
+ gunzipMaybe(),
32
+ extract(storageDir, {
33
+ strip: 1,
34
+ filter: (name) => {
35
+ name = name.replace(storageDir, "");
36
+ return !name.startsWith("/templates/") || name.startsWith("/templates/skeleton/");
37
+ }
38
+ })
39
+ );
40
+ }
41
+ async function getLatestTemplates() {
42
+ try {
43
+ const { version, url } = await getLatestReleaseDownloadUrl();
44
+ const templateStoragePath = new URL("../starter-templates", import.meta.url).pathname;
45
+ if (!fs.existsSync(templateStoragePath)) {
46
+ fs.mkdirSync(templateStoragePath);
47
+ }
48
+ const templateStorageVersionPath = path.join(templateStoragePath, version);
49
+ if (!fs.existsSync(templateStorageVersionPath)) {
50
+ await downloadTarball(url, templateStorageVersionPath);
51
+ }
52
+ return {
53
+ version,
54
+ templatesDir: path.join(templateStorageVersionPath, "templates")
55
+ };
56
+ } catch (e) {
57
+ const error = e;
58
+ error.message = `Could not download Hydrogen templates from GitHub.
59
+ Please check your internet connection and the following error:
60
+
61
+ ` + error.message;
62
+ throw error;
63
+ }
64
+ }
65
+
66
+ export { downloadTarball, getLatestReleaseDownloadUrl, getLatestTemplates };
@@ -0,0 +1,16 @@
1
+ import prettier, { Options } from 'prettier';
2
+ import ts, { CompilerOptions } from 'typescript';
3
+
4
+ declare function transpileFile(code: string, config?: Omit<ts.CompilerOptions, "target">): string;
5
+ declare function resolveFormatConfig(filePath?: string): Promise<prettier.Options>;
6
+ declare function format(content: string, config: Options, filePath?: string): string;
7
+ declare function convertConfigToJS(tsConfig: {
8
+ include?: string[];
9
+ compilerOptions?: CompilerOptions;
10
+ }): {
11
+ include?: string[] | undefined;
12
+ compilerOptions?: ts.CompilerOptions | undefined;
13
+ };
14
+ declare function transpileProject(projectDir: string): Promise<void>;
15
+
16
+ export { convertConfigToJS, format, resolveFormatConfig, transpileFile, transpileProject };
@@ -0,0 +1,169 @@
1
+ import path from 'path';
2
+ import fs from 'fs/promises';
3
+ import prettier from 'prettier';
4
+ import ts from 'typescript';
5
+ import glob from 'fast-glob';
6
+ import { output } from '@shopify/cli-kit';
7
+
8
+ const escapeNewLines = (code) => code.replace(/\n\n/g, "\n/* :newline: */");
9
+ const restoreNewLines = (code) => code.replace(/\/\* :newline: \*\//g, "\n");
10
+ const DEFAULT_TS_CONFIG = {
11
+ lib: ["DOM", "DOM.Iterable", "ES2022"],
12
+ isolatedModules: true,
13
+ esModuleInterop: true,
14
+ resolveJsonModule: true,
15
+ target: "ES2022",
16
+ strict: true,
17
+ allowJs: true,
18
+ forceConsistentCasingInFileNames: true,
19
+ skipLibCheck: true
20
+ };
21
+ function transpileFile(code, config = DEFAULT_TS_CONFIG) {
22
+ const withArtificialNewLines = escapeNewLines(code);
23
+ const compiled = ts.transpileModule(withArtificialNewLines, {
24
+ reportDiagnostics: false,
25
+ compilerOptions: {
26
+ ...config,
27
+ jsx: 1,
28
+ removeComments: false
29
+ }
30
+ });
31
+ return restoreNewLines(compiled.outputText);
32
+ }
33
+ const DEFAULT_PRETTIER_CONFIG = {
34
+ arrowParens: "always",
35
+ singleQuote: true,
36
+ bracketSpacing: false,
37
+ trailingComma: "all"
38
+ };
39
+ async function resolveFormatConfig(filePath = process.cwd()) {
40
+ try {
41
+ return await prettier.resolveConfig(filePath) || DEFAULT_PRETTIER_CONFIG;
42
+ } catch {
43
+ return DEFAULT_PRETTIER_CONFIG;
44
+ }
45
+ }
46
+ function format(content, config, filePath = "") {
47
+ const ext = path.extname(filePath);
48
+ const formattedContent = prettier.format(content, {
49
+ parser: ext === ".tsx" || ext === ".ts" ? "typescript" : "babel",
50
+ ...config
51
+ });
52
+ return formattedContent;
53
+ }
54
+ const DEFAULT_JS_CONFIG = {
55
+ allowJs: true,
56
+ forceConsistentCasingInFileNames: true,
57
+ strict: true,
58
+ lib: ["DOM", "DOM.Iterable", "ES2022"],
59
+ esModuleInterop: true,
60
+ isolatedModules: true,
61
+ jsx: "react-jsx",
62
+ noEmit: true,
63
+ resolveJsonModule: true
64
+ };
65
+ const JS_CONFIG_KEYS = [
66
+ "noLib",
67
+ "target",
68
+ "module",
69
+ "moduleResolution",
70
+ "checkJs",
71
+ "experimentalDecorators",
72
+ "allowSyntheticDefaultImports",
73
+ "baseUrl",
74
+ "paths",
75
+ ...Object.keys(DEFAULT_JS_CONFIG)
76
+ ];
77
+ function convertConfigToJS(tsConfig) {
78
+ const jsConfig = {
79
+ compilerOptions: { ...DEFAULT_JS_CONFIG }
80
+ };
81
+ if (tsConfig.include) {
82
+ jsConfig.include = tsConfig.include.filter((s) => !s.endsWith(".d.ts")).map((s) => s.replace(/\.ts(x?)$/, ".js$1"));
83
+ }
84
+ if (tsConfig.compilerOptions) {
85
+ for (const key of JS_CONFIG_KEYS) {
86
+ if (tsConfig.compilerOptions[key] !== void 0) {
87
+ jsConfig.compilerOptions[key] = tsConfig.compilerOptions[key];
88
+ }
89
+ }
90
+ }
91
+ return jsConfig;
92
+ }
93
+ async function transpileProject(projectDir) {
94
+ const entries = await glob("**/*.+(ts|tsx)", {
95
+ absolute: true,
96
+ cwd: projectDir
97
+ });
98
+ const formatConfig = await resolveFormatConfig();
99
+ for (const entry of entries) {
100
+ if (entry.endsWith(".d.ts")) {
101
+ await fs.rm(entry);
102
+ continue;
103
+ }
104
+ const tsx = await fs.readFile(entry, "utf8");
105
+ const mjs = format(transpileFile(tsx), formatConfig);
106
+ await fs.rm(entry);
107
+ await fs.writeFile(entry.replace(/\.ts(x?)$/, ".js$1"), mjs, "utf8");
108
+ }
109
+ try {
110
+ const remixConfigPath = path.join(projectDir, "remix.config.js");
111
+ let remixConfig = await fs.readFile(remixConfigPath, "utf8");
112
+ remixConfig = remixConfig.replace(/\/server\.ts/gim, "/server.js");
113
+ await fs.writeFile(remixConfigPath, remixConfig);
114
+ } catch (error) {
115
+ output.debug(
116
+ "Could not change TS extensions in remix.config.js:\n" + error.stack
117
+ );
118
+ }
119
+ try {
120
+ const tsConfigPath = path.join(projectDir, "tsconfig.json");
121
+ const tsConfigWithComments = await fs.readFile(tsConfigPath, "utf8");
122
+ const jsConfig = convertConfigToJS(
123
+ JSON.parse(tsConfigWithComments.replace(/^\s*\/\/.*$/gm, ""))
124
+ );
125
+ await fs.rm(tsConfigPath);
126
+ await fs.writeFile(
127
+ path.join(projectDir, "jsconfig.json"),
128
+ JSON.stringify(jsConfig, null, 2),
129
+ "utf8"
130
+ );
131
+ } catch (error) {
132
+ output.debug(
133
+ "Could not transpile tsconfig.json:\n" + error.stack
134
+ );
135
+ }
136
+ try {
137
+ const pkgJson = JSON.parse(
138
+ await fs.readFile(path.join(projectDir, "package.json"), "utf8")
139
+ );
140
+ delete pkgJson.scripts["typecheck"];
141
+ delete pkgJson.devDependencies["typescript"];
142
+ delete pkgJson.devDependencies["@shopify/oxygen-workers-types"];
143
+ for (const key of Object.keys(pkgJson.devDependencies)) {
144
+ if (key.startsWith("@types/")) {
145
+ delete pkgJson.devDependencies[key];
146
+ }
147
+ }
148
+ await fs.writeFile(
149
+ path.join(projectDir, "package.json"),
150
+ JSON.stringify(pkgJson, null, 2)
151
+ );
152
+ } catch (error) {
153
+ output.debug(
154
+ "Could not remove TS dependencies from package.json:\n" + error.stack
155
+ );
156
+ }
157
+ try {
158
+ const eslintrcPath = path.join(projectDir, ".eslintrc.js");
159
+ let eslintrc = await fs.readFile(eslintrcPath, "utf8");
160
+ eslintrc = eslintrc.replace(/\/\*\*[\s*]+@type.+\s+\*\/\s?/gim, "").replace(/\s*,?\s*['"`]plugin:hydrogen\/typescript['"`]/gim, "").replace(/\s+['"`]@typescript-eslint\/.+,/gim, "");
161
+ await fs.writeFile(eslintrcPath, eslintrc);
162
+ } catch (error) {
163
+ output.debug(
164
+ "Could not remove TS rules from .eslintrc:\n" + error.stack
165
+ );
166
+ }
167
+ }
168
+
169
+ export { convertConfigToJS, format, resolveFormatConfig, transpileFile, transpileProject };
@@ -0,0 +1,7 @@
1
+ import { RemixConfig } from '@remix-run/dev/dist/config.js';
2
+
3
+ declare const VIRTUAL_ROUTES_DIR = "virtual-routes/routes";
4
+ declare const VIRTUAL_ROOT = "virtual-routes/virtual-root";
5
+ declare function addVirtualRoutes(config: RemixConfig): Promise<RemixConfig>;
6
+
7
+ export { VIRTUAL_ROOT, VIRTUAL_ROUTES_DIR, addVirtualRoutes };