@silexlabs/silex 3.0.1-alpha.0 → 3.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 (323) hide show
  1. package/.env.default +20 -0
  2. package/.silex.js +67 -8
  3. package/LICENSE +661 -203
  4. package/README.md +37 -35
  5. package/dist/client/client/api.d.ts +90 -0
  6. package/dist/client/client/assetUrl.d.ts +54 -0
  7. package/dist/client/client/config.d.ts +102 -0
  8. package/dist/client/client/events.d.ts +23 -0
  9. package/dist/client/client/expose.d.ts +8 -0
  10. package/dist/client/client/grapesjs/LoginDialog.d.ts +15 -0
  11. package/dist/client/client/grapesjs/PublicationManager.d.ts +73 -0
  12. package/dist/client/client/grapesjs/PublicationUi.d.ts +59 -0
  13. package/dist/client/client/grapesjs/blocks.d.ts +1 -0
  14. package/dist/client/client/grapesjs/breadcrumbs.d.ts +1 -0
  15. package/dist/client/client/grapesjs/css-props.d.ts +6 -0
  16. package/dist/client/client/grapesjs/footer.d.ts +2 -0
  17. package/dist/client/client/grapesjs/img.d.ts +6 -0
  18. package/dist/client/client/grapesjs/index.d.ts +9 -0
  19. package/dist/client/client/grapesjs/internal-links.d.ts +1 -0
  20. package/dist/client/client/grapesjs/keymaps.d.ts +123 -0
  21. package/dist/client/client/grapesjs/new-page-dialog.d.ts +2 -0
  22. package/dist/client/client/grapesjs/openImport.d.ts +9 -0
  23. package/dist/client/client/grapesjs/page-panel.d.ts +9 -0
  24. package/dist/client/client/grapesjs/project-bar.d.ts +21 -0
  25. package/dist/client/client/grapesjs/resize-panel.d.ts +1 -0
  26. package/dist/client/client/grapesjs/rich-text.d.ts +4 -0
  27. package/dist/client/client/grapesjs/semantic.d.ts +1 -0
  28. package/dist/client/client/grapesjs/settings-sections.d.ts +16 -0
  29. package/dist/client/client/grapesjs/settings.d.ts +4 -0
  30. package/dist/client/client/grapesjs/storage.d.ts +2 -0
  31. package/dist/client/client/grapesjs/symbolDialogs.d.ts +3 -0
  32. package/dist/client/client/grapesjs/view-buttons.d.ts +1 -0
  33. package/dist/client/client/index.d.ts +10 -0
  34. package/dist/client/client/publication-transformers.d.ts +42 -0
  35. package/dist/client/client/publish-custom-code-block.d.ts +4 -0
  36. package/dist/client/client/publish-fonts.d.ts +4 -0
  37. package/dist/client/client/utils.d.ts +22 -0
  38. package/dist/client/constants.d.ts +32 -0
  39. package/dist/client/css/admin.css +1114 -328
  40. package/dist/client/css/admin.css.map +1 -0
  41. package/dist/client/grapesjs-filter-styles/dist/index.d.ts +4 -0
  42. package/dist/client/grapesjs-fonts/dist/index.d.ts +4 -0
  43. package/dist/client/grapesjs-fonts/src/commands.d.ts +3 -0
  44. package/dist/client/grapesjs-fonts/src/fonts.d.ts +4 -0
  45. package/dist/client/grapesjs-storage-rate-limit/dist/index.d.ts +4 -0
  46. package/dist/client/grapesjs-ui-suggest-classes/dist/index.d.ts +4 -0
  47. package/dist/client/index.html +3 -2
  48. package/dist/client/js/main.js +356 -131
  49. package/dist/client/js/main.js.LICENSE.txt +15 -1
  50. package/dist/client/page.d.ts +2 -0
  51. package/dist/client/silex-lib/src/ts/client/api.d.ts +90 -0
  52. package/dist/client/silex-lib/src/ts/client/assetUrl.d.ts +54 -0
  53. package/dist/client/silex-lib/src/ts/client/config.d.ts +102 -0
  54. package/dist/client/silex-lib/src/ts/client/events.d.ts +23 -0
  55. package/dist/client/silex-lib/src/ts/client/expose.d.ts +8 -0
  56. package/dist/client/silex-lib/src/ts/client/grapesjs/LoginDialog.d.ts +15 -0
  57. package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationManager.d.ts +73 -0
  58. package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationUi.d.ts +59 -0
  59. package/dist/client/silex-lib/src/ts/client/grapesjs/blocks.d.ts +1 -0
  60. package/dist/client/silex-lib/src/ts/client/grapesjs/breadcrumbs.d.ts +1 -0
  61. package/dist/client/silex-lib/src/ts/client/grapesjs/css-props.d.ts +6 -0
  62. package/dist/client/silex-lib/src/ts/client/grapesjs/footer.d.ts +2 -0
  63. package/dist/client/silex-lib/src/ts/client/grapesjs/img.d.ts +6 -0
  64. package/dist/client/silex-lib/src/ts/client/grapesjs/index.d.ts +9 -0
  65. package/dist/client/silex-lib/src/ts/client/grapesjs/internal-links.d.ts +1 -0
  66. package/dist/client/silex-lib/src/ts/client/grapesjs/keymaps.d.ts +123 -0
  67. package/dist/client/silex-lib/src/ts/client/grapesjs/new-page-dialog.d.ts +2 -0
  68. package/dist/client/silex-lib/src/ts/client/grapesjs/openImport.d.ts +9 -0
  69. package/dist/client/silex-lib/src/ts/client/grapesjs/page-panel.d.ts +9 -0
  70. package/dist/client/silex-lib/src/ts/client/grapesjs/project-bar.d.ts +21 -0
  71. package/dist/client/silex-lib/src/ts/client/grapesjs/resize-panel.d.ts +1 -0
  72. package/dist/client/silex-lib/src/ts/client/grapesjs/rich-text.d.ts +4 -0
  73. package/dist/client/silex-lib/src/ts/client/grapesjs/semantic.d.ts +1 -0
  74. package/dist/client/silex-lib/src/ts/client/grapesjs/settings-sections.d.ts +16 -0
  75. package/dist/client/silex-lib/src/ts/client/grapesjs/settings.d.ts +4 -0
  76. package/dist/client/silex-lib/src/ts/client/grapesjs/storage.d.ts +2 -0
  77. package/dist/client/silex-lib/src/ts/client/grapesjs/symbolDialogs.d.ts +3 -0
  78. package/dist/client/silex-lib/src/ts/client/grapesjs/view-buttons.d.ts +1 -0
  79. package/dist/client/silex-lib/src/ts/client/index.d.ts +10 -0
  80. package/dist/client/silex-lib/src/ts/client/publication-transformers.d.ts +42 -0
  81. package/dist/client/silex-lib/src/ts/client/publish-custom-code-block.d.ts +4 -0
  82. package/dist/client/silex-lib/src/ts/client/publish-fonts.d.ts +4 -0
  83. package/dist/client/silex-lib/src/ts/client/utils.d.ts +22 -0
  84. package/dist/client/silex-lib/src/ts/constants.d.ts +32 -0
  85. package/dist/client/silex-lib/src/ts/page.d.ts +2 -0
  86. package/dist/client/silex-lib/src/ts/types.d.ts +339 -0
  87. package/dist/client/types.d.ts +339 -0
  88. package/dist/plugins/client/client/events.d.ts +23 -0
  89. package/dist/plugins/client/client/events.js +43 -0
  90. package/dist/plugins/client/client/events.js.map +1 -0
  91. package/dist/plugins/client/plugins/client/template.d.ts +2 -0
  92. package/dist/plugins/client/plugins/client/template.js +234 -0
  93. package/dist/plugins/client/plugins/client/template.js.map +1 -0
  94. package/dist/plugins/client/plugins/client/website-info.d.ts +1 -0
  95. package/dist/plugins/client/plugins/client/website-info.js +72 -0
  96. package/dist/plugins/client/plugins/client/website-info.js.map +1 -0
  97. package/dist/plugins/client/types.d.ts +339 -0
  98. package/dist/plugins/client/types.js +80 -0
  99. package/dist/plugins/client/types.js.map +1 -0
  100. package/dist/plugins/server/constants.d.ts +32 -0
  101. package/dist/plugins/server/constants.js +76 -0
  102. package/dist/plugins/server/constants.js.map +1 -0
  103. package/dist/plugins/server/plugins/server/Cache.d.ts +2 -0
  104. package/dist/plugins/server/plugins/server/Cache.js +36 -0
  105. package/dist/plugins/server/plugins/server/Cache.js.map +1 -0
  106. package/dist/plugins/server/plugins/server/DownloadConnector.d.ts +29 -0
  107. package/dist/plugins/server/plugins/server/DownloadConnector.js +127 -0
  108. package/dist/plugins/server/plugins/server/DownloadConnector.js.map +1 -0
  109. package/dist/plugins/server/plugins/server/FtpConnector.d.ts +86 -0
  110. package/dist/plugins/server/plugins/server/FtpConnector.js +536 -0
  111. package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -0
  112. package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +135 -0
  113. package/dist/plugins/server/plugins/server/GitlabConnector.js +649 -0
  114. package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -0
  115. package/dist/plugins/server/plugins/server/GitlabHostingConnector.d.ts +16 -0
  116. package/dist/plugins/server/plugins/server/GitlabHostingConnector.js +209 -0
  117. package/dist/plugins/server/plugins/server/GitlabHostingConnector.js.map +1 -0
  118. package/dist/plugins/server/plugins/server/PublicationOptimizer.d.ts +0 -0
  119. package/dist/plugins/server/plugins/server/PublicationOptimizer.js +14 -0
  120. package/dist/plugins/server/plugins/server/PublicationOptimizer.js.map +1 -0
  121. package/dist/plugins/server/plugins/server/SslPlugin.d.ts +1 -0
  122. package/dist/plugins/server/plugins/server/SslPlugin.js +86 -0
  123. package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -0
  124. package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +8 -0
  125. package/dist/plugins/server/plugins/server/StaticPlugin.js +45 -0
  126. package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -0
  127. package/dist/plugins/server/server/config.d.ts +59 -0
  128. package/dist/plugins/server/server/config.js +181 -0
  129. package/dist/plugins/server/server/config.js.map +1 -0
  130. package/dist/plugins/server/server/connectors/FsHosting.d.ts +14 -0
  131. package/dist/plugins/server/server/connectors/FsHosting.js +66 -0
  132. package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -0
  133. package/dist/plugins/server/server/connectors/FsStorage.d.ts +44 -0
  134. package/dist/plugins/server/server/connectors/FsStorage.js +261 -0
  135. package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -0
  136. package/dist/plugins/server/server/connectors/connectors.d.ts +86 -0
  137. package/dist/plugins/server/server/connectors/connectors.js +126 -0
  138. package/dist/plugins/server/server/connectors/connectors.js.map +1 -0
  139. package/dist/plugins/server/server/events.d.ts +26 -0
  140. package/dist/plugins/server/server/events.js +31 -0
  141. package/dist/plugins/server/server/events.js.map +1 -0
  142. package/dist/plugins/server/server/jobs.d.ts +12 -0
  143. package/dist/plugins/server/server/jobs.js +79 -0
  144. package/dist/plugins/server/server/jobs.js.map +1 -0
  145. package/dist/plugins/server/server/utils/validation.d.ts +7 -0
  146. package/dist/plugins/server/server/utils/validation.js +37 -0
  147. package/dist/plugins/server/server/utils/validation.js.map +1 -0
  148. package/dist/plugins/server/types.d.ts +339 -0
  149. package/dist/plugins/server/types.js +84 -0
  150. package/dist/plugins/server/types.js.map +1 -0
  151. package/dist/server/constants.js +55 -0
  152. package/dist/server/plugins/server/Cache.js +19 -0
  153. package/dist/server/server/api/api.js +20 -0
  154. package/dist/server/server/api/connectorApi.js +334 -0
  155. package/dist/server/server/api/publicationApi.js +106 -0
  156. package/dist/server/server/api/websiteApi.js +315 -0
  157. package/dist/server/server/cli.js +71 -0
  158. package/dist/server/server/config.js +120 -0
  159. package/dist/server/server/connectors/FsHosting.js +47 -0
  160. package/dist/server/server/connectors/FsStorage.js +228 -0
  161. package/dist/server/server/connectors/connectors.js +88 -0
  162. package/dist/server/server/events.js +14 -0
  163. package/dist/server/server/expose.js +27 -0
  164. package/dist/server/server/express.js +46 -0
  165. package/dist/server/server/index.js +94 -0
  166. package/dist/server/server/jobs.js +50 -0
  167. package/dist/server/server/utils/validation.js +14 -0
  168. package/dist/server/types.js +40 -0
  169. package/package.json +99 -49
  170. package/public/assets/download.png +0 -0
  171. package/public/assets/favicon.ico +0 -0
  172. package/public/assets/favicon.png +0 -0
  173. package/public/assets/ftp.png +0 -0
  174. package/public/assets/gitlab.png +0 -0
  175. package/public/assets/gitlab2.png +0 -0
  176. package/public/assets/laptop.png +0 -0
  177. package/public/assets/logo-silex-small.png +0 -0
  178. package/public/silex.js +22 -23
  179. package/src/css/_variables.scss +24 -20
  180. package/src/css/dialog.scss +35 -2
  181. package/src/css/fonts.scss +31 -0
  182. package/src/css/footer.scss +12 -0
  183. package/src/css/grapesjs-light.scss +180 -0
  184. package/src/css/grapesjs-plugins.scss +227 -0
  185. package/src/css/grapesjs.scss +159 -1
  186. package/src/css/index.scss +12 -1
  187. package/src/css/light.scss +7 -0
  188. package/src/css/loader.scss +2 -0
  189. package/src/css/project-bar.scss +32 -16
  190. package/src/css/silex.scss +79 -5
  191. package/src/css/website-info.scss +14 -0
  192. package/src/html/index.pug +3 -3
  193. package/src/html/templates/includes.pug +0 -1
  194. package/src/ts/client/api.ts +156 -0
  195. package/src/ts/client/assetUrl.test.ts +164 -0
  196. package/src/ts/client/assetUrl.ts +254 -0
  197. package/src/ts/client/config.ts +175 -13
  198. package/src/ts/client/events.ts +43 -0
  199. package/src/ts/client/expose.ts +27 -1
  200. package/src/ts/client/grapesjs/LoginDialog.ts +204 -0
  201. package/src/ts/client/grapesjs/PublicationManager.ts +433 -0
  202. package/src/ts/client/grapesjs/PublicationUi.ts +366 -0
  203. package/src/ts/client/grapesjs/blocks.ts +17 -0
  204. package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
  205. package/src/ts/client/grapesjs/css-props.ts +910 -0
  206. package/src/ts/client/grapesjs/eleventy.ts +30 -7
  207. package/src/ts/client/grapesjs/footer.ts +42 -0
  208. package/src/ts/client/grapesjs/img.ts +147 -0
  209. package/src/ts/client/grapesjs/index.ts +311 -122
  210. package/src/ts/client/grapesjs/internal-links.test.ts +19 -1
  211. package/src/ts/client/grapesjs/internal-links.ts +31 -7
  212. package/src/ts/client/grapesjs/keymaps.ts +207 -0
  213. package/src/ts/client/grapesjs/new-page-dialog.ts +19 -3
  214. package/src/ts/client/grapesjs/openImport.ts +22 -0
  215. package/src/ts/client/grapesjs/page-panel.ts +109 -7
  216. package/src/ts/client/grapesjs/project-bar.ts +133 -72
  217. package/src/ts/client/grapesjs/resize-panel.ts +20 -0
  218. package/src/ts/client/grapesjs/rich-text.ts +38 -13
  219. package/src/ts/client/grapesjs/semantic.ts +20 -3
  220. package/src/ts/client/grapesjs/settings-sections.ts +117 -0
  221. package/src/ts/client/grapesjs/settings.ts +191 -96
  222. package/src/ts/client/grapesjs/storage.ts +187 -0
  223. package/src/ts/client/grapesjs/symbolDialogs.ts +21 -5
  224. package/src/ts/client/grapesjs/view-buttons.ts +42 -0
  225. package/src/ts/client/index.ts +80 -21
  226. package/src/ts/client/publication-transformers.test.ts +207 -0
  227. package/src/ts/client/publication-transformers.ts +280 -0
  228. package/src/ts/client/publish-custom-code-block.ts +31 -0
  229. package/src/ts/client/publish-fonts.ts +36 -0
  230. package/src/ts/client/utils.ts +70 -1
  231. package/src/ts/constants.ts +78 -0
  232. package/src/ts/externs.ts +17 -0
  233. package/src/ts/page.ts +20 -3
  234. package/src/ts/plugins/client/template.ts +246 -0
  235. package/src/ts/plugins/client/website-info.ts +84 -0
  236. package/src/ts/plugins/server/Cache.ts +32 -0
  237. package/src/ts/plugins/server/DownloadConnector.ts +146 -0
  238. package/src/ts/plugins/server/FtpConnector.test.ts +82 -0
  239. package/src/ts/plugins/server/FtpConnector.ts +621 -0
  240. package/src/ts/plugins/server/GitlabConnector.ts +749 -0
  241. package/src/ts/plugins/server/GitlabHostingConnector.ts +215 -0
  242. package/src/ts/plugins/server/PublicationOptimizer.ts +14 -0
  243. package/src/ts/plugins/server/SslPlugin.ts +84 -0
  244. package/src/ts/plugins/server/StaticPlugin.ts +45 -0
  245. package/src/ts/server/api/api.ts +19 -0
  246. package/src/ts/server/api/connectorApi.ts +464 -0
  247. package/src/ts/server/api/publicationApi.ts +159 -0
  248. package/src/ts/server/api/websiteApi.ts +462 -0
  249. package/src/ts/server/cli.ts +48 -14
  250. package/src/ts/server/config.ts +158 -60
  251. package/src/ts/server/connectors/FsHosting.ts +66 -0
  252. package/src/ts/server/connectors/FsStorage.test.ts +51 -0
  253. package/src/ts/server/connectors/FsStorage.ts +290 -0
  254. package/src/ts/server/connectors/connectors.ts +203 -0
  255. package/src/ts/server/events.ts +37 -0
  256. package/src/ts/server/expose.ts +19 -0
  257. package/src/ts/server/express.ts +57 -5
  258. package/src/ts/server/index.ts +79 -16
  259. package/src/ts/server/jobs.test.ts +75 -0
  260. package/src/ts/server/jobs.ts +89 -0
  261. package/src/ts/server/utils/BackwardCompat.ts +546 -528
  262. package/src/ts/server/utils/validation.ts +34 -0
  263. package/src/ts/types.ts +295 -85
  264. package/.dockerignore +0 -5
  265. package/.editorconfig +0 -14
  266. package/.eslintrc.json +0 -43
  267. package/.github/FUNDING.yml +0 -13
  268. package/.github/workflows/docker-hub-publish.yml +0 -36
  269. package/.github/workflows/npm-publish.yml +0 -19
  270. package/.github/workflows/test.yml +0 -26
  271. package/.nvmrc +0 -1
  272. package/.silex/default/.silex.data.json +0 -1
  273. package/CODE_OF_CONDUCT.md +0 -128
  274. package/CONTRIBUTING.md +0 -131
  275. package/Dockerfile +0 -15
  276. package/directus.silex.js +0 -7
  277. package/dist/constants.js +0 -4
  278. package/dist/events.js +0 -5
  279. package/dist/page.js +0 -15
  280. package/dist/server/cli.js +0 -43
  281. package/dist/server/config.js +0 -70
  282. package/dist/server/express.js +0 -18
  283. package/dist/server/index.js +0 -58
  284. package/dist/types.js +0 -34
  285. package/jest.config.js +0 -10
  286. package/logos/logo_by_ceubri/silex-icon-2018@200px.png +0 -0
  287. package/logos/logo_by_ceubri/silex-icon-2018@4x.png +0 -0
  288. package/logos/logo_by_ceubri/silex-logo-2018-white-transp.pdf +0 -0
  289. package/logos/logo_by_ceubri/silex-logo-2018-white.jpg +0 -0
  290. package/logos/logo_by_ceubri/silex-logo-2018-white.pdf +0 -0
  291. package/logos/logo_by_ceubri/silex-logo-2018-white.png +0 -0
  292. package/logos/logo_by_ceubri/silex-logo-2018-white@0.5x.png +0 -0
  293. package/logos/logo_by_ceubri/silex-logo-2018-white@0.75x.png +0 -0
  294. package/logos/logo_by_ceubri/silex-logo-2018-white@4x.jpg +0 -0
  295. package/logos/logo_by_ceubri/silex-logo-2018-white@4x.png +0 -0
  296. package/logos/logo_by_ceubri/silex-logo-2018.ai +5 -2521
  297. package/logos/logo_by_ceubri/silex-logo-2018.jpg +0 -0
  298. package/logos/logo_by_ceubri/silex-logo-2018.pdf +0 -0
  299. package/logos/logo_by_ceubri/silex-logo-2018.png +0 -0
  300. package/logos/logo_by_ceubri/silex-logo-2018@0.5x.png +0 -0
  301. package/logos/logo_by_ceubri/silex-logo-2018@0.75x.png +0 -0
  302. package/logos/logo_by_ceubri/silex-logo-2018@4x.jpg +0 -0
  303. package/logos/logo_by_ceubri/silex-logo-2018@4x.png +0 -0
  304. package/logos/silexlabs.png +0 -0
  305. package/src/example-client-config.js +0 -47
  306. package/src/plugins/AuthPlugin.js +0 -21
  307. package/src/plugins/Cache.js +0 -11
  308. package/src/plugins/DefaultBackend.js +0 -149
  309. package/src/plugins/ExpressPlugin.js +0 -39
  310. package/src/plugins/HooksPlugin.js +0 -58
  311. package/src/plugins/PublishPlugin.js +0 -69
  312. package/src/plugins/SslPlugin.js +0 -66
  313. package/src/plugins/StaticPlugin.js +0 -48
  314. package/src/plugins/WebsitePlugin.js +0 -207
  315. package/src/ts/client/grapesjs/publish.ts +0 -386
  316. package/src/ts/client/grapesjs/template.ts +0 -166
  317. package/src/ts/events.ts +0 -2
  318. package/tsconfig-server-debug.json +0 -19
  319. package/tsconfig-server-release.json +0 -19
  320. package/tsconfig.jest.json +0 -9
  321. package/tsconfig.json +0 -26
  322. package/webpack.config.js +0 -28
  323. package/webpack.debug.config.js +0 -8
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Silex website builder, free/libre no-code tool for makers.
3
+ * Copyright (c) 2023 lexoyo and Silex Labs foundation
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU Affero General Public License as published by
7
+ * the Free Software Foundation, either version 3 of the License, or any later version.
8
+ *
9
+ * This program is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License
15
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ /**
19
+ * Throw an error if a parameter is missing
20
+ * @param value the value to check
21
+ * @param name the name of the parameter
22
+ * @throws Error if the parameter is missing
23
+ */
24
+ export function requiredParam<T>(value: T | undefined, name: string, defaultValue?: T): NonNullable<T> {
25
+ if (value === undefined) {
26
+ if (defaultValue !== undefined) {
27
+ return defaultValue as NonNullable<T>
28
+ }
29
+ const error = new Error(`Missing required parameter ${name}`)
30
+ console.error(`Missing required parameter ${name}`, error)
31
+ throw error
32
+ }
33
+ return value as NonNullable<T>
34
+ }
package/src/ts/types.ts CHANGED
@@ -1,123 +1,179 @@
1
+ /*
2
+ * Silex website builder, free/libre no-code tool for makers.
3
+ * Copyright (c) 2023 lexoyo and Silex Labs foundation
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU Affero General Public License as published by
7
+ * the Free Software Foundation, either version 3 of the License, or any later version.
8
+ *
9
+ * This program is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License
15
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
+ */
17
+
1
18
  /**
2
19
  * @fileoverview define types for Silex client and server
3
20
  */
4
21
 
5
- // Note: paths begin and end **without** slash
6
- export const defaultPublicationSettings: PublicationSettings = {
7
- path: 'publication',
8
- url: '',
9
- autoHomePage: true,
10
- assets: { path: 'assets', url: '/assets' },
11
- html: { path: '' },
12
- css: { path: 'css', url: '/css' },
13
- }
14
-
15
- export const defaultSite: WebsiteData = {
16
- pages: [{name: 'Main', id: 'main', frames: [{component: {type: 'text', stylable: []}, components: []}]}],
17
- assets: [],
18
- styles: [],
19
- name: 'New website',
20
- settings: {
21
- description: '',
22
- title: '',
23
- head: '',
24
- lang: '',
25
- favicon: '',
26
- 'og:title': '',
27
- 'og:description': '',
28
- 'og:image': '',
29
- },
30
- fonts: [],
31
- symbols: [],
32
- publication: defaultPublicationSettings,
22
+ // Publication API
23
+ export interface PublicationSettings {
24
+ connector?: ConnectorData, // Set by the postMessage from the login callback page
25
+ options?: ConnectorOptions, // Options for the publication connector saved with the site
33
26
  }
34
27
 
35
- export interface WebsiteSettings {
36
- description: string,
37
- title: string,
38
- lang: string,
39
- head: string,
40
- favicon: string,
41
- 'og:title': string,
42
- 'og:description': string,
43
- 'og:image': string,
28
+ export interface WebsiteFile {
29
+ html: string,
30
+ css: string,
31
+ htmlPath: string,
32
+ cssPath: string,
33
+ }
34
+
35
+ export class ApiError extends Error {
36
+ constructor(message: string, public readonly httpStatusCode: number) {
37
+ super(message)
38
+ console.info('API error', httpStatusCode, message)
39
+ }
40
+ }
41
+
42
+ // **
43
+ // HTTP API types
44
+ export type ApiResponseError = { message: string }
45
+ export type ApiPublicationPublishBody = WebsiteData // this contains the connectorId
46
+ export type ApiPublicationPublishQuery = { websiteId: WebsiteId, hostingId: ConnectorId, storageId: ConnectorId, options: ConnectorOptions}
47
+ export type ApiPublicationPublishResponse = { url: string, job: PublicationJobData }
48
+ export type ApiPublicationStatusQuery = { jobId: JobId }
49
+ export type ApiPublicationStatusResponse = PublicationJobData
50
+ export type ApiWebsiteReadQuery = { websiteId: WebsiteId, connectorId?: ConnectorId }
51
+ export type ApiWebsiteReadResponse = WebsiteData
52
+ export type ApiWebsiteListQuery = { connectorId?: ConnectorId }
53
+ export type ApiWebsiteListResponse = WebsiteMeta[]
54
+ export type ApiWebsiteWriteQuery = { websiteId: WebsiteId, connectorId?: ConnectorId }
55
+ export type ApiWebsiteWriteBody = WebsiteData
56
+ export type ApiWebsiteWriteResponse = { message: string }
57
+ export type ApiWebsiteCreateQuery = { connectorId?: ConnectorId }
58
+ export type ApiWebsiteCreateBody = WebsiteMetaFileContent
59
+ export type ApiWebsiteCreateResponse = { message: string }
60
+ export type ApiWebsiteDeleteQuery = { websiteId: WebsiteId, connectorId?: ConnectorId }
61
+ export type ApiWebsiteDuplicateQuery = { websiteId: WebsiteId, connectorId?: ConnectorId }
62
+ export type ApiWebsiteMetaReadQuery = { websiteId: WebsiteId, connectorId?: ConnectorId }
63
+ export type ApiWebsiteMetaReadResponse = WebsiteMeta
64
+ export type ApiWebsiteMetaWriteQuery = { websiteId: WebsiteId, connectorId?: ConnectorId }
65
+ export type ApiWebsiteMetaWriteBody = WebsiteMetaFileContent
66
+ export type ApiWebsiteMetaWriteResponse = { message: string }
67
+ export type ApiWebsiteAssetsReadQuery = { websiteId: WebsiteId, connectorId?: ConnectorId }
68
+ export type ApiWebsiteAssetsReadParams = { path: string }
69
+ export type ApiWebsiteAssetsReadResponse = string
70
+ export type ApiWebsiteAssetsWriteQuery = { websiteId: WebsiteId, connectorId?: ConnectorId }
71
+ export type ApiWebsiteAssetsWriteBody = ClientSideFile[]
72
+ export type ApiWebsiteAssetsWriteResponse = { data: string[] }
73
+ export type ApiConnectorListQuery = { type: ConnectorType }
74
+ export type ApiConnectorListResponse = ConnectorData[]
75
+ export type ApiConnectorLoginQuery = { connectorId: ConnectorId, type: ConnectorType }
76
+ export type ApiConnectorLoggedInPostMessage = { type: string, error: boolean, message: string, connectorId: ConnectorId, options: ConnectorOptions }
77
+ export type ApiConnectorLoginCbkQuery = { connectorId?: ConnectorId, type: ConnectorType, error?: string } // May have any other query params from oauth
78
+ export type ApiConnectorLoginCbkBody = object // Body from basic auth, POST only, contains options and token
79
+ export type ApiConnectorSettingsQuery = { connectorId?: ConnectorId, type: ConnectorType }
80
+ export type ApiConnectorSettingsResponse = string // HTML
81
+ export type ApiConnectorSettingsPostQuery = { connectorId?: ConnectorId, type: ConnectorType }
82
+ export type ApiConnectorSettingsPostBody = ConnectorUserSettings
83
+ export type ApiConnectorSettingsPostResponse = { message: string }
84
+ export type ApiConnectorLogoutQuery = { connectorId?: ConnectorId, type: ConnectorType }
85
+ export type ApiConnectorUserQuery = { connectorId?: ConnectorId, type: ConnectorType }
86
+ export type ApiConnectorUserResponse = ConnectorUser
87
+
88
+ // **
89
+ // Website API
90
+ export const defaultWebsiteData: WebsiteData = {
91
+ //pages: [],
92
+ //assets: [],
93
+ //styles: [],
94
+ //settings: {},
95
+ //fonts: [],
96
+ //symbols: [],
97
+ //publication: {},
98
+ } as WebsiteData
99
+
100
+
101
+ // **
102
+ // Grapesjs types
103
+ // From grapesjs, not imported because it breaks the build on the server side
104
+ export interface Component {
105
+ type: string,
106
+ content?: string,
107
+ attributes: { [key: string]: string },
108
+ components: Component[],
109
+ }
110
+
111
+ export interface Page {
112
+ id: string,
113
+ name: string,
114
+ slug: string,
115
+ settings: WebsiteSettings, // TODO: why is this here? It is used in the publication manager
116
+ frames: {
117
+ component: Component,
118
+ }[]
44
119
  }
45
120
 
46
121
  export interface WebsiteData {
47
122
  pages: Page[],
48
123
  assets: Asset[],
49
124
  styles: Style[],
50
- name: string,
125
+ //name: string,
51
126
  settings: WebsiteSettings,
52
127
  fonts: Font[],
53
128
  symbols: symbol[],
54
129
  publication: PublicationSettings,
55
130
  }
56
131
 
57
- export interface Font {
58
- name: string,
59
- value: string,
60
- variants: string[],
61
- }
62
- export interface PublicationSettings {
63
- path?: string, // Folder to publish to
64
- url?: string, // URL to display where the website is published to
65
- autoHomePage?: boolean, // Name the first page `index` instead of its name
66
- assets?: {
67
- path?: string, // Folder to copy assets to
68
- url?: string, // URL where assets are accessed
69
- },
70
- html?: {
71
- path?: string, // Folder where to generate the HTML pages
72
- ext?: string, // File extension for HTML pages
73
- },
74
- css?: {
75
- path?: string, // Folder where to generate the CSS files
76
- url?: string, // URL of the Folder where the CSS files are accessed
77
- ext?: string, // File extension for CSS files
78
- },
79
- }
80
-
81
- export interface File {
82
- html: string,
83
- css: string,
84
- htmlPath: string,
85
- cssPath: string,
132
+ export interface PublicationData extends WebsiteData {
133
+ files?: ClientSideFile[], // Added by the client for publish
86
134
  }
87
135
 
88
- export interface Page {
89
- name?: string,
90
- id: string,
91
- type?: string,
92
- frames: Frame[],
93
- settings?: WebsiteSettings,
94
- cssExt?: string,
95
- htmlExt?: string,
136
+ export interface WebsiteSettings {
137
+ description?: string,
138
+ title?: string,
139
+ lang?: string,
140
+ head?: string,
141
+ favicon?: string,
142
+ 'og:title'?: string,
143
+ 'og:description'?: string,
144
+ 'og:image'?: string,
96
145
  }
97
146
 
98
- export interface Frame {
99
- component: { type: string, stylable: string[] },
100
- components: Component[],
147
+ export interface Font {
148
+ name: string,
149
+ value: string,
150
+ variants: string[],
101
151
  }
102
152
 
103
- export interface Component {
104
- type: string,
105
- content?: string,
106
- attributes: { [key: string]: string },
107
- conponents: Component[],
108
- }
153
+ //export interface Frame {
154
+ // component: { type: string, stylable: string[] },
155
+ // components: Component[],
156
+ //}
157
+ //
158
+ //export interface Component {
159
+ // type: string,
160
+ // content?: string,
161
+ // attributes: { [key: string]: string },
162
+ // conponents: Component[],
163
+ //}
109
164
 
110
165
  export enum Unit {
111
166
  PX = 'px',
112
167
  }
113
168
 
114
- export interface Asset {
169
+ export interface Asset {
115
170
  type: string,
116
171
  src: string,
117
172
  unitDim: Unit,
118
173
  height: number,
119
174
  width: number,
120
175
  name: string,
176
+ path?: string, // Set by the publication renderer, this is the path in the hosting storage after publication
121
177
  }
122
178
 
123
179
  export interface Style {
@@ -130,3 +186,157 @@ export type Selector = string | {
130
186
  type: number,
131
187
  }
132
188
 
189
+ // **
190
+ // Connector API
191
+ /**
192
+ * Type for a connector id
193
+ */
194
+ export type ConnectorId = string
195
+
196
+ export type ConnectorOptions = {
197
+ websiteUrl?: string, // For publication UI
198
+ [key: string]: any,
199
+ }
200
+
201
+ export enum ClientSideFileType {
202
+ HTML = 'html',
203
+ ASSET = 'asset',
204
+ CSS = 'css',
205
+ OTHER = 'other',
206
+ }
207
+
208
+ export enum Initiator {
209
+ HTML = 'html',
210
+ CSS = 'css',
211
+ }
212
+
213
+ /**
214
+ * Type for a client side file when the content is not available, used to handle file names and paths and urls
215
+ */
216
+ export interface ClientSideFileWithPermalink {
217
+ path: string, // Path in the connector
218
+ permalink?: string, // Defaults to path, this the path where the file is served, it is used to link to the file
219
+ type: ClientSideFileType,
220
+ }
221
+
222
+ /**
223
+ * Type for a client side file when the content is available as a string
224
+ */
225
+ export interface ClientSideFileWithContent extends ClientSideFileWithPermalink {
226
+ content: string, // Not buffer because it's sent from the client in JSON
227
+ }
228
+
229
+ /**
230
+ * Type for a client side file when the content is in the connector
231
+ */
232
+ export interface ClientSideFileWithSrc extends ClientSideFileWithPermalink {
233
+ src: string, // Where to download the file, a path for the storage connector
234
+ }
235
+
236
+ /**
237
+ * Type for a client side file
238
+ * @see connector/File
239
+ */
240
+ export type ClientSideFile = ClientSideFileWithContent | ClientSideFileWithSrc
241
+
242
+ /**
243
+ * Type for file listing
244
+ */
245
+ export interface FileMeta {
246
+ name: string
247
+ isDir: boolean
248
+ size: number
249
+ createdAt: Date
250
+ updatedAt: Date
251
+ metadata?: object
252
+ }
253
+
254
+ /**
255
+ * Enum to express if the connector is a storage or a hosting
256
+ */
257
+ export enum ConnectorType {
258
+ STORAGE = 'STORAGE',
259
+ HOSTING = 'HOSTING',
260
+ }
261
+
262
+ /**
263
+ * Type for a website id
264
+ */
265
+ export type WebsiteId = string
266
+
267
+ /**
268
+ * Back end data shared with the front end
269
+ */
270
+ export interface ConnectorData {
271
+ connectorId: ConnectorId
272
+ type: ConnectorType
273
+ displayName: string
274
+ icon: string
275
+ disableLogout: boolean
276
+ isLoggedIn: boolean
277
+ oauthUrl: string | null
278
+ color: string
279
+ background: string
280
+ }
281
+
282
+ /**
283
+ * User settings for a connector and for a given website
284
+ */
285
+ export type ConnectorUserSettings = {
286
+ [websiteId: string]: object
287
+ }
288
+
289
+ /**
290
+ * Back end data shared with the front end
291
+ */
292
+ export interface ConnectorUser {
293
+ name: string
294
+ email?: string
295
+ picture?: string
296
+ storage: ConnectorData
297
+ }
298
+
299
+ export interface WebsiteMetaFileContent {
300
+ name: string
301
+ imageUrl?: string
302
+ connectorUserSettings: ConnectorUserSettings
303
+ }
304
+
305
+ /**
306
+ * Back end data sent to the front end
307
+ * Meta data can be the root path of the websites, or the bucket name, etc.
308
+ */
309
+ export interface WebsiteMeta extends WebsiteMetaFileContent {
310
+ websiteId: WebsiteId
311
+ createdAt?: Date
312
+ updatedAt?: Date
313
+ }
314
+
315
+ /**
316
+ * Enum to express if the job is in progress or finished or errored
317
+ */
318
+ export enum JobStatus {
319
+ IN_PROGRESS = 'IN_PROGRESS',
320
+ SUCCESS = 'SUCCESS',
321
+ ERROR = 'ERROR',
322
+ }
323
+
324
+ /**
325
+ * Id used to track the progress of a publication
326
+ */
327
+ export type JobId = string
328
+
329
+ /**
330
+ * Data structure which is sent to the client to display the progress of a job
331
+ */
332
+ export interface JobData {
333
+ jobId: JobId // The job id
334
+ status: JobStatus // status code
335
+ message: string // status to display
336
+ _timeout?: ReturnType<typeof setTimeout> // Internal use
337
+ }
338
+
339
+ export interface PublicationJobData extends JobData {
340
+ logs: string[][]
341
+ errors: string[][]
342
+ }
package/.dockerignore DELETED
@@ -1,5 +0,0 @@
1
- .git
2
- .gitmodules
3
- docs
4
- node_modules
5
- Dockerfile
package/.editorconfig DELETED
@@ -1,14 +0,0 @@
1
- # EditorConfig defines and maintains consistent coding styles between different
2
- # editors and IDEs: http://EditorConfig.org/
3
-
4
- # Top-most EditorConfig file
5
- root = true
6
-
7
- # All files
8
- [*]
9
- charset = utf-8
10
- end_of_line = lf
11
- insert_final_newline = true
12
- indent_style = space
13
- indent_size = 2
14
- trim_trailing_whitespace = true
package/.eslintrc.json DELETED
@@ -1,43 +0,0 @@
1
- {
2
- "ignorePatterns": [ "dist/" ],
3
- "env": {
4
- "browser": true,
5
- "es2021": true,
6
- "node": true
7
- },
8
- "extends": [
9
- "eslint:recommended",
10
- "plugin:@typescript-eslint/recommended"
11
- ],
12
- "overrides": [
13
- ],
14
- "parser": "@typescript-eslint/parser",
15
- "parserOptions": {
16
- "ecmaVersion": "latest",
17
- "sourceType": "module"
18
- },
19
- "plugins": [
20
- "@typescript-eslint"
21
- ],
22
- "rules": {
23
- "indent": [
24
- "error",
25
- 2
26
- ],
27
- "linebreak-style": [
28
- "error",
29
- "unix"
30
- ],
31
- "quotes": [
32
- "error",
33
- "single"
34
- ],
35
- "semi": [
36
- "error",
37
- "never"
38
- ],
39
- "no-case-declarations": [0],
40
- "@typescript-eslint/no-unused-vars": [0],
41
- "@typescript-eslint/no-explicit-any": [0]
42
- }
43
- }
@@ -1,13 +0,0 @@
1
- # These are supported funding model platforms
2
-
3
- # github: [lexoyo]
4
- # patreon: lexoyo
5
- open_collective: silex
6
-
7
- # ko_fi: # Replace with a single Ko-fi username
8
- # tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
9
- # community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
10
- # liberapay: # Replace with a single Liberapay username
11
- # issuehunt: # Replace with a single IssueHunt username
12
- # otechie: # Replace with a single Otechie username
13
- # custom: # Replace with a single custom sponsorship URL
@@ -1,36 +0,0 @@
1
- name: Publish DockerHub image
2
- # from https://itsmetommy.com/2021/07/05/push-to-docker-hub-using-github-actions/
3
-
4
- on:
5
- push:
6
- tags:
7
- - '*'
8
-
9
- jobs:
10
- build-container:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - name: Checkout code
14
- uses: actions/checkout@v2
15
-
16
- - name: Login to DockerHub
17
- uses: docker/login-action@v1
18
- with:
19
- username: ${{ secrets.DOCKER_USERNAME }}
20
- password: ${{ secrets.DOCKER_PASSWORD }}
21
-
22
- - name: Extract metadata (tags, labels) for Docker
23
- id: meta
24
- uses: docker/metadata-action@v3
25
- with:
26
- images: silexlabs/silex
27
-
28
- - name: Build and push
29
- uses: docker/build-push-action@v2
30
- with:
31
- context: .
32
- push: true
33
- tags: ${{ steps.meta.outputs.tags }}
34
- labels: ${{ steps.meta.outputs.labels }}
35
-
36
-
@@ -1,19 +0,0 @@
1
- name: Publish on npm
2
- on:
3
- push:
4
- tags:
5
- - '*'
6
- jobs:
7
- build:
8
- runs-on: ubuntu-latest
9
- steps:
10
- - uses: actions/checkout@v2
11
- # Setup .npmrc file to publish to npm
12
- - uses: actions/setup-node@v1
13
- with:
14
- node-version: '18.x'
15
- registry-url: 'https://registry.npmjs.org'
16
- - run: npm install
17
- - run: npm publish --access=public
18
- env:
19
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -1,26 +0,0 @@
1
- name: Run tests
2
-
3
- on: [push]
4
-
5
- jobs:
6
- build:
7
-
8
- runs-on: ${{ matrix.os }}
9
-
10
- strategy:
11
- matrix:
12
- node-version: [16.x, 18.x]
13
- os: [ubuntu-latest]
14
-
15
- steps:
16
- - uses: actions/checkout@v2
17
- - name: Use Node.js ${{ matrix.node-version }}
18
- uses: actions/setup-node@v1
19
- with:
20
- node-version: ${{ matrix.node-version }}
21
- - run: npm install
22
- - run: npm run build
23
- - run: npm test
24
- env:
25
- CI: true
26
- - run: npm run lint
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 18.13.0
@@ -1 +0,0 @@
1
- {}