UNPKG

pcf-start

Version:

This package contains a module for locally hosting PowerApps Component Framework (PCF) controls. See project homepage how to install.

87 lines (86 loc) 3.3 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // Copyright (C) Microsoft Corporation. All rights reserved. const apptelemetryclient_1 = require("../generated/telemetry/apptelemetryclient"); const PackageVersionUtils_1 = require("../generated/PackageVersionUtils"); const pp_tooling_telemetry_node_1 = require("../generated/pp-tooling-telemetry-node"); const path = require("node:path"); const fs = require("node:fs"); const yargs_1 = require("yargs"); const browser_sync_1 = require("browser-sync"); const bs = (0, browser_sync_1.create)(); Run(); function Run() { const telemetryEnv = pp_tooling_telemetry_node_1.AppTelemetryConfigUtility.createGlobalTelemetryEnvironment(); const version = (0, PackageVersionUtils_1.getPackageVersion)("pcf-start", process.cwd()) || "0.0.1"; const telemetryClient = (0, apptelemetryclient_1.setupAppInsightsAndClient)("pcf-start", version, telemetryEnv); console.log(`\nStarting control harness...`); const startTime = Date.now(); const sessionStartProperties = { ...pp_tooling_telemetry_node_1.AppTelemetryUtility.createCommonAppStartProperties(telemetryEnv), }; let argumentNamesCsv = ""; if (yargs_1.argv.watch) { argumentNamesCsv += ",watch"; } if (yargs_1.argv.codePath) { argumentNamesCsv += ",codePath"; } if (argumentNamesCsv) { sessionStartProperties["argumentNamesCsv"] = argumentNamesCsv.substring(1); // trim off start comma } let resultCode = 0; try { telemetryClient.trackEvent({ name: apptelemetryclient_1.TelemetryEvent[apptelemetryclient_1.TelemetryEvent.Start], properties: { ...sessionStartProperties }, }); resultCode = RunTask(); } catch (e) { resultCode = 500; console.error(`[pcf-start] [Error] encountered unexpected error:\n${e}`); telemetryClient.trackException({ exception: e, properties: { trackedAtMemberName: "Run" } }); } finally { const isSuccessful = resultCode === 200; process.exitCode = isSuccessful ? 0 : 1; telemetryClient.trackEvent({ name: apptelemetryclient_1.TelemetryEvent[apptelemetryclient_1.TelemetryEvent.End] }); telemetryClient.trackRequest({ name: "Session", url: "", duration: Date.now() - startTime, resultCode: resultCode, success: isSuccessful, properties: { ...sessionStartProperties }, }); telemetryClient.flush(); } } function RunTask() { let codePath = yargs_1.argv.codePath; // default to cwd if not specified if (!codePath || codePath === true) { codePath = "."; } else if (!fs.existsSync(path.resolve(process.cwd(), codePath))) { console.error(`The specified codePath '${codePath}' does not exist.`); return 400; } // Start server bs.init({ online: false, port: 8181, reloadDelay: 1000, server: { baseDir: path.resolve(process.cwd(), codePath), routes: { "/": path.join(__dirname, "../"), }, }, ui: false, watch: true, // node_modules ignored automatically }); return 200; }