UNPKG

roku-log-bsc-plugin

Version:
135 lines 8.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RokuLogPlugin = void 0; const brighterscript_1 = require("brighterscript"); const brighterscript = require("brighterscript"); const Utils_1 = require("./utils/Utils"); class RokuLogPlugin { constructor() { this.name = 'log-plugin'; this.rokuLogConfig = { strip: true, guard: false, insertPkgPath: true, removeComments: true }; } beforeProgramCreate(builder) { this.rokuLogConfig = Object.assign(Object.assign({}, this.rokuLogConfig), builder.options.rokuLog); } beforeProgramTranspile(program, entries) { for (let filePath in program.files) { let file = program.files[filePath]; //this isn't necessary in the file api, but keep here for legacy bsc versions file.needsTranspiled = true; } } beforeFileTranspile(event) { let visitedLineNumbers = {}; if (brighterscript.isBrsFile(event.file)) { const parser = event.file.parser; let logVisitor = brighterscript.createVisitor({ DottedSetStatement: (expressionStatement, parentNode, owner, key) => { if (!visitedLineNumbers[`${expressionStatement.range.start.line}`]) { if ((0, brighterscript_1.isNewExpression)(expressionStatement.value)) { let newExpression = expressionStatement.value; if (newExpression.className.getName(brighterscript_1.ParseMode.BrighterScript) === 'log.Logger') { let guardExpression = this.createGuardSetStatement(newExpression); event.editor.addToArray(owner, key + 1, guardExpression); } } visitedLineNumbers[`${expressionStatement.range.start.line}`] = true; } }, ExpressionStatement: (expressionStatement, parentNode, owner, key) => { if ((0, brighterscript_1.isCallExpression)(expressionStatement.expression)) { let callExpression = expressionStatement.expression; if (brighterscript.isDottedGetExpression(callExpression.callee) && brighterscript.isDottedGetExpression(callExpression.callee.obj) && callExpression.callee.obj.name.text === 'log' && brighterscript.isVariableExpression(callExpression.callee.obj.obj) && callExpression.callee.obj.obj.name.text === 'm') { if (!visitedLineNumbers[`${callExpression.range.start.line}`]) { try { if (this.rokuLogConfig.strip) { event.editor.overrideTranspileResult(callExpression, ''); } else { if (this.rokuLogConfig.insertPkgPath) { let funcName = callExpression.callee.name.text; if (funcName === 'info' || funcName === 'verbose' || funcName === 'error' || funcName === 'warn' || funcName === 'debug' || funcName === 'method') { const t = brighterscript.createToken(brighterscript.TokenKind.SourceLocationLiteral, '', callExpression.range); let sourceExpression = new brighterscript.SourceLiteralExpression(t); if (callExpression.args.length > 0) { event.editor.addToArray(callExpression.args, 0, sourceExpression); } else { event.editor.addToArray(callExpression.args, callExpression.args.length, sourceExpression); } } visitedLineNumbers[`${callExpression.range.start.line}`] = true; } if (this.rokuLogConfig.guard && (0, brighterscript_1.isExpressionStatement)(callExpression.parent)) { event.editor.setProperty(owner, key, this.createGuardStatement(callExpression)); } } } catch (e) { console.log(`Error parsing file: ${event.file.pkgPath} ${e.getMessage()}`); } } } } } }); for (let expr of parser.references.functionExpressions) { expr.body.walk(logVisitor, { walkMode: brighterscript.WalkMode.visitAllRecursive }); } for (let expr of parser.references.classStatements) { expr.walk(logVisitor, { walkMode: brighterscript.WalkMode.visitAllRecursive }); } for (let expr of parser.references.namespaceStatements) { expr.walk(logVisitor, { walkMode: brighterscript.WalkMode.visitAllRecursive }); } } } createGuardSetStatement(callExpression) { let nameIdentifier2 = (0, brighterscript_1.createIdentifier)('enabled', callExpression.range); let nameIdentifier = (0, brighterscript_1.createIdentifier)('log', callExpression.range); let objIdentifier = (0, brighterscript_1.createIdentifier)('m', callExpression.range); let obj = new brighterscript_1.VariableExpression(objIdentifier); let dottedGet = new brighterscript_1.DottedGetExpression(obj, nameIdentifier, brighterscript.createToken(brighterscript.TokenKind.Dot, '.', callExpression.range)); let dottedGet2 = new brighterscript_1.DottedGetExpression(dottedGet, nameIdentifier2, brighterscript.createToken(brighterscript.TokenKind.Dot, '.', callExpression.range)); let setNameIdentifier = (0, brighterscript_1.createIdentifier)('__le', callExpression.range); let setObjIdentifier = (0, brighterscript_1.createIdentifier)('m', callExpression.range); let setObj = new brighterscript_1.VariableExpression(setObjIdentifier); let dottedSet = new brighterscript_1.DottedSetStatement(setObj, setNameIdentifier, dottedGet2); return dottedSet; } createGuardStatement(callExpression) { let nameIdentifier = (0, brighterscript_1.createIdentifier)('__le', callExpression.range); let objIdentifier = (0, brighterscript_1.createIdentifier)('m', callExpression.range); let obj = new brighterscript_1.VariableExpression(objIdentifier); let dottedGet = new brighterscript_1.DottedGetExpression(obj, nameIdentifier, brighterscript.createToken(brighterscript.TokenKind.Dot, '.', callExpression.range)); let trueExpression = new brighterscript_1.LiteralExpression(brighterscript.createToken(brighterscript.TokenKind.True, 'true', callExpression.range)); let binaryExpression = new brighterscript_1.BinaryExpression(dottedGet, brighterscript.createToken(brighterscript.TokenKind.Equal, '=', callExpression.range), trueExpression); return (0, Utils_1.createIfStatement)(binaryExpression, [callExpression.parent]); } afterFileTranspile(event) { if (this.rokuLogConfig.removeComments) { let text = event.code; if (event.outputPath.endsWith('.xml')) { text = text.replace(/<!(--.*?--)?>/gim, ''); } else { text = text.replace(/^(?: *|\t*)('[^\n]*)/gim, ''); } event.code = text; } } } exports.RokuLogPlugin = RokuLogPlugin; exports.default = () => { return new RokuLogPlugin(); }; //# sourceMappingURL=plugin.js.map