@fontoxml/fontoxml-development-tools 3.11.0 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/README.md +4 -4
  2. package/npm-shrinkwrap.json +3804 -8292
  3. package/package.json +13 -19
  4. package/src/App.js +1 -1
  5. package/src/FdtCommand.js +3 -3
  6. package/src/FdtLicense.js +95 -114
  7. package/src/ModuleRegistrationApi.js +44 -16
  8. package/src/addCoreModulesToApp.js +8 -0
  9. package/src/modules/connectors/index.js +109 -16
  10. package/src/modules/connectors/instanceBuild/Dockerfile.build +1 -1
  11. package/src/modules/connectors/instanceBuild/Dockerfile.run +1 -1
  12. package/src/modules/connectors/instanceDevBuild/docker-compose.yml +2 -2
  13. package/src/modules/content-quality/index.js +101 -20
  14. package/src/modules/content-quality/instanceBuild/Dockerfile +1 -1
  15. package/src/modules/content-quality/instanceDevBuild/docker-compose.yml +1 -1
  16. package/src/modules/core/src/precontroller.help.js +23 -26
  17. package/src/modules/document-history/index.js +101 -20
  18. package/src/modules/document-history/instanceBuild/Dockerfile +1 -1
  19. package/src/modules/document-history/instanceDevBuild/docker-compose.yml +1 -1
  20. package/src/modules/editor/dev-cms/connectors-cms-standard/configureConnectorsCmsStandardDocumentRouter.js +10 -0
  21. package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentHistoryGetPostRouteHandler.js +51 -0
  22. package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentPostRouteHandler.js +65 -76
  23. package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentPresearchPostRouteHandler.js +10 -7
  24. package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentPreviewRouteHandler.js +10 -0
  25. package/src/modules/editor/dev-cms/connectors-cms-standard/configureDocumentRevisionGetPostRouteHandler.js +69 -0
  26. package/src/modules/editor/src/commands/command.convert.editor.controller.js +11 -4
  27. package/src/modules/editor/src/commands/command.convert.package.controller.js +11 -4
  28. package/src/modules/editor/src/getAppManifest.js +3 -3
  29. package/src/modules/editor/src/getWebpackConfig.js +13 -0
  30. package/src/modules/editor/src/webpackPlugins/CheckDeepImportsResolvePlugin.js +4 -0
  31. package/src/modules/editor-pre-7-7-0/src/api/downloadEditorSDK.js +16 -12
  32. package/src/modules/editor-pre-7-7-0/src/api/executeAndLog.js +3 -2
  33. package/src/modules/editor-pre-7-7-0/src/api/schema/compile.js +16 -22
  34. package/src/modules/editor-pre-7-7-0/src/api/schema/createSchemaPackages.js +8 -0
  35. package/src/modules/editor-pre-7-7-0/src/api/schema/getSchemaFontoJson.js +76 -48
  36. package/src/modules/editor-pre-7-7-0/src/command.schema.compile.controller.js +51 -2
  37. package/src/modules/editor-pre-7-7-0/test/api/schema/buildSchemaExperienceConfigurationModel.test.js +70 -79
  38. package/src/modules/editor-pre-7-7-0/test/api/schema/fixtures/invalid-fonto-json/fonto.json +1 -0
  39. package/src/modules/editor-pre-7-7-0/test/api/schema/getSchemaFontoJson.test.js +174 -0
  40. package/src/modules/editor-pre-7-7-0/test/schemaCompileController.test.js +205 -0
  41. package/src/modules/localization/index.js +2 -2
  42. package/src/modules/operations/src/api/getOperations.js +3 -3
  43. package/src/modules/review/index.js +103 -18
  44. package/src/modules/review/instanceBuild/Dockerfile +1 -1
  45. package/src/modules/review/instanceDevBuild/docker-compose.yml +1 -1
  46. package/src/modules/schema/src/api/getSchemaSummaries.js +2 -2
  47. package/src/modules/schema/test/getSchemaSummaries.test.js +14 -10
  48. package/src/modules/schema-compiler/index.js +99 -18
  49. package/src/modules/schema-compiler/instanceBuild/Dockerfile +1 -1
  50. package/src/modules/schema-compiler/instanceDevBuild/docker-compose.yml +1 -1
  51. package/src/modules/shared/index.js +3 -0
  52. package/src/modules/shared/package.json +14 -0
  53. package/src/modules/shared/src/addBackendDockerCommands.js +334 -0
  54. package/src/modules/shared/src/addBackendDownloadSelfContainedCommands.js +78 -0
  55. package/src/modules/shared/src/addBackendVersionsCommands.js +55 -0
  56. package/src/modules/shared/src/controller-templates/command.backend.build.controller.factory.js +273 -0
  57. package/src/modules/shared/src/controller-templates/command.backend.download-self-contained.controller.factory.js +131 -0
  58. package/src/modules/shared/src/controller-templates/command.backend.init.controller.factory.js +88 -0
  59. package/src/modules/shared/src/controller-templates/command.backend.run.controller.factory.js +420 -0
  60. package/src/modules/shared/src/controller-templates/command.backend.upgrade.controller.factory.js +79 -0
  61. package/src/modules/shared/src/controller-templates/command.backend.versions.controller.factory.js +23 -0
  62. package/src/modules/shared/src/controller-templates/docker/BackendManifest.js +42 -0
  63. package/src/modules/shared/src/controller-templates/docker/copyWhitelistedFiles.js +23 -0
  64. package/src/modules/shared/src/controller-templates/docker/dockerCleanup.js +146 -0
  65. package/src/modules/shared/src/controller-templates/docker/tryDockerLogout.js +31 -0
  66. package/src/modules/shared/src/controller-templates/docker/validateBackendInstance.js +48 -0
  67. package/src/modules/shared/src/ensureDockerCommands.js +61 -0
  68. package/src/modules/shared/src/executeAndLog.js +113 -0
  69. package/src/modules/{review/src/utilities/setEntryVisibility.js → shared/src/setFileVisibility.js} +8 -2
  70. package/src/modules/spell-checker/index.js +101 -18
  71. package/src/modules/spell-checker/instanceBuild/Dockerfile +1 -1
  72. package/src/modules/spell-checker/instanceDevBuild/docker-compose.yml +1 -1
  73. package/test/module.shared.test.js +81 -0
  74. package/src/modules/connectors/src/command.build.controller.js +0 -256
  75. package/src/modules/connectors/src/command.build.js +0 -54
  76. package/src/modules/connectors/src/command.download-self-contained.controller.js +0 -110
  77. package/src/modules/connectors/src/command.download-self-contained.js +0 -50
  78. package/src/modules/connectors/src/command.init.controller.js +0 -91
  79. package/src/modules/connectors/src/command.init.js +0 -42
  80. package/src/modules/connectors/src/command.run.controller.js +0 -462
  81. package/src/modules/connectors/src/command.run.js +0 -67
  82. package/src/modules/connectors/src/command.upgrade.controller.js +0 -52
  83. package/src/modules/connectors/src/command.upgrade.js +0 -42
  84. package/src/modules/connectors/src/command.versions.controller.js +0 -14
  85. package/src/modules/connectors/src/command.versions.js +0 -25
  86. package/src/modules/connectors/src/utilities/FontoxmlConnectorsManifest.js +0 -32
  87. package/src/modules/connectors/src/utilities/cleanup.js +0 -70
  88. package/src/modules/connectors/src/utilities/constants.js +0 -42
  89. package/src/modules/connectors/src/utilities/copyWhitelistedFiles.js +0 -22
  90. package/src/modules/connectors/src/utilities/executeAndLog.js +0 -63
  91. package/src/modules/connectors/src/utilities/getVerbosityLevel.js +0 -11
  92. package/src/modules/connectors/src/utilities/getWhitelist.js +0 -16
  93. package/src/modules/connectors/src/utilities/setEntryVisibility.js +0 -22
  94. package/src/modules/connectors/src/utilities/validateInstance.js +0 -29
  95. package/src/modules/content-quality/src/command.build.controller.js +0 -260
  96. package/src/modules/content-quality/src/command.build.js +0 -56
  97. package/src/modules/content-quality/src/command.download-self-contained.controller.js +0 -110
  98. package/src/modules/content-quality/src/command.download-self-contained.js +0 -52
  99. package/src/modules/content-quality/src/command.init.controller.js +0 -91
  100. package/src/modules/content-quality/src/command.init.js +0 -44
  101. package/src/modules/content-quality/src/command.run.controller.js +0 -444
  102. package/src/modules/content-quality/src/command.run.js +0 -64
  103. package/src/modules/content-quality/src/command.upgrade.controller.js +0 -52
  104. package/src/modules/content-quality/src/command.upgrade.js +0 -44
  105. package/src/modules/content-quality/src/command.versions.controller.js +0 -14
  106. package/src/modules/content-quality/src/command.versions.js +0 -25
  107. package/src/modules/content-quality/src/utilities/FontoxmlFcqManifest.js +0 -30
  108. package/src/modules/content-quality/src/utilities/cleanup.js +0 -70
  109. package/src/modules/content-quality/src/utilities/constants.js +0 -44
  110. package/src/modules/content-quality/src/utilities/copyWhitelistedFiles.js +0 -22
  111. package/src/modules/content-quality/src/utilities/executeAndLog.js +0 -63
  112. package/src/modules/content-quality/src/utilities/getVerbosityLevel.js +0 -11
  113. package/src/modules/content-quality/src/utilities/getWhitelist.js +0 -16
  114. package/src/modules/content-quality/src/utilities/setEntryVisibility.js +0 -22
  115. package/src/modules/content-quality/src/utilities/validateInstance.js +0 -29
  116. package/src/modules/document-history/src/command.build.controller.js +0 -260
  117. package/src/modules/document-history/src/command.build.js +0 -56
  118. package/src/modules/document-history/src/command.download-self-contained.controller.js +0 -110
  119. package/src/modules/document-history/src/command.download-self-contained.js +0 -50
  120. package/src/modules/document-history/src/command.init.controller.js +0 -91
  121. package/src/modules/document-history/src/command.init.js +0 -44
  122. package/src/modules/document-history/src/command.run.controller.js +0 -444
  123. package/src/modules/document-history/src/command.run.js +0 -64
  124. package/src/modules/document-history/src/command.upgrade.controller.js +0 -52
  125. package/src/modules/document-history/src/command.upgrade.js +0 -44
  126. package/src/modules/document-history/src/command.versions.controller.js +0 -14
  127. package/src/modules/document-history/src/command.versions.js +0 -25
  128. package/src/modules/document-history/src/utilities/FontoxmlFdhManifest.js +0 -30
  129. package/src/modules/document-history/src/utilities/cleanup.js +0 -70
  130. package/src/modules/document-history/src/utilities/constants.js +0 -44
  131. package/src/modules/document-history/src/utilities/copyWhitelistedFiles.js +0 -22
  132. package/src/modules/document-history/src/utilities/executeAndLog.js +0 -63
  133. package/src/modules/document-history/src/utilities/getVerbosityLevel.js +0 -11
  134. package/src/modules/document-history/src/utilities/getWhitelist.js +0 -16
  135. package/src/modules/document-history/src/utilities/setEntryVisibility.js +0 -22
  136. package/src/modules/document-history/src/utilities/validateInstance.js +0 -29
  137. package/src/modules/review/src/command.build.controller.js +0 -256
  138. package/src/modules/review/src/command.build.js +0 -54
  139. package/src/modules/review/src/command.download-self-contained.controller.js +0 -107
  140. package/src/modules/review/src/command.download-self-contained.js +0 -50
  141. package/src/modules/review/src/command.init.controller.js +0 -89
  142. package/src/modules/review/src/command.init.js +0 -42
  143. package/src/modules/review/src/command.run.controller.js +0 -428
  144. package/src/modules/review/src/command.run.js +0 -60
  145. package/src/modules/review/src/command.upgrade.controller.js +0 -59
  146. package/src/modules/review/src/command.upgrade.js +0 -42
  147. package/src/modules/review/src/command.versions.controller.js +0 -12
  148. package/src/modules/review/src/command.versions.js +0 -25
  149. package/src/modules/review/src/utilities/FontoxmlReviewManifest.js +0 -30
  150. package/src/modules/review/src/utilities/cleanup.js +0 -70
  151. package/src/modules/review/src/utilities/constants.js +0 -42
  152. package/src/modules/review/src/utilities/copyWhitelistedFiles.js +0 -22
  153. package/src/modules/review/src/utilities/executeAndLog.js +0 -63
  154. package/src/modules/review/src/utilities/getVerbosityLevel.js +0 -11
  155. package/src/modules/review/src/utilities/getWhitelist.js +0 -16
  156. package/src/modules/review/src/utilities/validateInstance.js +0 -45
  157. package/src/modules/schema-compiler/src/command.build.controller.js +0 -256
  158. package/src/modules/schema-compiler/src/command.build.js +0 -54
  159. package/src/modules/schema-compiler/src/command.download-self-contained.controller.js +0 -110
  160. package/src/modules/schema-compiler/src/command.download-self-contained.js +0 -50
  161. package/src/modules/schema-compiler/src/command.init.controller.js +0 -91
  162. package/src/modules/schema-compiler/src/command.init.js +0 -42
  163. package/src/modules/schema-compiler/src/command.run.controller.js +0 -430
  164. package/src/modules/schema-compiler/src/command.run.js +0 -60
  165. package/src/modules/schema-compiler/src/command.upgrade.controller.js +0 -64
  166. package/src/modules/schema-compiler/src/command.upgrade.js +0 -42
  167. package/src/modules/schema-compiler/src/command.versions.controller.js +0 -14
  168. package/src/modules/schema-compiler/src/command.versions.js +0 -25
  169. package/src/modules/schema-compiler/src/utilities/FontoxmlSchemaCompilerManifest.js +0 -32
  170. package/src/modules/schema-compiler/src/utilities/cleanup.js +0 -70
  171. package/src/modules/schema-compiler/src/utilities/constants.js +0 -43
  172. package/src/modules/schema-compiler/src/utilities/copyWhitelistedFiles.js +0 -22
  173. package/src/modules/schema-compiler/src/utilities/executeAndLog.js +0 -63
  174. package/src/modules/schema-compiler/src/utilities/getVerbosityLevel.js +0 -11
  175. package/src/modules/schema-compiler/src/utilities/getWhitelist.js +0 -16
  176. package/src/modules/schema-compiler/src/utilities/setEntryVisibility.js +0 -22
  177. package/src/modules/schema-compiler/src/utilities/validateInstance.js +0 -47
  178. package/src/modules/spell-checker/src/command.build.controller.js +0 -257
  179. package/src/modules/spell-checker/src/command.build.js +0 -54
  180. package/src/modules/spell-checker/src/command.download-self-contained.controller.js +0 -110
  181. package/src/modules/spell-checker/src/command.download-self-contained.js +0 -50
  182. package/src/modules/spell-checker/src/command.init.controller.js +0 -91
  183. package/src/modules/spell-checker/src/command.init.js +0 -42
  184. package/src/modules/spell-checker/src/command.run.controller.js +0 -430
  185. package/src/modules/spell-checker/src/command.run.js +0 -62
  186. package/src/modules/spell-checker/src/command.upgrade.controller.js +0 -61
  187. package/src/modules/spell-checker/src/command.upgrade.js +0 -42
  188. package/src/modules/spell-checker/src/command.versions.controller.js +0 -14
  189. package/src/modules/spell-checker/src/command.versions.js +0 -25
  190. package/src/modules/spell-checker/src/utilities/FontoxmlSpellCheckerManifest.js +0 -32
  191. package/src/modules/spell-checker/src/utilities/cleanup.js +0 -70
  192. package/src/modules/spell-checker/src/utilities/constants.js +0 -42
  193. package/src/modules/spell-checker/src/utilities/copyWhitelistedFiles.js +0 -22
  194. package/src/modules/spell-checker/src/utilities/executeAndLog.js +0 -63
  195. package/src/modules/spell-checker/src/utilities/getVerbosityLevel.js +0 -11
  196. package/src/modules/spell-checker/src/utilities/getWhitelist.js +0 -16
  197. package/src/modules/spell-checker/src/utilities/setEntryVisibility.js +0 -22
  198. 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,43 +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-schema-compiler',
9
- DEFAULT_IMAGE_TAG: 'latest',
10
- VERBOSITY_LEVEL_DEBUG: 'debug',
11
- VERBOSITY_LEVEL_NORMAL: 'normal',
12
- VERBOSITY_LEVEL_VERBOSE: 'verbose',
13
- // TODO: Update links to the correct documentation pages.
14
- DOCUMENTATION_CONFIGURATION_GUIDE:
15
- 'https://documentation.fontoxml.com/latest/editor-b4ee7cad8e30',
16
- DOCUMENTATION_GETTING_STARTED_GUIDE:
17
- 'https://documentation.fontoxml.com/latest/editor-b4ee7cad8e30',
18
- DOCUMENTATION_EXECUTE_ERROR:
19
- 'https://documentation.fontoxml.com/latest/editor-b4ee7cad8e30',
20
- INSTANCE_BUILD_DIRECTORY_PATH: path.join(
21
- __dirname,
22
- '..',
23
- '..',
24
- 'instanceBuild'
25
- ),
26
- INSTANCE_DEV_BUILD_DIRECTORY_PATH: path.join(
27
- __dirname,
28
- '..',
29
- '..',
30
- 'instanceDevBuild'
31
- ),
32
- INSTANCE_TEMPLATE_DIRECTORY_PATH: path.join(
33
- __dirname,
34
- '..',
35
- '..',
36
- 'instanceTemplate'
37
- ),
38
- MANIFEST_FILENAME: '.fontoxmlSchemaCompilerManifest',
39
- REQUIRED_CONFIGURATION: [],
40
- TEMPORARY_DIRECTORY_NAME: '.schemaCompilerTmp',
41
- TEMPORARY_BUILD_DIRECTORY_NAME: '.schemaCompilerBuildTmp',
42
- WHITELIST: ['nlog.config'],
43
- };
@@ -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.js';
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,47 +0,0 @@
1
- import fs from 'fs-extra';
2
- import path from 'path';
3
-
4
- import constants from './constants.js';
5
- import FontoxmlSchemaCompilerManifest from './FontoxmlSchemaCompilerManifest.js';
6
-
7
- export default function validateInstance(directoryPath) {
8
- const manifestFilePath = path.join(
9
- directoryPath,
10
- constants.MANIFEST_FILENAME
11
- );
12
- return fs
13
- .exists(directoryPath)
14
- .then((exists) => {
15
- if (!exists) {
16
- throw new Error(`Directory "${directoryPath}" does not exist.`);
17
- }
18
- })
19
- .then(() => fs.exists(manifestFilePath))
20
- .then((exists) => {
21
- // Verify fontoxmlSchemaCompilerManifest file is present and valid.
22
- if (!exists) {
23
- throw new Error(
24
- 'The Fonto Schema Compiler manifest file does not exist.'
25
- );
26
- } else {
27
- return FontoxmlSchemaCompilerManifest.fromJsonFile(
28
- manifestFilePath
29
- );
30
- }
31
- })
32
- .then(() => {
33
- return Promise.all(
34
- constants.REQUIRED_CONFIGURATION.map((entryName) => {
35
- return fs
36
- .exists(path.join(directoryPath, entryName))
37
- .then((exists) => {
38
- if (!exists) {
39
- throw new Error(
40
- `Directory "${directoryPath}" does not contain a valid Fonto Schema Compiler instance. Missing "${entryName}".`
41
- );
42
- }
43
- });
44
- })
45
- );
46
- });
47
- }
@@ -1,257 +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 FontoxmlSpellCheckerManifest from './utilities/FontoxmlSpellCheckerManifest.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 FontoxmlSpellCheckerManifest.fromJsonFile(
78
- manifestFilePath
79
- ).then((manifestObj) => {
80
- const requestObj = {
81
- 'spell-checker': {
82
- docker: {
83
- version: manifestObj.spellCheckerVersion,
84
- },
85
- },
86
- };
87
-
88
- return req.fdt.license
89
- .getDataForProducts(requestObj)
90
- .catch((error) => {
91
- if (error.statusCode === 404) {
92
- error.solution =
93
- 'This error might be caused by requesting a nonexistent Fonto Spell Checker version, please check your version.';
94
- }
95
- throw error;
96
- })
97
- .then((productData) => {
98
- const dockerData =
99
- productData.products['spell-checker'].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
- '${spellCheckerImage}',
125
- dockerData.image
126
- )
127
- )
128
- .then((fixedDockerContent) =>
129
- fs.writeFile(
130
- path.join(
131
- temporaryDirectoryPath,
132
- 'Dockerfile'
133
- ),
134
- fixedDockerContent,
135
- 'utf8'
136
- )
137
- );
138
- })
139
- .then(() => getWhitelist())
140
- .then((whitelist) =>
141
- copyWhitelistedFiles(
142
- whitelist,
143
- directoryPath,
144
- path.join(
145
- temporaryDirectoryPath,
146
- 'instance'
147
- )
148
- )
149
- )
150
-
151
- // Pull the docker image
152
- .then(() => {
153
- return executeAndLog(
154
- res,
155
- 'docker',
156
- [
157
- 'login',
158
- dockerData.registry,
159
- '-u',
160
- dockerData.login,
161
- '-p',
162
- dockerData.password,
163
- ],
164
- null,
165
- constants.VERBOSITY_LEVEL_NORMAL,
166
- false,
167
- setPidToKillOnForceExit
168
- )
169
- .then(() =>
170
- executeAndLog(
171
- res,
172
- 'docker',
173
- ['pull', dockerData.image],
174
- null,
175
- verbosityLevel,
176
- false,
177
- setPidToKillOnForceExit
178
- )
179
- )
180
- .then(() =>
181
- executeAndLog(
182
- res,
183
- 'docker',
184
- [
185
- 'logout',
186
- dockerData.registry,
187
- ],
188
- null,
189
- constants.VERBOSITY_LEVEL_NORMAL,
190
- false,
191
- setPidToKillOnForceExit
192
- )
193
- )
194
- .catch(() => {
195
- throw new Error(
196
- 'Failed to retrieve the image file.'
197
- );
198
- });
199
- })
200
-
201
- // Build the docker image.
202
- .then(() =>
203
- executeAndLog(
204
- res,
205
- 'docker',
206
- [
207
- 'build',
208
- '-t',
209
- `${imageName}:${imageTag}`,
210
- '.',
211
- ],
212
- temporaryDirectoryPath,
213
- verbosityLevel,
214
- false,
215
- setPidToKillOnForceExit
216
- )
217
- )
218
- .then(() =>
219
- req.fdt.license.sendTelemetry({
220
- product: req.command.parent.name,
221
- type: 'docker',
222
- version:
223
- manifestObj.spellCheckerVersion,
224
- action: req.command.name,
225
- })
226
- )
227
- .then(() => destroySpinner())
228
- );
229
- });
230
- });
231
- })
232
- // Cleanup temporary directory.
233
- .then(() =>
234
- cleanup(temporaryDirectoryPath, undefined, res, verbosityLevel)
235
- )
236
- .catch((error) => {
237
- if (!stopping) {
238
- res.notice(
239
- `See our documentation at ${constants.DOCUMENTATION_EXECUTE_ERROR} for help.`
240
- );
241
- }
242
-
243
- return cleanup(
244
- temporaryDirectoryPath,
245
- undefined,
246
- res,
247
- verbosityLevel
248
- )
249
- .then(() => {
250
- throw error;
251
- })
252
- .catch(() => {
253
- throw error;
254
- });
255
- })
256
- );
257
- }
@@ -1,54 +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, spellCheckerCommand) => {
10
- spellCheckerCommand
11
- .addCommand(
12
- 'build',
13
- path.resolve(__dirname, 'command.build.controller.js')
14
- )
15
- .setDescription(
16
- 'Build a Fonto Spell Checker 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 Spell Checker 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} spell-checker build`,
46
- `Build production image "${constants.DEFAULT_IMAGE_NAME}:${constants.DEFAULT_IMAGE_NAME}" using the Fonto Spell Checker instance located at the current working directory.`
47
- )
48
- .addExample(
49
- `${
50
- moduleRegistration.getAppInfo().name
51
- } spell-checker build --image-name my-spell-checker-instance --image-tag 1.0.0 --location /opt/my-instance/`,
52
- 'Build production image "my-spell-checker-instance:1.0.0" using the Fonto Spell Checker instance located at "/opt/my-instance/".'
53
- );
54
- };