@fontoxml/fontoxml-development-tools 3.10.0 → 3.12.0-beta.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/npm-shrinkwrap.json +3842 -8330
- package/package.json +13 -19
- package/src/App.js +1 -1
- package/src/FdtCommand.js +3 -3
- package/src/FdtLicense.js +95 -114
- package/src/ModuleRegistrationApi.js +44 -16
- package/src/addCoreModulesToApp.js +8 -0
- package/src/editorVersions.js +19 -5
- package/src/modules/connectors/index.js +109 -16
- package/src/modules/connectors/instanceBuild/Dockerfile.build +1 -1
- package/src/modules/connectors/instanceBuild/Dockerfile.run +1 -1
- package/src/modules/connectors/instanceDevBuild/docker-compose.yml +2 -2
- package/src/modules/content-quality/index.js +101 -20
- package/src/modules/content-quality/instanceBuild/Dockerfile +1 -1
- package/src/modules/content-quality/instanceDevBuild/docker-compose.yml +1 -1
- package/src/modules/core/src/precontroller.help.js +23 -26
- package/src/modules/document-history/index.js +101 -20
- package/src/modules/document-history/instanceBuild/Dockerfile +1 -1
- package/src/modules/document-history/instanceDevBuild/docker-compose.yml +1 -1
- package/src/modules/editor/dev-cms/connectors-cms-standard/configureConnectorsCmsStandardDocumentRouter.js +10 -0
- package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentHistoryGetPostRouteHandler.js +51 -0
- package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentPostRouteHandler.js +65 -76
- package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentPresearchPostRouteHandler.js +10 -7
- package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentPreviewRouteHandler.js +10 -0
- package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentRevisionGetPostRouteHandler.js +69 -0
- package/src/modules/editor/src/commands/command.convert.editor.controller.js +11 -4
- package/src/modules/editor/src/commands/command.convert.package.controller.js +11 -4
- package/src/modules/editor/src/getAppManifest.js +3 -3
- package/src/modules/editor/src/getWebpackConfig.js +13 -0
- package/src/modules/editor/src/webpackPlugins/CheckDeepImportsResolvePlugin.js +4 -0
- package/src/modules/editor-pre-7-7-0/src/api/downloadEditorSDK.js +16 -12
- package/src/modules/editor-pre-7-7-0/src/api/executeAndLog.js +3 -2
- package/src/modules/editor-pre-7-7-0/src/api/init/createConfigConfiguration.js +86 -48
- package/src/modules/editor-pre-7-7-0/src/api/schema/compile.js +16 -22
- package/src/modules/editor-pre-7-7-0/src/api/schema/createSchemaPackages.js +8 -0
- package/src/modules/editor-pre-7-7-0/src/api/schema/getSchemaFontoJson.js +76 -48
- package/src/modules/editor-pre-7-7-0/src/api/schema/zipHelpers.js +6 -1
- package/src/modules/editor-pre-7-7-0/src/command.schema.compile.controller.js +51 -2
- package/src/modules/editor-pre-7-7-0/test/api/init/createConfigConfiguration.test.js +71 -33
- package/src/modules/editor-pre-7-7-0/test/api/init/fixtures/configjs-7160.js +45 -0
- package/src/modules/editor-pre-7-7-0/test/api/init/fixtures/configjs-800.js +45 -0
- package/src/modules/editor-pre-7-7-0/test/api/init/fixtures/configjs-810.js +32 -0
- package/src/modules/editor-pre-7-7-0/test/api/schema/buildSchemaExperienceConfigurationModel.test.js +70 -79
- package/src/modules/editor-pre-7-7-0/test/api/schema/fixtures/dita-example-schema-bundle/listOfFiles.json +1 -36
- package/src/modules/editor-pre-7-7-0/test/api/schema/fixtures/invalid-fonto-json/fonto.json +1 -0
- package/src/modules/editor-pre-7-7-0/test/api/schema/getSchemaFontoJson.test.js +174 -0
- package/src/modules/editor-pre-7-7-0/test/api/schema/zipSchemaSource.test.js +10 -4
- package/src/modules/editor-pre-7-7-0/test/schemaCompileController.test.js +205 -0
- package/src/modules/localization/index.js +2 -2
- package/src/modules/operations/src/api/getOperations.js +3 -3
- package/src/modules/review/index.js +103 -18
- package/src/modules/review/instanceBuild/Dockerfile +1 -1
- package/src/modules/review/instanceDevBuild/docker-compose.yml +1 -1
- package/src/modules/schema/src/api/getSchemaSummaries.js +2 -2
- package/src/modules/schema/test/getSchemaSummaries.test.js +14 -10
- package/src/modules/schema-compiler/index.js +99 -18
- package/src/modules/schema-compiler/instanceBuild/Dockerfile +1 -1
- package/src/modules/schema-compiler/instanceDevBuild/docker-compose.yml +1 -1
- package/src/modules/shared/index.js +3 -0
- package/src/modules/shared/package.json +14 -0
- package/src/modules/shared/src/addBackendDockerCommands.js +334 -0
- package/src/modules/shared/src/addBackendDownloadSelfContainedCommands.js +78 -0
- package/src/modules/shared/src/addBackendVersionsCommands.js +55 -0
- package/src/modules/shared/src/controller-templates/command.backend.build.controller.factory.js +273 -0
- package/src/modules/shared/src/controller-templates/command.backend.download-self-contained.controller.factory.js +131 -0
- package/src/modules/shared/src/controller-templates/command.backend.init.controller.factory.js +88 -0
- package/src/modules/shared/src/controller-templates/command.backend.run.controller.factory.js +420 -0
- package/src/modules/shared/src/controller-templates/command.backend.upgrade.controller.factory.js +79 -0
- package/src/modules/shared/src/controller-templates/command.backend.versions.controller.factory.js +23 -0
- package/src/modules/shared/src/controller-templates/docker/BackendManifest.js +42 -0
- package/src/modules/shared/src/controller-templates/docker/copyWhitelistedFiles.js +23 -0
- package/src/modules/shared/src/controller-templates/docker/dockerCleanup.js +146 -0
- package/src/modules/shared/src/controller-templates/docker/tryDockerLogout.js +31 -0
- package/src/modules/shared/src/controller-templates/docker/validateBackendInstance.js +48 -0
- package/src/modules/shared/src/ensureDockerCommands.js +61 -0
- package/src/modules/shared/src/executeAndLog.js +113 -0
- package/src/modules/{review/src/utilities/setEntryVisibility.js → shared/src/setFileVisibility.js} +8 -2
- package/src/modules/spell-checker/index.js +101 -18
- package/src/modules/spell-checker/instanceBuild/Dockerfile +1 -1
- package/src/modules/spell-checker/instanceDevBuild/docker-compose.yml +1 -1
- package/test/module.shared.test.js +81 -0
- package/src/modules/connectors/src/command.build.controller.js +0 -256
- package/src/modules/connectors/src/command.build.js +0 -54
- package/src/modules/connectors/src/command.download-self-contained.controller.js +0 -110
- package/src/modules/connectors/src/command.download-self-contained.js +0 -50
- package/src/modules/connectors/src/command.init.controller.js +0 -91
- package/src/modules/connectors/src/command.init.js +0 -42
- package/src/modules/connectors/src/command.run.controller.js +0 -462
- package/src/modules/connectors/src/command.run.js +0 -67
- package/src/modules/connectors/src/command.upgrade.controller.js +0 -52
- package/src/modules/connectors/src/command.upgrade.js +0 -42
- package/src/modules/connectors/src/command.versions.controller.js +0 -14
- package/src/modules/connectors/src/command.versions.js +0 -25
- package/src/modules/connectors/src/utilities/FontoxmlConnectorsManifest.js +0 -32
- package/src/modules/connectors/src/utilities/cleanup.js +0 -70
- package/src/modules/connectors/src/utilities/constants.js +0 -42
- package/src/modules/connectors/src/utilities/copyWhitelistedFiles.js +0 -22
- package/src/modules/connectors/src/utilities/executeAndLog.js +0 -63
- package/src/modules/connectors/src/utilities/getVerbosityLevel.js +0 -11
- package/src/modules/connectors/src/utilities/getWhitelist.js +0 -16
- package/src/modules/connectors/src/utilities/setEntryVisibility.js +0 -22
- package/src/modules/connectors/src/utilities/validateInstance.js +0 -29
- package/src/modules/content-quality/src/command.build.controller.js +0 -260
- package/src/modules/content-quality/src/command.build.js +0 -56
- package/src/modules/content-quality/src/command.download-self-contained.controller.js +0 -110
- package/src/modules/content-quality/src/command.download-self-contained.js +0 -52
- package/src/modules/content-quality/src/command.init.controller.js +0 -91
- package/src/modules/content-quality/src/command.init.js +0 -44
- package/src/modules/content-quality/src/command.run.controller.js +0 -444
- package/src/modules/content-quality/src/command.run.js +0 -64
- package/src/modules/content-quality/src/command.upgrade.controller.js +0 -52
- package/src/modules/content-quality/src/command.upgrade.js +0 -44
- package/src/modules/content-quality/src/command.versions.controller.js +0 -14
- package/src/modules/content-quality/src/command.versions.js +0 -25
- package/src/modules/content-quality/src/utilities/FontoxmlFcqManifest.js +0 -30
- package/src/modules/content-quality/src/utilities/cleanup.js +0 -70
- package/src/modules/content-quality/src/utilities/constants.js +0 -44
- package/src/modules/content-quality/src/utilities/copyWhitelistedFiles.js +0 -22
- package/src/modules/content-quality/src/utilities/executeAndLog.js +0 -63
- package/src/modules/content-quality/src/utilities/getVerbosityLevel.js +0 -11
- package/src/modules/content-quality/src/utilities/getWhitelist.js +0 -16
- package/src/modules/content-quality/src/utilities/setEntryVisibility.js +0 -22
- package/src/modules/content-quality/src/utilities/validateInstance.js +0 -29
- package/src/modules/document-history/src/command.build.controller.js +0 -260
- package/src/modules/document-history/src/command.build.js +0 -56
- package/src/modules/document-history/src/command.download-self-contained.controller.js +0 -110
- package/src/modules/document-history/src/command.download-self-contained.js +0 -50
- package/src/modules/document-history/src/command.init.controller.js +0 -91
- package/src/modules/document-history/src/command.init.js +0 -44
- package/src/modules/document-history/src/command.run.controller.js +0 -444
- package/src/modules/document-history/src/command.run.js +0 -64
- package/src/modules/document-history/src/command.upgrade.controller.js +0 -52
- package/src/modules/document-history/src/command.upgrade.js +0 -44
- package/src/modules/document-history/src/command.versions.controller.js +0 -14
- package/src/modules/document-history/src/command.versions.js +0 -25
- package/src/modules/document-history/src/utilities/FontoxmlFdhManifest.js +0 -30
- package/src/modules/document-history/src/utilities/cleanup.js +0 -70
- package/src/modules/document-history/src/utilities/constants.js +0 -44
- package/src/modules/document-history/src/utilities/copyWhitelistedFiles.js +0 -22
- package/src/modules/document-history/src/utilities/executeAndLog.js +0 -63
- package/src/modules/document-history/src/utilities/getVerbosityLevel.js +0 -11
- package/src/modules/document-history/src/utilities/getWhitelist.js +0 -16
- package/src/modules/document-history/src/utilities/setEntryVisibility.js +0 -22
- package/src/modules/document-history/src/utilities/validateInstance.js +0 -29
- package/src/modules/review/src/command.build.controller.js +0 -256
- package/src/modules/review/src/command.build.js +0 -54
- package/src/modules/review/src/command.download-self-contained.controller.js +0 -107
- package/src/modules/review/src/command.download-self-contained.js +0 -50
- package/src/modules/review/src/command.init.controller.js +0 -89
- package/src/modules/review/src/command.init.js +0 -42
- package/src/modules/review/src/command.run.controller.js +0 -428
- package/src/modules/review/src/command.run.js +0 -60
- package/src/modules/review/src/command.upgrade.controller.js +0 -59
- package/src/modules/review/src/command.upgrade.js +0 -42
- package/src/modules/review/src/command.versions.controller.js +0 -12
- package/src/modules/review/src/command.versions.js +0 -25
- package/src/modules/review/src/utilities/FontoxmlReviewManifest.js +0 -30
- package/src/modules/review/src/utilities/cleanup.js +0 -70
- package/src/modules/review/src/utilities/constants.js +0 -42
- package/src/modules/review/src/utilities/copyWhitelistedFiles.js +0 -22
- package/src/modules/review/src/utilities/executeAndLog.js +0 -63
- package/src/modules/review/src/utilities/getVerbosityLevel.js +0 -11
- package/src/modules/review/src/utilities/getWhitelist.js +0 -16
- package/src/modules/review/src/utilities/validateInstance.js +0 -45
- package/src/modules/schema-compiler/src/command.build.controller.js +0 -256
- package/src/modules/schema-compiler/src/command.build.js +0 -54
- package/src/modules/schema-compiler/src/command.download-self-contained.controller.js +0 -110
- package/src/modules/schema-compiler/src/command.download-self-contained.js +0 -50
- package/src/modules/schema-compiler/src/command.init.controller.js +0 -91
- package/src/modules/schema-compiler/src/command.init.js +0 -42
- package/src/modules/schema-compiler/src/command.run.controller.js +0 -430
- package/src/modules/schema-compiler/src/command.run.js +0 -60
- package/src/modules/schema-compiler/src/command.upgrade.controller.js +0 -64
- package/src/modules/schema-compiler/src/command.upgrade.js +0 -42
- package/src/modules/schema-compiler/src/command.versions.controller.js +0 -14
- package/src/modules/schema-compiler/src/command.versions.js +0 -25
- package/src/modules/schema-compiler/src/utilities/FontoxmlSchemaCompilerManifest.js +0 -32
- package/src/modules/schema-compiler/src/utilities/cleanup.js +0 -70
- package/src/modules/schema-compiler/src/utilities/constants.js +0 -43
- package/src/modules/schema-compiler/src/utilities/copyWhitelistedFiles.js +0 -22
- package/src/modules/schema-compiler/src/utilities/executeAndLog.js +0 -63
- package/src/modules/schema-compiler/src/utilities/getVerbosityLevel.js +0 -11
- package/src/modules/schema-compiler/src/utilities/getWhitelist.js +0 -16
- package/src/modules/schema-compiler/src/utilities/setEntryVisibility.js +0 -22
- package/src/modules/schema-compiler/src/utilities/validateInstance.js +0 -47
- package/src/modules/spell-checker/src/command.build.controller.js +0 -257
- package/src/modules/spell-checker/src/command.build.js +0 -54
- package/src/modules/spell-checker/src/command.download-self-contained.controller.js +0 -110
- package/src/modules/spell-checker/src/command.download-self-contained.js +0 -50
- package/src/modules/spell-checker/src/command.init.controller.js +0 -91
- package/src/modules/spell-checker/src/command.init.js +0 -42
- package/src/modules/spell-checker/src/command.run.controller.js +0 -430
- package/src/modules/spell-checker/src/command.run.js +0 -62
- package/src/modules/spell-checker/src/command.upgrade.controller.js +0 -61
- package/src/modules/spell-checker/src/command.upgrade.js +0 -42
- package/src/modules/spell-checker/src/command.versions.controller.js +0 -14
- package/src/modules/spell-checker/src/command.versions.js +0 -25
- package/src/modules/spell-checker/src/utilities/FontoxmlSpellCheckerManifest.js +0 -32
- package/src/modules/spell-checker/src/utilities/cleanup.js +0 -70
- package/src/modules/spell-checker/src/utilities/constants.js +0 -42
- package/src/modules/spell-checker/src/utilities/copyWhitelistedFiles.js +0 -22
- package/src/modules/spell-checker/src/utilities/executeAndLog.js +0 -63
- package/src/modules/spell-checker/src/utilities/getVerbosityLevel.js +0 -11
- package/src/modules/spell-checker/src/utilities/getWhitelist.js +0 -16
- package/src/modules/spell-checker/src/utilities/setEntryVisibility.js +0 -22
- package/src/modules/spell-checker/src/utilities/validateInstance.js +0 -47
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
import constants from './constants.js';
|
|
5
|
-
import executeAndLog from './executeAndLog.js';
|
|
6
|
-
|
|
7
|
-
export default async function cleanup(
|
|
8
|
-
temporaryDirectoryPath,
|
|
9
|
-
projectName,
|
|
10
|
-
res,
|
|
11
|
-
verbosityLevel
|
|
12
|
-
) {
|
|
13
|
-
const temporaryDirectoryExists = await fs.exists(temporaryDirectoryPath);
|
|
14
|
-
if (!temporaryDirectoryExists) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const destroySpinner = res.spinner('Removing temporary resources...');
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
const dockerComposeFileExists = await fs.exists(
|
|
22
|
-
path.join(temporaryDirectoryPath, 'docker-compose.yml')
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
const errors = [];
|
|
26
|
-
const tasks = [
|
|
27
|
-
async () => {
|
|
28
|
-
if (dockerComposeFileExists && projectName) {
|
|
29
|
-
await executeAndLog(
|
|
30
|
-
res,
|
|
31
|
-
'docker-compose',
|
|
32
|
-
verbosityLevel === constants.VERBOSITY_LEVEL_DEBUG
|
|
33
|
-
? [
|
|
34
|
-
'-p',
|
|
35
|
-
projectName,
|
|
36
|
-
'--verbose',
|
|
37
|
-
'down',
|
|
38
|
-
'--rmi',
|
|
39
|
-
'local',
|
|
40
|
-
]
|
|
41
|
-
: ['-p', projectName, 'down', '--rmi', 'local'],
|
|
42
|
-
temporaryDirectoryPath,
|
|
43
|
-
verbosityLevel
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
async () => {
|
|
48
|
-
await fs.remove(temporaryDirectoryPath);
|
|
49
|
-
},
|
|
50
|
-
];
|
|
51
|
-
|
|
52
|
-
// Run all cleanup tasks in order. Continue on errors. But collect the errors.
|
|
53
|
-
for (let i = 0; i < tasks.length; i++) {
|
|
54
|
-
try {
|
|
55
|
-
await tasks[i]();
|
|
56
|
-
} catch (error) {
|
|
57
|
-
errors.push(error);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Only throw if a task have failed.
|
|
62
|
-
if (errors.length > 0) {
|
|
63
|
-
throw errors[0];
|
|
64
|
-
}
|
|
65
|
-
} catch (error) {
|
|
66
|
-
throw error;
|
|
67
|
-
} finally {
|
|
68
|
-
destroySpinner();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import { fileURLToPath } from 'url';
|
|
3
|
-
|
|
4
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = path.dirname(__filename);
|
|
6
|
-
|
|
7
|
-
export default {
|
|
8
|
-
DEFAULT_IMAGE_NAME: 'fonto-connectors',
|
|
9
|
-
DEFAULT_IMAGE_TAG: 'latest',
|
|
10
|
-
VERBOSITY_LEVEL_DEBUG: 'debug',
|
|
11
|
-
VERBOSITY_LEVEL_NORMAL: 'normal',
|
|
12
|
-
VERBOSITY_LEVEL_VERBOSE: 'verbose',
|
|
13
|
-
DOCUMENTATION_CONFIGURATION_GUIDE:
|
|
14
|
-
'http://documentation.fontoxml.com/display/FC/Connectors+configuration',
|
|
15
|
-
DOCUMENTATION_GETTING_STARTED_GUIDE:
|
|
16
|
-
'http://documentation.fontoxml.com/display/FC/Getting+started',
|
|
17
|
-
DOCUMENTATION_EXECUTE_ERROR:
|
|
18
|
-
'http://documentation.fontoxml.com/display/FC/Troubleshooting',
|
|
19
|
-
INSTANCE_BUILD_DIRECTORY_PATH: path.join(
|
|
20
|
-
__dirname,
|
|
21
|
-
'..',
|
|
22
|
-
'..',
|
|
23
|
-
'instanceBuild'
|
|
24
|
-
),
|
|
25
|
-
INSTANCE_DEV_BUILD_DIRECTORY_PATH: path.join(
|
|
26
|
-
__dirname,
|
|
27
|
-
'..',
|
|
28
|
-
'..',
|
|
29
|
-
'instanceDevBuild'
|
|
30
|
-
),
|
|
31
|
-
INSTANCE_TEMPLATE_DIRECTORY_PATH: path.join(
|
|
32
|
-
__dirname,
|
|
33
|
-
'..',
|
|
34
|
-
'..',
|
|
35
|
-
'instanceTemplate'
|
|
36
|
-
),
|
|
37
|
-
MANIFEST_FILENAME: '.fontoxmlConnectorsManifest',
|
|
38
|
-
REQUIRED_CONFIGURATION: ['editor', 'templates', 'documentProcessing.xml'],
|
|
39
|
-
TEMPLATE_DIRECTORY_NAME: '.connectorsTmp',
|
|
40
|
-
TEMPORARY_BUILD_DIRECTORY_NAME: '.connectorsBuildTmp',
|
|
41
|
-
WHITELIST: ['initializer-files', 'nlog.config'],
|
|
42
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
export default function copyWhitelistedFiles(
|
|
5
|
-
whitelistedFiles,
|
|
6
|
-
sourceDirectory,
|
|
7
|
-
destinationDirectory
|
|
8
|
-
) {
|
|
9
|
-
return Promise.all(
|
|
10
|
-
whitelistedFiles.map((item) => {
|
|
11
|
-
const itemPath = path.join(sourceDirectory, item);
|
|
12
|
-
return fs.exists(itemPath).then((exists) => {
|
|
13
|
-
if (exists) {
|
|
14
|
-
return fs.copy(
|
|
15
|
-
itemPath,
|
|
16
|
-
path.join(destinationDirectory, item)
|
|
17
|
-
);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
})
|
|
21
|
-
);
|
|
22
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import cp from 'child_process';
|
|
2
|
-
|
|
3
|
-
import constants from './constants.js';
|
|
4
|
-
|
|
5
|
-
export default function executeAndLog(
|
|
6
|
-
res,
|
|
7
|
-
command,
|
|
8
|
-
args,
|
|
9
|
-
currentWorkingDirectoryPath,
|
|
10
|
-
verbosityLevel,
|
|
11
|
-
showStdout,
|
|
12
|
-
processCreatedCallback
|
|
13
|
-
) {
|
|
14
|
-
return new Promise((resolve, reject) => {
|
|
15
|
-
const errors = [];
|
|
16
|
-
const childProcess = cp.spawn(command, args, {
|
|
17
|
-
cwd: currentWorkingDirectoryPath,
|
|
18
|
-
});
|
|
19
|
-
const verbose = verbosityLevel !== constants.VERBOSITY_LEVEL_NORMAL;
|
|
20
|
-
|
|
21
|
-
if (processCreatedCallback) {
|
|
22
|
-
processCreatedCallback(process);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
childProcess.stdout.on('data', (data) => {
|
|
26
|
-
if (verbose || showStdout) {
|
|
27
|
-
res.log(data);
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
childProcess.stderr.on('data', (data) => {
|
|
32
|
-
if (verbosityLevel === constants.VERBOSITY_LEVEL_DEBUG) {
|
|
33
|
-
res.log(data);
|
|
34
|
-
} else {
|
|
35
|
-
errors.push(data.toString());
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
childProcess.on('error', (error) => {
|
|
40
|
-
res.error(error);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
childProcess.on('close', (code) => {
|
|
44
|
-
if (code === 0) {
|
|
45
|
-
if (verbose) {
|
|
46
|
-
res.debug(
|
|
47
|
-
`${command} ${args.join(' ')} exited with code ${code}`
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
resolve();
|
|
51
|
-
} else {
|
|
52
|
-
if (verbosityLevel !== constants.VERBOSITY_LEVEL_DEBUG) {
|
|
53
|
-
errors.forEach((error) => res.log(error));
|
|
54
|
-
}
|
|
55
|
-
reject(
|
|
56
|
-
new Error(
|
|
57
|
-
`${command} ${args.join(' ')} exited with code ${code}`
|
|
58
|
-
)
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import constants from './constants.js';
|
|
2
|
-
|
|
3
|
-
export default function getVerbosityLevel(verbose, debug) {
|
|
4
|
-
if (debug) {
|
|
5
|
-
return constants.VERBOSITY_LEVEL_DEBUG;
|
|
6
|
-
}
|
|
7
|
-
if (verbose) {
|
|
8
|
-
return constants.VERBOSITY_LEVEL_VERBOSE;
|
|
9
|
-
}
|
|
10
|
-
return constants.VERBOSITY_LEVEL_NORMAL;
|
|
11
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
import constants from './constants.js';
|
|
5
|
-
|
|
6
|
-
export default function getWhitelist() {
|
|
7
|
-
return fs
|
|
8
|
-
.readdir(constants.INSTANCE_TEMPLATE_DIRECTORY_PATH)
|
|
9
|
-
.then((entries) => {
|
|
10
|
-
return entries.map((entry) => path.basename(entry));
|
|
11
|
-
})
|
|
12
|
-
.then((whitelist) => {
|
|
13
|
-
whitelist.push(...constants.WHITELIST);
|
|
14
|
-
return whitelist;
|
|
15
|
-
});
|
|
16
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import fswin from 'fswin';
|
|
2
|
-
|
|
3
|
-
export default function setEntryVisibility(entryPath, isVisible) {
|
|
4
|
-
return new Promise((resolve, reject) => {
|
|
5
|
-
if (fswin) {
|
|
6
|
-
fswin.setAttributes(
|
|
7
|
-
entryPath,
|
|
8
|
-
{ IS_HIDDEN: !isVisible },
|
|
9
|
-
(success) => {
|
|
10
|
-
if (!success) {
|
|
11
|
-
reject();
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
resolve();
|
|
15
|
-
}
|
|
16
|
-
);
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
resolve();
|
|
21
|
-
});
|
|
22
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
import constants from './constants.js';
|
|
5
|
-
|
|
6
|
-
export default function validateInstance(directoryPath) {
|
|
7
|
-
return fs
|
|
8
|
-
.exists(directoryPath)
|
|
9
|
-
.then((exists) => {
|
|
10
|
-
if (!exists) {
|
|
11
|
-
throw new Error(`Directory "${directoryPath}" does not exist.`);
|
|
12
|
-
}
|
|
13
|
-
})
|
|
14
|
-
.then(() => {
|
|
15
|
-
return Promise.all(
|
|
16
|
-
constants.REQUIRED_CONFIGURATION.map((entryName) => {
|
|
17
|
-
return fs
|
|
18
|
-
.exists(path.join(directoryPath, entryName))
|
|
19
|
-
.then((exists) => {
|
|
20
|
-
if (!exists) {
|
|
21
|
-
throw new Error(
|
|
22
|
-
`Directory "${directoryPath}" does not contain a valid Fonto Connectors instance. Missing "${entryName}".`
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
})
|
|
27
|
-
);
|
|
28
|
-
});
|
|
29
|
-
}
|
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
import cleanup from './utilities/cleanup.js';
|
|
5
|
-
import constants from './utilities/constants.js';
|
|
6
|
-
import copyWhitelistedFiles from './utilities/copyWhitelistedFiles.js';
|
|
7
|
-
import executeAndLog from './utilities/executeAndLog.js';
|
|
8
|
-
import FontoxmlFcqManifest from './utilities/FontoxmlFcqManifest.js';
|
|
9
|
-
import getVerbosityLevel from './utilities/getVerbosityLevel.js';
|
|
10
|
-
import getWhitelist from './utilities/getWhitelist.js';
|
|
11
|
-
import setEntryVisibility from './utilities/setEntryVisibility.js';
|
|
12
|
-
import validateInstance from './utilities/validateInstance.js';
|
|
13
|
-
|
|
14
|
-
export default function buildCommand(req, res) {
|
|
15
|
-
res.caption(req.command.getLongName());
|
|
16
|
-
|
|
17
|
-
const directoryPath = path.resolve(
|
|
18
|
-
req.options.location ? req.options.location : process.cwd()
|
|
19
|
-
);
|
|
20
|
-
const temporaryDirectoryPath = path.join(
|
|
21
|
-
directoryPath,
|
|
22
|
-
constants.TEMPORARY_BUILD_DIRECTORY_NAME
|
|
23
|
-
);
|
|
24
|
-
const imageName = req.options['image-name']
|
|
25
|
-
? req.options['image-name']
|
|
26
|
-
: constants.DEFAULT_IMAGE_NAME;
|
|
27
|
-
const imageTag = req.options['image-tag']
|
|
28
|
-
? req.options['image-tag']
|
|
29
|
-
: constants.DEFAULT_IMAGE_TAG;
|
|
30
|
-
const manifestFilePath = path.join(
|
|
31
|
-
directoryPath,
|
|
32
|
-
constants.MANIFEST_FILENAME
|
|
33
|
-
);
|
|
34
|
-
const verbosityLevel = getVerbosityLevel(
|
|
35
|
-
req.options.verbose,
|
|
36
|
-
req.options.debug
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
let pidToKillOnForceExit = null;
|
|
40
|
-
const setPidToKillOnForceExit = (process) => {
|
|
41
|
-
pidToKillOnForceExit = process && process.pid;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
// Ensure we cleanup before exiting.
|
|
45
|
-
let stopping = false;
|
|
46
|
-
process.on('SIGINT', (_code) => {
|
|
47
|
-
if (stopping) {
|
|
48
|
-
if (pidToKillOnForceExit) {
|
|
49
|
-
process.kill(pidToKillOnForceExit);
|
|
50
|
-
}
|
|
51
|
-
process.exit();
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
stopping = true;
|
|
56
|
-
res.log('Gracefully stopping... (press Ctrl+C again to force)');
|
|
57
|
-
return cleanup(
|
|
58
|
-
temporaryDirectoryPath,
|
|
59
|
-
undefined,
|
|
60
|
-
res,
|
|
61
|
-
verbosityLevel
|
|
62
|
-
).then(process.exit);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
return (
|
|
66
|
-
validateInstance(directoryPath)
|
|
67
|
-
// Cleanup possible remaining resources from a previous build or run.
|
|
68
|
-
.then(() =>
|
|
69
|
-
cleanup(temporaryDirectoryPath, undefined, res, verbosityLevel)
|
|
70
|
-
)
|
|
71
|
-
.then(() => {
|
|
72
|
-
const destroySpinner = res.spinner(
|
|
73
|
-
`Building the production image "${imageName}:${imageTag}" at "${directoryPath}"...`
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
// Retrieve data for the docker image
|
|
77
|
-
return FontoxmlFcqManifest.fromJsonFile(manifestFilePath).then(
|
|
78
|
-
(manifestObj) => {
|
|
79
|
-
const requestObj = {
|
|
80
|
-
'content-quality': {
|
|
81
|
-
docker: {
|
|
82
|
-
version: manifestObj.fcqVersion,
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
return req.fdt.license
|
|
88
|
-
.getDataForProducts(requestObj)
|
|
89
|
-
.catch((error) => {
|
|
90
|
-
if (error.statusCode === 404) {
|
|
91
|
-
error.solution =
|
|
92
|
-
'This error might be caused by requesting a nonexistent Fonto Content Quality version, please check your version.';
|
|
93
|
-
}
|
|
94
|
-
throw error;
|
|
95
|
-
})
|
|
96
|
-
.then((productData) => {
|
|
97
|
-
const dockerData =
|
|
98
|
-
productData.products['content-quality']
|
|
99
|
-
.docker;
|
|
100
|
-
|
|
101
|
-
// Create a hidden temporary directory.
|
|
102
|
-
return (
|
|
103
|
-
fs
|
|
104
|
-
.mkdir(temporaryDirectoryPath)
|
|
105
|
-
.then(() =>
|
|
106
|
-
setEntryVisibility(
|
|
107
|
-
temporaryDirectoryPath,
|
|
108
|
-
false
|
|
109
|
-
)
|
|
110
|
-
)
|
|
111
|
-
// Copy the instance files into the temporary directory.
|
|
112
|
-
.then(() => {
|
|
113
|
-
// Rewrite the version in the Dockerfile.
|
|
114
|
-
return fs
|
|
115
|
-
.readFile(
|
|
116
|
-
path.join(
|
|
117
|
-
constants.INSTANCE_BUILD_DIRECTORY_PATH,
|
|
118
|
-
'Dockerfile'
|
|
119
|
-
),
|
|
120
|
-
'utf8'
|
|
121
|
-
)
|
|
122
|
-
.then((dockerContent) =>
|
|
123
|
-
dockerContent.replace(
|
|
124
|
-
'${fcqImage}',
|
|
125
|
-
dockerData.image
|
|
126
|
-
)
|
|
127
|
-
)
|
|
128
|
-
.then((fixedDockerContent) =>
|
|
129
|
-
fs.writeFile(
|
|
130
|
-
path.join(
|
|
131
|
-
temporaryDirectoryPath,
|
|
132
|
-
'Dockerfile'
|
|
133
|
-
),
|
|
134
|
-
fixedDockerContent
|
|
135
|
-
)
|
|
136
|
-
);
|
|
137
|
-
})
|
|
138
|
-
.then(() => getWhitelist())
|
|
139
|
-
.then((whitelist) =>
|
|
140
|
-
copyWhitelistedFiles(
|
|
141
|
-
whitelist,
|
|
142
|
-
directoryPath,
|
|
143
|
-
path.join(
|
|
144
|
-
temporaryDirectoryPath,
|
|
145
|
-
'instance'
|
|
146
|
-
)
|
|
147
|
-
)
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
// Pull the docker image
|
|
151
|
-
.then(() => {
|
|
152
|
-
return executeAndLog(
|
|
153
|
-
res,
|
|
154
|
-
'docker',
|
|
155
|
-
[
|
|
156
|
-
'login',
|
|
157
|
-
dockerData.registry,
|
|
158
|
-
'-u',
|
|
159
|
-
dockerData.login,
|
|
160
|
-
'-p',
|
|
161
|
-
dockerData.password,
|
|
162
|
-
],
|
|
163
|
-
null,
|
|
164
|
-
constants.VERBOSITY_LEVEL_NORMAL,
|
|
165
|
-
false,
|
|
166
|
-
setPidToKillOnForceExit
|
|
167
|
-
)
|
|
168
|
-
.then(() =>
|
|
169
|
-
executeAndLog(
|
|
170
|
-
res,
|
|
171
|
-
'docker',
|
|
172
|
-
[
|
|
173
|
-
'pull',
|
|
174
|
-
dockerData.image,
|
|
175
|
-
],
|
|
176
|
-
null,
|
|
177
|
-
verbosityLevel,
|
|
178
|
-
false,
|
|
179
|
-
setPidToKillOnForceExit
|
|
180
|
-
)
|
|
181
|
-
)
|
|
182
|
-
.then(() =>
|
|
183
|
-
executeAndLog(
|
|
184
|
-
res,
|
|
185
|
-
'docker',
|
|
186
|
-
[
|
|
187
|
-
'logout',
|
|
188
|
-
dockerData.registry,
|
|
189
|
-
],
|
|
190
|
-
null,
|
|
191
|
-
constants.VERBOSITY_LEVEL_NORMAL,
|
|
192
|
-
false,
|
|
193
|
-
setPidToKillOnForceExit
|
|
194
|
-
)
|
|
195
|
-
)
|
|
196
|
-
.catch(() => {
|
|
197
|
-
throw new Error(
|
|
198
|
-
'Failed to retrieve the image file.'
|
|
199
|
-
);
|
|
200
|
-
});
|
|
201
|
-
})
|
|
202
|
-
|
|
203
|
-
// Build the docker image.
|
|
204
|
-
.then(() =>
|
|
205
|
-
executeAndLog(
|
|
206
|
-
res,
|
|
207
|
-
'docker',
|
|
208
|
-
[
|
|
209
|
-
'build',
|
|
210
|
-
'-t',
|
|
211
|
-
`${imageName}:${imageTag}`,
|
|
212
|
-
'.',
|
|
213
|
-
],
|
|
214
|
-
temporaryDirectoryPath,
|
|
215
|
-
verbosityLevel,
|
|
216
|
-
false,
|
|
217
|
-
setPidToKillOnForceExit
|
|
218
|
-
)
|
|
219
|
-
)
|
|
220
|
-
.then(() =>
|
|
221
|
-
req.fdt.license.sendTelemetry({
|
|
222
|
-
product:
|
|
223
|
-
req.command.parent.name,
|
|
224
|
-
type: 'docker',
|
|
225
|
-
version: manifestObj.fcqVersion,
|
|
226
|
-
action: req.command.name,
|
|
227
|
-
})
|
|
228
|
-
)
|
|
229
|
-
.then(() => destroySpinner())
|
|
230
|
-
);
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
);
|
|
234
|
-
})
|
|
235
|
-
// Cleanup temporary directory.
|
|
236
|
-
.then(() =>
|
|
237
|
-
cleanup(temporaryDirectoryPath, undefined, res, verbosityLevel)
|
|
238
|
-
)
|
|
239
|
-
.catch((error) => {
|
|
240
|
-
if (!stopping) {
|
|
241
|
-
res.notice(
|
|
242
|
-
`See our documentation at ${constants.DOCUMENTATION_EXECUTE_ERROR} for help.`
|
|
243
|
-
);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return cleanup(
|
|
247
|
-
temporaryDirectoryPath,
|
|
248
|
-
undefined,
|
|
249
|
-
res,
|
|
250
|
-
verbosityLevel
|
|
251
|
-
)
|
|
252
|
-
.then(() => {
|
|
253
|
-
throw error;
|
|
254
|
-
})
|
|
255
|
-
.catch(() => {
|
|
256
|
-
throw error;
|
|
257
|
-
});
|
|
258
|
-
})
|
|
259
|
-
);
|
|
260
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import { fileURLToPath } from 'url';
|
|
3
|
-
|
|
4
|
-
import constants from './utilities/constants.js';
|
|
5
|
-
|
|
6
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
-
const __dirname = path.dirname(__filename);
|
|
8
|
-
|
|
9
|
-
export default (moduleRegistration, fcqCommand) => {
|
|
10
|
-
fcqCommand
|
|
11
|
-
.addCommand(
|
|
12
|
-
'build',
|
|
13
|
-
path.resolve(__dirname, 'command.build.controller.js')
|
|
14
|
-
)
|
|
15
|
-
.setDescription(
|
|
16
|
-
'Build a Fonto Content Quality Docker image for production use. Requires Docker to be installed.'
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
.addOption(
|
|
20
|
-
'image-name',
|
|
21
|
-
'n',
|
|
22
|
-
`The name of the Docker image which will be created. This defaults to ${constants.DEFAULT_IMAGE_NAME}.`,
|
|
23
|
-
false
|
|
24
|
-
)
|
|
25
|
-
.addOption(
|
|
26
|
-
'image-tag',
|
|
27
|
-
't',
|
|
28
|
-
`The tag of the Docker image which will be created. This defaults to ${constants.DEFAULT_IMAGE_TAG}.`,
|
|
29
|
-
false
|
|
30
|
-
)
|
|
31
|
-
.addOption(
|
|
32
|
-
'location',
|
|
33
|
-
'l',
|
|
34
|
-
'The directory where the Fonto Content Quality instance is located.',
|
|
35
|
-
false
|
|
36
|
-
)
|
|
37
|
-
.addOption(
|
|
38
|
-
'verbose',
|
|
39
|
-
null,
|
|
40
|
-
'Output default stdout and stderr information.'
|
|
41
|
-
)
|
|
42
|
-
.addOption('debug', null, 'Output all debug information.')
|
|
43
|
-
|
|
44
|
-
.addExample(
|
|
45
|
-
`${moduleRegistration.getAppInfo().name} ${
|
|
46
|
-
constants.COMMAND_PREFIX
|
|
47
|
-
} build`,
|
|
48
|
-
`Build production image "${constants.DEFAULT_IMAGE_NAME}:${constants.DEFAULT_IMAGE_NAME}" using the Fonto Content Quality instance located at the current working directory.`
|
|
49
|
-
)
|
|
50
|
-
.addExample(
|
|
51
|
-
`${moduleRegistration.getAppInfo().name} ${
|
|
52
|
-
constants.COMMAND_PREFIX
|
|
53
|
-
} build --image-name my-fcq-instance --image-tag 1.0.0 --location /opt/my-instance/`,
|
|
54
|
-
'Build production image "my-fcq-instance:1.0.0" using the Fonto Content Quality instance located at "/opt/my-instance/".'
|
|
55
|
-
);
|
|
56
|
-
};
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import requestPromise from 'request-promise-native';
|
|
4
|
-
import url from 'url';
|
|
5
|
-
|
|
6
|
-
export default function buildCommand(req, res) {
|
|
7
|
-
res.caption(req.command.getLongName());
|
|
8
|
-
|
|
9
|
-
const directoryPath = path.resolve(
|
|
10
|
-
req.options.location ? req.options.location : process.cwd()
|
|
11
|
-
);
|
|
12
|
-
const version = req.options.version;
|
|
13
|
-
const runtime = req.options.runtime;
|
|
14
|
-
|
|
15
|
-
const requestObj = {
|
|
16
|
-
'content-quality': {
|
|
17
|
-
selfContained: {
|
|
18
|
-
runtime,
|
|
19
|
-
version,
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const destroySpinner = res.spinner(`Downloading self-contained build...`);
|
|
25
|
-
|
|
26
|
-
return req.fdt.license
|
|
27
|
-
.getDataForProducts(requestObj)
|
|
28
|
-
.catch(async (error) => {
|
|
29
|
-
if (error.statusCode === 404) {
|
|
30
|
-
try {
|
|
31
|
-
const sdkVersions =
|
|
32
|
-
await req.fdt.license.getVersionsForProduct(
|
|
33
|
-
'content-quality'
|
|
34
|
-
);
|
|
35
|
-
error = new res.ErrorWithSolution(
|
|
36
|
-
`Could not download self-contained for version (${version}) and runtime environment (${runtime}). Please check if it is a valid version and runtime environment.`,
|
|
37
|
-
`The latest version is ${sdkVersions.getLatestStable()}, run \`fdt content-quality versions\` to get a list of all available versions and run \`fdt content-quality download-self-contained --help\` to get a list of all available runtime environments.`,
|
|
38
|
-
error
|
|
39
|
-
);
|
|
40
|
-
} catch (_error) {
|
|
41
|
-
error = new res.ErrorWithSolution(
|
|
42
|
-
`Could not download self-contained for version (${version}) and runtime environment (${runtime}). Please check if it is a valid version and runtime environment.`,
|
|
43
|
-
`Run \`fdt content-quality versions\` to get a list of all available versions and run \`fdt content-quality download-self-contained --help\` to get a list of all available runtime environments.`,
|
|
44
|
-
error
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
throw error;
|
|
49
|
-
})
|
|
50
|
-
.then((productData) => {
|
|
51
|
-
const downloadUri =
|
|
52
|
-
productData.products['content-quality'].selfContained.uri;
|
|
53
|
-
const parsed = url.parse(downloadUri);
|
|
54
|
-
const filename = path.basename(parsed.pathname);
|
|
55
|
-
const filePath = path.join(directoryPath, filename);
|
|
56
|
-
return requestPromise
|
|
57
|
-
.get(downloadUri, {
|
|
58
|
-
resolveWithFullResponse: true,
|
|
59
|
-
simple: false,
|
|
60
|
-
encoding: null,
|
|
61
|
-
})
|
|
62
|
-
.then((response) => {
|
|
63
|
-
switch (response.statusCode) {
|
|
64
|
-
case 200:
|
|
65
|
-
return response.body;
|
|
66
|
-
case 401:
|
|
67
|
-
case 403:
|
|
68
|
-
throw new Error(
|
|
69
|
-
'You are currently not allowed to download this self-contained build, even though you might have the license for it.'
|
|
70
|
-
);
|
|
71
|
-
case 404:
|
|
72
|
-
throw new Error(
|
|
73
|
-
'The file for the requested self-contained build could not be found.'
|
|
74
|
-
);
|
|
75
|
-
default:
|
|
76
|
-
throw new Error(
|
|
77
|
-
`Invalid response from the self-contained builds server (${response.statusCode}).`
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
})
|
|
81
|
-
.then((data) => {
|
|
82
|
-
return fs.outputFile(filePath, data).catch((_error) => {
|
|
83
|
-
throw new Error(
|
|
84
|
-
'Could not save self-contained build download to disk.'
|
|
85
|
-
);
|
|
86
|
-
});
|
|
87
|
-
})
|
|
88
|
-
.then(() =>
|
|
89
|
-
req.fdt.license.sendTelemetry({
|
|
90
|
-
product: req.command.parent.name,
|
|
91
|
-
type: 'selfContained',
|
|
92
|
-
runtime: req.options.runtime,
|
|
93
|
-
version,
|
|
94
|
-
action: req.command.name,
|
|
95
|
-
})
|
|
96
|
-
)
|
|
97
|
-
.then(() => {
|
|
98
|
-
destroySpinner();
|
|
99
|
-
res.break();
|
|
100
|
-
const locationString = req.options.location
|
|
101
|
-
? path.isAbsolute(req.options.location)
|
|
102
|
-
? filePath
|
|
103
|
-
: path.join(req.options.location, filename)
|
|
104
|
-
: filename;
|
|
105
|
-
res.notice(
|
|
106
|
-
`Saved self-contained build to ${locationString}`
|
|
107
|
-
);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
}
|