tadis-analyzer 2.0.0 → 2.0.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.
@@ -3,43 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_1 = require("@nestjs/core");
4
4
  const common_1 = require("@nestjs/common");
5
5
  const CodePattern_module_1 = require("../../system-element-extractors/experimental/code-pattern/CodePattern.module");
6
- const Config_service_1 = require("../../config/Config.service");
7
- const model_1 = require("../../system-element-extractors/experimental/code-pattern/model");
8
6
  async function bootstrap() {
9
7
  const app = await core_1.NestFactory.create(CodePattern_module_1.CodePatternModule);
10
- const config = app.get(Config_service_1.ConfigService);
11
- const patternAnalyzerService = app.get(CodePattern_module_1.PatternAnalyzerService);
12
- setupExample_fromApplicationYml(patternAnalyzerService);
8
+ const config = app.get('ConfigService');
13
9
  await app.listen(config.getPort());
14
10
  common_1.Logger.log('running at http://localhost:' + config.getPort());
15
11
  }
16
12
  // tslint:disable-next-line: no-floating-promises
17
13
  bootstrap();
18
- function setupExample_fromApplicationYml(patternAnalyzerService) {
19
- const systemPattern = {
20
- nodePatterns: [],
21
- edgePatterns: [
22
- {
23
- edgeType: 'AsyncEventFlow',
24
- sourceNodePattern: {
25
- searchTextLocation: model_1.SearchTextLocation.FILE_PATH,
26
- regExp: '$sourceRoot/([^/]+)/src/main/resources/application.yml',
27
- capturingGroupIndexForName: 1,
28
- variableForName: 'serviceName',
29
- nodeType: 'MicroService'
30
- },
31
- targetNodePattern: {
32
- searchTextLocation: model_1.SearchTextLocation.FILE_CONTENT,
33
- regExp: '{([^}]+_TOPIC)}',
34
- capturingGroupIndexForName: 1,
35
- variableForName: 'envName',
36
- nodeType: 'MessageExchange'
37
- }
38
- }
39
- ],
40
- excludedFolders: ['node_modules', 'build', 'target'],
41
- includedFileEndings: ['java', 'yaml', 'yml']
42
- };
43
- patternAnalyzerService.updateSystemPattern(systemPattern);
44
- }
45
14
  //# sourceMappingURL=main.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/app/code-pattern/main.ts"],"names":[],"mappings":";;AAAA,uCAA0C;AAC1C,2CAAuC;AAEvC,qHAGqF;AACrF,gEAA2D;AAC3D,2FAGwE;AAExE,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sCAAiB,CAAC,CAAA;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAA;IAErC,MAAM,sBAAsB,GAAG,GAAG,CAAC,GAAG,CAAC,2CAAsB,CAAC,CAAA;IAC9D,+BAA+B,CAAC,sBAAsB,CAAC,CAAA;IAEvD,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;IAClC,eAAM,CAAC,GAAG,CAAC,8BAA8B,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;AAC/D,CAAC;AACD,iDAAiD;AACjD,SAAS,EAAE,CAAA;AAEX,SAAS,+BAA+B,CACtC,sBAA8C;IAE9C,MAAM,aAAa,GAAkB;QACnC,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE;YACZ;gBACE,QAAQ,EAAE,gBAAgB;gBAC1B,iBAAiB,EAAE;oBACjB,kBAAkB,EAAE,0BAAkB,CAAC,SAAS;oBAChD,MAAM,EAAE,wDAAwD;oBAChE,0BAA0B,EAAE,CAAC;oBAC7B,eAAe,EAAE,aAAa;oBAC9B,QAAQ,EAAE,cAAc;iBACzB;gBACD,iBAAiB,EAAE;oBACjB,kBAAkB,EAAE,0BAAkB,CAAC,YAAY;oBACnD,MAAM,EAAE,iBAAiB;oBACzB,0BAA0B,EAAE,CAAC;oBAC7B,eAAe,EAAE,SAAS;oBAC1B,QAAQ,EAAE,iBAAiB;iBAC5B;aACF;SACF;QACD,eAAe,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC;QACpD,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;KAC7C,CAAA;IACD,sBAAsB,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAA;AAC3D,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/app/code-pattern/main.ts"],"names":[],"mappings":";;AAAA,uCAA0C;AAC1C,2CAAuC;AAEvC,qHAAgH;AAEhH,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sCAAiB,CAAC,CAAA;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAEvC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;IAClC,eAAM,CAAC,GAAG,CAAC,8BAA8B,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;AAC/D,CAAC;AACD,iDAAiD;AACjD,SAAS,EAAE,CAAA"}
@@ -92,7 +92,7 @@ class ConfigService {
92
92
  RABBIT_PASSWORD: Joi.string().optional(),
93
93
  RABBIT_URL: Joi.string().optional()
94
94
  });
95
- const { error, value: validatedEnvConfig } = Joi.validate(envConfig, envVarsSchema, {
95
+ const { error, value: validatedEnvConfig } = envVarsSchema.validate(envConfig, {
96
96
  allowUnknown: true
97
97
  });
98
98
  if (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"Config.service.js","sourceRoot":"","sources":["../../../src/config/Config.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Config.service.js","sourceRoot":"","sources":["../../../src/config/Config.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tadis-analyzer",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "generic analyzer tool for architecture discovery",
5
5
  "main": "build/src/lib.js",
6
6
  "types": "build/src/lib.d.ts",
@@ -39,7 +39,7 @@
39
39
  "axios": "^0.27.2",
40
40
  "dotenv": "^16.0.1",
41
41
  "immer": "^9.0.15",
42
- "joi": "^14.3.1",
42
+ "joi": "^17.6.3",
43
43
  "lodash": "^4.17.11",
44
44
  "reflect-metadata": "^0.1.13",
45
45
  "rimraf": "^3.0.2",
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const ms_1 = require("../../../model/ms");
4
- const verifiers_1 = require("../../../test/verifiers");
5
- const PatternAnalyzer_1 = require("./PatternAnalyzer");
6
- const model_1 = require("./model");
7
- describe('PatternAnalyzer.interFileId', () => {
8
- const sourceFolder = __dirname + '/testdata/inter-file-id-project';
9
- beforeEach(() => {
10
- process.env.NODE_ENV = 'test';
11
- });
12
- const ws = '\\s*';
13
- const id = '\\w+';
14
- function javaSourceFilePattern() {
15
- return {
16
- searchTextLocation: model_1.SearchTextLocation.FILE_PATH,
17
- regExp: '$sourceRoot/([^/]+)/source.java',
18
- capturingGroupIndexForName: 1,
19
- variableForName: 'serviceName',
20
- nodeType: 'MicroService'
21
- };
22
- }
23
- it('can resolve a name from the content of another file', async () => {
24
- const inputSystem = new ms_1.System('test');
25
- const systemPattern = {
26
- nodePatterns: [],
27
- edgePatterns: [
28
- {
29
- edgeType: 'AsyncEventFlow',
30
- sourceNodePattern: javaSourceFilePattern(),
31
- targetNodePattern: {
32
- searchTextLocation: model_1.SearchTextLocation.FILE_CONTENT,
33
- regExp: `"(.+_KAFKA_TOPIC)"`,
34
- capturingGroupIndexForName: 1,
35
- variableForName: 'envName',
36
- nameResolutionPattern: {
37
- searchTextLocation: model_1.SearchTextLocation.ANY_FILE_PATH,
38
- regExp: `deploy-(.+)/.+\.yml`,
39
- capturingGroupIndexForName: 1,
40
- variableForName: 'deployServiceName',
41
- nameResolutionPattern: {
42
- searchTextLocation: model_1.SearchTextLocation.FILE_CONTENT,
43
- regExp: `name:\\s*$envName\\s*value:\\s*(\\w+)`,
44
- capturingGroupIndexForName: 1
45
- }
46
- },
47
- nodeType: 'MessageExchange'
48
- }
49
- }
50
- ]
51
- };
52
- const analyzer = new PatternAnalyzer_1.PatternAnalyzer(sourceFolder);
53
- const outputSystem = await analyzer.transform(inputSystem, systemPattern);
54
- expect(outputSystem.getAllEdges()).toHaveLength(1);
55
- expect(outputSystem.findMicroService('service1')).toBeDefined();
56
- expect(outputSystem.findMessageExchange('actual_topic_name')).toBeDefined();
57
- (0, verifiers_1.verifyEachContentHasTransformer)(outputSystem, PatternAnalyzer_1.PatternAnalyzer.name);
58
- });
59
- it('only searches in files matching the file mask and not in excluded folders', async () => {
60
- const inputSystem = new ms_1.System('test');
61
- const systemPattern = {
62
- includedFileEndings: ['.yml'],
63
- excludedFolders: ['excluded'],
64
- nodePatterns: [
65
- {
66
- searchTextLocation: model_1.SearchTextLocation.FILE_PATH,
67
- regExp: '$sourceRoot/([^/]+)/.*',
68
- capturingGroupIndexForName: 1,
69
- variableForName: 'serviceName',
70
- nodeType: 'MicroService'
71
- }
72
- ],
73
- edgePatterns: []
74
- };
75
- const analyzer = new PatternAnalyzer_1.PatternAnalyzer(sourceFolder);
76
- const outputSystem = await analyzer.transform(inputSystem, systemPattern);
77
- expect(outputSystem.getMicroServices()).toHaveLength(1);
78
- });
79
- });
80
- //# sourceMappingURL=PatternAnalyzer.interFileId.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PatternAnalyzer.interFileId.test.js","sourceRoot":"","sources":["../../../../../src/system-element-extractors/experimental/code-pattern/PatternAnalyzer.interFileId.test.ts"],"names":[],"mappings":"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"}
@@ -1,161 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const ms_1 = require("../../../model/ms");
4
- const verifiers_1 = require("../../../test/verifiers");
5
- const PatternAnalyzer_1 = require("./PatternAnalyzer");
6
- const model_1 = require("./model");
7
- describe('PatternAnalyzer.intraFileId', () => {
8
- const sourceFolder = __dirname + '/testdata/intra-file-id-project';
9
- beforeEach(() => {
10
- process.env.NODE_ENV = 'test';
11
- });
12
- const ws = '\\s*';
13
- const id = '\\w+';
14
- function javaSourceFilePattern() {
15
- return {
16
- searchTextLocation: model_1.SearchTextLocation.FILE_PATH,
17
- regExp: '$sourceRoot/([^/]+)/source.java',
18
- capturingGroupIndexForName: 1,
19
- nodeType: 'MicroService'
20
- };
21
- }
22
- it('creates a service from a file path', async () => {
23
- const inputSystem = new ms_1.System('test');
24
- const systemPattern = {
25
- nodePatterns: [javaSourceFilePattern()],
26
- edgePatterns: []
27
- };
28
- const analyzer = new PatternAnalyzer_1.PatternAnalyzer(sourceFolder);
29
- const outputSystem = await analyzer.transform(inputSystem, systemPattern);
30
- expect(outputSystem.findMicroService('service1')).toBeDefined();
31
- });
32
- it('creates an async info flow for multiple annotations in the same file', async () => {
33
- const inputSystem = new ms_1.System('test');
34
- const systemPattern = {
35
- nodePatterns: [],
36
- edgePatterns: [
37
- {
38
- edgeType: 'AsyncEventFlow',
39
- sourceNodePattern: javaSourceFilePattern(),
40
- targetNodePattern: {
41
- searchTextLocation: model_1.SearchTextLocation.FILE_CONTENT,
42
- regExp: `@EventProcessor${ws}\\([^)]*sendToExchange${ws}=${ws}(${id})`,
43
- capturingGroupIndexForName: 1,
44
- nameResolutionPattern: {
45
- searchTextLocation: model_1.SearchTextLocation.FILE_CONTENT,
46
- regExp: `$name${ws}=${ws}"([^"]*)"`,
47
- capturingGroupIndexForName: 1
48
- },
49
- nodeType: 'MessageExchange'
50
- }
51
- },
52
- {
53
- edgeType: 'AsyncEventFlow',
54
- sourceNodePattern: javaSourceFilePattern(),
55
- targetNodePattern: {
56
- searchTextLocation: model_1.SearchTextLocation.FILE_CONTENT,
57
- regExp: `@EventProcessor${ws}\\([^)]*sendToExchange${ws}=${ws}"([^"]+)"`,
58
- capturingGroupIndexForName: 1,
59
- nodeType: 'MessageExchange'
60
- }
61
- }
62
- ]
63
- };
64
- const analyzer = new PatternAnalyzer_1.PatternAnalyzer(sourceFolder);
65
- const outputSystem = await analyzer.transform(inputSystem, systemPattern);
66
- expect(outputSystem.findMicroService('service1')).toBeDefined();
67
- expect(outputSystem.findMessageExchange('target-exchange-X')).toBeDefined();
68
- expect(outputSystem.findMessageExchange('target-exchange-Y')).toBeDefined();
69
- // TODO: are there better ways to test parts of objects to match in jest?
70
- expect(outputSystem.edges.find((edge) => {
71
- var _a;
72
- return edge.source.getName() === 'service1' &&
73
- edge.target.getName() === 'target-exchange-X' &&
74
- ((_a = edge.content) === null || _a === void 0 ? void 0 : _a.type) === ms_1.AsyncEventFlow.name;
75
- })).toBeDefined();
76
- expect(outputSystem.edges.find((edge) => edge.source.getName() === 'service1' &&
77
- edge.target.getName() === 'target-exchange-Y')).toBeDefined();
78
- (0, verifiers_1.verifyEachContentHasTransformer)(outputSystem, PatternAnalyzer_1.PatternAnalyzer.name);
79
- });
80
- it('re-uses exchanges when they already exist', async () => {
81
- const inputSystem = new ms_1.System('test');
82
- inputSystem.addMessageExchange('service1');
83
- const systemPattern = {
84
- nodePatterns: [
85
- {
86
- searchTextLocation: model_1.SearchTextLocation.FILE_PATH,
87
- regExp: '$sourceRoot/([^/]+)/source.java',
88
- capturingGroupIndexForName: 1,
89
- nodeType: 'MessageExchange'
90
- }
91
- ],
92
- edgePatterns: []
93
- };
94
- const analyzer = new PatternAnalyzer_1.PatternAnalyzer(sourceFolder);
95
- const outputSystem = await analyzer.transform(inputSystem, systemPattern);
96
- expect(outputSystem.findMessageExchange('service1')).toBeDefined();
97
- expect(outputSystem.nodes.filter((node) => node.getName() === 'service1')).toHaveLength(1);
98
- });
99
- it('can create nodes from multiple elements in the same annotation', async () => {
100
- const inputSystem = new ms_1.System('test');
101
- const systemPattern = {
102
- nodePatterns: [],
103
- edgePatterns: [
104
- {
105
- edgeType: 'AsyncEventFlow',
106
- sourceNodePattern: {
107
- searchTextLocation: model_1.SearchTextLocation.FILE_CONTENT,
108
- regExp: `@EventProcessor${ws}\\([^)]*receiveFromExchange${ws}=${ws}"([^"]+)"`,
109
- capturingGroupIndexForName: 1,
110
- nodeType: 'MessageExchange'
111
- },
112
- targetNodePattern: javaSourceFilePattern()
113
- },
114
- {
115
- edgeType: 'AsyncEventFlow',
116
- sourceNodePattern: javaSourceFilePattern(),
117
- targetNodePattern: {
118
- searchTextLocation: model_1.SearchTextLocation.FILE_CONTENT,
119
- regExp: `@EventProcessor${ws}\\([^)]*sendToExchange${ws}=${ws}"([^"]+)"`,
120
- capturingGroupIndexForName: 1,
121
- nodeType: 'MessageExchange'
122
- }
123
- }
124
- ]
125
- };
126
- const analyzer = new PatternAnalyzer_1.PatternAnalyzer(sourceFolder);
127
- const outputSystem = await analyzer.transform(inputSystem, systemPattern);
128
- expect(outputSystem.findMicroService('service1')).toBeDefined();
129
- expect(outputSystem.findMessageExchange('source-exchange-Y')).toBeDefined();
130
- expect(outputSystem.findMessageExchange('target-exchange-Y')).toBeDefined();
131
- expect(outputSystem.edges.find((edge) => edge.source.getName() === 'service1' &&
132
- edge.target.getName() === 'target-exchange-Y')).toBeDefined();
133
- expect(outputSystem.edges.find((edge) => edge.source.getName() === 'source-exchange-Y' &&
134
- edge.target.getName() === 'service1')).toBeDefined();
135
- (0, verifiers_1.verifyEachContentHasTransformer)(outputSystem, PatternAnalyzer_1.PatternAnalyzer.name);
136
- });
137
- it('ignores source found in current project when not run in test mode', async () => {
138
- process.env.NODE_ENV = 'non-test';
139
- const inputSystem = new ms_1.System('test');
140
- const systemPattern = {
141
- nodePatterns: [javaSourceFilePattern()],
142
- edgePatterns: []
143
- };
144
- const analyzer = new PatternAnalyzer_1.PatternAnalyzer(sourceFolder);
145
- const outputSystem = await analyzer.transform(inputSystem, systemPattern);
146
- expect(outputSystem).not.toBeNull();
147
- expect(outputSystem.getMicroServices()).toHaveLength(0);
148
- });
149
- it('can process an empty pattern', async () => {
150
- const inputSystem = new ms_1.System('test');
151
- const systemPattern = {
152
- nodePatterns: [],
153
- edgePatterns: []
154
- };
155
- const analyzer = new PatternAnalyzer_1.PatternAnalyzer(sourceFolder);
156
- const outputSystem = await analyzer.transform(inputSystem, systemPattern);
157
- expect(outputSystem).not.toBeNull();
158
- expect(outputSystem.getMicroServices()).toHaveLength(0);
159
- });
160
- });
161
- //# sourceMappingURL=PatternAnalyzer.intraFileId.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PatternAnalyzer.intraFileId.test.js","sourceRoot":"","sources":["../../../../../src/system-element-extractors/experimental/code-pattern/PatternAnalyzer.intraFileId.test.ts"],"names":[],"mappings":"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"}