UNPKG

@sencha/ext-webpack-plugin

Version:
225 lines (223 loc) 28.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildXML = void 0; exports.createAppJson = createAppJson; exports.createJSDOMEnvironment = createJSDOMEnvironment; exports.createWorkspaceJson = createWorkspaceJson; exports.extAngularModule = void 0; const buildXML = function (compress, options, output) { const logv = require('./pluginUtil').logv; logv(options, 'FUNCTION buildXML'); let compression = ''; if (compress) { compression = ` then fs minify -yui -from=ext.js -to=ext.js `; } return `<project name="simple-build" basedir="."> <!-- internally, watch calls the init target, so need to have one here --> <target name="init"/> <target name="init-cmd"> <taskdef resource="com/sencha/ant/antlib.xml" classpath="\${cmd.dir}/sencha.jar" loaderref="senchaloader"/> <x-extend-classpath> <jar path="\${cmd.dir}/sencha.jar"/> </x-extend-classpath> <x-sencha-init prefix=""/> <x-compile refid="theCompiler" dir="\${basedir}" initOnly="true" inheritAll="true"> <![CDATA[ -classpath=\${basedir}/manifest.js load-app -temp=\${basedir}/temp -tag=App ]]> </x-compile> </target> <target name="rebuild"> <x-compile refid="theCompiler" dir="\${basedir}" inheritAll="true"> <![CDATA[ --debug exclude -all and include -f=Boot.js and concatenate ext.js and exclude -all and # include theme overrides include -r -tag=overrides and # include all js files needed for manifest.js include -r -f=manifest.js and # exclude the generated manifest file itself, # since we don't want the generated bundle file to create any components exclude -f=manifest.js and concatenate +append ext.js and scss -appName=App -imageSearchPath=resources -themeName=triton -resourceMapBase=. -output=ext.scss and resources -excludes=-all*.css -out=resources and resources -model=true -out=resources ]]> </x-compile> </target> <target name="build" depends="init-cmd,rebuild"> <x-sencha-command dir="\${basedir}"> <![CDATA[ fashion -pwd=. -split=4095 ${compress ? '-compress' : ''} ext.scss ext.css ${compression} ]]> </x-sencha-command> </target> <target name="watch" depends="init-cmd,build"> <x-fashion-watch refName="fashion-watch" inputFile="ext.scss" outputFile="ext.css" split="4095" compress="${compress ? 'true' : 'false'}" configFile="app.json" fork="true"/> <x-watch compilerRef="theCompiler" targets="rebuild"/> </target> </project> `.trim(); }; exports.buildXML = buildXML; function createAppJson(theme, packages, toolkit, options, output) { const logv = require('./pluginUtil').logv; logv(options, 'FUNCTION createAppJson'); const fs = require('fs'); var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); var pathDifference = output.substring(process.cwd().length); var numberOfPaths = pathDifference.split(isWindows ? "\\" : "/").length - 1; var nodeModulePath = ''; for (var i = 0; i < numberOfPaths; i++) { nodeModulePath += "../"; } const config = { framework: "ext", toolkit, requires: packages, "overrides": ["overrides", "jsdom-environment.js"], // "language": { // "js": { // "output": "ES5" // } // }, "packages": { "dir": [nodeModulePath + "node_modules/@sencha", nodeModulePath + toolkit + "/packages"] }, output: { base: '.', resources: { path: './resources', shared: "./resources" } } }; // if theme is local add it as an additional package dir if (fs.existsSync(theme)) { const path = require('path'); const cjson = require('cjson'); const packageInfo = cjson.load(path.join(theme, 'package.json')); config.theme = packageInfo.name; config.packages.dir.push(path.resolve(theme)); } else { config.theme = theme; } return JSON.stringify(config, null, 2); } function createJSDOMEnvironment(options, output) { const logv = require('./pluginUtil').logv; logv(options, 'FUNCTION createJSDOMEnvironment'); return 'window.Ext = Ext;'; } function createWorkspaceJson(options, output) { const logv = require('./pluginUtil').logv; logv(options, 'FUNCTION createWorkspaceJson'); var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); var pathDifference = output.substring(process.cwd().length); var numberOfPaths = pathDifference.split(isWindows ? "\\" : "/").length - 1; var nodeModulePath = ''; for (var i = 0; i < numberOfPaths; i++) { nodeModulePath += "../"; } logv(options, 'isWindows: ' + isWindows); logv(options, 'output: ' + output); logv(options, 'pathDifference: ' + pathDifference); logv(options, 'numberOfPaths: ' + numberOfPaths); logv(options, 'nodeModulePath: ' + nodeModulePath); const config = { "frameworks": { "ext": nodeModulePath + "node_modules/@sencha/ext" }, "build": { "dir": "${workspace.dir}/" + nodeModulePath + "build" }, "packages": { "dir": ["${workspace.dir}/" + nodeModulePath + "ext-" + options.framework + "/packages/local", "${workspace.dir}/" + nodeModulePath + "ext-" + options.framework + "/packages", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-font-ios", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-base", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-base", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-ios", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-material", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-aria", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neutral", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-classic", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-gray", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-crisp", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-crisp-touch", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neptune", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-neptune-touch", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-triton", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-${toolkit.name}-theme-graphite", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-react-renderercell", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-web-components-renderercell", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-calendar", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-charts", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-d3", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-exporter", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-pivot", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-pivot-d3", "${workspace.dir}/" + nodeModulePath + "node_modules/@sencha/ext-ux"], "extract": "${workspace.dir}/" + nodeModulePath + "packages/remote" } }; return JSON.stringify(config, null, 2); } const extAngularModule = function (imports, exports, declarations) { return ` import { NgModule } from '@angular/core'; ${imports} @NgModule({ imports: [ ], declarations: [ ${declarations} ], exports: [ ${exports} ] }) export class ExtAngularModule { } `; }; exports.extAngularModule = extAngularModule; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFhNTCIsImNvbXByZXNzIiwib3B0aW9ucyIsIm91dHB1dCIsImxvZ3YiLCJyZXF1aXJlIiwiY29tcHJlc3Npb24iLCJ0cmltIiwiZXhwb3J0cyIsImNyZWF0ZUFwcEpzb24iLCJ0aGVtZSIsInBhY2thZ2VzIiwidG9vbGtpdCIsImZzIiwiaXNXaW5kb3dzIiwicHJvY2VzcyIsInBsYXRmb3JtIiwibWF0Y2giLCJwYXRoRGlmZmVyZW5jZSIsInN1YnN0cmluZyIsImN3ZCIsImxlbmd0aCIsIm51bWJlck9mUGF0aHMiLCJzcGxpdCIsIm5vZGVNb2R1bGVQYXRoIiwiaSIsImNvbmZpZyIsImZyYW1ld29yayIsInJlcXVpcmVzIiwiYmFzZSIsInJlc291cmNlcyIsInBhdGgiLCJzaGFyZWQiLCJleGlzdHNTeW5jIiwiY2pzb24iLCJwYWNrYWdlSW5mbyIsImxvYWQiLCJqb2luIiwibmFtZSIsImRpciIsInB1c2giLCJyZXNvbHZlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNyZWF0ZUpTRE9NRW52aXJvbm1lbnQiLCJjcmVhdGVXb3Jrc3BhY2VKc29uIiwiZXh0QW5ndWxhck1vZHVsZSIsImltcG9ydHMiLCJkZWNsYXJhdGlvbnMiXSwic291cmNlcyI6WyIuLi9zcmMvYXJ0aWZhY3RzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBidWlsZFhNTCA9IGZ1bmN0aW9uKGNvbXByZXNzLCBvcHRpb25zLCBvdXRwdXQpIHtcbiAgY29uc3QgbG9ndiA9IHJlcXVpcmUoJy4vcGx1Z2luVXRpbCcpLmxvZ3ZcbiAgbG9ndihvcHRpb25zLCdGVU5DVElPTiBidWlsZFhNTCcpXG4gIFxuICBsZXQgY29tcHJlc3Npb24gPSAnJ1xuXG4gIGlmIChjb21wcmVzcykge1xuICAgIGNvbXByZXNzaW9uID0gYFxuICAgICAgdGhlbiBcbiAgICAgIGZzIFxuICAgICAgbWluaWZ5IFxuICAgICAgICAteXVpIFxuICAgICAgICAtZnJvbT1leHQuanMgXG4gICAgICAgIC10bz1leHQuanNcbiAgICBgO1xuICB9XG5cbiAgICByZXR1cm4gYDxwcm9qZWN0IG5hbWU9XCJzaW1wbGUtYnVpbGRcIiBiYXNlZGlyPVwiLlwiPlxuICA8IS0tICBpbnRlcm5hbGx5LCB3YXRjaCBjYWxscyB0aGUgaW5pdCB0YXJnZXQsIHNvIG5lZWQgdG8gaGF2ZSBvbmUgaGVyZSAtLT5cbiAgPHRhcmdldCBuYW1lPVwiaW5pdFwiLz5cbiAgPHRhcmdldCBuYW1lPVwiaW5pdC1jbWRcIj5cbiAgICA8dGFza2RlZiAgcmVzb3VyY2U9XCJjb20vc2VuY2hhL2FudC9hbnRsaWIueG1sXCJcbiAgICAgICAgICAgICAgY2xhc3NwYXRoPVwiXFwke2NtZC5kaXJ9L3NlbmNoYS5qYXJcIlxuICAgICAgICAgICAgICBsb2FkZXJyZWY9XCJzZW5jaGFsb2FkZXJcIi8+XG4gICAgPHgtZXh0ZW5kLWNsYXNzcGF0aD5cbiAgICAgICAgPGphciBwYXRoPVwiXFwke2NtZC5kaXJ9L3NlbmNoYS5qYXJcIi8+XG4gICAgPC94LWV4dGVuZC1jbGFzc3BhdGg+XG4gICAgPHgtc2VuY2hhLWluaXQgcHJlZml4PVwiXCIvPlxuICAgIDx4LWNvbXBpbGUgcmVmaWQ9XCJ0aGVDb21waWxlclwiXG4gICAgICAgICAgICAgICAgICAgICAgZGlyPVwiXFwke2Jhc2VkaXJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBpbml0T25seT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRBbGw9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDwhW0NEQVRBW1xuICAgICAgICAgICAgICAtY2xhc3NwYXRoPVxcJHtiYXNlZGlyfS9tYW5pZmVzdC5qc1xuICAgICAgICAgICAgICBsb2FkLWFwcFxuICAgICAgICAgICAgICAgICAgLXRlbXA9XFwke2Jhc2VkaXJ9L3RlbXBcbiAgICAgICAgICAgICAgICAgIC10YWc9QXBwXG4gICAgICAgIF1dPlxuICAgICAgPC94LWNvbXBpbGU+XG4gIDwvdGFyZ2V0PlxuICA8dGFyZ2V0IG5hbWU9XCJyZWJ1aWxkXCI+XG4gICAgPHgtY29tcGlsZSByZWZpZD1cInRoZUNvbXBpbGVyXCJcbiAgICAgICAgICAgICAgZGlyPVwiXFwke2Jhc2VkaXJ9XCJcbiAgICAgICAgICAgICAgaW5oZXJpdEFsbD1cInRydWVcIj5cbiAgICAgIDwhW0NEQVRBW1xuICAgICAgLS1kZWJ1Z1xuICAgICAgZXhjbHVkZVxuICAgICAgLWFsbFxuICAgICAgYW5kXG4gICAgICBpbmNsdWRlXG4gICAgICAtZj1Cb290LmpzXG4gICAgICBhbmRcbiAgICAgIGNvbmNhdGVuYXRlXG4gICAgICAgICAgZXh0LmpzXG4gICAgICBhbmRcbiAgICAgIGV4Y2x1ZGVcbiAgICAgIC1hbGxcbiAgICAgIGFuZFxuICAgICAgIyBpbmNsdWRlIHRoZW1lIG92ZXJyaWRlc1xuICAgICAgaW5jbHVkZVxuICAgICAgICAtclxuICAgICAgICAtdGFnPW92ZXJyaWRlc1xuICAgICAgYW5kXG4gICAgICAjIGluY2x1ZGUgYWxsIGpzIGZpbGVzIG5lZWRlZCBmb3IgbWFuaWZlc3QuanNcbiAgICAgIGluY2x1ZGVcbiAgICAgICAgICAtclxuICAgICAgICAgIC1mPW1hbmlmZXN0LmpzXG4gICAgICBhbmRcbiAgICAgICMgZXhjbHVkZSB0aGUgZ2VuZXJhdGVkIG1hbmlmZXN0IGZpbGUgaXRzZWxmLFxuICAgICAgIyBzaW5jZSB3ZSBkb24ndCB3YW50IHRoZSBnZW5lcmF0ZWQgYnVuZGxlIGZpbGUgdG8gY3JlYXRlIGFueSBjb21wb25lbnRzXG4gICAgICBleGNsdWRlXG4gICAgICAtZj1tYW5pZmVzdC5qc1xuICAgICAgYW5kXG4gICAgICBjb25jYXRlbmF0ZVxuICAgICAgK2FwcGVuZFxuICAgICAgICAgIGV4dC5qc1xuICAgICAgYW5kXG4gICAgICBzY3NzXG4gICAgICAgICAgLWFwcE5hbWU9QXBwXG4gICAgICAgICAgLWltYWdlU2VhcmNoUGF0aD1yZXNvdXJjZXNcbiAgICAgICAgICAtdGhlbWVOYW1lPXRyaXRvblxuICAgICAgICAgIC1yZXNvdXJjZU1hcEJhc2U9LlxuICAgICAgICAgIC1vdXRwdXQ9ZXh0LnNjc3NcbiAgICAgIGFuZFxuICAgICAgcmVzb3VyY2VzXG4gICAgICAgICAgLWV4Y2x1ZGVzPS1hbGwqLmNzc1xuICAgICAgICAgIC1vdXQ9cmVzb3VyY2VzXG4gICAgICBhbmRcbiAgICAgIHJlc291cmNlc1xuICAgICAgICAgIC1tb2RlbD10cnVlXG4gICAgICAgICAgLW91dD1yZXNvdXJjZXNcbiAgICAgIF1dPlxuICAgIDwveC1jb21waWxlPlxuICA8L3RhcmdldD5cbiAgPHRhcmdldCBuYW1lPVwiYnVpbGRcIiBkZXBlbmRzPVwiaW5pdC1jbWQscmVidWlsZFwiPlxuICAgIDx4LXNlbmNoYS1jb21tYW5kIGRpcj1cIlxcJHtiYXNlZGlyfVwiPlxuICAgICAgPCFbQ0RBVEFbXG4gICAgICBmYXNoaW9uXG4gICAgICAgICAgLXB3ZD0uXG4gICAgICAgICAgLXNwbGl0PTQwOTVcbiAgICAgICAgICAke2NvbXByZXNzID8gJy1jb21wcmVzcycgOiAnJ31cbiAgICAgICAgICAgICAgZXh0LnNjc3NcbiAgICAgICAgICBleHQuY3NzXG4gICAgICAke2NvbXByZXNzaW9ufVxuICAgICAgXV0+XG4gICAgPC94LXNlbmNoYS1jb21tYW5kPlxuICA8L3RhcmdldD5cbiAgPHRhcmdldCBuYW1lPVwid2F0Y2hcIiBkZXBlbmRzPVwiaW5pdC1jbWQsYnVpbGRcIj5cbiAgICA8eC1mYXNoaW9uLXdhdGNoXG4gICAgICByZWZOYW1lPVwiZmFzaGlvbi13YXRjaFwiXG4gICAgICBpbnB1dEZpbGU9XCJleHQuc2Nzc1wiXG4gICAgICBvdXRwdXRGaWxlPVwiZXh0LmNzc1wiXG4gICAgICBzcGxpdD1cIjQwOTVcIlxuICAgICAgY29tcHJlc3M9XCIke2NvbXByZXNzID8gJ3RydWUnIDogJ2ZhbHNlJ31cIlxuICAgICAgY29uZmlnRmlsZT1cImFwcC5qc29uXCJcbiAgICAgIGZvcms9XCJ0cnVlXCIvPlxuICAgIDx4LXdhdGNoIGNvbXBpbGVyUmVmPVwidGhlQ29tcGlsZXJcIiB0YXJnZXRzPVwicmVidWlsZFwiLz5cbiAgPC90YXJnZXQ+XG48L3Byb2plY3Q+XG5gLnRyaW0oKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwSnNvbiggdGhlbWUsIHBhY2thZ2VzLCB0b29sa2l0LCBvcHRpb25zLCBvdXRwdXQgKSB7XG4gIGNvbnN0IGxvZ3YgPSByZXF1aXJlKCcuL3BsdWdpblV0aWwnKS5sb2d2XG4gIGxvZ3Yob3B0aW9ucywnRlVOQ1RJT04gY3JlYXRlQXBwSnNvbicpXG5cbiAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG5cbiAgdmFyIGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtICE9ICd1bmRlZmluZWQnICYmICEhcHJvY2Vzcy5wbGF0Zm9ybS5tYXRjaCgvXndpbi8pO1xuICB2YXIgcGF0aERpZmZlcmVuY2UgPSBvdXRwdXQuc3Vic3RyaW5nKHByb2Nlc3MuY3dkKCkubGVuZ3RoKVxuICB2YXIgbnVtYmVyT2ZQYXRocyA9IHBhdGhEaWZmZXJlbmNlLnNwbGl0KGlzV2luZG93cyA/IFwiXFxcXFwiIDogXCIvXCIpLmxlbmd0aCAtIDE7XG4gIHZhciBub2RlTW9kdWxlUGF0aCA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZQYXRoczsgaSsrKSB7IFxuICAgIG5vZGVNb2R1bGVQYXRoICs9IFwiLi4vXCJcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBmcmFtZXdvcms6IFwiZXh0XCIsXG4gICAgdG9vbGtpdCxcbiAgICByZXF1aXJlczogcGFja2FnZXMsXG4gICAgXCJvdmVycmlkZXNcIjogW1xuICAgICAgXCJvdmVycmlkZXNcIixcbiAgICAgIFwianNkb20tZW52aXJvbm1lbnQuanNcIlxuICAgIF0sXG4gICAgLy8gXCJsYW5ndWFnZVwiOiB7XG4gICAgLy8gICBcImpzXCI6IHtcbiAgICAvLyAgICAgXCJvdXRwdXRcIjogXCJFUzVcIlxuICAgIC8vICAgfVxuICAgIC8vIH0sXG4gICAgXCJwYWNrYWdlc1wiOiB7XG4gICAgICBcImRpclwiOiBbXG4gICAgICAgIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYVwiLFxuICAgICAgICBub2RlTW9kdWxlUGF0aCArIHRvb2xraXQgKyBcIi9wYWNrYWdlc1wiXG4gICAgICBdXG4gICAgfSxcbiAgICBvdXRwdXQ6IHtcbiAgICAgIGJhc2U6ICcuJyxcbiAgICAgIHJlc291cmNlczoge1xuICAgICAgICBwYXRoOiAnLi9yZXNvdXJjZXMnLFxuICAgICAgICBzaGFyZWQ6IFwiLi9yZXNvdXJjZXNcIlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZW1lIGlzIGxvY2FsIGFkZCBpdCBhcyBhbiBhZGRpdGlvbmFsIHBhY2thZ2UgZGlyXG4gIGlmIChmcy5leGlzdHNTeW5jKHRoZW1lKSkge1xuICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuICAgICAgY29uc3QgY2pzb24gPSByZXF1aXJlKCdjanNvbicpXG4gICAgICBjb25zdCBwYWNrYWdlSW5mbyA9IGNqc29uLmxvYWQocGF0aC5qb2luKHRoZW1lLCAncGFja2FnZS5qc29uJykpO1xuICAgICAgY29uZmlnLnRoZW1lID0gcGFja2FnZUluZm8ubmFtZTtcbiAgICAgIGNvbmZpZy5wYWNrYWdlcy5kaXIucHVzaChwYXRoLnJlc29sdmUodGhlbWUpKTtcbiAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy50aGVtZSA9IHRoZW1lO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKU0RPTUVudmlyb25tZW50KG9wdGlvbnMsIG91dHB1dCkge1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KG9wdGlvbnMsJ0ZVTkNUSU9OIGNyZWF0ZUpTRE9NRW52aXJvbm1lbnQnKVxuXG4gIHJldHVybiAnd2luZG93LkV4dCA9IEV4dDsnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VKc29uKG9wdGlvbnMsIG91dHB1dCkge1xuICBjb25zdCBsb2d2ID0gcmVxdWlyZSgnLi9wbHVnaW5VdGlsJykubG9ndlxuICBsb2d2KG9wdGlvbnMsJ0ZVTkNUSU9OIGNyZWF0ZVdvcmtzcGFjZUpzb24nKVxuXG4gIHZhciBpc1dpbmRvd3MgPSB0eXBlb2YgcHJvY2VzcyAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSAhPSAndW5kZWZpbmVkJyAmJiAhIXByb2Nlc3MucGxhdGZvcm0ubWF0Y2goL153aW4vKTtcbiAgdmFyIHBhdGhEaWZmZXJlbmNlID0gb3V0cHV0LnN1YnN0cmluZyhwcm9jZXNzLmN3ZCgpLmxlbmd0aClcbiAgdmFyIG51bWJlck9mUGF0aHMgPSBwYXRoRGlmZmVyZW5jZS5zcGxpdChpc1dpbmRvd3MgPyBcIlxcXFxcIiA6IFwiL1wiKS5sZW5ndGggLSAxO1xuICB2YXIgbm9kZU1vZHVsZVBhdGggPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mUGF0aHM7IGkrKykgeyBcbiAgICBub2RlTW9kdWxlUGF0aCArPSBcIi4uL1wiXG4gIH1cblxuICBsb2d2KG9wdGlvbnMsJ2lzV2luZG93czogJyArIGlzV2luZG93cylcbiAgbG9ndihvcHRpb25zLCdvdXRwdXQ6ICcgKyBvdXRwdXQpXG4gIGxvZ3Yob3B0aW9ucywncGF0aERpZmZlcmVuY2U6ICcgKyBwYXRoRGlmZmVyZW5jZSlcbiAgbG9ndihvcHRpb25zLCdudW1iZXJPZlBhdGhzOiAnICsgbnVtYmVyT2ZQYXRocylcbiAgbG9ndihvcHRpb25zLCdub2RlTW9kdWxlUGF0aDogJyArIG5vZGVNb2R1bGVQYXRoKVxuXG5cblxuICBjb25zdCBjb25maWcgPSB7XG4gICAgXCJmcmFtZXdvcmtzXCI6IHtcbiAgICAgIFwiZXh0XCI6IG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHRcIlxuICAgIH0sXG4gICAgXCJidWlsZFwiOiB7XG4gICAgICBcImRpclwiOiBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwiYnVpbGRcIlxuICAgIH0sXG4gICAgXCJwYWNrYWdlc1wiOiB7XG4gICAgICBcImRpclwiOiBbXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJleHQtXCIgKyBvcHRpb25zLmZyYW1ld29yayArIFwiL3BhY2thZ2VzL2xvY2FsXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJleHQtXCIgKyBvcHRpb25zLmZyYW1ld29yayArIFwiL3BhY2thZ2VzXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYVwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LWZvbnQtaW9zXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLWJhc2VcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtYmFzZVwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1pb3NcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtbWF0ZXJpYWxcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtYXJpYVwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1uZXV0cmFsXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLWNsYXNzaWNcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtZ3JheVwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1jcmlzcFwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1jcmlzcC10b3VjaFwiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LSR7dG9vbGtpdC5uYW1lfS10aGVtZS1uZXB0dW5lXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLW5lcHR1bmUtdG91Y2hcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC0ke3Rvb2xraXQubmFtZX0tdGhlbWUtdHJpdG9uXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtJHt0b29sa2l0Lm5hbWV9LXRoZW1lLWdyYXBoaXRlXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtcmVhY3QtcmVuZGVyZXJjZWxsXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtd2ViLWNvbXBvbmVudHMtcmVuZGVyZXJjZWxsXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtY2FsZW5kYXJcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC1jaGFydHNcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC1kM1wiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LWV4cG9ydGVyXCIsXG4gICAgICAgIFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJub2RlX21vZHVsZXMvQHNlbmNoYS9leHQtcGl2b3RcIixcbiAgICAgICAgXCIke3dvcmtzcGFjZS5kaXJ9L1wiICsgbm9kZU1vZHVsZVBhdGggKyBcIm5vZGVfbW9kdWxlcy9Ac2VuY2hhL2V4dC1waXZvdC1kM1wiLFxuICAgICAgICBcIiR7d29ya3NwYWNlLmRpcn0vXCIgKyBub2RlTW9kdWxlUGF0aCArIFwibm9kZV9tb2R1bGVzL0BzZW5jaGEvZXh0LXV4XCIsXG4gICAgICBdLFxuICAgICAgXCJleHRyYWN0XCI6IFwiJHt3b3Jrc3BhY2UuZGlyfS9cIiArIG5vZGVNb2R1bGVQYXRoICsgXCJwYWNrYWdlcy9yZW1vdGVcIlxuICAgIH1cbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKVxufVxuXG5leHBvcnQgY29uc3QgZXh0QW5ndWxhck1vZHVsZSA9IGZ1bmN0aW9uKGltcG9ydHMsIGV4cG9ydHMsIGRlY2xhcmF0aW9ucykge1xuICByZXR1cm4gYFxuICBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICAke2ltcG9ydHN9XG4gIEBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICR7ZGVjbGFyYXRpb25zfSAgXSxcbiAgICBleHBvcnRzOiBbXG4gICR7ZXhwb3J0c30gIF1cbiAgfSlcbiAgZXhwb3J0IGNsYXNzIEV4dEFuZ3VsYXJNb2R1bGUgeyB9XG4gIGBcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFPLE1BQU1BLFFBQVEsR0FBRyxTQUFBQSxDQUFTQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFO0VBQzFELE1BQU1DLElBQUksR0FBR0MsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDRCxJQUFJO0VBQ3pDQSxJQUFJLENBQUNGLE9BQU8sRUFBQyxtQkFBbUIsQ0FBQztFQUVqQyxJQUFJSSxXQUFXLEdBQUcsRUFBRTtFQUVwQixJQUFJTCxRQUFRLEVBQUU7SUFDWkssV0FBVyxHQUFJ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