@nova-ui/bits
Version:
SolarWinds Nova Framework
126 lines • 20 kB
JavaScript
import { ANGULAR_JSON } from "../live-example-files/angular.json";
import { APP_COMPONENT } from "../live-example-files/app.component";
import { APP_MODULE } from "../live-example-files/app.module";
import { INDEX } from "../live-example-files/index.html";
import { MAIN } from "../live-example-files/main";
import { PACKAGE_JSON } from "../live-example-files/package.json";
import { POLYFILLS } from "../live-example-files/polyfills";
import { TSCONFIG_JSON } from "../live-example-files/tsconfig.json";
export const createAngularApp = (filenamePrefix, context, sources, packageJson, packageJsonLib, latestNovaVersion) => {
let files = {
"src/index.html": {
content: getIndex(filenamePrefix),
},
"src/main.ts": {
content: getMainFile(),
},
"src/polyfills.ts": {
content: getPolyfills(),
},
"src/styles.less": {
content: getStyles(),
},
"angular.json": {
content: getAngular(),
},
"package.json": {
content: getPackage(packageJson, latestNovaVersion),
},
"src/app/app.module.ts": {
content: getAppModule(sources, filenamePrefix, context, packageJsonLib),
},
"src/app/app.component.ts": {
content: getAppComponent(),
},
"tsconfig.json": {
content: getTSConfig(),
},
};
sources
.forEach((source) => {
files = Object.assign(files, {
[`src/app/${source.filePath}`]: { content: source.fileContent },
});
});
return { files: files };
};
export const getMainFile = () => MAIN;
export const getIndex = (componentSelector) => INDEX.replace("${componentSelector}", componentSelector);
export const getAppModule = (sources, filenamePrefix, context, packageJson) => {
const mainComponentName = getMainComponentName(sources, filenamePrefix);
const componentNames = sources && sources
.filter((source) => source.fileType === "ts")
.map((source) => getComponentName(source))
.join(",");
const imports = sources
.filter((source) => source.fileType === "ts")
.filter((source) => source.fileName !== `routes.ts`)
.map((source) => `import { ${getComponentName(source)} } from "./${source.filePath.slice(0, -source.fileType.length - 1)}"`)
.join("\n");
const libPackage = packageJson.name;
const chartsImport = libPackage === "@nova-ui/charts";
const dashboardsImport = libPackage === "@nova-ui/dashboards";
const customRoutes = !!sources.find((source) => source.fileName === "routes.ts");
return APP_MODULE(filenamePrefix, context, imports, mainComponentName, componentNames, customRoutes, chartsImport, dashboardsImport);
};
export const getStyles = () => ``;
export const getAngular = () => ANGULAR_JSON;
export const getTSConfig = () => TSCONFIG_JSON;
export const getPolyfills = () => POLYFILLS;
export const getPackage = (packageJson, latestNovaVersion) => {
const libPackage = packageJson;
const newPackage = PACKAGE_JSON;
const getVersion = (name) => libPackage.devDependencies[name];
const dependencies = [
"@angular/animations",
"@angular/cdk",
"@angular/common",
"@angular/compiler",
"@angular/core",
"@angular/forms",
"@angular/localize",
"@angular/platform-browser",
"@angular/platform-browser-dynamic",
"@angular/router",
"d3",
"d3-selection-multi",
"d3-shape",
"angular-gridster2",
"core-js",
"highlight.js",
"lodash",
"moment",
"rxjs",
"tslib",
"zone.js",
];
const devDependencies = [
"@angular-devkit/build-angular",
"@angular/cli",
"@angular/compiler-cli",
"@types/node",
"typescript",
];
dependencies.forEach((dependency) => getVersion(dependency)
? (newPackage.dependencies[dependency] =
getVersion(dependency))
: null);
devDependencies.forEach((devDependency) => (newPackage.dependencies[devDependency] = getVersion(devDependency)));
// last released nova
newPackage.dependencies["@nova-ui/bits"] = latestNovaVersion;
newPackage.dependencies["@nova-ui/charts"] = latestNovaVersion;
newPackage.dependencies["@nova-ui/dashboards"] = latestNovaVersion;
return JSON.stringify(newPackage, null, " ");
};
export const getMainComponentName = (sources, filenamePrefix) => {
const mainComponent = sources
.filter((source) => source.fileType === "ts")
.find((source) => source.fileName.includes(filenamePrefix));
return getComponentName(mainComponent);
};
export const getComponentName = (source) => {
const matches = source?.fileContent?.match && source?.fileContent?.match(/class (\w+Component)/);
return (matches || [])[1]; // capture exported component name
};
export const getAppComponent = () => APP_COMPONENT;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1zYW5kYm94LWZpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kb2NzL2V4YW1wbGUtd3JhcHBlci9jb2RlLXNhbmRib3gtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUdwRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUM1QixjQUFzQixFQUN0QixPQUFlLEVBQ2YsT0FBdUIsRUFDdkIsV0FBZ0IsRUFDaEIsY0FBbUIsRUFDbkIsaUJBQXlCLEVBQ1EsRUFBRTtJQUNuQyxJQUFJLEtBQUssR0FBMkI7UUFDaEMsZ0JBQWdCLEVBQUU7WUFDZCxPQUFPLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztTQUNwQztRQUNELGFBQWEsRUFBRTtZQUNYLE9BQU8sRUFBRSxXQUFXLEVBQUU7U0FDekI7UUFDRCxrQkFBa0IsRUFBRTtZQUNoQixPQUFPLEVBQUUsWUFBWSxFQUFFO1NBQzFCO1FBQ0QsaUJBQWlCLEVBQUU7WUFDZixPQUFPLEVBQUUsU0FBUyxFQUFFO1NBQ3ZCO1FBQ0QsY0FBYyxFQUFFO1lBQ1osT0FBTyxFQUFFLFVBQVUsRUFBRTtTQUN4QjtRQUNELGNBQWMs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QUFDO0lBQ3JGLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7QUFDakUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFOR1VMQVJfSlNPTiB9IGZyb20gXCIuLi9saXZlLWV4YW1wbGUtZmlsZXMvYW5ndWxhci5qc29uXCI7XG5pbXBvcnQgeyBBUFBfQ09NUE9ORU5UIH0gZnJvbSBcIi4uL2xpdmUtZXhhbXBsZS1maWxlcy9hcHAuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBUFBfTU9EVUxFIH0gZnJvbSBcIi4uL2xpdmUtZXhhbXBsZS1maWxlcy9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBJTkRFWCB9IGZyb20gXCIuLi9saXZlLWV4YW1wbGUtZmlsZXMvaW5kZXguaHRtbFwiO1xuaW1wb3J0IHsgTUFJTiB9IGZyb20gXCIuLi9saXZlLWV4YW1wbGUtZmlsZXMvbWFpblwiO1xuaW1wb3J0IHsgUEFDS0FHRV9KU09OIH0gZnJvbSBcIi4uL2xpdmUtZXhhbXBsZS1maWxlcy9wYWNrYWdlLmpzb25cIjtcbmltcG9ydCB7IFBPTFlGSUxMUyB9IGZyb20gXCIuLi9saXZlLWV4YW1wbGUtZmlsZXMvcG9seWZpbGxzXCI7XG5pbXBvcnQgeyBUU0NPTkZJR19KU09OIH0gZnJvbSBcIi4uL2xpdmUtZXhhbXBsZS1maWxlcy90c2NvbmZpZy5qc29uXCI7XG5pbXBvcnQgeyBGaWxlTWV0YWRhdGEgfSBmcm9tIFwiLi4vc2VydmljZXMvc291cmNlcy5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBbmd1bGFyQXBwID0gKFxuICAgIGZpbGVuYW1lUHJlZml4OiBzdHJpbmcsXG4gICAgY29udGV4dDogc3RyaW5nLFxuICAgIHNvdXJjZXM6IEZpbGVNZXRhZGF0YVtdLFxuICAgIHBhY2thZ2VKc29uOiBhbnksXG4gICAgcGFja2FnZUpzb25MaWI6IGFueSxcbiAgICBsYXRlc3ROb3ZhVmVyc2lvbjogc3RyaW5nXG4pOiB7IGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+IH0gPT4ge1xuICAgIGxldCBmaWxlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHtcbiAgICAgICAgXCJzcmMvaW5kZXguaHRtbFwiOiB7XG4gICAgICAgICAgICBjb250ZW50OiBnZXRJbmRleChmaWxlbmFtZVByZWZpeCksXG4gICAgICAgIH0sXG4gICAgICAgIFwic3JjL21haW4udHNcIjoge1xuICAgICAgICAgICAgY29udGVudDogZ2V0TWFpbkZpbGUoKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJzcmMvcG9seWZpbGxzLnRzXCI6IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IGdldFBvbHlmaWxscygpLFxuICAgICAgICB9LFxuICAgICAgICBcInNyYy9zdHlsZXMubGVzc1wiOiB7XG4gICAgICAgICAgICBjb250ZW50OiBnZXRTdHlsZXMoKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJhbmd1bGFyLmpzb25cIjoge1xuICAgICAgICAgICAgY29udGVudDogZ2V0QW5ndWxhcigpLFxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2UuanNvblwiOiB7XG4gICAgICAgICAgICBjb250ZW50OiBnZXRQYWNrYWdlKFxuICAgICAgICAgICAgICAgIHBhY2thZ2VKc29uLFxuICAgICAgICAgICAgICAgIGxhdGVzdE5vdmFWZXJzaW9uXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBcInNyYy9hcHAvYXBwLm1vZHVsZS50c1wiOiB7XG4gICAgICAgICAgICBjb250ZW50OiBnZXRBcHBNb2R1bGUoXG4gICAgICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgICAgICBmaWxlbmFtZVByZWZpeCxcbiAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhY2thZ2VKc29uTGliXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBcInNyYy9hcHAvYXBwLmNvbXBvbmVudC50c1wiOiB7XG4gICAgICAgICAgICBjb250ZW50OiBnZXRBcHBDb21wb25lbnQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0c2NvbmZpZy5qc29uXCI6IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IGdldFRTQ29uZmlnKCksXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHNvdXJjZXNcbiAgICAgICAgLmZvckVhY2goKHNvdXJjZTogRmlsZU1ldGFkYXRhKSA9PiB7XG4gICAgICAgICAgICBmaWxlcyA9IE9iamVjdC5hc3NpZ24oZmlsZXMsIHtcbiAgICAgICAgICAgICAgICBbYHNyYy9hcHAvJHtzb3VyY2UuZmlsZVBhdGh9YF06IHsgY29udGVudDogc291cmNlLmZpbGVDb250ZW50IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4geyBmaWxlczogZmlsZXMgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYWluRmlsZSA9ICgpOiBzdHJpbmcgPT4gTUFJTjtcbmV4cG9ydCBjb25zdCBnZXRJbmRleCA9IChjb21wb25lbnRTZWxlY3Rvcjogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgSU5ERVgucmVwbGFjZShcIiR7Y29tcG9uZW50U2VsZWN0b3J9XCIsIGNvbXBvbmVudFNlbGVjdG9yKTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcE1vZHVsZSA9IChcbiAgICBzb3VyY2VzOiBGaWxlTWV0YWRhdGFbXSxcbiAgICBmaWxlbmFtZVByZWZpeDogc3RyaW5nLFxuICAgIGNvbnRleHQ6IHN0cmluZyxcbiAgICBwYWNrYWdlSnNvbjogYW55XG4pOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IG1haW5Db21wb25lbnROYW1lID0gZ2V0TWFpbkNvbXBvbmVudE5hbWUoc291cmNlcywgZmlsZW5hbWVQcmVmaXgpO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWVzID0gc291cmNlcyAmJiBzb3VyY2VzXG4gICAgICAgIC5maWx0ZXIoKHNvdXJjZTogRmlsZU1ldGFkYXRhKSA9PiBzb3VyY2UuZmlsZVR5cGUgPT09IFwidHNcIilcbiAgICAgICAgLm1hcCgoc291cmNlOiBGaWxlTWV0YWRhdGEpID0+IGdldENvbXBvbmVudE5hbWUoc291cmNlKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgIGNvbnN0IGltcG9ydHMgPSBzb3VyY2VzXG4gICAgICAgIC5maWx0ZXIoKHNvdXJjZTogRmlsZU1ldGFkYXRhKSA9PiBzb3VyY2UuZmlsZVR5cGUgPT09IFwidHNcIilcbiAgICAgICAgLmZpbHRlcigoc291cmNlOiBGaWxlTWV0YWRhdGEpID0+IHNvdXJjZS5maWxlTmFtZSAhPT0gYHJvdXRlcy50c2ApXG4gICAgICAgIC5tYXAoXG4gICAgICAgICAgICAoc291cmNlKSA9PlxuICAgICAgICAgICAgICAgIGBpbXBvcnQgeyAke2dldENvbXBvbmVudE5hbWUoXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAgICl9IH0gZnJvbSBcIi4vJHtzb3VyY2UuZmlsZVBhdGguc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIC1zb3VyY2UuZmlsZVR5cGUubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICl9XCJgXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3QgbGliUGFja2FnZSA9IHBhY2thZ2VKc29uLm5hbWU7XG4gICAgY29uc3QgY2hhcnRzSW1wb3J0ID0gbGliUGFja2FnZSA9PT0gXCJAbm92YS11aS9jaGFydHNcIjtcbiAgICBjb25zdCBkYXNoYm9hcmRzSW1wb3J0ID0gbGliUGFja2FnZSA9PT0gXCJAbm92YS11aS9kYXNoYm9hcmRzXCI7XG4gICAgY29uc3QgY3VzdG9tUm91dGVzID0gISFzb3VyY2VzLmZpbmQoXG4gICAgICAgIChzb3VyY2U6IEZpbGVNZXRhZGF0YSkgPT4gc291cmNlLmZpbGVOYW1lID09PSBcInJvdXRlcy50c1wiXG4gICAgKTtcblxuICAgIHJldHVybiBBUFBfTU9EVUxFKFxuICAgICAgICBmaWxlbmFtZVByZWZpeCxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgaW1wb3J0cyxcbiAgICAgICAgbWFpbkNvbXBvbmVudE5hbWUsXG4gICAgICAgIGNvbXBvbmVudE5hbWVzLFxuICAgICAgICBjdXN0b21Sb3V0ZXMsXG4gICAgICAgIGNoYXJ0c0ltcG9ydCxcbiAgICAgICAgZGFzaGJvYXJkc0ltcG9ydFxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3R5bGVzID0gKCk6IHN0cmluZyA9PiBgYDtcblxuZXhwb3J0IGNvbnN0IGdldEFuZ3VsYXIgPSAoKTogc3RyaW5nID0+IEFOR1VMQVJfSlNPTjtcblxuZXhwb3J0IGNvbnN0IGdldFRTQ29uZmlnID0gKCk6IHN0cmluZyA9PiBUU0NPTkZJR19KU09OO1xuXG5leHBvcnQgY29uc3QgZ2V0UG9seWZpbGxzID0gKCk6IHN0cmluZyA9PiBQT0xZRklMTFM7XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlID0gKFxuICAgIHBhY2thZ2VKc29uOiBhbnksXG4gICAgbGF0ZXN0Tm92YVZlcnNpb246IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBsaWJQYWNrYWdlID0gcGFja2FnZUpzb247XG4gICAgY29uc3QgbmV3UGFja2FnZSA9IFBBQ0tBR0VfSlNPTjtcblxuICAgIGNvbnN0IGdldFZlcnNpb24gPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICAgIGxpYlBhY2thZ2UuZGV2RGVwZW5kZW5jaWVzW25hbWVdO1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gW1xuICAgICAgICBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIixcbiAgICAgICAgXCJAYW5ndWxhci9jZGtcIixcbiAgICAgICAgXCJAYW5ndWxhci9jb21tb25cIixcbiAgICAgICAgXCJAYW5ndWxhci9jb21waWxlclwiLFxuICAgICAgICBcIkBhbmd1bGFyL2NvcmVcIixcbiAgICAgICAgXCJAYW5ndWxhci9mb3Jtc1wiLFxuICAgICAgICBcIkBhbmd1bGFyL2xvY2FsaXplXCIsXG4gICAgICAgIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiLFxuICAgICAgICBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pY1wiLFxuICAgICAgICBcIkBhbmd1bGFyL3JvdXRlclwiLFxuICAgICAgICBcImQzXCIsXG4gICAgICAgIFwiZDMtc2VsZWN0aW9uLW11bHRpXCIsXG4gICAgICAgIFwiZDMtc2hhcGVcIixcbiAgICAgICAgXCJhbmd1bGFyLWdyaWRzdGVyMlwiLFxuICAgICAgICBcImNvcmUtanNcIixcbiAgICAgICAgXCJoaWdobGlnaHQuanNcIixcbiAgICAgICAgXCJsb2Rhc2hcIixcbiAgICAgICAgXCJtb21lbnRcIixcbiAgICAgICAgXCJyeGpzXCIsXG4gICAgICAgIFwidHNsaWJcIixcbiAgICAgICAgXCJ6b25lLmpzXCIsXG4gICAgXTtcblxuICAgIGNvbnN0IGRldkRlcGVuZGVuY2llcyA9IFtcbiAgICAgICAgXCJAYW5ndWxhci1kZXZraXQvYnVpbGQtYW5ndWxhclwiLFxuICAgICAgICBcIkBhbmd1bGFyL2NsaVwiLFxuICAgICAgICBcIkBhbmd1bGFyL2NvbXBpbGVyLWNsaVwiLFxuICAgICAgICBcIkB0eXBlcy9ub2RlXCIsXG4gICAgICAgIFwidHlwZXNjcmlwdFwiLFxuICAgIF07XG5cbiAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwZW5kZW5jeTogc3RyaW5nKSA9PlxuICAgICAgICBnZXRWZXJzaW9uKGRlcGVuZGVuY3kpXG4gICAgICAgICAgICA/ICgobmV3UGFja2FnZS5kZXBlbmRlbmNpZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilbZGVwZW5kZW5jeV0gPVxuICAgICAgICAgICAgICAgICAgZ2V0VmVyc2lvbihkZXBlbmRlbmN5KSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgICBkZXZEZXBlbmRlbmNpZXMuZm9yRWFjaChcbiAgICAgICAgKGRldkRlcGVuZGVuY3k6IHN0cmluZykgPT5cbiAgICAgICAgICAgICgobmV3UGFja2FnZS5kZXBlbmRlbmNpZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilbXG4gICAgICAgICAgICAgICAgZGV2RGVwZW5kZW5jeVxuICAgICAgICAgICAgXSA9IGdldFZlcnNpb24oZGV2RGVwZW5kZW5jeSkpXG4gICAgKTtcblxuICAgIC8vIGxhc3QgcmVsZWFzZWQgbm92YVxuICAgIG5ld1BhY2thZ2UuZGVwZW5kZW5jaWVzW1wiQG5vdmEtdWkvYml0c1wiXSA9IGxhdGVzdE5vdmFWZXJzaW9uO1xuICAgIG5ld1BhY2thZ2UuZGVwZW5kZW5jaWVzW1wiQG5vdmEtdWkvY2hhcnRzXCJdID0gbGF0ZXN0Tm92YVZlcnNpb247XG4gICAgbmV3UGFja2FnZS5kZXBlbmRlbmNpZXNbXCJAbm92YS11aS9kYXNoYm9hcmRzXCJdID0gbGF0ZXN0Tm92YVZlcnNpb247XG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobmV3UGFja2FnZSwgbnVsbCwgXCIgXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1haW5Db21wb25lbnROYW1lID0gKFxuICAgIHNvdXJjZXM6IEZpbGVNZXRhZGF0YVtdLFxuICAgIGZpbGVuYW1lUHJlZml4OiBzdHJpbmdcbik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgbWFpbkNvbXBvbmVudCA9IHNvdXJjZXNcbiAgICAgICAgLmZpbHRlcigoc291cmNlOiBGaWxlTWV0YWRhdGEpID0+IHNvdXJjZS5maWxlVHlwZSA9PT0gXCJ0c1wiKVxuICAgICAgICAuZmluZCgoc291cmNlOiBGaWxlTWV0YWRhdGEpID0+XG4gICAgICAgICAgICBzb3VyY2UuZmlsZU5hbWUuaW5jbHVkZXMoZmlsZW5hbWVQcmVmaXgpXG4gICAgICAgICk7XG4gICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUobWFpbkNvbXBvbmVudCBhcyBhbnkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbXBvbmVudE5hbWUgPSAoc291cmNlOiBGaWxlTWV0YWRhdGEpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXM6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAgICAgc291cmNlPy5maWxlQ29udGVudD8ubWF0Y2ggJiYgc291cmNlPy5maWxlQ29udGVudD8ubWF0Y2goL2NsYXNzIChcXHcrQ29tcG9uZW50KS8pO1xuICAgIHJldHVybiAobWF0Y2hlcyB8fCBbXSlbMV07IC8vIGNhcHR1cmUgZXhwb3J0ZWQgY29tcG9uZW50IG5hbWVcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBDb21wb25lbnQgPSAoKTogc3RyaW5nID0+IEFQUF9DT01QT05FTlQ7XG4iXX0=