@silexlabs/silex 3.0.1-alpha.0 → 3.0.2
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.
- package/.env.default +20 -0
- package/.silex.js +67 -8
- package/LICENSE +661 -203
- package/README.md +37 -35
- package/dist/client/client/api.d.ts +90 -0
- package/dist/client/client/assetUrl.d.ts +54 -0
- package/dist/client/client/config.d.ts +102 -0
- package/dist/client/client/events.d.ts +23 -0
- package/dist/client/client/expose.d.ts +8 -0
- package/dist/client/client/grapesjs/LoginDialog.d.ts +15 -0
- package/dist/client/client/grapesjs/PublicationManager.d.ts +73 -0
- package/dist/client/client/grapesjs/PublicationUi.d.ts +59 -0
- package/dist/client/client/grapesjs/blocks.d.ts +1 -0
- package/dist/client/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/client/client/grapesjs/css-props.d.ts +6 -0
- package/dist/client/client/grapesjs/footer.d.ts +2 -0
- package/dist/client/client/grapesjs/img.d.ts +6 -0
- package/dist/client/client/grapesjs/index.d.ts +9 -0
- package/dist/client/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/client/client/grapesjs/keymaps.d.ts +123 -0
- package/dist/client/client/grapesjs/new-page-dialog.d.ts +2 -0
- package/dist/client/client/grapesjs/openImport.d.ts +9 -0
- package/dist/client/client/grapesjs/page-panel.d.ts +9 -0
- package/dist/client/client/grapesjs/project-bar.d.ts +21 -0
- package/dist/client/client/grapesjs/resize-panel.d.ts +1 -0
- package/dist/client/client/grapesjs/rich-text.d.ts +4 -0
- package/dist/client/client/grapesjs/semantic.d.ts +1 -0
- package/dist/client/client/grapesjs/settings-sections.d.ts +16 -0
- package/dist/client/client/grapesjs/settings.d.ts +4 -0
- package/dist/client/client/grapesjs/storage.d.ts +2 -0
- package/dist/client/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/client/client/grapesjs/view-buttons.d.ts +1 -0
- package/dist/client/client/index.d.ts +10 -0
- package/dist/client/client/publication-transformers.d.ts +42 -0
- package/dist/client/client/publish-custom-code-block.d.ts +4 -0
- package/dist/client/client/publish-fonts.d.ts +4 -0
- package/dist/client/client/utils.d.ts +22 -0
- package/dist/client/constants.d.ts +32 -0
- package/dist/client/css/admin.css +1114 -328
- package/dist/client/css/admin.css.map +1 -0
- package/dist/client/grapesjs-filter-styles/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-fonts/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-fonts/src/commands.d.ts +3 -0
- package/dist/client/grapesjs-fonts/src/fonts.d.ts +4 -0
- package/dist/client/grapesjs-storage-rate-limit/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-ui-suggest-classes/dist/index.d.ts +4 -0
- package/dist/client/index.html +3 -2
- package/dist/client/js/main.js +356 -131
- package/dist/client/js/main.js.LICENSE.txt +15 -1
- package/dist/client/page.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/api.d.ts +90 -0
- package/dist/client/silex-lib/src/ts/client/assetUrl.d.ts +54 -0
- package/dist/client/silex-lib/src/ts/client/config.d.ts +102 -0
- package/dist/client/silex-lib/src/ts/client/events.d.ts +23 -0
- package/dist/client/silex-lib/src/ts/client/expose.d.ts +8 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/LoginDialog.d.ts +15 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationManager.d.ts +73 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationUi.d.ts +59 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/blocks.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/css-props.d.ts +6 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/footer.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/img.d.ts +6 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/index.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/keymaps.d.ts +123 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/new-page-dialog.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/openImport.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/page-panel.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/project-bar.d.ts +21 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/resize-panel.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/rich-text.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/semantic.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/settings-sections.d.ts +16 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/settings.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/storage.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/view-buttons.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/index.d.ts +10 -0
- package/dist/client/silex-lib/src/ts/client/publication-transformers.d.ts +42 -0
- package/dist/client/silex-lib/src/ts/client/publish-custom-code-block.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/publish-fonts.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/utils.d.ts +22 -0
- package/dist/client/silex-lib/src/ts/constants.d.ts +32 -0
- package/dist/client/silex-lib/src/ts/page.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/types.d.ts +339 -0
- package/dist/client/types.d.ts +339 -0
- package/dist/plugins/client/client/events.d.ts +23 -0
- package/dist/plugins/client/client/events.js +43 -0
- package/dist/plugins/client/client/events.js.map +1 -0
- package/dist/plugins/client/plugins/client/template.d.ts +2 -0
- package/dist/plugins/client/plugins/client/template.js +234 -0
- package/dist/plugins/client/plugins/client/template.js.map +1 -0
- package/dist/plugins/client/plugins/client/website-info.d.ts +1 -0
- package/dist/plugins/client/plugins/client/website-info.js +72 -0
- package/dist/plugins/client/plugins/client/website-info.js.map +1 -0
- package/dist/plugins/client/types.d.ts +339 -0
- package/dist/plugins/client/types.js +80 -0
- package/dist/plugins/client/types.js.map +1 -0
- package/dist/plugins/server/constants.d.ts +32 -0
- package/dist/plugins/server/constants.js +76 -0
- package/dist/plugins/server/constants.js.map +1 -0
- package/dist/plugins/server/plugins/server/Cache.d.ts +2 -0
- package/dist/plugins/server/plugins/server/Cache.js +36 -0
- package/dist/plugins/server/plugins/server/Cache.js.map +1 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.d.ts +29 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.js +127 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/FtpConnector.d.ts +86 -0
- package/dist/plugins/server/plugins/server/FtpConnector.js +536 -0
- package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +135 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js +649 -0
- package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.d.ts +16 -0
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.js +209 -0
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.d.ts +0 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.js +14 -0
- package/dist/plugins/server/plugins/server/PublicationOptimizer.js.map +1 -0
- package/dist/plugins/server/plugins/server/SslPlugin.d.ts +1 -0
- package/dist/plugins/server/plugins/server/SslPlugin.js +86 -0
- package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +8 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.js +45 -0
- package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -0
- package/dist/plugins/server/server/config.d.ts +59 -0
- package/dist/plugins/server/server/config.js +181 -0
- package/dist/plugins/server/server/config.js.map +1 -0
- package/dist/plugins/server/server/connectors/FsHosting.d.ts +14 -0
- package/dist/plugins/server/server/connectors/FsHosting.js +66 -0
- package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -0
- package/dist/plugins/server/server/connectors/FsStorage.d.ts +44 -0
- package/dist/plugins/server/server/connectors/FsStorage.js +261 -0
- package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -0
- package/dist/plugins/server/server/connectors/connectors.d.ts +86 -0
- package/dist/plugins/server/server/connectors/connectors.js +126 -0
- package/dist/plugins/server/server/connectors/connectors.js.map +1 -0
- package/dist/plugins/server/server/events.d.ts +26 -0
- package/dist/plugins/server/server/events.js +31 -0
- package/dist/plugins/server/server/events.js.map +1 -0
- package/dist/plugins/server/server/jobs.d.ts +12 -0
- package/dist/plugins/server/server/jobs.js +79 -0
- package/dist/plugins/server/server/jobs.js.map +1 -0
- package/dist/plugins/server/server/utils/validation.d.ts +7 -0
- package/dist/plugins/server/server/utils/validation.js +37 -0
- package/dist/plugins/server/server/utils/validation.js.map +1 -0
- package/dist/plugins/server/types.d.ts +339 -0
- package/dist/plugins/server/types.js +84 -0
- package/dist/plugins/server/types.js.map +1 -0
- package/dist/server/constants.js +55 -0
- package/dist/server/plugins/server/Cache.js +19 -0
- package/dist/server/server/api/api.js +20 -0
- package/dist/server/server/api/connectorApi.js +334 -0
- package/dist/server/server/api/publicationApi.js +106 -0
- package/dist/server/server/api/websiteApi.js +315 -0
- package/dist/server/server/cli.js +71 -0
- package/dist/server/server/config.js +120 -0
- package/dist/server/server/connectors/FsHosting.js +47 -0
- package/dist/server/server/connectors/FsStorage.js +228 -0
- package/dist/server/server/connectors/connectors.js +88 -0
- package/dist/server/server/events.js +14 -0
- package/dist/server/server/expose.js +27 -0
- package/dist/server/server/express.js +46 -0
- package/dist/server/server/index.js +92 -0
- package/dist/server/server/jobs.js +50 -0
- package/dist/server/server/utils/validation.js +14 -0
- package/dist/server/types.js +40 -0
- package/package.json +99 -49
- package/public/assets/download.png +0 -0
- package/public/assets/favicon.ico +0 -0
- package/public/assets/favicon.png +0 -0
- package/public/assets/ftp.png +0 -0
- package/public/assets/gitlab.png +0 -0
- package/public/assets/gitlab2.png +0 -0
- package/public/assets/laptop.png +0 -0
- package/public/assets/logo-silex-small.png +0 -0
- package/public/silex.js +22 -23
- package/src/css/_variables.scss +24 -20
- package/src/css/dialog.scss +35 -2
- package/src/css/fonts.scss +31 -0
- package/src/css/footer.scss +12 -0
- package/src/css/grapesjs-light.scss +180 -0
- package/src/css/grapesjs-plugins.scss +227 -0
- package/src/css/grapesjs.scss +159 -1
- package/src/css/index.scss +12 -1
- package/src/css/light.scss +7 -0
- package/src/css/loader.scss +2 -0
- package/src/css/project-bar.scss +32 -16
- package/src/css/silex.scss +79 -5
- package/src/css/website-info.scss +14 -0
- package/src/html/index.pug +3 -3
- package/src/html/templates/includes.pug +0 -1
- package/src/ts/client/api.ts +156 -0
- package/src/ts/client/assetUrl.test.ts +164 -0
- package/src/ts/client/assetUrl.ts +254 -0
- package/src/ts/client/config.ts +175 -13
- package/src/ts/client/events.ts +43 -0
- package/src/ts/client/expose.ts +27 -1
- package/src/ts/client/grapesjs/LoginDialog.ts +204 -0
- package/src/ts/client/grapesjs/PublicationManager.ts +433 -0
- package/src/ts/client/grapesjs/PublicationUi.ts +366 -0
- package/src/ts/client/grapesjs/blocks.ts +17 -0
- package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
- package/src/ts/client/grapesjs/css-props.ts +910 -0
- package/src/ts/client/grapesjs/eleventy.ts +30 -7
- package/src/ts/client/grapesjs/footer.ts +42 -0
- package/src/ts/client/grapesjs/img.ts +147 -0
- package/src/ts/client/grapesjs/index.ts +311 -122
- package/src/ts/client/grapesjs/internal-links.test.ts +19 -1
- package/src/ts/client/grapesjs/internal-links.ts +31 -7
- package/src/ts/client/grapesjs/keymaps.ts +207 -0
- package/src/ts/client/grapesjs/new-page-dialog.ts +19 -3
- package/src/ts/client/grapesjs/openImport.ts +22 -0
- package/src/ts/client/grapesjs/page-panel.ts +109 -7
- package/src/ts/client/grapesjs/project-bar.ts +133 -72
- package/src/ts/client/grapesjs/resize-panel.ts +20 -0
- package/src/ts/client/grapesjs/rich-text.ts +38 -13
- package/src/ts/client/grapesjs/semantic.ts +20 -3
- package/src/ts/client/grapesjs/settings-sections.ts +117 -0
- package/src/ts/client/grapesjs/settings.ts +191 -96
- package/src/ts/client/grapesjs/storage.ts +187 -0
- package/src/ts/client/grapesjs/symbolDialogs.ts +21 -5
- package/src/ts/client/grapesjs/view-buttons.ts +42 -0
- package/src/ts/client/index.ts +80 -21
- package/src/ts/client/publication-transformers.test.ts +207 -0
- package/src/ts/client/publication-transformers.ts +280 -0
- package/src/ts/client/publish-custom-code-block.ts +31 -0
- package/src/ts/client/publish-fonts.ts +36 -0
- package/src/ts/client/utils.ts +70 -1
- package/src/ts/constants.ts +78 -0
- package/src/ts/externs.ts +17 -0
- package/src/ts/page.ts +20 -3
- package/src/ts/plugins/client/template.ts +246 -0
- package/src/ts/plugins/client/website-info.ts +84 -0
- package/src/ts/plugins/server/Cache.ts +32 -0
- package/src/ts/plugins/server/DownloadConnector.ts +146 -0
- package/src/ts/plugins/server/FtpConnector.test.ts +82 -0
- package/src/ts/plugins/server/FtpConnector.ts +621 -0
- package/src/ts/plugins/server/GitlabConnector.ts +749 -0
- package/src/ts/plugins/server/GitlabHostingConnector.ts +215 -0
- package/src/ts/plugins/server/PublicationOptimizer.ts +14 -0
- package/src/ts/plugins/server/SslPlugin.ts +84 -0
- package/src/ts/plugins/server/StaticPlugin.ts +45 -0
- package/src/ts/server/api/api.ts +19 -0
- package/src/ts/server/api/connectorApi.ts +464 -0
- package/src/ts/server/api/publicationApi.ts +159 -0
- package/src/ts/server/api/websiteApi.ts +462 -0
- package/src/ts/server/cli.ts +48 -14
- package/src/ts/server/config.ts +158 -60
- package/src/ts/server/connectors/FsHosting.ts +66 -0
- package/src/ts/server/connectors/FsStorage.test.ts +51 -0
- package/src/ts/server/connectors/FsStorage.ts +290 -0
- package/src/ts/server/connectors/connectors.ts +203 -0
- package/src/ts/server/events.ts +37 -0
- package/src/ts/server/expose.ts +19 -0
- package/src/ts/server/express.ts +57 -5
- package/src/ts/server/index.ts +80 -19
- package/src/ts/server/jobs.test.ts +75 -0
- package/src/ts/server/jobs.ts +89 -0
- package/src/ts/server/utils/BackwardCompat.ts +546 -528
- package/src/ts/server/utils/validation.ts +34 -0
- package/src/ts/types.ts +295 -85
- package/.dockerignore +0 -5
- package/.editorconfig +0 -14
- package/.eslintrc.json +0 -43
- package/.github/FUNDING.yml +0 -13
- package/.github/workflows/docker-hub-publish.yml +0 -36
- package/.github/workflows/npm-publish.yml +0 -19
- package/.github/workflows/test.yml +0 -26
- package/.nvmrc +0 -1
- package/.silex/default/.silex.data.json +0 -1
- package/CODE_OF_CONDUCT.md +0 -128
- package/CONTRIBUTING.md +0 -131
- package/Dockerfile +0 -15
- package/directus.silex.js +0 -7
- package/dist/constants.js +0 -4
- package/dist/events.js +0 -5
- package/dist/page.js +0 -15
- package/dist/server/cli.js +0 -43
- package/dist/server/config.js +0 -70
- package/dist/server/express.js +0 -18
- package/dist/server/index.js +0 -58
- package/dist/types.js +0 -34
- package/jest.config.js +0 -10
- package/logos/logo_by_ceubri/silex-icon-2018@200px.png +0 -0
- package/logos/logo_by_ceubri/silex-icon-2018@4x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white-transp.pdf +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white.jpg +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white.pdf +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white@0.5x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white@0.75x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white@4x.jpg +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018-white@4x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018.ai +5 -2521
- package/logos/logo_by_ceubri/silex-logo-2018.jpg +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018.pdf +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018@0.5x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018@0.75x.png +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018@4x.jpg +0 -0
- package/logos/logo_by_ceubri/silex-logo-2018@4x.png +0 -0
- package/logos/silexlabs.png +0 -0
- package/src/example-client-config.js +0 -47
- package/src/plugins/AuthPlugin.js +0 -21
- package/src/plugins/Cache.js +0 -11
- package/src/plugins/DefaultBackend.js +0 -149
- package/src/plugins/ExpressPlugin.js +0 -39
- package/src/plugins/HooksPlugin.js +0 -58
- package/src/plugins/PublishPlugin.js +0 -69
- package/src/plugins/SslPlugin.js +0 -66
- package/src/plugins/StaticPlugin.js +0 -48
- package/src/plugins/WebsitePlugin.js +0 -207
- package/src/ts/client/grapesjs/publish.ts +0 -386
- package/src/ts/client/grapesjs/template.ts +0 -166
- package/src/ts/events.ts +0 -2
- package/tsconfig-server-debug.json +0 -19
- package/tsconfig-server-release.json +0 -19
- package/tsconfig.jest.json +0 -9
- package/tsconfig.json +0 -26
- package/webpack.config.js +0 -28
- package/webpack.debug.config.js +0 -8
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/logos/silexlabs.png
DELETED
|
Binary file
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import directusStorage from 'https://unpkg.com/@silexlabs/grapesjs-directus-storage'
|
|
2
|
-
console.log('directusStorage', directusStorage, directusStorage?.default)
|
|
3
|
-
|
|
4
|
-
// Use the environment variable SILEX_CLIENT_CONFIG or the CLI option --client-config to override the default config with this file
|
|
5
|
-
export default async function (config, options) {
|
|
6
|
-
console.log('In example config')
|
|
7
|
-
//await config.addPlugin('gjs-blocks-basic', 'https://unpkg.com/grapesjs-blocks-basic', {
|
|
8
|
-
// blocks: ['text', 'image', 'video', 'map'],
|
|
9
|
-
//})
|
|
10
|
-
|
|
11
|
-
// Optional plugins
|
|
12
|
-
await config.addPlugin([
|
|
13
|
-
'@silexlabs/grapesjs-directus-storage',
|
|
14
|
-
'./plugins/@silexlabs/grapesjs-directus-storage/dist/index.js',
|
|
15
|
-
], {
|
|
16
|
-
'@silexlabs/grapesjs-directus-storage': {
|
|
17
|
-
directusUrl: 'http://localhost:8055',
|
|
18
|
-
},
|
|
19
|
-
'./plugins/@silexlabs/grapesjs-directus-storage/dist/index.js': {
|
|
20
|
-
directusUrl: 'http://localhost:8055',
|
|
21
|
-
},
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
// Return an object to override default config
|
|
25
|
-
return {
|
|
26
|
-
...config,
|
|
27
|
-
...options,
|
|
28
|
-
editor: {
|
|
29
|
-
...config.editor,
|
|
30
|
-
storageManager: {
|
|
31
|
-
autoload: false,
|
|
32
|
-
type: 'directus',
|
|
33
|
-
},
|
|
34
|
-
plugins: [
|
|
35
|
-
...config.editor.plugins,
|
|
36
|
-
directusStorage,
|
|
37
|
-
],
|
|
38
|
-
pluginsOpts: {
|
|
39
|
-
...config.editor.pluginsOpts,
|
|
40
|
-
[directusStorage]: {
|
|
41
|
-
directusUrl: 'http://localhost:8055',
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const express = require('express')
|
|
2
|
-
const { Directus } = require('@directus/sdk')
|
|
3
|
-
|
|
4
|
-
module.exports = async function(config, opts = {}) {
|
|
5
|
-
config.on('silex:startup:start', ({app}) => {
|
|
6
|
-
const router = express.Router()
|
|
7
|
-
router.post(['/publish', '/website', '/assets'], async function(req, res, next) {
|
|
8
|
-
try {
|
|
9
|
-
const token = req.body.token || opts.directusToken
|
|
10
|
-
const directus = new Directus(opts.directusUrl)
|
|
11
|
-
directus.storage.auth_token = token
|
|
12
|
-
const me = await directus.users.me.read()
|
|
13
|
-
next()
|
|
14
|
-
} catch(err) {
|
|
15
|
-
console.error('Publish failed in auth module. Did you provide a directus token?', err.message)
|
|
16
|
-
res.status(403).json({ message: err.message })
|
|
17
|
-
}
|
|
18
|
-
})
|
|
19
|
-
app.use(router)
|
|
20
|
-
})
|
|
21
|
-
}
|
package/src/plugins/Cache.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
exports.noCache = function (req, res, next) {
|
|
2
|
-
res.header('Cache-Control', 'private,no-cache,no-store,must-revalidate,proxy-revalidate')
|
|
3
|
-
res.header('Expires', '-1')
|
|
4
|
-
res.header('Pragma', 'no-cache')
|
|
5
|
-
next()
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
exports.withCache = function (req, res, next) {
|
|
9
|
-
res.header('Cache-Control', 'public,max-age=86400,immutable') // 24h
|
|
10
|
-
next()
|
|
11
|
-
}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
const { readFile, writeFile, mkdir, copyFile, readdir, stat, rm } = require('node:fs/promises')
|
|
2
|
-
const { join, dirname, basename } = require('path')
|
|
3
|
-
const { homedir } = require('os')
|
|
4
|
-
|
|
5
|
-
//const { URLRewriter, URLTranslator } = require('cssurl')
|
|
6
|
-
|
|
7
|
-
async function mkdirIfNotExists(path, options = null) {
|
|
8
|
-
try {
|
|
9
|
-
return await mkdir(path, options)
|
|
10
|
-
} catch (err) {
|
|
11
|
-
if (err.code === 'EEXIST') {
|
|
12
|
-
return
|
|
13
|
-
} else {
|
|
14
|
-
throw err
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// Paths
|
|
20
|
-
const FS_ROOT = process.env.FS_ROOT || join(homedir(), '.silex')
|
|
21
|
-
const ASSETS_PATH = 'assets'
|
|
22
|
-
const ASSETS_URL = 'assets'
|
|
23
|
-
const DATA_FILE_NAME = '/.silex.data.json'
|
|
24
|
-
const PUBLICATION_PATH = 'publication'
|
|
25
|
-
|
|
26
|
-
function path(id = 'default') {
|
|
27
|
-
return join(FS_ROOT, id)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
exports.assetsDir = async function (id) {
|
|
31
|
-
return join(path(id), ASSETS_PATH)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
exports.assetUrl = async function (id, fileName) {
|
|
35
|
-
return `${ASSETS_URL}/${fileName}`
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Init files for projects and each project
|
|
39
|
-
exports.init = async function (id) {
|
|
40
|
-
await mkdirIfNotExists(FS_ROOT)
|
|
41
|
-
const folder = path(id)
|
|
42
|
-
const uploadDir = join(folder, ASSETS_PATH)
|
|
43
|
-
await mkdirIfNotExists(uploadDir, { recursive: true, })
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
exports.del = async function (id) {
|
|
47
|
-
const folder = path(id)
|
|
48
|
-
console.log('Delete', folder)
|
|
49
|
-
await rm(folder, {recursive: true})
|
|
50
|
-
return {ok: true}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// List projects
|
|
54
|
-
exports.list = async function () {
|
|
55
|
-
try {
|
|
56
|
-
const ids = await readdir(FS_ROOT)
|
|
57
|
-
return Promise.all(ids.map(async id => ({
|
|
58
|
-
id,
|
|
59
|
-
...await exports.readData(id),
|
|
60
|
-
stats: await stat(path(id) + DATA_FILE_NAME),
|
|
61
|
-
})))
|
|
62
|
-
} catch (error) {
|
|
63
|
-
if (error.code === 'ENOENT') {
|
|
64
|
-
console.log(`\nError: Directory ${FS_ROOT} does not exist.\nIf your want to read from a different folder ues the FS_ROOT environment variable or --fs-root command line argument?\n`);
|
|
65
|
-
const betterError = new Error(`The directory ${FS_ROOT} does not exist`)
|
|
66
|
-
betterError.code = 'ENOENT'
|
|
67
|
-
throw betterError
|
|
68
|
-
}
|
|
69
|
-
throw error
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// Read project data
|
|
73
|
-
exports.readData = async function (id) {
|
|
74
|
-
const filePath = path(id) + DATA_FILE_NAME
|
|
75
|
-
try {
|
|
76
|
-
const data = await readFile(filePath)
|
|
77
|
-
return JSON.parse(data.toString())
|
|
78
|
-
} catch (error) {
|
|
79
|
-
if (error.code === 'ENOENT') {
|
|
80
|
-
console.log(`\nError: File ${filePath} or directory ${FS_ROOT} do not exist.\nIf your want to read from a different folder use the FS_ROOT environment variable or --fs-root command line argument?\n`);
|
|
81
|
-
const betterError = new Error(`The website ${id} does not exist`)
|
|
82
|
-
betterError.code = 'ENOENT'
|
|
83
|
-
throw betterError
|
|
84
|
-
}
|
|
85
|
-
throw error
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// Write project data
|
|
89
|
-
exports.writeData = async function (id, data) {
|
|
90
|
-
return writeFile(path(id) + DATA_FILE_NAME, JSON.stringify(data))
|
|
91
|
-
}
|
|
92
|
-
function required(prop, name) {
|
|
93
|
-
if (!prop) throw new Error(`Error missing required param ${name}`)
|
|
94
|
-
}
|
|
95
|
-
exports.publish = async function (id, files, data) {
|
|
96
|
-
const { assets, settings, publication } = data
|
|
97
|
-
required(assets, 'assets')
|
|
98
|
-
required(files, 'files')
|
|
99
|
-
required(id, 'id')
|
|
100
|
-
const folder = path(id)
|
|
101
|
-
const publicationDir = join(folder, publication?.path || PUBLICATION_PATH)
|
|
102
|
-
|
|
103
|
-
// HTML and CSS
|
|
104
|
-
await Promise.all(files
|
|
105
|
-
.map(async (file) => {
|
|
106
|
-
// // Process the page CSS to have correct relative URLs
|
|
107
|
-
// let css = file.css
|
|
108
|
-
// try {
|
|
109
|
-
// if(settings?.html?.path != settings?.css?.path) {
|
|
110
|
-
// const rewriter = new URLRewriter(function(url) {
|
|
111
|
-
// const translator = new URLTranslator()
|
|
112
|
-
// return translator.translate(url, settings?.html?.path, settings?.css?.path)
|
|
113
|
-
// })
|
|
114
|
-
// css = rewriter.rewrite(css)
|
|
115
|
-
// }
|
|
116
|
-
// } catch (err) {
|
|
117
|
-
// console.error('Error processing CSS', err, file)
|
|
118
|
-
// throw new Error(`Error processing CSS. ${err.message}`)
|
|
119
|
-
// }
|
|
120
|
-
try {
|
|
121
|
-
// Paths
|
|
122
|
-
const htmlPath = join(publicationDir, file.htmlPath)
|
|
123
|
-
const cssPath = join(publicationDir, file.cssPath)
|
|
124
|
-
// Init
|
|
125
|
-
await mkdirIfNotExists(dirname(htmlPath), { recursive: true, })
|
|
126
|
-
await mkdirIfNotExists(dirname(cssPath), { recursive: true, })
|
|
127
|
-
// Write
|
|
128
|
-
await writeFile(htmlPath, file.html)
|
|
129
|
-
await writeFile(cssPath, file.css)
|
|
130
|
-
} catch (err) {
|
|
131
|
-
throw new Error(`Publication error: could not write files ${file.cssPath} and ${file.htmlPath}. ${err.message}`)
|
|
132
|
-
}
|
|
133
|
-
}))
|
|
134
|
-
// Assets
|
|
135
|
-
const assetsFolder = join(publicationDir, publication?.assets?.path || ASSETS_PATH)
|
|
136
|
-
await mkdirIfNotExists(assetsFolder, { recursive: true, })
|
|
137
|
-
|
|
138
|
-
assets.forEach(async asset => {
|
|
139
|
-
required(asset.src, 'asset\'s "src" attribute')
|
|
140
|
-
const src = join(folder, asset.src)
|
|
141
|
-
const dst = join(assetsFolder, basename(asset.src))
|
|
142
|
-
try {
|
|
143
|
-
await copyFile(src, dst)
|
|
144
|
-
} catch (err) {
|
|
145
|
-
throw new Error(`Publication error: could not copy asset file ${src} to ${dst}. ${err.message}`)
|
|
146
|
-
}
|
|
147
|
-
})
|
|
148
|
-
return publication?.url
|
|
149
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
const bodyParser = require('body-parser')
|
|
2
|
-
const compression = require('compression')
|
|
3
|
-
const cookieParser = require('cookie-parser')
|
|
4
|
-
const session = require('cookie-session')
|
|
5
|
-
const cors = require('cors')
|
|
6
|
-
|
|
7
|
-
module.exports = async function(config, opts = {}) {
|
|
8
|
-
// Options with defaults
|
|
9
|
-
const options = {
|
|
10
|
-
jsonLimit: process.env.SILEX_EXPRESS_JSON_LIMIT || '1mb',
|
|
11
|
-
textLimit: process.env.SILEX_EXPRESS_TEXT_LIMIT || '10mb',
|
|
12
|
-
sessionName: process.env.SILEX_SESSION_NAME || 'silex-session',
|
|
13
|
-
sessionSecret: process.env.SILEX_SESSION_SECRET || 'replace this session secret in env vars',
|
|
14
|
-
cors: process.env.SILEX_CORS_URL,
|
|
15
|
-
...opts,
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
config.on('silex:startup:start', ({app}) => {
|
|
19
|
-
// CORS
|
|
20
|
-
if (options.cors) {
|
|
21
|
-
console.log('> CORS are ENABLED:', options.cors)
|
|
22
|
-
app.use(cors({
|
|
23
|
-
origin: options.cors,
|
|
24
|
-
}))
|
|
25
|
-
}
|
|
26
|
-
// compress gzip when possible
|
|
27
|
-
app.use(compression())
|
|
28
|
-
|
|
29
|
-
// cookie & session
|
|
30
|
-
app.use(bodyParser.json({limit: options.jsonLimit}))
|
|
31
|
-
app.use(bodyParser.text({limit: options.textLimit}))
|
|
32
|
-
app.use(cookieParser())
|
|
33
|
-
app.use(session({
|
|
34
|
-
name: options.sessionName,
|
|
35
|
-
secret: options.sessionSecret,
|
|
36
|
-
}))
|
|
37
|
-
})
|
|
38
|
-
}
|
|
39
|
-
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { Config } from '../config'
|
|
2
|
-
import { EVENT_WRITE_END, EVENT_ASSET_WRITE_END } from './WebsitePlugin'
|
|
3
|
-
import { EVENT_PUBLISH_END } from './PublishPlugin'
|
|
4
|
-
import fetch from 'node-fetch'
|
|
5
|
-
import { projectPath, assetsDir } from '../project'
|
|
6
|
-
|
|
7
|
-
// type HooksOptions = {
|
|
8
|
-
// gitUrl?: string
|
|
9
|
-
// buildUrl?: string
|
|
10
|
-
// }
|
|
11
|
-
|
|
12
|
-
const rootPath = process.env.DATA_FOLDER
|
|
13
|
-
|
|
14
|
-
module.exports = async function(config, opts = {}) {
|
|
15
|
-
// Options with defaults
|
|
16
|
-
const options = {
|
|
17
|
-
gitUrl: process.env.SILEX_HOOK_GIT,
|
|
18
|
-
buildUrl: process.env.SILEX_HOOK_BUILD,
|
|
19
|
-
...opts
|
|
20
|
-
}
|
|
21
|
-
config.on(EVENT_WRITE_END, async ({ res, req, projectId, data }) => {
|
|
22
|
-
if(options.gitUrl) {
|
|
23
|
-
await hook(options.gitUrl, {
|
|
24
|
-
path: projectPath(projectId),
|
|
25
|
-
message: 'Change from Silex',
|
|
26
|
-
})
|
|
27
|
-
}
|
|
28
|
-
})
|
|
29
|
-
config.on(EVENT_ASSET_WRITE_END, async ({ res, req, projectId, uploadDir, form, data }) => {
|
|
30
|
-
if(options.gitUrl) {
|
|
31
|
-
await hook(options.gitUrl, {
|
|
32
|
-
path: projectPath(projectId),
|
|
33
|
-
message: 'Change from Silex',
|
|
34
|
-
})
|
|
35
|
-
}
|
|
36
|
-
})
|
|
37
|
-
config.on(EVENT_PUBLISH_END, async ({ projectId, files, req, res }) => {
|
|
38
|
-
if(options.buildUrl) {
|
|
39
|
-
await hook(options.buildUrl)
|
|
40
|
-
}
|
|
41
|
-
})
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async function hook(url, params = {}) {
|
|
45
|
-
if(url) {
|
|
46
|
-
const urlObj = new URL(url)
|
|
47
|
-
console.log('Calling hook', {url})
|
|
48
|
-
try {
|
|
49
|
-
Object.keys(params)
|
|
50
|
-
.forEach(key => urlObj.searchParams.append(key, params[key]))
|
|
51
|
-
return fetch(urlObj.toString())
|
|
52
|
-
} catch(error) {
|
|
53
|
-
console.log('Hook call failed', {url, error})
|
|
54
|
-
return null
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
const express = require('express')
|
|
2
|
-
const { resolve } = require('path')
|
|
3
|
-
|
|
4
|
-
const { noCache } = require('./Cache')
|
|
5
|
-
const { minify } = require('html-minifier')
|
|
6
|
-
|
|
7
|
-
const router = express.Router()
|
|
8
|
-
|
|
9
|
-
// type PublishOptions = {
|
|
10
|
-
// statusUrl?: string
|
|
11
|
-
// }
|
|
12
|
-
|
|
13
|
-
module.exports = async function(config, opts = {}) {
|
|
14
|
-
const options = {
|
|
15
|
-
// Defaults
|
|
16
|
-
statusUrl: process.env.SILEX_PUBLICATION_STATUS_URL,
|
|
17
|
-
backend: 'src/plugins/DefaultBackend.js',
|
|
18
|
-
// Options
|
|
19
|
-
...opts,
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Link to the desired backend
|
|
23
|
-
const backend = resolve(__dirname, '../..', options.backend)
|
|
24
|
-
const { publish } = require(backend)
|
|
25
|
-
|
|
26
|
-
config.on('silex:startup:start', ({app}) => {
|
|
27
|
-
// Start publication
|
|
28
|
-
router.post('/publish', async function(req, res) {
|
|
29
|
-
const { pages, files, id } = req.body.data
|
|
30
|
-
if (!pages || !id) {
|
|
31
|
-
console.error('Error in the request, pages and id params required', {id})
|
|
32
|
-
res.status(400).send({
|
|
33
|
-
message: 'Error in the request, pages and id params required',
|
|
34
|
-
})
|
|
35
|
-
} else {
|
|
36
|
-
// Optim
|
|
37
|
-
files.forEach(file => {
|
|
38
|
-
file.html = minify(file.html, {
|
|
39
|
-
continueOnParseError: true,
|
|
40
|
-
collapseInlineTagWhitespace: true,
|
|
41
|
-
collapseWhitespace: true,
|
|
42
|
-
minifyCSS: true,
|
|
43
|
-
minifyJS: true,
|
|
44
|
-
removeScriptTypeAttributes: true,
|
|
45
|
-
removeStyleLinkTypeAttributes: true,
|
|
46
|
-
}).trim()
|
|
47
|
-
})
|
|
48
|
-
// Publication
|
|
49
|
-
await config.emit('silex:publish:start', { id, files, req})
|
|
50
|
-
let url
|
|
51
|
-
try {
|
|
52
|
-
url = await publish(id, files, req.body.data)
|
|
53
|
-
} catch (err) {
|
|
54
|
-
console.error('Error publishing the website', err)
|
|
55
|
-
res.status(500).json({ message: `Error publishing the website. ${err.message}`})
|
|
56
|
-
return
|
|
57
|
-
}
|
|
58
|
-
const mutable = { id, files, req, res, url, statusUrl: options.statusUrl }
|
|
59
|
-
await config.emit('silex:publish:end', mutable)
|
|
60
|
-
res.json({
|
|
61
|
-
url: mutable.url,
|
|
62
|
-
statusUrl: mutable.statusUrl,
|
|
63
|
-
})
|
|
64
|
-
}
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
app.use(noCache, router)
|
|
68
|
-
})
|
|
69
|
-
}
|
package/src/plugins/SslPlugin.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
const express = require('express')
|
|
2
|
-
const { readFileSync } = require('fs')
|
|
3
|
-
const { createServer } = require('https')
|
|
4
|
-
const fromorceSSL = require('express-force-ssl')
|
|
5
|
-
|
|
6
|
-
// interface SslOptions {
|
|
7
|
-
// forceHttps?: boolean
|
|
8
|
-
// trustXFPHeader?: boolean
|
|
9
|
-
// privateKey?: string
|
|
10
|
-
// certificate?: string
|
|
11
|
-
// sslPort?: string
|
|
12
|
-
// }
|
|
13
|
-
|
|
14
|
-
module.exports = async function(config, opts = {}) {
|
|
15
|
-
// Options with defaults
|
|
16
|
-
const options = {
|
|
17
|
-
forceHttps: process.env.SILEX_FORCE_HTTPS === 'true',
|
|
18
|
-
trustXFPHeader: process.env.SILEX_FORCE_HTTPS_TRUST_XFP_HEADER === 'true',
|
|
19
|
-
privateKey: process.env.SILEX_SSL_PRIVATE_KEY,
|
|
20
|
-
certificate: process.env.SILEX_SSL_CERTIFICATE,
|
|
21
|
-
sslPort: process.env.SSL_PORT || '443',
|
|
22
|
-
...opts,
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Add routes on silex startup
|
|
26
|
-
config.on('silex:startup:start', ({app}) => {
|
|
27
|
-
const router = express.Router()
|
|
28
|
-
|
|
29
|
-
// SSL
|
|
30
|
-
// force ssl if the env var SILEX_FORCE_HTTPS is set
|
|
31
|
-
if (options.forceHttps) {
|
|
32
|
-
console.log('> Force SSL option is enabled')
|
|
33
|
-
app.set('forceSSLOptions', {
|
|
34
|
-
trustXFPHeader: !!options.trustXFPHeader,
|
|
35
|
-
})
|
|
36
|
-
router.use(forceSSL)
|
|
37
|
-
} else {
|
|
38
|
-
console.log('> Force SSL option is disabled, env var SILEX_FORCE_HTTPS not set')
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// SSL certificate
|
|
42
|
-
if (options.privateKey && options.certificate) {
|
|
43
|
-
console.log('> SSL certificate is enabled, found certificate:', options.certificate)
|
|
44
|
-
try {
|
|
45
|
-
const privateKey = readFileSync(options.privateKey).toString()
|
|
46
|
-
const certificate = readFileSync(options.certificate).toString()
|
|
47
|
-
|
|
48
|
-
const sslServerOptions = {
|
|
49
|
-
key: privateKey,
|
|
50
|
-
cert: certificate,
|
|
51
|
-
requestCert: true,
|
|
52
|
-
rejectUnauthorized: false,
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
createServer(sslServerOptions, this).listen(options.sslPort, () => {
|
|
56
|
-
console.log('SSL: listening on port ', options.sslPort)
|
|
57
|
-
})
|
|
58
|
-
} catch (e) {
|
|
59
|
-
console.error('SSL: load certificate failed.', e)
|
|
60
|
-
}
|
|
61
|
-
} else {
|
|
62
|
-
console.log('> SSL certificate disabled, env vars SILEX_SSL_CERTIFICATE and SILEX_SSL_PRIVATE_KEY not set')
|
|
63
|
-
}
|
|
64
|
-
app.use(router)
|
|
65
|
-
})
|
|
66
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
const express = require('express')
|
|
2
|
-
const nodeModules = require('node_modules-path')
|
|
3
|
-
const serveStatic = require('serve-static')
|
|
4
|
-
const { withCache } = require('./Cache')
|
|
5
|
-
|
|
6
|
-
const Path = require('path')
|
|
7
|
-
|
|
8
|
-
// type StaticOptions = {
|
|
9
|
-
// routes?: {
|
|
10
|
-
// path?: string
|
|
11
|
-
// route?: string
|
|
12
|
-
// module?: string
|
|
13
|
-
// }[]
|
|
14
|
-
// }
|
|
15
|
-
|
|
16
|
-
module.exports = async function(config, opts = {}) {
|
|
17
|
-
// Options with defaults
|
|
18
|
-
const options = {
|
|
19
|
-
rootPath: Path.join(__dirname, '../..'),
|
|
20
|
-
routes: [
|
|
21
|
-
{
|
|
22
|
-
route: '/',
|
|
23
|
-
path: 'public',
|
|
24
|
-
}, {
|
|
25
|
-
route: '/',
|
|
26
|
-
path: 'dist/client',
|
|
27
|
-
},
|
|
28
|
-
]
|
|
29
|
-
// add project route for source maps
|
|
30
|
-
.concat(config.debug ? [{
|
|
31
|
-
route: '/',
|
|
32
|
-
path: './',
|
|
33
|
-
}] : []),
|
|
34
|
-
...opts,
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
config.on('silex:startup:start', ({app}) => {
|
|
38
|
-
const router = express.Router()
|
|
39
|
-
options.routes
|
|
40
|
-
.forEach(folder => {
|
|
41
|
-
// either the module root folder or silex root folder
|
|
42
|
-
const path = Path.join(options.rootPath, folder.path || '')
|
|
43
|
-
if (!folder.route) throw new Error('The config for static module has no `route` attribute: ' + folder)
|
|
44
|
-
router.use(folder.route, serveStatic(path))
|
|
45
|
-
})
|
|
46
|
-
app.use(withCache, router)
|
|
47
|
-
})
|
|
48
|
-
}
|