@silexlabs/silex 3.0.1-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.
- package/.env.default +3 -2
- package/.silex.js +39 -1
- package/README.md +37 -35
- package/dist/client/client/api.d.ts +8 -1
- package/dist/client/client/assetUrl.d.ts +54 -0
- package/dist/client/client/config.d.ts +60 -1
- package/dist/client/client/events.d.ts +19 -10
- package/dist/client/client/grapesjs/PublicationManager.d.ts +6 -8
- package/dist/client/client/grapesjs/PublicationUi.d.ts +8 -10
- 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 +6 -2
- package/dist/client/client/grapesjs/internal-links.d.ts +1 -1
- package/dist/client/client/grapesjs/keymaps.d.ts +123 -0
- package/dist/client/client/grapesjs/new-page-dialog.d.ts +1 -1
- package/dist/client/client/grapesjs/page-panel.d.ts +7 -1
- package/dist/client/client/grapesjs/project-bar.d.ts +20 -0
- package/dist/client/client/grapesjs/resize-panel.d.ts +1 -0
- package/dist/client/client/grapesjs/rich-text.d.ts +4 -1
- package/dist/client/client/grapesjs/semantic.d.ts +1 -1
- package/dist/client/client/grapesjs/settings-sections.d.ts +16 -0
- package/dist/client/client/grapesjs/settings.d.ts +3 -1
- package/dist/client/client/grapesjs/storage.d.ts +1 -0
- package/dist/client/client/grapesjs/symbolDialogs.d.ts +1 -1
- package/dist/client/client/grapesjs/view-buttons.d.ts +1 -0
- package/dist/client/client/index.d.ts +5 -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 -1
- package/dist/client/constants.d.ts +3 -0
- package/dist/client/css/admin.css +1107 -411
- 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 +305 -170
- package/dist/client/js/main.js.LICENSE.txt +21 -1
- package/dist/client/page.d.ts +1 -1
- 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 +59 -35
- package/dist/plugins/client/client/events.d.ts +19 -10
- package/dist/plugins/client/client/events.js +11 -0
- package/dist/plugins/client/client/events.js.map +1 -1
- package/dist/plugins/client/plugins/client/template.js +119 -71
- package/dist/plugins/client/plugins/client/template.js.map +1 -1
- 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 +59 -35
- package/dist/plugins/client/types.js +23 -0
- package/dist/plugins/client/types.js.map +1 -1
- package/dist/plugins/server/constants.d.ts +3 -0
- package/dist/plugins/server/constants.js +28 -1
- package/dist/plugins/server/constants.js.map +1 -1
- package/dist/plugins/server/plugins/server/Cache.js +9 -5
- package/dist/plugins/server/plugins/server/Cache.js.map +1 -1
- 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 +5 -2
- package/dist/plugins/server/plugins/server/FtpConnector.js +38 -23
- package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -1
- package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +63 -9
- package/dist/plugins/server/plugins/server/GitlabConnector.js +367 -91
- package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -1
- 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/SslPlugin.js +6 -6
- package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -1
- package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +8 -1
- package/dist/plugins/server/plugins/server/StaticPlugin.js +5 -31
- package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -1
- package/dist/plugins/server/server/config.js +8 -9
- package/dist/plugins/server/server/config.js.map +1 -1
- package/dist/plugins/server/server/connectors/FsHosting.d.ts +3 -2
- package/dist/plugins/server/server/connectors/FsHosting.js +18 -7
- package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -1
- package/dist/plugins/server/server/connectors/FsStorage.d.ts +3 -1
- package/dist/plugins/server/server/connectors/FsStorage.js +35 -28
- package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -1
- package/dist/plugins/server/server/connectors/connectors.d.ts +7 -7
- package/dist/plugins/server/server/connectors/connectors.js +6 -7
- package/dist/plugins/server/server/connectors/connectors.js.map +1 -1
- package/dist/plugins/server/server/events.js +16 -0
- package/dist/plugins/server/server/events.js.map +1 -1
- package/dist/plugins/server/server/jobs.d.ts +6 -0
- package/dist/plugins/server/server/jobs.js +12 -8
- package/dist/plugins/server/server/jobs.js.map +1 -1
- package/dist/plugins/server/server/utils/validation.js +1 -2
- package/dist/plugins/server/server/utils/validation.js.map +1 -1
- package/dist/plugins/server/types.d.ts +59 -35
- package/dist/plugins/server/types.js +24 -1
- package/dist/plugins/server/types.js.map +1 -1
- package/dist/server/constants.js +27 -1
- package/dist/server/plugins/server/Cache.js +9 -5
- package/dist/server/server/api/api.js +1 -1
- package/dist/server/server/api/connectorApi.js +154 -25
- package/dist/server/server/api/publicationApi.js +17 -25
- package/dist/server/server/api/websiteApi.js +30 -8
- package/dist/server/server/cli.js +9 -6
- package/dist/server/server/config.js +8 -9
- package/dist/server/server/connectors/FsHosting.js +17 -7
- package/dist/server/server/connectors/FsStorage.js +34 -28
- package/dist/server/server/connectors/connectors.js +6 -7
- package/dist/server/server/express.js +4 -5
- package/dist/server/server/index.js +5 -1
- package/dist/server/server/jobs.js +11 -8
- package/dist/server/server/utils/validation.js +1 -2
- package/dist/server/types.js +13 -1
- package/package.json +56 -42
- 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 +5 -23
- package/src/css/_variables.scss +23 -20
- package/src/css/dialog.scss +27 -1
- 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 +84 -10
- package/src/css/index.scss +12 -1
- package/src/css/light.scss +7 -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/ts/client/api.ts +38 -14
- package/src/ts/client/assetUrl.test.ts +164 -0
- package/src/ts/client/assetUrl.ts +254 -0
- package/src/ts/client/config.ts +133 -5
- package/src/ts/client/events.ts +21 -9
- package/src/ts/client/grapesjs/LoginDialog.ts +4 -2
- package/src/ts/client/grapesjs/PublicationManager.ts +180 -54
- package/src/ts/client/grapesjs/PublicationUi.ts +122 -86
- 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 +11 -8
- package/{dist/plugins/client/page.js → src/ts/client/grapesjs/footer.ts} +24 -13
- package/src/ts/client/grapesjs/img.ts +147 -0
- package/src/ts/client/grapesjs/index.ts +234 -52
- package/src/ts/client/grapesjs/internal-links.test.ts +2 -1
- package/src/ts/client/grapesjs/internal-links.ts +14 -7
- package/src/ts/client/grapesjs/keymaps.ts +207 -0
- package/src/ts/client/grapesjs/new-page-dialog.ts +2 -3
- package/src/ts/client/grapesjs/page-panel.ts +92 -7
- package/src/ts/client/grapesjs/project-bar.ts +116 -72
- package/src/ts/client/grapesjs/resize-panel.ts +20 -0
- package/src/ts/client/grapesjs/rich-text.ts +21 -13
- package/src/ts/client/grapesjs/semantic.ts +3 -3
- package/src/ts/client/grapesjs/settings-sections.ts +117 -0
- package/src/ts/client/grapesjs/settings.ts +174 -96
- package/src/ts/client/grapesjs/storage.ts +98 -33
- package/src/ts/client/grapesjs/symbolDialogs.ts +3 -4
- package/src/ts/{plugins/server/AuthPlugin.ts → client/grapesjs/view-buttons.ts} +23 -19
- package/src/ts/client/index.ts +35 -16
- package/src/ts/client/publication-transformers.test.ts +207 -0
- package/src/ts/client/publication-transformers.ts +280 -0
- package/{dist/plugins/client/client/utils.js → src/ts/client/publish-custom-code-block.ts} +14 -8
- package/src/ts/client/publish-fonts.ts +36 -0
- package/src/ts/client/utils.ts +53 -1
- package/src/ts/constants.ts +31 -0
- package/src/ts/page.ts +2 -2
- package/src/ts/plugins/client/template.ts +125 -75
- package/src/ts/plugins/client/website-info.ts +84 -0
- package/src/ts/plugins/server/Cache.ts +6 -2
- package/src/ts/plugins/server/DownloadConnector.ts +146 -0
- package/src/ts/plugins/server/FtpConnector.ts +47 -21
- package/src/ts/plugins/server/GitlabConnector.ts +423 -108
- package/src/ts/plugins/server/GitlabHostingConnector.ts +215 -0
- package/src/ts/plugins/server/SslPlugin.ts +5 -5
- package/src/ts/plugins/server/StaticPlugin.ts +3 -30
- package/src/ts/server/api/connectorApi.ts +165 -28
- package/src/ts/server/api/publicationApi.ts +17 -24
- package/src/ts/server/api/websiteApi.ts +57 -14
- package/src/ts/server/cli.ts +7 -5
- package/src/ts/server/config.ts +9 -10
- package/src/ts/server/connectors/FsHosting.ts +14 -8
- package/src/ts/server/connectors/FsStorage.ts +40 -7
- package/src/ts/server/connectors/connectors.ts +8 -6
- package/src/ts/server/events.ts +17 -0
- package/src/ts/server/express.ts +2 -2
- package/src/ts/server/index.ts +6 -0
- package/src/ts/server/jobs.ts +14 -2
- package/src/ts/server/utils/BackwardCompat.ts +530 -529
- package/src/ts/types.ts +78 -34
- package/dist/plugins/client/client/utils.d.ts +0 -1
- package/dist/plugins/client/client/utils.js.map +0 -1
- package/dist/plugins/client/page.d.ts +0 -2
- package/dist/plugins/client/page.js.map +0 -1
- package/dist/plugins/client/plugins/client/publicationRenderer.d.ts +0 -2
- package/dist/plugins/client/plugins/client/publicationRenderer.js +0 -128
- package/dist/plugins/client/plugins/client/publicationRenderer.js.map +0 -1
- package/dist/plugins/server/plugins/server/AuthPlugin.d.ts +0 -1
- package/dist/plugins/server/plugins/server/AuthPlugin.js +0 -38
- package/dist/plugins/server/plugins/server/AuthPlugin.js.map +0 -1
- package/dist/plugins/server/plugins/server/HooksPlugin.d.ts +0 -7
- package/dist/plugins/server/plugins/server/HooksPlugin.js +0 -74
- package/dist/plugins/server/plugins/server/HooksPlugin.js.map +0 -1
- package/src/example-client-config.js +0 -64
- package/src/ts/plugins/client/publicationRenderer.ts +0 -128
- package/src/ts/plugins/server/HooksPlugin.ts +0 -76
|
@@ -16,16 +16,18 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { Client } from 'basic-ftp'
|
|
19
|
-
import {
|
|
19
|
+
import { Readable } from 'stream'
|
|
20
20
|
import { ConnectorFile, ConnectorFileContent, HostingConnector, StatusCallback, StorageConnector, contentToReadable, contentToString, toConnectorData, toConnectorEnum} from '../../server/connectors/connectors'
|
|
21
21
|
import { requiredParam } from '../../server/utils/validation'
|
|
22
22
|
import { WEBSITE_DATA_FILE, WEBSITE_META_DATA_FILE } from '../../constants'
|
|
23
23
|
import { ConnectorType, ConnectorUser, WebsiteMeta, FileMeta, JobData, JobStatus, WebsiteId, PublicationJobData, WebsiteMetaFileContent, defaultWebsiteData, WebsiteData, ConnectorOptions } from '../../types'
|
|
24
|
-
import { jobError, jobSuccess, startJob } from '../../server/jobs'
|
|
25
24
|
import { ServerConfig } from '../../server/config'
|
|
26
25
|
import { join } from 'path'
|
|
27
|
-
import {
|
|
26
|
+
import { tmpdir } from 'os'
|
|
28
27
|
import { v4 as uuid } from 'uuid'
|
|
28
|
+
import { JobManager } from '../../server/jobs'
|
|
29
|
+
import { mkdtemp, rm, rmdir } from 'fs/promises'
|
|
30
|
+
import { createReadStream } from 'fs'
|
|
29
31
|
|
|
30
32
|
/**
|
|
31
33
|
* @fileoverview FTP connector for Silex
|
|
@@ -64,6 +66,7 @@ export interface FtpOptions {
|
|
|
64
66
|
type: ConnectorType
|
|
65
67
|
path: string
|
|
66
68
|
assetsFolder: string
|
|
69
|
+
cssFolder: string // For publication only
|
|
67
70
|
authorizeUrl: string
|
|
68
71
|
authorizePath: string
|
|
69
72
|
}
|
|
@@ -228,7 +231,7 @@ details > p {
|
|
|
228
231
|
export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
229
232
|
connectorId = 'ftp'
|
|
230
233
|
displayName = 'Ftp'
|
|
231
|
-
icon = 'ftp'
|
|
234
|
+
icon = '/assets/ftp.png'
|
|
232
235
|
options: FtpOptions
|
|
233
236
|
connectorType: ConnectorType
|
|
234
237
|
color = '#ffffff'
|
|
@@ -238,8 +241,9 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
238
241
|
this.options = {
|
|
239
242
|
path: '',
|
|
240
243
|
assetsFolder: 'assets',
|
|
241
|
-
|
|
242
|
-
|
|
244
|
+
cssFolder: 'css',
|
|
245
|
+
authorizeUrl: './api/authorize/ftp/',
|
|
246
|
+
authorizePath: './api/authorize/ftp/',
|
|
243
247
|
...opts,
|
|
244
248
|
} as FtpOptions
|
|
245
249
|
if(!this.options.type) throw new Error('missing type in option of FtpConnector')
|
|
@@ -270,9 +274,13 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
270
274
|
}
|
|
271
275
|
|
|
272
276
|
private async read(ftp: Client, path: string): Promise<Readable> {
|
|
273
|
-
const
|
|
274
|
-
|
|
275
|
-
|
|
277
|
+
const tempDir = await mkdtemp(join(tmpdir(), 'silex-tmp'))
|
|
278
|
+
const tempPath = join(tempDir, 'silex-ftp.tmp')
|
|
279
|
+
await ftp.downloadTo(tempPath, path)
|
|
280
|
+
const rStream = createReadStream(tempPath)
|
|
281
|
+
await rm(tempPath)
|
|
282
|
+
await rmdir(tempDir)
|
|
283
|
+
return rStream
|
|
276
284
|
}
|
|
277
285
|
|
|
278
286
|
private async readdir(ftp: Client, path: string): Promise<FileMeta[]> {
|
|
@@ -335,7 +343,6 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
335
343
|
|
|
336
344
|
async getLoginForm(session: FtpSession, redirectTo: string): Promise<string | null> {
|
|
337
345
|
const { host, user, pass, port, secure, publicationPath, storageRootPath, websiteUrl } = this.sessionData(session)
|
|
338
|
-
requiredParam(type, 'connector type')
|
|
339
346
|
return `
|
|
340
347
|
<style>
|
|
341
348
|
${formCss}
|
|
@@ -370,7 +377,7 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
370
377
|
async getUser(session: FtpSession): Promise<ConnectorUser> {
|
|
371
378
|
return {
|
|
372
379
|
name: this.sessionData(session).user,
|
|
373
|
-
picture: 'data
|
|
380
|
+
picture: 'data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' height=\'1em\' viewBox=\'0 0 448 512\'%3E%3C!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --%3E%3Cpath d=\'M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z\'/%3E%3C/svg%3E',
|
|
374
381
|
storage: await toConnectorData(session, this)
|
|
375
382
|
}
|
|
376
383
|
}
|
|
@@ -402,8 +409,6 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
402
409
|
const ftp = await this.getClient(this.sessionData(session))
|
|
403
410
|
// Get stats for the website folder
|
|
404
411
|
const folder = join(this.rootPath(session), websiteId)
|
|
405
|
-
const lastMod = await ftp.lastMod(folder)
|
|
406
|
-
// Read the meta data file to get the meta data set by the user
|
|
407
412
|
const path = join(this.rootPath(session), websiteId, WEBSITE_META_DATA_FILE)
|
|
408
413
|
const readable = await this.read(ftp, path)
|
|
409
414
|
const meta = JSON.parse(await contentToString(readable)) as WebsiteMetaFileContent
|
|
@@ -411,9 +416,6 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
411
416
|
// Return all meta
|
|
412
417
|
return {
|
|
413
418
|
websiteId,
|
|
414
|
-
//url: await this.getFileUrl(session, websiteId, WEBSITE_DATA_FILE_NAME),
|
|
415
|
-
createdAt: lastMod,
|
|
416
|
-
updatedAt: lastMod,
|
|
417
419
|
...meta,
|
|
418
420
|
}
|
|
419
421
|
} catch(err) {
|
|
@@ -488,11 +490,33 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
488
490
|
this.closeClient(ftp)
|
|
489
491
|
}
|
|
490
492
|
|
|
493
|
+
async duplicateWebsite(session: FtpSession, websiteId: string): Promise<void> {
|
|
494
|
+
const newWebsiteId = uuid()
|
|
495
|
+
const storageRootPath = this.rootPath(session)
|
|
496
|
+
const ftp = await this.getClient(this.sessionData(session))
|
|
497
|
+
const websitePath = join(storageRootPath, websiteId)
|
|
498
|
+
const newWebsitePath = join(storageRootPath, newWebsiteId)
|
|
499
|
+
const tempDir = await mkdtemp(tmpdir())
|
|
500
|
+
await ftp.downloadToDir(websitePath, tempDir)
|
|
501
|
+
await ftp.uploadFromDir(tempDir, newWebsitePath)
|
|
502
|
+
this.closeClient(ftp)
|
|
503
|
+
}
|
|
504
|
+
|
|
491
505
|
async writeAssets(
|
|
492
506
|
session: any,
|
|
493
507
|
id: WebsiteId,
|
|
494
508
|
files: ConnectorFile[],
|
|
495
509
|
statusCbk?: StatusCallback,
|
|
510
|
+
): Promise<void> {
|
|
511
|
+
return this.writeFile(session, id, files, this.options.assetsFolder, statusCbk)
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
async writeFile(
|
|
515
|
+
session: any,
|
|
516
|
+
id: WebsiteId,
|
|
517
|
+
files: ConnectorFile[],
|
|
518
|
+
relativePath: string,
|
|
519
|
+
statusCbk?: StatusCallback,
|
|
496
520
|
): Promise<void> {
|
|
497
521
|
// Connect to FTP server
|
|
498
522
|
statusCbk && statusCbk({
|
|
@@ -517,7 +541,7 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
517
541
|
message: `Writing file ${file.path}`,
|
|
518
542
|
status: JobStatus.IN_PROGRESS,
|
|
519
543
|
})
|
|
520
|
-
const dstPath = join(this.options.path, rootPath, id,
|
|
544
|
+
const dstPath = join(this.options.path, rootPath, id, relativePath, file.path)
|
|
521
545
|
lastFile = file
|
|
522
546
|
const result = await this.write(ftp, dstPath, file.content, message => {
|
|
523
547
|
statusCbk && statusCbk({
|
|
@@ -546,7 +570,7 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
546
570
|
const storageRootPath = this.rootPath(session)
|
|
547
571
|
const ftp = await this.getClient(this.sessionData(session))
|
|
548
572
|
const dirPath = join(this.options.path, storageRootPath, id, this.options.assetsFolder, path)
|
|
549
|
-
const asset = this.read(ftp, dirPath)
|
|
573
|
+
const asset = await this.read(ftp, dirPath)
|
|
550
574
|
this.closeClient(ftp)
|
|
551
575
|
return asset
|
|
552
576
|
}
|
|
@@ -568,7 +592,7 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
568
592
|
return this.sessionData(session).websiteUrl ?? ''
|
|
569
593
|
}
|
|
570
594
|
|
|
571
|
-
async publish(session: FtpSession, id:
|
|
595
|
+
async publish(session: FtpSession, id: WebsiteId, files: ConnectorFile[], {startJob, jobSuccess, jobError}: JobManager): Promise<JobData> {
|
|
572
596
|
const job = startJob(`Publishing to ${this.displayName}`) as PublicationJobData
|
|
573
597
|
job.logs = [[`Publishing to ${this.displayName}`]]
|
|
574
598
|
job.errors = [[]]
|
|
@@ -576,9 +600,11 @@ export default class FtpConnector implements StorageConnector<FtpSession> {
|
|
|
576
600
|
const rootPath = this.rootPath(session)
|
|
577
601
|
const ftp = await this.getClient(this.sessionData(session))
|
|
578
602
|
await this.mkdir(ftp, rootPath)
|
|
579
|
-
await this.mkdir(ftp, join(rootPath,
|
|
603
|
+
await this.mkdir(ftp, join(rootPath, this.options.assetsFolder))
|
|
604
|
+
await this.mkdir(ftp, join(rootPath, this.options.cssFolder))
|
|
580
605
|
// Write files
|
|
581
|
-
|
|
606
|
+
// Do not await for the result, return the job and continue the publication in the background
|
|
607
|
+
this.writeFile(session, '', files, '', async ({status, message}) => {
|
|
582
608
|
// Update the job status
|
|
583
609
|
job.status = status
|
|
584
610
|
job.message = message
|