UNPKG

roku-log-bsc-plugin

Version:
149 lines 5.9 kB
"use strict"; 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