@eui/tools 5.1.12 → 5.2.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.
@@ -1 +1 @@
1
- 5.1.12
1
+ 5.2.1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## 5.2.1 (2022-05-02)
2
+
3
+ ##### Bug Fixes
4
+
5
+ * **other:**
6
+ * wrong initial version set for envTarget remote delivery - EUI-5632 [EUI-5632](https://webgate.ec.europa.eu/CITnet/jira/browse/EUI-5632) ([cc894439](https://webgate.ec.europa.eu/CITnet/stash/scm/csdr/eui-tools.git/commits/cc8944393d48bb9b7ae2ee5afb3ab5052983f4a5))
7
+
8
+ * * *
9
+ * * *
10
+ ## 5.2.0 (2022-04-29)
11
+
12
+ ##### New Features
13
+
14
+ * **other:**
15
+ * added script for translating i18n files EUI-5847 [EUI-5847](https://webgate.ec.europa.eu/CITnet/jira/browse/EUI-5847) ([3e0740f4](https://webgate.ec.europa.eu/CITnet/stash/scm/csdr/eui-tools.git/commits/3e0740f40386d87f2baa4045ae14fe93adf40655))
16
+
17
+ * * *
18
+ * * *
19
+ ## 5.1.13 (2022-04-28)
20
+
21
+ ##### Bug Fixes
22
+
23
+ * **other:**
24
+ * broken version generated for remote snapshot - EUI-5632 [EUI-5632](https://webgate.ec.europa.eu/CITnet/jira/browse/EUI-5632) ([21a5afd7](https://webgate.ec.europa.eu/CITnet/stash/scm/csdr/eui-tools.git/commits/21a5afd7c07bcea1c4bed4e0ed7c417667e87673))
25
+
26
+ * * *
27
+ * * *
1
28
  ## 5.1.12 (2022-04-28)
2
29
 
3
30
  ##### Bug Fixes
@@ -35,6 +35,7 @@ const scriptIndex = args.findIndex(
35
35
  x === 'csdr-stats' ||
36
36
  x === 'generate-app-metadata' ||
37
37
  x === 'help' ||
38
+ x === 'i18n-translate' ||
38
39
  x === 'inject-config-app' ||
39
40
  x === 'version'
40
41
  );
@@ -70,6 +71,7 @@ switch (script) {
70
71
  case 'csdr-stats':
71
72
  case 'generate-app-metadata':
72
73
  case 'help':
74
+ case 'i18n-translate':
73
75
  case 'inject-config-app':
74
76
  case 'version': {
75
77
  const result = spawn.sync(
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ const i18nTranslate = require('../../scripts/utils/translate/translate-utils');
4
+
5
+ Promise.resolve()
6
+ .then(() => {
7
+ return i18nTranslate.translateI18nFile();
8
+ })
9
+ .catch((e) => {
10
+ console.log(e);
11
+ process.exit(1);
12
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eui/tools",
3
- "version": "5.1.12",
3
+ "version": "5.2.1",
4
4
  "tag": "latest",
5
5
  "license": "EUPL-1.1",
6
6
  "description": "eUI common tools and scripts",
package/sandbox.js CHANGED
@@ -790,7 +790,7 @@ const versionUtils = require('./scripts/csdr/version/version-utils');
790
790
  // METADATA API TESTING
791
791
  // --------------------
792
792
  // const metadataModule = require('./scripts/csdr/metadata/v2');
793
- // const pkg = configUtils.packages.getPackage('mywp-dummy-eui10-remote-el-ui');
793
+ // const pkg = configUtils.packages.getPackage('cc-task-details-eui10-remote-el-ui');
794
794
 
795
795
  // Promise.resolve()
796
796
  // .then(() => {
@@ -840,12 +840,33 @@ const versionUtils = require('./scripts/csdr/version/version-utils');
840
840
  // })
841
841
 
842
842
 
843
- const pkg = configUtils.packages.getPackage('opsys-epc-esub-bo-ui', true);
843
+ // METADATA ESTING
844
+ // --------------------
845
+ const pkg = configUtils.packages.getPackage('cc-task-details-eui10-remote-el-ui');
846
+ const envTarget = 'DEV';
847
+
848
+ let versionsMetadata, envsMetadata;
844
849
 
845
850
  Promise.resolve()
851
+ // generating new version based on the env target and the envs cycle type
846
852
  .then(() => {
847
- return metadataUtils.package.getPackageVersionsByMajor(pkg, '10', false)
853
+ return versionUtils.packageRemote.getNewVersion(pkg, envTarget);
848
854
  })
849
- .then((versions) => {
850
- console.log(versions);
855
+ .then((version) => {
856
+ console.log(version);
851
857
  })
858
+
859
+
860
+
861
+
862
+
863
+
864
+ // const pkg = configUtils.packages.getPackage('opsys-epc-esub-bo-ui', true);
865
+
866
+ // Promise.resolve()
867
+ // .then(() => {
868
+ // return metadataUtils.package.getPackageVersionsByMajor(pkg, '10', false)
869
+ // })
870
+ // .then((versions) => {
871
+ // console.log(versions);
872
+ // })
@@ -260,7 +260,8 @@ module.exports.updateVersion = (pkg, pkgMetadata, envTarget) => {
260
260
  (branches.isSnapshot || branches.isSupportSnapshot),
261
261
  branches.isNext,
262
262
  branches.isSupport,
263
- branches.isHotfix
263
+ branches.isHotfix,
264
+ envTarget
264
265
  );
265
266
  })
266
267
 
@@ -7,7 +7,7 @@ const semver = require('semver');
7
7
  const tools = require('../../utils/tools');
8
8
 
9
9
 
10
- const getNewVersionForDev = (versionsMetadata, envsMetadata, rootEnv) => {
10
+ const getNewVersionForDev = (versionsMetadata, envsMetadata, rootEnv, currentVersion) => {
11
11
  let version;
12
12
  const lastIntMetadata = envsMetadata[rootEnv];
13
13
 
@@ -19,7 +19,11 @@ const getNewVersionForDev = (versionsMetadata, envsMetadata, rootEnv) => {
19
19
 
20
20
  } else {
21
21
  tools.logInfo('No INT metadata found : initializing version');
22
- version = '1.0.0-SNAPSHOT';
22
+ if (currentVersion) {
23
+ version = semver.coerce(currentVersion).raw + '-SNAPSHOT';
24
+ } else {
25
+ version = '1.0.0-SNAPSHOT';
26
+ }
23
27
  tools.logInfo(`version intialized : ${version}`);
24
28
  }
25
29
 
@@ -48,6 +52,7 @@ const getNewVersionForDev = (versionsMetadata, envsMetadata, rootEnv) => {
48
52
 
49
53
  // if it's a branch new DEV stream release, the snapshot is itialized
50
54
  } else {
55
+ tools.logInfo(`prevVersions matching: ${version} not found initializing first release of raw version`);
51
56
  version += '.0';
52
57
  }
53
58
  }
@@ -132,7 +137,7 @@ const getNewVersionForEnv = (versionsMetadata, envsMetadata, rootEnv, envTarget)
132
137
 
133
138
 
134
139
 
135
- module.exports.getNewVersionDefault = (envTarget, versionsMetadata, envsMetadata) => {
140
+ module.exports.getNewVersionDefault = (envTarget, versionsMetadata, envsMetadata, currentVersion) => {
136
141
  tools.logInfo(`Retrieve version for ${envTarget}`);
137
142
 
138
143
  return Promise.resolve()
@@ -145,7 +150,7 @@ module.exports.getNewVersionDefault = (envTarget, versionsMetadata, envsMetadata
145
150
  // =====================================================================
146
151
 
147
152
  if (envTarget === 'DEV') {
148
- version = getNewVersionForDev(versionsMetadata, envsMetadata, 'INT');
153
+ version = getNewVersionForDev(versionsMetadata, envsMetadata, 'INT', currentVersion);
149
154
  }
150
155
 
151
156
 
@@ -16,7 +16,7 @@ const configUtils = require('../config/config-utils');
16
16
  const { dryRun, nexusUser, nexusPassword } = tools.getArgs();
17
17
 
18
18
 
19
- const writePackageJsonCore = (newVersion, folder, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch) => {
19
+ const writePackageJsonCore = (newVersion, folder, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch, envTarget) => {
20
20
  return Promise.resolve()
21
21
  .then(() => {
22
22
  const pkgJsonFile = path.resolve(folder, 'package.json');
@@ -24,14 +24,18 @@ const writePackageJsonCore = (newVersion, folder, isSnapshot, isNextBranch, isSu
24
24
 
25
25
  let tag;
26
26
 
27
- if (isSnapshot) {
27
+ if (envTarget && envTarget === 'DEV') {
28
28
  tag = 'snapshot';
29
- } else if (isNextBranch) {
30
- tag = 'next';
31
- } else if (isSupportBranch) {
32
- tag = 'prev';
33
29
  } else {
34
- tag = 'latest';
30
+ if (isSnapshot) {
31
+ tag = 'snapshot';
32
+ } else if (isNextBranch) {
33
+ tag = 'next';
34
+ } else if (isSupportBranch) {
35
+ tag = 'prev';
36
+ } else {
37
+ tag = 'latest';
38
+ }
35
39
  }
36
40
 
37
41
  pkgJson.version = newVersion;
@@ -48,7 +52,7 @@ const writePackageJsonCore = (newVersion, folder, isSnapshot, isNextBranch, isSu
48
52
  })
49
53
  }
50
54
 
51
- const writePackageJson = (pkg, newVersion, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch) => {
55
+ const writePackageJson = (pkg, newVersion, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch, envTarget) => {
52
56
  return Promise.resolve()
53
57
  .then(() => {
54
58
  tools.logTitle('updating package version');
@@ -56,11 +60,11 @@ const writePackageJson = (pkg, newVersion, isSnapshot, isNextBranch, isSupportBr
56
60
  if (!pkg.parent) {
57
61
  return Promise.resolve()
58
62
  .then(() => {
59
- return writePackageJsonCore(newVersion, pkg.paths.pkgDirectory, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch);
63
+ return writePackageJsonCore(newVersion, pkg.paths.pkgDirectory, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch, envTarget);
60
64
  })
61
65
  .then(() => {
62
66
  if (!pkg.element && !pkg.config) {
63
- return writePackageJsonCore(newVersion, pkg.paths.pkgPublish, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch);
67
+ return writePackageJsonCore(newVersion, pkg.paths.pkgPublish, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch, envTarget);
64
68
  }
65
69
  })
66
70
  .catch((e) => {
@@ -70,7 +74,7 @@ const writePackageJson = (pkg, newVersion, isSnapshot, isNextBranch, isSupportBr
70
74
  } else {
71
75
  return Promise.resolve()
72
76
  .then(() => {
73
- return writePackageJsonCore(newVersion, pkg.paths.pkgDirectory, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch);
77
+ return writePackageJsonCore(newVersion, pkg.paths.pkgDirectory, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch, envTarget);
74
78
  })
75
79
  .then(() => {
76
80
  let linkedPackages = Object.keys(pkg.packages)
@@ -85,7 +89,7 @@ const writePackageJson = (pkg, newVersion, isSnapshot, isNextBranch, isSupportBr
85
89
  .then((linkedPackages) => Promise.resolve().then(() => {
86
90
  return linkedPackages.reduce((promise, pkg) => {
87
91
  return promise.then(() => (
88
- writePackageJsonCore(newVersion, pkg.paths.pkgPublish, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch)
92
+ writePackageJsonCore(newVersion, pkg.paths.pkgPublish, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch, envTarget)
89
93
  ));
90
94
  }, Promise.resolve());
91
95
  }))
@@ -113,7 +117,7 @@ const writePomXml = (pkg, newVersion, isSnapshot, isForceTimestamp = true) => {
113
117
  if (dryRun) {
114
118
  return;
115
119
  }
116
-
120
+
117
121
  return Promise.resolve()
118
122
  .then(() => {
119
123
  return templateUtils.generateMavenSettings(nexusUser, nexusPassword);
@@ -146,13 +150,56 @@ const writePomXml = (pkg, newVersion, isSnapshot, isForceTimestamp = true) => {
146
150
 
147
151
 
148
152
 
149
- module.exports.updateVersion = (pkg, newVersion, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch) => {
153
+ module.exports.updateVersion = (pkg, newVersion, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch, envTarget) => {
150
154
  if (pkg.backend) {
151
155
  return writePomXml(pkg, newVersion, isSnapshot);
152
156
  }
153
157
  else {
154
- return writePackageJson(pkg, newVersion, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch);
158
+ return writePackageJson(pkg, newVersion, isSnapshot, isNextBranch, isSupportBranch, isHotfixBranch, envTarget);
155
159
  }
156
160
  }
157
161
 
158
162
 
163
+ module.exports.getCurrentVersion = (pkg) => {
164
+ return Promise.resolve()
165
+ .then(() => {
166
+ let currentVersion;
167
+
168
+ tools.logTitle('Extracting current version');
169
+
170
+ if (pkg.backend) {
171
+ // if nodejs backend, explicitely declared
172
+ if (pkg.build && pkg.build.nodejs) {
173
+ tools.logInfo('UI package => extracting from package.json');
174
+
175
+ const pathPkgJson = path.resolve(pkg.paths.pkgDirectory, 'package.json');
176
+ const pkgJson = require(pathPkgJson);
177
+ currentVersion = pkgJson.version;
178
+
179
+ // by default maven java backend is taken into account
180
+ } else {
181
+ tools.logInfo('Backend => extracting pom.xml');
182
+ const xmlContent = tools.getXMLJsContent(path.join(pkg.paths.pkgDirectory, 'pom.xml'));
183
+
184
+ tools.logInfo('Content found:');
185
+ console.log(xmlContent);
186
+
187
+ currentVersion = xmlContent.project.version.toString();
188
+ }
189
+
190
+ } else {
191
+ tools.logInfo('UI package => extracting from package.json');
192
+
193
+ const pathPkgJson = path.resolve(pkg.paths.pkgDirectory, 'package.json');
194
+ const pkgJson = require(pathPkgJson);
195
+ currentVersion = pkgJson.version;
196
+ }
197
+
198
+ tools.logSuccess('Current version found : ' + currentVersion);
199
+ return currentVersion;
200
+ })
201
+ .catch((e) => {
202
+ throw e;
203
+ })
204
+ }
205
+
@@ -2,87 +2,14 @@
2
2
 
3
3
  // externals
4
4
  const semver = require('semver');
5
- const path = require('path');
6
5
 
7
6
  // local
8
7
  const tools = require('../../utils/tools');
9
8
 
10
-
11
- const getCurrentVersion = (pkg) => {
12
- return Promise.resolve()
13
- .then(() => {
14
- let currentVersion;
15
-
16
- tools.logTitle('Extracting current version');
17
-
18
- if (pkg.backend) {
19
- // if nodejs backend, explicitely declared
20
- if (pkg.build && pkg.build.nodejs) {
21
- tools.logInfo('UI package => extracting from package.json');
22
-
23
- const pathPkgJson = path.resolve(pkg.paths.pkgDirectory, 'package.json');
24
- const pkgJson = require(pathPkgJson);
25
- currentVersion = pkgJson.version;
26
-
27
- // by default maven java backend is taken into account
28
- } else {
29
- tools.logInfo('Backend => extracting pom.xml');
30
- const xmlContent = tools.getXMLJsContent(path.join(pkg.paths.pkgDirectory, 'pom.xml'));
31
-
32
- tools.logInfo('Content found:');
33
- console.log(xmlContent);
34
-
35
- currentVersion = xmlContent.project.version.toString();
36
- }
37
-
38
- } else {
39
- tools.logInfo('UI package => extracting from package.json');
40
-
41
- const pathPkgJson = path.resolve(pkg.paths.pkgDirectory, 'package.json');
42
- const pkgJson = require(pathPkgJson);
43
- currentVersion = pkgJson.version;
44
- }
45
-
46
- tools.logSuccess('Current version found : ' + currentVersion);
47
- return currentVersion;
48
- })
49
- .catch((e) => {
50
- throw e;
51
- })
52
- }
53
-
54
-
55
- const getReleaseType = (commitsMetadata) => {
56
- tools.logInfo('Getting release type based on commits metadata parsed from last tag');
57
-
58
- const RELEASE_TYPES = ['major', 'minor', 'patch'];
59
-
60
- let level = 2;
61
- let breakings = 0;
62
- let features = 0;
63
-
64
- commitsMetadata.forEach((commit) => {
65
- if (commit.breakingChange) {
66
- breakings += commit.body;
67
- level = 1; // no major bump on "breaking changes"
68
- } else if (commit.type === 'feat') {
69
- features += 1;
70
- if (level === 2) {
71
- level = 1;
72
- }
73
- }
74
- });
75
-
76
- return {
77
- level: level,
78
- reason: 'There are ' + breakings + ' BREAKING CHANGES and ' + features + ' features',
79
- releaseType: RELEASE_TYPES[level]
80
- };
81
- }
9
+ // inner
10
+ const innerPackageCommon = require('./package-common');
82
11
 
83
12
 
84
- // PUBLIC METHODS
85
-
86
13
  module.exports.getNewVersion = (
87
14
  pkg,
88
15
  commits,
@@ -90,7 +17,7 @@ module.exports.getNewVersion = (
90
17
  ) => {
91
18
  return Promise.resolve()
92
19
  .then(() => {
93
- return getCurrentVersion(pkg);
20
+ return innerPackageCommon.getCurrentVersion(pkg);
94
21
  })
95
22
 
96
23
  .then((currentVersion) => {
@@ -98,10 +25,36 @@ module.exports.getNewVersion = (
98
25
 
99
26
  tools.logInfo(`Current version found : ${currentVersion}`);
100
27
 
28
+ const RELEASE_TYPES = ['major', 'minor', 'patch'];
29
+
101
30
  let newVersion = '1.0.0';
102
31
 
103
32
  if (commits) {
104
- const release = getReleaseType(commits);
33
+
34
+ tools.logInfo('Commits found for processing version, extracting...');
35
+
36
+ let level = 2;
37
+ let breakings = 0;
38
+ let features = 0;
39
+
40
+ commits.forEach((commit) => {
41
+ if (commit.breakingChange) {
42
+ breakings += commit.body;
43
+ level = 1; // no major bump on "breaking changes"
44
+ } else if (commit.type === 'feat') {
45
+ features += 1;
46
+ if (level === 2) {
47
+ level = 1;
48
+ }
49
+ }
50
+ });
51
+
52
+ const release = {
53
+ level: level,
54
+ reason: 'There are ' + breakings + ' BREAKING CHANGES and ' + features + ' features',
55
+ releaseType: RELEASE_TYPES[level]
56
+ };
57
+
105
58
  tools.logInfo('release info found : ' + JSON.stringify(release));
106
59
 
107
60
  if (isNextBranch) {
@@ -110,37 +63,39 @@ module.exports.getNewVersion = (
110
63
  newVersion = semver.valid(release.releaseType) || semver.inc(currentVersion, release.releaseType)
111
64
  }
112
65
 
113
- tools.logInfo('probable new version : ' + newVersion);
114
66
 
115
- if (isSnapshot) {
116
- if (pkg.backend) {
117
- if (pkg.build && pkg.build.nodejs) {
118
- newVersion += '-snapshot-' + Date.now();
119
- } else {
120
- newVersion += '-SNAPSHOT';
121
- }
122
- } else {
123
- newVersion += '-snapshot-' + Date.now();
124
- }
67
+ } else {
68
+ tools.logInfo('No commits found for version processing...applying minor version upgrade');
125
69
 
126
- } else if (isSupportBranch) {
127
- if (pkg.backend) {
70
+ if (isNextBranch) {
128
71
  newVersion = semver.inc(currentVersion, 'prerelease');
72
+ } else {
73
+ newVersion = semver.inc(currentVersion, 'minor');
129
74
  }
130
- } else if (isHotfixBranch) {
131
- newVersion = semver.inc(currentVersion, 'prerelease');
132
- }
75
+ }
133
76
 
134
- } else {
135
- tools.logInfo('No commits found for version processing...applying minor version upgrade');
77
+ tools.logInfo('probable new version : ' + newVersion);
136
78
 
137
- if (isNextBranch) {
138
- newVersion = semver.inc(currentVersion, 'prerelease');
79
+ if (isSnapshot) {
80
+ if (pkg.backend) {
81
+ if (pkg.build && pkg.build.nodejs) {
82
+ newVersion += '-snapshot-' + Date.now();
83
+ } else {
84
+ newVersion += '-SNAPSHOT';
85
+ }
139
86
  } else {
140
- newVersion = semver.inc(currentVersion, 'minor');
87
+ newVersion += '-snapshot-' + Date.now();
141
88
  }
142
89
  }
143
90
 
91
+ if (isSupportBranch && pkg.backend) {
92
+ newVersion = semver.inc(currentVersion, 'prerelease');
93
+ }
94
+
95
+ if (isHotfixBranch) {
96
+ newVersion = semver.inc(currentVersion, 'prerelease');
97
+ }
98
+
144
99
  tools.logSuccess('new version generated : ' + newVersion);
145
100
 
146
101
  return newVersion;
@@ -12,6 +12,7 @@ const metadataUtils = require('../metadata/metadata-utils');
12
12
 
13
13
  // inner modules
14
14
  const innerCommon = require('./common');
15
+ const innerPackageCommon = require('./package-common');
15
16
 
16
17
  // constants
17
18
  const { dryRun } = tools.getArgs();
@@ -21,8 +22,17 @@ const { dryRun } = tools.getArgs();
21
22
  module.exports.getNewVersion = (pkg, envTarget) => {
22
23
  let versionsMetadata;
23
24
  let envsMetadata;
25
+ let currentVersion;
24
26
 
25
27
  return Promise.resolve()
28
+ // get current version
29
+ .then(() => {
30
+ return innerPackageCommon.getCurrentVersion(pkg);
31
+ })
32
+ .then((version) => {
33
+ currentVersion = version;
34
+ })
35
+
26
36
  // fetch versions history and store
27
37
  .then(() => {
28
38
  return metadataUtils.packageVersions.getMetadata(pkg);
@@ -42,7 +52,7 @@ module.exports.getNewVersion = (pkg, envTarget) => {
42
52
 
43
53
  // generating new version based on the env target and the envs cycle type
44
54
  .then(() => {
45
- return innerCommon.getNewVersionDefault(envTarget, versionsMetadata, envsMetadata);
55
+ return innerCommon.getNewVersionDefault(envTarget, versionsMetadata, envsMetadata, currentVersion);
46
56
  })
47
57
 
48
58
  .catch((e) => {
@@ -9,6 +9,7 @@ const innerPackage = require('./package');
9
9
  const innerPackageCommon = require('./package-common');
10
10
  const innerPackageRemote = require('./package-remote');
11
11
  const innerPackageDefault = require('./package-default');
12
+ const innerCommon = require('./common');
12
13
 
13
14
  // re-exports inner modules
14
15
  module.exports.app = innerApp;
@@ -19,3 +20,4 @@ module.exports.package = innerPackage;
19
20
  module.exports.packageCommon = innerPackageCommon;
20
21
  module.exports.packageRemote = innerPackageRemote;
21
22
  module.exports.packageDefault = innerPackageDefault;
23
+ module.exports.common = innerCommon;
@@ -0,0 +1,124 @@
1
+ 'use strict';
2
+
3
+ const tools = require('../../utils/tools');
4
+ const https = require('https');
5
+ var fs = require('fs');
6
+ const { filePath, sourceLang, targetLang } = require('../tools').getArgs();
7
+ const TEXT = '<text>';
8
+ const TEXT_END = '</text>';
9
+ const CONTENT = '<content>';
10
+ const CONTENT_END = '</content>';
11
+
12
+ // example: node translate-utils.js --filePath c:\i18n\en.json --sourceLang en --targetLang bg
13
+
14
+ const readFile = (filePath) => {
15
+ return JSON.parse(fs.readFileSync(filePath));
16
+ }
17
+
18
+ const translate = (text, sourceLang, targetLang) => {
19
+ tools.logTitle(`Translating file : ${filePath} from ${sourceLang} to ${targetLang}.`);
20
+ return new Promise((resolve, reject) => {
21
+ const data = JSON.stringify({
22
+ textToTranslate: text,
23
+ sourceLanguage: sourceLang,
24
+ targetLanguage: targetLang
25
+ });
26
+
27
+ const options = {
28
+ hostname: 'europa.eu',
29
+ path: '/webtools/rest/etrans/translate',
30
+ method: 'POST',
31
+ headers: {
32
+ 'Content-Type': 'application/json',
33
+ 'Content-Length': data.length
34
+ }
35
+ };
36
+
37
+ const req = https.request(options, res => {
38
+ let chunks_of_data = [];
39
+
40
+ res.on('data', d => {
41
+ chunks_of_data.push(d);
42
+ });
43
+ res.on('end', () => {
44
+ tools.logInfo('Received response from eTrans service.');
45
+ let response_body = Buffer.concat(chunks_of_data);
46
+ var response = JSON.parse(response_body);
47
+ resolve(Buffer.from(response.translation, 'base64').toString());
48
+ });
49
+ });
50
+
51
+ req.on('error', error => {
52
+ reject(error);
53
+ return;
54
+ });
55
+
56
+ tools.logInfo('Sending request to eTrans service.');
57
+ req.write(data);
58
+ req.end();
59
+ });
60
+ }
61
+
62
+ const prepareStringToTranslate = (arrLines, result) => {
63
+ var keys = Object.keys(arrLines);
64
+ keys.forEach((key) => {
65
+ if (arrLines[key] instanceof Object && !(arrLines[key] instanceof Array)) {
66
+ result += prepareStringToTranslate(arrLines[key], '');
67
+ } else {
68
+ result += `${TEXT}${arrLines[key]}${TEXT_END}`;
69
+ }
70
+ });
71
+ return result;
72
+ }
73
+
74
+ const createResultJsonFile = (arrLines, res) => {
75
+ const resString = res.split(`${CONTENT}${TEXT}`).pop().split(`${TEXT_END}${CONTENT_END}`)[0];
76
+ const resArr = resString.split(`${TEXT_END}${TEXT}`);
77
+ var resultJson = Object.assign({}, arrLines);
78
+ var finalRes = iterateResultToJson(resultJson, resArr);
79
+ return finalRes;
80
+ }
81
+
82
+ const iterateResultToJson = (resultJson, resArr) => {
83
+ var keys = Object.keys(resultJson);
84
+ keys.forEach((key, index) => {
85
+ if (resultJson[key] instanceof Object && !(resultJson[key] instanceof Array)) { // If there is nested JSON
86
+ resultJson[key] = iterateResultToJson(resultJson[key], resArr.slice(index));
87
+ var subKeys = Object.keys(resultJson[key]);
88
+ resArr.splice(index, subKeys.length - 1); // remove elements for nested JSON from results array
89
+ } else {
90
+ if (resultJson[key] instanceof Array) {
91
+ resultJson[key] = resArr[index].split(',').map(el => el.trim());
92
+ } else {
93
+ resultJson[key] = resArr[index];
94
+ }
95
+ }
96
+ });
97
+ return resultJson;
98
+ }
99
+
100
+ const translateI18nFile = () => {
101
+ return Promise.resolve()
102
+ .then(() => {
103
+ const arrLines = readFile(filePath);
104
+ const destFolder = filePath.substring(0, filePath.lastIndexOf("\\") + 1);
105
+ var stringToTranslate = prepareStringToTranslate(arrLines, '');
106
+ translate(`${CONTENT}${stringToTranslate}${CONTENT_END}`, sourceLang, targetLang)
107
+ .then((res) => {
108
+ const resultJson = createResultJsonFile(arrLines, res);
109
+ fs.writeFile(`${destFolder}${targetLang}.json`, JSON.stringify(resultJson, null, 2), function (err) {
110
+ if (err) { tools.logError(err); }
111
+ tools.logInfo(`File ${targetLang}.json created.`);
112
+ });
113
+
114
+ }, (err) => {
115
+ tools.logInfo(`Error: ${err}`);
116
+ });
117
+ }).catch((error) => {
118
+ tools.logError(error);
119
+ });
120
+ }
121
+
122
+ translateI18nFile();
123
+
124
+ module.exports.translateI18nFile = translateI18nFile;