UNPKG

maestro-cli-roku

Version:

command line tools for maestro-roku projects

142 lines (141 loc) 9.96 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var fs = require("fs-extra"); var path = require("path"); var makeDir = require('make-dir'); var CreateViewCommand = /** @class */ (function () { function CreateViewCommand() { } CreateViewCommand.prototype.execute = function (sourcePath, name, hasVM, hasTest, baseView, baseVM, subfolder) { if (hasVM === void 0) { hasVM = true; } if (hasTest === void 0) { hasTest = true; } if (baseView === void 0) { baseView = 'BaseScreen'; } if (baseVM === void 0) { baseVM = 'BaseViewModel'; } if (subfolder === void 0) { subfolder = 'screens'; } return __awaiter(this, void 0, void 0, function () { var e_1; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 5, , 6]); //create all folders return [4 /*yield*/, makeDir(path.join(sourcePath, "components/" + subfolder))]; case 1: //create all folders _a.sent(); if (!hasVM) return [3 /*break*/, 4]; return [4 /*yield*/, makeDir(path.join(sourcePath, "source/viewModels/" + subfolder))]; case 2: _a.sent(); if (!hasTest) return [3 /*break*/, 4]; return [4 /*yield*/, makeDir(path.join(sourcePath, "source/tests/viewModels/" + subfolder))]; case 3: _a.sent(); _a.label = 4; case 4: this.createXMLFile(name, sourcePath, subfolder, baseView); this.createCodeBehindFile(name, sourcePath, subfolder, hasVM); if (hasVM) { this.createViewModel(name, sourcePath, subfolder, baseVM); if (hasTest) { this.createTest(name, sourcePath, subfolder); } } return [3 /*break*/, 6]; case 5: e_1 = _a.sent(); console.error("Could not create view!\n targetPath: " + sourcePath + "\n error " + e_1.message); return [2 /*return*/, false]; case 6: return [2 /*return*/, true]; } }); }); }; CreateViewCommand.prototype.createXMLFile = function (name, sourcePath, subfolder, baseView) { var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<component\n name=\"" + name + "\"\n extends=\"" + baseView + "\">\n <interface>\n\n </interface>\n\n <children>\n\n </children>\n\n</component>\n"; fs.writeFileSync(path.join(sourcePath, "components/" + subfolder + "/" + name + ".xml"), xml, 'utf8'); }; CreateViewCommand.prototype.createCodeBehindFile = function (name, sourcePath, subfolder, hasVM) { var bs = "\nimport \"pkg:/source/rLog/rLogMixin.bs\"\nimport \"pkg:/source/maestro/observable/ObservableMixin.bs\"\nimport \"pkg:/source/maestro/view/viewModel/ViewModelMixin.bs\"\n"; if (hasVM) { bs += "import \"pkg:/source/viewModels/" + subfolder + "/" + name + "VM.bs\"\n"; } bs += "\nfunction Init()\n registerLogger(\"" + name + "\")\nend function\n\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n'++ binding callbacks\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n'++ Lifecycle methods\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\nfunction _initialize(args)\n"; if (hasVM) { bs += "\n m.vm = " + name + "VM()\n m.vm.initialize()\n MVMM.initializeBindings(true)\n "; } bs += "\nend function\n"; if (hasVM) { bs += "\nfunction onGainedFocus(isSelfFocused)\n if isSelfFocused\n MVMM.onFocusIdChange(m.vm.focusId)\n end if\nend function\n"; } fs.writeFileSync(path.join(sourcePath, "components/" + subfolder + "/" + name + ".bs"), bs, 'utf8'); }; CreateViewCommand.prototype.createViewModel = function (name, sourcePath, subfolder, baseVM) { var namespace = name.replace(/[a-z]/g, ''); var vm = "import \"pkg:/source/maestro/view/viewModel/BaseViewModel.bs\"\n\nnamespace " + namespace + "VM\nclass " + name + "VM extends " + baseVM + "\n\npublic focusId = \"\"\npublic focusedIndex = -1\n\npublic function new()\n m.super(\"" + name + "VM\")\n m.focusIds = [\n ]\nend function\n\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n'++ Public api\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n'++ Private impl\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n'++ Key Handling\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n'++ Lifecycle methods\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\nend class\nend namespace"; fs.writeFileSync(path.join(sourcePath, "source/viewModels/" + subfolder + "/" + name + "VM.bs"), vm, 'utf8'); }; CreateViewCommand.prototype.createTest = function (name, sourcePath, subfolder) { var namespace = name.replace(/[a-z]/g, ''); var vm = "'@TestSuite " + name + "VMTests\nimport \"pkg:/source/maestro/view/viewModel/BaseViewModel.bs\"\n\nnamespace " + namespace + "VMT\n\n'@BeforeEach\nfunction beforeEach()\nend function\n\n'@AfterEach\nfunction afterEach()\nend function\n\nend namespace"; fs.writeFileSync(path.join(sourcePath, "source/tests/viewModels/" + subfolder + "/" + name + "VMTests.bs"), vm, 'utf8'); }; return CreateViewCommand; }()); exports.CreateViewCommand = CreateViewCommand; function addCreateViewCommand(program) { program .command('createView <sourcePath> <name>') .alias('cv') .option('-b, --baseView [type]', "type of view component to extend - default BaseScreen") .option('-v, --hasVM [true|false]', "if true, adds a viewModel for this view") .option('-t, --hasTest [true|false]', "if true, adds a test for the view model") .option('-B, --baseVM [type]', "type of viewModel to extend - default BaseViewModel") .option('-s, --subfolder [path]', "view subfolder to use - default xxxx/view/screen, i.e. sourcePath/components/view/screen, or sourcePath/source/tests/view/screen") .description("\n Creates a view, and associated files, relative to the default folders in your project, which are: source/components/view/screen\n") .action(function (sourcePath, name, options) { var hasVM = options.hasVM || true; var hasTest = options.hasTest || true; var baseView = options.baseView || 'BaseScreen'; var baseVM = options.baseVM || 'BaseViewModel'; var subfolder = options.subfolder || 'screens'; new CreateViewCommand().execute(sourcePath, name, hasVM, hasTest, baseView, baseVM, subfolder); }); } exports.addCreateViewCommand = addCreateViewCommand;