sol-merger
Version:
Merges all import files into single file.
375 lines • 14.2 kB
JavaScript
"use strict";
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _SolidityExportVisitor_inputContent, _SolidityExportVisitor_antlrTree, _SolidityExportVisitor_comments, _ExportVisitor_onVisit;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SolidityExportVisitor = void 0;
const antlr4ts_1 = require("antlr4ts");
const ParseTreeWalker_1 = require("antlr4ts/tree/ParseTreeWalker");
const types_1 = require("../../types");
const SolidityLexer_1 = require("../generated/SolidityLexer");
const SolidityParser_1 = require("../generated/SolidityParser");
const HIDDEN_CHANNEL = 1;
class SolidityExportVisitor {
constructor(inputContent) {
_SolidityExportVisitor_inputContent.set(this, void 0);
_SolidityExportVisitor_antlrTree.set(this, void 0);
_SolidityExportVisitor_comments.set(this, []);
__classPrivateFieldSet(this, _SolidityExportVisitor_inputContent, inputContent, "f");
const chars = antlr4ts_1.CharStreams.fromString(__classPrivateFieldGet(this, _SolidityExportVisitor_inputContent, "f"));
const lexer = new SolidityLexer_1.SolidityLexer(chars);
const tokens = new antlr4ts_1.CommonTokenStream(lexer);
const parser = new SolidityParser_1.SolidityParser(tokens);
__classPrivateFieldSet(this, _SolidityExportVisitor_antlrTree, parser.sourceUnit(), "f");
__classPrivateFieldSet(this, _SolidityExportVisitor_comments, tokens
.getRange(0, tokens.size)
.filter((t) => t.channel === HIDDEN_CHANNEL), "f");
}
visit(onVisit) {
const listener = new ExportVisitor((visitResult) => {
this.onVisit(visitResult, onVisit);
});
ParseTreeWalker_1.ParseTreeWalker.DEFAULT.walk(listener, __classPrivateFieldGet(this, _SolidityExportVisitor_antlrTree, "f"));
this.flushComments(onVisit);
}
onVisit(visitResult, onVisit) {
if (!__classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f").length) {
return onVisit(visitResult);
}
this.emitCommentsBefore(visitResult, onVisit);
onVisit(visitResult);
}
emitCommentsBefore(visitResult, onVisit) {
while (__classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f").length &&
__classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f")[0].startIndex < visitResult.start) {
const comment = __classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f").shift();
if (!comment) {
continue;
}
onVisit(this.buildComment(comment));
}
while (__classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f").length &&
__classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f")[0].stopIndex < visitResult.end) {
__classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f").shift();
}
}
flushComments(onVisit) {
if (!__classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f").length) {
return;
}
__classPrivateFieldGet(this, _SolidityExportVisitor_comments, "f").forEach((comment) => onVisit(this.buildComment(comment)));
}
buildComment(comment) {
return {
abstract: false,
body: {
start: comment.startIndex,
end: comment.stopIndex,
},
start: comment.startIndex,
end: comment.stopIndex,
is: null,
name: `Comment#${comment.startIndex}`,
type: types_1.ExportType.comment,
};
}
}
exports.SolidityExportVisitor = SolidityExportVisitor;
_SolidityExportVisitor_inputContent = new WeakMap(), _SolidityExportVisitor_antlrTree = new WeakMap(), _SolidityExportVisitor_comments = new WeakMap();
class ExportVisitor {
constructor(onVisit) {
_ExportVisitor_onVisit.set(this, void 0);
__classPrivateFieldSet(this, _ExportVisitor_onVisit, onVisit, "f");
}
enterContractDefinition(ctx) {
var _a, _b, _c, _d;
if (!ctx.stop) {
return;
}
if (!ctx.children) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const abstract = ctx.Abstract() !== undefined;
const name = ctx.identifier();
const inheritance = ctx.getRuleContexts(SolidityParser_1.InheritanceSpecifierListContext);
const bodyStart = inheritance.length
? (_a = inheritance[inheritance.length - 1].stop) === null || _a === void 0 ? void 0 : _a.stopIndex
: (_b = name.stop) === null || _b === void 0 ? void 0 : _b.stopIndex;
const isStart = inheritance.length ? (_c = name.stop) === null || _c === void 0 ? void 0 : _c.stopIndex : null;
const isEnd = inheritance.length
? (_d = inheritance[inheritance.length - 1].stop) === null || _d === void 0 ? void 0 : _d.stopIndex
: null;
const is = isStart && isEnd ? { start: isStart + 1, end: isEnd + 1 } : null;
if (!bodyStart) {
return;
}
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
start,
end,
abstract,
type: types_1.ExportType.contract,
body: {
start: bodyStart + 1,
end,
},
is: is,
name: name.text,
});
}
enterStructDefinition(ctx) {
if (!(ctx.parent instanceof SolidityParser_1.SourceUnitContext)) {
return;
}
if (!ctx.stop) {
return;
}
if (!ctx.children) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const name = ctx.identifier();
if (!(name === null || name === void 0 ? void 0 : name.stop)) {
return;
}
const bodyStart = name.stop.stopIndex;
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
start,
end,
abstract: false,
type: types_1.ExportType.struct,
body: {
start: bodyStart + 1,
end,
},
is: null,
name: name.text,
});
}
enterEnumDefinition(ctx) {
if (!(ctx.parent instanceof SolidityParser_1.SourceUnitContext)) {
return;
}
if (!ctx.stop) {
return;
}
if (!ctx.children) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const names = ctx.identifier();
const name = names[0];
if (!(name === null || name === void 0 ? void 0 : name.stop)) {
return;
}
const bodyStart = name.stop.stopIndex;
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
start,
end,
abstract: false,
type: types_1.ExportType.enum,
body: {
start: bodyStart + 1,
end,
},
is: null,
name: name.text,
});
}
enterLibraryDefinition(ctx) {
var _a;
if (!ctx.stop) {
return;
}
if (!ctx.children) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const type = ctx.children[0].text;
const name = ctx.identifier();
const bodyStart = (_a = name.stop) === null || _a === void 0 ? void 0 : _a.stopIndex;
if (!bodyStart) {
return;
}
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
start,
end,
abstract: false,
type,
body: {
start: bodyStart + 1,
end,
},
is: null,
name: name.text,
});
}
enterInterfaceDefinition(ctx) {
var _a, _b, _c, _d;
if (!ctx.stop) {
return;
}
if (!ctx.children) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const name = ctx.identifier();
const inheritance = ctx.getRuleContexts(SolidityParser_1.InheritanceSpecifierListContext);
const bodyStart = inheritance.length
? (_a = inheritance[inheritance.length - 1].stop) === null || _a === void 0 ? void 0 : _a.stopIndex
: (_b = name.stop) === null || _b === void 0 ? void 0 : _b.stopIndex;
const isStart = inheritance.length ? (_c = name.stop) === null || _c === void 0 ? void 0 : _c.stopIndex : null;
const isEnd = inheritance.length
? (_d = inheritance[inheritance.length - 1].stop) === null || _d === void 0 ? void 0 : _d.stopIndex
: null;
const is = isStart && isEnd ? { start: isStart + 1, end: isEnd + 1 } : null;
if (!bodyStart) {
return;
}
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
start,
end,
abstract: false,
type: types_1.ExportType.interface,
body: {
start: bodyStart + 1,
end,
},
is: is,
name: name.text,
});
}
enterErrorDefinition(ctx) {
if (!(ctx.parent instanceof SolidityParser_1.SourceUnitContext)) {
return;
}
if (!ctx.stop) {
return;
}
if (!ctx.children) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const name = ctx.identifier();
if (!(name === null || name === void 0 ? void 0 : name.stop)) {
return;
}
const bodyStart = name.stop.stopIndex;
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
start,
end,
abstract: false,
type: types_1.ExportType.error,
body: {
start: bodyStart + 1,
end,
},
is: null,
name: name.text,
});
}
enterConstantVariableDeclaration(ctx) {
if (!(ctx.parent instanceof SolidityParser_1.SourceUnitContext)) {
return;
}
if (!ctx.stop) {
return;
}
if (!ctx.children) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const name = ctx.identifier();
const typeName = ctx.typeName();
if (!name.stop) {
return;
}
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
type: types_1.ExportType.constant,
body: {
start: name.stop.stopIndex + 1,
end: ctx.stop.stopIndex,
},
start,
end,
name: name.text,
typeName: typeName.text,
});
}
enterFunctionDefinition(ctx) {
if (!(ctx.parent instanceof SolidityParser_1.SourceUnitContext)) {
return;
}
if (!ctx.stop) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const name = ctx.identifier();
if (!(name === null || name === void 0 ? void 0 : name.stop)) {
return;
}
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
type: types_1.ExportType.function,
start,
end,
name: name.text,
});
}
enterUserDefinedValueTypeDefinition(ctx) {
if (!(ctx.parent instanceof SolidityParser_1.SourceUnitContext)) {
return;
}
if (!ctx.stop) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const name = ctx.identifier();
if (!(name === null || name === void 0 ? void 0 : name.stop)) {
return;
}
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
type: types_1.ExportType.userDefinedValueType,
start,
end,
name: name.text,
});
}
enterUsingDirective(ctx) {
if (!(ctx.parent instanceof SolidityParser_1.SourceUnitContext)) {
return;
}
if (!ctx.stop) {
return;
}
const start = ctx.start.startIndex;
const end = ctx.stop.stopIndex;
const names = ctx.identifierPath();
const name = names.map((n) => n.text).join(',') + `$${types_1.ExportType.usingDirective}`;
__classPrivateFieldGet(this, _ExportVisitor_onVisit, "f").call(this, {
type: types_1.ExportType.usingDirective,
start,
end,
name,
});
}
}
_ExportVisitor_onVisit = new WeakMap();
//# sourceMappingURL=exportVisitor.js.map