@eventra_dev/eventra-cli 0.0.18 → 0.1.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.
Files changed (44) hide show
  1. package/README.md +74 -166
  2. package/dist/commands/check.js +25 -88
  3. package/dist/commands/sync.js +22 -77
  4. package/dist/commands/watch.js +135 -0
  5. package/dist/engine/callResolver.js +31 -0
  6. package/dist/engine/engine.js +33 -0
  7. package/dist/engine/extract.js +53 -0
  8. package/dist/engine/flow.js +38 -0
  9. package/dist/engine/graph.js +22 -0
  10. package/dist/engine/project.js +74 -0
  11. package/dist/engine/resolver.js +38 -0
  12. package/dist/engine/scanner.js +78 -0
  13. package/dist/engine/symbol.js +31 -0
  14. package/dist/index.js +10 -6
  15. package/dist/utils/parsers/vue.js +16 -12
  16. package/dist/utils/processFile.js +20 -0
  17. package/package.json +2 -1
  18. package/src/commands/check.ts +29 -136
  19. package/src/commands/sync.ts +24 -135
  20. package/src/commands/watch.ts +166 -0
  21. package/src/engine/callResolver.ts +37 -0
  22. package/src/engine/engine.ts +39 -0
  23. package/src/engine/extract.ts +74 -0
  24. package/src/engine/flow.ts +54 -0
  25. package/src/engine/graph.ts +23 -0
  26. package/src/engine/project.ts +75 -0
  27. package/src/engine/resolver.ts +53 -0
  28. package/src/engine/scanner.ts +90 -0
  29. package/src/engine/symbol.ts +42 -0
  30. package/src/index.ts +11 -6
  31. package/src/types.ts +3 -5
  32. package/src/utils/parsers/vue.ts +19 -20
  33. package/src/utils/processFile.ts +18 -0
  34. package/tests/fixtures/backend/express/app.ts +167 -12
  35. package/tests/fixtures/wrappers/component/test.tsx +1 -1
  36. package/tests/run.ts +4 -17
  37. package/dist/utils/extract.js +0 -136
  38. package/dist/utils/scanners/component-wrappers.js +0 -70
  39. package/dist/utils/scanners/function-wrappers.js +0 -85
  40. package/dist/utils/scanners/track.js +0 -52
  41. package/src/utils/extract.ts +0 -185
  42. package/src/utils/scanners/component-wrappers.ts +0 -107
  43. package/src/utils/scanners/function-wrappers.ts +0 -180
  44. package/src/utils/scanners/track.ts +0 -84
@@ -1,180 +0,0 @@
1
- import {
2
- SourceFile,
3
- SyntaxKind,
4
- Node,
5
- CallExpression,
6
- PropertyAccessExpression,
7
- } from "ts-morph";
8
-
9
- import {
10
- FunctionWrapper,
11
- ExtractedEvent
12
- } from "../../types";
13
-
14
- import { extractExpression } from "../extract";
15
-
16
- export function scanFunctionWrappers(
17
- source: SourceFile,
18
- wrappers: FunctionWrapper[]
19
- ) {
20
- const events =
21
- new Set<ExtractedEvent>();
22
-
23
- const calls =
24
- source.getDescendantsOfKind(
25
- SyntaxKind.CallExpression
26
- );
27
-
28
- for (const call of calls) {
29
- const name =
30
- getFunctionName(call);
31
-
32
- if (!name) continue;
33
-
34
- for (const wrapper of wrappers) {
35
- if (wrapper.name !== name)
36
- continue;
37
-
38
- const results =
39
- extractEventFromArgs(
40
- call,
41
- wrapper.event
42
- );
43
-
44
- if (!results) continue;
45
-
46
- results.forEach(
47
- (r) => events.add(r)
48
- );
49
- }
50
- }
51
-
52
- return events;
53
- }
54
-
55
- function getFunctionName(
56
- call: CallExpression
57
- ): string | null {
58
-
59
- const expression =
60
- call.getExpression();
61
-
62
- if (
63
- Node.isIdentifier(
64
- expression
65
- )
66
- ) {
67
- return expression.getText();
68
- }
69
-
70
- if (
71
- Node.isPropertyAccessExpression(
72
- expression
73
- )
74
- ) {
75
- return getDeepName(
76
- expression
77
- );
78
- }
79
-
80
- return null;
81
- }
82
-
83
- function getDeepName(
84
- node: PropertyAccessExpression
85
- ): string {
86
-
87
- let current:
88
- | Node
89
- | undefined = node;
90
-
91
- let name = "";
92
-
93
- while (
94
- Node.isPropertyAccessExpression(
95
- current
96
- )
97
- ) {
98
- name =
99
- current.getName();
100
-
101
- current =
102
- current.getExpression();
103
- }
104
-
105
- return name;
106
- }
107
-
108
- function extractEventFromArgs(
109
- call: CallExpression,
110
- event?: string
111
- ): ExtractedEvent[] | null {
112
-
113
- const args =
114
- call.getArguments();
115
-
116
- const events: ExtractedEvent[] = [];
117
-
118
- for (let i = 0; i < args.length; i++) {
119
- const arg = args[i];
120
-
121
- // track("event")
122
- if (!event) {
123
- const result =
124
- extractExpression(arg);
125
-
126
- if (!result) continue;
127
-
128
- result.values.forEach(
129
- (value) =>
130
- events.push({
131
- value,
132
- dynamic:
133
- result.dynamic
134
- })
135
- );
136
- }
137
-
138
- // track({event})
139
- if (event) {
140
- const obj =
141
- arg.asKind(
142
- SyntaxKind.ObjectLiteralExpression
143
- );
144
-
145
- if (!obj) continue;
146
-
147
- const prop =
148
- obj.getProperty(event);
149
-
150
- if (!prop) continue;
151
-
152
- if (
153
- Node.isPropertyAssignment(prop)
154
- ) {
155
- const init =
156
- prop.getInitializer();
157
-
158
- if (!init) continue;
159
-
160
- const result =
161
- extractExpression(init);
162
-
163
- if (!result) continue;
164
-
165
- result.values.forEach(
166
- (value) =>
167
- events.push({
168
- value,
169
- dynamic:
170
- result.dynamic
171
- })
172
- );
173
- }
174
- }
175
- }
176
-
177
- return events.length
178
- ? events
179
- : null;
180
- }
@@ -1,84 +0,0 @@
1
- import {
2
- SourceFile,
3
- SyntaxKind,
4
- Node,
5
- } from "ts-morph";
6
-
7
- import { ExtractedEvent, EventraConfig } from "../../types";
8
- import { extractExpression } from "../extract";
9
-
10
- export function scanTrack(
11
- source: SourceFile,
12
- config: EventraConfig
13
- ) {
14
- const events = new Set<ExtractedEvent>();
15
-
16
- const calls = source.getDescendantsOfKind(
17
- SyntaxKind.CallExpression
18
- );
19
-
20
- for (const call of calls) {
21
- const expr = call.getExpression();
22
-
23
- let isTrack = false;
24
-
25
- // track()
26
- if (Node.isIdentifier(expr)) {
27
- isTrack = expr.getText() === "track";
28
- }
29
-
30
- // analytics.track()
31
- if (Node.isPropertyAccessExpression(expr)) {
32
- isTrack = expr.getName() === "track";
33
- }
34
-
35
- if (!isTrack) continue;
36
-
37
- const func =
38
- call.getFirstAncestorByKind(SyntaxKind.FunctionDeclaration) ||
39
- call.getFirstAncestorByKind(SyntaxKind.ArrowFunction) ||
40
- call.getFirstAncestorByKind(SyntaxKind.FunctionExpression);
41
-
42
- let fnName: string | undefined;
43
-
44
- if (func) {
45
- if (Node.isFunctionDeclaration(func)) {
46
- fnName = func.getName();
47
- }
48
-
49
- if (
50
- Node.isArrowFunction(func) ||
51
- Node.isFunctionExpression(func)
52
- ) {
53
- const varDecl = func.getFirstAncestorByKind(
54
- SyntaxKind.VariableDeclaration
55
- );
56
- fnName = varDecl?.getName();
57
- }
58
- }
59
-
60
- if (
61
- fnName &&
62
- config.functionWrappers?.some(
63
- (w) => w.name === fnName
64
- )
65
- ) {
66
- continue;
67
- }
68
-
69
- const arg = call.getArguments()[0];
70
- if (!arg) continue;
71
-
72
- const result = extractExpression(arg);
73
- if (!result) continue;
74
-
75
- result.values.forEach((value) =>
76
- events.add({
77
- value,
78
- dynamic: result.dynamic,
79
- })
80
- );
81
- }
82
-
83
- return events;
84
- }