@tilde-nlp/ngx-common 6.0.36 → 6.0.37

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.
@@ -0,0 +1,2 @@
1
+ export const TILDE_VENDOR = 'Tilde';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZGUtdmVuZG9yLmNvbnN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3Rlcm1pbm9sb2d5L3NlcnZpY2VzL3N5c3RlbS1hcGktdjIvbW9kZWxzL3RpbGRlLXZlbmRvci5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRJTERFX1ZFTkRPUiA9ICdUaWxkZSc7XHJcbiJdfQ==
@@ -2,6 +2,7 @@ import { Injectable } from "@angular/core";
2
2
  import { map } from "rxjs";
3
3
  import { AuthHeadersHelper } from "../../../helpers";
4
4
  import { EngineStatus, EngineSubStatus } from "./models";
5
+ import { TILDE_VENDOR } from "./models/tilde-vendor.const";
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/common/http";
7
8
  import * as i2 from "../../config/services";
@@ -20,32 +21,36 @@ export class SystemApiService {
20
21
  if (!showDisabledEngines) {
21
22
  unavailableStatuses.push(EngineStatus.OFF);
22
23
  }
24
+ const engineMap = {};
23
25
  engineList.engines.forEach((engine) => {
24
26
  if (unavailableStatuses.includes(engine.status) || unavailableSubStatuses.includes(engine.subStatus)) {
25
27
  return;
26
28
  }
27
29
  if (engine.domains && Object.keys(engine.domains).length) {
28
- convertedEngines.push(...this.generateSystemsFromDomains(engine));
30
+ convertedEngines.push(...this.generateSystemsFromDomains(engine, convertedEngines, engineMap));
29
31
  }
30
32
  else {
31
- convertedEngines.push(...this.generateSystemsFromLanguages(engine));
33
+ convertedEngines.push(...this.generateSystemsFromLanguages(engine, convertedEngines, engineMap));
32
34
  }
33
35
  });
34
36
  return convertedEngines;
35
37
  }));
36
38
  }
37
- generateSystemsFromLanguages(engine) {
39
+ generateSystemsFromLanguages(engine, convertedEngines, engineMap) {
38
40
  const systems = [];
39
41
  engine.sourceLanguages.forEach((sourceLanguage) => {
40
42
  engine.targetLanguages.forEach((targetLanguage) => {
41
43
  if (sourceLanguage !== targetLanguage) {
42
- systems.push(this.createSystemObject(engine.id, sourceLanguage, targetLanguage, engine.domain, engine.vendor, engine.supportsTermCollections));
44
+ const newSystem = this.createSystemObject(engine.id, sourceLanguage, targetLanguage, engine.domain, engine.vendor, engine.supportsTermCollections);
45
+ if (this.isLanguageDirectionAdded(newSystem, convertedEngines, engineMap, engine.vendor)) {
46
+ systems.push(newSystem);
47
+ }
43
48
  }
44
49
  });
45
50
  });
46
51
  return systems;
47
52
  }
48
- generateSystemsFromDomains(engine) {
53
+ generateSystemsFromDomains(engine, convertedEngines, engineMap) {
49
54
  const domains = engine.domains;
50
55
  const systems = [];
51
56
  for (const domainKey in domains) {
@@ -56,19 +61,34 @@ export class SystemApiService {
56
61
  const targetLanguages = languages[sourceLanguage];
57
62
  // Loop through each key within the language
58
63
  targetLanguages.forEach((targetLanguage) => {
64
+ const newSystem = this.createSystemObject(engine.id, sourceLanguage, targetLanguage, domainKey, engine.vendor, engine.supportsTermCollections);
59
65
  if (sourceLanguage !== targetLanguage) {
60
- systems.push(this.createSystemObject(engine.id, sourceLanguage, targetLanguage, domainKey, engine.vendor, engine.supportsTermCollections));
66
+ if (this.isLanguageDirectionAdded(newSystem, convertedEngines, engineMap, engine.vendor)) {
67
+ systems.push(newSystem);
68
+ }
61
69
  }
62
70
  });
63
71
  }
64
72
  }
65
73
  return systems;
66
74
  }
75
+ isLanguageDirectionAdded(newSystem, convertedEngines, engineMap, vendor) {
76
+ const languageDirectionKey = `${newSystem.sourceLanguage}${newSystem.targetLanguage}${newSystem.domain}`;
77
+ if (engineMap[languageDirectionKey]) {
78
+ if (vendor === TILDE_VENDOR) {
79
+ const existingSystemIx = convertedEngines.findIndex((e) => e.sourceLanguage === newSystem.sourceLanguage && e.targetLanguage === newSystem.targetLanguage && e.domain === newSystem.domain);
80
+ convertedEngines[existingSystemIx] = newSystem;
81
+ }
82
+ return false;
83
+ }
84
+ engineMap[languageDirectionKey] = true;
85
+ return true;
86
+ }
67
87
  createSystemObject(id, sourceLanguage, targetLanguage, domain, vendor, includesTerminology) {
68
88
  const systemBase = {
69
89
  sourceLanguage,
70
90
  targetLanguage,
71
- domain,
91
+ domain: domain.toLowerCase(),
72
92
  languageId: `${sourceLanguage}-${targetLanguage}-${domain}-${vendor}-${id}`,
73
93
  id,
74
94
  vendor,
@@ -85,4 +105,4 @@ export class SystemApiService {
85
105
  providedIn: "root",
86
106
  }]
87
107
  }], () => [{ type: i1.HttpClient }, { type: i2.TerminologyConfigService }], null); })();
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3Rlcm1pbm9sb2d5L3NlcnZpY2VzL3N5c3RlbS1hcGktdjIvc3lzdGVtLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdyRCxPQUFPLEVBQVUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7OztBQU1qRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQTZCLElBQWdCLEVBQW1CLE1BQWdDO1FBQW5FLFNBQUksR0FBSixJQUFJLENBQVk7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBMEI7SUFDaEcsQ0FBQztJQUNELGtJQUFrSTtJQUNsSSxhQUFhLENBQUMsbUJBQTZCO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBdUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNoRyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNqQixNQUFNLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztZQUN0QyxNQUFNLG1CQUFtQixHQUFtQixDQUFDLFlBQVks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O1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsY0FBc0IsRUFBRSxjQUFzQixFQUFFLE1BQWMsRUFBRSxNQUFjLEVBQUUsbUJBQTRCO1FBQ2pKLE1BQU0sVUFBVSxHQUFXO1lBQ3pCLGNBQWM7WUFDZCxjQUFjO1lBQ2QsTUFBTTtZQUNOLFVBQVUsRUFBRSxHQUFHLGNBQWMsSUFBSSxjQUFjLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUU7WUFDM0UsRUFBRTtZQUNGLE1BQU07WUFDTixtQkFBbUI7U0FDcEIsQ0FBQztRQUVGLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7aUhBOUVVLGdCQUFnQjt1RUFBaEIsZ0JBQWdCLFdBQWhCLGdCQUFnQixtQkFGZixNQUFNOztpRkFFUCxnQkFBZ0I7Y0FINUIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQXV0aEhlYWRlcnNIZWxwZXIgfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBUZXJtaW5vbG9neUNvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3NlcnZpY2VzXCI7XHJcbmltcG9ydCB7IFN5c3RlbSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc3lzdGVtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEVuZ2luZSwgRW5naW5lU3RhdHVzLCBFbmdpbmVTdWJTdGF0dXMgfSBmcm9tIFwiLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgRW5naW5lTGlzdCB9IGZyb20gXCIuL21vZGVscy9lbmdpbmUtbGlzdC5tb2RlbFwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3lzdGVtQXBpU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogVGVybWlub2xvZ3lDb25maWdTZXJ2aWNlKSB7XHJcbiAgfVxyXG4gIC8vIE5vdGUgdGhhdCB0aGlzIGFwaSBjYWxsIGlzIGR1cGxpY2F0ZSBmcm9tIFdlYnNpdGUgZW5naW5lIHNlcnZpY2UuIE1pZ2h0IG5lZWQgc29tZSByZWZhY3RvcmluZyBhbmQgdXNpbmcgY29tbW9uIGVuZ2luZSBzZXJ2aWNlID9cclxuICBnZXRTeXN0ZW1MaXN0KHNob3dEaXNhYmxlZEVuZ2luZXM/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxTeXN0ZW1bXT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IEF1dGhIZWFkZXJzSGVscGVyLmdldEFwaVYyQXV0aEhlYWRlcnModGhpcy5jb25maWcudGVybUNvbmZpZy54QXBpS2V5ID8/ICcnLCB0aGlzLmNvbmZpZy50ZXJtQ29uZmlnLmFwcElkID8/ICcnKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEVuZ2luZUxpc3Q+KHRoaXMuY29uZmlnLnRlcm1Db25maWcuc3lzdGVtTGlzdFVybCBhcyBzdHJpbmcsIHsgaGVhZGVycyB9KS5waXBlKFxyXG4gICAgICBtYXAoKGVuZ2luZUxpc3QpID0+IHtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRFbmdpbmVzOiBTeXN0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHVuYXZhaWxhYmxlU3RhdHVzZXM6IEVuZ2luZVN0YXR1c1tdID0gW0VuZ2luZVN0YXR1cy5JTVBPUlRJTkddO1xyXG4gICAgICAgIGNvbnN0IHVuYXZhaWxhYmxlU3ViU3RhdHVzZXM6IEVuZ2luZVN1YlN0YXR1c1tdID0gW0VuZ2luZVN1YlN0YXR1cy5FcnJvckltcG9ydGluZ0ZhaWxlZCwgRW5naW5lU3ViU3RhdHVzLkVycm9yRGVsZXRpbmdGYWlsZWRdO1xyXG5cclxuICAgICAgICBpZiAoIXNob3dEaXNhYmxlZEVuZ2luZXMpIHtcclxuICAgICAgICAgIHVuYXZhaWxhYmxlU3RhdHVzZXMucHVzaChFbmdpbmVTdGF0dXMuT0ZGKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVuZ2luZUxpc3QuZW5naW5lcy5mb3JFYWNoKChlbmdpbmUpID0+IHtcclxuICAgICAgICAgIGlmICh1bmF2YWlsYWJsZVN0YXR1c2VzLmluY2x1ZGVzKGVuZ2luZS5zdGF0dXMpIHx8IHVuYXZhaWxhYmxlU3ViU3RhdHVzZXMuaW5jbHVkZXMoZW5naW5lLnN1YlN0YXR1cykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChlbmdpbmUuZG9tYWlucyAmJiBPYmplY3Qua2V5cyhlbmdpbmUuZG9tYWlucykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnZlcnRlZEVuZ2luZXMucHVzaCguLi50aGlzLmdlbmVyYXRlU3lzdGVtc0Zyb21Eb21haW5zKGVuZ2luZSkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udmVydGVkRW5naW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVTeXN0ZW1zRnJvbUxhbmd1YWdlcyhlbmdpbmUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRFbmdpbmVzO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVN5c3RlbXNGcm9tTGFuZ3VhZ2VzKGVuZ2luZTogRW5naW5lKTogU3lzdGVtW10ge1xyXG4gICAgY29uc3Qgc3lzdGVtczogU3lzdGVtW10gPSBbXTtcclxuICAgIGVuZ2luZS5zb3VyY2VMYW5ndWFnZXMuZm9yRWFjaCgoc291cmNlTGFuZ3VhZ2UpID0+IHtcclxuICAgICAgZW5naW5lLnRhcmdldExhbmd1YWdlcy5mb3JFYWNoKCh0YXJnZXRMYW5ndWFnZSkgPT4ge1xyXG4gICAgICAgIGlmIChzb3VyY2VMYW5ndWFnZSAhPT0gdGFyZ2V0TGFuZ3VhZ2UpIHtcclxuICAgICAgICAgIHN5c3RlbXMucHVzaCh0aGlzLmNyZWF0ZVN5c3RlbU9iamVjdChlbmdpbmUuaWQsIHNvdXJjZUxhbmd1YWdlLCB0YXJnZXRMYW5ndWFnZSwgZW5naW5lLmRvbWFpbiwgZW5naW5lLnZlbmRvciwgZW5naW5lLnN1cHBvcnRzVGVybUNvbGxlY3Rpb25zKSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHN5c3RlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlU3lzdGVtc0Zyb21Eb21haW5zKGVuZ2luZTogRW5naW5lKTogU3lzdGVtW10ge1xyXG4gICAgY29uc3QgZG9tYWlucyA9IGVuZ2luZS5kb21haW5zO1xyXG4gICAgY29uc3Qgc3lzdGVtczogU3lzdGVtW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGRvbWFpbktleSBpbiBkb21haW5zKSB7XHJcbiAgICAgIGNvbnN0IGRvbWFpbiA9IGRvbWFpbnNbZG9tYWluS2V5XTtcclxuXHJcbiAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGxhbmd1YWdlIHByb3BlcnR5XHJcbiAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IGRvbWFpbi5sYW5ndWFnZXM7XHJcbiAgICAgIGZvciAoY29uc3Qgc291cmNlTGFuZ3VhZ2UgaW4gbGFuZ3VhZ2VzKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0TGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzW3NvdXJjZUxhbmd1YWdlXTtcclxuICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBrZXkgd2l0aGluIHRoZSBsYW5ndWFnZVxyXG4gICAgICAgIHRhcmdldExhbmd1YWdlcy5mb3JFYWNoKCh0YXJnZXRMYW5ndWFnZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHNvdXJjZUxhbmd1YWdlICE9PSB0YXJnZXRMYW5ndWFnZSkge1xyXG4gICAgICAgICAgICBzeXN0ZW1zLnB1c2godGhpcy5jcmVhdGVTeXN0ZW1PYmplY3QoZW5naW5lLmlkLCBzb3VyY2VMYW5ndWFnZSwgdGFyZ2V0TGFuZ3VhZ2UsIGRvbWFpbktleSwgZW5naW5lLnZlbmRvciwgZW5naW5lLnN1cHBvcnRzVGVybUNvbGxlY3Rpb25zKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN5c3RlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVN5c3RlbU9iamVjdChpZDogc3RyaW5nLCBzb3VyY2VMYW5ndWFnZTogc3RyaW5nLCB0YXJnZXRMYW5ndWFnZTogc3RyaW5nLCBkb21haW46IHN0cmluZywgdmVuZG9yOiBzdHJpbmcsIGluY2x1ZGVzVGVybWlub2xvZ3k6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHN5c3RlbUJhc2U6IFN5c3RlbSA9IHtcclxuICAgICAgc291cmNlTGFuZ3VhZ2UsXHJcbiAgICAgIHRhcmdldExhbmd1YWdlLFxyXG4gICAgICBkb21haW4sXHJcbiAgICAgIGxhbmd1YWdlSWQ6IGAke3NvdXJjZUxhbmd1YWdlfS0ke3RhcmdldExhbmd1YWdlfS0ke2RvbWFpbn0tJHt2ZW5kb3J9LSR7aWR9YCxcclxuICAgICAgaWQsXHJcbiAgICAgIHZlbmRvcixcclxuICAgICAgaW5jbHVkZXNUZXJtaW5vbG9neVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gc3lzdGVtQmFzZTtcclxuICB9XHJcbn1cclxuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3Rlcm1pbm9sb2d5L3NlcnZpY2VzL3N5c3RlbS1hcGktdjIvc3lzdGVtLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdyRCxPQUFPLEVBQVUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFLM0QsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUE2QixJQUFnQixFQUFtQixNQUFnQztRQUFuRSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQW1CLFdBQU0sR0FBTixNQUFNLENBQTBCO0lBQ2hHLENBQUM7SUFDRCxrSUFBa0k7SUFDbEksYUFBYSxDQUFDLG1CQUE2QjtRQUN6QyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDaEcsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDakIsTUFBTSxnQkFBZ0IsR0FBYSxF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QUMsQ0FBQztnQkFDNUwsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDakQsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUV2QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsY0FBc0IsRUFBRSxjQUFzQixFQUFFLE1BQWMsRUFBRSxNQUFjLEVBQUUsbUJBQTRCO1FBQ2pKLE1BQU0sVUFBVSxHQUFXO1lBQ3pCLGNBQWM7WUFDZCxjQUFjO1lBQ2QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDNUIsVUFBVSxFQUFFLEdBQUcsY0FBYyxJQUFJLGNBQWMsSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRTtZQUMzRSxFQUFFO1lBQ0YsTUFBTTtZQUNOLG1CQUFtQjtTQUNwQixDQUFDO1FBRUYsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztpSEF4R1UsZ0JBQWdCO3VFQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCLG1CQUZmLE1BQU07O2lGQUVQLGdCQUFnQjtjQUg1QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBBdXRoSGVhZGVyc0hlbHBlciB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IFRlcm1pbm9sb2d5Q29uZmlnU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb25maWcvc2VydmljZXNcIjtcclxuaW1wb3J0IHsgU3lzdGVtIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zeXN0ZW0ubW9kZWxcIjtcclxuaW1wb3J0IHsgRW5naW5lLCBFbmdpbmVTdGF0dXMsIEVuZ2luZVN1YlN0YXR1cyB9IGZyb20gXCIuL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBFbmdpbmVMaXN0IH0gZnJvbSBcIi4vbW9kZWxzL2VuZ2luZS1saXN0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IFRJTERFX1ZFTkRPUiB9IGZyb20gXCIuL21vZGVscy90aWxkZS12ZW5kb3IuY29uc3RcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFN5c3RlbUFwaVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRlcm1pbm9sb2d5Q29uZmlnU2VydmljZSkge1xyXG4gIH1cclxuICAvLyBOb3RlIHRoYXQgdGhpcyBhcGkgY2FsbCBpcyBkdXBsaWNhdGUgZnJvbSBXZWJzaXRlIGVuZ2luZSBzZXJ2aWNlLiBNaWdodCBuZWVkIHNvbWUgcmVmYWN0b3JpbmcgYW5kIHVzaW5nIGNvbW1vbiBlbmdpbmUgc2VydmljZSA/XHJcbiAgZ2V0U3lzdGVtTGlzdChzaG93RGlzYWJsZWRFbmdpbmVzPzogYm9vbGVhbik6IE9ic2VydmFibGU8U3lzdGVtW10+IHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBBdXRoSGVhZGVyc0hlbHBlci5nZXRBcGlWMkF1dGhIZWFkZXJzKHRoaXMuY29uZmlnLnRlcm1Db25maWcueEFwaUtleSA/PyAnJywgdGhpcy5jb25maWcudGVybUNvbmZpZy5hcHBJZCA/PyAnJyk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxFbmdpbmVMaXN0Pih0aGlzLmNvbmZpZy50ZXJtQ29uZmlnLnN5c3RlbUxpc3RVcmwgYXMgc3RyaW5nLCB7IGhlYWRlcnMgfSkucGlwZShcclxuICAgICAgbWFwKChlbmdpbmVMaXN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkRW5naW5lczogU3lzdGVtW10gPSBbXTtcclxuICAgICAgICBjb25zdCB1bmF2YWlsYWJsZVN0YXR1c2VzOiBFbmdpbmVTdGF0dXNbXSA9IFtFbmdpbmVTdGF0dXMuSU1QT1JUSU5HXTtcclxuICAgICAgICBjb25zdCB1bmF2YWlsYWJsZVN1YlN0YXR1c2VzOiBFbmdpbmVTdWJTdGF0dXNbXSA9IFtFbmdpbmVTdWJTdGF0dXMuRXJyb3JJbXBvcnRpbmdGYWlsZWQsIEVuZ2luZVN1YlN0YXR1cy5FcnJvckRlbGV0aW5nRmFpbGVkXTtcclxuXHJcbiAgICAgICAgaWYgKCFzaG93RGlzYWJsZWRFbmdpbmVzKSB7XHJcbiAgICAgICAgICB1bmF2YWlsYWJsZVN0YXR1c2VzLnB1c2goRW5naW5lU3RhdHVzLk9GRik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbmdpbmVNYXAgPSB7fTtcclxuXHJcbiAgICAgICAgZW5naW5lTGlzdC5lbmdpbmVzLmZvckVhY2goKGVuZ2luZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHVuYXZhaWxhYmxlU3RhdHVzZXMuaW5jbHVkZXMoZW5naW5lLnN0YXR1cykgfHwgdW5hdmFpbGFibGVTdWJTdGF0dXNlcy5pbmNsdWRlcyhlbmdpbmUuc3ViU3RhdHVzKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGVuZ2luZS5kb21haW5zICYmIE9iamVjdC5rZXlzKGVuZ2luZS5kb21haW5zKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29udmVydGVkRW5naW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVTeXN0ZW1zRnJvbURvbWFpbnMoZW5naW5lLCBjb252ZXJ0ZWRFbmdpbmVzLCBlbmdpbmVNYXApKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnZlcnRlZEVuZ2luZXMucHVzaCguLi50aGlzLmdlbmVyYXRlU3lzdGVtc0Zyb21MYW5ndWFnZXMoZW5naW5lLCBjb252ZXJ0ZWRFbmdpbmVzLCBlbmdpbmVNYXApKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRFbmdpbmVzO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVN5c3RlbXNGcm9tTGFuZ3VhZ2VzKGVuZ2luZTogRW5naW5lLCBjb252ZXJ0ZWRFbmdpbmVzOiBTeXN0ZW1bXSwgZW5naW5lTWFwOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSk6IFN5c3RlbVtdIHtcclxuICAgIGNvbnN0IHN5c3RlbXM6IFN5c3RlbVtdID0gW107XHJcbiAgICBlbmdpbmUuc291cmNlTGFuZ3VhZ2VzLmZvckVhY2goKHNvdXJjZUxhbmd1YWdlKSA9PiB7XHJcbiAgICAgIGVuZ2luZS50YXJnZXRMYW5ndWFnZXMuZm9yRWFjaCgodGFyZ2V0TGFuZ3VhZ2UpID0+IHtcclxuICAgICAgICBpZiAoc291cmNlTGFuZ3VhZ2UgIT09IHRhcmdldExhbmd1YWdlKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdTeXN0ZW0gPSB0aGlzLmNyZWF0ZVN5c3RlbU9iamVjdChlbmdpbmUuaWQsIHNvdXJjZUxhbmd1YWdlLCB0YXJnZXRMYW5ndWFnZSwgZW5naW5lLmRvbWFpbiwgZW5naW5lLnZlbmRvciwgZW5naW5lLnN1cHBvcnRzVGVybUNvbGxlY3Rpb25zKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc0xhbmd1YWdlRGlyZWN0aW9uQWRkZWQobmV3U3lzdGVtLCBjb252ZXJ0ZWRFbmdpbmVzLCBlbmdpbmVNYXAsIGVuZ2luZS52ZW5kb3IpKSB7XHJcbiAgICAgICAgICAgIHN5c3RlbXMucHVzaChuZXdTeXN0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gc3lzdGVtcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVTeXN0ZW1zRnJvbURvbWFpbnMoZW5naW5lOiBFbmdpbmUsIGNvbnZlcnRlZEVuZ2luZXM6IFN5c3RlbVtdLCBlbmdpbmVNYXA6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KTogU3lzdGVtW10geyAgICBcclxuICAgIGNvbnN0IGRvbWFpbnMgPSBlbmdpbmUuZG9tYWlucztcclxuICAgIGNvbnN0IHN5c3RlbXM6IFN5c3RlbVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBkb21haW5LZXkgaW4gZG9tYWlucykge1xyXG4gICAgICBjb25zdCBkb21haW4gPSBkb21haW5zW2RvbWFpbktleV07XHJcblxyXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBsYW5ndWFnZSBwcm9wZXJ0eVxyXG4gICAgICBjb25zdCBsYW5ndWFnZXMgPSBkb21haW4ubGFuZ3VhZ2VzO1xyXG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZUxhbmd1YWdlIGluIGxhbmd1YWdlcykge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldExhbmd1YWdlcyA9IGxhbmd1YWdlc1tzb3VyY2VMYW5ndWFnZV07XHJcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2gga2V5IHdpdGhpbiB0aGUgbGFuZ3VhZ2VcclxuICAgICAgICB0YXJnZXRMYW5ndWFnZXMuZm9yRWFjaCgodGFyZ2V0TGFuZ3VhZ2UpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5ld1N5c3RlbSA9IHRoaXMuY3JlYXRlU3lzdGVtT2JqZWN0KGVuZ2luZS5pZCwgc291cmNlTGFuZ3VhZ2UsIHRhcmdldExhbmd1YWdlLCBkb21haW5LZXksIGVuZ2luZS52ZW5kb3IsIGVuZ2luZS5zdXBwb3J0c1Rlcm1Db2xsZWN0aW9ucyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmIChzb3VyY2VMYW5ndWFnZSAhPT0gdGFyZ2V0TGFuZ3VhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNMYW5ndWFnZURpcmVjdGlvbkFkZGVkKG5ld1N5c3RlbSwgY29udmVydGVkRW5naW5lcywgZW5naW5lTWFwLCBlbmdpbmUudmVuZG9yKSkge1xyXG4gICAgICAgICAgICAgIHN5c3RlbXMucHVzaChuZXdTeXN0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzeXN0ZW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0xhbmd1YWdlRGlyZWN0aW9uQWRkZWQobmV3U3lzdGVtOiBTeXN0ZW0sIGNvbnZlcnRlZEVuZ2luZXM6IFN5c3RlbVtdLCBlbmdpbmVNYXA6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9LCB2ZW5kb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbGFuZ3VhZ2VEaXJlY3Rpb25LZXkgPSBgJHtuZXdTeXN0ZW0uc291cmNlTGFuZ3VhZ2V9JHtuZXdTeXN0ZW0udGFyZ2V0TGFuZ3VhZ2V9JHtuZXdTeXN0ZW0uZG9tYWlufWA7XHJcbiAgICBcclxuICAgIGlmIChlbmdpbmVNYXBbbGFuZ3VhZ2VEaXJlY3Rpb25LZXldKSB7XHJcbiAgICAgIGlmICh2ZW5kb3IgPT09IFRJTERFX1ZFTkRPUikge1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU3lzdGVtSXggPSBjb252ZXJ0ZWRFbmdpbmVzLmZpbmRJbmRleCgoZSkgPT4gZS5zb3VyY2VMYW5ndWFnZSA9PT0gbmV3U3lzdGVtLnNvdXJjZUxhbmd1YWdlICYmIGUudGFyZ2V0TGFuZ3VhZ2UgPT09IG5ld1N5c3RlbS50YXJnZXRMYW5ndWFnZSAmJiBlLmRvbWFpbiA9PT0gbmV3U3lzdGVtLmRvbWFpbik7XHJcbiAgICAgICAgY29udmVydGVkRW5naW5lc1tleGlzdGluZ1N5c3RlbUl4XSA9IG5ld1N5c3RlbTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBlbmdpbmVNYXBbbGFuZ3VhZ2VEaXJlY3Rpb25LZXldID0gdHJ1ZTtcclxuICAgIFxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVN5c3RlbU9iamVjdChpZDogc3RyaW5nLCBzb3VyY2VMYW5ndWFnZTogc3RyaW5nLCB0YXJnZXRMYW5ndWFnZTogc3RyaW5nLCBkb21haW46IHN0cmluZywgdmVuZG9yOiBzdHJpbmcsIGluY2x1ZGVzVGVybWlub2xvZ3k6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHN5c3RlbUJhc2U6IFN5c3RlbSA9IHtcclxuICAgICAgc291cmNlTGFuZ3VhZ2UsXHJcbiAgICAgIHRhcmdldExhbmd1YWdlLFxyXG4gICAgICBkb21haW46IGRvbWFpbi50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICBsYW5ndWFnZUlkOiBgJHtzb3VyY2VMYW5ndWFnZX0tJHt0YXJnZXRMYW5ndWFnZX0tJHtkb21haW59LSR7dmVuZG9yfS0ke2lkfWAsXHJcbiAgICAgIGlkLFxyXG4gICAgICB2ZW5kb3IsXHJcbiAgICAgIGluY2x1ZGVzVGVybWlub2xvZ3lcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHN5c3RlbUJhc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -837,6 +837,8 @@ var EngineSubStatus;
837
837
  EngineSubStatus["ErrorDeletingTermsFailed"] = "ErrorDeletingTermsFailed";
838
838
  })(EngineSubStatus || (EngineSubStatus = {}));
839
839
 
840
+ const TILDE_VENDOR = 'Tilde';
841
+
840
842
  class TerminologyConfigService {
841
843
  constructor() {
842
844
  this._termConfig = {};
@@ -897,32 +899,36 @@ class SystemApiService {
897
899
  if (!showDisabledEngines) {
898
900
  unavailableStatuses.push(EngineStatus.OFF);
899
901
  }
902
+ const engineMap = {};
900
903
  engineList.engines.forEach((engine) => {
901
904
  if (unavailableStatuses.includes(engine.status) || unavailableSubStatuses.includes(engine.subStatus)) {
902
905
  return;
903
906
  }
904
907
  if (engine.domains && Object.keys(engine.domains).length) {
905
- convertedEngines.push(...this.generateSystemsFromDomains(engine));
908
+ convertedEngines.push(...this.generateSystemsFromDomains(engine, convertedEngines, engineMap));
906
909
  }
907
910
  else {
908
- convertedEngines.push(...this.generateSystemsFromLanguages(engine));
911
+ convertedEngines.push(...this.generateSystemsFromLanguages(engine, convertedEngines, engineMap));
909
912
  }
910
913
  });
911
914
  return convertedEngines;
912
915
  }));
913
916
  }
914
- generateSystemsFromLanguages(engine) {
917
+ generateSystemsFromLanguages(engine, convertedEngines, engineMap) {
915
918
  const systems = [];
916
919
  engine.sourceLanguages.forEach((sourceLanguage) => {
917
920
  engine.targetLanguages.forEach((targetLanguage) => {
918
921
  if (sourceLanguage !== targetLanguage) {
919
- systems.push(this.createSystemObject(engine.id, sourceLanguage, targetLanguage, engine.domain, engine.vendor, engine.supportsTermCollections));
922
+ const newSystem = this.createSystemObject(engine.id, sourceLanguage, targetLanguage, engine.domain, engine.vendor, engine.supportsTermCollections);
923
+ if (this.isLanguageDirectionAdded(newSystem, convertedEngines, engineMap, engine.vendor)) {
924
+ systems.push(newSystem);
925
+ }
920
926
  }
921
927
  });
922
928
  });
923
929
  return systems;
924
930
  }
925
- generateSystemsFromDomains(engine) {
931
+ generateSystemsFromDomains(engine, convertedEngines, engineMap) {
926
932
  const domains = engine.domains;
927
933
  const systems = [];
928
934
  for (const domainKey in domains) {
@@ -933,19 +939,34 @@ class SystemApiService {
933
939
  const targetLanguages = languages[sourceLanguage];
934
940
  // Loop through each key within the language
935
941
  targetLanguages.forEach((targetLanguage) => {
942
+ const newSystem = this.createSystemObject(engine.id, sourceLanguage, targetLanguage, domainKey, engine.vendor, engine.supportsTermCollections);
936
943
  if (sourceLanguage !== targetLanguage) {
937
- systems.push(this.createSystemObject(engine.id, sourceLanguage, targetLanguage, domainKey, engine.vendor, engine.supportsTermCollections));
944
+ if (this.isLanguageDirectionAdded(newSystem, convertedEngines, engineMap, engine.vendor)) {
945
+ systems.push(newSystem);
946
+ }
938
947
  }
939
948
  });
940
949
  }
941
950
  }
942
951
  return systems;
943
952
  }
953
+ isLanguageDirectionAdded(newSystem, convertedEngines, engineMap, vendor) {
954
+ const languageDirectionKey = `${newSystem.sourceLanguage}${newSystem.targetLanguage}${newSystem.domain}`;
955
+ if (engineMap[languageDirectionKey]) {
956
+ if (vendor === TILDE_VENDOR) {
957
+ const existingSystemIx = convertedEngines.findIndex((e) => e.sourceLanguage === newSystem.sourceLanguage && e.targetLanguage === newSystem.targetLanguage && e.domain === newSystem.domain);
958
+ convertedEngines[existingSystemIx] = newSystem;
959
+ }
960
+ return false;
961
+ }
962
+ engineMap[languageDirectionKey] = true;
963
+ return true;
964
+ }
944
965
  createSystemObject(id, sourceLanguage, targetLanguage, domain, vendor, includesTerminology) {
945
966
  const systemBase = {
946
967
  sourceLanguage,
947
968
  targetLanguage,
948
- domain,
969
+ domain: domain.toLowerCase(),
949
970
  languageId: `${sourceLanguage}-${targetLanguage}-${domain}-${vendor}-${id}`,
950
971
  id,
951
972
  vendor,