@epic-web/workshop-app 0.0.0-semantically-released

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 (305) hide show
  1. package/README.md +10 -0
  2. package/bin/epicshop.js +321 -0
  3. package/build/client/app-default.css +39 -0
  4. package/build/client/assets/_-C_7mS1-0.js +2 -0
  5. package/build/client/assets/_-C_7mS1-0.js.map +1 -0
  6. package/build/client/assets/_-l0sNRNKZ.js +2 -0
  7. package/build/client/assets/_-l0sNRNKZ.js.map +1 -0
  8. package/build/client/assets/_basePickBy-DxgDhkrj.js +2 -0
  9. package/build/client/assets/_basePickBy-DxgDhkrj.js.map +1 -0
  10. package/build/client/assets/_baseUniq-Bh4NktJz.js +2 -0
  11. package/build/client/assets/_baseUniq-Bh4NktJz.js.map +1 -0
  12. package/build/client/assets/_exerciseNumber-D3lfJewu.js +2 -0
  13. package/build/client/assets/_exerciseNumber-D3lfJewu.js.map +1 -0
  14. package/build/client/assets/_exerciseNumber_._stepNumber-BNj079sn.js +2 -0
  15. package/build/client/assets/_exerciseNumber_._stepNumber-BNj079sn.js.map +1 -0
  16. package/build/client/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js +2 -0
  17. package/build/client/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js.map +1 -0
  18. package/build/client/assets/_exerciseNumber_.finished-a6jXslNA.js +2 -0
  19. package/build/client/assets/_exerciseNumber_.finished-a6jXslNA.js.map +1 -0
  20. package/build/client/assets/_layout-B3FchrR9.js +2 -0
  21. package/build/client/assets/_layout-B3FchrR9.js.map +1 -0
  22. package/build/client/assets/_layout-B6ARVFTz.js +2 -0
  23. package/build/client/assets/_layout-B6ARVFTz.js.map +1 -0
  24. package/build/client/assets/_layout-CtqVeNw0.js +6 -0
  25. package/build/client/assets/_layout-CtqVeNw0.js.map +1 -0
  26. package/build/client/assets/_layout-dHfVo9gJ.js +2 -0
  27. package/build/client/assets/_layout-dHfVo9gJ.js.map +1 -0
  28. package/build/client/assets/accordion-PSsenYUI.js +2 -0
  29. package/build/client/assets/accordion-PSsenYUI.js.map +1 -0
  30. package/build/client/assets/account-Jl0f1Zst.js +2 -0
  31. package/build/client/assets/account-Jl0f1Zst.js.map +1 -0
  32. package/build/client/assets/api._-l0sNRNKZ.js +2 -0
  33. package/build/client/assets/api._-l0sNRNKZ.js.map +1 -0
  34. package/build/client/assets/app-CpF0K1cW.css +1 -0
  35. package/build/client/assets/app-CzIg9kJh.js +2 -0
  36. package/build/client/assets/app-CzIg9kJh.js.map +1 -0
  37. package/build/client/assets/app.epic_ws_.js_-l0sNRNKZ.js +2 -0
  38. package/build/client/assets/app.epic_ws_.js_-l0sNRNKZ.js.map +1 -0
  39. package/build/client/assets/apps-DP2rzg_V.js +2 -0
  40. package/build/client/assets/apps-DP2rzg_V.js.map +1 -0
  41. package/build/client/assets/apps-l0sNRNKZ.js +2 -0
  42. package/build/client/assets/apps-l0sNRNKZ.js.map +1 -0
  43. package/build/client/assets/arc-B6tHINqs.js +2 -0
  44. package/build/client/assets/arc-B6tHINqs.js.map +1 -0
  45. package/build/client/assets/architectureDiagram-NQ2NVSRB-D_wGZ5nT.js +37 -0
  46. package/build/client/assets/architectureDiagram-NQ2NVSRB-D_wGZ5nT.js.map +1 -0
  47. package/build/client/assets/blockDiagram-PHRCVELO-h_TbDJvl.js +123 -0
  48. package/build/client/assets/blockDiagram-PHRCVELO-h_TbDJvl.js.map +1 -0
  49. package/build/client/assets/button-cFpvwtjC.js +2 -0
  50. package/build/client/assets/button-cFpvwtjC.js.map +1 -0
  51. package/build/client/assets/c4Diagram-6F6E4RAY-BfXjadL9.js +11 -0
  52. package/build/client/assets/c4Diagram-6F6E4RAY-BfXjadL9.js.map +1 -0
  53. package/build/client/assets/cache-l0sNRNKZ.js +2 -0
  54. package/build/client/assets/cache-l0sNRNKZ.js.map +1 -0
  55. package/build/client/assets/channel-ClIoK57K.js +2 -0
  56. package/build/client/assets/channel-ClIoK57K.js.map +1 -0
  57. package/build/client/assets/chunk-353BL4L5-CExuR7H8.js +2 -0
  58. package/build/client/assets/chunk-353BL4L5-CExuR7H8.js.map +1 -0
  59. package/build/client/assets/chunk-67H74DCK-BF9_AOuB.js +2 -0
  60. package/build/client/assets/chunk-67H74DCK-BF9_AOuB.js.map +1 -0
  61. package/build/client/assets/chunk-6OLS64BW-B_GeRv1G.js +221 -0
  62. package/build/client/assets/chunk-6OLS64BW-B_GeRv1G.js.map +1 -0
  63. package/build/client/assets/chunk-AACKK3MU-BcoQc9Ht.js +2 -0
  64. package/build/client/assets/chunk-AACKK3MU-BcoQc9Ht.js.map +1 -0
  65. package/build/client/assets/chunk-BFAMUDN2-DBCLoV1m.js +2 -0
  66. package/build/client/assets/chunk-BFAMUDN2-DBCLoV1m.js.map +1 -0
  67. package/build/client/assets/chunk-E2GYISFI-DvCzOl_M.js +16 -0
  68. package/build/client/assets/chunk-E2GYISFI-DvCzOl_M.js.map +1 -0
  69. package/build/client/assets/chunk-QEP2MXWD-BA02qRA0.js +166 -0
  70. package/build/client/assets/chunk-QEP2MXWD-BA02qRA0.js.map +1 -0
  71. package/build/client/assets/chunk-QMGIS6GS-CG5cA6CX.js +44 -0
  72. package/build/client/assets/chunk-QMGIS6GS-CG5cA6CX.js.map +1 -0
  73. package/build/client/assets/chunk-SKB7J2MH-BG1nHV0M.js +2 -0
  74. package/build/client/assets/chunk-SKB7J2MH-BG1nHV0M.js.map +1 -0
  75. package/build/client/assets/classDiagram-BGRH5UQR-BZY1Xh5a.js +2 -0
  76. package/build/client/assets/classDiagram-BGRH5UQR-BZY1Xh5a.js.map +1 -0
  77. package/build/client/assets/classDiagram-v2-O24JOBDK-BZY1Xh5a.js +2 -0
  78. package/build/client/assets/classDiagram-v2-O24JOBDK-BZY1Xh5a.js.map +1 -0
  79. package/build/client/assets/clone-RGlausHy.js +2 -0
  80. package/build/client/assets/clone-RGlausHy.js.map +1 -0
  81. package/build/client/assets/cytoscape.esm-BBIONMvf.js +332 -0
  82. package/build/client/assets/cytoscape.esm-BBIONMvf.js.map +1 -0
  83. package/build/client/assets/dagre-FFZHY6LT-CGbe3nXJ.js +5 -0
  84. package/build/client/assets/dagre-FFZHY6LT-CGbe3nXJ.js.map +1 -0
  85. package/build/client/assets/defaultLocale-C4B-KCzX.js +2 -0
  86. package/build/client/assets/defaultLocale-C4B-KCzX.js.map +1 -0
  87. package/build/client/assets/diagram-3EMPZRKU-8UM2S96z.js +25 -0
  88. package/build/client/assets/diagram-3EMPZRKU-8UM2S96z.js.map +1 -0
  89. package/build/client/assets/diagram-5UYTHUR4-Bq8b35J7.js +25 -0
  90. package/build/client/assets/diagram-5UYTHUR4-Bq8b35J7.js.map +1 -0
  91. package/build/client/assets/diagram-ZTM2IBQH-DZ0Q3vKL.js +44 -0
  92. package/build/client/assets/diagram-ZTM2IBQH-DZ0Q3vKL.js.map +1 -0
  93. package/build/client/assets/diff-DTFs5rVO.js +2 -0
  94. package/build/client/assets/diff-DTFs5rVO.js.map +1 -0
  95. package/build/client/assets/diff-DpX_9FU6.js +2 -0
  96. package/build/client/assets/diff-DpX_9FU6.js.map +1 -0
  97. package/build/client/assets/discord-C86FbV-j.js +2 -0
  98. package/build/client/assets/discord-C86FbV-j.js.map +1 -0
  99. package/build/client/assets/discord-DOEtvB6W.js +2 -0
  100. package/build/client/assets/discord-DOEtvB6W.js.map +1 -0
  101. package/build/client/assets/entry.client-anc4-dZY.js +35 -0
  102. package/build/client/assets/entry.client-anc4-dZY.js.map +1 -0
  103. package/build/client/assets/epic-video-CCv7QINN.js +3210 -0
  104. package/build/client/assets/epic-video-CCv7QINN.js.map +1 -0
  105. package/build/client/assets/epic-video-D2Xftn6t.css +1 -0
  106. package/build/client/assets/epic_ws_.js_-l0sNRNKZ.js +2 -0
  107. package/build/client/assets/epic_ws_.js_-l0sNRNKZ.js.map +1 -0
  108. package/build/client/assets/erDiagram-R3QVA2FD-Bu6B069U.js +61 -0
  109. package/build/client/assets/erDiagram-R3QVA2FD-Bu6B069U.js.map +1 -0
  110. package/build/client/assets/error-boundary-B8bEOgxp.js +2 -0
  111. package/build/client/assets/error-boundary-B8bEOgxp.js.map +1 -0
  112. package/build/client/assets/exercises-l0sNRNKZ.js +2 -0
  113. package/build/client/assets/exercises-l0sNRNKZ.js.map +1 -0
  114. package/build/client/assets/finished-RnlPhc3t.js +2 -0
  115. package/build/client/assets/finished-RnlPhc3t.js.map +1 -0
  116. package/build/client/assets/flowDiagram-PKI6S5ZS-ie1Nf5_c.js +163 -0
  117. package/build/client/assets/flowDiagram-PKI6S5ZS-ie1Nf5_c.js.map +1 -0
  118. package/build/client/assets/ganttDiagram-EK5VF46D-BjgRWg6k.js +268 -0
  119. package/build/client/assets/ganttDiagram-EK5VF46D-BjgRWg6k.js.map +1 -0
  120. package/build/client/assets/gitGraphDiagram-GW3U2K7C-BmD31KK0.js +66 -0
  121. package/build/client/assets/gitGraphDiagram-GW3U2K7C-BmD31KK0.js.map +1 -0
  122. package/build/client/assets/graph-BBuyk5Ru.js +2 -0
  123. package/build/client/assets/graph-BBuyk5Ru.js.map +1 -0
  124. package/build/client/assets/icons-BM6r7NHK.svg +570 -0
  125. package/build/client/assets/index-7Ba6ptu2.js +42 -0
  126. package/build/client/assets/index-7Ba6ptu2.js.map +1 -0
  127. package/build/client/assets/index-Bp_2FjuO.js +10 -0
  128. package/build/client/assets/index-Bp_2FjuO.js.map +1 -0
  129. package/build/client/assets/index-CNmh2cao.js +2 -0
  130. package/build/client/assets/index-CNmh2cao.js.map +1 -0
  131. package/build/client/assets/index-CZ8q0Nf8.js +2 -0
  132. package/build/client/assets/index-CZ8q0Nf8.js.map +1 -0
  133. package/build/client/assets/index-DP2rzg_V.js +2 -0
  134. package/build/client/assets/index-DP2rzg_V.js.map +1 -0
  135. package/build/client/assets/index-DSMFPAn8.js +2 -0
  136. package/build/client/assets/index-DSMFPAn8.js.map +1 -0
  137. package/build/client/assets/index-DxbpRM0V.js +2 -0
  138. package/build/client/assets/index-DxbpRM0V.js.map +1 -0
  139. package/build/client/assets/index-K6Dvbx-E.js +2 -0
  140. package/build/client/assets/index-K6Dvbx-E.js.map +1 -0
  141. package/build/client/assets/index-LNXI3Vlr.js +2 -0
  142. package/build/client/assets/index-LNXI3Vlr.js.map +1 -0
  143. package/build/client/assets/index-_jNKXw67.js +2 -0
  144. package/build/client/assets/index-_jNKXw67.js.map +1 -0
  145. package/build/client/assets/index-l0sNRNKZ.js +2 -0
  146. package/build/client/assets/index-l0sNRNKZ.js.map +1 -0
  147. package/build/client/assets/index-rknZKmMI.js +36 -0
  148. package/build/client/assets/index-rknZKmMI.js.map +1 -0
  149. package/build/client/assets/infoDiagram-RLU2ROGC-DVoDIRGH.js +3 -0
  150. package/build/client/assets/infoDiagram-RLU2ROGC-DVoDIRGH.js.map +1 -0
  151. package/build/client/assets/init-Gi6I4Gst.js +2 -0
  152. package/build/client/assets/init-Gi6I4Gst.js.map +1 -0
  153. package/build/client/assets/journeyDiagram-EWQZEKCU-C_Lb2L11.js +140 -0
  154. package/build/client/assets/journeyDiagram-EWQZEKCU-C_Lb2L11.js.map +1 -0
  155. package/build/client/assets/jsx-runtime-EKYJJIwR.js +10 -0
  156. package/build/client/assets/jsx-runtime-EKYJJIwR.js.map +1 -0
  157. package/build/client/assets/kanban-definition-ILFWEQ3N-KsekSC1N.js +90 -0
  158. package/build/client/assets/kanban-definition-ILFWEQ3N-KsekSC1N.js.map +1 -0
  159. package/build/client/assets/katex-DsmCZfJr.js +262 -0
  160. package/build/client/assets/katex-DsmCZfJr.js.map +1 -0
  161. package/build/client/assets/l-D9C1VDbZ.js +2 -0
  162. package/build/client/assets/l-D9C1VDbZ.js.map +1 -0
  163. package/build/client/assets/launch-editor-l0sNRNKZ.js +2 -0
  164. package/build/client/assets/launch-editor-l0sNRNKZ.js.map +1 -0
  165. package/build/client/assets/layout-BkH8Qi9T.js +2 -0
  166. package/build/client/assets/layout-BkH8Qi9T.js.map +1 -0
  167. package/build/client/assets/linear-tKBS5mAJ.js +2 -0
  168. package/build/client/assets/linear-tKBS5mAJ.js.map +1 -0
  169. package/build/client/assets/loading-CZYaLyAk.js +2 -0
  170. package/build/client/assets/loading-CZYaLyAk.js.map +1 -0
  171. package/build/client/assets/login-BHKNDLwl.js +2 -0
  172. package/build/client/assets/login-BHKNDLwl.js.map +1 -0
  173. package/build/client/assets/login-sse-l0sNRNKZ.js +2 -0
  174. package/build/client/assets/login-sse-l0sNRNKZ.js.map +1 -0
  175. package/build/client/assets/manifest-b97649b5.js +1 -0
  176. package/build/client/assets/mdx-BEhxx-X4.js +3 -0
  177. package/build/client/assets/mdx-BEhxx-X4.js.map +1 -0
  178. package/build/client/assets/mermaid.core-CqaUvNIK.js +214 -0
  179. package/build/client/assets/mermaid.core-CqaUvNIK.js.map +1 -0
  180. package/build/client/assets/mindmap-definition-CZNETY7S-BGn0gmpB.js +96 -0
  181. package/build/client/assets/mindmap-definition-CZNETY7S-BGn0gmpB.js.map +1 -0
  182. package/build/client/assets/misc-COGqV2fm.js +2 -0
  183. package/build/client/assets/misc-COGqV2fm.js.map +1 -0
  184. package/build/client/assets/nav-chevrons-Cxzx0j13.js +2 -0
  185. package/build/client/assets/nav-chevrons-Cxzx0j13.js.map +1 -0
  186. package/build/client/assets/notifications-l0sNRNKZ.js +2 -0
  187. package/build/client/assets/notifications-l0sNRNKZ.js.map +1 -0
  188. package/build/client/assets/og-l0sNRNKZ.js +2 -0
  189. package/build/client/assets/og-l0sNRNKZ.js.map +1 -0
  190. package/build/client/assets/onboarding-7Vho777l.js +2 -0
  191. package/build/client/assets/onboarding-7Vho777l.js.map +1 -0
  192. package/build/client/assets/online-CwZkKwTv.js +2 -0
  193. package/build/client/assets/online-CwZkKwTv.js.map +1 -0
  194. package/build/client/assets/ordinal-Cboi1Yqb.js +2 -0
  195. package/build/client/assets/ordinal-Cboi1Yqb.js.map +1 -0
  196. package/build/client/assets/pe-DoDyGTeN.js +2 -0
  197. package/build/client/assets/pe-DoDyGTeN.js.map +1 -0
  198. package/build/client/assets/pieDiagram-NIOCPIFQ-TwGmrzCW.js +31 -0
  199. package/build/client/assets/pieDiagram-NIOCPIFQ-TwGmrzCW.js.map +1 -0
  200. package/build/client/assets/preferences-Dx_EUPYj.js +2 -0
  201. package/build/client/assets/preferences-Dx_EUPYj.js.map +1 -0
  202. package/build/client/assets/presence-tDxUeb6L.js +28 -0
  203. package/build/client/assets/presence-tDxUeb6L.js.map +1 -0
  204. package/build/client/assets/preview-COuApZAb.js +2 -0
  205. package/build/client/assets/preview-COuApZAb.js.map +1 -0
  206. package/build/client/assets/processes-l0sNRNKZ.js +2 -0
  207. package/build/client/assets/processes-l0sNRNKZ.js.map +1 -0
  208. package/build/client/assets/product-DNKDVhI_.js +2 -0
  209. package/build/client/assets/product-DNKDVhI_.js.map +1 -0
  210. package/build/client/assets/progress-DKsShYpv.js +2 -0
  211. package/build/client/assets/progress-DKsShYpv.js.map +1 -0
  212. package/build/client/assets/progress-bar-Cww9t8Vn.js +2 -0
  213. package/build/client/assets/progress-bar-Cww9t8Vn.js.map +1 -0
  214. package/build/client/assets/progress-l0sNRNKZ.js +2 -0
  215. package/build/client/assets/progress-l0sNRNKZ.js.map +1 -0
  216. package/build/client/assets/quadrantDiagram-2OG54O6I-C2FaFW77.js +8 -0
  217. package/build/client/assets/quadrantDiagram-2OG54O6I-C2FaFW77.js.map +1 -0
  218. package/build/client/assets/requirementDiagram-SO3GGRV7-BENrmejn.js +65 -0
  219. package/build/client/assets/requirementDiagram-SO3GGRV7-BENrmejn.js.map +1 -0
  220. package/build/client/assets/revalidation-ws-DJwDeSaI.js +2 -0
  221. package/build/client/assets/revalidation-ws-DJwDeSaI.js.map +1 -0
  222. package/build/client/assets/robots_._txt-l0sNRNKZ.js +2 -0
  223. package/build/client/assets/robots_._txt-l0sNRNKZ.js.map +1 -0
  224. package/build/client/assets/root-30K5JoaI.js +2 -0
  225. package/build/client/assets/root-30K5JoaI.js.map +1 -0
  226. package/build/client/assets/sankeyDiagram-4UZDY2LN-DHcxz6y6.js +11 -0
  227. package/build/client/assets/sankeyDiagram-4UZDY2LN-DHcxz6y6.js.map +1 -0
  228. package/build/client/assets/seo-t5J-DRxw.js +2 -0
  229. package/build/client/assets/seo-t5J-DRxw.js.map +1 -0
  230. package/build/client/assets/sequenceDiagram-ZIKVLSP4-wsbYfOcv.js +123 -0
  231. package/build/client/assets/sequenceDiagram-ZIKVLSP4-wsbYfOcv.js.map +1 -0
  232. package/build/client/assets/set-playground-Bx0yIjpY.js +2 -0
  233. package/build/client/assets/set-playground-Bx0yIjpY.js.map +1 -0
  234. package/build/client/assets/set-playground-l0sNRNKZ.js +2 -0
  235. package/build/client/assets/set-playground-l0sNRNKZ.js.map +1 -0
  236. package/build/client/assets/sitemap_._xml-l0sNRNKZ.js +2 -0
  237. package/build/client/assets/sitemap_._xml-l0sNRNKZ.js.map +1 -0
  238. package/build/client/assets/start-l0sNRNKZ.js +2 -0
  239. package/build/client/assets/start-l0sNRNKZ.js.map +1 -0
  240. package/build/client/assets/stateDiagram-XX37X6EN-D8VCWzU7.js +2 -0
  241. package/build/client/assets/stateDiagram-XX37X6EN-D8VCWzU7.js.map +1 -0
  242. package/build/client/assets/stateDiagram-v2-GD6S3NHB-CWoWkzf7.js +2 -0
  243. package/build/client/assets/stateDiagram-v2-GD6S3NHB-CWoWkzf7.js.map +1 -0
  244. package/build/client/assets/support-BnsTkkCH.js +2 -0
  245. package/build/client/assets/support-BnsTkkCH.js.map +1 -0
  246. package/build/client/assets/tailwind-Dqccob1p.css +1 -0
  247. package/build/client/assets/test-B2dwsj84.js +2 -0
  248. package/build/client/assets/test-B2dwsj84.js.map +1 -0
  249. package/build/client/assets/test-l0sNRNKZ.js +2 -0
  250. package/build/client/assets/test-l0sNRNKZ.js.map +1 -0
  251. package/build/client/assets/test._testName-l0sNRNKZ.js +2 -0
  252. package/build/client/assets/test._testName-l0sNRNKZ.js.map +1 -0
  253. package/build/client/assets/test.epic_ws_.js_-l0sNRNKZ.js +2 -0
  254. package/build/client/assets/test.epic_ws_.js_-l0sNRNKZ.js.map +1 -0
  255. package/build/client/assets/tests-DvbNIXBP.js +4 -0
  256. package/build/client/assets/tests-DvbNIXBP.js.map +1 -0
  257. package/build/client/assets/timeline-definition-RI47OAVP-D44Hv-fs.js +62 -0
  258. package/build/client/assets/timeline-definition-RI47OAVP-D44Hv-fs.js.map +1 -0
  259. package/build/client/assets/tooltip-Cm7A1uIP.js +2 -0
  260. package/build/client/assets/tooltip-Cm7A1uIP.js.map +1 -0
  261. package/build/client/assets/treemap-FKARHQ26-COx8AcUM.js +129 -0
  262. package/build/client/assets/treemap-FKARHQ26-COx8AcUM.js.map +1 -0
  263. package/build/client/assets/use-event-source-DDlZtAwc.js +2 -0
  264. package/build/client/assets/use-event-source-DDlZtAwc.js.map +1 -0
  265. package/build/client/assets/user-BQ8D2Fty.js +2 -0
  266. package/build/client/assets/user-BQ8D2Fty.js.map +1 -0
  267. package/build/client/assets/version-CG_ZHfTC.js +2 -0
  268. package/build/client/assets/version-CG_ZHfTC.js.map +1 -0
  269. package/build/client/assets/workshop-config-5VcXxeyp.js +2 -0
  270. package/build/client/assets/workshop-config-5VcXxeyp.js.map +1 -0
  271. package/build/client/assets/xychartDiagram-H2YORKM3-rhbSyPlb.js +8 -0
  272. package/build/client/assets/xychartDiagram-H2YORKM3-rhbSyPlb.js.map +1 -0
  273. package/build/client/favicon.ico +0 -0
  274. package/build/client/favicon.png +0 -0
  275. package/build/client/favicon.svg +13 -0
  276. package/build/client/fonts/neogrotesk/0b8b755c-fee2-4661-9c8b-c5d1fbea901b.woff2 +0 -0
  277. package/build/client/fonts/neogrotesk/146d9d20-3e53-4e5d-beb2-1209bba5ac61.woff2 +0 -0
  278. package/build/client/fonts/neogrotesk/1798ef2b-5ee0-4f39-8b2c-ae3e36f07cd1.woff2 +0 -0
  279. package/build/client/fonts/neogrotesk/1eb2cb40-6822-4654-856c-8cbe652366b6.woff +0 -0
  280. package/build/client/fonts/neogrotesk/3b64793c-0bdb-4e4f-bf0e-cdf2e974d5f2.woff +0 -0
  281. package/build/client/fonts/neogrotesk/3bb44ed4-cf17-469c-8d0d-5946d10fdad1.woff +0 -0
  282. package/build/client/fonts/neogrotesk/4bd29470-1701-41fe-94b6-4a147512160c.woff +0 -0
  283. package/build/client/fonts/neogrotesk/5cdbf070-a094-44c8-b8f1-17a00a19c959.woff2 +0 -0
  284. package/build/client/fonts/neogrotesk/6d439be9-37df-4912-ac09-388ce938fa46.woff2 +0 -0
  285. package/build/client/fonts/neogrotesk/7fc2971f-a9c2-4e09-bd24-bfd4ee6e97b3.woff +0 -0
  286. package/build/client/fonts/neogrotesk/861b65ee-56bd-4057-9af4-3b2903af231e.woff +0 -0
  287. package/build/client/fonts/neogrotesk/8cf836d9-a49e-4387-bcbd-4800766e5d24.woff +0 -0
  288. package/build/client/fonts/neogrotesk/8d61128d-534c-4793-9668-b98bcc2e5969.woff2 +0 -0
  289. package/build/client/fonts/neogrotesk/98423f75-c341-4161-8b92-7cd5c05081e5.woff +0 -0
  290. package/build/client/fonts/neogrotesk/a1456726-ad0d-4f5e-9d8f-ce92e8ce375d.woff2 +0 -0
  291. package/build/client/fonts/neogrotesk/af81e7d2-0bb1-4aa0-bc76-adb78338c568.woff +0 -0
  292. package/build/client/fonts/neogrotesk/d1302ad5-ceee-47cb-a0fa-2da6bd0d4d54.woff2 +0 -0
  293. package/build/client/fonts/neogrotesk/e7e15c31-aad1-4384-abd3-0671ccd03251.woff +0 -0
  294. package/build/client/fonts/neogrotesk/ec6cb127-161b-469c-9816-69489032a234.woff2 +0 -0
  295. package/build/client/fonts/neogrotesk/f480430c-6c50-4ae3-9abb-e92c484f84d6.woff2 +0 -0
  296. package/build/client/img/tiffany.png +0 -0
  297. package/build/client/logo.svg +48 -0
  298. package/build/client/neogrotesk-font.css +100 -0
  299. package/build/client/og/background.png +0 -0
  300. package/build/client/og/logo.svg +1 -0
  301. package/build/server/index.js +11899 -0
  302. package/build/server/index.js.map +1 -0
  303. package/dist/server/index.js +247 -0
  304. package/package.json +1 -0
  305. package/start.js +50 -0
@@ -0,0 +1,247 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { fileURLToPath } from "url";
4
+ import { getPresentUsers } from "@epic-web/workshop-presence/presence.server";
5
+ import {
6
+ getApps,
7
+ getWorkshopRoot,
8
+ init as initApps,
9
+ setModifiedTimesForAppDirs
10
+ } from "@epic-web/workshop-utils/apps.server";
11
+ import { checkForUpdatesCached } from "@epic-web/workshop-utils/git.server";
12
+ import { checkConnectionCached } from "@epic-web/workshop-utils/utils.server";
13
+ import { createRequestHandler } from "@react-router/express";
14
+ import { ip as ipAddress } from "address";
15
+ import chalk from "chalk";
16
+ import chokidar from "chokidar";
17
+ import closeWithGrace from "close-with-grace";
18
+ import compression from "compression";
19
+ import express from "express";
20
+ import getPort, { portNumbers } from "get-port";
21
+ import morgan from "morgan";
22
+ import sourceMapSupport from "source-map-support";
23
+ import { WebSocketServer } from "ws";
24
+ const MODE = process.env.NODE_ENV ?? "development";
25
+ void initApps();
26
+ sourceMapSupport.install();
27
+ const viteDevServer = process.env.NODE_ENV === "production" ? null : await import("vite").then(
28
+ (vite) => vite.createServer({
29
+ server: { middlewareMode: true },
30
+ appType: "custom"
31
+ })
32
+ );
33
+ const isProd = process.env.NODE_ENV === "production";
34
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
35
+ const isPublished = !fs.existsSync(path.join(__dirname, "..", "app"));
36
+ const isDeployed = process.env.EPICSHOP_DEPLOYED === "true" || process.env.EPICSHOP_DEPLOYED === "1";
37
+ const isRunningInBuildDir = path.dirname(__dirname).endsWith("dist");
38
+ const epicshopAppRootDir = isRunningInBuildDir ? path.join(__dirname, "..", "..") : path.join(__dirname, "..");
39
+ const hasUpdatesPromise = checkForUpdatesCached();
40
+ void getApps();
41
+ void checkConnectionCached();
42
+ void getPresentUsers();
43
+ const app = express();
44
+ app.get(
45
+ "/.well-known/appspecific/com.chrome.devtools.json",
46
+ (req, res) => {
47
+ return res.status(404).send("Not found");
48
+ }
49
+ );
50
+ app.use(compression());
51
+ app.disable("x-powered-by");
52
+ app.use(
53
+ express.static(path.join(getWorkshopRoot(), "public"), {
54
+ maxAge: isProd ? "1h" : 0
55
+ })
56
+ );
57
+ if (viteDevServer) {
58
+ app.use(viteDevServer.middlewares);
59
+ } else {
60
+ app.use(
61
+ express.static(path.join(epicshopAppRootDir, "build/client"), {
62
+ maxAge: isProd ? "1h" : 0
63
+ })
64
+ );
65
+ }
66
+ if (process.env.NODE_ENV !== "production" && !isPublished || isDeployed) {
67
+ morgan.token("url", (req) => decodeURIComponent(req.url ?? ""));
68
+ app.use(morgan("tiny"));
69
+ }
70
+ function getNumberOrNull(value) {
71
+ if (value == null) return null;
72
+ const number = Number(value);
73
+ return Number.isNaN(number) ? null : number;
74
+ }
75
+ app.use((req, res, next) => {
76
+ const [path2 = "", search] = req.url.split("?");
77
+ const segments = path2.split("/").map((s) => s.trim()).filter(Boolean);
78
+ let [first, second, ...rest] = segments;
79
+ let leading = "";
80
+ if (segments[0] === "app") {
81
+ leading = "/app";
82
+ [first, second, ...rest] = segments.slice(1);
83
+ }
84
+ if (segments[0] === "exercise") {
85
+ leading = "/exercise";
86
+ [first, second, ...rest] = segments.slice(1);
87
+ }
88
+ const firstNumber = getNumberOrNull(first);
89
+ const secondNumber = getNumberOrNull(second);
90
+ if (firstNumber === null && secondNumber === null) return next();
91
+ if (firstNumber != null) first = firstNumber.toString().padStart(2, "0");
92
+ if (secondNumber != null) second = secondNumber.toString().padStart(2, "0");
93
+ const updatedPath = `${leading}/${[first, second, ...rest].filter(Boolean).join("/")}`;
94
+ const updatedUrl = search ? `${updatedPath}?${search}` : updatedPath;
95
+ if (req.url !== updatedUrl) {
96
+ return res.redirect(302, updatedUrl);
97
+ }
98
+ next();
99
+ });
100
+ async function getBuild() {
101
+ const build = viteDevServer ? viteDevServer.ssrLoadModule("virtual:react-router/server-build") : (
102
+ // @ts-ignore this should exist before running the server
103
+ // but it may not exist just yet.
104
+ await import("#build/server/index.js")
105
+ );
106
+ return build;
107
+ }
108
+ app.all(
109
+ "*splat",
110
+ createRequestHandler({
111
+ getLoadContext: () => ({ serverBuild: getBuild() }),
112
+ mode: MODE,
113
+ build: getBuild
114
+ })
115
+ );
116
+ const desiredPort = Number(process.env.PORT || 5639);
117
+ const portToUse = await getPort({
118
+ port: portNumbers(desiredPort, desiredPort + 100)
119
+ });
120
+ const localIp = ipAddress() ?? "Unknown";
121
+ const lanUrl = /^10[.]|^172[.](1[6-9]|2[0-9]|3[0-1])[.]|^192[.]168[.]/.test(
122
+ localIp
123
+ ) ? `http://${localIp}:${portToUse}` : null;
124
+ const server = app.listen(portToUse, async () => {
125
+ const addy = server.address();
126
+ const portUsed = desiredPort === portToUse ? desiredPort : addy && typeof addy === "object" ? addy.port : 0;
127
+ if (portUsed !== desiredPort) {
128
+ console.warn(
129
+ chalk.yellow(
130
+ `\u26A0\uFE0F Port ${desiredPort} is not available, using ${portUsed} instead.`
131
+ )
132
+ );
133
+ }
134
+ console.log(`\u{1F428} Let's get learning!`);
135
+ const localUrl = `http://localhost:${portUsed}`;
136
+ console.log(
137
+ `
138
+ ${chalk.bold("Local:")} ${chalk.cyan(localUrl)}
139
+ ${lanUrl ? `${chalk.bold("On Your Network:")} ${chalk.cyan(lanUrl)}` : ""}
140
+ ${chalk.bold("Press Ctrl+C to stop")}
141
+ `.trim()
142
+ );
143
+ if (process.env.EPICSHOP_DEPLOYED !== "true" && process.env.EPICSHOP_ENABLE_WATCHER === "true") {
144
+ const watches = /* @__PURE__ */ new Map();
145
+ const wss = new WebSocketServer({ noServer: true });
146
+ server.on("upgrade", (request, socket, head) => {
147
+ const url = new URL(request.url ?? "/", "ws://localhost:0000");
148
+ if (url.pathname === "/__ws") {
149
+ const origin = request.headers.origin;
150
+ const isValidOrigin = origin && (origin === `http://localhost:${portToUse}` || origin === `http://127.0.0.1:${portToUse}` || lanUrl && origin === lanUrl);
151
+ if (!isValidOrigin) {
152
+ socket.write("HTTP/1.1 403 Forbidden\r\n\r\n");
153
+ socket.destroy();
154
+ return;
155
+ }
156
+ wss.handleUpgrade(request, socket, head, (ws) => {
157
+ const watchPaths = url.searchParams.getAll("watch");
158
+ if (watchPaths.length === 0) {
159
+ socket.destroy();
160
+ return;
161
+ }
162
+ const key = watchPaths.join("&&");
163
+ let watcher = watches.get(key);
164
+ if (!watcher) {
165
+ const chok = chokidar.watch(watchPaths, {
166
+ cwd: getWorkshopRoot(),
167
+ ignoreInitial: true,
168
+ ignored: [
169
+ `/.git/`,
170
+ `/node_modules/`,
171
+ `/build/`,
172
+ `/server-build/`,
173
+ `/playwright-report/`,
174
+ `/dist/`,
175
+ `/.cache/`
176
+ ]
177
+ });
178
+ watcher = { clients: /* @__PURE__ */ new Set(), chok };
179
+ watches.set(key, watcher);
180
+ let timer = null;
181
+ let fileChanges = /* @__PURE__ */ new Set();
182
+ watcher.chok.on("all", (event, filePath) => {
183
+ fileChanges.add(path.join(getWorkshopRoot(), filePath));
184
+ if (timer) return;
185
+ timer = setTimeout(async () => {
186
+ for (const client of watcher?.clients ?? []) {
187
+ client.send(
188
+ JSON.stringify({
189
+ type: "epicshop:file-change",
190
+ data: { event, filePaths: Array.from(fileChanges) }
191
+ })
192
+ );
193
+ }
194
+ setModifiedTimesForAppDirs(...Array.from(fileChanges));
195
+ fileChanges = /* @__PURE__ */ new Set();
196
+ timer = null;
197
+ }, 50);
198
+ });
199
+ }
200
+ watcher.clients.add(ws);
201
+ ws.on("close", () => {
202
+ watcher?.clients.delete(ws);
203
+ if (watcher?.clients.size === 0) {
204
+ watches.delete(key);
205
+ void watcher.chok.close();
206
+ }
207
+ });
208
+ });
209
+ } else {
210
+ socket.destroy();
211
+ }
212
+ });
213
+ closeWithGrace(async () => {
214
+ await Promise.all([
215
+ ...Array.from(watches.values()).map((watcher) => watcher.chok.close()),
216
+ new Promise((resolve, reject) => {
217
+ wss.close((e) => e ? reject(e) : resolve("ok"));
218
+ })
219
+ ]);
220
+ });
221
+ }
222
+ const hasUpdates = await hasUpdatesPromise;
223
+ if (hasUpdates.updatesAvailable) {
224
+ const updateCommand = chalk.blue.bold.bgWhite(" npx update-epic-workshop ");
225
+ const updateLink = chalk.blue.bgWhite(` ${hasUpdates.diffLink} `);
226
+ console.log(
227
+ "\n",
228
+ `\u{1F389} There are ${chalk.yellow(
229
+ "updates available"
230
+ )} for this workshop repository. \u{1F389}
231
+
232
+ To get the updates, ${chalk.green.bold.bgWhite(
233
+ `press the "u" key`
234
+ )} or stop the server and run the following command:
235
+
236
+ ${updateCommand}
237
+
238
+ To view a diff, check:
239
+ ${updateLink}`
240
+ );
241
+ }
242
+ });
243
+ closeWithGrace(() => {
244
+ return new Promise((resolve, reject) => {
245
+ server.close((e) => e ? reject(e) : resolve());
246
+ });
247
+ });
package/package.json ADDED
@@ -0,0 +1 @@
1
+ {"name":"@epic-web/workshop-app","version":"0.0.0-semantically-released","sideEffects":false,"publishConfig":{"access":"public"},"bin":{"epicshop":"./bin/epicshop.js"},"files":["bin","build","dist","start.js"],"type":"module","imports":{"#app/*":"./app/*","#tests/*":"./tests/*","#build/*":"./build/*"},"exports":{"./start":{"default":"./start.js"}},"scripts":{"build":"run-p --print-label --print-name build:*","build:app":"react-router build --sourcemapClient --sourcemapServer","build:server":"tsx ./other/build-dir.ts server","dev":"node ./server/dev-server.js","format":"prettier --write .","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","start":"cross-env NODE_ENV=production node ./start.js","typecheck":"react-router typegen && tsc --noEmit","validate":"run-p lint typecheck"},"dependencies":{"@conform-to/react":"^1.8.0","@conform-to/zod":"^1.8.0","@epic-web/cachified":"^5.6.0","@epic-web/client-hints":"^1.3.5","@epic-web/invariant":"^1.0.0","@epic-web/remember":"^1.1.0","@epic-web/restore-scroll":"^2.0.0","@epic-web/workshop-presence":"^5.29.2","@epic-web/workshop-utils":"^5.29.2","@mdx-js/mdx":"^3.1.0","@mux/mux-player-react":"^3.5.0","@nasa-gcn/remix-seo":"^2.0.1","@paralleldrive/cuid2":"^2.2.2","@radix-ui/react-accordion":"^1.2.11","@radix-ui/react-dialog":"^1.1.14","@radix-ui/react-popover":"^1.1.14","@radix-ui/react-select":"^2.2.5","@radix-ui/react-tabs":"^1.1.12","@radix-ui/react-toast":"^1.2.14","@radix-ui/react-tooltip":"^1.2.7","@react-router/express":"^7.6.3","@react-router/node":"^7.6.3","@react-router/remix-routes-option-adapter":"^7.6.3","@resvg/resvg-js":"^2.6.2","@sindresorhus/slugify":"^2.2.1","address":"^2.0.3","ansi-to-html":"^0.7.2","chalk":"^5.4.1","chokidar":"^4.0.3","close-with-grace":"^2.2.0","clsx":"^2.1.1","compression":"^1.8.0","confetti-react":"^2.6.0","cookie":"^1.0.2","cross-env":"^7.0.3","cross-spawn":"^7.0.6","dotenv":"^17.0.1","esbuild":"^0.25.5","etag":"^1.8.1","execa":"^9.6.0","express":"^5.1.0","fkill":"^9.0.0","framer-motion":"^12.23.0","fs-extra":"^11.3.0","get-port":"^7.1.0","glob":"^11.0.3","isbot":"^5.1.28","lru-cache":"^11.1.0","md5-hex":"^5.0.0","mdx-bundler":"^10.1.1","mermaid":"^11.8.0","mime-types":"^3.0.1","morgan":"^1.10.0","msw":"^2.10.2","open":"^10.1.2","openid-client":"^6.6.2","p-queue":"^8.1.0","partysocket":"^1.1.4","react":"^19.1.0","react-dom":"^19.1.0","react-router":"^7.6.3","remix-flat-routes":"^0.8.5","remix-utils":"^8.7.0","satori":"^0.15.2","shell-quote":"^1.8.3","sonner":"^2.0.6","source-map-support":"^0.5.21","spin-delay":"^2.0.1","tailwind-merge":"^2.6.0","vite-env-only":"^3.0.3","ws":"^8.18.3","zod":"^3.25.71"},"devDependencies":{"@playwright/test":"^1.53.2","@react-router/dev":"^7.6.3","@tailwindcss/typography":"^0.5.16","@testing-library/dom":"^10.4.0","@total-typescript/ts-reset":"^0.6.1","@types/compression":"^1.8.1","@types/cross-spawn":"^6.0.6","@types/etag":"^1.8.4","@types/express":"^5.0.3","@types/fs-extra":"^11.0.4","@types/hast":"^3.0.4","@types/lodash.escape":"^4.0.9","@types/mdast":"^4.0.4","@types/mime-types":"^3.0.1","@types/morgan":"^1.9.10","@types/node":"^24.0.10","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@types/shell-quote":"^1.7.5","@types/source-map-support":"^0.5.10","@types/wait-on":"^5.3.4","@types/ws":"^8.18.1","autoprefixer":"^10.4.21","eslint":"^9.30.1","mdast-util-mdx-jsx":"^3.2.0","npm-run-all":"^4.1.5","prettier":"^3.6.2","prettier-plugin-tailwindcss":"^0.6.13","tailwind-scrollbar":"^3.1.0","tailwindcss":"^3.4.13","tailwindcss-animate":"^1.0.7","tailwindcss-radix":"^3.0.5","tailwindcss-safe-area":"^0.6.0","tsx":"^4.20.3","typescript":"^5.8.3","vite":"^7.0.1"},"engines":{"node":"20 || 22 || 24"},"repository":{"type":"git","url":"https://github.com/epicweb-dev/epicshop.git","directory":"packages/workshop-app"}}
package/start.js ADDED
@@ -0,0 +1,50 @@
1
+ import fs from 'fs/promises'
2
+ import path from 'path'
3
+ import dotenv from 'dotenv'
4
+
5
+ if (process.env.EPICSHOP_SLOW_START === 'true') {
6
+ // slow start is used when doing the update-repo action to give time for the
7
+ // old server to exist before the new server starts (so ports are freed up).
8
+ await new Promise((resolve) => setTimeout(resolve, 1000))
9
+ }
10
+
11
+ const packageJson = JSON.parse(
12
+ await fs.readFile(path.resolve(process.cwd(), 'package.json'), 'utf-8'),
13
+ )
14
+
15
+ process.env.EPICSHOP_APP_VERSION ??= packageJson.version
16
+ process.env.NODE_ENV ??= 'development'
17
+ process.env.EPICSHOP_ENABLE_WATCHER ??= 'true'
18
+ const EPICSHOP_CONTEXT_CWD = process.env.EPICSHOP_CONTEXT_CWD ?? process.cwd()
19
+ dotenv.config({
20
+ quiet: true,
21
+ path: path.join(EPICSHOP_CONTEXT_CWD, '.env'),
22
+ })
23
+
24
+ if (process.env.NODE_ENV === 'production') {
25
+ await import('./dist/server/index.js').catch((err) => {
26
+ console.error(
27
+ 'Encountered error importing the production server, exiting...',
28
+ )
29
+ console.error(err)
30
+ process.exit(1)
31
+ })
32
+ } else {
33
+ await import('./server/index.ts').catch((err) => {
34
+ console.error(
35
+ 'Encountered error importing the development server, exiting...',
36
+ )
37
+ console.error(err)
38
+ process.exit(1)
39
+ })
40
+ }
41
+
42
+ process.on('unhandledRejection', (reason, promise) => {
43
+ console.error(
44
+ 'Unhandled Rejection for: ',
45
+ promise,
46
+ '\nWith the reason: ',
47
+ reason,
48
+ )
49
+ throw reason
50
+ })