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
JavaScript
#!/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;
}