UNPKG

@naiable/rollup-config

Version:

Use rollup like tsup, but opinionated my way.

143 lines (140 loc) 24.7 kB
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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