UNPKG

9.69 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const ts = require("typescript");
4class ApiRegistry {
5 constructor() {
6 this.registry = new Map();
7 this.ExtractedData = {};
8 this.IsDataExtracted = false;
9 this.declarationsToIdsMap = new WeakMap();
10 this.counters = new Map();
11 }
12 Extract(forceExtract = false) {
13 if (this.IsDataExtracted && !forceExtract) {
14 return this.ExtractedData;
15 }
16 for (const item of this.Registry) {
17 const [key, apiItem] = item;
18 const extractedData = apiItem.Extract(forceExtract);
19 this.ExtractedData[key] = extractedData;
20 }
21 this.IsDataExtracted = true;
22 return this.ExtractedData;
23 }
24 get Registry() {
25 return this.registry;
26 }
27 GetNextDeclarationId(declaration) {
28 if (declaration == null) {
29 return undefined;
30 }
31 // Get string syntax kind
32 const syntaxKind = ts.SyntaxKind[declaration.kind];
33 let index;
34 if (this.counters.has(syntaxKind)) {
35 const oldIndex = this.counters.get(syntaxKind);
36 index = oldIndex + 1;
37 }
38 else {
39 index = 0;
40 }
41 this.counters.set(syntaxKind, index);
42 return `${syntaxKind}-${index}`;
43 }
44 GetDeclarationId(declaration) {
45 return this.declarationsToIdsMap.get(declaration);
46 }
47 HasDeclaration(declaration) {
48 const declarationId = this.GetDeclarationId(declaration);
49 return declarationId != null && this.registry.has(declarationId);
50 }
51 Get(id) {
52 if (id == null) {
53 return undefined;
54 }
55 return this.registry.get(id);
56 }
57 AddItem(item) {
58 const declarationId = this.GetNextDeclarationId(item.Declaration);
59 if (declarationId == null) {
60 throw new Error(`Declaration id should always be deterministic.`);
61 }
62 if (!this.registry.has(declarationId)) {
63 this.registry.set(declarationId, item);
64 this.declarationsToIdsMap.set(item.Declaration, declarationId);
65 this.IsDataExtracted = false;
66 }
67 item.GatherData();
68 return declarationId;
69 }
70}
71exports.ApiRegistry = ApiRegistry;
72//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS1yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFpQztBQVFqQztJQUFBO1FBQ2MsYUFBUSxHQUF5QixJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQUU1RCxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFDekMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFzQm5DLHlCQUFvQixHQUFvQyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUM5RixhQUFRLEdBQXdCLElBQUksR0FBRyxFQUFrQixDQUFDO0lBdUR0RSxDQUFDO0lBNUVVLE9BQU8sQ0FBQyxlQUF3QixLQUFLO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzlCLENBQUM7UUFFRCxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1QixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXBELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBMkIsQ0FBQztRQUMxRCxDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBd0MsQ0FBQztJQUN6RCxDQUFDO0lBS1Msb0JBQW9CLENBQUMsV0FBdUM7UUFDbEUsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5ELElBQUksS0FBYSxDQUFDO1FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQztZQUNoRCxLQUFLLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxVQUFVLElBQUksS0FBSyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFdBQTJCO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxjQUFjLENBQUMsV0FBMkI7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxhQUFhLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxHQUFHLENBQUMsRUFBVTtRQUNqQixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNiLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDckIsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sT0FBTyxDQUFDLElBQWE7UUFDeEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsRSxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ3pCLENBQUM7Q0FDSjtBQWxGRCxrQ0FrRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgQXBpSXRlbSB9IGZyb20gXCIuL2Fic3RyYWN0aW9ucy9hcGktaXRlbVwiO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuL2NvbnRyYWN0cy9kaWN0aW9uYXJ5XCI7XG5pbXBvcnQgeyBSZWdpc3RyeSB9IGZyb20gXCIuL2NvbnRyYWN0cy9yZWdpc3RyeVwiO1xuaW1wb3J0IHsgQXBpSXRlbUR0byB9IGZyb20gXCIuL2NvbnRyYWN0cy9hcGktaXRlbS1kdG9cIjtcblxuZXhwb3J0IHR5cGUgRXh0cmFjdGVkQXBpUmVnaXN0cnkgPSBEaWN0aW9uYXJ5PEFwaUl0ZW1EdG8+O1xuXG5leHBvcnQgY2xhc3MgQXBpUmVnaXN0cnkgaW1wbGVtZW50cyBSZWdpc3RyeTxBcGlJdGVtPiB7XG4gICAgcHJvdGVjdGVkIHJlZ2lzdHJ5OiBNYXA8c3RyaW5nLCBBcGlJdGVtPiA9IG5ldyBNYXA8c3RyaW5nLCBBcGlJdGVtPigpO1xuXG4gICAgcHJvdGVjdGVkIEV4dHJhY3RlZERhdGE6IEV4dHJhY3RlZEFwaVJlZ2lzdHJ5ID0ge307XG4gICAgcHJvdGVjdGVkIElzRGF0YUV4dHJhY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIEV4dHJhY3QoZm9yY2VFeHRyYWN0OiBib29sZWFuID0gZmFsc2UpOiBFeHRyYWN0ZWRBcGlSZWdpc3RyeSB7XG4gICAgICAgIGlmICh0aGlzLklzRGF0YUV4dHJhY3RlZCAmJiAhZm9yY2VFeHRyYWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FeHRyYWN0ZWREYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuUmVnaXN0cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIGFwaUl0ZW1dID0gaXRlbTtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZERhdGEgPSBhcGlJdGVtLkV4dHJhY3QoZm9yY2VFeHRyYWN0KTtcblxuICAgICAgICAgICAgdGhpcy5FeHRyYWN0ZWREYXRhW2tleV0gPSBleHRyYWN0ZWREYXRhIGFzIEFwaUl0ZW1EdG87XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLklzRGF0YUV4dHJhY3RlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLkV4dHJhY3RlZERhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBSZWdpc3RyeSgpOiBSZWFkb25seU1hcDxzdHJpbmcsIEFwaUl0ZW0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkgYXMgUmVhZG9ubHlNYXA8c3RyaW5nLCBBcGlJdGVtPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlY2xhcmF0aW9uc1RvSWRzTWFwOiBXZWFrTWFwPHRzLkRlY2xhcmF0aW9uLCBzdHJpbmc+ID0gbmV3IFdlYWtNYXA8dHMuRGVjbGFyYXRpb24sIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGNvdW50ZXJzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIHByb3RlY3RlZCBHZXROZXh0RGVjbGFyYXRpb25JZChkZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb24gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBzdHJpbmcgc3ludGF4IGtpbmRcbiAgICAgICAgY29uc3Qgc3ludGF4S2luZCA9IHRzLlN5bnRheEtpbmRbZGVjbGFyYXRpb24ua2luZF07XG5cbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXI7XG4gICAgICAgIGlmICh0aGlzLmNvdW50ZXJzLmhhcyhzeW50YXhLaW5kKSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkSW5kZXggPSB0aGlzLmNvdW50ZXJzLmdldChzeW50YXhLaW5kKSE7XG4gICAgICAgICAgICBpbmRleCA9IG9sZEluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY291bnRlcnMuc2V0KHN5bnRheEtpbmQsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGAke3N5bnRheEtpbmR9LSR7aW5kZXh9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0RGVjbGFyYXRpb25JZChkZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnNUb0lkc01hcC5nZXQoZGVjbGFyYXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBIYXNEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb24pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb25JZCA9IHRoaXMuR2V0RGVjbGFyYXRpb25JZChkZWNsYXJhdGlvbik7XG4gICAgICAgIHJldHVybiBkZWNsYXJhdGlvbklkICE9IG51bGwgJiYgdGhpcy5yZWdpc3RyeS5oYXMoZGVjbGFyYXRpb25JZCk7XG4gICAgfVxuXG4gICAgcHVibGljIEdldChpZDogc3RyaW5nKTogQXBpSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIEFkZEl0ZW0oaXRlbTogQXBpSXRlbSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uSWQgPSB0aGlzLkdldE5leHREZWNsYXJhdGlvbklkKGl0ZW0uRGVjbGFyYXRpb24pO1xuXG4gICAgICAgIGlmIChkZWNsYXJhdGlvbklkID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVjbGFyYXRpb24gaWQgc2hvdWxkIGFsd2F5cyBiZSBkZXRlcm1pbmlzdGljLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlZ2lzdHJ5LmhhcyhkZWNsYXJhdGlvbklkKSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RyeS5zZXQoZGVjbGFyYXRpb25JZCwgaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9uc1RvSWRzTWFwLnNldChpdGVtLkRlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbklkKTtcbiAgICAgICAgICAgIHRoaXMuSXNEYXRhRXh0cmFjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtLkdhdGhlckRhdGEoKTtcblxuICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25JZDtcbiAgICB9XG59XG4iXX0=
\No newline at end of file