roku-log-bsc-plugin
Version:
Visual studio plugin for roku logger
149 lines • 5.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.standardizePath = exports.getTokenText = exports.createVarExpression = exports.createIfStatement = exports.sanitizeBsJsonString = exports.changeClassMethodBody = exports.changeFunctionBody = exports.getFunctionBody = exports.makeASTFunction = exports.pad = exports.addSetItems = exports.getRegexMatchValue = exports.getRegexMatchesValues = exports.spliceString = void 0;
const brighterscript_1 = require("brighterscript");
// eslint-disable-next-line @typescript-eslint/no-duplicate-imports
const brighterscript = require("brighterscript");
const rokuDeploy = require("roku-deploy");
function spliceString(str, index, count, add) {
// We cannot pass negative indexes directly to the 2nd slicing operation.
if (index < 0) {
index = str.length + index;
if (index < 0) {
index = 0;
}
}
return str.slice(0, index) + (add || '') + str.slice(index + count);
}
exports.spliceString = spliceString;
function getRegexMatchesValues(input, regex, groupIndex) {
let values = [];
let matches;
// eslint-disable-next-line
while (matches = regex.exec(input)) {
values.push(matches[groupIndex]);
}
return values;
}
exports.getRegexMatchesValues = getRegexMatchesValues;
function getRegexMatchValue(input, regex, groupIndex) {
let matches;
// eslint-disable-next-line
while (matches = regex.exec(input)) {
if (matches.length > groupIndex) {
return matches[groupIndex];
}
}
return null;
}
exports.getRegexMatchValue = getRegexMatchValue;
function addSetItems(setA, setB) {
for (const elem of setB) {
setA.add(elem);
}
}
exports.addSetItems = addSetItems;
function pad(pad, str, padLeft) {
if (typeof str === 'undefined') {
return pad;
}
if (padLeft) {
return (pad + str).slice(-pad.length);
}
else {
return (str + pad).substring(0, pad.length);
}
}
exports.pad = pad;
function makeASTFunction(source) {
let tokens = brighterscript.Lexer.scan(source).tokens;
let { statements } = brighterscript.Parser.parse(tokens, { mode: brighterscript.ParseMode.BrighterScript });
if (statements && statements.length > 0) {
return statements[0];
}
return undefined;
}
exports.makeASTFunction = makeASTFunction;
function getFunctionBody(source) {
let funcStatement = makeASTFunction(source);
return funcStatement ? funcStatement.func.body.statements : [];
}
exports.getFunctionBody = getFunctionBody;
function changeFunctionBody(statement, source) {
let statements = statement.func.body.statements;
statements.splice(0, statements.length);
let newStatements = (typeof source === 'string') ? getFunctionBody(source) : source;
for (let newStatement of newStatements) {
statements.push(newStatement);
}
}
exports.changeFunctionBody = changeFunctionBody;
function changeClassMethodBody(target, name, source) {
let method = target.methods.find((m) => m.name.text === name);
if (brighterscript.isClassMethodStatement(method)) {
changeFunctionBody(method, source);
return true;
}
return false;
}
exports.changeClassMethodBody = changeClassMethodBody;
function sanitizeBsJsonString(text) {
return `"${text ? text.replace(/"/g, '\'') : ''}"`;
}
exports.sanitizeBsJsonString = sanitizeBsJsonString;
function createIfStatement(condition, statements) {
let ifToken = brighterscript.createToken(brighterscript.TokenKind.If, 'if', brighterscript.Range.create(1, 1, 1, 999999));
let thenBranch = new brighterscript.Block(statements, brighterscript.Range.create(1, 1, 1, 1));
return new brighterscript.IfStatement({ if: ifToken, then: brighterscript.createToken(brighterscript.TokenKind.Then, '', brighterscript.Range.create(1, 1, 1, 999999)) }, condition, thenBranch);
}
exports.createIfStatement = createIfStatement;
function createVarExpression(varName, operator, value) {
let v = brighterscript.createStringLiteral(value, brighterscript.Range.create(1, 1, 1, 999999));
let variable = (0, brighterscript_1.createVariableExpression)(varName, brighterscript.Range.create(1, 1, 1, 999999));
let t = brighterscript.createToken(operator, getTokenText(operator), brighterscript.Range.create(1, 1, 1, 999999));
return new brighterscript.BinaryExpression(variable, t, v);
}
exports.createVarExpression = createVarExpression;
function getTokenText(operator) {
switch (operator) {
case brighterscript.TokenKind.Equal:
return '=';
case brighterscript.TokenKind.Plus:
return '+';
case brighterscript.TokenKind.Minus:
return '-';
case brighterscript.TokenKind.Less:
return '<';
case brighterscript.TokenKind.Greater:
return '>';
default:
return '';
}
}
exports.getTokenText = getTokenText;
/**
* A tagged template literal function for standardizing the path. This has to be defined as standalone function since it's a tagged template literal function,
* we can't use `object.tag` syntax.
*/
function standardizePath(stringParts, ...expressions) {
let result = [];
for (let i = 0; i < stringParts.length; i++) {
result.push(stringParts[i], expressions[i]);
}
return driveLetterToLower(rokuDeploy.standardizePath(result.join('')));
}
exports.standardizePath = standardizePath;
function driveLetterToLower(fullPath) {
if (fullPath) {
let firstCharCode = fullPath.charCodeAt(0);
if (
//is upper case A-Z
firstCharCode >= 65 && firstCharCode <= 90 &&
//next char is colon
fullPath[1] === ':') {
fullPath = fullPath[0].toLowerCase() + fullPath.substring(1);
}
}
return fullPath;
}
//# sourceMappingURL=Utils.js.map