@vscode/telemetry-extractor 1.20.0 → 1.20.4
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.
- package/.github/workflows/node.js.yml +1 -0
- package/eslint.config.js +1 -1
- package/out/lib/operations.js +64 -66
- package/out/lib/operations.js.map +1 -1
- package/out/lib/parser.js +39 -21
- package/out/lib/parser.js.map +1 -1
- package/out/lib/save-declarations.js +55 -4
- package/out/lib/save-declarations.js.map +1 -1
- package/out/lib/ts-parser.js +28 -0
- package/out/lib/ts-parser.js.map +1 -1
- package/package.json +2 -2
- package/src/lib/operations.ts +56 -71
- package/src/lib/parser.ts +53 -25
- package/src/lib/save-declarations.ts +71 -4
- package/src/lib/ts-parser.ts +41 -0
package/eslint.config.js
CHANGED
|
@@ -3,7 +3,7 @@ const tseslint = require('typescript-eslint');
|
|
|
3
3
|
|
|
4
4
|
module.exports = tseslint.config(
|
|
5
5
|
{
|
|
6
|
-
ignores: ['out/**', 'src/tests/mocha/resources/**'],
|
|
6
|
+
ignores: ['out/**', 'src/tests/mocha/resources/**', 'src/telemetry-sources/**'],
|
|
7
7
|
},
|
|
8
8
|
eslint.configs.recommended,
|
|
9
9
|
...tseslint.configs.recommended,
|
package/out/lib/operations.js
CHANGED
|
@@ -39,8 +39,56 @@ function merge(target, source) {
|
|
|
39
39
|
// We combine their properties together if the event already exists
|
|
40
40
|
if (found) {
|
|
41
41
|
if (target instanceof events_1.Events && source instanceof events_1.Events && found instanceof events_1.Event && item instanceof events_1.Event) {
|
|
42
|
-
if (!
|
|
43
|
-
|
|
42
|
+
if (!eventsAreCompatible(found, item)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// Merge unique properties from source into target
|
|
46
|
+
for (const prop of item.properties) {
|
|
47
|
+
if (prop instanceof common_properties_1.Property) {
|
|
48
|
+
const exists = found.properties.some(p => p instanceof common_properties_1.Property && p.name === prop.name);
|
|
49
|
+
if (!exists) {
|
|
50
|
+
found.properties.push(prop);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (prop instanceof events_1.Metadata) {
|
|
54
|
+
const exists = found.properties.some(p => p instanceof events_1.Metadata && p.name === prop.name);
|
|
55
|
+
if (!exists) {
|
|
56
|
+
found.properties.push(prop);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else if (prop instanceof events_1.Include) {
|
|
60
|
+
const existingInclude = found.properties.find(p => p instanceof events_1.Include);
|
|
61
|
+
if (existingInclude) {
|
|
62
|
+
for (const name of prop.includeNames) {
|
|
63
|
+
if (!existingInclude.includeNames.includes(name)) {
|
|
64
|
+
existingInclude.includeNames.push(name);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
found.properties.push(new events_1.Include([...prop.includeNames]));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (prop instanceof events_1.Inline) {
|
|
73
|
+
const exists = found.properties.some(p => p instanceof events_1.Inline && p.inlineName === prop.inlineName);
|
|
74
|
+
if (!exists) {
|
|
75
|
+
found.properties.push(prop);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (prop instanceof events_1.Wildcard) {
|
|
79
|
+
const existingWildcard = found.properties.find(p => p instanceof events_1.Wildcard);
|
|
80
|
+
if (existingWildcard) {
|
|
81
|
+
for (const entry of prop.entries) {
|
|
82
|
+
const entryExists = existingWildcard.entries.some(e => e.prefix === entry.prefix);
|
|
83
|
+
if (!entryExists) {
|
|
84
|
+
existingWildcard.entries.push(entry);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
found.properties.push(prop);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
44
92
|
}
|
|
45
93
|
continue;
|
|
46
94
|
}
|
|
@@ -52,71 +100,21 @@ function merge(target, source) {
|
|
|
52
100
|
}
|
|
53
101
|
}
|
|
54
102
|
exports.merge = merge;
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
type: 'property',
|
|
70
|
-
name: property.name,
|
|
71
|
-
classification: property.classification,
|
|
72
|
-
purpose: property.purpose,
|
|
73
|
-
expiration: property.expiration,
|
|
74
|
-
owner: property.owner,
|
|
75
|
-
comment: property.comment,
|
|
76
|
-
endPoint: property.endPoint,
|
|
77
|
-
isMeasurement: property.isMeasurement
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
if (property instanceof events_1.Metadata) {
|
|
81
|
-
return {
|
|
82
|
-
type: 'metadata',
|
|
83
|
-
name: property.name,
|
|
84
|
-
value: property.value
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
if (property instanceof events_1.Include) {
|
|
88
|
-
return {
|
|
89
|
-
type: 'include',
|
|
90
|
-
includeNames: [...property.includeNames].sort()
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
if (property instanceof events_1.Inline) {
|
|
94
|
-
return {
|
|
95
|
-
type: 'inline',
|
|
96
|
-
inlineName: property.inlineName,
|
|
97
|
-
inlines: [...property.inlines].sort()
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
return {
|
|
101
|
-
type: 'wildcard',
|
|
102
|
-
entries: property.entries.map(entry => ({
|
|
103
|
-
prefix: entry.prefix,
|
|
104
|
-
classification: entry.classification,
|
|
105
|
-
endpoint: entry.endpoint
|
|
106
|
-
})).sort((a, b) => stableSerialize(a).localeCompare(stableSerialize(b)))
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
function stableSerialize(value) {
|
|
110
|
-
if (Array.isArray(value)) {
|
|
111
|
-
return `[${value.map(stableSerialize).join(',')}]`;
|
|
112
|
-
}
|
|
113
|
-
if (value && typeof value === 'object') {
|
|
114
|
-
const entries = Object.entries(value)
|
|
115
|
-
.sort(([left], [right]) => left.localeCompare(right))
|
|
116
|
-
.map(([key, entryValue]) => `${JSON.stringify(key)}:${stableSerialize(entryValue)}`);
|
|
117
|
-
return `{${entries.join(',')}}`;
|
|
103
|
+
function eventsAreCompatible(left, right) {
|
|
104
|
+
for (const leftProp of left.properties) {
|
|
105
|
+
if (!(leftProp instanceof common_properties_1.Property))
|
|
106
|
+
continue;
|
|
107
|
+
for (const rightProp of right.properties) {
|
|
108
|
+
if (!(rightProp instanceof common_properties_1.Property))
|
|
109
|
+
continue;
|
|
110
|
+
if (leftProp.name === rightProp.name) {
|
|
111
|
+
if (leftProp.classification !== rightProp.classification || leftProp.purpose !== rightProp.purpose) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
118
116
|
}
|
|
119
|
-
return
|
|
117
|
+
return true;
|
|
120
118
|
}
|
|
121
119
|
// Searches the object for an event or fragment of the specific name
|
|
122
120
|
// If found returns, if not found creates it, places it in the array, and then returns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/lib/operations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuC;AACvC,kCAAkC;AAClC,2CAAkD;AAClD,qCAA6F;AAC7F,2DAA+C;AAC/C,qDAAuC;AACvC,2CAA6B;AAE7B,SAAgB,KAAK,CAAC,MAA0B,EAAE,MAA0B;IACxE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACvC,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,mEAAmE;QACnE,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,MAAM,YAAY,eAAM,IAAI,MAAM,YAAY,eAAM,IAAI,KAAK,YAAY,cAAK,IAAI,IAAI,YAAY,cAAK,EAAE,CAAC;gBAC1G,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/lib/operations.ts"],"names":[],"mappings":"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"}
|
package/out/lib/parser.js
CHANGED
|
@@ -40,11 +40,13 @@ class Parser {
|
|
|
40
40
|
excludedDirs;
|
|
41
41
|
applyEndpoints;
|
|
42
42
|
lowerCaseEvents;
|
|
43
|
+
eventDefinitions;
|
|
43
44
|
constructor(sourceDirs, excludedDirs, applyEndpoints, lowerCaseEvents) {
|
|
44
45
|
this.sourceDirs = sourceDirs;
|
|
45
46
|
this.excludedDirs = excludedDirs;
|
|
46
47
|
this.applyEndpoints = applyEndpoints;
|
|
47
48
|
this.lowerCaseEvents = lowerCaseEvents;
|
|
49
|
+
this.eventDefinitions = new Map();
|
|
48
50
|
}
|
|
49
51
|
toRipGrepOption(dir) {
|
|
50
52
|
while (dir.startsWith('/') || dir.startsWith('\\')) {
|
|
@@ -55,10 +57,10 @@ class Parser {
|
|
|
55
57
|
extractComments(absoluteFilePaths, commentMatcher, collector) {
|
|
56
58
|
absoluteFilePaths.forEach(absoluteFilePath => {
|
|
57
59
|
if (absoluteFilePath) {
|
|
58
|
-
const fileContents = fs.readFileSync(absoluteFilePath);
|
|
60
|
+
const fileContents = fs.readFileSync(absoluteFilePath).toString();
|
|
59
61
|
let match;
|
|
60
|
-
while ((match = commentMatcher.exec(fileContents
|
|
61
|
-
collector(absoluteFilePath, match);
|
|
62
|
+
while ((match = commentMatcher.exec(fileContents))) {
|
|
63
|
+
collector(absoluteFilePath, match, fileContents);
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
});
|
|
@@ -136,25 +138,23 @@ class Parser {
|
|
|
136
138
|
}
|
|
137
139
|
findEvents(sourceDir) {
|
|
138
140
|
const filesWithEvents = this.asAbsoluteFilePaths(this.findFilesWithEvents(sourceDir));
|
|
139
|
-
const
|
|
141
|
+
const seenEvents = new Set();
|
|
140
142
|
// Using [\s\S]* instead of .* since the latter does not match when using /m option
|
|
141
143
|
const eventMatcher = /\/\*\s*__GDPR__\b([\s\S]*?)\*\//mg;
|
|
142
144
|
const eventDeclarations = new events_1.Events();
|
|
143
|
-
this.extractComments(filesWithEvents, eventMatcher, (filePath, match) => {
|
|
145
|
+
this.extractComments(filesWithEvents, eventMatcher, (filePath, match, fileContents) => {
|
|
144
146
|
try {
|
|
145
147
|
const eventDeclaration = JSON.parse(`{ ${match[1]} }`);
|
|
146
148
|
let eventName = Object.keys(eventDeclaration)[0];
|
|
147
149
|
eventName = this.lowerCaseEvents ? eventName.toLowerCase() : eventName;
|
|
148
150
|
const eventProperties = eventDeclaration[Object.keys(eventDeclaration)[0]];
|
|
149
|
-
const
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
if (existingSignature) {
|
|
151
|
+
const conflictProperties = this.extractConflictProperties(eventProperties);
|
|
152
|
+
const lineNumber = this.getLineNumber(fileContents, match.index);
|
|
153
|
+
this.addEventDefinition(eventName, conflictProperties, `${filePath}:${lineNumber}`);
|
|
154
|
+
if (seenEvents.has(eventName)) {
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
|
-
|
|
157
|
+
seenEvents.add(eventName);
|
|
158
158
|
const event = (0, operations_1.findOrCreate)(eventDeclarations, eventName);
|
|
159
159
|
// Get the propeties which the event possesses
|
|
160
160
|
(0, operations_1.populateProperties)(eventProperties, event, this.applyEndpoints);
|
|
@@ -167,17 +167,35 @@ class Parser {
|
|
|
167
167
|
});
|
|
168
168
|
return eventDeclarations;
|
|
169
169
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
getEventDefinitions() {
|
|
171
|
+
const definitions = new Map();
|
|
172
|
+
for (const [eventName, entries] of this.eventDefinitions.entries()) {
|
|
173
|
+
definitions.set(eventName, [...entries]);
|
|
173
174
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
return definitions;
|
|
176
|
+
}
|
|
177
|
+
addEventDefinition(eventName, properties, location) {
|
|
178
|
+
const existing = this.eventDefinitions.get(eventName) ?? [];
|
|
179
|
+
existing.push({ properties, location });
|
|
180
|
+
this.eventDefinitions.set(eventName, existing);
|
|
181
|
+
}
|
|
182
|
+
extractConflictProperties(eventProperties) {
|
|
183
|
+
const result = {};
|
|
184
|
+
for (const [key, value] of Object.entries(eventProperties)) {
|
|
185
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
186
|
+
const obj = value;
|
|
187
|
+
if (typeof obj.classification === 'string' && typeof obj.purpose === 'string') {
|
|
188
|
+
result[key] = { classification: obj.classification, purpose: obj.purpose };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
getLineNumber(fileContents, index) {
|
|
195
|
+
if (index === undefined) {
|
|
196
|
+
return 1;
|
|
179
197
|
}
|
|
180
|
-
return
|
|
198
|
+
return fileContents.slice(0, index).split(/\r\n|\r|\n/).length;
|
|
181
199
|
}
|
|
182
200
|
// Utilizes a regex to find the files containing the specific pattern
|
|
183
201
|
findFiles(ripgrepPattern, sourceDir) {
|
package/out/lib/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/lib/parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuC;AACvC,kCAAkC;AAClC,6CAAyC;AACzC,2CAA6B;AAC7B,kDAAoC;AACpC,uCAAyB;AACzB,iGAAiG;AACjG,2CAAwC;AACxC,2DAAiE;AACjE,qCAAkC;AAElC,6CAAuG;
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/lib/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,19 +86,65 @@ function validateOutputtedDeclarations(declarations) {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
if (failedValidation) {
|
|
89
|
-
|
|
89
|
+
return true;
|
|
90
90
|
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
function mergeEventDefinitions(target, definitions, source, prefix = '') {
|
|
94
|
+
for (const [eventName, entries] of definitions.entries()) {
|
|
95
|
+
const prefixedName = `${prefix}${eventName}`;
|
|
96
|
+
const existing = target.get(prefixedName) ?? [];
|
|
97
|
+
existing.push(...entries.map((entry) => ({ ...entry, source })));
|
|
98
|
+
target.set(prefixedName, existing);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function reportDuplicateEventConflicts(definitions) {
|
|
102
|
+
let hasConflicts = false;
|
|
103
|
+
for (const [eventName, entries] of definitions.entries()) {
|
|
104
|
+
if (entries.length <= 1) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// Check if any overlapping properties have different classification/purpose
|
|
108
|
+
let eventHasConflict = false;
|
|
109
|
+
for (let i = 0; i < entries.length && !eventHasConflict; i++) {
|
|
110
|
+
for (let j = i + 1; j < entries.length && !eventHasConflict; j++) {
|
|
111
|
+
for (const propName of Object.keys(entries[i].properties)) {
|
|
112
|
+
if (propName in entries[j].properties) {
|
|
113
|
+
const a = entries[i].properties[propName];
|
|
114
|
+
const b = entries[j].properties[propName];
|
|
115
|
+
if (a.classification !== b.classification || a.purpose !== b.purpose) {
|
|
116
|
+
eventHasConflict = true;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (eventHasConflict) {
|
|
124
|
+
hasConflicts = true;
|
|
125
|
+
const uniqueLocations = [...new Set(entries.map(entry => `${entry.location.replace(/\\/g, '/')} (${entry.source})`))];
|
|
126
|
+
console.error(`Duplicate telemetry event declaration '${eventName}' has conflicting details at:`);
|
|
127
|
+
uniqueLocations.forEach(location => console.error(` - ${location}`));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return hasConflicts;
|
|
91
131
|
}
|
|
92
132
|
async function extractAndResolveDeclarations(sourceSpecs) {
|
|
93
133
|
try {
|
|
94
134
|
const allDeclarations = { events: new events_1.Events(), commonProperties: new common_properties_1.CommonProperties(), fragments: new fragments_1.Fragments() };
|
|
95
135
|
const allTypeScriptDeclarations = Object.create(null);
|
|
136
|
+
const allEventDefinitions = new Map();
|
|
96
137
|
for (const spec of sourceSpecs) {
|
|
97
|
-
|
|
138
|
+
(0, logger_1.logMessage)('...extracting', spec.parserOptions.silenceOutput);
|
|
139
|
+
const parser = new parser_1.Parser(spec.sourceDirs, spec.excludedDirs, spec.parserOptions.applyEndpoints, spec.parserOptions.lowerCaseEvents);
|
|
140
|
+
let declarations = await parser.extractDeclarations();
|
|
141
|
+
declarations = (0, declarations_1.resolveDeclarations)(declarations, spec.parserOptions.verbose);
|
|
98
142
|
let typescriptDeclarations = Object.create(null);
|
|
99
143
|
// The parser does not know how to handle multiple source directories due to different TS configs, so we manually have to parse each source dir
|
|
100
144
|
spec.sourceDirs.forEach((dir) => {
|
|
101
|
-
|
|
145
|
+
const tsParser = new ts_parser_1.TsParser(dir, spec.excludedDirs, spec.parserOptions.applyEndpoints, spec.parserOptions.lowerCaseEvents);
|
|
146
|
+
Object.assign(typescriptDeclarations, tsParser.parseFiles());
|
|
147
|
+
mergeEventDefinitions(allEventDefinitions, tsParser.getEventDefinitions(), 'TS', spec.parserOptions.eventPrefix);
|
|
102
148
|
});
|
|
103
149
|
if (spec.parserOptions.eventPrefix !== '') {
|
|
104
150
|
declarations.events.dataPoints = declarations.events.dataPoints.map((event) => {
|
|
@@ -120,7 +166,9 @@ async function extractAndResolveDeclarations(sourceSpecs) {
|
|
|
120
166
|
allDeclarations.commonProperties.properties = allDeclarations.commonProperties.properties.concat(declarations.commonProperties.properties);
|
|
121
167
|
allDeclarations.events.dataPoints = allDeclarations.events.dataPoints.concat(declarations.events.dataPoints);
|
|
122
168
|
Object.assign(allTypeScriptDeclarations, typescriptDeclarations);
|
|
169
|
+
mergeEventDefinitions(allEventDefinitions, parser.getEventDefinitions(), 'GDPR', spec.parserOptions.eventPrefix);
|
|
123
170
|
}
|
|
171
|
+
const hasDuplicateEventConflicts = reportDuplicateEventConflicts(allEventDefinitions);
|
|
124
172
|
const formattedDeclarations = await (0, object_converter_1.transformOutput)(allDeclarations);
|
|
125
173
|
for (const dec in allTypeScriptDeclarations) {
|
|
126
174
|
// If there's typescript declarations but we returned a null object
|
|
@@ -130,7 +178,10 @@ async function extractAndResolveDeclarations(sourceSpecs) {
|
|
|
130
178
|
}
|
|
131
179
|
formattedDeclarations.events[dec] = allTypeScriptDeclarations[dec];
|
|
132
180
|
}
|
|
133
|
-
validateOutputtedDeclarations(formattedDeclarations);
|
|
181
|
+
const hasPropertyValidationErrors = validateOutputtedDeclarations(formattedDeclarations);
|
|
182
|
+
if (hasDuplicateEventConflicts || hasPropertyValidationErrors || process.exitCode === 1) {
|
|
183
|
+
throw new Error('Validation failed, please see logs for more information');
|
|
184
|
+
}
|
|
134
185
|
return Promise.resolve(deepSortKeys(formattedDeclarations));
|
|
135
186
|
}
|
|
136
187
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-declarations.js","sourceRoot":"","sources":["../../src/lib/save-declarations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuC;AACvC,kCAAkC;AAClC,2CAA6B;AAC7B,qCAAkC;AAClC,0DAA4C;AAC5C,iDAA0F;AAC1F,yDAAqD;AACrD,qCAAkC;AAClC,2DAAuD;AACvD,2CAAuC;AACvC,+CAAiD;AAEjD,qCAAsC;AACtC,2CAAwC;
|
|
1
|
+
{"version":3,"file":"save-declarations.js","sourceRoot":"","sources":["../../src/lib/save-declarations.ts"],"names":[],"mappings":"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"}
|
package/out/lib/ts-parser.js
CHANGED
|
@@ -192,11 +192,13 @@ class TsParser {
|
|
|
192
192
|
applyEndpoints;
|
|
193
193
|
lowerCaseEvents;
|
|
194
194
|
project;
|
|
195
|
+
eventDefinitions;
|
|
195
196
|
constructor(sourceDir, excludedDirs, applyEndpoints, lowerCaseEvents) {
|
|
196
197
|
this.sourceDir = sourceDir;
|
|
197
198
|
this.excludedDirs = excludedDirs;
|
|
198
199
|
this.applyEndpoints = applyEndpoints;
|
|
199
200
|
this.lowerCaseEvents = lowerCaseEvents;
|
|
201
|
+
this.eventDefinitions = new Map();
|
|
200
202
|
// We search for a TS config as that allows the language service to handle weird imports
|
|
201
203
|
if (fs.existsSync(path.join(this.sourceDir, 'src/tsconfig.json'))) {
|
|
202
204
|
this.project = new ts_morph_1.Project({
|
|
@@ -239,6 +241,30 @@ class TsParser {
|
|
|
239
241
|
// No-op
|
|
240
242
|
}
|
|
241
243
|
}
|
|
244
|
+
getEventDefinitions() {
|
|
245
|
+
const definitions = new Map();
|
|
246
|
+
for (const [eventName, entries] of this.eventDefinitions.entries()) {
|
|
247
|
+
definitions.set(eventName, [...entries]);
|
|
248
|
+
}
|
|
249
|
+
return definitions;
|
|
250
|
+
}
|
|
251
|
+
addEventDefinition(eventName, properties, location) {
|
|
252
|
+
const existing = this.eventDefinitions.get(eventName) ?? [];
|
|
253
|
+
existing.push({ properties, location });
|
|
254
|
+
this.eventDefinitions.set(eventName, existing);
|
|
255
|
+
}
|
|
256
|
+
extractConflictProperties(eventProperties) {
|
|
257
|
+
const result = {};
|
|
258
|
+
for (const [key, value] of Object.entries(eventProperties)) {
|
|
259
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
260
|
+
const obj = value;
|
|
261
|
+
if (typeof obj.classification === 'string' && typeof obj.purpose === 'string') {
|
|
262
|
+
result[key] = { classification: obj.classification, purpose: obj.purpose };
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
242
268
|
parseFiles() {
|
|
243
269
|
let publicLogUse = [];
|
|
244
270
|
this.project.getSourceFiles().forEach((source) => {
|
|
@@ -282,6 +308,7 @@ class TsParser {
|
|
|
282
308
|
created_event.properties.forEach((prop) => {
|
|
283
309
|
Object.assign(events[event_name], prop);
|
|
284
310
|
});
|
|
311
|
+
this.addEventDefinition(event_name, this.extractConflictProperties(events[event_name]), `${pl.getSourceFile().getFilePath()}:${pl.getStartLineNumber()}`);
|
|
285
312
|
const eventProperties = typeArgs[0].getType().getProperties();
|
|
286
313
|
// Find all eventProperties that have a number or boolean type
|
|
287
314
|
eventProperties.forEach((prop) => {
|
|
@@ -316,6 +343,7 @@ class TsParser {
|
|
|
316
343
|
}
|
|
317
344
|
event_name = this.lowerCaseEvents ? event_name.toLowerCase() : event_name;
|
|
318
345
|
events[event_name] = {};
|
|
346
|
+
this.addEventDefinition(event_name, this.extractConflictProperties(events[event_name]), `${pl.getSourceFile().getFilePath()}:${pl.getStartLineNumber()}`);
|
|
319
347
|
}
|
|
320
348
|
});
|
|
321
349
|
return events;
|
package/out/lib/ts-parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-parser.js","sourceRoot":"","sources":["../../src/lib/ts-parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ts-parser.js","sourceRoot":"","sources":["../../src/lib/ts-parser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vscode/telemetry-extractor",
|
|
3
|
-
"version": "1.20.
|
|
3
|
+
"version": "1.20.4",
|
|
4
4
|
"description": "Extracts telemetry from VS Code",
|
|
5
5
|
"main": "out/index.js",
|
|
6
6
|
"typings": "vscode-telemetry-extractor.d.ts",
|
|
@@ -43,4 +43,4 @@
|
|
|
43
43
|
"typescript": "^5.3.3",
|
|
44
44
|
"typescript-eslint": "^8.56.0"
|
|
45
45
|
}
|
|
46
|
-
}
|
|
46
|
+
}
|
package/src/lib/operations.ts
CHANGED
|
@@ -14,8 +14,50 @@ export function merge(target: Fragments | Events, source: Fragments | Events) {
|
|
|
14
14
|
// We combine their properties together if the event already exists
|
|
15
15
|
if (found) {
|
|
16
16
|
if (target instanceof Events && source instanceof Events && found instanceof Event && item instanceof Event) {
|
|
17
|
-
if (!
|
|
18
|
-
|
|
17
|
+
if (!eventsAreCompatible(found, item)) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
// Merge unique properties from source into target
|
|
21
|
+
for (const prop of item.properties) {
|
|
22
|
+
if (prop instanceof Property) {
|
|
23
|
+
const exists = found.properties.some(p => p instanceof Property && p.name === prop.name);
|
|
24
|
+
if (!exists) {
|
|
25
|
+
found.properties.push(prop);
|
|
26
|
+
}
|
|
27
|
+
} else if (prop instanceof Metadata) {
|
|
28
|
+
const exists = found.properties.some(p => p instanceof Metadata && p.name === prop.name);
|
|
29
|
+
if (!exists) {
|
|
30
|
+
found.properties.push(prop);
|
|
31
|
+
}
|
|
32
|
+
} else if (prop instanceof Include) {
|
|
33
|
+
const existingInclude = found.properties.find(p => p instanceof Include) as Include | undefined;
|
|
34
|
+
if (existingInclude) {
|
|
35
|
+
for (const name of prop.includeNames) {
|
|
36
|
+
if (!existingInclude.includeNames.includes(name)) {
|
|
37
|
+
existingInclude.includeNames.push(name);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
} else {
|
|
41
|
+
found.properties.push(new Include([...prop.includeNames]));
|
|
42
|
+
}
|
|
43
|
+
} else if (prop instanceof Inline) {
|
|
44
|
+
const exists = found.properties.some(p => p instanceof Inline && p.inlineName === prop.inlineName);
|
|
45
|
+
if (!exists) {
|
|
46
|
+
found.properties.push(prop);
|
|
47
|
+
}
|
|
48
|
+
} else if (prop instanceof Wildcard) {
|
|
49
|
+
const existingWildcard = found.properties.find(p => p instanceof Wildcard) as Wildcard | undefined;
|
|
50
|
+
if (existingWildcard) {
|
|
51
|
+
for (const entry of prop.entries) {
|
|
52
|
+
const entryExists = existingWildcard.entries.some(e => e.prefix === entry.prefix);
|
|
53
|
+
if (!entryExists) {
|
|
54
|
+
existingWildcard.entries.push(entry);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
found.properties.push(prop);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
19
61
|
}
|
|
20
62
|
continue;
|
|
21
63
|
}
|
|
@@ -26,76 +68,19 @@ export function merge(target: Fragments | Events, source: Fragments | Events) {
|
|
|
26
68
|
}
|
|
27
69
|
}
|
|
28
70
|
|
|
29
|
-
function
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function propertyToComparable(property: Property | Metadata | Include | Inline | Wildcard) {
|
|
43
|
-
if (property instanceof Property) {
|
|
44
|
-
return {
|
|
45
|
-
type: 'property',
|
|
46
|
-
name: property.name,
|
|
47
|
-
classification: property.classification,
|
|
48
|
-
purpose: property.purpose,
|
|
49
|
-
expiration: property.expiration,
|
|
50
|
-
owner: property.owner,
|
|
51
|
-
comment: property.comment,
|
|
52
|
-
endPoint: property.endPoint,
|
|
53
|
-
isMeasurement: property.isMeasurement
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
if (property instanceof Metadata) {
|
|
57
|
-
return {
|
|
58
|
-
type: 'metadata',
|
|
59
|
-
name: property.name,
|
|
60
|
-
value: property.value
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
if (property instanceof Include) {
|
|
64
|
-
return {
|
|
65
|
-
type: 'include',
|
|
66
|
-
includeNames: [...property.includeNames].sort()
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
if (property instanceof Inline) {
|
|
70
|
-
return {
|
|
71
|
-
type: 'inline',
|
|
72
|
-
inlineName: property.inlineName,
|
|
73
|
-
inlines: [...property.inlines].sort()
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
return {
|
|
77
|
-
type: 'wildcard',
|
|
78
|
-
entries: property.entries.map(entry => ({
|
|
79
|
-
prefix: entry.prefix,
|
|
80
|
-
classification: entry.classification,
|
|
81
|
-
endpoint: entry.endpoint
|
|
82
|
-
})).sort((a, b) => stableSerialize(a).localeCompare(stableSerialize(b)))
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function stableSerialize(value: unknown): string {
|
|
87
|
-
if (Array.isArray(value)) {
|
|
88
|
-
return `[${value.map(stableSerialize).join(',')}]`;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (value && typeof value === 'object') {
|
|
92
|
-
const entries = Object.entries(value as Record<string, unknown>)
|
|
93
|
-
.sort(([left], [right]) => left.localeCompare(right))
|
|
94
|
-
.map(([key, entryValue]) => `${JSON.stringify(key)}:${stableSerialize(entryValue)}`);
|
|
95
|
-
return `{${entries.join(',')}}`;
|
|
71
|
+
function eventsAreCompatible(left: Event, right: Event): boolean {
|
|
72
|
+
for (const leftProp of left.properties) {
|
|
73
|
+
if (!(leftProp instanceof Property)) continue;
|
|
74
|
+
for (const rightProp of right.properties) {
|
|
75
|
+
if (!(rightProp instanceof Property)) continue;
|
|
76
|
+
if (leftProp.name === rightProp.name) {
|
|
77
|
+
if (leftProp.classification !== rightProp.classification || leftProp.purpose !== rightProp.purpose) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
96
82
|
}
|
|
97
|
-
|
|
98
|
-
return JSON.stringify(value);
|
|
83
|
+
return true;
|
|
99
84
|
}
|
|
100
85
|
|
|
101
86
|
// Searches the object for an event or fragment of the specific name
|
package/src/lib/parser.ts
CHANGED
|
@@ -11,6 +11,16 @@ import { Events } from './events';
|
|
|
11
11
|
import { Declarations } from './declarations';
|
|
12
12
|
import { merge, findOrCreate, populateProperties, makeExclusionsRelativeToSource } from './operations';
|
|
13
13
|
|
|
14
|
+
export interface EventPropertySignature {
|
|
15
|
+
classification: string;
|
|
16
|
+
purpose: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface EventDefinition {
|
|
20
|
+
properties: Record<string, EventPropertySignature>;
|
|
21
|
+
location: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
14
24
|
export class Parser {
|
|
15
25
|
|
|
16
26
|
private sourceDirs: string[];
|
|
@@ -18,12 +28,14 @@ export class Parser {
|
|
|
18
28
|
private applyEndpoints: boolean;
|
|
19
29
|
|
|
20
30
|
private lowerCaseEvents: boolean;
|
|
31
|
+
private eventDefinitions: Map<string, EventDefinition[]>;
|
|
21
32
|
|
|
22
33
|
constructor(sourceDirs: string[], excludedDirs: string[], applyEndpoints: boolean, lowerCaseEvents: boolean) {
|
|
23
34
|
this.sourceDirs = sourceDirs;
|
|
24
35
|
this.excludedDirs = excludedDirs;
|
|
25
36
|
this.applyEndpoints = applyEndpoints;
|
|
26
37
|
this.lowerCaseEvents = lowerCaseEvents;
|
|
38
|
+
this.eventDefinitions = new Map();
|
|
27
39
|
}
|
|
28
40
|
|
|
29
41
|
private toRipGrepOption(dir: string): string[] {
|
|
@@ -33,13 +45,13 @@ export class Parser {
|
|
|
33
45
|
return ['--glob', `!${dir}/**`];
|
|
34
46
|
}
|
|
35
47
|
|
|
36
|
-
private extractComments(absoluteFilePaths: string[], commentMatcher: RegExp, collector: (filePath: string, match: RegExpExecArray) => void) {
|
|
48
|
+
private extractComments(absoluteFilePaths: string[], commentMatcher: RegExp, collector: (filePath: string, match: RegExpExecArray, fileContents: string) => void) {
|
|
37
49
|
absoluteFilePaths.forEach(absoluteFilePath => {
|
|
38
50
|
if (absoluteFilePath) {
|
|
39
|
-
const fileContents = fs.readFileSync(absoluteFilePath);
|
|
51
|
+
const fileContents = fs.readFileSync(absoluteFilePath).toString();
|
|
40
52
|
let match;
|
|
41
|
-
while ((match = commentMatcher.exec(fileContents
|
|
42
|
-
collector(absoluteFilePath, match);
|
|
53
|
+
while ((match = commentMatcher.exec(fileContents))) {
|
|
54
|
+
collector(absoluteFilePath, match, fileContents);
|
|
43
55
|
}
|
|
44
56
|
}
|
|
45
57
|
});
|
|
@@ -62,7 +74,7 @@ export class Parser {
|
|
|
62
74
|
|
|
63
75
|
const commonPropertyMatcher = /\/\/\s*__GDPR__COMMON__(.*)$/mg;
|
|
64
76
|
const commonPropertyDeclarations = new CommonProperties();
|
|
65
|
-
this.extractComments(filesWithCommonProperties, commonPropertyMatcher, (filePath: string, match:
|
|
77
|
+
this.extractComments(filesWithCommonProperties, commonPropertyMatcher, (filePath: string, match: RegExpExecArray) => {
|
|
66
78
|
try {
|
|
67
79
|
const commonPropertyDeclaration = JSON.parse(`{ ${match[1]} }`);
|
|
68
80
|
const propertyName = Object.keys(commonPropertyDeclaration)[0];
|
|
@@ -99,7 +111,7 @@ export class Parser {
|
|
|
99
111
|
// Using [\s\S]* instead of .* since the latter does not match when using /m option
|
|
100
112
|
const fragmentMatcher = /\/\*\s*__GDPR__FRAGMENT__([\s\S]*?)\*\//mg;
|
|
101
113
|
const fragmentDeclarations = new Fragments();
|
|
102
|
-
this.extractComments(filesWithFragments, fragmentMatcher, (filePath: string, match:
|
|
114
|
+
this.extractComments(filesWithFragments, fragmentMatcher, (filePath: string, match: RegExpExecArray) => {
|
|
103
115
|
try {
|
|
104
116
|
const fragmentDeclaration = JSON.parse(`{ ${match[1]} }`);
|
|
105
117
|
// There's only ever one key per match
|
|
@@ -125,29 +137,26 @@ export class Parser {
|
|
|
125
137
|
|
|
126
138
|
private findEvents(sourceDir: string) {
|
|
127
139
|
const filesWithEvents = this.asAbsoluteFilePaths(this.findFilesWithEvents(sourceDir));
|
|
128
|
-
const
|
|
140
|
+
const seenEvents = new Set<string>();
|
|
129
141
|
|
|
130
142
|
// Using [\s\S]* instead of .* since the latter does not match when using /m option
|
|
131
143
|
const eventMatcher = /\/\*\s*__GDPR__\b([\s\S]*?)\*\//mg;
|
|
132
144
|
const eventDeclarations = new Events();
|
|
133
|
-
this.extractComments(filesWithEvents, eventMatcher, (filePath: string, match:
|
|
145
|
+
this.extractComments(filesWithEvents, eventMatcher, (filePath: string, match: RegExpExecArray, fileContents: string) => {
|
|
134
146
|
try {
|
|
135
147
|
const eventDeclaration = JSON.parse(`{ ${match[1]} }`);
|
|
136
148
|
let eventName = Object.keys(eventDeclaration)[0];
|
|
137
149
|
eventName = this.lowerCaseEvents ? eventName.toLowerCase() : eventName;
|
|
138
150
|
const eventProperties = eventDeclaration[Object.keys(eventDeclaration)[0]];
|
|
139
|
-
const
|
|
140
|
-
const
|
|
151
|
+
const conflictProperties = this.extractConflictProperties(eventProperties);
|
|
152
|
+
const lineNumber = this.getLineNumber(fileContents, match.index);
|
|
153
|
+
this.addEventDefinition(eventName, conflictProperties, `${filePath}:${lineNumber}`);
|
|
141
154
|
|
|
142
|
-
if (
|
|
143
|
-
throw new Error(`Duplicate telemetry event declaration '${eventName}' has conflicting details.`);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (existingSignature) {
|
|
155
|
+
if (seenEvents.has(eventName)) {
|
|
147
156
|
return;
|
|
148
157
|
}
|
|
149
158
|
|
|
150
|
-
|
|
159
|
+
seenEvents.add(eventName);
|
|
151
160
|
const event = findOrCreate(eventDeclarations, eventName);
|
|
152
161
|
// Get the propeties which the event possesses
|
|
153
162
|
populateProperties(eventProperties, event, this.applyEndpoints);
|
|
@@ -160,19 +169,38 @@ export class Parser {
|
|
|
160
169
|
return eventDeclarations;
|
|
161
170
|
}
|
|
162
171
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
172
|
+
public getEventDefinitions() {
|
|
173
|
+
const definitions = new Map<string, EventDefinition[]>();
|
|
174
|
+
for (const [eventName, entries] of this.eventDefinitions.entries()) {
|
|
175
|
+
definitions.set(eventName, [...entries]);
|
|
166
176
|
}
|
|
177
|
+
return definitions;
|
|
178
|
+
}
|
|
167
179
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
180
|
+
private addEventDefinition(eventName: string, properties: Record<string, EventPropertySignature>, location: string) {
|
|
181
|
+
const existing = this.eventDefinitions.get(eventName) ?? [];
|
|
182
|
+
existing.push({ properties, location });
|
|
183
|
+
this.eventDefinitions.set(eventName, existing);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private extractConflictProperties(eventProperties: Record<string, unknown>): Record<string, EventPropertySignature> {
|
|
187
|
+
const result: Record<string, EventPropertySignature> = {};
|
|
188
|
+
for (const [key, value] of Object.entries(eventProperties)) {
|
|
189
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
190
|
+
const obj = value as Record<string, unknown>;
|
|
191
|
+
if (typeof obj.classification === 'string' && typeof obj.purpose === 'string') {
|
|
192
|
+
result[key] = { classification: obj.classification, purpose: obj.purpose };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
173
195
|
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
174
198
|
|
|
175
|
-
|
|
199
|
+
private getLineNumber(fileContents: string, index: number | undefined) {
|
|
200
|
+
if (index === undefined) {
|
|
201
|
+
return 1;
|
|
202
|
+
}
|
|
203
|
+
return fileContents.slice(0, index).split(/\r\n|\r|\n/).length;
|
|
176
204
|
}
|
|
177
205
|
|
|
178
206
|
// Utilizes a regex to find the files containing the specific pattern
|
|
@@ -12,6 +12,13 @@ import { patchDebugEvents } from './debug-patch';
|
|
|
12
12
|
import { ParserOptions, SourceSpec } from './source-spec';
|
|
13
13
|
import { logMessage } from './logger';
|
|
14
14
|
import { Fragments } from './fragments';
|
|
15
|
+
import { EventDefinition, EventPropertySignature } from './parser';
|
|
16
|
+
|
|
17
|
+
interface EventConflictEntry {
|
|
18
|
+
properties: Record<string, EventPropertySignature>;
|
|
19
|
+
location: string;
|
|
20
|
+
source: 'GDPR' | 'TS';
|
|
21
|
+
}
|
|
15
22
|
|
|
16
23
|
function deepSortKeys(obj: unknown): unknown {
|
|
17
24
|
if (Array.isArray(obj)) {
|
|
@@ -63,20 +70,75 @@ function validateOutputtedDeclarations(declarations: OutputtedDeclarations) {
|
|
|
63
70
|
}
|
|
64
71
|
}
|
|
65
72
|
if (failedValidation) {
|
|
66
|
-
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function mergeEventDefinitions(
|
|
79
|
+
target: Map<string, EventConflictEntry[]>,
|
|
80
|
+
definitions: Map<string, EventDefinition[]>,
|
|
81
|
+
source: 'GDPR' | 'TS',
|
|
82
|
+
prefix = ''
|
|
83
|
+
) {
|
|
84
|
+
for (const [eventName, entries] of definitions.entries()) {
|
|
85
|
+
const prefixedName = `${prefix}${eventName}`;
|
|
86
|
+
const existing = target.get(prefixedName) ?? [];
|
|
87
|
+
existing.push(...entries.map((entry) => ({ ...entry, source })));
|
|
88
|
+
target.set(prefixedName, existing);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function reportDuplicateEventConflicts(definitions: Map<string, EventConflictEntry[]>) {
|
|
93
|
+
let hasConflicts = false;
|
|
94
|
+
for (const [eventName, entries] of definitions.entries()) {
|
|
95
|
+
if (entries.length <= 1) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Check if any overlapping properties have different classification/purpose
|
|
100
|
+
let eventHasConflict = false;
|
|
101
|
+
for (let i = 0; i < entries.length && !eventHasConflict; i++) {
|
|
102
|
+
for (let j = i + 1; j < entries.length && !eventHasConflict; j++) {
|
|
103
|
+
for (const propName of Object.keys(entries[i].properties)) {
|
|
104
|
+
if (propName in entries[j].properties) {
|
|
105
|
+
const a = entries[i].properties[propName];
|
|
106
|
+
const b = entries[j].properties[propName];
|
|
107
|
+
if (a.classification !== b.classification || a.purpose !== b.purpose) {
|
|
108
|
+
eventHasConflict = true;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (eventHasConflict) {
|
|
117
|
+
hasConflicts = true;
|
|
118
|
+
const uniqueLocations = [...new Set(entries.map(entry => `${entry.location.replace(/\\/g, '/')} (${entry.source})`))];
|
|
119
|
+
console.error(`Duplicate telemetry event declaration '${eventName}' has conflicting details at:`);
|
|
120
|
+
uniqueLocations.forEach(location => console.error(` - ${location}`));
|
|
121
|
+
}
|
|
67
122
|
}
|
|
123
|
+
return hasConflicts;
|
|
68
124
|
}
|
|
69
125
|
|
|
70
126
|
export async function extractAndResolveDeclarations(sourceSpecs: Array<SourceSpec>): Promise<OutputtedDeclarations> {
|
|
71
127
|
try {
|
|
72
128
|
const allDeclarations: Declarations = { events: new Events(), commonProperties: new CommonProperties(), fragments: new Fragments() };
|
|
73
129
|
const allTypeScriptDeclarations = Object.create(null);
|
|
130
|
+
const allEventDefinitions = new Map<string, EventConflictEntry[]>();
|
|
74
131
|
for (const spec of sourceSpecs) {
|
|
75
|
-
|
|
132
|
+
logMessage('...extracting', spec.parserOptions.silenceOutput);
|
|
133
|
+
const parser = new Parser(spec.sourceDirs, spec.excludedDirs, spec.parserOptions.applyEndpoints, spec.parserOptions.lowerCaseEvents);
|
|
134
|
+
let declarations = await parser.extractDeclarations();
|
|
135
|
+
declarations = resolveDeclarations(declarations, spec.parserOptions.verbose);
|
|
76
136
|
let typescriptDeclarations = Object.create(null);
|
|
77
137
|
// The parser does not know how to handle multiple source directories due to different TS configs, so we manually have to parse each source dir
|
|
78
138
|
spec.sourceDirs.forEach((dir) => {
|
|
79
|
-
|
|
139
|
+
const tsParser = new TsParser(dir, spec.excludedDirs, spec.parserOptions.applyEndpoints, spec.parserOptions.lowerCaseEvents);
|
|
140
|
+
Object.assign(typescriptDeclarations, tsParser.parseFiles());
|
|
141
|
+
mergeEventDefinitions(allEventDefinitions, tsParser.getEventDefinitions(), 'TS', spec.parserOptions.eventPrefix);
|
|
80
142
|
});
|
|
81
143
|
if (spec.parserOptions.eventPrefix !== '') {
|
|
82
144
|
declarations.events.dataPoints = declarations.events.dataPoints.map((event) => {
|
|
@@ -98,7 +160,9 @@ export async function extractAndResolveDeclarations(sourceSpecs: Array<SourceSpe
|
|
|
98
160
|
allDeclarations.commonProperties.properties = allDeclarations.commonProperties.properties.concat(declarations.commonProperties.properties);
|
|
99
161
|
allDeclarations.events.dataPoints = allDeclarations.events.dataPoints.concat(declarations.events.dataPoints);
|
|
100
162
|
Object.assign(allTypeScriptDeclarations, typescriptDeclarations);
|
|
163
|
+
mergeEventDefinitions(allEventDefinitions, parser.getEventDefinitions(), 'GDPR', spec.parserOptions.eventPrefix);
|
|
101
164
|
}
|
|
165
|
+
const hasDuplicateEventConflicts = reportDuplicateEventConflicts(allEventDefinitions);
|
|
102
166
|
const formattedDeclarations = await transformOutput(allDeclarations);
|
|
103
167
|
for (const dec in allTypeScriptDeclarations) {
|
|
104
168
|
// If there's typescript declarations but we returned a null object
|
|
@@ -108,7 +172,10 @@ export async function extractAndResolveDeclarations(sourceSpecs: Array<SourceSpe
|
|
|
108
172
|
}
|
|
109
173
|
formattedDeclarations.events[dec] = allTypeScriptDeclarations[dec];
|
|
110
174
|
}
|
|
111
|
-
validateOutputtedDeclarations(formattedDeclarations);
|
|
175
|
+
const hasPropertyValidationErrors = validateOutputtedDeclarations(formattedDeclarations);
|
|
176
|
+
if (hasDuplicateEventConflicts || hasPropertyValidationErrors || process.exitCode === 1) {
|
|
177
|
+
throw new Error('Validation failed, please see logs for more information');
|
|
178
|
+
}
|
|
112
179
|
return Promise.resolve(deepSortKeys(formattedDeclarations) as OutputtedDeclarations);
|
|
113
180
|
} catch (error) {
|
|
114
181
|
console.error(`Error: ${error}`);
|
package/src/lib/ts-parser.ts
CHANGED
|
@@ -9,6 +9,16 @@ import { makeExclusionsRelativeToSource } from "./operations";
|
|
|
9
9
|
import { Event, Metadata } from './events';
|
|
10
10
|
import { Property } from "./common-properties";
|
|
11
11
|
|
|
12
|
+
interface EventPropertySignature {
|
|
13
|
+
classification: string;
|
|
14
|
+
purpose: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface EventDefinition {
|
|
18
|
+
properties: Record<string, EventPropertySignature>;
|
|
19
|
+
location: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
12
22
|
function isMeasurement(type: Type) {
|
|
13
23
|
if (type.isNumber()) {
|
|
14
24
|
return true;
|
|
@@ -180,11 +190,13 @@ export class TsParser {
|
|
|
180
190
|
private applyEndpoints: boolean;
|
|
181
191
|
private lowerCaseEvents: boolean;
|
|
182
192
|
private project: Project;
|
|
193
|
+
private eventDefinitions: Map<string, EventDefinition[]>;
|
|
183
194
|
constructor(sourceDir: string, excludedDirs: string[], applyEndpoints: boolean, lowerCaseEvents: boolean) {
|
|
184
195
|
this.sourceDir = sourceDir;
|
|
185
196
|
this.excludedDirs = excludedDirs;
|
|
186
197
|
this.applyEndpoints = applyEndpoints;
|
|
187
198
|
this.lowerCaseEvents = lowerCaseEvents;
|
|
199
|
+
this.eventDefinitions = new Map();
|
|
188
200
|
// We search for a TS config as that allows the language service to handle weird imports
|
|
189
201
|
if (fs.existsSync(path.join(this.sourceDir, 'src/tsconfig.json'))) {
|
|
190
202
|
this.project = new Project({
|
|
@@ -226,6 +238,33 @@ export class TsParser {
|
|
|
226
238
|
}
|
|
227
239
|
}
|
|
228
240
|
|
|
241
|
+
public getEventDefinitions() {
|
|
242
|
+
const definitions = new Map<string, EventDefinition[]>();
|
|
243
|
+
for (const [eventName, entries] of this.eventDefinitions.entries()) {
|
|
244
|
+
definitions.set(eventName, [...entries]);
|
|
245
|
+
}
|
|
246
|
+
return definitions;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
private addEventDefinition(eventName: string, properties: Record<string, EventPropertySignature>, location: string) {
|
|
250
|
+
const existing = this.eventDefinitions.get(eventName) ?? [];
|
|
251
|
+
existing.push({ properties, location });
|
|
252
|
+
this.eventDefinitions.set(eventName, existing);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
private extractConflictProperties(eventProperties: Record<string, unknown>): Record<string, EventPropertySignature> {
|
|
256
|
+
const result: Record<string, EventPropertySignature> = {};
|
|
257
|
+
for (const [key, value] of Object.entries(eventProperties)) {
|
|
258
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
259
|
+
const obj = value as Record<string, unknown>;
|
|
260
|
+
if (typeof obj.classification === 'string' && typeof obj.purpose === 'string') {
|
|
261
|
+
result[key] = { classification: obj.classification, purpose: obj.purpose };
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
267
|
+
|
|
229
268
|
public parseFiles() {
|
|
230
269
|
let publicLogUse: Array<CallExpression> = [];
|
|
231
270
|
this.project.getSourceFiles().forEach((source) => {
|
|
@@ -269,6 +308,7 @@ export class TsParser {
|
|
|
269
308
|
created_event.properties.forEach((prop) => {
|
|
270
309
|
Object.assign(events[event_name], prop);
|
|
271
310
|
});
|
|
311
|
+
this.addEventDefinition(event_name, this.extractConflictProperties(events[event_name]), `${pl.getSourceFile().getFilePath()}:${pl.getStartLineNumber()}`);
|
|
272
312
|
const eventProperties = typeArgs[0].getType().getProperties();
|
|
273
313
|
// Find all eventProperties that have a number or boolean type
|
|
274
314
|
eventProperties.forEach((prop) => {
|
|
@@ -302,6 +342,7 @@ export class TsParser {
|
|
|
302
342
|
}
|
|
303
343
|
event_name = this.lowerCaseEvents ? event_name.toLowerCase() : event_name;
|
|
304
344
|
events[event_name] = {};
|
|
345
|
+
this.addEventDefinition(event_name, this.extractConflictProperties(events[event_name]), `${pl.getSourceFile().getFilePath()}:${pl.getStartLineNumber()}`);
|
|
305
346
|
}
|
|
306
347
|
});
|
|
307
348
|
return events;
|