@naiable/rollup-config
Version:
Use rollup like tsup, but opinionated my way.
143 lines (140 loc) • 24.7 kB
JavaScript
import { join, dirname } from 'node:path';
import fs from 'node:fs';
import { cwd } from 'node:process';
import { defu } from 'defu';
import alias__default from '@rollup/plugin-alias';
import commonjs__default from '@rollup/plugin-commonjs';
import resolve__default from '@rollup/plugin-node-resolve';
import swc__default from '@rollup/plugin-swc';
import dts__default from 'rollup-plugin-dts';
import typescript__default from '@rollup/plugin-typescript';
import vue__default from 'unplugin-vue/rollup';
import esbuild__default from 'rollup-plugin-esbuild';
import babel__default, { getBabelOutputPlugin } from '@rollup/plugin-babel';
import terser from '@rollup/plugin-terser';
export { presetApp } from './preset-app.mjs';
export { presetLib } from './preset-lib.mjs';
function writeFile(path, content) {
// 创建文件夹
const dir = dirname(path);
if (!fs.existsSync(dir))
fs.mkdirSync(dir, { recursive: true });
// 删除已存在的文件
if (fs.existsSync(path))
fs.unlinkSync(path);
// 写入文件
fs.writeFileSync(path, content);
}
function naiup(config = {}) {
const defaults = {
input: "src/index.ts",
output: ["cjs", "esm"],
strict: true,
sourcemap: "inline",
dir: "dist",
alias: {
entries: [{ find: "@", replacement: join(cwd(), "src") }],
},
commonjs: {},
resolve: {
extensions: [".mjs", ".js", ".json", ".node", /* 附加 */ ".ts", ".tsx", ".cjs", ".jsx", ".mts", ".cts"],
},
compile: {
type: "@rollup/plugin-typescript",
typescript: {},
},
vue: {
include: /\.vue$/,
sourceMap: true,
},
babel: false,
terser: false,
overrides: {
buildOptions: {},
dtsOptions: {},
},
snapshot: {
enable: false,
path: `rollup.config.snapshot-${new Date().toISOString()}.json`,
},
preserveModules: true,
external: [/node_modules/],
};
const finalConfig = defu(config, defaults);
if (config && config.output && Array.isArray(config.output))
finalConfig.output = config.output;
const finalPlugins = [];
const finalOutputPlugins = [];
if (finalConfig.alias !== false)
finalPlugins.push(alias__default(finalConfig.alias));
if (finalConfig.commonjs !== false)
finalPlugins.push(commonjs__default(finalConfig.commonjs));
if (finalConfig.resolve !== false)
finalPlugins.push(resolve__default(finalConfig.resolve));
if (finalConfig.vue !== false)
finalPlugins.push(vue__default(finalConfig.vue));
if (finalConfig.babel !== false) {
if (finalConfig.babel.inputOptions !== false)
finalPlugins.push(babel__default(finalConfig.babel.inputOptions));
if (finalConfig.babel.outputOptions !== false)
finalOutputPlugins.push(getBabelOutputPlugin(finalConfig.babel.outputOptions));
}
if (finalConfig.compile !== false) {
const complieOptions = finalConfig.compile;
if (complieOptions.type === "@rollup/plugin-swc")
finalPlugins.push(swc__default(complieOptions.swc));
else if (complieOptions.type === "@rollup/plugin-typescript")
finalPlugins.push(typescript__default(complieOptions.typescript));
else if (complieOptions.type === "rollup-plugin-esbuild")
finalPlugins.push(esbuild__default(complieOptions.esbuild));
}
if (finalConfig.terser !== false)
finalOutputPlugins.push(terser(finalConfig.terser));
const defaultComputedBuildOptions = {
input: finalConfig.input,
external: finalConfig.external,
plugins: [...finalPlugins],
output: [...new Set(finalConfig.output)].map((format) => ({
format,
dir: join(finalConfig.dir, format),
entryFileNames: `[name].${format === "cjs" ? "cjs" : "mjs"}`,
strict: finalConfig.strict,
sourcemap: finalConfig.sourcemap,
preserveModules: finalConfig.preserveModules,
plugins: [...finalOutputPlugins],
})),
};
let defaultComputedDtsOptions;
if (finalConfig.dts !== false) {
defaultComputedDtsOptions = {
input: finalConfig.input,
external: finalConfig.external,
plugins: [...finalPlugins, dts__default(finalConfig.dts)],
output: [
...[...new Set(finalConfig.output)].map((format) => ({
format,
dir: join(finalConfig.dir, format),
entryFileNames: `[name].d.${format === "cjs" ? "cts" : "mts"}`,
strict: finalConfig.strict,
sourcemap: finalConfig.sourcemap,
preserveModules: finalConfig.preserveModules,
})),
{
dir: join(finalConfig.dir, "types"),
entryFileNames: "[name].d.ts",
strict: finalConfig.strict,
sourcemap: finalConfig.sourcemap,
preserveModules: finalConfig.preserveModules,
},
],
};
}
const finalBuildOptions = defu(finalConfig.overrides.buildOptions, defaultComputedBuildOptions);
const finalDtsOptions = defaultComputedDtsOptions ? defu(finalConfig.overrides.dtsOptions, defaultComputedDtsOptions) : undefined;
const returns = finalDtsOptions ? [finalBuildOptions, finalDtsOptions] : [finalBuildOptions];
if (finalConfig.snapshot.enable && finalConfig.snapshot.path)
writeFile(finalConfig.snapshot.path, JSON.stringify(returns));
return returns;
}
export { naiup as default, writeFile };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuaW1wb3J0IHsgZGVmdSB9IGZyb20gXCJkZWZ1XCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsT3B0aW9uLCBJbnB1dE9wdGlvbiwgSW5wdXRQbHVnaW5PcHRpb24sIE91dHB1dE9wdGlvbnMsIFJvbGx1cE9wdGlvbnMgfSBmcm9tIFwicm9sbHVwXCI7XG5pbXBvcnQgdHlwZSB7IFJvbGx1cEFsaWFzT3B0aW9ucyB9IGZyb20gXCJAcm9sbHVwL3BsdWdpbi1hbGlhc1wiO1xuaW1wb3J0IGFsaWFzIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1hbGlhc1wiO1xuaW1wb3J0IHR5cGUgeyBSb2xsdXBDb21tb25KU09wdGlvbnMgfSBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tY29tbW9uanNcIjtcbmltcG9ydCBjb21tb25qcyBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tY29tbW9uanNcIjtcbmltcG9ydCB0eXBlIHsgUm9sbHVwTm9kZVJlc29sdmVPcHRpb25zIH0gZnJvbSBcIkByb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZVwiO1xuaW1wb3J0IHJlc29sdmUgZnJvbSBcIkByb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZVwiO1xuaW1wb3J0IHN3YyBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tc3djXCI7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbnMgYXMgUm9sbHVwRFRTT3B0aW9ucyB9IGZyb20gXCJyb2xsdXAtcGx1Z2luLWR0c1wiO1xuaW1wb3J0IGR0cyBmcm9tIFwicm9sbHVwLXBsdWdpbi1kdHNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUGF0dGVybiB9IGZyb20gXCJAcm9sbHVwL3BsdWdpbnV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFJvbGx1cFR5cGVzY3JpcHRPcHRpb25zIH0gZnJvbSBcIkByb2xsdXAvcGx1Z2luLXR5cGVzY3JpcHRcIjtcbmltcG9ydCB0eXBlc2NyaXB0IGZyb20gXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCI7XG5pbXBvcnQgdnVlIGZyb20gXCJ1bnBsdWdpbi12dWUvcm9sbHVwXCI7XG5pbXBvcnQgZXNidWlsZCBmcm9tIFwicm9sbHVwLXBsdWdpbi1lc2J1aWxkXCI7XG5pbXBvcnQgdHlwZSB7IFJvbGx1cEJhYmVsSW5wdXRQbHVnaW5PcHRpb25zLCBSb2xsdXBCYWJlbE91dHB1dFBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tYmFiZWxcIjtcbmltcG9ydCBiYWJlbCwgeyBnZXRCYWJlbE91dHB1dFBsdWdpbiB9IGZyb20gXCJAcm9sbHVwL3BsdWdpbi1iYWJlbFwiO1xuaW1wb3J0IHRlcnNlciBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tdGVyc2VyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8g5Yib5bu65paH5Lu25aS5XG4gIGNvbnN0IGRpciA9IGRpcm5hbWUocGF0aCk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAvLyDliKDpmaTlt7LlrZjlnKjnmoTmlofku7ZcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aCkpIGZzLnVubGlua1N5bmMocGF0aCk7XG5cbiAgLy8g5YaZ5YWl5paH5Lu2XG4gIGZzLndyaXRlRmlsZVN5bmMocGF0aCwgY29udGVudCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5haWFibGVSb2xsdXBDb21waWxlVHlwZVNjcmlwdENvbmZpZyB7XG4gIC8qKiBVc2UgYEByb2xsdXAvcGx1Z2luLXR5cGVzY3JpcHRgISAqL1xuICB0eXBlOiBcIkByb2xsdXAvcGx1Z2luLXR5cGVzY3JpcHRcIjtcbiAgLyoqIFR5cGVTY3JpcHQgT3B0aW9ucy4gKi9cbiAgdHlwZXNjcmlwdD86IFJvbGx1cFR5cGVzY3JpcHRPcHRpb25zO1xufVxuZXhwb3J0IGludGVyZmFjZSBJTmFpYWJsZVJvbGx1cENvbXBpbGVTV0NDb25maWcge1xuICAvKiogVXNlIGBAcm9sbHVwL3BsdWdpbi1zd2NgISAqL1xuICB0eXBlOiBcIkByb2xsdXAvcGx1Z2luLXN3Y1wiO1xuICAvKiogU1dDIE9wdGlvbnMgKi9cbiAgc3djPzogUGFyYW1ldGVyczx0eXBlb2Ygc3djPlswXTtcbiAgLyoqIEluY2x1ZGUgYW5kIGV4Y2x1ZGUgZmlsZXMuICovXG4gIGluY2x1ZGU/OiBGaWx0ZXJQYXR0ZXJuO1xuICAvKiogSW5jbHVkZSBhbmQgZXhjbHVkZSBmaWxlcy4gKi9cbiAgZXhjbHVkZT86IEZpbHRlclBhdHRlcm47XG59XG5leHBvcnQgaW50ZXJmYWNlIElOYWlhYmxlUm9sbHVwQ29tcGxpZUVzYnVpbGRDb25maWcge1xuICAvKiogVXNlIGByb2xsdXAtcGx1Z2luLWVzYnVpbGRgISAqL1xuICB0eXBlOiBcInJvbGx1cC1wbHVnaW4tZXNidWlsZFwiO1xuICAvKiogRXNidWlsZCBPcHRpb25zLiAqL1xuICBlc2J1aWxkPzogUGFyYW1ldGVyczx0eXBlb2YgZXNidWlsZD5bMF07XG59XG5leHBvcnQgdHlwZSBJTmFpYWJsZVJvbGx1cENvbXBpbGVDb25maWcgPSBJTmFpYWJsZVJvbGx1cENvbXBpbGVUeXBlU2NyaXB0Q29uZmlnIHwgSU5haWFibGVSb2xsdXBDb21waWxlU1dDQ29uZmlnIHwgSU5haWFibGVSb2xsdXBDb21wbGllRXNidWlsZENvbmZpZztcblxuZXhwb3J0IGludGVyZmFjZSBJTmFpYWJsZUJhYmVsT3B0aW9ucyB7XG4gIGlucHV0T3B0aW9ucz86IFJvbGx1cEJhYmVsSW5wdXRQbHVnaW5PcHRpb25zIHwgZmFsc2U7XG4gIG91dHB1dE9wdGlvbnM/OiBSb2xsdXBCYWJlbE91dHB1dFBsdWdpbk9wdGlvbnMgfCBmYWxzZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSU5haWFibGVSb2xsdXBDb25maWcge1xuICAvKiogVGhlIGlucHV0IGZpbGUuIEBkZWZhdWx0ICdzcmMvaW5kZXgudHMnICovXG4gIGlucHV0PzogSW5wdXRPcHRpb247XG4gIC8qKiBUaGUgb3V0cHV0IGZvcm1hdC4gQGRlZmF1bHQgWydjanMnLCAnZXNtJ10gKi9cbiAgb3V0cHV0PzogKFwiY2pzXCIgfCBcImVzbVwiKVtdO1xuICAvKiogVGhlIG91dHB1dCBkaXJlY3RvcnkuIEBkZWZhdWx0ICdkaXN0JyAqL1xuICBkaXI/OiBzdHJpbmc7XG4gIC8qKiBUaGUgYEByb2xsdXAvcGx1Z2luLWFsaWFzYCBvcHRpb25zLiBEZWZhdWx0IGFsaWFzIGBAYCB0byBgc3JjYC4gKi9cbiAgYWxpYXM/OiBSb2xsdXBBbGlhc09wdGlvbnMgfCBmYWxzZTtcbiAgLyoqIFRoZSBgQHJvbGx1cC9wbHVnaW4tY29tbW9uanNgIG9wdGlvbnMuICovXG4gIGNvbW1vbmpzPzogUm9sbHVwQ29tbW9uSlNPcHRpb25zIHwgZmFsc2U7XG4gIC8qKiBUaGUgYEByb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZWAgb3B0aW9ucy4gRGVmYXVsdCBleHRlbnNpb25zIGluY2x1ZGUgYC50c2AsIGAudHN4YCwgYC5janNgLCBgLmpzeGAsIGAubXRzYCwgYC5jdHNgLiAqL1xuICByZXNvbHZlPzogUm9sbHVwTm9kZVJlc29sdmVPcHRpb25zIHwgZmFsc2U7XG4gIC8qKiBVc2UgYEByb2xsdXAvcGx1Z2luLXR5cGVzY3JpcHRgIG9yIGBAcm9sbHVwL3BsdWdpbi1zd2NgIG9yIGByb2xsdXAtcGx1Z2luLWVzYnVpbGRgID8gKi9cbiAgY29tcGlsZT86IElOYWlhYmxlUm9sbHVwQ29tcGlsZUNvbmZpZyB8IGZhbHNlO1xuICAvKiogVGhlIGBkLnRzYCBidWlsZCBvcHRpb25zLiAqL1xuICBkdHM/OiBSb2xsdXBEVFNPcHRpb25zIHwgZmFsc2U7XG4gIC8qKiBUaGUgYHVucGx1Z2luLXZ1ZWAgb3B0aW9ucy4gKi9cbiAgdnVlPzogUGFyYW1ldGVyczx0eXBlb2YgdnVlPlswXSB8IGZhbHNlO1xuICAvKiogVGhlIGBAcm9sbHVwL3BsdWdpbi1iYWJlbGAgb3B0aW9ucy4gKi9cbiAgYmFiZWw/OiBJTmFpYWJsZUJhYmVsT3B0aW9ucyB8IGZhbHNlO1xuICAvKiogVGhlIGBAcm9sbHVwL3BsdWdpbi10ZXJzZXJgIG9wdGlvbnMuICovXG4gIHRlcnNlcj86IFBhcmFtZXRlcnM8dHlwZW9mIHRlcnNlcj5bMF0gfCBmYWxzZTtcbiAgLyoqIFVzZSBzdHJpY3QuIEBkZWZhdWx0IHRydWUgKi9cbiAgc3RyaWN0PzogYm9vbGVhbjtcbiAgLyoqIFNvdXJjZSBtYXAuIEBkZWZhdWx0IGlubGluZSAqL1xuICBzb3VyY2VtYXA/OiBib29sZWFuIHwgXCJpbmxpbmVcIiB8IFwiaGlkZGVuXCI7XG4gIC8qKiBGcmVlIG92ZXJyaWRlIHJvbGx1cCBjb25maWcgKi9cbiAgb3ZlcnJpZGVzPzoge1xuICAgIC8qKiBUaGUgYEJ1aWxkYCBvcHRpb25zLiAqL1xuICAgIGJ1aWxkT3B0aW9ucz86IFJvbGx1cE9wdGlvbnM7XG4gICAgLyoqIFRoZSBgZC50c2AgYnVpbGQgb3B0aW9ucy4gKi9cbiAgICBkdHNPcHRpb25zPzogUm9sbHVwT3B0aW9ucztcbiAgfTtcbiAgLyoqIEdlbmVyYXRlIGEgc25hcHNob3QganNvbiBmaWxlIHdoZW4gYnVpbGRlZC4gKi9cbiAgc25hcHNob3Q/OiB7XG4gICAgLyoqIEVuYWJsZSBzbmFwc2hvdC4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgICBlbmFibGU6IGJvb2xlYW47XG4gICAgLyoqIFRoZSBzbmFwc2hvdCBmaWxlIHBhdGguIEBkZWZhdWx0IGByb2xsdXAuY29uZmlnLnNuYXBzaG90LSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfS5qc29uYCAqL1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gIH07XG4gIC8qKiBQcmVzZXJ2ZSBtb2R1bGVzLiBAZGVmYXVsdCB0cnVlICovXG4gIHByZXNlcnZlTW9kdWxlcz86IGJvb2xlYW47XG4gIC8qKiBFeHRlcm5hbCBkZXBlbmRlbmNpZXMuIEBkZWZhdWx0IFsvbm9kZV9tb2R1bGVzL10gKi9cbiAgZXh0ZXJuYWw/OiBFeHRlcm5hbE9wdGlvbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbmFpdXAoY29uZmlnOiBJTmFpYWJsZVJvbGx1cENvbmZpZyA9IHt9KTogUm9sbHVwT3B0aW9uc1tdIHtcbiAgY29uc3QgZGVmYXVsdHM6IElOYWlhYmxlUm9sbHVwQ29uZmlnID0ge1xuICAgIGlucHV0OiBcInNyYy9pbmRleC50c1wiLFxuICAgIG91dHB1dDogW1wiY2pzXCIsIFwiZXNtXCJdLFxuICAgIHN0cmljdDogdHJ1ZSxcbiAgICBzb3VyY2VtYXA6IFwiaW5saW5lXCIsXG4gICAgZGlyOiBcImRpc3RcIixcbiAgICBhbGlhczoge1xuICAgICAgZW50cmllczogW3sgZmluZDogXCJAXCIsIHJlcGxhY2VtZW50OiBqb2luKGN3ZCgpLCBcInNyY1wiKSB9XSxcbiAgICB9LFxuICAgIGNvbW1vbmpzOiB7fSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBleHRlbnNpb25zOiBbXCIubWpzXCIsIFwiLmpzXCIsIFwiLmpzb25cIiwgXCIubm9kZVwiLCAvKiDpmYTliqAgKi8gXCIudHNcIiwgXCIudHN4XCIsIFwiLmNqc1wiLCBcIi5qc3hcIiwgXCIubXRzXCIsIFwiLmN0c1wiXSxcbiAgICB9LFxuICAgIGNvbXBpbGU6IHtcbiAgICAgIHR5cGU6IFwiQHJvbGx1cC9wbHVnaW4tdHlwZXNjcmlwdFwiLFxuICAgICAgdHlwZXNjcmlwdDoge30sXG4gICAgfSxcbiAgICB2dWU6IHtcbiAgICAgIGluY2x1ZGU6IC9cXC52dWUkLyxcbiAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICB9LFxuICAgIGJhYmVsOiBmYWxzZSxcbiAgICB0ZXJzZXI6IGZhbHNlLFxuICAgIG92ZXJyaWRlczoge1xuICAgICAgYnVpbGRPcHRpb25zOiB7fSxcbiAgICAgIGR0c09wdGlvbnM6IHt9LFxuICAgIH0sXG4gICAgc25hcHNob3Q6IHtcbiAgICAgIGVuYWJsZTogZmFsc2UsXG4gICAgICBwYXRoOiBgcm9sbHVwLmNvbmZpZy5zbmFwc2hvdC0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0uanNvbmAsXG4gICAgfSxcbiAgICBwcmVzZXJ2ZU1vZHVsZXM6IHRydWUsXG4gICAgZXh0ZXJuYWw6IFsvbm9kZV9tb2R1bGVzL10sXG4gIH07XG5cbiAgY29uc3QgZmluYWxDb25maWcgPSBkZWZ1KGNvbmZpZywgZGVmYXVsdHMpO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZy5vdXRwdXQgJiYgQXJyYXkuaXNBcnJheShjb25maWcub3V0cHV0KSkgZmluYWxDb25maWcub3V0cHV0ID0gY29uZmlnLm91dHB1dDtcblxuICBjb25zdCBmaW5hbFBsdWdpbnM6IElucHV0UGx1Z2luT3B0aW9uW10gPSBbXTtcbiAgY29uc3QgZmluYWxPdXRwdXRQbHVnaW5zID0gW107XG5cbiAgaWYgKGZpbmFsQ29uZmlnLmFsaWFzICE9PSBmYWxzZSkgZmluYWxQbHVnaW5zLnB1c2goYWxpYXMoZmluYWxDb25maWcuYWxpYXMpKTtcbiAgaWYgKGZpbmFsQ29uZmlnLmNvbW1vbmpzICE9PSBmYWxzZSkgZmluYWxQbHVnaW5zLnB1c2goY29tbW9uanMoZmluYWxDb25maWcuY29tbW9uanMpKTtcbiAgaWYgKGZpbmFsQ29uZmlnLnJlc29sdmUgIT09IGZhbHNlKSBmaW5hbFBsdWdpbnMucHVzaChyZXNvbHZlKGZpbmFsQ29uZmlnLnJlc29sdmUpKTtcbiAgaWYgKGZpbmFsQ29uZmlnLnZ1ZSAhPT0gZmFsc2UpIGZpbmFsUGx1Z2lucy5wdXNoKHZ1ZShmaW5hbENvbmZpZy52dWUpKTtcbiAgaWYgKGZpbmFsQ29uZmlnLmJhYmVsICE9PSBmYWxzZSkge1xuICAgIGlmIChmaW5hbENvbmZpZy5iYWJlbC5pbnB1dE9wdGlvbnMgIT09IGZhbHNlKSBmaW5hbFBsdWdpbnMucHVzaChiYWJlbChmaW5hbENvbmZpZy5iYWJlbC5pbnB1dE9wdGlvbnMpKTtcbiAgICBpZiAoZmluYWxDb25maWcuYmFiZWwub3V0cHV0T3B0aW9ucyAhPT0gZmFsc2UpIGZpbmFsT3V0cHV0UGx1Z2lucy5wdXNoKGdldEJhYmVsT3V0cHV0UGx1Z2luKGZpbmFsQ29uZmlnLmJhYmVsLm91dHB1dE9wdGlvbnMpKTtcbiAgfVxuXG4gIGlmIChmaW5hbENvbmZpZy5jb21waWxlICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGNvbXBsaWVPcHRpb25zID0gZmluYWxDb25maWcuY29tcGlsZSBhcyBJTmFpYWJsZVJvbGx1cENvbXBpbGVDb25maWc7XG4gICAgaWYgKGNvbXBsaWVPcHRpb25zLnR5cGUgPT09IFwiQHJvbGx1cC9wbHVnaW4tc3djXCIpIGZpbmFsUGx1Z2lucy5wdXNoKHN3Yyhjb21wbGllT3B0aW9ucy5zd2MpKTtcbiAgICBlbHNlIGlmIChjb21wbGllT3B0aW9ucy50eXBlID09PSBcIkByb2xsdXAvcGx1Z2luLXR5cGVzY3JpcHRcIikgZmluYWxQbHVnaW5zLnB1c2godHlwZXNjcmlwdChjb21wbGllT3B0aW9ucy50eXBlc2NyaXB0KSk7XG4gICAgZWxzZSBpZiAoY29tcGxpZU9wdGlvbnMudHlwZSA9PT0gXCJyb2xsdXAtcGx1Z2luLWVzYnVpbGRcIikgZmluYWxQbHVnaW5zLnB1c2goZXNidWlsZChjb21wbGllT3B0aW9ucy5lc2J1aWxkKSk7XG4gIH1cblxuICBpZiAoZmluYWxDb25maWcudGVyc2VyICE9PSBmYWxzZSkgZmluYWxPdXRwdXRQbHVnaW5zLnB1c2godGVyc2VyKGZpbmFsQ29uZmlnLnRlcnNlcikpO1xuXG4gIGNvbnN0IGRlZmF1bHRDb21wdXRlZEJ1aWxkT3B0aW9uczogUm9sbHVwT3B0aW9ucyA9IHtcbiAgICBpbnB1dDogZmluYWxDb25maWcuaW5wdXQsXG4gICAgZXh0ZXJuYWw6IGZpbmFsQ29uZmlnLmV4dGVybmFsLFxuICAgIHBsdWdpbnM6IFsuLi5maW5hbFBsdWdpbnNdLFxuICAgIG91dHB1dDogWy4uLm5ldyBTZXQoZmluYWxDb25maWcub3V0cHV0KV0ubWFwKChmb3JtYXQpID0+ICh7XG4gICAgICBmb3JtYXQsXG4gICAgICBkaXI6IGpvaW4oZmluYWxDb25maWcuZGlyLCBmb3JtYXQpLFxuICAgICAgZW50cnlGaWxlTmFtZXM6IGBbbmFtZV0uJHtmb3JtYXQgPT09IFwiY2pzXCIgPyBcImNqc1wiIDogXCJtanNcIn1gLFxuICAgICAgc3RyaWN0OiBmaW5hbENvbmZpZy5zdHJpY3QsXG4gICAgICBzb3VyY2VtYXA6IGZpbmFsQ29uZmlnLnNvdXJjZW1hcCxcbiAgICAgIHByZXNlcnZlTW9kdWxlczogZmluYWxDb25maWcucHJlc2VydmVNb2R1bGVzLFxuICAgICAgcGx1Z2luczogWy4uLmZpbmFsT3V0cHV0UGx1Z2luc10sXG4gICAgfSkpLFxuICB9O1xuXG4gIGxldCBkZWZhdWx0Q29tcHV0ZWREdHNPcHRpb25zOiBSb2xsdXBPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBpZiAoZmluYWxDb25maWcuZHRzICE9PSBmYWxzZSkge1xuICAgIGRlZmF1bHRDb21wdXRlZER0c09wdGlvbnMgPSB7XG4gICAgICBpbnB1dDogZmluYWxDb25maWcuaW5wdXQsXG4gICAgICBleHRlcm5hbDogZmluYWxDb25maWcuZXh0ZXJuYWwsXG4gICAgICBwbHVnaW5zOiBbLi4uZmluYWxQbHVnaW5zLCBkdHMoZmluYWxDb25maWcuZHRzKV0sXG4gICAgICBvdXRwdXQ6IFtcbiAgICAgICAgLi4uWy4uLm5ldyBTZXQoZmluYWxDb25maWcub3V0cHV0KV0ubWFwKFxuICAgICAgICAgIChmb3JtYXQpID0+XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICAgIGRpcjogam9pbihmaW5hbENvbmZpZy5kaXIsIGZvcm1hdCksXG4gICAgICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiBgW25hbWVdLmQuJHtmb3JtYXQgPT09IFwiY2pzXCIgPyBcImN0c1wiIDogXCJtdHNcIn1gLFxuICAgICAgICAgICAgICBzdHJpY3Q6IGZpbmFsQ29uZmlnLnN0cmljdCxcbiAgICAgICAgICAgICAgc291cmNlbWFwOiBmaW5hbENvbmZpZy5zb3VyY2VtYXAsXG4gICAgICAgICAgICAgIHByZXNlcnZlTW9kdWxlczogZmluYWxDb25maWcucHJlc2VydmVNb2R1bGVzLFxuICAgICAgICAgICAgfSBhcyBPdXRwdXRPcHRpb25zKVxuICAgICAgICApLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyOiBqb2luKGZpbmFsQ29uZmlnLmRpciwgXCJ0eXBlc1wiKSxcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJbbmFtZV0uZC50c1wiLFxuICAgICAgICAgIHN0cmljdDogZmluYWxDb25maWcuc3RyaWN0LFxuICAgICAgICAgIHNvdXJjZW1hcDogZmluYWxDb25maWcuc291cmNlbWFwLFxuICAgICAgICAgIHByZXNlcnZlTW9kdWxlczogZmluYWxDb25maWcucHJlc2VydmVNb2R1bGVzLFxuICAgICAgICB9IGFzIE91dHB1dE9wdGlvbnMsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBmaW5hbEJ1aWxkT3B0aW9ucyA9IGRlZnUoZmluYWxDb25maWcub3ZlcnJpZGVzLmJ1aWxkT3B0aW9ucywgZGVmYXVsdENvbXB1dGVkQnVpbGRPcHRpb25zKTtcbiAgY29uc3QgZmluYWxEdHNPcHRpb25zID0gZGVmYXVsdENvbXB1dGVkRHRzT3B0aW9ucyA/IGRlZnUoZmluYWxDb25maWcub3ZlcnJpZGVzLmR0c09wdGlvbnMsIGRlZmF1bHRDb21wdXRlZER0c09wdGlvbnMpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHJldHVybnMgPSBmaW5hbER0c09wdGlvbnMgPyBbZmluYWxCdWlsZE9wdGlvbnMsIGZpbmFsRHRzT3B0aW9uc10gOiBbZmluYWxCdWlsZE9wdGlvbnNdO1xuXG4gIGlmIChmaW5hbENvbmZpZy5zbmFwc2hvdC5lbmFibGUgJiYgZmluYWxDb25maWcuc25hcHNob3QucGF0aCkgd3JpdGVGaWxlKGZpbmFsQ29uZmlnLnNuYXBzaG90LnBhdGgsIEpTT04uc3RyaW5naWZ5KHJldHVybnMpKTtcblxuICByZXR1cm4gcmV0dXJucztcbn1cblxuZXhwb3J0ICogZnJvbSBcIi4vcHJlc2V0LWFwcFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJlc2V0LWxpYlwiO1xuIl0sIm5hbWVzIjpbImFsaWFzIiwiY29tbW9uanMiLCJyZXNvbHZlIiwidnVlIiwiYmFiZWwiLCJzd2MiLCJ0eXBlc2NyaXB0IiwiZXNidWlsZCIsImR0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QmdCLFNBQUEsU0FBUyxDQUFDLElBQVksRUFBRSxPQUFlLEVBQUE7O0FBRXJELElBQUEsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLElBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs7QUFHaEUsSUFBQSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQUUsUUFBQSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUc3QyxJQUFBLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUE2RWEsU0FBVSxLQUFLLENBQUMsU0FBK0IsRUFBRSxFQUFBO0FBQzdELElBQUEsTUFBTSxRQUFRLEdBQXlCO0FBQ3JDLFFBQUEsS0FBSyxFQUFFLGNBQWM7QUFDckIsUUFBQSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxFQUFFLElBQUk7QUFDWixRQUFBLFNBQVMsRUFBRSxRQUFRO0FBQ25CLFFBQUEsR0FBRyxFQUFFLE1BQU07QUFD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