@dpkit/table
Version:
Data Package implementation in TypeScript.
215 lines • 26.5 kB
JavaScript
import { DataFrame } from "nodejs-polars";
import { describe, expect, it } from "vitest";
import { processTable } from "./process.js";
describe("processTable", () => {
it("should work without schema", async () => {
const table = DataFrame({
id: [1, 2],
name: ["english", "中文"],
}).lazy();
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table);
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should work with schema", async () => {
const table = DataFrame({
id: [1, 2],
name: ["english", "中文"],
}).lazy();
const schema = {
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
],
};
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should work with less fields in data", async () => {
const table = DataFrame({
id: [1, 2],
name: ["english", "中文"],
}).lazy();
const schema = {
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
{ name: "other", type: "boolean" },
],
};
const records = [
{ id: 1, name: "english", other: null },
{ id: 2, name: "中文", other: null },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should work with more fields in data", async () => {
const table = DataFrame({
id: [1, 2],
name: ["english", "中文"],
other: [true, false],
}).lazy();
const schema = {
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
],
};
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should work based on fields order", async () => {
const table = DataFrame({
field1: [1, 2],
field2: ["english", "中文"],
}).lazy();
const schema = {
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
],
};
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should work based on field names (equal)", async () => {
const table = DataFrame({
name: ["english", "中文"],
id: [1, 2],
}).lazy();
const schema = {
fieldsMatch: "equal",
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
],
};
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should work based on field names (subset)", async () => {
const table = DataFrame({
name: ["english", "中文"],
id: [1, 2],
}).lazy();
const schema = {
fieldsMatch: "subset",
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
],
};
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should work based on field names (superset)", async () => {
const table = DataFrame({
name: ["english", "中文"],
id: [1, 2],
}).lazy();
const schema = {
fieldsMatch: "superset",
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
],
};
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should work based on field names (partial)", async () => {
const table = DataFrame({
name: ["english", "中文"],
id: [1, 2],
}).lazy();
const schema = {
fieldsMatch: "partial",
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
],
};
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should parse string columns", async () => {
const table = DataFrame({
id: ["1", "2"],
name: ["english", "中文"],
}).lazy();
const schema = {
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "string" },
],
};
const records = [
{ id: 1, name: "english" },
{ id: 2, name: "中文" },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
it("should read type errors as nulls", async () => {
const table = DataFrame({
id: [1, 2],
name: ["english", "中文"],
}).lazy();
const schema = {
fields: [
{ name: "id", type: "integer" },
{ name: "name", type: "integer" },
],
};
const records = [
{ id: 1, name: null },
{ id: 2, name: null },
];
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()).toEqual(records);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGFibGUvcHJvY2Vzcy5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFM0MsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsRUFBRSxDQUFDLDRCQUE0QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1YsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztTQUN4QixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFVCxNQUFNLE9BQU8sR0FBRztZQUNkLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQzFCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1NBQ3RCLENBQUE7UUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNyQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUM5QixNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN0QixFQUFFLEVBQUUsQ0FB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Q0FBQyxrQ0FBa0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDdEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNWLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7U0FDeEIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBRVQsTUFBTSxNQUFNLEdBQVc7WUFDckIsTUFBTSxFQUFFO2dCQUNOLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQUMvQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTthQUNsQztTQUNGLENBQUE7UUFFRCxNQUFNLE9BQU8sR0FBRztZQUNkLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3JCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1NBQ3RCLENBQUE7UUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2NoZW1hIH0gZnJvbSBcIkBkcGtpdC9jb3JlXCJcbmltcG9ydCB7IERhdGFGcmFtZSB9IGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBwcm9jZXNzVGFibGUgfSBmcm9tIFwiLi9wcm9jZXNzLnRzXCJcblxuZGVzY3JpYmUoXCJwcm9jZXNzVGFibGVcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCB3b3JrIHdpdGhvdXQgc2NoZW1hXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7XG4gICAgICBpZDogWzEsIDJdLFxuICAgICAgbmFtZTogW1wiZW5nbGlzaFwiLCBcIuS4reaWh1wiXSxcbiAgICB9KS5sYXp5KClcblxuICAgIGNvbnN0IHJlY29yZHMgPSBbXG4gICAgICB7IGlkOiAxLCBuYW1lOiBcImVuZ2xpc2hcIiB9LFxuICAgICAgeyBpZDogMiwgbmFtZTogXCLkuK3mlodcIiB9LFxuICAgIF1cblxuICAgIGNvbnN0IGxkZiA9IGF3YWl0IHByb2Nlc3NUYWJsZSh0YWJsZSlcbiAgICBjb25zdCBkZiA9IGF3YWl0IGxkZi5jb2xsZWN0KClcbiAgICBleHBlY3QoZGYudG9SZWNvcmRzKCkpLnRvRXF1YWwocmVjb3JkcylcbiAgfSlcblxuICBpdChcInNob3VsZCB3b3JrIHdpdGggc2NoZW1hXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7XG4gICAgICBpZDogWzEsIDJdLFxuICAgICAgbmFtZTogW1wiZW5nbGlzaFwiLCBcIuS4reaWh1wiXSxcbiAgICB9KS5sYXp5KClcblxuICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHsgbmFtZTogXCJpZFwiLCB0eXBlOiBcImludGVnZXJcIiB9LFxuICAgICAgICB7IG5hbWU6IFwibmFtZVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZHMgPSBbXG4gICAgICB7IGlkOiAxLCBuYW1lOiBcImVuZ2xpc2hcIiB9LFxuICAgICAgeyBpZDogMiwgbmFtZTogXCLkuK3mlodcIiB9LFxuICAgIF1cblxuICAgIGNvbnN0IGxkZiA9IGF3YWl0IHByb2Nlc3NUYWJsZSh0YWJsZSwgeyBzY2hlbWEgfSlcbiAgICBjb25zdCBkZiA9IGF3YWl0IGxkZi5jb2xsZWN0KClcbiAgICBleHBlY3QoZGYudG9SZWNvcmRzKCkpLnRvRXF1YWwocmVjb3JkcylcbiAgfSlcblxuICBpdChcInNob3VsZCB3b3JrIHdpdGggbGVzcyBmaWVsZHMgaW4gZGF0YVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBEYXRhRnJhbWUoe1xuICAgICAgaWQ6IFsxLCAyXSxcbiAgICAgIG5hbWU6IFtcImVuZ2xpc2hcIiwgXCLkuK3mlodcIl0sXG4gICAgfSkubGF6eSgpXG5cbiAgICBjb25zdCBzY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB7IG5hbWU6IFwib3RoZXJcIiwgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkcyA9IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6IFwiZW5nbGlzaFwiLCBvdGhlcjogbnVsbCB9LFxuICAgICAgeyBpZDogMiwgbmFtZTogXCLkuK3mlodcIiwgb3RoZXI6IG51bGwgfSxcbiAgICBdXG5cbiAgICBjb25zdCBsZGYgPSBhd2FpdCBwcm9jZXNzVGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgY29uc3QgZGYgPSBhd2FpdCBsZGYuY29sbGVjdCgpXG4gICAgZXhwZWN0KGRmLnRvUmVjb3JkcygpKS50b0VxdWFsKHJlY29yZHMpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgd29yayB3aXRoIG1vcmUgZmllbGRzIGluIGRhdGFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHtcbiAgICAgIGlkOiBbMSwgMl0sXG4gICAgICBuYW1lOiBbXCJlbmdsaXNoXCIsIFwi5Lit5paHXCJdLFxuICAgICAgb3RoZXI6IFt0cnVlLCBmYWxzZV0sXG4gICAgfSkubGF6eSgpXG5cbiAgICBjb25zdCBzY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZWNvcmRzID0gW1xuICAgICAgeyBpZDogMSwgbmFtZTogXCJlbmdsaXNoXCIgfSxcbiAgICAgIHsgaWQ6IDIsIG5hbWU6IFwi5Lit5paHXCIgfSxcbiAgICBdXG5cbiAgICBjb25zdCBsZGYgPSBhd2FpdCBwcm9jZXNzVGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgY29uc3QgZGYgPSBhd2FpdCBsZGYuY29sbGVjdCgpXG4gICAgZXhwZWN0KGRmLnRvUmVjb3JkcygpKS50b0VxdWFsKHJlY29yZHMpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgd29yayBiYXNlZCBvbiBmaWVsZHMgb3JkZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHtcbiAgICAgIGZpZWxkMTogWzEsIDJdLFxuICAgICAgZmllbGQyOiBbXCJlbmdsaXNoXCIsIFwi5Lit5paHXCJdLFxuICAgIH0pLmxhenkoKVxuXG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkcyA9IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6IFwiZW5nbGlzaFwiIH0sXG4gICAgICB7IGlkOiAyLCBuYW1lOiBcIuS4reaWh1wiIH0sXG4gICAgXVxuXG4gICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgIGNvbnN0IGRmID0gYXdhaXQgbGRmLmNvbGxlY3QoKVxuICAgIGV4cGVjdChkZi50b1JlY29yZHMoKSkudG9FcXVhbChyZWNvcmRzKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHdvcmsgYmFzZWQgb24gZmllbGQgbmFtZXMgKGVxdWFsKVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBEYXRhRnJhbWUoe1xuICAgICAgbmFtZTogW1wiZW5nbGlzaFwiLCBcIuS4reaWh1wiXSxcbiAgICAgIGlkOiBbMSwgMl0sXG4gICAgfSkubGF6eSgpXG5cbiAgICBjb25zdCBzY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkc01hdGNoOiBcImVxdWFsXCIsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkcyA9IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6IFwiZW5nbGlzaFwiIH0sXG4gICAgICB7IGlkOiAyLCBuYW1lOiBcIuS4reaWh1wiIH0sXG4gICAgXVxuXG4gICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgIGNvbnN0IGRmID0gYXdhaXQgbGRmLmNvbGxlY3QoKVxuICAgIGV4cGVjdChkZi50b1JlY29yZHMoKSkudG9FcXVhbChyZWNvcmRzKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHdvcmsgYmFzZWQgb24gZmllbGQgbmFtZXMgKHN1YnNldClcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHtcbiAgICAgIG5hbWU6IFtcImVuZ2xpc2hcIiwgXCLkuK3mlodcIl0sXG4gICAgICBpZDogWzEsIDJdLFxuICAgIH0pLmxhenkoKVxuXG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHNNYXRjaDogXCJzdWJzZXRcIixcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZWNvcmRzID0gW1xuICAgICAgeyBpZDogMSwgbmFtZTogXCJlbmdsaXNoXCIgfSxcbiAgICAgIHsgaWQ6IDIsIG5hbWU6IFwi5Lit5paHXCIgfSxcbiAgICBdXG5cbiAgICBjb25zdCBsZGYgPSBhd2FpdCBwcm9jZXNzVGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgY29uc3QgZGYgPSBhd2FpdCBsZGYuY29sbGVjdCgpXG4gICAgZXhwZWN0KGRmLnRvUmVjb3JkcygpKS50b0VxdWFsKHJlY29yZHMpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgd29yayBiYXNlZCBvbiBmaWVsZCBuYW1lcyAoc3VwZXJzZXQpXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7XG4gICAgICBuYW1lOiBbXCJlbmdsaXNoXCIsIFwi5Lit5paHXCJdLFxuICAgICAgaWQ6IFsxLCAyXSxcbiAgICB9KS5sYXp5KClcblxuICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzTWF0Y2g6IFwic3VwZXJzZXRcIixcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZWNvcmRzID0gW1xuICAgICAgeyBpZDogMSwgbmFtZTogXCJlbmdsaXNoXCIgfSxcbiAgICAgIHsgaWQ6IDIsIG5hbWU6IFwi5Lit5paHXCIgfSxcbiAgICBdXG5cbiAgICBjb25zdCBsZGYgPSBhd2FpdCBwcm9jZXNzVGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgY29uc3QgZGYgPSBhd2FpdCBsZGYuY29sbGVjdCgpXG4gICAgZXhwZWN0KGRmLnRvUmVjb3JkcygpKS50b0VxdWFsKHJlY29yZHMpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgd29yayBiYXNlZCBvbiBmaWVsZCBuYW1lcyAocGFydGlhbClcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHtcbiAgICAgIG5hbWU6IFtcImVuZ2xpc2hcIiwgXCLkuK3mlodcIl0sXG4gICAgICBpZDogWzEsIDJdLFxuICAgIH0pLmxhenkoKVxuXG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHNNYXRjaDogXCJwYXJ0aWFsXCIsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkcyA9IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6IFwiZW5nbGlzaFwiIH0sXG4gICAgICB7IGlkOiAyLCBuYW1lOiBcIuS4reaWh1wiIH0sXG4gICAgXVxuXG4gICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgIGNvbnN0IGRmID0gYXdhaXQgbGRmLmNvbGxlY3QoKVxuICAgIGV4cGVjdChkZi50b1JlY29yZHMoKSkudG9FcXVhbChyZWNvcmRzKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHBhcnNlIHN0cmluZyBjb2x1bW5zXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7XG4gICAgICBpZDogW1wiMVwiLCBcIjJcIl0sXG4gICAgICBuYW1lOiBbXCJlbmdsaXNoXCIsIFwi5Lit5paHXCJdLFxuICAgIH0pLmxhenkoKVxuXG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkcyA9IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6IFwiZW5nbGlzaFwiIH0sXG4gICAgICB7IGlkOiAyLCBuYW1lOiBcIuS4reaWh1wiIH0sXG4gICAgXVxuXG4gICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgIGNvbnN0IGRmID0gYXdhaXQgbGRmLmNvbGxlY3QoKVxuICAgIGV4cGVjdChkZi50b1JlY29yZHMoKSkudG9FcXVhbChyZWNvcmRzKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHJlYWQgdHlwZSBlcnJvcnMgYXMgbnVsbHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHtcbiAgICAgIGlkOiBbMSwgMl0sXG4gICAgICBuYW1lOiBbXCJlbmdsaXNoXCIsIFwi5Lit5paHXCJdLFxuICAgIH0pLmxhenkoKVxuXG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZHMgPSBbXG4gICAgICB7IGlkOiAxLCBuYW1lOiBudWxsIH0sXG4gICAgICB7IGlkOiAyLCBuYW1lOiBudWxsIH0sXG4gICAgXVxuXG4gICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgIGNvbnN0IGRmID0gYXdhaXQgbGRmLmNvbGxlY3QoKVxuICAgIGV4cGVjdChkZi50b1JlY29yZHMoKSkudG9FcXVhbChyZWNvcmRzKVxuICB9KVxufSlcbiJdfQ==