@fullstackunicorn/create-root 1.0.17 → 1.0.19

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 (327) hide show
  1. package/assets/root.fullstackunicorn.dev/.gitlab-ci.yml +42 -0
  2. package/assets/root.fullstackunicorn.dev/assets/.env +6 -0
  3. package/assets/root.fullstackunicorn.dev/assets/config.cmd.sh +86 -0
  4. package/assets/root.fullstackunicorn.dev/assets/index.cmd.js +30 -0
  5. package/assets/root.fullstackunicorn.dev/assets/index.def.js +190 -0
  6. package/assets/root.fullstackunicorn.dev/assets/index.dep.js +20 -0
  7. package/assets/root.fullstackunicorn.dev/assets/index.init.js +8 -0
  8. package/assets/root.fullstackunicorn.dev/assets/index.js +4 -0
  9. package/assets/root.fullstackunicorn.dev/assets/modules/sync.auth.js +3 -0
  10. package/assets/root.fullstackunicorn.dev/assets/modules/sync.js +430 -0
  11. package/assets/root.fullstackunicorn.dev/assets/modules/sync.local.js +117 -0
  12. package/assets/root.fullstackunicorn.dev/assets/modules/sync.tools.js +102 -0
  13. package/assets/root.fullstackunicorn.dev/assets/package.json +32 -0
  14. package/assets/root.fullstackunicorn.dev/assets/package.md +13 -0
  15. package/assets/root.fullstackunicorn.dev/assets/webapp.runner.js +63 -0
  16. package/assets/root.fullstackunicorn.dev/backend/.env +13 -0
  17. package/assets/root.fullstackunicorn.dev/backend/config.cmd.sh +79 -0
  18. package/assets/root.fullstackunicorn.dev/backend/dockerfile +12 -0
  19. package/assets/root.fullstackunicorn.dev/backend/index.def.js +15 -0
  20. package/assets/root.fullstackunicorn.dev/backend/index.dep.js +19 -0
  21. package/assets/root.fullstackunicorn.dev/backend/index.init.js +25 -0
  22. package/assets/root.fullstackunicorn.dev/backend/index.js +15 -0
  23. package/assets/root.fullstackunicorn.dev/backend/modules/cookies.js +64 -0
  24. package/assets/root.fullstackunicorn.dev/backend/modules/loader.js +103 -0
  25. package/assets/root.fullstackunicorn.dev/backend/modules/loader.tools.js +22 -0
  26. package/assets/root.fullstackunicorn.dev/backend/modules/stripe.js +299 -0
  27. package/assets/root.fullstackunicorn.dev/backend/modules/stripe.session.js +1 -0
  28. package/assets/root.fullstackunicorn.dev/backend/modules/stripe.tools.js +126 -0
  29. package/assets/root.fullstackunicorn.dev/backend/package.json +35 -0
  30. package/assets/root.fullstackunicorn.dev/backend/server/errors.js +29 -0
  31. package/assets/root.fullstackunicorn.dev/backend/server/errors.list.js +69 -0
  32. package/assets/root.fullstackunicorn.dev/backend/server/middleware.auth.js +4 -0
  33. package/assets/root.fullstackunicorn.dev/backend/server/middleware.js +29 -0
  34. package/assets/root.fullstackunicorn.dev/backend/server/middleware.prod.js +18 -0
  35. package/assets/root.fullstackunicorn.dev/backend/server/resolvers.js +21 -0
  36. package/assets/root.fullstackunicorn.dev/backend/server/router.js +60 -0
  37. package/assets/root.fullstackunicorn.dev/config.cmd.sh +182 -0
  38. package/assets/root.fullstackunicorn.dev/config.code-workspace +7 -0
  39. package/assets/root.fullstackunicorn.dev/config.reduce.js +84 -0
  40. package/assets/root.fullstackunicorn.dev/frontend/.env +3 -0
  41. package/assets/root.fullstackunicorn.dev/frontend/App.js +23 -0
  42. package/assets/root.fullstackunicorn.dev/frontend/App.sw.js +12 -0
  43. package/assets/root.fullstackunicorn.dev/frontend/App.tracking.js +13 -0
  44. package/assets/root.fullstackunicorn.dev/frontend/App.uri.js +63 -0
  45. package/assets/root.fullstackunicorn.dev/frontend/abstracts/abs.js +148 -0
  46. package/assets/root.fullstackunicorn.dev/frontend/abstracts/dateTime.js +120 -0
  47. package/assets/root.fullstackunicorn.dev/frontend/abstracts/err.js +31 -0
  48. package/assets/root.fullstackunicorn.dev/frontend/abstracts/img.js +38 -0
  49. package/assets/root.fullstackunicorn.dev/frontend/assets/index.webmanifest +21 -0
  50. package/assets/root.fullstackunicorn.dev/frontend/assets/llms.dev.txt +2 -0
  51. package/assets/root.fullstackunicorn.dev/frontend/assets/llms.txt +8 -0
  52. package/assets/root.fullstackunicorn.dev/frontend/assets/robots.dev.txt +2 -0
  53. package/assets/root.fullstackunicorn.dev/frontend/assets/robots.txt +4 -0
  54. package/assets/root.fullstackunicorn.dev/frontend/base/account/@use.js +95 -0
  55. package/assets/root.fullstackunicorn.dev/frontend/base/account/AccountCard.js +37 -0
  56. package/assets/root.fullstackunicorn.dev/frontend/base/account/AccountLogo.js +27 -0
  57. package/assets/root.fullstackunicorn.dev/frontend/base/account/AccountLogo.pod.js +34 -0
  58. package/assets/root.fullstackunicorn.dev/frontend/base/alerts/@use.js +7 -0
  59. package/assets/root.fullstackunicorn.dev/frontend/base/alerts/Alert.js +24 -0
  60. package/assets/root.fullstackunicorn.dev/frontend/base/alerts/Alert.pod.js +28 -0
  61. package/assets/root.fullstackunicorn.dev/frontend/base/alerts/Alerts.js +35 -0
  62. package/assets/root.fullstackunicorn.dev/frontend/base/callout/Callout.js +16 -0
  63. package/assets/root.fullstackunicorn.dev/frontend/base/callout/Callout.pod.js +25 -0
  64. package/assets/root.fullstackunicorn.dev/frontend/base/checkout/@tools.js +41 -0
  65. package/assets/root.fullstackunicorn.dev/frontend/base/checkout/@use.js +34 -0
  66. package/assets/root.fullstackunicorn.dev/frontend/base/checkout/CheckoutCard.js +29 -0
  67. package/assets/root.fullstackunicorn.dev/frontend/base/checkout/CheckoutCard.pod.js +25 -0
  68. package/assets/root.fullstackunicorn.dev/frontend/base/cookies/@tools.js +67 -0
  69. package/assets/root.fullstackunicorn.dev/frontend/base/cookies/@use.js +218 -0
  70. package/assets/root.fullstackunicorn.dev/frontend/base/cookies/CookiesCard.js +19 -0
  71. package/assets/root.fullstackunicorn.dev/frontend/base/errors/@use.js +7 -0
  72. package/assets/root.fullstackunicorn.dev/frontend/base/errors/Errors.js +14 -0
  73. package/assets/root.fullstackunicorn.dev/frontend/base/language/@tools.js +45 -0
  74. package/assets/root.fullstackunicorn.dev/frontend/base/language/@use.js +144 -0
  75. package/assets/root.fullstackunicorn.dev/frontend/base/language/LanguageButton.js +18 -0
  76. package/assets/root.fullstackunicorn.dev/frontend/base/language/LanguageCard.js +20 -0
  77. package/assets/root.fullstackunicorn.dev/frontend/base/layout/@use.js +91 -0
  78. package/assets/root.fullstackunicorn.dev/frontend/base/layout/Footer.js +5 -0
  79. package/assets/root.fullstackunicorn.dev/frontend/base/layout/Footer.pod.js +19 -0
  80. package/assets/root.fullstackunicorn.dev/frontend/base/layout/Header.js +22 -0
  81. package/assets/root.fullstackunicorn.dev/frontend/base/layout/Header.pod.js +37 -0
  82. package/assets/root.fullstackunicorn.dev/frontend/base/layout/Layout.js +41 -0
  83. package/assets/root.fullstackunicorn.dev/frontend/base/layout/Layout.pod.js +30 -0
  84. package/assets/root.fullstackunicorn.dev/frontend/base/layout/menus/@use.js +21 -0
  85. package/assets/root.fullstackunicorn.dev/frontend/base/layout/menus/MenuTwo.js +41 -0
  86. package/assets/root.fullstackunicorn.dev/frontend/base/layout/menus/MenuTwo.pod.js +38 -0
  87. package/assets/root.fullstackunicorn.dev/frontend/base/layout/sideTwo/@use.js +48 -0
  88. package/assets/root.fullstackunicorn.dev/frontend/base/layout/sideTwo/IconTwo.js +30 -0
  89. package/assets/root.fullstackunicorn.dev/frontend/base/layout/sideTwo/IconTwo.pod.js +22 -0
  90. package/assets/root.fullstackunicorn.dev/frontend/base/layout/sideTwo/SidebarTwo.js +46 -0
  91. package/assets/root.fullstackunicorn.dev/frontend/base/layout/sideTwo/SidebarTwo.pod.js +29 -0
  92. package/assets/root.fullstackunicorn.dev/frontend/base/legals/LegalCard.js +17 -0
  93. package/assets/root.fullstackunicorn.dev/frontend/base/legals/LegalsCard.js +20 -0
  94. package/assets/root.fullstackunicorn.dev/frontend/base/loader/@tools.js +111 -0
  95. package/assets/root.fullstackunicorn.dev/frontend/base/loader/@use.js +35 -0
  96. package/assets/root.fullstackunicorn.dev/frontend/base/loader/Loader.js +20 -0
  97. package/assets/root.fullstackunicorn.dev/frontend/base/loader/Normalizer.js +58 -0
  98. package/assets/root.fullstackunicorn.dev/frontend/base/loader/Starter.js +17 -0
  99. package/assets/root.fullstackunicorn.dev/frontend/base/lookups/@use.js +85 -0
  100. package/assets/root.fullstackunicorn.dev/frontend/base/modals/@use.js +67 -0
  101. package/assets/root.fullstackunicorn.dev/frontend/base/modals/Modal.js +42 -0
  102. package/assets/root.fullstackunicorn.dev/frontend/base/modals/Modal.pod.js +43 -0
  103. package/assets/root.fullstackunicorn.dev/frontend/base/modals/ModalPopup.pod.js +41 -0
  104. package/assets/root.fullstackunicorn.dev/frontend/base/modals/Modals.js +12 -0
  105. package/assets/root.fullstackunicorn.dev/frontend/base/router/@tools.js +26 -0
  106. package/assets/root.fullstackunicorn.dev/frontend/base/router/@use.js +212 -0
  107. package/assets/root.fullstackunicorn.dev/frontend/base/router/Router.js +21 -0
  108. package/assets/root.fullstackunicorn.dev/frontend/base/statics/@use.js +46 -0
  109. package/assets/root.fullstackunicorn.dev/frontend/base/theme/@use.js +28 -0
  110. package/assets/root.fullstackunicorn.dev/frontend/base/theme/ThemeCard.js +21 -0
  111. package/assets/root.fullstackunicorn.dev/frontend/client/@api.js +15 -0
  112. package/assets/root.fullstackunicorn.dev/frontend/client/auth.js +213 -0
  113. package/assets/root.fullstackunicorn.dev/frontend/client/cookies.js +41 -0
  114. package/assets/root.fullstackunicorn.dev/frontend/client/fonts.js +19 -0
  115. package/assets/root.fullstackunicorn.dev/frontend/client/load.js +26 -0
  116. package/assets/root.fullstackunicorn.dev/frontend/client/statics.js +47 -0
  117. package/assets/root.fullstackunicorn.dev/frontend/client/stripe.js +38 -0
  118. package/assets/root.fullstackunicorn.dev/frontend/config.cmd.sh +94 -0
  119. package/assets/root.fullstackunicorn.dev/frontend/config.cmd.vite.js +205 -0
  120. package/assets/root.fullstackunicorn.dev/frontend/config.meta.js +0 -0
  121. package/assets/root.fullstackunicorn.dev/frontend/config.style.js +86 -0
  122. package/assets/root.fullstackunicorn.dev/frontend/configure/cache.json +4 -0
  123. package/assets/root.fullstackunicorn.dev/frontend/configure/env.json +8 -0
  124. package/assets/root.fullstackunicorn.dev/frontend/configure/env.prod.json +8 -0
  125. package/assets/root.fullstackunicorn.dev/frontend/configure/layout.json +9 -0
  126. package/assets/root.fullstackunicorn.dev/frontend/configure/logo.json +4 -0
  127. package/assets/root.fullstackunicorn.dev/frontend/configure/services.json +10 -0
  128. package/assets/root.fullstackunicorn.dev/frontend/configure/trademark.json +9 -0
  129. package/assets/root.fullstackunicorn.dev/frontend/eslint.config.js +41 -0
  130. package/assets/root.fullstackunicorn.dev/frontend/features/legal/Legal.js +15 -0
  131. package/assets/root.fullstackunicorn.dev/frontend/features/legal/Legal.pod.js +11 -0
  132. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/Button.js +66 -0
  133. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/Crossfader.js +32 -0
  134. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/Fader.js +46 -0
  135. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/HoverCard.js +31 -0
  136. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/Layout.js +68 -0
  137. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/Layout.use.js +33 -0
  138. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/Layout.vars.js +20 -0
  139. package/assets/root.fullstackunicorn.dev/frontend/imports/animated/Root.js +26 -0
  140. package/assets/root.fullstackunicorn.dev/frontend/imports/cache.js +81 -0
  141. package/assets/root.fullstackunicorn.dev/frontend/imports/client.js +248 -0
  142. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Backdrop.js +21 -0
  143. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Background.js +21 -0
  144. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Background.pod.js +20 -0
  145. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Href.js +22 -0
  146. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Iframe.js +13 -0
  147. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Img.js +88 -0
  148. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Img.pod.js +69 -0
  149. package/assets/root.fullstackunicorn.dev/frontend/imports/core/InputFile.js +26 -0
  150. package/assets/root.fullstackunicorn.dev/frontend/imports/core/InputTextItem.js +23 -0
  151. package/assets/root.fullstackunicorn.dev/frontend/imports/core/InputTextarea.js +39 -0
  152. package/assets/root.fullstackunicorn.dev/frontend/imports/core/InputTextline.js +23 -0
  153. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Json.js +19 -0
  154. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Link.js +105 -0
  155. package/assets/root.fullstackunicorn.dev/frontend/imports/core/List.js +18 -0
  156. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Main.js +7 -0
  157. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Pressable.js +14 -0
  158. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Scrollable.js +27 -0
  159. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Svg.js +23 -0
  160. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Svg.pod.js +24 -0
  161. package/assets/root.fullstackunicorn.dev/frontend/imports/core/Text.js +118 -0
  162. package/assets/root.fullstackunicorn.dev/frontend/imports/core/View.js +13 -0
  163. package/assets/root.fullstackunicorn.dev/frontend/imports/fonts/tools.js +72 -0
  164. package/assets/root.fullstackunicorn.dev/frontend/imports/fonts/use.js +52 -0
  165. package/assets/root.fullstackunicorn.dev/frontend/imports/head/Head.js +39 -0
  166. package/assets/root.fullstackunicorn.dev/frontend/imports/npm.js +20 -0
  167. package/assets/root.fullstackunicorn.dev/frontend/imports/router.js +21 -0
  168. package/assets/root.fullstackunicorn.dev/frontend/imports/scroll/@use.js +85 -0
  169. package/assets/root.fullstackunicorn.dev/frontend/imports/scroll/scroll.js +33 -0
  170. package/assets/root.fullstackunicorn.dev/frontend/imports/service.js +27 -0
  171. package/assets/root.fullstackunicorn.dev/frontend/imports/storage.js +48 -0
  172. package/assets/root.fullstackunicorn.dev/frontend/imports/use.js +62 -0
  173. package/assets/root.fullstackunicorn.dev/frontend/index.html +36 -0
  174. package/assets/root.fullstackunicorn.dev/frontend/jsconfig.json +18 -0
  175. package/assets/root.fullstackunicorn.dev/frontend/menus/@use.js +15 -0
  176. package/assets/root.fullstackunicorn.dev/frontend/menus/Main.js +33 -0
  177. package/assets/root.fullstackunicorn.dev/frontend/menus/Main.use.js +22 -0
  178. package/assets/root.fullstackunicorn.dev/frontend/modals/countries/countries.js +39 -0
  179. package/assets/root.fullstackunicorn.dev/frontend/modules/buttons/IconTextButton.js +17 -0
  180. package/assets/root.fullstackunicorn.dev/frontend/modules/buttons/IconTextButton.pod.js +24 -0
  181. package/assets/root.fullstackunicorn.dev/frontend/modules/buttons/TextButton.js +47 -0
  182. package/assets/root.fullstackunicorn.dev/frontend/modules/buttons/TextButton.pod.js +94 -0
  183. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Back.js +26 -0
  184. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Back.pod.js +37 -0
  185. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Bulleted.js +37 -0
  186. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Icon.js +20 -0
  187. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Icon.pod.js +28 -0
  188. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Img.js +19 -0
  189. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Img.pod.js +26 -0
  190. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Link.js +35 -0
  191. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Link.pod.js +28 -0
  192. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Slider.js +1 -0
  193. package/assets/root.fullstackunicorn.dev/frontend/modules/core/Slider.pod.js +30 -0
  194. package/assets/root.fullstackunicorn.dev/frontend/modules/page/PageBox.js +15 -0
  195. package/assets/root.fullstackunicorn.dev/frontend/modules/trademarks/@use.js +25 -0
  196. package/assets/root.fullstackunicorn.dev/frontend/modules/trademarks/Logo.js +19 -0
  197. package/assets/root.fullstackunicorn.dev/frontend/modules/trademarks/Logo.pod.js +17 -0
  198. package/assets/root.fullstackunicorn.dev/frontend/modules/trademarks/Trademark.js +20 -0
  199. package/assets/root.fullstackunicorn.dev/frontend/modules/trademarks/Trademark.pod.js +17 -0
  200. package/assets/root.fullstackunicorn.dev/frontend/package.json +58 -0
  201. package/assets/root.fullstackunicorn.dev/frontend/pages/@use.js +50 -0
  202. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Checkout.js +10 -0
  203. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.abs.js +11 -0
  204. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.api.js +18 -0
  205. package/assets/root.fullstackunicorn.dev/frontend/pages/app/Home.js +23 -0
  206. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Callout.api.js +31 -0
  207. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Callout.js +13 -0
  208. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Legal.api.js +35 -0
  209. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Legal.js +15 -0
  210. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Legals.api.js +19 -0
  211. package/assets/root.fullstackunicorn.dev/frontend/pages/root/Legals.js +29 -0
  212. package/assets/root.fullstackunicorn.dev/frontend/pages/root/User.api.js +18 -0
  213. package/assets/root.fullstackunicorn.dev/frontend/pages/root/User.js +25 -0
  214. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookCard.js +58 -0
  215. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookCard.pod.js +37 -0
  216. package/assets/root.fullstackunicorn.dev/frontend/panels/card/book/BookProse.js +22 -0
  217. package/assets/root.fullstackunicorn.dev/frontend/panels/cards/Account.js +26 -0
  218. package/assets/root.fullstackunicorn.dev/frontend/panels/cards/Account.pod.js +48 -0
  219. package/assets/root.fullstackunicorn.dev/frontend/panels/cards/Launcher.js +19 -0
  220. package/assets/root.fullstackunicorn.dev/frontend/panels/cards/Launcher.pod.js +38 -0
  221. package/assets/root.fullstackunicorn.dev/frontend/panels/cards/Linker.js +20 -0
  222. package/assets/root.fullstackunicorn.dev/frontend/panels/cards/Linker.pod.js +38 -0
  223. package/assets/root.fullstackunicorn.dev/frontend/panels/cards/Slider.js +22 -0
  224. package/assets/root.fullstackunicorn.dev/frontend/panels/cards/Slider.pod.js +39 -0
  225. package/assets/root.fullstackunicorn.dev/frontend/panels/error/ErrorPage.js +12 -0
  226. package/assets/root.fullstackunicorn.dev/frontend/panels/error/ErrorPage.pod.js +23 -0
  227. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Grid.js +115 -0
  228. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Grid.pod.js +65 -0
  229. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Item.js +3 -0
  230. package/assets/root.fullstackunicorn.dev/frontend/panels/grid/book/Item.pod.js +50 -0
  231. package/assets/root.fullstackunicorn.dev/frontend/panels/layout/Bottom.js +12 -0
  232. package/assets/root.fullstackunicorn.dev/frontend/panels/layout/Bottom.pod.js +40 -0
  233. package/assets/root.fullstackunicorn.dev/frontend/panels/layout/PageTitle.js +3 -0
  234. package/assets/root.fullstackunicorn.dev/frontend/panels/layout/PageTitle.pod.js +21 -0
  235. package/assets/root.fullstackunicorn.dev/frontend/panels/page/PageScrollable.js +13 -0
  236. package/assets/root.fullstackunicorn.dev/frontend/panels/page/PageScrollable.pod.js +85 -0
  237. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/@formatter.js +113 -0
  238. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/@use.js +21 -0
  239. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/Basic.js +30 -0
  240. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/Basic.pod.js +16 -0
  241. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/Prose.js +84 -0
  242. package/assets/root.fullstackunicorn.dev/frontend/panels/prose/Prose.pod.js +58 -0
  243. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/actions/Actions.js +45 -0
  244. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/actions/Actions.pod.js +19 -0
  245. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/actions/SelectPicked.js +21 -0
  246. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/actions/SelectPicked.pod.js +35 -0
  247. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/popup/PopupModal.js +54 -0
  248. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/select/SelectItem.js +20 -0
  249. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/select/SelectItem.pod.js +33 -0
  250. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/select/SelectModal.js +52 -0
  251. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/select/SelectPage.js +33 -0
  252. package/assets/root.fullstackunicorn.dev/frontend/panels/selectors/select/SelectPage.pod.js +18 -0
  253. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Buy.js +19 -0
  254. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Buy.pod.js +17 -0
  255. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Shopper.js +39 -0
  256. package/assets/root.fullstackunicorn.dev/frontend/panels/shopper/bookstore/Shopper.pod.js +187 -0
  257. package/assets/root.fullstackunicorn.dev/frontend/panels/slider/Slider.js +138 -0
  258. package/assets/root.fullstackunicorn.dev/frontend/panels/slider/Slider.pod.js +102 -0
  259. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/actions/Actions.js +12 -0
  260. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/actions/Actions.pod.js +22 -0
  261. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/slider/SliderItem.js +30 -0
  262. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/slider/SliderItem.pod.js +39 -0
  263. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/slider/SliderModal.js +39 -0
  264. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/slider/SliderPage.js +37 -0
  265. package/assets/root.fullstackunicorn.dev/frontend/panels/sliders/slider/SliderPage.pod.js +24 -0
  266. package/assets/root.fullstackunicorn.dev/frontend/panels/wrapper/fixed/Wrapper.js +25 -0
  267. package/assets/root.fullstackunicorn.dev/frontend/panels/wrapper/fixed/Wrapper.pod.js +23 -0
  268. package/assets/root.fullstackunicorn.dev/frontend/preloader/@use.js +14 -0
  269. package/assets/root.fullstackunicorn.dev/frontend/preloader/Preloader.js +46 -0
  270. package/assets/root.fullstackunicorn.dev/frontend/root/constants.js +4 -0
  271. package/assets/root.fullstackunicorn.dev/frontend/root/constants.root.js +15 -0
  272. package/assets/root.fullstackunicorn.dev/frontend/root/constants.scope.js +5 -0
  273. package/assets/root.fullstackunicorn.dev/frontend/root/errors.js +4 -0
  274. package/assets/root.fullstackunicorn.dev/frontend/root/errors.root.js +6 -0
  275. package/assets/root.fullstackunicorn.dev/frontend/root/errors.scope.js +6 -0
  276. package/assets/root.fullstackunicorn.dev/frontend/root/menus.js +9 -0
  277. package/assets/root.fullstackunicorn.dev/frontend/root/menus.root.js +6 -0
  278. package/assets/root.fullstackunicorn.dev/frontend/root/menus.scope.js +6 -0
  279. package/assets/root.fullstackunicorn.dev/frontend/root/modals.js +4 -0
  280. package/assets/root.fullstackunicorn.dev/frontend/root/modals.root.js +11 -0
  281. package/assets/root.fullstackunicorn.dev/frontend/root/modals.scope.js +5 -0
  282. package/assets/root.fullstackunicorn.dev/frontend/root/pages.js +4 -0
  283. package/assets/root.fullstackunicorn.dev/frontend/root/pages.root.js +12 -0
  284. package/assets/root.fullstackunicorn.dev/frontend/root/pages.scope.js +11 -0
  285. package/assets/root.fullstackunicorn.dev/frontend/root/preload.js +18 -0
  286. package/assets/root.fullstackunicorn.dev/frontend/root/preload.root.js +30 -0
  287. package/assets/root.fullstackunicorn.dev/frontend/root/preload.scope.js +33 -0
  288. package/assets/root.fullstackunicorn.dev/frontend/root/routes.js +7 -0
  289. package/assets/root.fullstackunicorn.dev/frontend/root/routes.root.js +47 -0
  290. package/assets/root.fullstackunicorn.dev/frontend/root/routes.scope.js +31 -0
  291. package/assets/root.fullstackunicorn.dev/frontend/sworker/sw.js +104 -0
  292. package/assets/root.fullstackunicorn.dev/frontend/templates/cards.js +25 -0
  293. package/assets/root.fullstackunicorn.dev/frontend/templates/index.js +11 -0
  294. package/assets/root.fullstackunicorn.dev/frontend/templates/page.js +16 -0
  295. package/assets/root.fullstackunicorn.dev/frontend/templates/root.js +32 -0
  296. package/assets/root.fullstackunicorn.dev/frontend/tracking/errors.js +5 -0
  297. package/assets/root.fullstackunicorn.dev/frontend/tracking/logging.js +5 -0
  298. package/assets/root.fullstackunicorn.dev/frontend/tracking/performance.js +5 -0
  299. package/assets/root.fullstackunicorn.dev/frontend/tracking/vitals.js +5 -0
  300. package/assets/root.fullstackunicorn.dev/frontend/vite.config.js +64 -0
  301. package/assets/root.fullstackunicorn.dev/frontend/vite.jsx.js +10 -0
  302. package/assets/root.fullstackunicorn.dev/frontend/vite.sworker.js +56 -0
  303. package/assets/root.fullstackunicorn.dev/frontend/vite.volume.js +94 -0
  304. package/assets/root.fullstackunicorn.dev/manager/.env +10 -0
  305. package/assets/root.fullstackunicorn.dev/manager/config.cmd.sh +81 -0
  306. package/assets/root.fullstackunicorn.dev/manager/dockerfile +12 -0
  307. package/assets/root.fullstackunicorn.dev/manager/index.def.js +17 -0
  308. package/assets/root.fullstackunicorn.dev/manager/index.dep.js +17 -0
  309. package/assets/root.fullstackunicorn.dev/manager/index.init.js +38 -0
  310. package/assets/root.fullstackunicorn.dev/manager/index.js +17 -0
  311. package/assets/root.fullstackunicorn.dev/manager/modules/clone.js +65 -0
  312. package/assets/root.fullstackunicorn.dev/manager/modules/sync.server.js +65 -0
  313. package/assets/root.fullstackunicorn.dev/manager/modules/sync.tools.js +55 -0
  314. package/assets/root.fullstackunicorn.dev/manager/modules/workspace.js +77 -0
  315. package/assets/root.fullstackunicorn.dev/manager/modules/workspace.tools.js +49 -0
  316. package/assets/root.fullstackunicorn.dev/manager/package.json +36 -0
  317. package/assets/root.fullstackunicorn.dev/manager/server/errors.js +30 -0
  318. package/assets/root.fullstackunicorn.dev/manager/server/errors.list.js +24 -0
  319. package/assets/root.fullstackunicorn.dev/manager/server/middleware.auth.js +4 -0
  320. package/assets/root.fullstackunicorn.dev/manager/server/middleware.js +29 -0
  321. package/assets/root.fullstackunicorn.dev/manager/server/middleware.prod.js +18 -0
  322. package/assets/root.fullstackunicorn.dev/manager/server/resolvers.js +21 -0
  323. package/assets/root.fullstackunicorn.dev/manager/server/router.js +58 -0
  324. package/assets/root.fullstackunicorn.dev/package.json +16 -0
  325. package/assets/root.fullstackunicorn.dev/package.md +44 -0
  326. package/assets/root.fullstackunicorn.dev/root.config.app.js +85 -0
  327. package/package.json +1 -1
@@ -0,0 +1,430 @@
1
+ // import { app, fsa, axios, crypto, JSZip, Sender } from '#@/index.dep.js'
2
+ // import { auth } from '#@/modules/sync.auth.js'
3
+ // import { Local } from '#@/modules/sync.local.js'
4
+ // import { Tools } from '#@/modules/sync.tools.js'
5
+
6
+ // export class Sync {
7
+
8
+ // constructor(init) {
9
+
10
+ // this.def = init.def
11
+ // this.tools = new Tools(init)
12
+ // this.local = new Local(init)
13
+ // }
14
+
15
+ // runConfig = async (target) => {
16
+
17
+ // this.def.spinner.start()
18
+ // this.def.reportConfig(`🔥🔥🔥 Sync.runConfig:start`)
19
+
20
+ // if (target) this.def.app.target = target
21
+
22
+ // try {
23
+
24
+ // const list = await this.tools.getList(this.def.folders.config)
25
+
26
+ // this.def.reportConfig(`✅ file-list-read ${this.def.folders.config}`)
27
+
28
+ // const zip = new JSZip()
29
+ // zip.file('app.json', JSON.stringify(app, null, 2))
30
+
31
+ // for (const relPath of list) {
32
+ // const buffer = await fsa.readFile(`${this.def.folders.config}/${relPath}`)
33
+ // zip.file(relPath, buffer)
34
+ // this.def.reportConfig(`✅ file-added-to-zip ${relPath}`)
35
+ // }
36
+
37
+ // await fsa.safeRemove(this.def.files.export.configZip)
38
+ // await fsa.ensureFileDir(this.def.files.export.configZip)
39
+ // const bufferZip = await zip.generateAsync({ type: 'nodebuffer', compression: 'DEFLATE' })
40
+ // await fsa.writeFile(this.def.files.export.configZip, bufferZip)
41
+
42
+ // this.def.reportConfig(`✅ written-zip \n💾 ${this.def.files.export.configZip}`)
43
+
44
+ // const payload = {}
45
+ // payload.crypto = crypto
46
+ // payload.fileEndpoint = this.def.endpoints.file
47
+ // payload.chunkEndpoint = this.def.endpoints.chunk
48
+ // payload.statusEndpoint = this.def.endpoints.status
49
+ // payload.finalizeEndpoint = this.def.endpoints.finalize
50
+ // const sender = new Sender(payload)
51
+
52
+ // const upload = {}
53
+ // upload.bytes = bufferZip
54
+ // upload.target = this.def.app.target
55
+ // upload.token = await auth.getToken()
56
+ // upload.payload = {}
57
+ // upload.payload.callback = 'configure'
58
+ // upload.payload.clientId = this.def.app.clientId
59
+
60
+ // this.def.reportConfig(`🛜 Send-request ${this.def.endpoints.file}`)
61
+
62
+ // const response = await sender.upload(upload)
63
+
64
+ // this.def.reportConfig(`🛜 Send-request-report-start`)
65
+ // this.def.reportConfig(`🛜 ${response?.callback?.report.join('\n🛜 ')}`)
66
+ // this.def.reportConfig(`🛜 Send-request-report-end`)
67
+
68
+ // if (response?.callback?.isOk) this.def.writeConfig(target, `🔥🔥🔥 Sync.runConfig:success`)
69
+ // else this.def.writeConfig(target, `❌❌❌ Sync.runConfig:failed`)
70
+
71
+ // } catch (e) {
72
+ // this.def.writeConfig(target, `❌❌❌ Sync.runConfig:error`)
73
+ // F3.catch.throw(e)
74
+ // }
75
+
76
+ // }
77
+
78
+ // runAssets = async (target) => {
79
+
80
+ // this.def.spinner.start()
81
+ // this.def.reportAssets(`🔥🔥🔥 Sync.runAssets:start`)
82
+ // if (target) this.def.app.target = target
83
+
84
+ // try {
85
+
86
+ // const headers = {}
87
+ // headers.Authorization = await auth.getToken()
88
+ // this.def.reportAssets(`✅ plan-token-obtained`)
89
+
90
+ // const dataPlan = {}
91
+ // dataPlan.clientId = this.def.app.clientId
92
+ // dataPlan.target = this.def.app.target
93
+ // dataPlan.manifest = await this.tools.getManifest()
94
+ // this.def.reportAssets(`✅ plan-manifest-created`)
95
+
96
+ // this.def.reportAssets(`🛜 Send-request-plan ${this.def.endpoints.plan}`)
97
+
98
+ // const response = await axios.post(this.def.endpoints.plan, dataPlan, { headers })
99
+
100
+ // this.def.reportAssets(`🛜 Send-request-plan-report-start`)
101
+ // this.def.reportAssets(`🛜 ${response?.data?.report.join('\n🛜 ')}`)
102
+ // this.def.reportAssets(`🛜 Send-request-plan-report-end`)
103
+
104
+ // const plan = response?.data?.plan
105
+ // if (!F3.obj.isGood(plan)) F3.throw(`missing-plan`)
106
+
107
+ // await fsa.ensureFileDir(this.def.files.export.manifest)
108
+ // await fsa.writeJSON(this.def.files.export.manifest, dataPlan.manifest)
109
+ // this.def.reportAssets(`✅ written-manifest-sent \n💾 ${this.def.files.export.manifest}`)
110
+
111
+ // await fsa.ensureFileDir(this.def.files.export.plan)
112
+ // await fsa.writeJSON(this.def.files.export.plan, plan)
113
+ // this.def.reportAssets(`✅ written-manifest-plan-response \n💾 ${this.def.files.export.plan}`)
114
+
115
+ // if (!F3.obj.isGood(plan.upload)) {
116
+ // this.def.writeAssets(target, '🔥🔥🔥 Sync.runAssets:success-already-in-sync')
117
+ // return true
118
+ // }
119
+
120
+ // const uploadPaths = Object.keys(plan.upload)
121
+ // const zip = new JSZip()
122
+
123
+ // for (const relPath of uploadPaths) {
124
+ // const fullPath = `${this.def.folders.volume}/${relPath}`
125
+ // const buffer = await fsa.readFile(fullPath)
126
+ // if (!buffer) F3.throw(`zip-missing-file:${relPath}`)
127
+ // zip.file(relPath, buffer)
128
+ // this.def.reportAssets(`✅ file-added-to-zip ${relPath}`)
129
+ // }
130
+
131
+ // await fsa.safeRemove(this.def.files.export.volumeZip)
132
+ // this.def.reportAssets(`✅ removed-old-zip-folder`)
133
+
134
+ // await fsa.ensureFileDir(this.def.files.export.volumeZip)
135
+ // this.def.reportAssets(`✅ created-new-zip-folder`)
136
+
137
+ // const bufferZip = await zip.generateAsync({ type: 'nodebuffer', compression: 'DEFLATE' })
138
+ // await fsa.writeFile(this.def.files.export.volumeZip, bufferZip)
139
+ // this.def.reportAssets(`✅ written-zip \n💾 ${this.def.files.export.volumeZip}`)
140
+
141
+ // const initSender = {}
142
+ // initSender.crypto = crypto
143
+ // initSender.fileEndpoint = this.def.endpoints.file
144
+ // initSender.chunkEndpoint = this.def.endpoints.chunk
145
+ // initSender.statusEndpoint = this.def.endpoints.status
146
+ // initSender.finalizeEndpoint = this.def.endpoints.finalize
147
+ // const sender = new Sender(initSender)
148
+
149
+ // const argsUpload = {}
150
+ // argsUpload.bytes = bufferZip
151
+ // argsUpload.target = this.def.app.target
152
+ // argsUpload.token = await auth.getToken()
153
+ // argsUpload.payload = {}
154
+ // argsUpload.payload.callback = 'assets'
155
+ // argsUpload.payload.importId = plan.importId
156
+ // argsUpload.payload.clientId = this.def.app.clientId
157
+
158
+ // this.def.reportAssets(`🛜 Send-assets-zip ${this.def.endpoints.plan}`)
159
+
160
+ // const senderRes = await sender.upload(argsUpload)
161
+
162
+ // this.def.reportAssets(`🛜 Send-assets-zip-report-start`)
163
+ // this.def.reportAssets(`🛜 ${senderRes?.callback?.report.join('\n🛜 ')}`)
164
+ // this.def.reportAssets(`🛜 Send-assets-zip-report-end`)
165
+
166
+ // if (senderRes?.callback?.isOk) this.def.writeAssets(target, `🔥🔥🔥 Sync.runAssets:success`)
167
+ // else this.def.writeAssets(target, `❌❌❌ Sync.runAssets:failed`)
168
+
169
+ // } catch (e) {
170
+ // this.def.writeAssets(target, `❌❌❌ Sync.runAssets:error`)
171
+ // F3.catch.throw(e)
172
+ // }
173
+
174
+ // }
175
+
176
+ // runWorkers = async (target) => {
177
+
178
+ // this.def.spinner.start()
179
+ // this.def.reportWorkers(`🔥🔥🔥 Sync.runWorkers:start`)
180
+ // if (target) this.def.app.target = target
181
+
182
+ // try {
183
+
184
+ // const payload = {}
185
+ // payload.clientId = this.def.app.clientId
186
+ // payload.target = this.def.app.target
187
+
188
+ // this.def.reportWorkers(`🛜 Send-workers ${this.def.endpoints.workers}`)
189
+
190
+ // const response = await axios.post(this.def.endpoints.workers, payload)
191
+
192
+ // if (response?.data?.isLocal) {
193
+
194
+ // await this.local.run(response.data)
195
+
196
+ // this.def.writeAssets(target, '🔥🔥🔥 Sync.runAssets:success-local')
197
+ // return true
198
+ // }
199
+
200
+ // this.def.reportWorkers(`🛜 Send-workers-report-start`)
201
+ // this.def.reportWorkers(`🛜 ${response?.data?.report.join('\n🛜 ')}`)
202
+ // this.def.reportWorkers(`🛜 Send-workers-report-end`)
203
+
204
+ // if (response?.data?.isOk) this.def.writeWorkers(target, `🔥🔥🔥 Sync.runWorkers:success`)
205
+ // else this.def.writeWorkers(target, `❌❌❌ Sync.runWorkers:failed`)
206
+
207
+ // } catch (e) {
208
+ // this.def.writeWorkers(target, `❌❌❌ Sync.runWorkers:error`)
209
+ // F3.catch.throw(e)
210
+ // }
211
+ // }
212
+ // }
213
+
214
+ import { app, fsa, axios, crypto, JSZip, Sender } from '#@/index.dep.js'
215
+ import { auth } from '#@/modules/sync.auth.js'
216
+ import { Local } from '#@/modules/sync.local.js'
217
+ import { Tools } from '#@/modules/sync.tools.js'
218
+
219
+ export class Sync {
220
+
221
+ constructor(init) {
222
+
223
+ this.def = init.def
224
+ this.tools = new Tools(init)
225
+ this.local = new Local(init)
226
+ }
227
+
228
+ runConfig = async (target) => {
229
+
230
+ this.def.spinner.start()
231
+ this.def.reportConfig(`🔥🔥🔥 Sync.runConfig:start`)
232
+
233
+ if (target) this.def.app.target = target
234
+
235
+ try {
236
+
237
+ const list = await this.tools.getList(this.def.folders.config)
238
+
239
+ this.def.reportConfig(`✅ file-list-read ${this.def.folders.config}`)
240
+
241
+ const zip = new JSZip()
242
+ zip.file('app.json', JSON.stringify(app, null, 2))
243
+
244
+ for (const relPath of list) {
245
+ const buffer = await fsa.readFile(`${this.def.folders.config}/${relPath}`)
246
+ zip.file(relPath, buffer)
247
+ this.def.reportConfig(`✅ file-added-to-zip ${relPath}`)
248
+ }
249
+
250
+ await fsa.safeRemove(this.def.files.export.configZip)
251
+ await fsa.ensureFileDir(this.def.files.export.configZip)
252
+ const bufferZip = await zip.generateAsync({ type: 'nodebuffer', compression: 'DEFLATE' })
253
+ await fsa.writeFile(this.def.files.export.configZip, bufferZip)
254
+
255
+ this.def.reportConfig(`✅ written-zip \n💾 ${this.def.files.export.configZip}`)
256
+
257
+ const payload = {}
258
+ payload.crypto = crypto
259
+ payload.fileEndpoint = this.def.endpoints.file
260
+ payload.chunkEndpoint = this.def.endpoints.chunk
261
+ payload.statusEndpoint = this.def.endpoints.status
262
+ payload.finalizeEndpoint = this.def.endpoints.finalize
263
+ const sender = new Sender(payload)
264
+
265
+ const upload = {}
266
+ upload.bytes = bufferZip
267
+ upload.target = this.def.app.target
268
+ upload.token = await auth.getToken()
269
+ upload.payload = {}
270
+ upload.payload.callback = 'configure'
271
+ upload.payload.clientId = this.def.app.clientId
272
+
273
+ this.def.reportConfig(`🛜 Send-request ${this.def.endpoints.file}`)
274
+
275
+ const response = await sender.upload(upload)
276
+
277
+ this.def.reportConfig(`🛜 Send-request-report-start`)
278
+ this.def.reportConfig(`🛜 ${response?.callback?.report.join('\n🛜 ')}`)
279
+ this.def.reportConfig(`🛜 Send-request-report-end`)
280
+
281
+ if (response?.callback?.isOk) this.def.writeConfig(target, `🔥🔥🔥 Sync.runConfig:success`)
282
+ else this.def.writeConfig(target, `❌❌❌ Sync.runConfig:failed`)
283
+
284
+ } catch (e) {
285
+ this.def.writeConfig(target, `❌❌❌ Sync.runConfig:error`)
286
+ F3.catch.throw(e)
287
+ }
288
+
289
+ }
290
+
291
+ runAssets = async (target) => {
292
+
293
+ this.def.spinner.start()
294
+ this.def.reportAssets(`🔥🔥🔥 Sync.runAssets:start`)
295
+ if (target) this.def.app.target = target
296
+
297
+ try {
298
+
299
+ const headers = {}
300
+ headers.Authorization = await auth.getToken()
301
+ this.def.reportAssets(`✅ plan-token-obtained`)
302
+
303
+ const dataPlan = {}
304
+ dataPlan.clientId = this.def.app.clientId
305
+ dataPlan.target = this.def.app.target
306
+ dataPlan.manifest = await this.tools.getManifest()
307
+ this.def.reportAssets(`✅ plan-manifest-created`)
308
+
309
+ this.def.reportAssets(`🛜 Send-request-plan ${this.def.endpoints.plan}`)
310
+
311
+ const response = await axios.post(this.def.endpoints.plan, dataPlan, { headers })
312
+
313
+ this.def.reportAssets(`🛜 Send-request-plan-report-start`)
314
+ this.def.reportAssets(`🛜 ${response?.data?.report.join('\n🛜 ')}`)
315
+ this.def.reportAssets(`🛜 Send-request-plan-report-end`)
316
+
317
+ const plan = response?.data?.plan
318
+ if (!F3.obj.isGood(plan)) F3.throw(`missing-plan`)
319
+
320
+ await fsa.ensureFileDir(this.def.files.export.manifest)
321
+ await fsa.writeJSON(this.def.files.export.manifest, dataPlan.manifest)
322
+ this.def.reportAssets(`✅ written-manifest-sent \n💾 ${this.def.files.export.manifest}`)
323
+
324
+ await fsa.ensureFileDir(this.def.files.export.plan)
325
+ await fsa.writeJSON(this.def.files.export.plan, plan)
326
+ this.def.reportAssets(`✅ written-manifest-plan-response \n💾 ${this.def.files.export.plan}`)
327
+
328
+ if (!F3.obj.isGood(plan.upload)) {
329
+ this.def.writeAssets(target, '🔥🔥🔥 Sync.runAssets:success-already-in-sync')
330
+ return true
331
+ }
332
+
333
+ const uploadPaths = Object.keys(plan.upload)
334
+ const zip = new JSZip()
335
+
336
+ for (const relPath of uploadPaths) {
337
+ const fullPath = `${this.def.folders.volume}/${relPath}`
338
+ const buffer = await fsa.readFile(fullPath)
339
+ if (!buffer) F3.throw(`zip-missing-file:${relPath}`)
340
+ zip.file(relPath, buffer)
341
+ this.def.reportAssets(`✅ file-added-to-zip ${relPath}`)
342
+ }
343
+
344
+ await fsa.safeRemove(this.def.files.export.volumeZip)
345
+ this.def.reportAssets(`✅ removed-old-zip-folder`)
346
+
347
+ await fsa.ensureFileDir(this.def.files.export.volumeZip)
348
+ this.def.reportAssets(`✅ created-new-zip-folder`)
349
+
350
+ const bufferZip = await zip.generateAsync({ type: 'nodebuffer', compression: 'DEFLATE' })
351
+ await fsa.writeFile(this.def.files.export.volumeZip, bufferZip)
352
+ this.def.reportAssets(`✅ written-zip \n💾 ${this.def.files.export.volumeZip}`)
353
+
354
+ const initSender = {}
355
+ initSender.crypto = crypto
356
+ initSender.fileEndpoint = this.def.endpoints.file
357
+ initSender.chunkEndpoint = this.def.endpoints.chunk
358
+ initSender.statusEndpoint = this.def.endpoints.status
359
+ initSender.finalizeEndpoint = this.def.endpoints.finalize
360
+ const sender = new Sender(initSender)
361
+
362
+ const argsUpload = {}
363
+ argsUpload.bytes = bufferZip
364
+ argsUpload.target = this.def.app.target
365
+ argsUpload.token = await auth.getToken()
366
+ argsUpload.payload = {}
367
+ argsUpload.payload.callback = 'assets'
368
+ argsUpload.payload.importId = plan.importId
369
+ argsUpload.payload.clientId = this.def.app.clientId
370
+
371
+ this.def.reportAssets(`🛜 Send-assets-zip ${this.def.endpoints.plan}`)
372
+
373
+ const senderRes = await sender.upload(argsUpload)
374
+
375
+ this.def.reportAssets(`🛜 Send-assets-zip-report-start`)
376
+ this.def.reportAssets(`🛜 ${senderRes?.callback?.report.join('\n🛜 ')}`)
377
+ this.def.reportAssets(`🛜 Send-assets-zip-report-end`)
378
+
379
+ if (senderRes?.callback?.isOk) this.def.writeAssets(target, `🔥🔥🔥 Sync.runAssets:success`)
380
+ else this.def.writeAssets(target, `❌❌❌ Sync.runAssets:failed`)
381
+
382
+ } catch (e) {
383
+ this.def.writeAssets(target, `❌❌❌ Sync.runAssets:error`)
384
+ F3.catch.throw(e)
385
+ }
386
+
387
+ }
388
+
389
+ runWorkers = async (target) => {
390
+
391
+ this.def.spinner.start()
392
+ this.def.reportWorkers(`🔥🔥🔥 Sync.runWorkers:start`)
393
+ if (target) this.def.app.target = target
394
+
395
+ try {
396
+
397
+ const payload = {}
398
+ payload.clientId = this.def.app.clientId
399
+ payload.target = this.def.app.target
400
+
401
+ this.def.reportWorkers(`🛜 Send-workers ${this.def.endpoints.workers}`)
402
+
403
+ const response = await axios.post(this.def.endpoints.workers, payload)
404
+
405
+ this.def.reportWorkers(`🛜 Send-workers-report-start`)
406
+ this.def.reportWorkers(`🛜 ${response?.data?.report.join('\n🛜 ')}`)
407
+ this.def.reportWorkers(`🛜 Send-workers-report-end`)
408
+
409
+ if (response?.data?.isLocal) {
410
+
411
+ const local = {}
412
+ local.payload = response?.data?.local
413
+ local.target = this.def.app.target
414
+ local.app = app
415
+
416
+ await this.local.run(local)
417
+
418
+ this.def.writeWorkers(target, `🔥🔥🔥 Sync.runWorkers:success-local`)
419
+ return true
420
+ }
421
+
422
+ if (response?.data?.isOk) this.def.writeWorkers(target, `🔥🔥🔥 Sync.runWorkers:success`)
423
+ else this.def.writeWorkers(target, `❌❌❌ Sync.runWorkers:failed`)
424
+
425
+ } catch (e) {
426
+ this.def.writeWorkers(target, `❌❌❌ Sync.runWorkers:error`)
427
+ F3.catch.throw(e)
428
+ }
429
+ }
430
+ }
@@ -0,0 +1,117 @@
1
+ import { fsa, axios, crypto, Sender } from '#@/index.dep.js'
2
+ import { auth } from '#@/modules/sync.auth.js'
3
+
4
+ export class Local {
5
+
6
+ constructor(init) {
7
+ this.def = init.def
8
+ }
9
+
10
+ getManager = (app, target) => {
11
+
12
+ if (!F3.obj.isGood(app)) F3.throw('local-app-not-valid')
13
+ if (!F3.obj.isGood(app.manager)) F3.throw('local-manager-not-valid')
14
+ if (!F3.str.isGood(target)) F3.throw('local-target-not-valid')
15
+
16
+ const manager = app.manager[target]
17
+ if (!F3.str.isGood(manager)) F3.throw('local-manager-target-not-valid', { target })
18
+
19
+ const result = {}
20
+ result.file = `${manager}/sync/file`
21
+ result.chunk = `${manager}/sync/chunk`
22
+ result.status = `${manager}/sync/status`
23
+ result.finalize = `${manager}/sync/finalize`
24
+
25
+ return result
26
+ }
27
+
28
+ send = async ({ app, target, plan, manifest }) => {
29
+
30
+ try {
31
+
32
+ if (!F3.obj.isGood(plan)) F3.throw('local-plan-not-valid')
33
+ if (!F3.obj.isGood(manifest)) F3.throw('local-manifest-not-valid')
34
+
35
+ const endpoints = this.getManager(app, target)
36
+
37
+ const payload = {}
38
+ payload.crypto = crypto
39
+ payload.fileEndpoint = endpoints.file
40
+ payload.chunkEndpoint = endpoints.chunk
41
+ payload.statusEndpoint = endpoints.status
42
+ payload.finalizeEndpoint = endpoints.finalize
43
+ const sender = new Sender(payload)
44
+
45
+ const upload = {}
46
+ upload.bytes = await fsa.readFile(this.def.files.export.volumeZip)
47
+ upload.target = target
48
+ upload.token = await auth.getToken()
49
+ upload.payload = {}
50
+ upload.payload.plan = plan
51
+ upload.payload.manifest = manifest
52
+
53
+ this.def.reportWorkers(`🛜 Send-local-manager-zip ${payload.fileEndpoint}`)
54
+
55
+ const response = await sender.upload(upload)
56
+
57
+ this.def.reportWorkers(`🛜 Send-local-manager-zip-report-start`)
58
+ this.def.reportWorkers(`🛜 💾 ${response?.callback?.written.join('\n🛜 💾 ')}`)
59
+ this.def.reportWorkers(`🛜 🗑️ ${response?.callback?.deleted.join('\n🛜 🗑️ ')}`)
60
+ this.def.reportWorkers(`🛜 Send-local-manager-zip-report-end`)
61
+
62
+ if (!response?.callback?.isOk) F3.throw('local-manager-send-failed')
63
+
64
+ this.def.reportWorkers(`✅ local-manager-send-success`)
65
+
66
+ return true
67
+
68
+ } catch (e) { F3.catch.throw(e) }
69
+ }
70
+
71
+ run = async ({ payload, app, target }) => {
72
+
73
+ try {
74
+
75
+ if (!F3.obj.isGood(payload)) F3.throw('local-payload-not-valid')
76
+ if (!F3.obj.isGood(app)) F3.throw('local-app-not-valid')
77
+ if (!F3.str.isGood(target)) F3.throw('local-target-not-valid')
78
+
79
+ const { get, confirm, meta } = payload
80
+
81
+ if (!F3.str.isGood(get)) F3.throw('local-get-not-valid')
82
+ if (!F3.str.isGood(confirm)) F3.throw('local-confirm-not-valid')
83
+ if (!F3.str.isGood(meta)) F3.throw('local-meta-not-valid')
84
+
85
+ const responseGet = await axios.get(get, { responseType: 'arraybuffer' })
86
+
87
+ if (!responseGet?.data) F3.throw('local-download-not-valid')
88
+
89
+ const filePath = this.def.files.export.volumeZip
90
+
91
+ await fsa.writeFile(filePath, responseGet.data)
92
+
93
+ this.def.reportWorkers(`✅ local-zip-downloaded ${filePath}`)
94
+
95
+ const responseMeta = await axios.post(meta)
96
+
97
+ if (!F3.obj.isGood(responseMeta?.data)) F3.throw('local-meta-response-not-valid')
98
+ if (!F3.obj.isGood(responseMeta?.data?.plan)) F3.throw('local-meta-plan-not-valid')
99
+ if (!F3.obj.isGood(responseMeta?.data?.manifest)) F3.throw('local-meta-manifest-not-valid')
100
+
101
+ const { plan, manifest } = responseMeta.data
102
+
103
+ this.def.reportWorkers(`✅ local-meta-received`)
104
+
105
+ await this.send({ app, target, plan, manifest })
106
+
107
+ const responseConfirm = await axios.post(confirm)
108
+
109
+ if (!responseConfirm?.data?.isOk) F3.throw('local-confirm-not-valid')
110
+
111
+ this.def.reportWorkers(`✅ local-confirm-sent`)
112
+
113
+ return true
114
+
115
+ } catch (e) { F3.catch.throw(e) }
116
+ }
117
+ }
@@ -0,0 +1,102 @@
1
+ import { fsa, crypto } from '#@/index.dep.js'
2
+
3
+ export class Tools {
4
+
5
+ constructor(init) {
6
+
7
+ this.def = init.def
8
+
9
+ }
10
+
11
+ getManifestDate = () => {
12
+ const d = new Date()
13
+ const days = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']
14
+ const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
15
+ const timestamp = d.getTime()
16
+ return `${timestamp}-${days[d.getDay()]}.${String(d.getDate()).padStart(2, '0')}.${months[d.getMonth()]}.${d.getFullYear()}-${String(d.getHours()).padStart(2, '0')}.${String(d.getMinutes()).padStart(2, '0')}`
17
+ }
18
+
19
+ getManifest = async () => {
20
+
21
+ try {
22
+
23
+ const manifest = {}
24
+ manifest.schema = 'manifest.raw.sync.request'
25
+ manifest.date = this.getManifestDate()
26
+ manifest.version = 1
27
+ manifest.total = 0
28
+ manifest.files = {}
29
+ await this.addFiles(this.def.folders.volume, '', manifest)
30
+ await fsa.ensureFileDir(this.def.files.export.manifest)
31
+ await fsa.writeJSON(this.def.files.export.manifest, manifest)
32
+ return manifest
33
+
34
+ } catch (error) { F3.catch.throw(error, 'sync-client-getManifest-failed') }
35
+ }
36
+
37
+
38
+ addFiles = async (basePath, rel = '', manifest) => {
39
+
40
+ const dir = rel ? `${basePath}/${rel}` : basePath
41
+ const entries = await fsa.readDir(dir)
42
+
43
+ for (const entry of entries) {
44
+
45
+ if (fsa.isJunk(entry)) continue
46
+
47
+ const nextRel = rel ? `${rel}/${entry}` : entry
48
+ const fullPath = `${basePath}/${nextRel}`
49
+ const stat = await fsa.stat(fullPath)
50
+
51
+ if (stat.isDirectory()) {
52
+ await this.addFiles(basePath, nextRel, manifest)
53
+ continue
54
+ }
55
+
56
+ const buffer = await fsa.readFile(fullPath)
57
+ const hash = this.hash(buffer)
58
+ manifest.files[nextRel] = hash
59
+ manifest.total += 1
60
+ }
61
+ }
62
+
63
+ hash = (buffer) => {
64
+ const buf = buffer instanceof ArrayBuffer ? Buffer.from(buffer) : buffer
65
+ return crypto.createHash('sha256').update(buf).digest('hex')
66
+ }
67
+
68
+ getList = async basePath => {
69
+ const files = []
70
+ const scan = async dir => {
71
+ const entries = await fsa.readDir(dir)
72
+ for (const entry of entries) {
73
+ if (fsa.isJunk(entry)) continue
74
+ const fullPath = `${dir}/${entry}`
75
+ const stat = await fsa.stat(fullPath)
76
+ if (stat.isDirectory()) await scan(fullPath)
77
+ else files.push(fullPath.replace(`${basePath}/`, ''))
78
+ }
79
+ }
80
+ await scan(basePath)
81
+ return files
82
+ }
83
+
84
+ pathToObj = (obj, path, val) => {
85
+
86
+ if (!path) return
87
+
88
+ const keys = path.split('/')
89
+ const parents = keys.slice(0, -1)
90
+ const last = keys[keys.length - 1]
91
+
92
+ let ref = obj
93
+
94
+ for (const key of parents) {
95
+ if (!F3.isObj(ref[key])) ref[key] = {}
96
+ ref = ref[key]
97
+ }
98
+
99
+ ref[last] = val
100
+ }
101
+
102
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@root.fullstackunicorn.dev/assets",
3
+ "author": "lucanigido (https://fullstackunicorn.dev/author/lucanigido)",
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "license": "UNLICENSED",
7
+ "private": true,
8
+ "imports": {
9
+ "#@": "./",
10
+ "#@/*": "./*"
11
+ },
12
+ "scripts": {
13
+ "initialize": "chmod +x ./config.cmd.sh && bash ./config.cmd.sh add",
14
+ "cmd": "chmod +x ./config.cmd.sh && env-cmd -f .env bash ./config.cmd.sh",
15
+ "test": "exit 1"
16
+ },
17
+ "dependencies": {
18
+ "@fullstackunicorn/filesystem": "^1.0.16",
19
+ "@fullstackunicorn/initialize": "^1.0.15",
20
+ "@fullstackunicorn/upload": "^1.0.11",
21
+ "@fullstackunicorn/websites": "^1.0.10",
22
+ "axios": "^1.15.0",
23
+ "blurhash": "^2.0.5",
24
+ "jszip": "^3.10.1",
25
+ "sharp": "^0.34.5"
26
+ },
27
+ "devDependencies": {
28
+ "@fullstackunicorn/cli": "^1.0.8",
29
+ "env-cmd": "^11.0.0",
30
+ "nodemon": "^3.1.14"
31
+ }
32
+ }