@amplitude/ampli
Version:
Amplitude CLI
48 lines (47 loc) • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const base_1 = require("../base");
const string_1 = require("../../util/string");
const strip_1 = require("../../parser/strip");
const swift_1 = require("../../parser/swift");
const rowColumnInfo_1 = require("../../parser/rowColumnInfo");
class SwiftVerifierV1 extends base_1.Verifier {
constructor(ampliInstanceNames = ['Itly.instance', 'itly'], fileExtensionPattern = 'swift') {
super(fileExtensionPattern, ampliInstanceNames.map(name => `${name}.`), null);
this.ampliInstanceNames = ampliInstanceNames;
this.includeEventClassConstructorsInVerifierResults = () => false;
}
async doVerify(eventNames, workingDirs) {
const eventClassNames = eventNames.map(e => string_1.upperCamelCase(e));
return this.verifyEach((filePath, fileContent, addReference) => {
const content = strip_1.default(new swift_1.default(fileContent));
const rowColumnInfo = new rowColumnInfo_1.default(content);
this.ampliInstanceNames.forEach(instanceName => {
eventNames.forEach(eventName => {
const referenceName = this.getReferenceName(eventName);
const instanceNameRegexp = lodash_1.escapeRegExp(`${instanceName}.`)
.replace(/\\\./g, '\\s*\\.');
const trackRegExp = new RegExp(`\\b${instanceNameRegexp}${referenceName}\\s*\\(`, 'gu');
let match;
while ((match = trackRegExp.exec(content)) !== null) {
const { row, column } = rowColumnInfo.atIndex(match.index);
addReference({ filePath, row, column, name: referenceName });
}
});
});
if (this.includeEventClassConstructorsInVerifierResults()) {
eventNames.forEach((eventName, eventIndex) => {
const eventClassName = eventClassNames[eventIndex];
const eventConstructorRegExp = new RegExp(`\\b${eventClassName}\\s*\\(`, 'gu');
let match;
while ((match = eventConstructorRegExp.exec(content)) !== null) {
const { row, column } = rowColumnInfo.atIndex(match.index);
addReference({ filePath, row, column, name: this.getReferenceName(eventName) });
}
});
}
}, workingDirs);
}
}
exports.default = SwiftVerifierV1;