trm-core 6.2.4 → 6.3.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 (129) hide show
  1. package/changelog.txt +29 -0
  2. package/dist/abapgit/DotAbapGit.d.ts +8 -0
  3. package/dist/abapgit/DotAbapGit.js +80 -0
  4. package/dist/abapgit/index.d.ts +1 -0
  5. package/dist/abapgit/index.js +17 -0
  6. package/dist/actions/checkPackageDependencies/analyze.js +1 -1
  7. package/dist/actions/findDependencies/parseSenvi.js +3 -0
  8. package/dist/actions/findDependencies/setTrmDependencies.js +93 -36
  9. package/dist/actions/install/checkTransports.js +71 -1
  10. package/dist/actions/install/executePostActivities.d.ts +3 -0
  11. package/dist/actions/install/executePostActivities.js +62 -0
  12. package/dist/actions/install/generateInstallTransport.js +1 -0
  13. package/dist/actions/install/importCustTransport.js +1 -0
  14. package/dist/actions/install/importDevcTransport.js +4 -0
  15. package/dist/actions/install/importLangTransport.js +1 -0
  16. package/dist/actions/install/importTadirTransport.js +2 -0
  17. package/dist/actions/install/index.d.ts +9 -4
  18. package/dist/actions/install/index.js +7 -1
  19. package/dist/actions/install/init.js +19 -3
  20. package/dist/actions/install/installDependencies.js +1 -9
  21. package/dist/actions/install/migrate.d.ts +3 -0
  22. package/dist/actions/install/migrate.js +35 -0
  23. package/dist/actions/install/readTadir.js +41 -2
  24. package/dist/actions/install/refreshTmsTxt.d.ts +3 -0
  25. package/dist/actions/install/refreshTmsTxt.js +33 -0
  26. package/dist/actions/install/setInstallDevclass.js +11 -1
  27. package/dist/actions/installDependency/index.d.ts +2 -2
  28. package/dist/actions/installDependency/init.js +4 -0
  29. package/dist/actions/publish/findDependencies.js +20 -15
  30. package/dist/actions/publish/generateCustTransport.js +2 -0
  31. package/dist/actions/publish/generateDevcTransport.js +2 -0
  32. package/dist/actions/publish/generateLangTransport.js +6 -2
  33. package/dist/actions/publish/generateTadirTransport.js +15 -1
  34. package/dist/actions/publish/getSourceCode.d.ts +3 -0
  35. package/dist/actions/publish/getSourceCode.js +36 -0
  36. package/dist/actions/publish/index.d.ts +12 -3
  37. package/dist/actions/publish/index.js +2 -0
  38. package/dist/actions/publish/init.js +10 -2
  39. package/dist/actions/publish/publishToRegistry.js +5 -1
  40. package/dist/actions/publish/setManifestValues.js +69 -1
  41. package/dist/actions/publish/setReadme.js +8 -1
  42. package/dist/client/RESTClient.d.ts +11 -0
  43. package/dist/client/RESTClient.js +91 -0
  44. package/dist/client/RFCClient.d.ts +11 -0
  45. package/dist/client/RFCClient.js +104 -19
  46. package/dist/client/components/LANGU.d.ts +1 -0
  47. package/dist/client/components/LANGU.js +2 -0
  48. package/dist/client/components/SEOCLSNAME.d.ts +1 -0
  49. package/dist/client/components/SEOCLSNAME.js +2 -0
  50. package/dist/client/components/SEODESCR.d.ts +1 -0
  51. package/dist/client/components/SEODESCR.js +2 -0
  52. package/dist/client/components/SYMSGID.d.ts +1 -0
  53. package/dist/client/components/SYMSGID.js +2 -0
  54. package/dist/client/components/SYMSGNO.d.ts +1 -0
  55. package/dist/client/components/SYMSGNO.js +2 -0
  56. package/dist/client/components/SYMSGTY.d.ts +1 -0
  57. package/dist/client/components/SYMSGTY.js +2 -0
  58. package/dist/client/components/SYMSGV.d.ts +1 -0
  59. package/dist/client/components/SYMSGV.js +2 -0
  60. package/dist/client/components/TRSTATUS.d.ts +1 -0
  61. package/dist/client/components/TRSTATUS.js +2 -0
  62. package/dist/client/components/ZTRM_TRKORR.d.ts +1 -0
  63. package/dist/client/components/ZTRM_TRKORR.js +2 -0
  64. package/dist/client/components/index.d.ts +9 -0
  65. package/dist/client/components/index.js +9 -0
  66. package/dist/client/struct/E070.d.ts +2 -1
  67. package/dist/client/struct/SEOCLASSTX.d.ts +6 -0
  68. package/dist/client/struct/SEOCLASSTX.js +2 -0
  69. package/dist/client/struct/SYMSG.d.ts +10 -0
  70. package/dist/client/struct/SYMSG.js +2 -0
  71. package/dist/client/struct/index.d.ts +2 -0
  72. package/dist/client/struct/index.js +2 -0
  73. package/dist/commons/checkCoreTrmDependencies.d.ts +7 -0
  74. package/dist/commons/checkCoreTrmDependencies.js +49 -0
  75. package/dist/commons/getCoreTrmDependencies.d.ts +3 -0
  76. package/dist/commons/getCoreTrmDependencies.js +8 -0
  77. package/dist/commons/getNodePackage.d.ts +1 -0
  78. package/dist/commons/getNodePackage.js +61 -0
  79. package/dist/commons/index.d.ts +3 -0
  80. package/dist/commons/index.js +3 -0
  81. package/dist/logger/CliLogger.d.ts +1 -0
  82. package/dist/logger/CliLogger.js +19 -0
  83. package/dist/logger/ConsoleLogger.d.ts +1 -0
  84. package/dist/logger/ConsoleLogger.js +19 -0
  85. package/dist/logger/DummyLogger.d.ts +1 -0
  86. package/dist/logger/DummyLogger.js +1 -0
  87. package/dist/logger/ILogger.d.ts +1 -0
  88. package/dist/logger/Logger.d.ts +1 -0
  89. package/dist/logger/Logger.js +5 -0
  90. package/dist/manifest/Manifest.d.ts +1 -0
  91. package/dist/manifest/Manifest.js +69 -5
  92. package/dist/manifest/PostActivity.d.ts +11 -0
  93. package/dist/manifest/PostActivity.js +150 -0
  94. package/dist/manifest/TrmManifest.d.ts +1 -0
  95. package/dist/manifest/TrmManifestBase.d.ts +2 -0
  96. package/dist/manifest/TrmManifestNamespace.d.ts +1 -0
  97. package/dist/manifest/TrmManifestPostActivity.d.ts +7 -0
  98. package/dist/manifest/TrmManifestPostActivity.js +2 -0
  99. package/dist/manifest/index.d.ts +2 -0
  100. package/dist/manifest/index.js +2 -0
  101. package/dist/registry/AbstractRegistry.d.ts +19 -0
  102. package/dist/registry/AbstractRegistry.js +6 -0
  103. package/dist/registry/FileSystem.d.ts +23 -0
  104. package/dist/registry/FileSystem.js +161 -0
  105. package/dist/registry/Registry.d.ts +4 -3
  106. package/dist/registry/Registry.js +8 -5
  107. package/dist/registry/RegistryProvider.d.ts +5 -0
  108. package/dist/registry/RegistryProvider.js +35 -0
  109. package/dist/registry/RegistryType.d.ts +2 -1
  110. package/dist/registry/RegistryType.js +1 -0
  111. package/dist/registry/index.d.ts +3 -1
  112. package/dist/registry/index.js +3 -1
  113. package/dist/systemConnector/ISystemConnector.d.ts +11 -0
  114. package/dist/systemConnector/ISystemConnectorBase.d.ts +4 -3
  115. package/dist/systemConnector/RESTSystemConnector.d.ts +11 -0
  116. package/dist/systemConnector/RESTSystemConnector.js +40 -0
  117. package/dist/systemConnector/RFCSystemConnector.d.ts +11 -0
  118. package/dist/systemConnector/RFCSystemConnector.js +40 -0
  119. package/dist/systemConnector/SystemConnector.d.ts +15 -3
  120. package/dist/systemConnector/SystemConnector.js +65 -2
  121. package/dist/systemConnector/SystemConnectorBase.d.ts +8 -5
  122. package/dist/systemConnector/SystemConnectorBase.js +86 -41
  123. package/dist/transport/Transport.d.ts +13 -3
  124. package/dist/transport/Transport.js +124 -39
  125. package/dist/trmPackage/TrmArtifact.d.ts +9 -2
  126. package/dist/trmPackage/TrmArtifact.js +30 -9
  127. package/dist/trmPackage/TrmPackage.d.ts +6 -6
  128. package/dist/trmPackage/TrmPackage.js +1 -2
  129. package/package.json +18 -8
@@ -1,11 +1,11 @@
1
1
  import { R3trans, R3transOptions } from "node-r3trans";
2
- import { Registry } from "../../registry";
3
2
  import { Transport } from "../../transport";
4
3
  import { TransportBinary, TrmArtifact, TrmPackage } from "../../trmPackage";
5
4
  import { Manifest, TrmManifest, TrmManifestDependency } from "../../manifest";
6
5
  import { IActionContext } from "..";
7
6
  import { DEVCLASS, E071, NAMESPACE, TADIR, TDEVC, TDEVCT } from "../../client";
8
7
  import { PackageHierarchy } from "../../commons";
8
+ import { AbstractRegistry } from "../../registry";
9
9
  export type InstallPackageReplacements = {
10
10
  originalDevclass: string;
11
11
  installDevclass: string;
@@ -21,12 +21,14 @@ export type InstallActionInputInstallData = {
21
21
  timeout?: number;
22
22
  noLang?: boolean;
23
23
  noCust?: boolean;
24
+ replaceExistingTransports?: boolean;
24
25
  };
25
26
  checks?: {
26
27
  safe?: boolean;
27
28
  noSapEntries?: boolean;
28
29
  noObjectTypes?: boolean;
29
30
  noDependencies?: boolean;
31
+ noExistingObjects?: boolean;
30
32
  };
31
33
  installDevclass?: {
32
34
  keepOriginal?: boolean;
@@ -37,6 +39,7 @@ export type InstallActionInputInstallData = {
37
39
  create?: boolean;
38
40
  targetSystem?: string;
39
41
  };
42
+ skipPostActivities?: boolean;
40
43
  };
41
44
  export interface InstallActionInput {
42
45
  contextData?: InstallActionInputContextData;
@@ -44,7 +47,7 @@ export interface InstallActionInput {
44
47
  name: string;
45
48
  version?: string;
46
49
  integrity?: string;
47
- registry: Registry;
50
+ registry: AbstractRegistry;
48
51
  overwrite?: boolean;
49
52
  };
50
53
  installData?: InstallActionInputInstallData;
@@ -54,7 +57,7 @@ type TransportRuntime = {
54
57
  instance?: Transport;
55
58
  };
56
59
  type WorkflowRuntime = {
57
- registry: Registry;
60
+ registry: AbstractRegistry;
58
61
  update: boolean;
59
62
  rollback: boolean;
60
63
  remotePackageData: {
@@ -90,11 +93,13 @@ type WorkflowRuntime = {
90
93
  generatedData: {
91
94
  devclass: DEVCLASS[];
92
95
  namespace: NAMESPACE;
96
+ migrations: Transport[];
97
+ tmsTxtRefresh: Transport[];
93
98
  };
94
99
  };
95
100
  export type InstallActionOutput = {
96
101
  trmPackage: TrmPackage;
97
- registry: Registry;
102
+ registry: AbstractRegistry;
98
103
  installTransport?: Transport;
99
104
  };
100
105
  export interface InstallWorkflowContext extends IActionContext {
@@ -37,6 +37,9 @@ const importLangTransport_1 = require("./importLangTransport");
37
37
  const importCustTransport_1 = require("./importCustTransport");
38
38
  const setPackageIntegrity_1 = require("./setPackageIntegrity");
39
39
  const generateInstallTransport_1 = require("./generateInstallTransport");
40
+ const refreshTmsTxt_1 = require("./refreshTmsTxt");
41
+ const migrate_1 = require("./migrate");
42
+ const executePostActivities_1 = require("./executePostActivities");
40
43
  ;
41
44
  const WORKFLOW_NAME = 'install';
42
45
  function install(inputData) {
@@ -51,6 +54,7 @@ function install(inputData) {
51
54
  setR3trans_1.setR3trans,
52
55
  installDependencies_1.installDependencies,
53
56
  checkTransports_1.checkTransports,
57
+ migrate_1.migrate,
54
58
  readDevc_1.readDevc,
55
59
  readTadir_1.readTadir,
56
60
  checkObjectTypes_1.checkObjectTypes,
@@ -61,8 +65,10 @@ function install(inputData) {
61
65
  importTadirTransport_1.importTadirTransport,
62
66
  importLangTransport_1.importLangTransport,
63
67
  importCustTransport_1.importCustTransport,
68
+ refreshTmsTxt_1.refreshTmsTxt,
64
69
  setPackageIntegrity_1.setPackageIntegrity,
65
- generateInstallTransport_1.generateInstallTransport
70
+ generateInstallTransport_1.generateInstallTransport,
71
+ executePostActivities_1.executePostActivities
66
72
  ];
67
73
  logger_1.Logger.log(`Ready to execute workflow ${WORKFLOW_NAME}, input data: ${(0, util_1.inspect)(inputData, { breakLength: Infinity, compact: true })}`, true);
68
74
  const result = yield (0, sammarksworkflow_1.default)(WORKFLOW_NAME, workflow, {
@@ -15,6 +15,7 @@ const trmPackage_1 = require("../../trmPackage");
15
15
  const commons_1 = require("../../commons");
16
16
  const crypto_1 = require("crypto");
17
17
  const systemConnector_1 = require("../../systemConnector");
18
+ const registry_1 = require("../../registry");
18
19
  exports.init = {
19
20
  name: 'init',
20
21
  run: (context) => __awaiter(void 0, void 0, void 0, function* () {
@@ -26,7 +27,12 @@ exports.init = {
26
27
  if (!context.rawInput.packageData.version || context.rawInput.packageData.version.trim().toLowerCase() === 'latest') {
27
28
  context.rawInput.packageData.version = 'latest';
28
29
  }
29
- logger_1.Logger.loading(`Searching TRM package in registry ${registry.name}...`);
30
+ if (registry.getRegistryType() === registry_1.RegistryType.LOCAL) {
31
+ logger_1.Logger.loading(`Reading TRM package data...`);
32
+ }
33
+ else {
34
+ logger_1.Logger.loading(`Searching TRM package in registry ${registry.name}...`);
35
+ }
30
36
  const trmPackage = new trmPackage_1.TrmPackage(context.rawInput.packageData.name, registry);
31
37
  const artifact = yield trmPackage.fetchRemoteArtifact(context.rawInput.packageData.version);
32
38
  const integrity = (0, crypto_1.createHash)("sha512").update(artifact.binary).digest("hex");
@@ -36,7 +42,12 @@ exports.init = {
36
42
  if (context.rawInput.packageData.version === 'latest') {
37
43
  sVersion = `latest -> ${trmManifest.version}`;
38
44
  }
39
- logger_1.Logger.info(`Ready to install "${trmManifest.name}" version ${sVersion} from registry "${registry.name}".`);
45
+ if (registry.getRegistryType() === registry_1.RegistryType.LOCAL) {
46
+ logger_1.Logger.info(`Ready to install "${trmManifest.name}" version ${trmManifest.version}.`);
47
+ }
48
+ else {
49
+ logger_1.Logger.info(`Ready to install "${trmManifest.name}" version ${sVersion} from registry "${registry.name}".`);
50
+ }
40
51
  context.runtime = {
41
52
  registry,
42
53
  update: undefined,
@@ -85,7 +96,9 @@ exports.init = {
85
96
  },
86
97
  generatedData: {
87
98
  devclass: [],
88
- namespace: undefined
99
+ namespace: undefined,
100
+ migrations: [],
101
+ tmsTxtRefresh: []
89
102
  }
90
103
  };
91
104
  if (context.rawInput.packageData.overwrite === undefined) {
@@ -114,6 +127,9 @@ exports.init = {
114
127
  create: true
115
128
  };
116
129
  }
130
+ if (!context.rawInput.installData.skipPostActivities) {
131
+ context.rawInput.installData.skipPostActivities = false;
132
+ }
117
133
  logger_1.Logger.loading(`Checking transport layer...`);
118
134
  if (!context.rawInput.installData.installDevclass.transportLayer) {
119
135
  try {
@@ -93,20 +93,12 @@ exports.installDependencies = {
93
93
  }
94
94
  logger_1.Logger.setPrefix(prefix);
95
95
  Inquirer_1.Inquirer.setPrefix(prefix);
96
- var registry;
97
- var tmpRegistry = new registry_1.Registry(dependency.registry || registry_1.PUBLIC_RESERVED_KEYWORD);
98
- if (registry_1.Registry.compare(tmpRegistry, context.rawInput.packageData.registry)) {
99
- registry = context.rawInput.packageData.registry;
100
- }
101
- else {
102
- registry = tmpRegistry;
103
- }
104
96
  var inputData = {
105
97
  dependencyDataPackage: {
106
98
  name: dependency.name,
107
99
  versionRange: dependency.version,
108
100
  integrity: dependency.integrity,
109
- registry
101
+ registry: registry_1.RegistryProvider.getRegistry(dependency.registry)
110
102
  },
111
103
  contextData: _.cloneDeep(context.rawInput.contextData),
112
104
  installData: _.cloneDeep(context.rawInput.installData)
@@ -0,0 +1,3 @@
1
+ import { Step } from "@simonegaffurini/sammarksworkflow";
2
+ import { InstallWorkflowContext } from ".";
3
+ export declare const migrate: Step<InstallWorkflowContext>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.migrate = void 0;
13
+ const logger_1 = require("../../logger");
14
+ exports.migrate = {
15
+ name: 'migrate',
16
+ filter: (context) => __awaiter(void 0, void 0, void 0, function* () {
17
+ if (context.runtime.generatedData.migrations.length > 0) {
18
+ return true;
19
+ }
20
+ else {
21
+ logger_1.Logger.log(`Skipping migration (no migrations)`, true);
22
+ return false;
23
+ }
24
+ }),
25
+ run: (context) => __awaiter(void 0, void 0, void 0, function* () {
26
+ logger_1.Logger.log('Migration step', true);
27
+ for (const transport of context.runtime.generatedData.migrations) {
28
+ logger_1.Logger.loading(`Migrating ${transport.trkorr}...`);
29
+ const oMigration = yield transport.migrate();
30
+ logger_1.Logger.success(`Migrated ${transport.trkorr} to ${oMigration.trkorr}`, true);
31
+ }
32
+ }),
33
+ revert: (context) => __awaiter(void 0, void 0, void 0, function* () {
34
+ })
35
+ };
@@ -27,8 +27,47 @@ exports.readTadir = {
27
27
  else {
28
28
  existingObjects = yield systemConnector_1.SystemConnector.getExistingObjectsBulk(context.runtime.packageTransportsData.tadir);
29
29
  }
30
- if (existingObjects.length > 0 && context.runtime.update) {
31
- const rootPackage = context.rawInput.contextData.systemPackages.find(o => o.packageName === context.rawInput.packageData.name);
30
+ logger_1.Logger.log(`TADIR object that already exist in system: ${JSON.stringify(existingObjects)}`, true);
31
+ var throwExistingObjectsError = false;
32
+ if (existingObjects.length > 0) {
33
+ const sObjs = existingObjects.map(o => `${o.pgmid} ${o.object} ${o.objName}`).join('\n');
34
+ if (context.runtime.update) {
35
+ const rootPackage = context.rawInput.contextData.systemPackages.find(o => o.packageName === context.rawInput.packageData.name);
36
+ if (rootPackage) {
37
+ const rootDevclass = rootPackage.getDevclass();
38
+ const subpackages = (yield systemConnector_1.SystemConnector.getSubpackages(rootDevclass)).map(o => o.devclass);
39
+ existingObjects.find(o => {
40
+ if (subpackages.includes(o.devclass) || rootDevclass === o.devclass) {
41
+ logger_1.Logger.log(`${o.pgmid} ${o.object} ${o.objName} already in system but devclass ${o.devclass} is part of the same trm package in update`, true);
42
+ }
43
+ else {
44
+ if (context.rawInput.installData.checks.noExistingObjects) {
45
+ logger_1.Logger.warning(`${o.pgmid} ${o.object} ${o.objName} already exist on target system ${systemConnector_1.SystemConnector.getDest()}`);
46
+ }
47
+ else {
48
+ logger_1.Logger.error(`${o.pgmid} ${o.object} ${o.objName} already exist on target system ${systemConnector_1.SystemConnector.getDest()}`);
49
+ }
50
+ throwExistingObjectsError = true;
51
+ }
52
+ });
53
+ if (throwExistingObjectsError && !context.rawInput.installData.checks.noExistingObjects) {
54
+ throw new Error(`Cannot overwrite existing objects.`);
55
+ }
56
+ }
57
+ else {
58
+ if (!context.rawInput.installData.checks.noExistingObjects) {
59
+ throw new Error(`${existingObjects.length} object(s) already exist on target system ${systemConnector_1.SystemConnector.getDest()}:\n${sObjs}`);
60
+ }
61
+ }
62
+ }
63
+ else {
64
+ if (context.rawInput.installData.checks.noExistingObjects) {
65
+ logger_1.Logger.warning(`${existingObjects.length} object(s) already exist on target system ${systemConnector_1.SystemConnector.getDest()}:\n${sObjs}`);
66
+ }
67
+ else {
68
+ throw new Error(`${existingObjects.length} object(s) already exist on target system ${systemConnector_1.SystemConnector.getDest()}, install in update mode`);
69
+ }
70
+ }
32
71
  }
33
72
  })
34
73
  };
@@ -0,0 +1,3 @@
1
+ import { Step } from "@simonegaffurini/sammarksworkflow";
2
+ import { InstallWorkflowContext } from ".";
3
+ export declare const refreshTmsTxt: Step<InstallWorkflowContext>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.refreshTmsTxt = void 0;
13
+ const logger_1 = require("../../logger");
14
+ exports.refreshTmsTxt = {
15
+ name: 'refresh-tms-txt',
16
+ filter: (context) => __awaiter(void 0, void 0, void 0, function* () {
17
+ if (context.runtime.generatedData.tmsTxtRefresh.length > 0) {
18
+ logger_1.Logger.log(`Skipping import LANG transport (user input)`, true);
19
+ return true;
20
+ }
21
+ else {
22
+ logger_1.Logger.log(`Skipping TMS refresh (no transports migrated)`, true);
23
+ return false;
24
+ }
25
+ }),
26
+ run: (context) => __awaiter(void 0, void 0, void 0, function* () {
27
+ logger_1.Logger.log('Refresh TMS txt step', true);
28
+ for (const transport of context.runtime.generatedData.tmsTxtRefresh) {
29
+ logger_1.Logger.loading(`Updating TMS buffer ${transport.trkorr}...`);
30
+ yield transport.refreshTmsTxt();
31
+ }
32
+ })
33
+ };
@@ -111,10 +111,20 @@ exports.setInstallDevclass = {
111
111
  }
112
112
  logger_1.Logger.loading(`Updating install data...`);
113
113
  var installDevc = [];
114
+ var packageRegistry;
115
+ if (context.rawInput.packageData.registry.getRegistryType() === registry_1.RegistryType.PUBLIC) {
116
+ packageRegistry = registry_1.PUBLIC_RESERVED_KEYWORD;
117
+ }
118
+ else if (context.rawInput.packageData.registry.getRegistryType() === registry_1.RegistryType.LOCAL) {
119
+ packageRegistry = registry_1.LOCAL_RESERVED_KEYWORD;
120
+ }
121
+ else {
122
+ packageRegistry = context.rawInput.packageData.registry.endpoint;
123
+ }
114
124
  context.rawInput.installData.installDevclass.replacements.forEach(o => {
115
125
  installDevc.push({
116
126
  package_name: context.rawInput.packageData.name,
117
- package_registry: context.rawInput.packageData.registry.getRegistryType() === registry_1.RegistryType.PUBLIC ? registry_1.PUBLIC_RESERVED_KEYWORD : context.rawInput.packageData.registry.endpoint,
127
+ package_registry: packageRegistry,
118
128
  original_devclass: o.originalDevclass,
119
129
  install_devclass: o.installDevclass
120
130
  });
@@ -1,11 +1,11 @@
1
- import { Registry } from "../../registry";
1
+ import { AbstractRegistry } from "../../registry";
2
2
  import { IActionContext, InstallActionInputContextData, InstallActionInputInstallData, InstallActionOutput } from "..";
3
3
  export interface InstallDependencyActionInput {
4
4
  contextData?: InstallActionInputContextData;
5
5
  dependencyDataPackage: {
6
6
  name: string;
7
7
  versionRange: string;
8
- registry: Registry;
8
+ registry: AbstractRegistry;
9
9
  integrity?: string;
10
10
  };
11
11
  installData?: InstallActionInputInstallData;
@@ -14,6 +14,7 @@ const logger_1 = require("../../logger");
14
14
  const commons_1 = require("../../commons");
15
15
  const semver_1 = require("semver");
16
16
  const inquirer_1 = require("../../inquirer");
17
+ const registry_1 = require("../../registry");
17
18
  exports.init = {
18
19
  name: 'init',
19
20
  run: (context) => __awaiter(void 0, void 0, void 0, function* () {
@@ -21,6 +22,9 @@ exports.init = {
21
22
  context.rawInput.dependencyDataPackage.name = (0, commons_1.parsePackageName)({
22
23
  fullName: context.rawInput.dependencyDataPackage.name
23
24
  }).fullName;
25
+ if (context.rawInput.dependencyDataPackage.registry.getRegistryType() === registry_1.RegistryType.LOCAL) {
26
+ throw new Error(`Cannot install package "${context.rawInput.dependencyDataPackage.name}": TRM package has to be installed manually.`);
27
+ }
24
28
  context.rawInput.dependencyDataPackage.versionRange = (0, semver_1.validRange)(context.rawInput.dependencyDataPackage.versionRange);
25
29
  if (!context.rawInput.dependencyDataPackage.versionRange) {
26
30
  throw new Error(`Dependency "${context.rawInput.dependencyDataPackage.name}", invalid version range.`);
@@ -65,23 +65,28 @@ exports.findDependencies = {
65
65
  logger_1.Logger.log(`Adding TRM package dependencies to manifest`, true);
66
66
  logger_1.Logger.loading(`Updating manifest...`);
67
67
  result.trmPackageDependencies.withTrmPackage.forEach((o, i) => {
68
- if (o.package.manifest) {
69
- const dependencyManifest = o.package.manifest.get();
70
- const dependencyVersionRange = `^${dependencyManifest.version}`;
71
- const dependencyRegistry = o.package.registry.getRegistryType() === registry_1.RegistryType.PUBLIC ? undefined : o.package.registry.endpoint;
72
- if (!o.integrity) {
73
- throw new Error(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) ${dependencyManifest.name}: Integrity not found!`);
74
- }
75
- logger_1.Logger.info(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) ${dependencyManifest.name} ${dependencyVersionRange}`);
76
- context.runtime.trmPackage.manifest.dependencies.push({
77
- name: dependencyManifest.name,
78
- version: dependencyVersionRange,
79
- integrity: o.integrity,
80
- registry: dependencyRegistry
81
- });
68
+ if (o.package.registry.getRegistryType() === registry_1.RegistryType.LOCAL) {
69
+ logger_1.Logger.error(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) Cannot have dependency with ABAP package "${o.devclass}": TRM package was installed manually`);
82
70
  }
83
71
  else {
84
- logger_1.Logger.error(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) Cannot find manifest of dependency in ABAP package "${o.devclass}"`);
72
+ if (o.package.manifest) {
73
+ const dependencyManifest = o.package.manifest.get();
74
+ const dependencyVersionRange = `^${dependencyManifest.version}`;
75
+ const dependencyRegistry = o.package.registry.getRegistryType() === registry_1.RegistryType.PUBLIC ? undefined : o.package.registry.endpoint;
76
+ if (!o.integrity) {
77
+ throw new Error(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) ${dependencyManifest.name}: Integrity not found!`);
78
+ }
79
+ logger_1.Logger.info(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) ${dependencyManifest.name} ${dependencyVersionRange}`);
80
+ context.runtime.trmPackage.manifest.dependencies.push({
81
+ name: dependencyManifest.name,
82
+ version: dependencyVersionRange,
83
+ integrity: o.integrity,
84
+ registry: dependencyRegistry
85
+ });
86
+ }
87
+ else {
88
+ logger_1.Logger.error(` (${i + 1}/${result.trmPackageDependencies.withTrmPackage.length}) Cannot find manifest of dependency in ABAP package "${o.devclass}"`);
89
+ }
85
90
  }
86
91
  });
87
92
  if (!context.rawInput.contextData.noInquirer) {
@@ -32,6 +32,8 @@ exports.generateCustTransport = {
32
32
  target: context.rawInput.systemData.transportTarget,
33
33
  text: `@X1@TRM: ${context.rawInput.packageData.name} v${context.rawInput.packageData.version} (C)`
34
34
  });
35
+ yield context.runtime.systemData.custTransport.addComment(`name=${context.rawInput.packageData.name}`);
36
+ yield context.runtime.systemData.custTransport.addComment(`version=${context.rawInput.packageData.version}`);
35
37
  for (const transport of context.rawInput.publishData.customizingTransports) {
36
38
  yield context.runtime.systemData.custTransport.addObjectsFromTransport(transport.trkorr);
37
39
  }
@@ -25,6 +25,8 @@ exports.generateDevcTransport = {
25
25
  target: context.rawInput.systemData.transportTarget,
26
26
  text: `@X1@TRM: ${context.rawInput.packageData.name} v${context.rawInput.packageData.version} (D)`
27
27
  });
28
+ yield context.runtime.systemData.devcTransport.addComment(`name=${context.rawInput.packageData.name}`);
29
+ yield context.runtime.systemData.devcTransport.addComment(`version=${context.rawInput.packageData.version}`);
28
30
  yield context.runtime.systemData.devcTransport.addObjects(aDevc, false);
29
31
  }),
30
32
  revert: (context) => __awaiter(void 0, void 0, void 0, function* () {
@@ -27,7 +27,7 @@ exports.generateLangTransport = {
27
27
  logger_1.Logger.log('Generate LANG transport step', true);
28
28
  logger_1.Logger.loading(`Generating transports...`);
29
29
  logger_1.Logger.loading(`Generating LANG transport...`, true);
30
- const aTadir = context.runtime.packageData.tadir.filter(o => !(o.pgmid === 'R3TR' && o.object === 'DEVC'));
30
+ const aDevc = context.runtime.packageData.tadir.filter(o => o.pgmid === 'R3TR' && o.object === 'DEVC');
31
31
  context.runtime.systemData.langTransport = yield transport_1.Transport.createToc({
32
32
  trmIdentifier: transport_1.TrmTransportIdentifier.LANG,
33
33
  target: context.rawInput.systemData.transportTarget,
@@ -35,7 +35,7 @@ exports.generateLangTransport = {
35
35
  });
36
36
  var iLanguageObjects = 0;
37
37
  try {
38
- yield context.runtime.systemData.langTransport.addTranslations(aTadir.map(o => o.objName));
38
+ yield context.runtime.systemData.langTransport.addTranslations(aDevc.map(o => o.objName));
39
39
  iLanguageObjects = (yield context.runtime.systemData.langTransport.getE071()).length;
40
40
  }
41
41
  catch (e) {
@@ -48,6 +48,10 @@ exports.generateLangTransport = {
48
48
  yield context.runtime.systemData.langTransport.delete();
49
49
  context.runtime.systemData.langTransport = undefined;
50
50
  }
51
+ else {
52
+ yield context.runtime.systemData.langTransport.addComment(`name=${context.rawInput.packageData.name}`);
53
+ yield context.runtime.systemData.langTransport.addComment(`version=${context.rawInput.packageData.version}`);
54
+ }
51
55
  }
52
56
  }),
53
57
  revert: (context) => __awaiter(void 0, void 0, void 0, function* () {
@@ -18,9 +18,23 @@ exports.generateTadirTransport = {
18
18
  name: 'generate-tadir-transport',
19
19
  run: (context) => __awaiter(void 0, void 0, void 0, function* () {
20
20
  logger_1.Logger.log('Generate TADIR transport step', true);
21
+ var aTadir = context.runtime.packageData.tadir.filter(o => !(o.pgmid === 'R3TR' && o.object === 'DEVC'));
22
+ var ignoredObjects = 0;
23
+ context.runtime.abapGitData.sourceCode.ignoredObjects.forEach(o => {
24
+ const objectIndex = aTadir.findIndex(k => k.pgmid === o.pgmid && k.object === o.object && k.objName === o.objName);
25
+ if (objectIndex >= 0) {
26
+ ignoredObjects++;
27
+ aTadir.splice(objectIndex, 1);
28
+ }
29
+ });
30
+ if (ignoredObjects > 0) {
31
+ logger_1.Logger.info(`${ignoredObjects} object/s are ignored (as specified in .abapgit.xml)`);
32
+ }
33
+ if (aTadir.length === 0) {
34
+ throw new Error(`Package ${context.rawInput.packageData.devclass} has no content.`);
35
+ }
21
36
  logger_1.Logger.loading(`Generating transports...`);
22
37
  logger_1.Logger.loading(`Generating TADIR transport...`, true);
23
- const aTadir = context.runtime.packageData.tadir.filter(o => !(o.pgmid === 'R3TR' && o.object === 'DEVC'));
24
38
  const sManifestXml = new manifest_1.Manifest(context.runtime.trmPackage.manifest).getAbapXml();
25
39
  context.runtime.systemData.tadirTransport = yield transport_1.Transport.createToc({
26
40
  trmIdentifier: transport_1.TrmTransportIdentifier.TADIR,
@@ -0,0 +1,3 @@
1
+ import { Step } from "@simonegaffurini/sammarksworkflow";
2
+ import { PublishWorkflowContext } from ".";
3
+ export declare const getSourceCode: Step<PublishWorkflowContext>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getSourceCode = void 0;
13
+ const logger_1 = require("../../logger");
14
+ const systemConnector_1 = require("../../systemConnector");
15
+ exports.getSourceCode = {
16
+ name: 'get-source-code',
17
+ run: (context) => __awaiter(void 0, void 0, void 0, function* () {
18
+ logger_1.Logger.log('Get source code step', true);
19
+ try {
20
+ logger_1.Logger.loading(`Reading ${context.rawInput.packageData.devclass} source code...`);
21
+ const sourceCode = yield systemConnector_1.SystemConnector.getAbapgitSource(context.rawInput.packageData.devclass);
22
+ context.runtime.abapGitData.sourceCode.zip = sourceCode.zip;
23
+ context.runtime.abapGitData.sourceCode.objects = sourceCode.objects;
24
+ context.runtime.packageData.tadir.forEach(o => {
25
+ const object = context.runtime.abapGitData.sourceCode.objects.find(k => k.pgmid === o.pgmid && k.object === o.object && k.objName === o.objName);
26
+ if (!object) {
27
+ context.runtime.abapGitData.sourceCode.ignoredObjects.push(o);
28
+ }
29
+ });
30
+ }
31
+ catch (e) {
32
+ logger_1.Logger.error(e.toString(), true);
33
+ logger_1.Logger.info(`AbapGit Developer Version was not found, source code won't be exported.`);
34
+ }
35
+ })
36
+ };
@@ -1,9 +1,10 @@
1
1
  import { TrmArtifact, TrmPackage } from "../../trmPackage";
2
2
  import { IActionContext } from "..";
3
- import { Registry } from "../../registry";
3
+ import { AbstractRegistry } from "../../registry";
4
4
  import { DEVCLASS, TADIR, TMSCSYS, TR_TARGET, TRNSPACET, TRNSPACETT } from "../../client";
5
5
  import { TrmManifest, TrmManifestBase } from "../../manifest";
6
6
  import { Transport } from "../../transport";
7
+ import { DotAbapGit } from "../../abapgit";
7
8
  export interface PublishActionInput {
8
9
  contextData?: {
9
10
  systemPackages?: TrmPackage[];
@@ -13,7 +14,7 @@ export interface PublishActionInput {
13
14
  packageData: {
14
15
  name: string;
15
16
  version?: string;
16
- registry: Registry;
17
+ registry: AbstractRegistry;
17
18
  devclass?: DEVCLASS;
18
19
  manifest?: TrmManifestBase;
19
20
  };
@@ -35,7 +36,7 @@ type WorkflowRuntime = {
35
36
  rollback: boolean;
36
37
  trmPackage: {
37
38
  package: TrmPackage;
38
- registry: Registry;
39
+ registry: AbstractRegistry;
39
40
  latestReleaseManifest?: TrmManifest;
40
41
  manifest: TrmManifest;
41
42
  artifact?: TrmArtifact;
@@ -55,6 +56,14 @@ type WorkflowRuntime = {
55
56
  trnspacett: TRNSPACETT[];
56
57
  };
57
58
  };
59
+ abapGitData: {
60
+ dotAbapGit?: DotAbapGit;
61
+ sourceCode?: {
62
+ zip: Buffer;
63
+ objects: TADIR[];
64
+ ignoredObjects: TADIR[];
65
+ };
66
+ };
58
67
  };
59
68
  export type PublishActionOutput = {
60
69
  trmPackage: TrmPackage;
@@ -31,6 +31,7 @@ const generateCustTransport_1 = require("./generateCustTransport");
31
31
  const releaseTransports_1 = require("./releaseTransports");
32
32
  const finalizePublish_1 = require("./finalizePublish");
33
33
  const publishToRegistry_1 = require("./publishToRegistry");
34
+ const getSourceCode_1 = require("./getSourceCode");
34
35
  ;
35
36
  const WORKFLOW_NAME = 'publish';
36
37
  function publish(inputData) {
@@ -44,6 +45,7 @@ function publish(inputData) {
44
45
  setManifestValues_1.setManifestValues,
45
46
  setReadme_1.setReadme,
46
47
  setCustomizingTransports_1.setCustomizingTransports,
48
+ getSourceCode_1.getSourceCode,
47
49
  generateDevcTransport_1.generateDevcTransport,
48
50
  generateTadirTransport_1.generateTadirTransport,
49
51
  generateLangTransport_1.generateLangTransport,
@@ -31,7 +31,7 @@ exports.init = {
31
31
  fullName: context.rawInput.packageData.name
32
32
  });
33
33
  context.rawInput.packageData.name = parsedPackageName.fullName;
34
- if (registry.getRegistryType() === registry_1.RegistryType.PUBLIC) {
34
+ if (registry.getRegistryType() === registry_1.RegistryType.PUBLIC && registry.getRegistryType() !== registry_1.RegistryType.LOCAL) {
35
35
  logger_1.Logger.log(`Public registry, checking if logged in`, true);
36
36
  yield registry.whoAmI();
37
37
  logger_1.Logger.log(`Public registry, checking if package name is ok`, true);
@@ -156,6 +156,14 @@ exports.init = {
156
156
  },
157
157
  packageData: {
158
158
  tadir: []
159
+ },
160
+ abapGitData: {
161
+ dotAbapGit: undefined,
162
+ sourceCode: {
163
+ ignoredObjects: [],
164
+ objects: [],
165
+ zip: undefined
166
+ }
159
167
  }
160
168
  };
161
169
  logger_1.Logger.loading(`Reading ${systemConnector_1.SystemConnector.getDest()} transport targets...`);
@@ -183,7 +191,7 @@ exports.init = {
183
191
  throw new Error(`You are not not authorized to publish "${context.rawInput.packageData.name}" releases.`);
184
192
  }
185
193
  if (!packageExists) {
186
- logger_1.Logger.info(`First time publishing "${context.rawInput.packageData.name}". Congratulations!`);
194
+ logger_1.Logger.info(`First time publishing "${context.rawInput.packageData.name}". Congratulations!`, registry.getRegistryType() === registry_1.RegistryType.LOCAL);
187
195
  }
188
196
  else {
189
197
  context.runtime.trmPackage.latestReleaseManifest = (yield context.runtime.trmPackage.package.fetchRemoteManifest('latest')).get();
@@ -18,7 +18,11 @@ exports.publishToRegistry = {
18
18
  run: (context) => __awaiter(void 0, void 0, void 0, function* () {
19
19
  logger_1.Logger.log('Publish to registry step', true);
20
20
  logger_1.Logger.loading(`Creating TRM package...`);
21
- context.runtime.trmPackage.artifact = yield trmPackage_1.TrmArtifact.create(context.runtime.systemData.releasedTransports, new manifest_1.Manifest(context.runtime.trmPackage.manifest));
21
+ context.runtime.trmPackage.artifact = yield trmPackage_1.TrmArtifact.create({
22
+ transports: context.runtime.systemData.releasedTransports,
23
+ manifest: new manifest_1.Manifest(context.runtime.trmPackage.manifest),
24
+ sourceCode: context.runtime.abapGitData.sourceCode.zip
25
+ });
22
26
  logger_1.Logger.loading(`Publishing...`);
23
27
  yield context.runtime.trmPackage.package.publish({
24
28
  artifact: context.runtime.trmPackage.artifact,