From ffad9e288e757c4d36fe4998e1a498abca211e21 Mon Sep 17 00:00:00 2001 From: exoego Date: Mon, 6 May 2024 14:07:21 +0900 Subject: [PATCH 1/4] Implement top-ten largest paths visualization --- dist/index.mjs | 138 ++++++++++++++++++++++++++++++++++++++--- src/compare.ts | 164 +++++++++++++++++++++++++++++++++++++++++++++---- src/types.ts | 9 +++ 3 files changed, 291 insertions(+), 20 deletions(-) diff --git a/dist/index.mjs b/dist/index.mjs index 314ccd7..e2d4ad1 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -165,6 +165,33 @@ function getInput(name) { } // src/compare.ts +function buildTree(input) { + const root = { name: "", path: "", value: 0, children: [] }; + for (const [filePath, { bytesInOutput }] of Object.entries(input)) { + const directories = filePath.split("/"); + buildNode(root, directories, bytesInOutput); + } + return root; +} +function buildNode(node, paths, value) { + const first = paths.shift(); + if (first === void 0) { + node.value += value; + return; + } + let child = node.children.find((child2) => child2.name === first); + if (!child) { + child = { + name: first, + path: `${node.path}/${first}`.replace(/^\//, ""), + value: 0, + children: [] + }; + node.children.push(child); + } + node.value += value; + buildNode(child, paths, value); +} function compare(input) { let hasAnyChange = false; let output = `## \u{1F4E6} esbuild Bundle Analysis for ${input.name} @@ -186,6 +213,18 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe } catch (e) { base = {}; } + const trees = /* @__PURE__ */ new Map(); + for (const metafileRelPath of input.metafiles) { + const metafile = loadMetaFile(path.join(process.cwd(), metafileRelPath)); + for (const [outfile, buildMeta] of Object.entries(metafile.outputs)) { + const tree = buildTree(buildMeta.inputs); + trees.set(`${metafileRelPath} -> ${outfile}`, tree); + fs2.writeFileSync( + path.join(process.cwd(), input.analyzerDirectory, "tree.json"), + JSON.stringify(tree, null, 2) + ); + } + } const allOutFiles = [ .../* @__PURE__ */ new Set([...Object.keys(current), ...Object.keys(base)]) ].sort(); @@ -194,11 +233,14 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe const baseStats = base[outfile]; if (!currentStats) { hasAnyChange = true; - return { ...baseStats, diff: -1, remark: "deleted" }; + return { ...baseStats, diff: -1, remark: "deleted", tree: void 0 }; } + const tree = trees.get( + `${currentStats.metafile} -> ${currentStats.outfile}` + ); if (!baseStats) { hasAnyChange = true; - return { ...currentStats, diff: -1, remark: "added" }; + return { ...currentStats, diff: -1, remark: "added", tree }; } const diff = currentStats.bytes - baseStats.bytes; const increase = !!Math.sign(diff); @@ -208,11 +250,13 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe return { ...currentStats, diff, + tree, remark: increase ? "increased" : "decreased" }; }); if (hasAnyChange) { output += markdownTable(comparison, input.percentExtraAttention); + output += fileSizeTable(comparison); if (input.showDetails) { output += `
@@ -232,11 +276,6 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe output += "This PR introduced no changes to the esbuild bundle! \u{1F64C}"; } output += ``; - console.dir({ - input, - hasAnyChange, - output - }); fs2.mkdirSync(path.join(process.cwd(), input.analyzerDirectory), { recursive: true }); @@ -267,6 +306,89 @@ Meta File | Out File | Size (raw) | Note ----------|----------|-----------:|------ ${rows}`; } +function findLargeDirectories(root) { + const nodes = []; + const queue = [ + { node: root, depth: 0 } + ]; + while (queue.length > 0) { + const shift = queue.shift(); + if (!shift) { + break; + } + const { node, depth } = shift; + if (depth === 3) { + nodes.push(node); + continue; + } + if (node.children.length === 0) { + nodes.push(node); + } else { + for (const item of node.children) { + queue.push({ node: item, depth: depth + 1 }); + } + } + } + const largeNodes = nodes.sort((a, b) => b.value - a.value).slice(0, 10); + return { + largeNodes, + hasOther: nodes.length > 10 + }; +} +function fixedPercent(n, d) { + return Number.parseFloat((n / d * 100).toFixed(1)); +} +function fileSizeTable(data) { + if (data.length === 0) { + return ""; + } + let output = ""; + output += "
\n"; + output += "Top ten largest paths\n"; + for (const d of data) { + output += "\n"; + output += `## Meta file: ${d.metafile}, Out file: ${d.outfile} +`; + if (!d.tree) { + output += "\uFE0F\uFE0F\u{1F5D1}\uFE0FDeleted\n"; + continue; + } + output += "| Path | Size |\n"; + output += "|------|-------|\n"; + const totalSize = d.tree.value; + const { largeNodes, hasOther } = findLargeDirectories(d.tree); + for (const { path: path3, value } of largeNodes) { + const percent = fixedPercent(value, totalSize); + output += `| ${path3} | ${renderBar(percent, value)} | +`; + } + if (hasOther) { + const otherSize = totalSize - largeNodes[0].value; + const otherPercent = fixedPercent(otherSize, totalSize); + output += `| (other) | ${renderBar(otherPercent, otherSize)} | +`; + } + } + output += "
\n"; + return output; +} +function renderBar(percent, bytes) { + const bar = progress(percent / 100); + return `\${{\\color{Goldenrod}{ ${bar} }}}$ ${percent.toFixed( + 1 + )}%, ${filesize2(bytes)}`; +} +var blocks = ["", "\u258F", "\u258E", "\u258D", "\u258C", "\u258B", "\u258A", "\u2589", "\u2588"]; +var progression = 1 / (blocks.length - 1); +function progress(value, length = 25, vmin = 0, vmax = 1) { + const v = value * length; + const integerPart = Math.floor(v); + const fractionalPart = v - integerPart; + const i = Math.round( + progression * Math.floor(fractionalPart / progression) / progression + ); + return "\u2588".repeat(integerPart) + blocks[i]; +} function renderSize(d) { return filesize2(d.bytes); } @@ -393,4 +515,4 @@ filesize/dist/filesize.esm.js: * @version 10.1.1 *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb21wYXJlLnRzIiwgIi4uL3NyYy91dGlscy50cyIsICIuLi9zcmMvcmVwb3J0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBjb21wYXJlIH0gZnJvbSBcIi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgcmVwb3J0IH0gZnJvbSBcIi4vcmVwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0SW5wdXQgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBnZXRPcHRpb25zKCk6IE9wdGlvbnMge1xuXHRjb25zdCByYXdNZXRhZmlsZXMgPSBnZXRJbnB1dChcIm1ldGFmaWxlc1wiKTtcblx0aWYgKCFyYXdNZXRhZmlsZXMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtZXRhZmlsZXMgaXMgbm90IHNwZWNpZmllZFwiKTtcblx0fVxuXHRjb25zdCBuYW1lID0gZ2V0SW5wdXQoXCJuYW1lXCIpO1xuXHRpZiAoIW5hbWUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGlzIG5vdCBzcGVjaWZpZWRcIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRwZXJjZW50RXh0cmFBdHRlbnRpb246IE51bWJlci5wYXJzZUludChcblx0XHRcdGdldElucHV0KFwicGVyY2VudF9leHRyYV9hdHRlbnRpb25cIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRzaG93RGV0YWlsczogW1widHJ1ZVwiLCBcIlRydWVcIiwgXCJUUlVFXCJdLmluY2x1ZGVzKFxuXHRcdFx0Z2V0SW5wdXQoXCJzaG93X2RldGFpbHNcIikgfHwgXCJ0cnVlXCIsXG5cdFx0KSxcblx0XHRpbmNsdWRlRXh0ZW5zaW9uczogKFxuXHRcdFx0Z2V0SW5wdXQoXCJpbmNsdWRlX2V4dGVuc2lvbnNcIikgfHwgXCIuanMsLm1qcywuY2pzXCJcblx0XHQpLnNwbGl0KFwiLFwiKSxcblx0XHRuYW1lLFxuXHRcdGFuYWx5emVyRGlyZWN0b3J5OiBnZXRJbnB1dChcImFuYWx5emVfZGlyZWN0b3J5XCIpIHx8IFwiLmFuYWx5emVyXCIsXG5cdFx0bWV0YWZpbGVzOiByYXdNZXRhZmlsZXMuc3BsaXQoXCIsXCIpLFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuKG9wdGlvbnM6IE9wdGlvbnMgPSBnZXRPcHRpb25zKCkpOiB2b2lkIHtcblx0cmVwb3J0KG9wdGlvbnMpO1xuXHRjb21wYXJlKG9wdGlvbnMpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEudXJsID09PSBwYXRoVG9GaWxlVVJMKHByb2Nlc3MuYXJndlsxXSkuaHJlZikge1xuXHRydW4oKTtcbn1cbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVzaXplIGFzIG9yaWdpbmFsRmlsZXNpemUgfSBmcm9tIFwiZmlsZXNpemVcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGFyZVJlc3VsdCwgT3B0aW9ucywgUmVwb3J0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGxvYWRBbmFseXNpc0pzb24gfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShpbnB1dDogT3B0aW9ucyk6IHZvaWQge1xuXHRsZXQgaGFzQW55Q2hhbmdlID0gZmFsc2U7XG5cdGxldCBvdXRwdXQgPSBgIyMgXHVEODNEXHVEQ0U2IGVzYnVpbGQgQnVuZGxlIEFuYWx5c2lzIGZvciAke2lucHV0Lm5hbWV9XG5cblRoaXMgYW5hbHlzaXMgd2FzIGdlbmVyYXRlZCBieSBbZXNidWlsZC1idW5kbGUtYW5hbHl6ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9leG9lZ28vZXNidWlsZC1idW5kbGUtYW5hbHl6ZXIpLiBcdUQ4M0VcdUREMTZcbmA7XG5cblx0Y29uc3QgY3VycmVudCA9IGxvYWRBbmFseXNpc0pzb24oXG5cdFx0cGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGlucHV0LmFuYWx5emVyRGlyZWN0b3J5LCBcImJ1bmRsZV9hbmFseXNpcy5qc29uXCIpLFxuXHQpO1xuXHRsZXQgYmFzZTogUmVwb3J0O1xuXHR0cnkge1xuXHRcdGJhc2UgPSBsb2FkQW5hbHlzaXNKc29uKFxuXHRcdFx0cGF0aC5qb2luKFxuXHRcdFx0XHRwcm9jZXNzLmN3ZCgpLFxuXHRcdFx0XHRpbnB1dC5hbmFseXplckRpcmVjdG9yeSxcblx0XHRcdFx0XCJiYXNlL2J1bmRsZS9idW5kbGVfYW5hbHlzaXMuanNvblwiLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YmFzZSA9IHt9O1xuXHR9XG5cblx0Y29uc3QgYWxsT3V0RmlsZXM6IHN0cmluZ1tdID0gW1xuXHRcdC4uLm5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGN1cnJlbnQpLCAuLi5PYmplY3Qua2V5cyhiYXNlKV0pLFxuXHRdLnNvcnQoKTtcblx0Y29uc3QgY29tcGFyaXNvbjogQXJyYXk8Q29tcGFyZVJlc3VsdD4gPSBhbGxPdXRGaWxlcy5tYXAoKG91dGZpbGUpID0+IHtcblx0XHRjb25zdCBjdXJyZW50U3RhdHMgPSBjdXJyZW50W291dGZpbGVdO1xuXHRcdGNvbnN0IGJhc2VTdGF0cyA9IGJhc2Vbb3V0ZmlsZV07XG5cblx0XHRpZiAoIWN1cnJlbnRTdGF0cykge1xuXHRcdFx0aGFzQW55Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdC8vIGRlbGV0ZWQgb3V0IGZpbGVcblx0XHRcdHJldHVybiB7IC4uLmJhc2VTdGF0cywgZGlmZjogLTEsIHJlbWFyazogXCJkZWxldGVkXCIgfTtcblx0XHR9XG5cdFx0aWYgKCFiYXNlU3RhdHMpIHtcblx0XHRcdGhhc0FueUNoYW5nZSA9IHRydWU7XG5cdFx0XHQvLyBuZXcgb3V0IGZpbGVcblx0XHRcdHJldHVybiB7IC4uLmN1cnJlbnRTdGF0cywgZGlmZjogLTEsIHJlbWFyazogXCJhZGRlZFwiIH07XG5cdFx0fVxuXHRcdGNvbnN0IGRpZmYgPSBjdXJyZW50U3RhdHMuYnl0ZXMgLSBiYXNlU3RhdHMuYnl0ZXM7XG5cdFx0Y29uc3QgaW5jcmVhc2UgPSAhIU1hdGguc2lnbihkaWZmKTtcblx0XHRpZiAoZGlmZiAhPT0gMCkge1xuXHRcdFx0aGFzQW55Q2hhbmdlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmN1cnJlbnRTdGF0cyxcblx0XHRcdGRpZmYsXG5cdFx0XHRyZW1hcms6IGluY3JlYXNlID8gXCJpbmNyZWFzZWRcIiA6IFwiZGVjcmVhc2VkXCIsXG5cdFx0fTtcblx0fSk7XG5cblx0aWYgKGhhc0FueUNoYW5nZSkge1xuXHRcdG91dHB1dCArPSBtYXJrZG93blRhYmxlKGNvbXBhcmlzb24sIGlucHV0LnBlcmNlbnRFeHRyYUF0dGVudGlvbik7XG5cblx0XHRpZiAoaW5wdXQuc2hvd0RldGFpbHMpIHtcblx0XHRcdG91dHB1dCArPSBgXFxuPGRldGFpbHM+XG48c3VtbWFyeT5EZXRhaWxzPC9zdW1tYXJ5PlxuPHA+TmV4dCB0byB0aGUgc2l6ZSBpcyBob3cgbXVjaCB0aGUgc2l6ZSBoYXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBjb21wYXJlZCB3aXRoIHRoZSBiYXNlIGJyYW5jaCBvZiB0aGlzIFBSLjwvcD5cbjx1bD5cbjxsaT5cdTIwM0NcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGJ5ICR7aW5wdXQucGVyY2VudEV4dHJhQXR0ZW50aW9ufSUgb3IgbW9yZS4gU3BlY2lhbCBhdHRlbnRpb24gc2hvdWxkIGJlIGdpdmVuIHRvIHRoaXMuPC9saT5cbjxsaT5cdTI2QTBcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGluIGFjY2VwdGFibGUgcmFuZ2UgKGxvd2VyIHRoYW4gJHtpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb259JSkuPC9saT5cbjxsaT5cdTI3MDU6IE5vIGNoYW5nZSBvciBldmVuIGRvd25zaXplZC48L2xpPlxuPGxpPlx1RDgzRFx1REREMVx1RkUwRjogVGhlIG91dCBmaWxlIGlzIGRlbGV0ZWQ6IG5vdCBmb3VuZCBpbiBiYXNlIGJyYW5jaC48L2xpPlxuPGxpPlx1RDgzQ1x1REQ5NTogVGhlIG91dCBmaWxlIGlzIG5ld2x5IGZvdW5kOiB3aWxsIGJlIGFkZGVkIHRvIGJhc2UgYnJhbmNoLjwvbGk+XG48L3VsPlxuPC9kZXRhaWxzPlxcbmA7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG91dHB1dCArPSBcIlRoaXMgUFIgaW50cm9kdWNlZCBubyBjaGFuZ2VzIHRvIHRoZSBlc2J1aWxkIGJ1bmRsZSEgXHVEODNEXHVERTRDXCI7XG5cdH1cblxuXHQvLyB3ZSBhZGQgdGhpcyB0YWcgc28gdGhhdCBvdXIgYWN0aW9uIGNhbiBiZSBhYmxlIHRvIGVhc2lseSBhbmRcblx0Ly8gY29uc2lzdGVudGx5IGZpbmQgdGhlIHJpZ2h0IGNvbW1lbnQgdG8gZWRpdCBhcyBtb3JlIGNvbW1pdHMgYXJlIHB1c2hlZC5cblx0b3V0cHV0ICs9IGA8IS0tIF9fRVNCVUlMRF9CVU5ETEVfJHtpbnB1dC5uYW1lfSAtLT5gO1xuXG5cdC8vIExvZyBtb3N0bHkgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy5cblx0Ly8gVGhpcyB3aWxsIHNob3cgdXAgaW4gdGhlIGdpdGh1YiBhY3Rpb25zIGNvbnNvbGUuXG5cdGNvbnNvbGUuZGlyKHtcblx0XHRpbnB1dCxcblx0XHRoYXNBbnlDaGFuZ2UsXG5cdFx0b3V0cHV0LFxuXHR9KTtcblxuXHQvLyBXcml0ZSB0aGUgb3V0cHV0IHRvIGEgZmlsZSB3aGljaCBpcyBsYXRlciByZWFkIGluXG5cdC8vIGFzIGNvbW1lbnQgY29udGVudHMgYnkgdGhlIGFjdGlvbnMgd29ya2Zsb3cuXG5cdGZzLm1rZGlyU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgaW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnkpLCB7XG5cdFx0cmVjdXJzaXZlOiB0cnVlLFxuXHR9KTtcblx0ZnMud3JpdGVGaWxlU3luYyhcblx0XHRwYXRoLmpvaW4oXG5cdFx0XHRwcm9jZXNzLmN3ZCgpLFxuXHRcdFx0aW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksXG5cdFx0XHRcImJ1bmRsZV9hbmFseXNpc19jb21tZW50LnR4dFwiLFxuXHRcdCksXG5cdFx0b3V0cHV0LnRyaW0oKSxcblx0KTtcbn1cblxuZnVuY3Rpb24gZmlsZXNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG5cdHJldHVybiBvcmlnaW5hbEZpbGVzaXplKGJ5dGVzLCB7XG5cdFx0c3BhY2VyOiBcIlx1MDBBMFwiLFxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbWFya2Rvd25UYWJsZShcblx0ZGF0YTogQXJyYXk8Q29tcGFyZVJlc3VsdD4sXG5cdHJlZFRocmVzaG9sZDogbnVtYmVyLFxuKTogc3RyaW5nIHtcblx0Y29uc3Qgcm93cyA9IGRhdGFcblx0XHQubWFwKChkKSA9PiB7XG5cdFx0XHRyZXR1cm4gYCR7ZC5tZXRhZmlsZX0gfCAke2Qub3V0ZmlsZX0gfCAke3JlbmRlclNpemUoZCl9IHwgJHtyZW5kZXJOb3RlKFxuXHRcdFx0XHRkLFxuXHRcdFx0XHRyZWRUaHJlc2hvbGQsXG5cdFx0XHQpfVxcbmA7XG5cdFx0fSlcblx0XHQuam9pbihcIlwiKTtcblxuXHRyZXR1cm4gYFxuTWV0YSBGaWxlIHwgT3V0IEZpbGUgIHwgU2l6ZSAocmF3KSB8IE5vdGUgXG4tLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS06fC0tLS0tLVxuJHtyb3dzfWA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclNpemUoZDogQ29tcGFyZVJlc3VsdCk6IHN0cmluZyB7XG5cdHJldHVybiBmaWxlc2l6ZShkLmJ5dGVzKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTm90ZShkOiBDb21wYXJlUmVzdWx0LCByZWRUaHJlc2hvbGQ6IG51bWJlcik6IHN0cmluZyB7XG5cdGlmIChkLnJlbWFyayA9PT0gXCJkZWxldGVkXCIpIHtcblx0XHRyZXR1cm4gXCJcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlZFwiO1xuXHR9XG5cdGlmIChkLnJlbWFyayA9PT0gXCJhZGRlZFwiKSB7XG5cdFx0cmV0dXJuIFwiXHVEODNDXHVERDk1IEFkZGVkXCI7XG5cdH1cblx0aWYgKGQuZGlmZikge1xuXHRcdGNvbnN0IHBlcmNlbnRDaGFuZ2UgPSAoZC5kaWZmIC8gZC5ieXRlcykgKiAxMDA7XG5cdFx0cmV0dXJuIGAke3JlbmRlclN0YXR1c0luZGljYXRvcihwZXJjZW50Q2hhbmdlLCByZWRUaHJlc2hvbGQpfSR7ZmlsZXNpemUoXG5cdFx0XHRkLmRpZmYsXG5cdFx0KX0gKCR7c2lnbihwZXJjZW50Q2hhbmdlKX0ke3BlcmNlbnRDaGFuZ2UudG9GaXhlZCgxKX0lKWA7XG5cdH1cblx0cmV0dXJuIFwiXHUyNzA1ICBObyBjaGFuZ2VcIjtcbn1cblxuZnVuY3Rpb24gc2lnbihudW06IG51bWJlcik6IHN0cmluZyB7XG5cdHJldHVybiBudW0gPCAwID8gXCJcIiA6IFwiK1wiO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdGF0dXNJbmRpY2F0b3IoXG5cdHBlcmNlbnRDaGFuZ2U6IG51bWJlcixcblx0cmVkVGhyZXNob2xkOiBudW1iZXIsXG4pOiBzdHJpbmcge1xuXHRsZXQgcmVzOiBzdHJpbmc7XG5cdGlmIChwZXJjZW50Q2hhbmdlID4gMCAmJiBwZXJjZW50Q2hhbmdlIDwgcmVkVGhyZXNob2xkKSB7XG5cdFx0cmVzID0gXCJcdTI2QTBcdUZFMEZcIjtcblx0fSBlbHNlIGlmIChwZXJjZW50Q2hhbmdlID49IHJlZFRocmVzaG9sZCkge1xuXHRcdHJlcyA9IFwiXHUyMDNDXHVGRTBGXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmVzID0gXCJcdTI3MDUgXCI7XG5cdH1cblx0cmV0dXJuIGAke3Jlc30gJHtzaWduKHBlcmNlbnRDaGFuZ2UpfWA7XG59XG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5cbmltcG9ydCB0eXBlIHsgTWV0YWZpbGUgfSBmcm9tIFwiZXNidWlsZFwiO1xuaW1wb3J0IHR5cGUgeyBSZXBvcnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBsb2FkSnNvbkZpbGUocGF0aDogc3RyaW5nKSB7XG5cdHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoKS50b1N0cmluZyhcInV0Zi04XCIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNZXRhRmlsZShwYXRoOiBzdHJpbmcpOiBNZXRhZmlsZSB7XG5cdHJldHVybiBsb2FkSnNvbkZpbGUocGF0aCkgYXMgTWV0YWZpbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQW5hbHlzaXNKc29uKHBhdGg6IHN0cmluZyk6IFJlcG9ydCB7XG5cdHJldHVybiBsb2FkSnNvbkZpbGUocGF0aCkgYXMgUmVwb3J0O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvODFhNzNhYmE4YmVkZDUzMmY2ZWRkY2M0MWVkM2EwZmFkOGIxY2ZlYi9wYWNrYWdlcy9jb3JlL3NyYy9jb3JlLnRzI0wxMjZcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB2YWwgPSBwcm9jZXNzLmVudltgSU5QVVRfJHtuYW1lLnRvVXBwZXJDYXNlKCl9YF0gfHwgXCJcIjtcblx0cmV0dXJuIHZhbC50cmltKCk7XG59XG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5cbmltcG9ydCB0eXBlIHsgT3B0aW9ucywgUmVwb3J0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGxvYWRNZXRhRmlsZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBvcnQoaW5wdXQ6IE9wdGlvbnMpOiB2b2lkIHtcblx0Y29uc3QgYWxsUGFnZVNpemVzID0gZ2V0QWxsUGFnZVNpemVzKGlucHV0KTtcblx0ZnMubWtkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSksIHtcblx0XHRyZWN1cnNpdmU6IHRydWUsXG5cdH0pO1xuXHRjb25zdCByZXN1bHRKc29uUGF0aCA9IHBhdGguam9pbihcblx0XHRwcm9jZXNzLmN3ZCgpLFxuXHRcdGlucHV0LmFuYWx5emVyRGlyZWN0b3J5LFxuXHRcdFwiYnVuZGxlX2FuYWx5c2lzLmpzb25cIixcblx0KTtcblx0ZnMud3JpdGVGaWxlU3luYyhyZXN1bHRKc29uUGF0aCwgSlNPTi5zdHJpbmdpZnkoYWxsUGFnZVNpemVzLCBudWxsLCAyKSk7XG5cdGNvbnNvbGUubG9nKGBXcm90ZSAke3Jlc3VsdEpzb25QYXRofWApO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxQYWdlU2l6ZXMoaW5wdXQ6IE9wdGlvbnMpOiBSZXBvcnQge1xuXHRjb25zdCBhY2M6IFJlcG9ydCA9IHt9O1xuXHRyZXR1cm4gaW5wdXQubWV0YWZpbGVzLnJlZHVjZSgoYWNjLCBtZXRhZmlsZSkgPT4ge1xuXHRcdGNvbnN0IG1ldGFGaWxlUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBtZXRhZmlsZSk7XG5cdFx0dHJ5IHtcblx0XHRcdGZzLmFjY2Vzc1N5bmMobWV0YUZpbGVQYXRoLCBmcy5jb25zdGFudHMuUl9PSyk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHRgTm8gbWV0YSBmaWxlIGZvdW5kIGF0IFwiJHttZXRhRmlsZVBhdGh9XCIgLSBhIHBhdGggdG8gbWV0YSBmaWxlIG1heSBiZSB3cm9uZywgb3IgZXNidWlsZCBpcyBub3QgZXhlY3V0ZWQuYCxcblx0XHRcdCk7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbWV0YUZpbGVKc29uID0gbG9hZE1ldGFGaWxlKG1ldGFGaWxlUGF0aCk7XG5cdFx0T2JqZWN0LmVudHJpZXMobWV0YUZpbGVKc29uLm91dHB1dHMpLnJlZHVjZSgoYWNjLCBvdXRwdXQpID0+IHtcblx0XHRcdGNvbnN0IFtvdXRmaWxlLCBidWlsZE1ldGFdID0gb3V0cHV0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhaW5wdXQuaW5jbHVkZUV4dGVuc2lvbnMuc29tZSgoZXh0KSA9PlxuXHRcdFx0XHRcdG91dGZpbGUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpLFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGFjYztcblx0XHRcdH1cblx0XHRcdGFjY1tgJHttZXRhZmlsZX0gLT4gJHtvdXRmaWxlfWBdID0ge1xuXHRcdFx0XHRieXRlczogYnVpbGRNZXRhLmJ5dGVzLFxuXHRcdFx0XHRtZXRhZmlsZSxcblx0XHRcdFx0b3V0ZmlsZSxcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gYWNjO1xuXHRcdH0sIGFjYyk7XG5cdFx0cmV0dXJuIGFjYztcblx0fSwgYWNjKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLHFCQUFxQjs7O0FDQTlCLE9BQU9BLFNBQVE7QUFDZixPQUFPLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRGpCLE9BQU8sUUFBUTtBQUtmLFNBQVMsYUFBYUMsT0FBYztBQUNuQyxTQUFPLEtBQUssTUFBTSxHQUFHLGFBQWFBLEtBQUksRUFBRSxTQUFTLE9BQU8sQ0FBQztBQUMxRDtBQUVPLFNBQVMsYUFBYUEsT0FBd0I7QUFDcEQsU0FBTyxhQUFhQSxLQUFJO0FBQ3pCO0FBRU8sU0FBUyxpQkFBaUJBLE9BQXNCO0FBQ3RELFNBQU8sYUFBYUEsS0FBSTtBQUN6QjtBQUdPLFNBQVMsU0FBUyxNQUFzQjtBQUM5QyxRQUFNLE1BQU0sUUFBUSxJQUFJLFNB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QU8sU0FBUyxNQUFNO0FBQzVCLE1BQUksQ0FBQyxNQUFNO0FBQ1YsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsRUFDeEM7QUFDQSxTQUFPO0FBQUEsSUFDTix1QkFBdUIsT0FBTztBQUFBLE1BQzdCLFNBQVMseUJBQXlCLEtBQUs7QUFBQSxNQUN2QztBQUFBLElBQ0Q7QUFBQSxJQUNBLGFBQWEsQ0FBQyxRQUFRLFFBQVEsTUFBTSxFQUFFO0FBQUEsTUFDckMsU0FBUyxjQUFjLEtBQUs7QUFBQSxJQUM3QjtBQUFBLElBQ0Esb0JBQ0MsU0FBUyxvQkFBb0IsS0FBSyxpQkFDakMsTUFBTSxHQUFHO0FBQUEsSUFDWDtBQUFBLElBQ0EsbUJBQW1CLFNBQVMsbUJBQW1CLEtBQUs7QUFBQSxJQUNwRCxXQUFXLGFBQWEsTUFBTSxHQUFHO0FBQUEsRUFDbEM7QUFDRDtBQUVPLFNBQVMsSUFBSSxVQUFtQixXQUFXLEdBQVM7QUFDMUQsU0FBTyxPQUFPO0FBQ2QsVUFBUSxPQUFPO0FBQ2hCO0FBRUEsSUFBSSxZQUFZLFFBQVEsY0FBYyxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTTtBQUM1RCxNQUFJO0FBQ0w7IiwKICAibmFtZXMiOiBbImZzIiwgInBhdGgiLCAiZnMiLCAiZmlsZXNpemUiLCAiZnMiLCAicGF0aCIsICJwcm9jZXNzIiwgImZzIiwgInBhdGgiLCAicHJvY2VzcyIsICJhY2MiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb21wYXJlLnRzIiwgIi4uL3NyYy91dGlscy50cyIsICIuLi9zcmMvcmVwb3J0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBjb21wYXJlIH0gZnJvbSBcIi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgcmVwb3J0IH0gZnJvbSBcIi4vcmVwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0SW5wdXQgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBnZXRPcHRpb25zKCk6IE9wdGlvbnMge1xuXHRjb25zdCByYXdNZXRhZmlsZXMgPSBnZXRJbnB1dChcIm1ldGFmaWxlc1wiKTtcblx0aWYgKCFyYXdNZXRhZmlsZXMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtZXRhZmlsZXMgaXMgbm90IHNwZWNpZmllZFwiKTtcblx0fVxuXHRjb25zdCBuYW1lID0gZ2V0SW5wdXQoXCJuYW1lXCIpO1xuXHRpZiAoIW5hbWUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGlzIG5vdCBzcGVjaWZpZWRcIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRwZXJjZW50RXh0cmFBdHRlbnRpb246IE51bWJlci5wYXJzZUludChcblx0XHRcdGdldElucHV0KFwicGVyY2VudF9leHRyYV9hdHRlbnRpb25cIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRzaG93RGV0YWlsczogW1widHJ1ZVwiLCBcIlRydWVcIiwgXCJUUlVFXCJdLmluY2x1ZGVzKFxuXHRcdFx0Z2V0SW5wdXQoXCJzaG93X2RldGFpbHNcIikgfHwgXCJ0cnVlXCIsXG5cdFx0KSxcblx0XHRpbmNsdWRlRXh0ZW5zaW9uczogKFxuXHRcdFx0Z2V0SW5wdXQoXCJpbmNsdWRlX2V4dGVuc2lvbnNcIikgfHwgXCIuanMsLm1qcywuY2pzXCJcblx0XHQpLnNwbGl0KFwiLFwiKSxcblx0XHRuYW1lLFxuXHRcdGFuYWx5emVyRGlyZWN0b3J5OiBnZXRJbnB1dChcImFuYWx5emVfZGlyZWN0b3J5XCIpIHx8IFwiLmFuYWx5emVyXCIsXG5cdFx0bWV0YWZpbGVzOiByYXdNZXRhZmlsZXMuc3BsaXQoXCIsXCIpLFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuKG9wdGlvbnM6IE9wdGlvbnMgPSBnZXRPcHRpb25zKCkpOiB2b2lkIHtcblx0cmVwb3J0KG9wdGlvbnMpO1xuXHRjb21wYXJlKG9wdGlvbnMpO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEudXJsID09PSBwYXRoVG9GaWxlVVJMKHByb2Nlc3MuYXJndlsxXSkuaHJlZikge1xuXHRydW4oKTtcbn1cbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVzaXplIGFzIG9yaWdpbmFsRmlsZXNpemUgfSBmcm9tIFwiZmlsZXNpemVcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGFyZVJlc3VsdCwgT3B0aW9ucywgUmVwb3J0LCBUcmVlTWFwTm9kZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkQW5hbHlzaXNKc29uLCBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBidWlsZFRyZWUoXG5cdGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB7IGJ5dGVzSW5PdXRwdXQ6IG51bWJlciB9Pixcbik6IFRyZWVNYXBOb2RlIHtcblx0Y29uc3Qgcm9vdDogVHJlZU1hcE5vZGUgPSB7IG5hbWU6IFwiXCIsIHBhdGg6IFwiXCIsIHZhbHVlOiAwLCBjaGlsZHJlbjogW10gfTtcblx0Zm9yIChjb25zdCBbZmlsZVBhdGgsIHsgYnl0ZXNJbk91dHB1dCB9XSBvZiBPYmplY3QuZW50cmllcyhpbnB1dCkpIHtcblx0XHRjb25zdCBkaXJlY3RvcmllcyA9IGZpbGVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRidWlsZE5vZGUocm9vdCwgZGlyZWN0b3JpZXMsIGJ5dGVzSW5PdXRwdXQpO1xuXHR9XG5cdHJldHVybiByb290O1xufVxuXG5mdW5jdGlvbiBidWlsZE5vZGUoXG5cdG5vZGU6IFRyZWVNYXBOb2RlLFxuXHRwYXRoczogQXJyYXk8c3RyaW5nPixcblx0dmFsdWU6IG51bWJlcixcbik6IHZvaWQge1xuXHRjb25zdCBmaXJzdCA9IHBhdGhzLnNoaWZ0KCk7XG5cdGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gbGVhZiBub2RlIChmaWxlKVxuXHRcdG5vZGUudmFsdWUgKz0gdmFsdWU7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGxldCBjaGlsZCA9IG5vZGUuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT09IGZpcnN0KTtcblx0aWYgKCFjaGlsZCkge1xuXHRcdGNoaWxkID0ge1xuXHRcdFx0bmFtZTogZmlyc3QsXG5cdFx0XHRwYXRoOiBgJHtub2RlLnBhdGh9LyR7Zmlyc3R9YC5yZXBsYWNlKC9eXFwvLywgXCJcIiksXG5cdFx0XHR2YWx1ZTogMCxcblx0XHRcdGNoaWxkcmVuOiBbXSxcblx0XHR9O1xuXHRcdG5vZGUuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cdH1cblx0bm9kZS52YWx1ZSArPSB2YWx1ZTtcblx0YnVpbGROb2RlKGNoaWxkLCBwYXRocywgdmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShpbnB1dDogT3B0aW9ucyk6IHZvaWQge1xuXHRsZXQgaGFzQW55Q2hhbmdlID0gZmFsc2U7XG5cdGxldCBvdXRwdXQgPSBgIyMgXHVEODNEXHVEQ0U2IGVzYnVpbGQgQnVuZGxlIEFuYWx5c2lzIGZvciAke2lucHV0Lm5hbWV9XG5cblRoaXMgYW5hbHlzaXMgd2FzIGdlbmVyYXRlZCBieSBbZXNidWlsZC1idW5kbGUtYW5hbHl6ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9leG9lZ28vZXNidWlsZC1idW5kbGUtYW5hbHl6ZXIpLiBcdUQ4M0VcdUREMTZcbmA7XG5cblx0Y29uc3QgY3VycmVudCA9IGxvYWRBbmFseXNpc0pzb24oXG5cdFx0cGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGlucHV0LmFuYWx5emVyRGlyZWN0b3J5LCBcImJ1bmRsZV9hbmFseXNpcy5qc29uXCIpLFxuXHQpO1xuXHRsZXQgYmFzZTogUmVwb3J0O1xuXHR0cnkge1xuXHRcdGJhc2UgPSBsb2FkQW5hbHlzaXNKc29uKFxuXHRcdFx0cGF0aC5qb2luKFxuXHRcdFx0XHRwcm9jZXNzLmN3ZCgpLFxuXHRcdFx0XHRpbnB1dC5hbmFseXplckRpcmVjdG9yeSxcblx0XHRcdFx0XCJiYXNlL2J1bmRsZS9idW5kbGVfYW5hbHlzaXMuanNvblwiLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YmFzZSA9IHt9O1xuXHR9XG5cblx0Y29uc3QgdHJlZXMgPSBuZXcgTWFwPHN0cmluZywgVHJlZU1hcE5vZGU+KCk7XG5cdGZvciAoY29uc3QgbWV0YWZpbGVSZWxQYXRoIG9mIGlucHV0Lm1ldGFmaWxlcykge1xuXHRcdGNvbnN0IG1ldGFmaWxlID0gbG9hZE1ldGFGaWxlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBtZXRhZmlsZVJlbFBhdGgpKTtcblx0XHRmb3IgKGNvbnN0IFtvdXRmaWxlLCBidWlsZE1ldGFdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFmaWxlLm91dHB1dHMpKSB7XG5cdFx0XHRjb25zdCB0cmVlID0gYnVpbGRUcmVlKGJ1aWxkTWV0YS5pbnB1dHMpO1xuXHRcdFx0dHJlZXMuc2V0KGAke21ldGFmaWxlUmVsUGF0aH0gLT4gJHtvdXRmaWxlfWAsIHRyZWUpO1xuXG5cdFx0XHRmcy53cml0ZUZpbGVTeW5jKFxuXHRcdFx0XHRwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgaW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksIFwidHJlZS5qc29uXCIpLFxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh0cmVlLCBudWxsLCAyKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYWxsT3V0RmlsZXM6IHN0cmluZ1tdID0gW1xuXHRcdC4uLm5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGN1cnJlbnQpLCAuLi5PYmplY3Qua2V5cyhiYXNlKV0pLFxuXHRdLnNvcnQoKTtcblxuXHRjb25zdCBjb21wYXJpc29uOiBBcnJheTxDb21wYXJlUmVzdWx0PiA9IGFsbE91dEZpbGVzLm1hcCgob3V0ZmlsZSkgPT4ge1xuXHRcdGNvbnN0IGN1cnJlbnRTdGF0cyA9IGN1cnJlbnRbb3V0ZmlsZV07XG5cdFx0Y29uc3QgYmFzZVN0YXRzID0gYmFzZVtvdXRmaWxlXTtcblxuXHRcdGlmICghY3VycmVudFN0YXRzKSB7XG5cdFx0XHRoYXNBbnlDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0Ly8gZGVsZXRlZCBvdXQgZmlsZVxuXHRcdFx0cmV0dXJuIHsgLi4uYmFzZVN0YXRzLCBkaWZmOiAtMSwgcmVtYXJrOiBcImRlbGV0ZWRcIiwgdHJlZTogdW5kZWZpbmVkIH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgdHJlZSA9IHRyZWVzLmdldChcblx0XHRcdGAke2N1cnJlbnRTdGF0cy5tZXRhZmlsZX0gLT4gJHtjdXJyZW50U3RhdHMub3V0ZmlsZX1gLFxuXHRcdCk7XG5cblx0XHRpZiAoIWJhc2VTdGF0cykge1xuXHRcdFx0aGFzQW55Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdC8vIG5ldyBvdXQgZmlsZVxuXHRcdFx0cmV0dXJuIHsgLi4uY3VycmVudFN0YXRzLCBkaWZmOiAtMSwgcmVtYXJrOiBcImFkZGVkXCIsIHRyZWUgfTtcblx0XHR9XG5cdFx0Y29uc3QgZGlmZiA9IGN1cnJlbnRTdGF0cy5ieXRlcyAtIGJhc2VTdGF0cy5ieXRlcztcblx0XHRjb25zdCBpbmNyZWFzZSA9ICEhTWF0aC5zaWduKGRpZmYpO1xuXHRcdGlmIChkaWZmICE9PSAwKSB7XG5cdFx0XHRoYXNBbnlDaGFuZ2UgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uY3VycmVudFN0YXRzLFxuXHRcdFx0ZGlmZixcblx0XHRcdHRyZWUsXG5cdFx0XHRyZW1hcms6IGluY3JlYXNlID8gXCJpbmNyZWFzZWRcIiA6IFwiZGVjcmVhc2VkXCIsXG5cdFx0fTtcblx0fSk7XG5cblx0aWYgKGhhc0FueUNoYW5nZSkge1xuXHRcdG91dHB1dCArPSBtYXJrZG93blRhYmxlKGNvbXBhcmlzb24sIGlucHV0LnBlcmNlbnRFeHRyYUF0dGVudGlvbik7XG5cdFx0b3V0cHV0ICs9IGZpbGVTaXplVGFibGUoY29tcGFyaXNvbik7XG5cblx0XHRpZiAoaW5wdXQuc2hvd0RldGFpbHMpIHtcblx0XHRcdG91dHB1dCArPSBgXFxuPGRldGFpbHM+XG48c3VtbWFyeT5EZXRhaWxzPC9zdW1tYXJ5PlxuPHA+TmV4dCB0byB0aGUgc2l6ZSBpcyBob3cgbXVjaCB0aGUgc2l6ZSBoYXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBjb21wYXJlZCB3aXRoIHRoZSBiYXNlIGJyYW5jaCBvZiB0aGlzIFBSLjwvcD5cbjx1bD5cbjxsaT5cdTIwM0NcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGJ5ICR7aW5wdXQucGVyY2VudEV4dHJhQXR0ZW50aW9ufSUgb3IgbW9yZS4gU3BlY2lhbCBhdHRlbnRpb24gc2hvdWxkIGJlIGdpdmVuIHRvIHRoaXMuPC9saT5cbjxsaT5cdTI2QTBcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGluIGFjY2VwdGFibGUgcmFuZ2UgKGxvd2VyIHRoYW4gJHtpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb259JSkuPC9saT5cbjxsaT5cdTI3MDU6IE5vIGNoYW5nZSBvciBldmVuIGRvd25zaXplZC48L2xpPlxuPGxpPlx1RDgzRFx1REREMVx1RkUwRjogVGhlIG91dCBmaWxlIGlzIGRlbGV0ZWQ6IG5vdCBmb3VuZCBpbiBiYXNlIGJyYW5jaC48L2xpPlxuPGxpPlx1RDgzQ1x1REQ5NTogVGhlIG91dCBmaWxlIGlzIG5ld2x5IGZvdW5kOiB3aWxsIGJlIGFkZGVkIHRvIGJhc2UgYnJhbmNoLjwvbGk+XG48L3VsPlxuPC9kZXRhaWxzPlxcbmA7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG91dHB1dCArPSBcIlRoaXMgUFIgaW50cm9kdWNlZCBubyBjaGFuZ2VzIHRvIHRoZSBlc2J1aWxkIGJ1bmRsZSEgXHVEODNEXHVERTRDXCI7XG5cdH1cblxuXHQvLyB3ZSBhZGQgdGhpcyB0YWcgc28gdGhhdCBvdXIgYWN0aW9uIGNhbiBiZSBhYmxlIHRvIGVhc2lseSBhbmRcblx0Ly8gY29uc2lzdGVudGx5IGZpbmQgdGhlIHJpZ2h0IGNvbW1lbnQgdG8gZWRpdCBhcyBtb3JlIGNvbW1pdHMgYXJlIHB1c2hlZC5cblx0b3V0cHV0ICs9IGA8IS0tIF9fRVNCVUlMRF9CVU5ETEVfJHtpbnB1dC5uYW1lfSAtLT5gO1xuXG5cdC8vIFdyaXRlIHRoZSBvdXRwdXQgdG8gYSBmaWxlIHdoaWNoIGlzIGxhdGVyIHJlYWQgaW5cblx0Ly8gYXMgY29tbWVudCBjb250ZW50cyBieSB0aGUgYWN0aW9ucyB3b3JrZmxvdy5cblx0ZnMubWtkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSksIHtcblx0XHRyZWN1cnNpdmU6IHRydWUsXG5cdH0pO1xuXHRmcy53cml0ZUZpbGVTeW5jKFxuXHRcdHBhdGguam9pbihcblx0XHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0XHRpbnB1dC5hbmFseXplckRpcmVjdG9yeSxcblx0XHRcdFwiYnVuZGxlX2FuYWx5c2lzX2NvbW1lbnQudHh0XCIsXG5cdFx0KSxcblx0XHRvdXRwdXQudHJpbSgpLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBmaWxlc2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcblx0cmV0dXJuIG9yaWdpbmFsRmlsZXNpemUoYnl0ZXMsIHtcblx0XHRzcGFjZXI6IFwiXHUwMEEwXCIsXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXJrZG93blRhYmxlKFxuXHRkYXRhOiBBcnJheTxDb21wYXJlUmVzdWx0Pixcblx0cmVkVGhyZXNob2xkOiBudW1iZXIsXG4pOiBzdHJpbmcge1xuXHRjb25zdCByb3dzID0gZGF0YVxuXHRcdC5tYXAoKGQpID0+IHtcblx0XHRcdHJldHVybiBgJHtkLm1ldGFmaWxlfSB8ICR7ZC5vdXRmaWxlfSB8ICR7cmVuZGVyU2l6ZShkKX0gfCAke3JlbmRlck5vdGUoXG5cdFx0XHRcdGQsXG5cdFx0XHRcdHJlZFRocmVzaG9sZCxcblx0XHRcdCl9XFxuYDtcblx0XHR9KVxuXHRcdC5qb2luKFwiXCIpO1xuXG5cdHJldHVybiBgXG5NZXRhIEZpbGUgfCBPdXQgRmlsZSAgfCBTaXplIChyYXcpIHwgTm90ZSBcbi0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLTp8LS0tLS0tXG4ke3Jvd3N9YDtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSB0b3AgdGVuIGxhcmdlc3Qgbm9kZXMgaW4gcm9vdCB0cmVlLlxuICogRGlnIG5vZGVzIHVudGlsIHRoZSBkZXB0aCBvZiAzLlxuICovXG5mdW5jdGlvbiBmaW5kTGFyZ2VEaXJlY3Rvcmllcyhyb290OiBUcmVlTWFwTm9kZSkge1xuXHRjb25zdCBub2RlczogVHJlZU1hcE5vZGVbXSA9IFtdO1xuXHRjb25zdCBxdWV1ZTogQXJyYXk8eyBub2RlOiBUcmVlTWFwTm9kZTsgZGVwdGg6IG51bWJlciB9PiA9IFtcblx0XHR7IG5vZGU6IHJvb3QsIGRlcHRoOiAwIH0sXG5cdF07XG5cdHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgc2hpZnQgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdGlmICghc2hpZnQpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRjb25zdCB7IG5vZGUsIGRlcHRoIH0gPSBzaGlmdDtcblx0XHRpZiAoZGVwdGggPT09IDMpIHtcblx0XHRcdG5vZGVzLnB1c2gobm9kZSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRub2Rlcy5wdXNoKG5vZGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygbm9kZS5jaGlsZHJlbikge1xuXHRcdFx0XHRxdWV1ZS5wdXNoKHsgbm9kZTogaXRlbSwgZGVwdGg6IGRlcHRoICsgMSB9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgbGFyZ2VOb2RlcyA9IG5vZGVzLnNvcnQoKGEsIGIpID0+IGIudmFsdWUgLSBhLnZhbHVlKS5zbGljZSgwLCAxMCk7XG5cdHJldHVybiB7XG5cdFx0bGFyZ2VOb2Rlcyxcblx0XHRoYXNPdGhlcjogbm9kZXMubGVuZ3RoID4gMTAsXG5cdH07XG59XG5cbmZ1bmN0aW9uIGZpeGVkUGVyY2VudChuOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XG5cdHJldHVybiBOdW1iZXIucGFyc2VGbG9hdCgoKG4gLyBkKSAqIDEwMCkudG9GaXhlZCgxKSk7XG59XG5cbmZ1bmN0aW9uIGZpbGVTaXplVGFibGUoZGF0YTogQXJyYXk8Q29tcGFyZVJlc3VsdD4pOiBzdHJpbmcge1xuXHRpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRsZXQgb3V0cHV0ID0gXCJcIjtcblx0b3V0cHV0ICs9IFwiPGRldGFpbHM+XFxuXCI7XG5cdG91dHB1dCArPSBcIjxzdW1tYXJ5PlRvcCB0ZW4gbGFyZ2VzdCBwYXRoczwvc3VtbWFyeT5cXG5cIjtcblx0Zm9yIChjb25zdCBkIG9mIGRhdGEpIHtcblx0XHRvdXRwdXQgKz0gXCJcXG5cIjtcblx0XHRvdXRwdXQgKz0gYCMjIE1ldGEgZmlsZTogJHtkLm1ldGFmaWxlfSwgT3V0IGZpbGU6ICR7ZC5vdXRmaWxlfVxcbmA7XG5cdFx0aWYgKCFkLnRyZWUpIHtcblx0XHRcdG91dHB1dCArPSBcIlx1RkUwRlx1RkUwRlx1RDgzRFx1REREMVx1RkUwRkRlbGV0ZWRcXG5cIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRvdXRwdXQgKz0gXCJ8IFBhdGggfCBTaXplIHxcXG5cIjtcblx0XHRvdXRwdXQgKz0gXCJ8LS0tLS0tfC0tLS0tLS18XFxuXCI7XG5cdFx0Y29uc3QgdG90YWxTaXplID0gZC50cmVlLnZhbHVlO1xuXHRcdGNvbnN0IHsgbGFyZ2VOb2RlcywgaGFzT3RoZXIgfSA9IGZpbmRMYXJnZURpcmVjdG9yaWVzKGQudHJlZSk7XG5cdFx0Zm9yIChjb25zdCB7IHBhdGgsIHZhbHVlIH0gb2YgbGFyZ2VOb2Rlcykge1xuXHRcdFx0Y29uc3QgcGVyY2VudCA9IGZpeGVkUGVyY2VudCh2YWx1ZSwgdG90YWxTaXplKTtcblx0XHRcdG91dHB1dCArPSBgfCAke3BhdGh9IHwgJHtyZW5kZXJCYXIocGVyY2VudCwgdmFsdWUpfSB8XFxuYDtcblx0XHR9XG5cdFx0aWYgKGhhc090aGVyKSB7XG5cdFx0XHRjb25zdCBvdGhlclNpemUgPSB0b3RhbFNpemUgLSBsYXJnZU5vZGVzWzBdLnZhbHVlO1xuXHRcdFx0Y29uc3Qgb3RoZXJQZXJjZW50ID0gZml4ZWRQZXJjZW50KG90aGVyU2l6ZSwgdG90YWxTaXplKTtcblx0XHRcdG91dHB1dCArPSBgfCAob3RoZXIpIHwgJHtyZW5kZXJCYXIob3RoZXJQZXJjZW50LCBvdGhlclNpemUpfSB8XFxuYDtcblx0XHR9XG5cdH1cblx0b3V0cHV0ICs9IFwiPC9kZXRhaWxzPlxcblwiO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiByZW5kZXJCYXIocGVyY2VudDogbnVtYmVyLCBieXRlczogbnVtYmVyKTogc3RyaW5nIHtcblx0Y29uc3QgYmFyID0gcHJvZ3Jlc3MocGVyY2VudCAvIDEwMCk7XG5cdHJldHVybiBgXFwke3tcXFxcY29sb3J7R29sZGVucm9kfXsgJHtiYXJ9IH19fVxcJCAke3BlcmNlbnQudG9GaXhlZChcblx0XHQxLFxuXHQpfSUsICR7ZmlsZXNpemUoYnl0ZXMpfWA7XG59XG5cbi8vIEJsb2NrIHByb2dyZXNzaW9uIGlzIDEvOCA9IDAuMTI1XG5jb25zdCBibG9ja3MgPSBbXCJcIiwgXCJcdTI1OEZcIiwgXCJcdTI1OEVcIiwgXCJcdTI1OERcIiwgXCJcdTI1OENcIiwgXCJcdTI1OEJcIiwgXCJcdTI1OEFcIiwgXCJcdTI1ODlcIiwgXCJcdTI1ODhcIl07XG5jb25zdCBwcm9ncmVzc2lvbiA9IDEgLyAoYmxvY2tzLmxlbmd0aCAtIDEpO1xuZnVuY3Rpb24gcHJvZ3Jlc3ModmFsdWU6IG51bWJlciwgbGVuZ3RoID0gMjUsIHZtaW4gPSAwLjAsIHZtYXggPSAxLjApIHtcblx0Y29uc3QgdiA9IHZhbHVlICogbGVuZ3RoO1xuXHRjb25zdCBpbnRlZ2VyUGFydCA9IE1hdGguZmxvb3Iodik7XG5cdGNvbnN0IGZyYWN0aW9uYWxQYXJ0ID0gdiAtIGludGVnZXJQYXJ0O1xuXHRjb25zdCBpID0gTWF0aC5yb3VuZChcblx0XHQocHJvZ3Jlc3Npb24gKiBNYXRoLmZsb29yKGZyYWN0aW9uYWxQYXJ0IC8gcHJvZ3Jlc3Npb24pKSAvIHByb2dyZXNzaW9uLFxuXHQpO1xuXHRyZXR1cm4gXCJcdTI1ODhcIi5yZXBlYXQoaW50ZWdlclBhcnQpICsgYmxvY2tzW2ldO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTaXplKGQ6IENvbXBhcmVSZXN1bHQpOiBzdHJpbmcge1xuXHRyZXR1cm4gZmlsZXNpemUoZC5ieXRlcyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlck5vdGUoZDogQ29tcGFyZVJlc3VsdCwgcmVkVGhyZXNob2xkOiBudW1iZXIpOiBzdHJpbmcge1xuXHRpZiAoZC5yZW1hcmsgPT09IFwiZGVsZXRlZFwiKSB7XG5cdFx0cmV0dXJuIFwiXHVEODNEXHVEREQxXHVGRTBGIERlbGV0ZWRcIjtcblx0fVxuXHRpZiAoZC5yZW1hcmsgPT09IFwiYWRkZWRcIikge1xuXHRcdHJldHVybiBcIlx1RDgzQ1x1REQ5NSBBZGRlZFwiO1xuXHR9XG5cdGlmIChkLmRpZmYpIHtcblx0XHRjb25zdCBwZXJjZW50Q2hhbmdlID0gKGQuZGlmZiAvIGQuYnl0ZXMpICogMTAwO1xuXHRcdHJldHVybiBgJHtyZW5kZXJTdGF0dXNJbmRpY2F0b3IocGVyY2VudENoYW5nZSwgcmVkVGhyZXNob2xkKX0ke2ZpbGVzaXplKFxuXHRcdFx0ZC5kaWZmLFxuXHRcdCl9ICgke3NpZ24ocGVyY2VudENoYW5nZSl9JHtwZXJjZW50Q2hhbmdlLnRvRml4ZWQoMSl9JSlgO1xuXHR9XG5cdHJldHVybiBcIlx1MjcwNSAgTm8gY2hhbmdlXCI7XG59XG5cbmZ1bmN0aW9uIHNpZ24obnVtOiBudW1iZXIpOiBzdHJpbmcge1xuXHRyZXR1cm4gbnVtIDwgMCA/IFwiXCIgOiBcIitcIjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3RhdHVzSW5kaWNhdG9yKFxuXHRwZXJjZW50Q2hhbmdlOiBudW1iZXIsXG5cdHJlZFRocmVzaG9sZDogbnVtYmVyLFxuKTogc3RyaW5nIHtcblx0bGV0IHJlczogc3RyaW5nO1xuXHRpZiAocGVyY2VudENoYW5nZSA+IDAgJiYgcGVyY2VudENoYW5nZSA8IHJlZFRocmVzaG9sZCkge1xuXHRcdHJlcyA9IFwiXHUyNkEwXHVGRTBGXCI7XG5cdH0gZWxzZSBpZiAocGVyY2VudENoYW5nZSA+PSByZWRUaHJlc2hvbGQpIHtcblx0XHRyZXMgPSBcIlx1MjAzQ1x1RkUwRlwiO1xuXHR9IGVsc2Uge1xuXHRcdHJlcyA9IFwiXHUyNzA1IFwiO1xuXHR9XG5cdHJldHVybiBgJHtyZXN9ICR7c2lnbihwZXJjZW50Q2hhbmdlKX1gO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuXG5pbXBvcnQgdHlwZSB7IE1ldGFmaWxlIH0gZnJvbSBcImVzYnVpbGRcIjtcbmltcG9ydCB0eXBlIHsgUmVwb3J0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gbG9hZEpzb25GaWxlKHBhdGg6IHN0cmluZykge1xuXHRyZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aCkudG9TdHJpbmcoXCJ1dGYtOFwiKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTWV0YUZpbGUocGF0aDogc3RyaW5nKTogTWV0YWZpbGUge1xuXHRyZXR1cm4gbG9hZEpzb25GaWxlKHBhdGgpIGFzIE1ldGFmaWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFuYWx5c2lzSnNvbihwYXRoOiBzdHJpbmcpOiBSZXBvcnQge1xuXHRyZXR1cm4gbG9hZEpzb25GaWxlKHBhdGgpIGFzIFJlcG9ydDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvdG9vbGtpdC9ibG9iLzgxYTczYWJhOGJlZGQ1MzJmNmVkZGNjNDFlZDNhMGZhZDhiMWNmZWIvcGFja2FnZXMvY29yZS9zcmMvY29yZS50cyNMMTI2XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgdmFsID0gcHJvY2Vzcy5lbnZbYElOUFVUXyR7bmFtZS50b1VwcGVyQ2FzZSgpfWBdIHx8IFwiXCI7XG5cdHJldHVybiB2YWwudHJpbSgpO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuXG5pbXBvcnQgdHlwZSB7IE9wdGlvbnMsIFJlcG9ydCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0KGlucHV0OiBPcHRpb25zKTogdm9pZCB7XG5cdGNvbnN0IGFsbFBhZ2VTaXplcyA9IGdldEFsbFBhZ2VTaXplcyhpbnB1dCk7XG5cdGZzLm1rZGlyU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgaW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnkpLCB7XG5cdFx0cmVjdXJzaXZlOiB0cnVlLFxuXHR9KTtcblx0Y29uc3QgcmVzdWx0SnNvblBhdGggPSBwYXRoLmpvaW4oXG5cdFx0cHJvY2Vzcy5jd2QoKSxcblx0XHRpbnB1dC5hbmFseXplckRpcmVjdG9yeSxcblx0XHRcImJ1bmRsZV9hbmFseXNpcy5qc29uXCIsXG5cdCk7XG5cdGZzLndyaXRlRmlsZVN5bmMocmVzdWx0SnNvblBhdGgsIEpTT04uc3RyaW5naWZ5KGFsbFBhZ2VTaXplcywgbnVsbCwgMikpO1xuXHRjb25zb2xlLmxvZyhgV3JvdGUgJHtyZXN1bHRKc29uUGF0aH1gKTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxsUGFnZVNpemVzKGlucHV0OiBPcHRpb25zKTogUmVwb3J0IHtcblx0Y29uc3QgYWNjOiBSZXBvcnQgPSB7fTtcblx0cmV0dXJuIGlucHV0Lm1ldGFmaWxlcy5yZWR1Y2UoKGFjYywgbWV0YWZpbGUpID0+IHtcblx0XHRjb25zdCBtZXRhRmlsZVBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbWV0YWZpbGUpO1xuXHRcdHRyeSB7XG5cdFx0XHRmcy5hY2Nlc3NTeW5jKG1ldGFGaWxlUGF0aCwgZnMuY29uc3RhbnRzLlJfT0spO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0YE5vIG1ldGEgZmlsZSBmb3VuZCBhdCBcIiR7bWV0YUZpbGVQYXRofVwiIC0gYSBwYXRoIHRvIG1ldGEgZmlsZSBtYXkgYmUgd3JvbmcsIG9yIGVzYnVpbGQgaXMgbm90IGV4ZWN1dGVkLmAsXG5cdFx0XHQpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1ldGFGaWxlSnNvbiA9IGxvYWRNZXRhRmlsZShtZXRhRmlsZVBhdGgpO1xuXHRcdE9iamVjdC5lbnRyaWVzKG1ldGFGaWxlSnNvbi5vdXRwdXRzKS5yZWR1Y2UoKGFjYywgb3V0cHV0KSA9PiB7XG5cdFx0XHRjb25zdCBbb3V0ZmlsZSwgYnVpbGRNZXRhXSA9IG91dHB1dDtcblx0XHRcdGlmIChcblx0XHRcdFx0IWlucHV0LmluY2x1ZGVFeHRlbnNpb25zLnNvbWUoKGV4dCkgPT5cblx0XHRcdFx0XHRvdXRmaWxlLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KSxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBhY2M7XG5cdFx0XHR9XG5cdFx0XHRhY2NbYCR7bWV0YWZpbGV9IC0+ICR7b3V0ZmlsZX1gXSA9IHtcblx0XHRcdFx0Ynl0ZXM6IGJ1aWxkTWV0YS5ieXRlcyxcblx0XHRcdFx0bWV0YWZpbGUsXG5cdFx0XHRcdG91dGZpbGUsXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGFjYztcblx0XHR9LCBhY2MpO1xuXHRcdHJldHVybiBhY2M7XG5cdH0sIGFjYyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxxQkFBcUI7OztBQ0E5QixPQUFPQSxTQUFRO0FBQ2YsT0FBTyxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0RqQixPQUFPLFFBQVE7QUFLZixTQUFTLGFBQWFDLE9BQWM7QUFDbkMsU0FBTyxLQUFLLE1BQU0sR0FBRyxhQUFhQSxLQUFJLEVBQUUsU0FBUyxPQUFPLENBQUM7QUFDMUQ7QUFFTyxTQUFTLGFBQWFBLE9BQXdCO0FBQ3BELFNBQU8sYUFBYUEsS0FBSTtBQUN6QjtBQUVPLFNBQVMsaUJBQWlCQSxPQUFzQjtBQUN0RCxTQUFPLGFBQWFBLEtBQUk7QUFDekI7QUFHTyxTQUFTLFNBQVMsTUFBc0I7QUFDOUMsUUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLEtBQUssWUFBWSxDQUFDLEVBQUUsS0FBSztBQUMxRCxTQUFPLElBQUksS0FBSztBQUNqQjs7O0FEZkEsU0FBUyxVQUNSLE9BQ2M7QUFDZCxRQUFNLE9BQW9CLEVBQUUsTUFBTSxJQUFJLE1BQU0sSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDdkUsYUFBVyxDQUFDLFVBQVUsRUFBRSxj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U0FBUyxNQUFNO0FBQzVCLE1BQUksQ0FBQyxNQUFNO0FBQ1YsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsRUFDeEM7QUFDQSxTQUFPO0FBQUEsSUFDTix1QkFBdUIsT0FBTztBQUFBLE1BQzdCLFNBQVMseUJBQXlCLEtBQUs7QUFBQSxNQUN2QztBQUFBLElBQ0Q7QUFBQSxJQUNBLGFBQWEsQ0FBQyxRQUFRLFFBQVEsTUFBTSxFQUFFO0FBQUEsTUFDckMsU0FBUyxjQUFjLEtBQUs7QUFBQSxJQUM3QjtBQUFBLElBQ0Esb0JBQ0MsU0FBUyxvQkFBb0IsS0FBSyxpQkFDakMsTUFBTSxHQUFHO0FBQUEsSUFDWDtBQUFBLElBQ0EsbUJBQW1CLFNBQVMsbUJBQW1CLEtBQUs7QUFBQSxJQUNwRCxXQUFXLGFBQWEsTUFBTSxHQUFHO0FBQUEsRUFDbEM7QUFDRDtBQUVPLFNBQVMsSUFBSSxVQUFtQixXQUFXLEdBQVM7QUFDMUQsU0FBTyxPQUFPO0FBQ2QsVUFBUSxPQUFPO0FBQ2hCO0FBRUEsSUFBSSxZQUFZLFFBQVEsY0FBYyxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTTtBQUM1RCxNQUFJO0FBQ0w7IiwKICAibmFtZXMiOiBbImZzIiwgInBhdGgiLCAiY2hpbGQiLCAiZnMiLCAiZmlsZXNpemUiLCAicGF0aCIsICJmcyIsICJwYXRoIiwgInByb2Nlc3MiLCAiZnMiLCAicGF0aCIsICJwcm9jZXNzIiwgImFjYyJdCn0K diff --git a/src/compare.ts b/src/compare.ts index 2f94738..675bb46 100644 --- a/src/compare.ts +++ b/src/compare.ts @@ -1,8 +1,44 @@ import fs from "node:fs"; import path from "node:path"; import { filesize as originalFilesize } from "filesize"; -import type { CompareResult, Options, Report } from "./types"; -import { loadAnalysisJson } from "./utils"; +import type { CompareResult, Options, Report, TreeMapNode } from "./types"; +import { loadAnalysisJson, loadMetaFile } from "./utils"; + +function buildTree( + input: Record, +): TreeMapNode { + const root: TreeMapNode = { name: "", path: "", value: 0, children: [] }; + for (const [filePath, { bytesInOutput }] of Object.entries(input)) { + const directories = filePath.split("/"); + buildNode(root, directories, bytesInOutput); + } + return root; +} + +function buildNode( + node: TreeMapNode, + paths: Array, + value: number, +): void { + const first = paths.shift(); + if (first === undefined) { + // leaf node (file) + node.value += value; + return; + } + let child = node.children.find((child) => child.name === first); + if (!child) { + child = { + name: first, + path: `${node.path}/${first}`.replace(/^\//, ""), + value: 0, + children: [], + }; + node.children.push(child); + } + node.value += value; + buildNode(child, paths, value); +} export function compare(input: Options): void { let hasAnyChange = false; @@ -27,9 +63,24 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe base = {}; } + const trees = new Map(); + for (const metafileRelPath of input.metafiles) { + const metafile = loadMetaFile(path.join(process.cwd(), metafileRelPath)); + for (const [outfile, buildMeta] of Object.entries(metafile.outputs)) { + const tree = buildTree(buildMeta.inputs); + trees.set(`${metafileRelPath} -> ${outfile}`, tree); + + fs.writeFileSync( + path.join(process.cwd(), input.analyzerDirectory, "tree.json"), + JSON.stringify(tree, null, 2), + ); + } + } + const allOutFiles: string[] = [ ...new Set([...Object.keys(current), ...Object.keys(base)]), ].sort(); + const comparison: Array = allOutFiles.map((outfile) => { const currentStats = current[outfile]; const baseStats = base[outfile]; @@ -37,12 +88,17 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe if (!currentStats) { hasAnyChange = true; // deleted out file - return { ...baseStats, diff: -1, remark: "deleted" }; + return { ...baseStats, diff: -1, remark: "deleted", tree: undefined }; } + + const tree = trees.get( + `${currentStats.metafile} -> ${currentStats.outfile}`, + ); + if (!baseStats) { hasAnyChange = true; // new out file - return { ...currentStats, diff: -1, remark: "added" }; + return { ...currentStats, diff: -1, remark: "added", tree }; } const diff = currentStats.bytes - baseStats.bytes; const increase = !!Math.sign(diff); @@ -52,12 +108,14 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe return { ...currentStats, diff, + tree, remark: increase ? "increased" : "decreased", }; }); if (hasAnyChange) { output += markdownTable(comparison, input.percentExtraAttention); + output += fileSizeTable(comparison); if (input.showDetails) { output += `\n
@@ -80,14 +138,6 @@ This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoe // consistently find the right comment to edit as more commits are pushed. output += ``; - // Log mostly for testing and debugging. - // This will show up in the github actions console. - console.dir({ - input, - hasAnyChange, - output, - }); - // Write the output to a file which is later read in // as comment contents by the actions workflow. fs.mkdirSync(path.join(process.cwd(), input.analyzerDirectory), { @@ -128,6 +178,96 @@ Meta File | Out File | Size (raw) | Note ${rows}`; } +/** + * Find the top ten largest nodes in root tree. + * Dig nodes until the depth of 3. + */ +function findLargeDirectories(root: TreeMapNode) { + const nodes: TreeMapNode[] = []; + const queue: Array<{ node: TreeMapNode; depth: number }> = [ + { node: root, depth: 0 }, + ]; + while (queue.length > 0) { + const shift = queue.shift(); + if (!shift) { + break; + } + const { node, depth } = shift; + if (depth === 3) { + nodes.push(node); + continue; + } + if (node.children.length === 0) { + nodes.push(node); + } else { + for (const item of node.children) { + queue.push({ node: item, depth: depth + 1 }); + } + } + } + const largeNodes = nodes.sort((a, b) => b.value - a.value).slice(0, 10); + return { + largeNodes, + hasOther: nodes.length > 10, + }; +} + +function fixedPercent(n: number, d: number): number { + return Number.parseFloat(((n / d) * 100).toFixed(1)); +} + +function fileSizeTable(data: Array): string { + if (data.length === 0) { + return ""; + } + let output = ""; + output += "
\n"; + output += "Top ten largest paths\n"; + for (const d of data) { + output += "\n"; + output += `## Meta file: ${d.metafile}, Out file: ${d.outfile}\n`; + if (!d.tree) { + output += "οΈοΈπŸ—‘οΈDeleted\n"; + continue; + } + output += "| Path | Size |\n"; + output += "|------|-------|\n"; + const totalSize = d.tree.value; + const { largeNodes, hasOther } = findLargeDirectories(d.tree); + for (const { path, value } of largeNodes) { + const percent = fixedPercent(value, totalSize); + output += `| ${path} | ${renderBar(percent, value)} |\n`; + } + if (hasOther) { + const otherSize = totalSize - largeNodes[0].value; + const otherPercent = fixedPercent(otherSize, totalSize); + output += `| (other) | ${renderBar(otherPercent, otherSize)} |\n`; + } + } + output += "
\n"; + return output; +} + +function renderBar(percent: number, bytes: number): string { + const bar = progress(percent / 100); + return `\${{\\color{Goldenrod}{ ${bar} }}}\$ ${percent.toFixed( + 1, + )}%, ${filesize(bytes)}`; +} + +// Block progression is 1/8 = 0.125 +const blocks = ["", "▏", "β–Ž", "▍", "β–Œ", "β–‹", "β–Š", "β–‰", "β–ˆ"]; +const progression = 1 / (blocks.length - 1); +function progress(value: number, length = 25, vmin = 0.0, vmax = 1.0) { + const v = value * length; + const integerPart = Math.floor(v); + const fractionalPart = v - integerPart; + const i = Math.round( + (progression * Math.floor(fractionalPart / progression)) / progression, + ); + return "β–ˆ".repeat(integerPart) + blocks[i]; +} + function renderSize(d: CompareResult): string { return filesize(d.bytes); } diff --git a/src/types.ts b/src/types.ts index 9646c2d..ff84763 100644 --- a/src/types.ts +++ b/src/types.ts @@ -11,6 +11,7 @@ export interface CompareResult { bytes: number; diff: number; remark: "added" | "deleted" | "increased" | "decreased"; + tree: TreeMapNode | undefined; } export interface Options { @@ -21,3 +22,11 @@ export interface Options { percentExtraAttention: number; showDetails: boolean; } + +export interface TreeMapNode { + value: number; + name: string; + color?: Array; + path: string; + children: TreeMapNode[]; +} From 0111f527c0460d430be53f66ff10cf4e1e9b53e2 Mon Sep 17 00:00:00 2001 From: exoego Date: Mon, 6 May 2024 22:32:24 +0900 Subject: [PATCH 2/4] Check with tsc --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2590a1c..92c605a 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "test": "vitest", "test:run": "vitest --run", "build": "npm run check && node esbuild.mjs", - "check": "biome check --apply ." + "check": "tsc && biome check --apply ." }, "repository": { "type": "git", From d0a608b98158a394e868c3d35cfd805d00d39561 Mon Sep 17 00:00:00 2001 From: exoego Date: Mon, 6 May 2024 20:15:40 +0900 Subject: [PATCH 3/4] Make source bigger than dependency --- .../examples/basic/package-lock.json | 1487 +---------------- .../__fixtures__/examples/basic/package.json | 2 +- .../__fixtures__/examples/basic/src/index.ts | 201 ++- 3 files changed, 198 insertions(+), 1492 deletions(-) diff --git a/__tests__/__fixtures__/examples/basic/package-lock.json b/__tests__/__fixtures__/examples/basic/package-lock.json index b9c5db7..0206063 100644 --- a/__tests__/__fixtures__/examples/basic/package-lock.json +++ b/__tests__/__fixtures__/examples/basic/package-lock.json @@ -8,810 +8,13 @@ "name": "esbuild-bundle-analysis-test-fixture", "version": "1.0.0", "dependencies": { - "@aws-sdk/client-s3": "^3.556.0" + "rambda": "^9.2.0" }, "devDependencies": { "esbuild": "^0.20.2", "typescript": "^5.4.5" } }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.564.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.564.0.tgz", - "integrity": "sha512-QvTjjQWC7LB18X7BRvYK6Rc1oK1nToht4KOBR+zXmz4R1TEtMpyC9xgZzzVzp2aocXV1/WuDlg8Mvssx8UmUuQ==", - "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.556.0", - "@aws-sdk/credential-provider-node": "3.564.0", - "@aws-sdk/middleware-bucket-endpoint": "3.535.0", - "@aws-sdk/middleware-expect-continue": "3.535.0", - "@aws-sdk/middleware-flexible-checksums": "3.535.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-location-constraint": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-sdk-s3": "3.556.0", - "@aws-sdk/middleware-signing": "3.556.0", - "@aws-sdk/middleware-ssec": "3.537.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/signature-v4-multi-region": "3.556.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@aws-sdk/xml-builder": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.2", - "@smithy/eventstream-serde-browser": "^2.2.0", - "@smithy/eventstream-serde-config-resolver": "^2.2.0", - "@smithy/eventstream-serde-node": "^2.2.0", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-blob-browser": "^2.2.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/hash-stream-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/md5-js": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.1", - "@smithy/util-defaults-mode-node": "^2.3.1", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-stream": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "@smithy/util-waiter": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.556.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz", - "integrity": "sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.556.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.2", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.1", - "@smithy/util-defaults-mode-node": "^2.3.1", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.564.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.564.0.tgz", - "integrity": "sha512-LWBXiwA0qlGhpJx3fbFQagVEyVPoecGtJh3+5hoc+CTVnT00J7T0jLe3kgemvEI9kjhIyDW+MFkq1jCttrGNJw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.556.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.2", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.1", - "@smithy/util-defaults-mode-node": "^2.3.1", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.564.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.556.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.556.0.tgz", - "integrity": "sha512-TsK3js7Suh9xEmC886aY+bv0KdLLYtzrcmVt6sJ/W6EnDXYQhBuKYFhp03NrN2+vSvMGpqJwR62DyfKe1G0QzQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.556.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.2", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.1", - "@smithy/util-defaults-mode-node": "^2.3.1", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/credential-provider-node": "^3.556.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.556.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.556.0.tgz", - "integrity": "sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA==", - "dependencies": { - "@smithy/core": "^1.4.2", - "@smithy/protocol-http": "^3.3.0", - "@smithy/signature-v4": "^2.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz", - "integrity": "sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.552.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz", - "integrity": "sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.564.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.564.0.tgz", - "integrity": "sha512-kiEfBoKRcbX7I/rjhVGJrTUQ0895ANhPu6KE1GRZW7wc1gIGgKGJ+0tvAqRtQjYX0U9pivEDb0dh16OF9PBFFw==", - "dependencies": { - "@aws-sdk/client-sts": "3.556.0", - "@aws-sdk/credential-provider-env": "3.535.0", - "@aws-sdk/credential-provider-process": "3.535.0", - "@aws-sdk/credential-provider-sso": "3.564.0", - "@aws-sdk/credential-provider-web-identity": "3.556.0", - "@aws-sdk/types": "3.535.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.564.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.564.0.tgz", - "integrity": "sha512-HXD5ZCXzfcd6cJ/pW8frh8DuYlKaCd/JKmwzuCRUxgxZwbLEeNmyRYvF+D7osETJJZ4VIwgVbpEw1yLqRz1onw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.535.0", - "@aws-sdk/credential-provider-http": "3.552.0", - "@aws-sdk/credential-provider-ini": "3.564.0", - "@aws-sdk/credential-provider-process": "3.535.0", - "@aws-sdk/credential-provider-sso": "3.564.0", - "@aws-sdk/credential-provider-web-identity": "3.556.0", - "@aws-sdk/types": "3.535.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz", - "integrity": "sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.564.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.564.0.tgz", - "integrity": "sha512-Wv0NV8tDwtydEpsp/kVZ22Z+40bsSBDYgYZ1Uxx+KR8a1PvT6B5FnEtccWTJ371sQG/uqLum7dXSbJq1Qqze1w==", - "dependencies": { - "@aws-sdk/client-sso": "3.556.0", - "@aws-sdk/token-providers": "3.564.0", - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.556.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.556.0.tgz", - "integrity": "sha512-R/YAL8Uh8i+dzVjzMnbcWLIGeeRi2mioHVGnVF+minmaIkCiQMZg2HPrdlKm49El+RljT28Nl5YHRuiqzEIwMA==", - "dependencies": { - "@aws-sdk/client-sts": "3.556.0", - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz", - "integrity": "sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-arn-parser": "3.535.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz", - "integrity": "sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.535.0.tgz", - "integrity": "sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.535.0", - "@smithy/is-array-buffer": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz", - "integrity": "sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.535.0.tgz", - "integrity": "sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz", - "integrity": "sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz", - "integrity": "sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.556.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.556.0.tgz", - "integrity": "sha512-4W/dnxqj1B6/uS/5Z+3UHaqDDGjNPgEVlqf5d3ToOFZ31ZfpANwhcCmyX39JklC4aolCEi9renQ5wHnTCC8K8g==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-arn-parser": "3.535.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/signature-v4": "^2.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.556.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.556.0.tgz", - "integrity": "sha512-kWrPmU8qd3gI5qzpuW9LtWFaH80cOz1ZJDavXx6PRpYZJ5JaKdUHghwfDlVTzzFYAeJmVsWIkPcLT5d5mY5ZTQ==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/signature-v4": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.537.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.537.0.tgz", - "integrity": "sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz", - "integrity": "sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz", - "integrity": "sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.556.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.556.0.tgz", - "integrity": "sha512-bWDSK0ggK7QzAOmPZGv29UAIZocL1MNY7XyOvm3P3P1U3tFMoIBilQQBLabXyHoZ9J3Ik0Vv4n95htUhRQ35ow==", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.556.0", - "@aws-sdk/types": "3.535.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/signature-v4": "^2.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.564.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.564.0.tgz", - "integrity": "sha512-Kk5ixcl9HjqwzfBJZGQAtsqwKa7Z8P7Mdug837BG8zCJbhf7wwNsmItzXTiAlpVrDZyT8P1yWIxsLOS1YUtmow==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.564.0", - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.535.0.tgz", - "integrity": "sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.535.0.tgz", - "integrity": "sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz", - "integrity": "sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/types": "^2.12.0", - "@smithy/util-endpoints": "^1.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz", - "integrity": "sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz", - "integrity": "sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/types": "^2.12.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz", - "integrity": "sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ==", - "dependencies": { - "@aws-sdk/types": "3.535.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.535.0.tgz", - "integrity": "sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", @@ -1180,648 +383,6 @@ "node": ">=12" } }, - "node_modules/@smithy/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz", - "integrity": "sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ==", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz", - "integrity": "sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ==", - "dependencies": { - "@smithy/util-base64": "^2.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", - "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", - "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", - "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz", - "integrity": "sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.12.0", - "@smithy/util-hex-encoding": "^2.2.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz", - "integrity": "sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw==", - "dependencies": { - "@smithy/eventstream-serde-universal": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz", - "integrity": "sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz", - "integrity": "sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA==", - "dependencies": { - "@smithy/eventstream-serde-universal": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz", - "integrity": "sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA==", - "dependencies": { - "@smithy/eventstream-codec": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-blob-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz", - "integrity": "sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg==", - "dependencies": { - "@smithy/chunked-blob-reader": "^2.2.0", - "@smithy/chunked-blob-reader-native": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", - "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/hash-stream-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz", - "integrity": "sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", - "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/md5-js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.2.0.tgz", - "integrity": "sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", - "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", - "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", - "dependencies": { - "@smithy/middleware-serde": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", - "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/service-error-classification": "^2.1.5", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", - "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", - "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", - "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", - "dependencies": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", - "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-uri-escape": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", - "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", - "dependencies": { - "@smithy/types": "^2.12.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", - "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-uri-escape": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", - "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", - "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", - "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", - "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", - "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", - "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", - "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", - "dependencies": { - "@smithy/config-resolver": "^2.2.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", - "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", - "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", - "dependencies": { - "@smithy/service-error-classification": "^2.1.5", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", - "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.2.0.tgz", - "integrity": "sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==", - "dependencies": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, "node_modules/esbuild": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", @@ -1860,36 +421,10 @@ "@esbuild/win32-x64": "0.20.2" } }, - "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "node_modules/rambda": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-9.2.0.tgz", + "integrity": "sha512-RjM8TBNPR+iSvWLqbBpFveDfEf2RPRKHuwBHjQdXsYFDwn3MIvgmJiqVVC1CIQKnOwzeDQd44zqDFgSKQ7RT1Q==" }, "node_modules/typescript": { "version": "5.4.5", @@ -1903,18 +438,6 @@ "engines": { "node": ">=14.17" } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } } } } diff --git a/__tests__/__fixtures__/examples/basic/package.json b/__tests__/__fixtures__/examples/basic/package.json index d8fd25f..f9d21ed 100644 --- a/__tests__/__fixtures__/examples/basic/package.json +++ b/__tests__/__fixtures__/examples/basic/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "description": "test", "dependencies": { - "@aws-sdk/client-s3": "^3.556.0" + "rambda": "^9.2.0" }, "devDependencies": { "esbuild": "^0.20.2", diff --git a/__tests__/__fixtures__/examples/basic/src/index.ts b/__tests__/__fixtures__/examples/basic/src/index.ts index 33fc58f..6a9b4f6 100644 --- a/__tests__/__fixtures__/examples/basic/src/index.ts +++ b/__tests__/__fixtures__/examples/basic/src/index.ts @@ -1,13 +1,196 @@ -import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; +import * as console from "node:console"; -const s3 = new S3Client(); +import { compose, map, filter } from 'rambda' +const composed = compose( + map((x: number) => x * 2), + filter((x: number) => x > 2) +); export const handler = async (event: any) => { - const result = await s3.send( - new PutObjectCommand({ - Bucket: "my-bucket", - Key: "my-key", - }), - ); - return result; + console.log(composed([1, 2, 3, 4])); + console.log([ + { + "_id": "6636e04374026d875e3a14f6", + "index": 0, + "guid": "fbdf37d0-aaad-4b0f-b143-28666927fa56", + "isActive": true, + "balance": "$2,337.22", + "picture": "http://placehold.it/32x32", + "age": 40, + "eyeColor": "blue", + "name": "Moody Duncan", + "gender": "male", + "company": "SULTRAXIN", + "email": "moodyduncan@sultraxin.com", + "phone": "+1 (948) 509-3889", + "address": "100 Clermont Avenue, Glenbrook, Florida, 3611", + "about": "Sunt minim sunt qui irure laborum pariatur nostrud laborum aliquip. Qui quis in laboris eu non enim nisi magna. Excepteur est ipsum nostrud pariatur. Officia esse consectetur est culpa reprehenderit aute et veniam sit.\r\n", + "registered": "2015-02-14T11:49:26 -09:00", + "latitude": 54.979732, + "longitude": 86.310027, + "tags": [ + "irure", + "cupidatat", + "sunt", + "sunt", + "dolore", + "incididunt", + "voluptate" + ], + "friends": [ + { + "id": 0, + "name": "Blanca Blake" + }, + { + "id": 1, + "name": "Stafford Gallagher" + }, + { + "id": 2, + "name": "Odessa Figueroa" + } + ], + "greeting": "Hello, Moody Duncan! You have 9 unread messages.", + "favoriteFruit": "banana" + }, + { + "_id": "6636e0438aa0e021cfd86611", + "index": 2, + "guid": "1d6e9bda-0a31-4864-ad70-2fed16999380", + "isActive": true, + "balance": "$1,910.08", + "picture": "http://placehold.it/32x32", + "age": 39, + "eyeColor": "blue", + "name": "Carole Wyatt", + "gender": "female", + "company": "SNACKTION", + "email": "carolewyatt@snacktion.com", + "phone": "+1 (904) 474-3559", + "address": "383 Nixon Court, Belvoir, Illinois, 7525", + "about": "Non cupidatat culpa duis incididunt mollit. Est irure duis ut quis officia ea sit reprehenderit proident ad nulla. Tempor nisi laborum quis non eu occaecat aliquip. Dolore anim consequat ea laboris do dolore laboris ex dolore officia tempor nisi irure do.\r\n", + "registered": "2017-12-13T02:18:04 -09:00", + "latitude": -19.106743, + "longitude": -15.102964, + "tags": [ + "voluptate", + "cillum", + "ullamco", + "elit", + "eiusmod", + "quis", + "labore" + ], + "friends": [ + { + "id": 0, + "name": "Patterson Callahan" + }, + { + "id": 1, + "name": "Tanisha Key" + }, + { + "id": 2, + "name": "Kathie Carroll" + } + ], + "greeting": "Hello, Carole Wyatt! You have 1 unread messages.", + "favoriteFruit": "banana" + }, + { + "_id": "6636e04313862a26fc0407fb", + "index": 4, + "guid": "dacacda2-4a4a-496d-9b5a-fabd5c0c600d", + "isActive": true, + "balance": "$2,754.82", + "picture": "http://placehold.it/32x32", + "age": 30, + "eyeColor": "brown", + "name": "Castro Stevenson", + "gender": "male", + "company": "PANZENT", + "email": "castrostevenson@panzent.com", + "phone": "+1 (972) 542-2441", + "address": "516 Aster Court, Taycheedah, North Dakota, 9377", + "about": "Et nostrud tempor id et occaecat commodo ad fugiat enim magna velit qui ex nostrud. Minim commodo in voluptate consequat duis occaecat velit consequat laboris et. Sunt sit ullamco dolor enim dolore esse deserunt voluptate eiusmod aliqua. Aliqua dolor consequat consequat et commodo aute amet cillum proident velit magna. Labore esse officia proident et ullamco nulla. Dolore proident velit labore ad cupidatat. Adipisicing velit aliqua velit cillum excepteur ullamco eiusmod laborum.\r\n", + "registered": "2023-04-25T09:50:40 -09:00", + "latitude": 3.775112, + "longitude": -170.248202, + "tags": [ + "dolore", + "in", + "id", + "id", + "laboris", + "in", + "consequat" + ], + "friends": [ + { + "id": 0, + "name": "Elaine Roach" + }, + { + "id": 1, + "name": "Allyson Whitaker" + }, + { + "id": 2, + "name": "Juanita Solomon" + } + ], + "greeting": "Hello, Castro Stevenson! You have 10 unread messages.", + "favoriteFruit": "apple" + }, + { + "_id": "6636e043240e1670126a03b6", + "index": 5, + "guid": "3a20ab87-df6c-49a7-ab44-dd299439d733", + "isActive": false, + "balance": "$3,457.86", + "picture": "http://placehold.it/32x32", + "age": 35, + "eyeColor": "brown", + "name": "Suarez Nunez", + "gender": "male", + "company": "INRT", + "email": "suareznunez@inrt.com", + "phone": "+1 (984) 555-3946", + "address": "874 Cumberland Walk, Dunbar, Minnesota, 8376", + "about": "Cupidatat cillum enim velit mollit non cupidatat ullamco ex voluptate est officia. Ea id voluptate excepteur irure deserunt magna sit ipsum nulla. Id in cillum anim minim duis laboris proident. Excepteur cupidatat ea adipisicing consectetur in non voluptate eu. Reprehenderit anim consequat eu pariatur consectetur aliqua ipsum ad pariatur proident minim aliqua amet ullamco. Officia magna anim minim esse mollit minim deserunt.\r\n", + "registered": "2021-09-17T08:54:45 -09:00", + "latitude": 16.307274, + "longitude": 121.547327, + "tags": [ + "amet", + "irure", + "ipsum", + "cillum", + "ad", + "eu", + "aliqua" + ], + "friends": [ + { + "id": 0, + "name": "Robbie Mckenzie" + }, + { + "id": 1, + "name": "Bryant Barry" + }, + { + "id": 2, + "name": "Eve Hatfield" + } + ], + "greeting": "Hello, Suarez Nunez! You have 6 unread messages.", + "favoriteFruit": "strawberry" + } + ]) + return { + + }; }; From e27bc12fc2271ccfee347151f0901953b4cfdc72 Mon Sep 17 00:00:00 2001 From: exoego Date: Mon, 6 May 2024 22:35:18 +0900 Subject: [PATCH 4/4] Exclude test from tsc --- tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index a691702..7ab2ed8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,6 +18,5 @@ }, "include": [ "src", - "__tests__" ] }