Launch Week Day 3: Introducing Organization Notifications in Socket.Learn More
Socket
Book a DemoSign in
Socket

factory.ts

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

factory.ts - npm Package Compare versions

Comparing version
1.1.0
to
1.2.0
+1
lib/spec/async.spec.d.ts
export {};
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const Async = require("../src/async");
const Sync = require("../src/sync");
const async_1 = require("../src/async");
describe("async factories build stuff", () => {
const childFactory = Async.makeFactory({
name: "Kid",
grade: 1,
});
const parentFactory = Async.makeFactory({
name: "Parent",
birthday: Async.each((i) => Promise.resolve(new Date(`2017/05/${i}`))),
children: Async.each(() => []),
spouse: null,
}, { startingSequenceNumber: 1 });
it("makes an object from a factory", () => __awaiter(void 0, void 0, void 0, function* () {
const jimmy = yield childFactory.build({ name: "Jimmy" });
expect(jimmy.name).toEqual("Jimmy");
expect(jimmy.grade).toEqual(1);
}));
it("makes an object with default field from a factory", () => __awaiter(void 0, void 0, void 0, function* () {
const jimmy = yield childFactory.build();
expect(jimmy.name).toEqual("Kid");
expect(jimmy.grade).toEqual(1);
}));
it("makes an object with default field explicitly set to null", () => __awaiter(void 0, void 0, void 0, function* () {
const anon = yield childFactory.build({ name: null });
expect(anon.name).toBeNull();
expect(anon.grade).toEqual(1);
}));
it("can make use of sequence #", () => __awaiter(void 0, void 0, void 0, function* () {
const susan = yield parentFactory.build({ name: "Susan" });
const edward = yield parentFactory.build({ name: "Edward" });
expect(susan.birthday.getTime()).toEqual(new Date("2017/05/01").getTime());
expect(edward.birthday.getTime()).toEqual(new Date("2017/05/02").getTime());
}));
it("can handle has many", () => __awaiter(void 0, void 0, void 0, function* () {
const jimmy = yield childFactory.build({ name: "Jimmy" });
const alice = yield childFactory.build({ name: "Alice", grade: 3 });
const susan = yield parentFactory.build({
name: "Susan",
children: [jimmy, alice],
});
expect(susan.children.map((c) => c.name)).toEqual(["Jimmy", "Alice"]);
}));
it("can refer to other factories", () => __awaiter(void 0, void 0, void 0, function* () {
const parentWithKidsFactory = Async.makeFactory({
name: "Timothy",
birthday: Async.each((i) => new Date(`2017/05/${i}`)),
children: Async.each(() => __awaiter(void 0, void 0, void 0, function* () {
return [
yield childFactory.build({ name: "Bobby" }),
yield childFactory.build({ name: "Jane" }),
];
})),
spouse: null,
});
const tim = yield parentWithKidsFactory.build({
birthday: new Date("2017-02-01"),
});
expect(tim.children.map((c) => c.name)).toEqual(["Bobby", "Jane"]);
}));
it("can extend existing factories", () => __awaiter(void 0, void 0, void 0, function* () {
const geniusFactory = childFactory.extend({
grade: Async.each((i) => {
return new Promise((res, _rej) => {
setTimeout(() => {
res((i + 1) * 2);
}, 1);
});
}),
});
const colin = yield geniusFactory.build({ name: "Colin" });
expect(colin.grade).toEqual(2);
const albert = yield geniusFactory.build({ name: "Albert" });
expect(albert.grade).toEqual(4);
}));
it("can derive one value based on another value", () => __awaiter(void 0, void 0, void 0, function* () {
const personFactory = Async.makeFactory({
firstName: "Jules",
lastName: "Bond",
fullName: "",
}).withDerivation("fullName", (p) => `${p.firstName} ${p.lastName}`);
//.withDerivation2(['firstName','lastName'],'fullName', (fn, ln) => `${fn} ${ln}`);
const bond = yield personFactory.build({ firstName: "James" });
expect(bond.fullName).toEqual("James Bond");
const bond2 = yield personFactory.build();
expect(bond2.fullName).toEqual("Jules Bond");
}));
it("can build a list of items", () => __awaiter(void 0, void 0, void 0, function* () {
const children = yield childFactory.buildList(3, { name: "Bruce" });
expect(children.length).toEqual(3);
for (let child of children) {
expect(child.name).toEqual("Bruce");
expect(child.grade).toEqual(1);
}
}));
it("can combine factories", () => __awaiter(void 0, void 0, void 0, function* () {
const timeStamps = (0, async_1.makeFactory)({
createdAt: Async.each(() => __awaiter(void 0, void 0, void 0, function* () { return new Date(); })),
updatedAt: Async.each(() => __awaiter(void 0, void 0, void 0, function* () { return new Date(); })),
});
const softDelete = (0, async_1.makeFactory)({
isDeleted: false,
});
const postFactory = (0, async_1.makeFactory)({
content: "lorem ipsum",
})
.combine(timeStamps)
.combine(softDelete);
const userFactory = (0, async_1.makeFactory)({
email: "test@user.com",
})
.combine(timeStamps)
.combine(softDelete);
const post = yield postFactory.build({
content: "yadda yadda yadda",
isDeleted: true,
});
expect(post.createdAt.getTime() - new Date().getTime()).toBeLessThan(100);
expect(post.isDeleted).toEqual(true);
const user = yield userFactory.build({
email: "foo@bar.com",
createdAt: new Date("2018/01/02"),
});
expect(user.createdAt.getTime()).toEqual(new Date("2018/01/02").getTime());
expect(post.updatedAt.getTime() - new Date().getTime()).toBeLessThan(100);
expect(user.email).toEqual("foo@bar.com");
}));
it("supports nested factories", () => __awaiter(void 0, void 0, void 0, function* () {
const groceryStoreFactory = Async.makeFactory({
aisle: {
name: "Junk Food Aisle",
typeOfFood: "Junk Food",
budget: 3000,
tags: ["a", "b", "c"],
},
});
// Error: Property 'name' is missing in type '{ budget: number; }
const aStore = yield groceryStoreFactory.build({
aisle: {
budget: 9999,
tags: ["a", "b"],
},
});
expect(aStore.aisle.budget).toEqual(9999);
expect(aStore.aisle.typeOfFood).toEqual("Junk Food");
expect(aStore.aisle.tags).toEqual(["a", "b"]);
}));
it("can transform type", () => __awaiter(void 0, void 0, void 0, function* () {
const makeAdult = childFactory.transform((t) => {
const birthday = `${2018 - t.grade - 25}/05/10`;
return {
name: t.name,
birthday: new Date(birthday),
spouse: null,
children: [],
};
});
const susan = yield makeAdult.build({ name: "Susan", grade: 5 });
expect(susan.birthday.getTime()).toEqual(new Date("1988/05/10").getTime());
expect(susan.name).toEqual("Susan");
expect(susan.spouse).toEqual(null);
expect(susan.children.length).toEqual(0);
}));
function saveRecord(t) {
return new Promise((res) => {
setTimeout(() => {
const saved = Object.assign(Object.assign({}, t), { id: Math.random() * 10000 });
res(saved);
}, 1);
});
}
it("can model db factories", () => __awaiter(void 0, void 0, void 0, function* () {
const dbChildFactory = childFactory.transform(saveRecord);
const savedParentFactory = Async.makeFactory({
name: "Parent",
birthday: Async.each((i) => Promise.resolve(new Date(`2017/05/${i}`))),
children: Async.each(() => []),
spouse: null,
});
const dbParentFactory = savedParentFactory.transform(saveRecord);
const familyFactory = savedParentFactory
.extend({
name: "Ted",
children: Promise.all([
yield dbChildFactory.build({ name: "Billy" }),
yield dbChildFactory.build({ name: "Amy" }),
]),
spouse: yield dbParentFactory.build({ name: "Susan" }),
})
.transform(saveRecord);
const ted = yield familyFactory.build({ birthday: new Date("1980/09/23") });
expect(ted.id).toBeGreaterThan(0);
expect(ted.birthday.getTime()).toEqual(new Date("1980/09/23").getTime());
expect(ted.name).toEqual("Ted");
expect(ted.spouse.id).toBeGreaterThan(0);
expect(ted.spouse.name).toEqual("Susan");
expect(ted.spouse.id).toBeGreaterThan(0);
expect(ted.children[0].name).toEqual("Billy");
expect(ted.children[1].name).toEqual("Amy");
}));
it("can create async factories from sync builders", () => __awaiter(void 0, void 0, void 0, function* () {
const parentFactory = Async.makeFactoryFromSync({
name: "Parent",
birthday: Sync.each((i) => new Date(`2017/05/${i}`)),
children: Sync.each(() => []),
spouse: null,
}, { startingSequenceNumber: 1 });
const susan = yield parentFactory.build({ name: "Susan" });
expect(susan.name).toEqual("Susan");
expect(susan.birthday.getTime()).toEqual(new Date("2017/05/01").getTime());
}));
it("seq num works as expected", () => __awaiter(void 0, void 0, void 0, function* () {
const factoryA = Async.makeFactory({
foo: Async.each((n) => n),
bar: "hello",
});
const a = yield factoryA.buildList(3);
expect(a[0].foo).toEqual(0);
expect(a[1].foo).toEqual(1);
expect(a[2].foo).toEqual(2);
}));
it("allows custom seq num start", () => __awaiter(void 0, void 0, void 0, function* () {
const factoryA = Async.makeFactory({
foo: Async.each((n) => n + 1),
bar: "hello",
}, { startingSequenceNumber: 3 });
const a = yield factoryA.build();
expect(a.foo).toEqual(4);
}));
it("Can reset sequence number back to config default i.e. 0", () => __awaiter(void 0, void 0, void 0, function* () {
const widgetFactory = Async.makeFactory({
name: "Widget",
id: Async.each((i) => i),
});
const widgets = yield widgetFactory.buildList(3);
expect(widgets[2].id).toBe(2);
widgetFactory.resetSequenceNumber();
const moreWidgets = yield widgetFactory.buildList(3);
expect(moreWidgets[2].id).toBe(2);
}));
it("Can reset sequence number back to non-config default", () => __awaiter(void 0, void 0, void 0, function* () {
const widgetFactory = Async.makeFactory({
name: "Widget",
id: Async.each((i) => i),
}, {
startingSequenceNumber: 100,
});
const widgets = yield widgetFactory.buildList(3);
expect(widgets[2].id).toBe(102);
widgetFactory.resetSequenceNumber();
const moreWidgets = yield widgetFactory.buildList(3);
expect(moreWidgets[2].id).toBe(102);
}));
it("Can reset sequence number to an arbitrary value", () => __awaiter(void 0, void 0, void 0, function* () {
const widgetFactory = Async.makeFactory({
name: "Widget",
id: Async.each((i) => i),
});
const widgets = yield widgetFactory.buildList(3);
expect(widgets[2].id).toBe(2);
widgetFactory.resetSequenceNumber(5);
const moreWidgets = yield widgetFactory.buildList(3);
expect(moreWidgets[0].id).toBe(5);
}));
it("clones deeply nested values", () => __awaiter(void 0, void 0, void 0, function* () {
const factoryA = Async.makeFactory({
bar: {
baz: "should-be-immutable",
},
});
const a = yield factoryA.build();
const b = yield factoryA.build();
a.bar.baz = "is-not-immutable";
expect(b.bar.baz).toEqual("should-be-immutable");
}));
describe("required fields", () => {
function makeFactoryA() {
return Async.makeFactoryWithRequired({
name: "hello",
}).transform((t) => (Object.assign(Object.assign({}, t), { name: t.name + t.name, id: t.name.length })));
}
it("supports build", () => __awaiter(void 0, void 0, void 0, function* () {
const factoryA = makeFactoryA();
// compile failures
//const z = await factoryA.build();
//const z = await factoryA.build({ });
//const z = await factoryA.build({ name: "uhoh" });
// data checks
const a = yield factoryA.build({ foreignId: "fk1" });
expect(a).toEqual({ name: "hellohello", foreignId: "fk1", id: 5 });
const b = yield factoryA.build({ foreignId: "fk2", name: "goodbye" });
expect(b).toEqual({ name: "goodbyegoodbye", foreignId: "fk2", id: 7 });
}));
it("supports buildList", () => __awaiter(void 0, void 0, void 0, function* () {
const factoryA = makeFactoryA();
// compile failures
//const [y,z] = await factoryA.buildList(5);
//const [y,z] = await factoryA.buildList(5, {});
//const [y,z] = await factoryA.buildList(5, { name: 'hello' });
// data checks
const [c, d] = yield factoryA.buildList(2, { foreignId: "fk3" });
expect(c).toEqual({ name: "hellohello", id: 5, foreignId: "fk3" });
expect(d).toEqual({ name: "hellohello", id: 5, foreignId: "fk3" });
}));
it("supports build from sync", () => __awaiter(void 0, void 0, void 0, function* () {
const factoryA = Sync.makeFactoryWithRequired({
name: "hello",
});
const factoryAPrime = Async.makeFactoryFromSync(factoryA.builder).transform((v) => ({
fk: v.foreignId,
name: v.name.toUpperCase(),
}));
// compile failures
//const z = await factoryAPrime.build();
//const z = await factoryAPrime.build({});
//const z = await factoryAPrime.build({ name: "hi" });
const a = yield factoryAPrime.build({ foreignId: "fk" });
expect(a).toEqual({ fk: "fk", name: "HELLO" });
// compile failures
//const [y,z] = await factoryAPrime.buildList(5);
//const [y,z] = await factoryAPrime.buildList(5, {});
//const [y,z] = await factoryAPrime.buildList(5, { name: 'hello' });
const [b, c] = yield factoryAPrime.buildList(5, { foreignId: "fkmany" });
expect(b).toEqual({ name: "HELLO", fk: "fkmany" });
expect(c).toEqual({ name: "HELLO", fk: "fkmany" });
}));
});
it("stops RecPartial at unknown (will fail to compile with null value otherwise)", () => __awaiter(void 0, void 0, void 0, function* () {
const dataFactory = Async.makeFactoryWithRequired({
id: Async.each((i) => i.toString()),
description: "lorem ipsum",
});
const instanceOfData = yield dataFactory.build({
id: "1",
payload: null,
});
expect(instanceOfData.payload).toEqual({ foo: "bar" });
}));
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NwZWMvYXN5bmMuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLHNDQUFzQztBQUN0QyxvQ0FBb0M7QUFDcEMsd0NBQTJDO0FBbUIzQyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO0lBQzNDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQVk7UUFDaEQsSUFBSSxFQUFFLEtBQUs7UUFDWCxLQUFLLEVBQUUsQ0FBQztLQUNULENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQ3JDO1FBQ0UsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxFQUFFLElBQUk7S0FDYixFQUNELEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLENBQzlCLENBQUM7SUFDRixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBUyxFQUFFO1FBQzlDLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBUyxFQUFFO1FBQ2pFLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBUyxFQUFFO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxHQUFTLEVBQUU7UUFDMUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMscUJBQXFCLEVBQUUsR0FBUyxFQUFFO1FBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ3RDLElBQUksRUFBRSxPQUFPO1lBQ2IsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztTQUN6QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsOEJBQThCLEVBQUUsR0FBUyxFQUFFO1FBQzVDLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBYTtZQUMxRCxJQUFJLEVBQUUsU0FBUztZQUNmLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckQsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBUyxFQUFFO2dCQUFDLE9BQUE7b0JBQy9CLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2lCQUMzQyxDQUFBO2NBQUEsQ0FBQztZQUNGLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7WUFDNUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztTQUNqQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBUyxFQUFFO1FBQzdDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDeEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDdEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtvQkFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ25CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDUixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztTQUNILENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBUyxFQUFFO1FBTTNELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQVM7WUFDOUMsU0FBUyxFQUFFLE9BQU87WUFDbEIsUUFBUSxFQUFFLE1BQU07WUFDaEIsUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLG1GQUFtRjtRQUNuRixNQUFNLElBQUksR0FBRyxNQUFNLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQVMsRUFBRTtRQUN6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsS0FBSyxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUU7WUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEdBQVMsRUFBRTtRQUNyQyxNQUFNLFVBQVUsR0FBRyxJQUFBLG1CQUFXLEVBQUM7WUFDN0IsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBUyxFQUFFLGtEQUFDLE9BQUEsSUFBSSxJQUFJLEVBQUUsQ0FBQSxHQUFBLENBQUM7WUFDN0MsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBUyxFQUFFLGtEQUFDLE9BQUEsSUFBSSxJQUFJLEVBQUUsQ0FBQSxHQUFBLENBQUM7U0FDOUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBQSxtQkFBVyxFQUFDO1lBQzdCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQztRQWFILE1BQU0sV0FBVyxHQUF3QixJQUFBLG1CQUFXLEVBQUM7WUFDbkQsT0FBTyxFQUFFLGFBQWE7U0FDdkIsQ0FBQzthQUNDLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDbkIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sV0FBVyxHQUF3QixJQUFBLG1CQUFXLEVBQUM7WUFDbkQsS0FBSyxFQUFFLGVBQWU7U0FDdkIsQ0FBQzthQUNDLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDbkIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNuQyxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ25DLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDbEMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsMkJBQTJCLEVBQUUsR0FBUyxFQUFFO1FBVXpDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBZ0I7WUFDM0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFVBQVUsRUFBRSxXQUFXO2dCQUN2QixNQUFNLEVBQUUsSUFBSTtnQkFDWixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUN0QjtTQUNGLENBQUMsQ0FBQztRQUVILGlFQUFpRTtRQUNqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLG1CQUFtQixDQUFDLEtBQUssQ0FBQztZQUM3QyxLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxFQUFFLElBQUk7Z0JBQ1osSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUNqQjtTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxHQUFTLEVBQUU7UUFDbEMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxRQUFRLENBQUM7WUFDaEQsT0FBTztnQkFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ1osUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDNUIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osUUFBUSxFQUFFLEVBQUU7YUFDYixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0UsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFSCxTQUFTLFVBQVUsQ0FBbUIsQ0FBSTtRQUN4QyxPQUFPLElBQUksT0FBTyxDQUFXLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLEtBQUssbUNBQ0wsQ0FBUyxLQUNiLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxHQUMxQixDQUFDO2dCQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxHQUFTLEVBQUU7UUFPdEMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQWtCO1lBQzVELElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEUsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQjthQUNyQyxNQUFNLENBQUM7WUFDTixJQUFJLEVBQUUsS0FBSztZQUNYLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNwQixNQUFNLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUM1QyxDQUFDO1lBQ0YsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztTQUN2RCxDQUFDO2FBQ0QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBUyxFQUFFO1FBQzdELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FDN0M7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEQsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sRUFBRSxJQUFJO1NBQ2IsRUFDRCxFQUFFLHNCQUFzQixFQUFFLENBQUMsRUFBRSxDQUM5QixDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQVMsRUFBRTtRQUt6QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFRO1lBQ3hDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekIsR0FBRyxFQUFFLE9BQU87U0FDYixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxHQUFTLEVBQUU7UUFLM0MsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FDaEM7WUFDRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixHQUFHLEVBQUUsT0FBTztTQUNiLEVBQ0QsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLEVBQUUsQ0FDOUIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMseURBQXlELEVBQUUsR0FBUyxFQUFFO1FBQ3ZFLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQWE7WUFDbEQsSUFBSSxFQUFFLFFBQVE7WUFDZCxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5QixhQUFhLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUVwQyxNQUFNLFdBQVcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxHQUFTLEVBQUU7UUFDcEUsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FDckM7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekIsRUFDRDtZQUNFLHNCQUFzQixFQUFFLEdBQUc7U0FDNUIsQ0FDRixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWhDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXBDLE1BQU0sV0FBVyxHQUFHLE1BQU0sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQVMsRUFBRTtRQUMvRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFhO1lBQ2xELElBQUksRUFBRSxRQUFRO1lBQ2QsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN6QixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUIsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sV0FBVyxHQUFHLE1BQU0sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEdBQVMsRUFBRTtRQU0zQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFRO1lBQ3hDLEdBQUcsRUFBRTtnQkFDSCxHQUFHLEVBQUUscUJBQXFCO2FBQzNCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFRL0IsU0FBUyxZQUFZO1lBQ25CLE9BQU8sS0FBSyxDQUFDLHVCQUF1QixDQUErQjtnQkFDakUsSUFBSSxFQUFFLE9BQU87YUFDZCxDQUFDLENBQUMsU0FBUyxDQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUNBQzlCLENBQUMsS0FDSixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUNyQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQ2pCLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsR0FBUyxFQUFFO1lBQzlCLE1BQU0sUUFBUSxHQUFHLFlBQVksRUFBRSxDQUFDO1lBQ2hDLG1CQUFtQjtZQUNuQixtQ0FBbUM7WUFDbkMsc0NBQXNDO1lBQ3RDLG1EQUFtRDtZQUVuRCxjQUFjO1lBQ2QsTUFBTSxDQUFDLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxNQUFNLENBQUMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUEsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9CQUFvQixFQUFFLEdBQVMsRUFBRTtZQUNsQyxNQUFNLFFBQVEsR0FBRyxZQUFZLEVBQUUsQ0FBQztZQUNoQyxtQkFBbUI7WUFDbkIsNENBQTRDO1lBQzVDLGdEQUFnRDtZQUNoRCwrREFBK0Q7WUFFL0QsY0FBYztZQUNkLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUEsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQVMsRUFBRTtZQUt4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQXdCO2dCQUNuRSxJQUFJLEVBQUUsT0FBTzthQUNkLENBQUMsQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FDN0MsUUFBUSxDQUFDLE9BQU8sQ0FDakIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUztnQkFDZixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7YUFDM0IsQ0FBQyxDQUFDLENBQUM7WUFFSixtQkFBbUI7WUFDbkIsd0NBQXdDO1lBQ3hDLDBDQUEwQztZQUMxQyxzREFBc0Q7WUFDdEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDekQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFL0MsbUJBQW1CO1lBQ25CLGlEQUFpRDtZQUNqRCxxREFBcUQ7WUFDckQsb0VBQW9FO1lBQ3BFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyw4RUFBOEUsRUFBRSxHQUFTLEVBQUU7UUFNNUYsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFrQjtZQUNqRSxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLFdBQVcsRUFBRSxhQUFhO1NBQzNCLENBQUMsQ0FBQztRQUNILE1BQU0sY0FBYyxHQUFHLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQztZQUM3QyxFQUFFLEVBQUUsR0FBRztZQUNQLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const Pipe = require("../src/pipeline");
const Factory = require("../src/async");
describe("pipelines", () => {
const childFactory = Factory.makeFactory({
name: "Kid",
grade: 1
});
const parentFactory = Factory.makeFactoryWithRequired({
name: "Parent",
birthday: Factory.each(i => Promise.resolve(new Date(`2017/05/${i}`))),
children: Factory.each(() => [])
}, { startingSequenceNumber: 1 });
const grandpaFactory = parentFactory.transform(parent => {
return Object.assign(Object.assign({}, parent), { spoils: true });
});
it("builds data in steps", () => __awaiter(void 0, void 0, void 0, function* () {
const p = Pipe.Pipeline.start()
.addValues({ hello: "kitty", hola: "espanol" })
.addValues(() => Promise.resolve({ byebye: "birdie" }))
.addValues(v => ({
corner: `${v.hello} corner`,
golf: v.byebye
}))
.addFactory(childFactory, "kiddo", { grade: 2 })
.addFactory(parentFactory, "dad", v => Promise.resolve({
name: "Dad",
children: [v.kiddo],
spouse: null
}))
.addTxFactory(grandpaFactory, "gramps", v => ({
name: "Gramps",
children: [v.dad],
spouse: null
}));
const data = yield p;
expect(data.hello).toEqual("kitty");
expect(data.hola).toEqual("espanol");
expect(data.byebye).toEqual("birdie");
expect(data.corner).toEqual("kitty corner");
expect(data.golf).toEqual("birdie");
expect(data.kiddo.grade).toEqual(2);
expect(data.kiddo.name).toEqual("Kid");
expect(data.dad.name).toEqual("Dad");
expect(data.dad.birthday.getTime()).toEqual(new Date("2017/05/01").getTime());
expect(data.dad.children.length).toEqual(1);
expect(data.dad.children[0]).toEqual(data.kiddo);
expect(data.dad.spouse).toBeNull();
expect(data.gramps.name).toEqual("Gramps");
expect(data.gramps.spoils).toEqual(true);
expect(data.gramps.children.length).toEqual(1);
expect(data.gramps.children[0]).toEqual(data.dad);
expect(data.gramps.spouse).toBeNull();
}));
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NwZWMvcGlwZWxpbmUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLHdDQUF3QztBQUN4Qyx3Q0FBd0M7QUFjeEMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7SUFDekIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBWTtRQUNsRCxJQUFJLEVBQUUsS0FBSztRQUNYLEtBQUssRUFBRSxDQUFDO0tBQ1QsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUNuRDtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztLQUNqQyxFQUNELEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLENBQzlCLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3RELHVDQUNLLE1BQU0sS0FDVCxNQUFNLEVBQUUsSUFBSSxJQUNaO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsc0JBQXNCLEVBQUUsR0FBUyxFQUFFO1FBQ3BDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO2FBQzVCLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO2FBQzlDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxD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
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Sync = require("../src/sync");
describe("factories build stuff", () => {
const childFactory = Sync.makeFactory({
name: "Kid",
grade: 1,
});
const parentFactory = Sync.makeFactory({
name: "Parent",
birthday: Sync.each((i) => new Date(`2017/05/${i + 1}`)),
children: Sync.each(() => []),
spouse: null,
});
it("makes an object from a factory", () => {
const jimmy = childFactory.build({ name: "Jimmy" });
expect(jimmy.name).toEqual("Jimmy");
expect(jimmy.grade).toEqual(1);
});
it("makes an object with default field from a factory", () => {
const jimmy = childFactory.build();
expect(jimmy.name).toEqual("Kid");
expect(jimmy.grade).toEqual(1);
});
it("makes an object with default field explicitly set to null", () => {
const anon = childFactory.build({ name: null });
expect(anon.name).toBeNull();
expect(anon.grade).toEqual(1);
});
it("can make use of sequence #", () => {
const susan = parentFactory.build({ name: "Susan" });
const edward = parentFactory.build({ name: "Edward" });
expect(susan.birthday.getTime()).toEqual(new Date("2017/05/01").getTime());
expect(edward.birthday.getTime()).toEqual(new Date("2017/05/02").getTime());
});
it("can handle has many", () => {
const jimmy = childFactory.build({ name: "Jimmy" });
const alice = childFactory.build({ name: "Alice", grade: 3 });
const susan = parentFactory.build({
name: "Susan",
children: [jimmy, alice],
});
expect(susan.children.map((c) => c.name)).toEqual(["Jimmy", "Alice"]);
});
it("can refer to other factories", () => {
const parentWithKidsFactory = Sync.makeFactory({
name: "Timothy",
birthday: Sync.each((i) => new Date(`2017/05/${i}`)),
children: Sync.each(() => [
childFactory.build({ name: "Bobby" }),
childFactory.build({ name: "Jane" }),
]),
spouse: null,
});
const tim = parentWithKidsFactory.build({
birthday: new Date("2017-02-01"),
});
expect(tim.children.map((c) => c.name)).toEqual(["Bobby", "Jane"]);
});
it("can extend existing factories", () => {
const geniusFactory = childFactory.extend({
grade: Sync.each((i) => (i + 1) * 2),
});
const colin = geniusFactory.build({ name: "Colin" });
expect(colin.grade).toEqual(2);
const albert = geniusFactory.build({ name: "Albert" });
expect(albert.grade).toEqual(4);
});
it("can derive one value based on another value", () => {
const personFactory = Sync.makeFactory({
firstName: "Double-O",
lastName: Sync.each(() => "Bond"),
fullName: "",
}).withDerivation("fullName", (p) => `${p.firstName} ${p.lastName}`);
//.withDerivation2(['firstName','lastName'],'fullName', (fn, ln) => `${fn} ${ln}`);
const bond = personFactory.build({ firstName: "James" });
expect(bond.fullName).toEqual("James Bond");
const doubleO = personFactory.build();
expect(doubleO.fullName).toEqual("Double-O Bond");
});
it("can build a list of items", () => {
const children = childFactory.buildList(3, { name: "Bruce" });
expect(children.length).toEqual(3);
for (let child of children) {
expect(child.name).toEqual("Bruce");
expect(child.grade).toEqual(1);
}
});
it("can combine factories", () => {
const timeStamps = Sync.makeFactory({
createdAt: Sync.each(() => new Date()),
updatedAt: Sync.each(() => new Date()),
});
const softDelete = Sync.makeFactory({
isDeleted: false,
});
const postFactory = Sync.makeFactory({
content: "lorem ipsum",
})
.combine(timeStamps)
.combine(softDelete);
const userFactory = Sync.makeFactory({
email: "test@user.com",
})
.combine(timeStamps)
.combine(softDelete);
const post = postFactory.build({
content: "yadda yadda yadda",
isDeleted: true,
});
expect(post.createdAt.getTime() - new Date().getTime()).toBeLessThan(100);
expect(post.isDeleted).toEqual(true);
const user = userFactory.build({
email: "foo@bar.com",
createdAt: new Date("2018/01/02"),
});
expect(user.createdAt.getTime()).toEqual(new Date("2018/01/02").getTime());
expect(post.updatedAt.getTime() - new Date().getTime()).toBeLessThan(100);
expect(user.email).toEqual("foo@bar.com");
});
it("supports nested factories", () => {
const groceryStoreFactory = Sync.makeFactory({
aisle: {
name: "Junk Food Aisle",
typeOfFood: "Junk Food",
tags: ["a", "b", "c"],
},
});
// Error: Property 'name' is missing in type '{ budget: number; }
const aStore = groceryStoreFactory.build({
aisle: {
budget: 9999,
tags: ["a", "b"],
},
});
expect(aStore.aisle.budget).toEqual(9999);
expect(aStore.aisle.typeOfFood).toEqual("Junk Food");
expect(aStore.aisle.tags).toEqual(["a", "b"]);
});
it("supports recursive factories", () => {
const factoryA = Sync.makeFactory({
foo: Sync.each((n) => n),
bar: "hello",
recur: null,
});
const factoryAPrime = factoryA
.withDerivation("foo", (_v, n) => {
// inner: factoryA.build().foo should be 0, n should be 1
// outer: factoryA.build().foo should be 1, n should be 2
const foo = factoryA.build().foo;
return foo * 100 + n; // 001 : 102
})
.withDerivation("bar", (v, n) => {
// inner: n should be 2, v.foo should be 001 -> "001:1"
// outer: n should be 3, v.foo should be 102 -> "102:2"
return v.foo + ":" + n;
});
const justA = factoryAPrime.build({ foo: 99 }); // seq 1
expect(justA.foo).toEqual(99);
const aWithA = factoryAPrime.build({
// outer: starts on seq 3
recur: factoryAPrime.build(), // inner: starts on seq 2
});
expect(aWithA.foo).toEqual(102);
expect(aWithA.bar).toEqual("102:2");
expect(aWithA.recur.foo).toEqual(1);
expect(aWithA.recur.bar).toEqual("1:1");
});
it("allows custom seq num start", () => {
const factoryA = Sync.makeFactory({
foo: Sync.each((n) => n + 1),
bar: "hello",
}, { startingSequenceNumber: 3 });
const a = factoryA.build();
expect(a.foo).toEqual(4);
});
it("Can reset sequence number back to non-config default i.e. 0", () => {
const widgetFactory = Sync.makeFactory({
name: "Widget",
id: Sync.each((i) => i),
});
const widgets = widgetFactory.buildList(3);
expect(widgets.map((w) => w.id)).toEqual([0, 1, 2]);
widgetFactory.resetSequenceNumber();
const moreWidgets = widgetFactory.buildList(3);
expect(moreWidgets.map((w) => w.id)).toEqual([0, 1, 2]);
});
it("Can reset sequence number back to config default", () => {
const widgetFactory = Sync.makeFactory({
name: "Widget",
id: Sync.each((i) => i),
}, {
startingSequenceNumber: 100,
});
const widgets = widgetFactory.buildList(3);
expect(widgets[2].id).toBe(102);
widgetFactory.resetSequenceNumber();
const moreWidgets = widgetFactory.buildList(3);
expect(moreWidgets[2].id).toBe(102);
});
it("Can reset sequence number to an arbitrary value", () => {
const widgetFactory = Sync.makeFactory({
name: "Widget",
id: Sync.each((i) => i),
});
const widgets = widgetFactory.buildList(3);
expect(widgets[2].id).toBe(2);
widgetFactory.resetSequenceNumber(5);
const moreWidgets = widgetFactory.buildList(3);
expect(moreWidgets[0].id).toBe(5);
});
it("clones deeply nested values", () => {
const factoryA = Sync.makeFactory({
bar: {
baz: "should-be-immutable",
},
});
const a = factoryA.build();
const b = factoryA.build();
a.bar.baz = "is-not-immutable";
expect(b.bar.baz).toEqual("should-be-immutable");
});
it("supports required fields", () => {
const factoryA = Sync.makeFactoryWithRequired({
name: "hello",
});
// compile failures
//const z = factoryA.build();
//const z = factoryA.build({ });
//const z = factoryA.build({ name: "uhoh" });
// data checks
const a = factoryA.build({ foreignId: "fk1" });
expect(a).toEqual({ name: "hello", foreignId: "fk1" });
const b = factoryA.build({ foreignId: "fk2", name: "goodbye" });
expect(b).toEqual({ name: "goodbye", foreignId: "fk2" });
// more compile failures
//const [y,z] = factoryA.buildList(5);
//const [y,z] = factoryA.buildList(5, {});
//const [y,z] = factoryA.buildList(5, { name: 'hello' });
// data checks
const [c, d] = factoryA.buildList(2, { foreignId: "fk3" });
expect(c).toEqual({ name: "hello", foreignId: "fk3" });
expect(d).toEqual({ name: "hello", foreignId: "fk3" });
});
it("can build item using BuilderFactory", () => {
const widgetFactory = Sync.makeFactory(() => ({
name: "Widget",
id: Sync.each((i) => i + 1),
}));
const widget = widgetFactory.build({
name: "New widget",
});
expect(widget).toStrictEqual({
name: "New widget",
id: 1,
});
});
it("can extend factory with BuilderFactory", () => {
const widgetFactory = Sync.makeFactory(() => ({
name: "Widget",
id: Sync.each((i) => i + 1),
}));
const newWidgetFactory = widgetFactory.extend({
name: "Extended widget",
});
const widget = newWidgetFactory.build({
name: "New widget",
});
expect(widget).toStrictEqual({
name: "New widget",
id: 1,
});
});
it("can combine factories with BuilderFactory", () => {
const timeStamps = Sync.makeFactory(() => ({
createdAt: Sync.each(() => new Date()),
updatedAt: Sync.each(() => new Date()),
}));
const softDelete = Sync.makeFactory(() => ({
isDeleted: false,
}));
const postFactory = Sync.makeFactory(() => ({
content: "lorem ipsum",
}))
.combine(timeStamps)
.combine(softDelete);
const userFactory = Sync.makeFactory({
email: "test@user.com",
})
.combine(timeStamps)
.combine(softDelete);
const post = postFactory.build({
content: "yadda yadda yadda",
isDeleted: true,
});
expect(post.createdAt.getTime() - new Date().getTime()).toBeLessThan(100);
expect(post.isDeleted).toEqual(true);
const user = userFactory.build({
email: "foo@bar.com",
createdAt: new Date("2018/01/02"),
});
expect(user.createdAt.getTime()).toEqual(new Date("2018/01/02").getTime());
expect(post.updatedAt.getTime() - new Date().getTime()).toBeLessThan(100);
expect(user.email).toEqual("foo@bar.com");
});
it("stops RecPartial at unknown (will fail to compile with null value otherwise)", () => {
const dataFactory = Sync.makeFactoryWithRequired({
id: Sync.each((i) => i.toString()),
description: "lorem ipsum",
});
const instanceOfData = dataFactory.build({
id: "1",
payload: null,
});
expect(instanceOfData.payload).toEqual({ foo: "bar" });
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3BlYy9zeW5jLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvQ0FBb0M7QUFtQnBDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDckMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBWTtRQUMvQyxJQUFJLEVBQUUsS0FBSztRQUNYLEtBQUssRUFBRSxDQUFDO0tBQ1QsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBYTtRQUNqRCxJQUFJLEVBQUUsUUFBUTtRQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7UUFDeEMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtRQUMzRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsTUFBTSxDQUFDLEtBQUss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
import { RecPartial, Omit } from "./shared";
import * as Sync from "./sync";
import { Async } from ".";
export interface AsyncFactoryConfig {
readonly startingSequenceNumber?: number;
}
export declare type FactoryFunc<T, K extends keyof T, U = T> = keyof T extends K ? (item?: RecPartial<T>) => Promise<U> : (item: RecPartial<T> & Omit<T, K>) => Promise<U>;
export declare type ListFactoryFunc<T, K extends keyof T, U = T> = keyof T extends K ? (count: number, item?: RecPartial<T>) => Promise<U[]> : (count: number, item: RecPartial<T> & Omit<T, K>) => Promise<U[]>;
export declare function lift<T>(t: T | Promise<T>): Promise<T>;
export declare class Generator<T> {
readonly func: (seq: number) => T | Promise<T>;
constructor(func: (seq: number) => T | Promise<T>);
build(seq: number): Promise<T>;
}
export declare class Derived<TOwner, TProperty> {
readonly func: (owner: TOwner, seq: number) => TProperty | Promise<TProperty>;
constructor(func: (owner: TOwner, seq: number) => TProperty | Promise<TProperty>);
build(owner: TOwner, seq: number): Promise<TProperty>;
}
export interface IFactory<T, K extends keyof T, U> {
build: FactoryFunc<T, K, U>;
buildList: ListFactoryFunc<T, K, U>;
}
export declare class Factory<T, K extends keyof T = keyof T> implements IFactory<T, K, T> {
readonly builder: Builder<T, K>;
private readonly config;
private seqNum;
private getStartingSequenceNumber;
constructor(builder: Builder<T, K>, config: AsyncFactoryConfig | undefined);
resetSequenceNumber(newSequenceNumber?: number): void;
build: Async.FactoryFunc<T, K, T>;
buildList: Async.ListFactoryFunc<T, K, T>;
extend(def: RecPartial<Builder<T, K>>): Factory<T, K>;
combine<U, K2 extends keyof U>(other: Factory<U, K2>): Factory<T & U, K | K2>;
transform<U>(fn: (t: T) => U | Promise<U>): TransformFactory<T, K, U>;
withDerivation<KOut extends keyof T>(kOut: KOut, f: (v1: T, seq: number) => T[KOut] | Promise<T[KOut]>): Factory<T, K>;
withDerivation1<K1 extends keyof T, KOut extends keyof T>(kInput: [K1], kOut: KOut, f: (v1: T[K1], seq: number) => T[KOut] | Promise<T[KOut]>): Factory<T, K>;
withDerivation2<K1 extends keyof T, K2 extends keyof T, KOut extends keyof T>(kInput: [K1, K2], kOut: KOut, f: (v1: T[K1], v2: T[K2], seq: number) => T[KOut] | Promise<T[KOut]>): Factory<T, K>;
withDerivation3<K1 extends keyof T, K2 extends keyof T, K3 extends keyof T, KOut extends keyof T>(kInput: [K1, K2, K3], kOut: KOut, f: (v1: T[K1], v2: T[K2], v3: T[K3], seq: number) => T[KOut] | Promise<T[KOut]>): Factory<T, K>;
withDerivation4<K1 extends keyof T, K2 extends keyof T, K3 extends keyof T, K4 extends keyof T, KOut extends keyof T>(kInput: [K1, K2, K3, K4], kOut: KOut, f: (v1: T[K1], v2: T[K2], v3: T[K3], v4: T[K4], seq: number) => T[KOut] | Promise<T[KOut]>): Factory<T, K>;
withDerivation5<K1 extends keyof T, K2 extends keyof T, K3 extends keyof T, K4 extends keyof T, K5 extends keyof T, KOut extends keyof T>(kInput: [K1, K2, K3, K4, K5], kOut: KOut, f: (v1: T[K1], v2: T[K2], v3: T[K3], v4: T[K4], v5: T[K5], seq: number) => T[KOut] | Promise<T[KOut]>): Factory<T, K>;
}
export declare class TransformFactory<T, K extends keyof T, U> implements IFactory<T, K, U> {
private readonly inner;
private readonly transform;
constructor(inner: Factory<T, K>, transform: (t: T) => U | Promise<U>);
build: Async.FactoryFunc<T, K, U>;
buildList: Async.ListFactoryFunc<T, K, U>;
}
export declare type Builder<T, K extends keyof T = keyof T> = {
[P in K]: T[P] | Promise<T[P]> | Generator<T[P]> | Derived<T, T[P]>;
};
export declare function val<T>(val: T): Generator<T>;
export declare function each<T>(f: (seqNum: number) => T | Promise<T>): Generator<T>;
export declare function makeFactory<T>(builder: Builder<T, keyof T>, config?: AsyncFactoryConfig): Factory<T, keyof T>;
export declare function makeFactoryWithRequired<T, K extends keyof T>(builder: Builder<T, Exclude<keyof T, K>>, config?: AsyncFactoryConfig): Factory<T, Exclude<keyof T, K>>;
export declare function makeFactoryFromSync<T, K extends keyof T = keyof T>(builder: Sync.Builder<T, K>, config?: AsyncFactoryConfig): Factory<T, K>;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeFactoryFromSync = exports.makeFactoryWithRequired = exports.makeFactory = exports.each = exports.val = exports.TransformFactory = exports.Factory = exports.Derived = exports.Generator = exports.lift = void 0;
const shared_1 = require("./shared");
const Sync = require("./sync");
const cloneDeep = require("clone-deep");
function isPromise(t) {
return typeof t["then"] === "function";
}
function lift(t) {
if (isPromise(t)) {
return t;
}
else {
return Promise.resolve(t);
}
}
exports.lift = lift;
class Generator {
constructor(func) {
this.func = func;
}
build(seq) {
return lift(this.func(seq));
}
}
exports.Generator = Generator;
class Derived {
constructor(func) {
this.func = func;
}
build(owner, seq) {
return lift(this.func(owner, seq));
}
}
exports.Derived = Derived;
class Factory {
constructor(builder, config) {
this.builder = builder;
this.config = config;
this.getStartingSequenceNumber = () => (this.config && this.config.startingSequenceNumber) || 0;
this.build = ((item) => __awaiter(this, void 0, void 0, function* () {
const seqNum = this.seqNum;
this.seqNum++;
const base = yield buildBase(seqNum, this.builder);
let v = Object.assign({}, base.value); //, item);
if (item) {
v = (0, shared_1.recursivePartialOverride)(v, item);
}
const keys = Object.keys(item || {});
for (const der of base.derived) {
if (keys.indexOf(der.key) < 0) {
v[der.key] = yield der.derived.build(v, seqNum);
}
}
return lift(v);
}));
this.buildList = ((count, item) => __awaiter(this, void 0, void 0, function* () {
const ts = Array(count); // allocate to correct size
// don't run in parallel, so that seq num works predictably
for (let i = 0; i < count; i++) {
ts[i] = yield this.build(item);
}
return ts;
}));
this.seqNum = this.getStartingSequenceNumber();
}
resetSequenceNumber(newSequenceNumber) {
this.seqNum = newSequenceNumber
? newSequenceNumber
: this.getStartingSequenceNumber();
}
extend(def) {
const builder = Object.assign({}, this.builder, def);
return new Factory(builder, this.config);
}
combine(other) {
const builder = Object.assign({}, this.builder, other.builder);
return new Factory(builder, this.config);
}
transform(fn) {
return new TransformFactory(this, fn);
}
withDerivation(kOut, f) {
const partial = {};
partial[kOut] = new Derived(f);
return this.extend(partial);
}
withDerivation1(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], i));
return this.extend(partial);
}
withDerivation2(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], t[kInput[1]], i));
return this.extend(partial);
}
withDerivation3(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], t[kInput[1]], t[kInput[2]], i));
return this.extend(partial);
}
withDerivation4(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], t[kInput[1]], t[kInput[2]], t[kInput[3]], i));
return this.extend(partial);
}
withDerivation5(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], t[kInput[1]], t[kInput[2]], t[kInput[3]], t[kInput[4]], i));
return this.extend(partial);
}
}
exports.Factory = Factory;
class TransformFactory {
constructor(inner, transform) {
this.inner = inner;
this.transform = transform;
this.build = ((item) => __awaiter(this, void 0, void 0, function* () {
const v = yield this.inner.build(item);
const u = yield lift(this.transform(v));
return u;
}));
this.buildList = ((count, item) => __awaiter(this, void 0, void 0, function* () {
const vs = yield this.inner.buildList(count, item);
return Promise.all(vs.map(this.transform).map(lift));
}));
}
}
exports.TransformFactory = TransformFactory;
function val(val) {
return new Generator(() => val);
}
exports.val = val;
function each(f) {
return new Generator(f);
}
exports.each = each;
function buildBase(seqNum, builder) {
return __awaiter(this, void 0, void 0, function* () {
const t = {};
const keys = Object.getOwnPropertyNames(builder);
const derived = [];
for (const key of keys) {
const v = builder[key];
let value = v;
if (!!v && typeof v === "object") {
if (isPromise(v)) {
value = yield v;
}
else if (v.constructor === Generator) {
value = yield v.build(seqNum);
}
else if (v.constructor == Derived) {
derived.push({ key, derived: v });
}
else if (v.constructor === Sync.Generator) {
value = v.build(seqNum);
}
else if (v.constructor == Sync.Derived) {
derived.push({ key, derived: new Derived(v.func) });
}
else {
value = cloneDeep(v);
}
}
t[key] = value;
}
return { value: t, derived };
});
}
function makeFactory(builder, config) {
return new Factory(builder, config);
}
exports.makeFactory = makeFactory;
function makeFactoryWithRequired(builder, config) {
return new Factory(builder, config);
}
exports.makeFactoryWithRequired = makeFactoryWithRequired;
function makeFactoryFromSync(builder, config) {
return new Factory(builder, config);
}
exports.makeFactoryFromSync = makeFactoryFromSync;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEscUNBQXNFO0FBQ3RFLCtCQUErQjtBQUUvQix3Q0FBd0M7QUFjeEMsU0FBUyxTQUFTLENBQW1CLENBQWlCO0lBQ3BELE9BQU8sT0FBUSxDQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFnQixJQUFJLENBQUksQ0FBaUI7SUFDdkMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxDQUFDLENBQUM7S0FDVjtTQUFNO1FBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzNCO0FBQ0gsQ0FBQztBQU5ELG9CQU1DO0FBRUQsTUFBYSxTQUFTO0lBQ3BCLFlBQXFCLElBQXFDO1FBQXJDLFNBQUksR0FBSixJQUFJLENBQWlDO0lBQUcsQ0FBQztJQUN2RCxLQUFLLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBTEQsOEJBS0M7QUFDRCxNQUFhLE9BQU87SUFDbEIsWUFDVyxJQUcwQjtRQUgxQixTQUFJLEdBQUosSUFBSSxDQUdzQjtJQUNsQyxDQUFDO0lBQ0csS0FBSyxDQUFDLEtBQWEsRUFBRSxHQUFXO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBVkQsMEJBVUM7QUFPRCxNQUFhLE9BQU87SUFNbEIsWUFDVyxPQUFzQixFQUNkLE1BQXNDO1FBRDlDLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFnQztRQUxqRCw4QkFBeUIsR0FBRyxH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
import * as Async from "./async";
export { Async };
import * as Sync from "./sync";
export { Sync };
import * as Pipeline from "./pipeline";
export { Pipeline };
export { RecPartial } from "./shared";
export { FactoryFunc, Generator, Derived, Factory, Builder, BuilderFactory, val, each, makeFactory } from "./sync";
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeFactory = exports.each = exports.val = exports.Factory = exports.Derived = exports.Generator = exports.Pipeline = exports.Sync = exports.Async = void 0;
const Async = require("./async");
exports.Async = Async;
const Sync = require("./sync");
exports.Sync = Sync;
const Pipeline = require("./pipeline");
exports.Pipeline = Pipeline;
// for now, for backwards compat
var sync_1 = require("./sync");
Object.defineProperty(exports, "Generator", { enumerable: true, get: function () { return sync_1.Generator; } });
Object.defineProperty(exports, "Derived", { enumerable: true, get: function () { return sync_1.Derived; } });
Object.defineProperty(exports, "Factory", { enumerable: true, get: function () { return sync_1.Factory; } });
Object.defineProperty(exports, "val", { enumerable: true, get: function () { return sync_1.val; } });
Object.defineProperty(exports, "each", { enumerable: true, get: function () { return sync_1.each; } });
Object.defineProperty(exports, "makeFactory", { enumerable: true, get: function () { return sync_1.makeFactory; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWlDO0FBQ3hCLHNCQUFLO0FBRWQsK0JBQStCO0FBQ3RCLG9CQUFJO0FBRWIsdUNBQXVDO0FBQzlCLDRCQUFRO0FBSWpCLGdDQUFnQztBQUNoQywrQkFVZ0I7QUFSZCxpR0FBQSxTQUFTLE9BQUE7QUFDVCwrRkFBQSxPQUFPLE9BQUE7QUFDUCwrRkFBQSxPQUFPLE9BQUE7QUFHUCwyRkFBQSxHQUFHLE9BQUE7QUFDSCw0RkFBQSxJQUFJLE9BQUE7QUFDSixtR0FBQSxXQUFXLE9BQUEifQ==
import * as Async from "./async";
import { RecPartial, Omit } from "./shared";
declare type MaybePromise<T> = T | Promise<T>;
declare type PromiseFunc<P, T> = (p: P) => MaybePromise<T>;
declare type MaybePromiseFunc<P, T> = T | PromiseFunc<P, T>;
declare type PipePartial<P, T> = MaybePromiseFunc<P, RecPartial<T>>;
declare type PipePartialRec<P, T, K extends keyof T> = MaybePromiseFunc<P, RecPartial<Pick<T, K>> & Omit<T, K>>;
export declare class Pipeline<P extends Object = {}> implements PromiseLike<P> {
private current;
constructor(current: Promise<P>);
static start(): Pipeline<{}>;
addValues<P2 extends Object>(val: MaybePromiseFunc<P, P2>): Pipeline<P & P2>;
addFactoryFunc<T, U, K extends string, KT extends keyof T>(factory: Async.FactoryFunc<T, KT, U>, key: K, partial: keyof T extends KT ? PipePartial<P, T> : PipePartialRec<P, T, KT>): Pipeline<P & {
[k in K]: U;
}>;
addFactory<T, K extends string, KT extends keyof T>(factory: Async.Factory<T, KT>, key: K, partial: keyof T extends KT ? PipePartial<P, T> : PipePartialRec<P, T, KT>): Pipeline<P & {
[k in K]: T;
}>;
addTxFactory<T, U, K extends string, KT extends keyof T = keyof T>(factory: Async.TransformFactory<T, KT, U>, key: K, partial: keyof T extends KT ? PipePartial<P, T> : PipePartialRec<P, T, KT>): Pipeline<P & {
[k in K]: U;
}>;
then<TResult1 = P, TResult2 = never>(onfulfilled?: (value: P) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2>;
}
export {};
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Pipeline = void 0;
const Async = require("./async");
class Pipeline {
constructor(current) {
this.current = current;
}
static start() {
return new Pipeline(Promise.resolve({}));
}
//add<T,U>(factory: Async.IFactory<T,U> | Async.FactoryFunc<T,U>, val: Parti (p:P) => Partial<T>)
addValues(val) {
return new Pipeline(this.current.then((c) => __awaiter(this, void 0, void 0, function* () {
const v = typeof val === "function"
? yield Async.lift(val(c))
: val;
return Object.assign(Object.assign({}, c), v);
})));
}
// NOTE: want to combine all addFactory() methods, but
// Typescript and or ts-node seems to have problems
// also want use object { key: partial } instead
// but can't get the types right
addFactoryFunc(factory, key, partial) {
return new Pipeline(this.current.then((c) => __awaiter(this, void 0, void 0, function* () {
const p = typeof partial === "function"
? yield Async.lift(partial(c))
: partial;
const val = yield factory(p);
const newV = {};
newV[key] = val;
return Object.assign(Object.assign({}, c), newV);
})));
}
addFactory(factory, key, partial) {
return this.addFactoryFunc(((v) => factory.build(v)), key, partial);
}
addTxFactory(factory, key, partial) {
return this.addFactoryFunc(((v) => factory.build(v)), key, partial);
}
then(onfulfilled, onrejected) {
return this.current.then(onfulfilled, onrejected);
}
}
exports.Pipeline = Pipeline;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaUNBQWlDO0FBWWpDLE1BQWEsUUFBUTtJQUNuQixZQUFvQixPQUFtQjtRQUFuQixZQUFPLEdBQVAsT0FBTyxDQUFZO0lBQUcsQ0FBQztJQUUzQyxNQUFNLENBQUMsS0FBSztRQUNWLE9BQU8sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxpR0FBaUc7SUFDMUYsU0FBUyxDQUNkLEdBQTRCO1FBRTVCLE9BQU8sSUFBSSxRQUFRLENBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQU0sQ0FBQyxFQUFDLEVBQUU7WUFDMUIsTUFBTSxDQUFDLEdBQ0wsT0FBTyxHQUFHLEtBQUssVUFBVTtnQkFDdkIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBRSxHQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ1YsdUNBQ00sQ0FBUyxHQUNULENBQVMsRUFDYjtRQUNKLENBQUMsQ0FBQSxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsbURBQW1EO0lBQ25ELGdEQUFnRDtJQUNoRCxnQ0FBZ0M7SUFDekIsY0FBYyxDQUNuQixPQUFvQyxFQUNwQyxHQUFNLEVBQ04sT0FBMEU7UUFFMUUsT0FBTyxJQUFJLFFBQVEsQ0FDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBTSxDQUFDLEVBQUMsRUFBRTtZQUMxQixNQUFNLENBQUMsR0FDTCxPQUFPLE9BQU8sS0FBSyxVQUFVO2dCQUMzQixDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFFLE9BQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNkLE1BQU0sR0FBRyxHQUFHLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sSUFBSSxHQUFPLEVBQUUsQ0FBQztZQUNuQixJQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLHVDQUNNLENBQVMsR0FDVixJQUFJLEVBQ1A7UUFDSixDQUFDLENBQUEsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sVUFBVSxDQUNmLE9BQTZCLEVBQzdCLEdBQU0sRUFDTixPQUEwRTtRQUUxRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQ3hCLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQVEsRUFDckMsR0FBRyxFQUNILE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVNLFlBQVksQ0FDakIsT0FBeUMsRUFDekMsR0FBTSxFQUNOLE9BQTBFO1FBRTFFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FDeEIsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBUSxFQUNyQyxHQUFHLEVBQ0gsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUNGLFdBQTRELEVBQzVELFVBQThEO1FBRTlELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQWpGRCw0QkFpRkMifQ==
export declare type RecPartial<T> = {
[P in keyof T]?: RecPartial<T[P]>;
};
export declare type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
export declare function recursivePartialOverride<U>(x: U, y: RecPartial<U>): U;
export declare function uniq<T>(ts: Array<T>): Array<T>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.uniq = exports.recursivePartialOverride = void 0;
function recursivePartialOverride(x, y) {
if (y === undefined || y === null)
return x;
const objProto = Object.getPrototypeOf({});
if (Object.getPrototypeOf(y) != objProto)
return y;
let v = Object.assign({}, x);
let yKeys = Object.keys(y);
const allKeys = uniq(Object.keys(v).concat(yKeys));
for (const key of allKeys) {
if (yKeys.indexOf(key) >= 0) {
const itemKeyVal = y[key];
if (null != itemKeyVal && typeof itemKeyVal === "object") {
const baseKeyVal = v[key];
v[key] = recursivePartialOverride(baseKeyVal, itemKeyVal);
}
else {
v[key] = itemKeyVal;
}
}
}
return v;
}
exports.recursivePartialOverride = recursivePartialOverride;
function uniq(ts) {
const out = [];
for (const v of ts) {
if (out.indexOf(v) < 0) {
out.push(v);
}
}
return out;
}
exports.uniq = uniq;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxTQUFnQix3QkFBd0IsQ0FBSSxDQUFJLEVBQUUsQ0FBZ0I7SUFDaEUsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUTtRQUFFLE9BQU8sQ0FBUSxDQUFDO0lBQzFELElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLFVBQVUsR0FBSSxDQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDeEQsTUFBTSxVQUFVLEdBQUksQ0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxDQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNKLENBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDOUI7U0FDRjtLQUNGO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBbkJELDREQW1CQztBQUVELFNBQWdCLElBQUksQ0FBSSxFQUFZO0lBQ2xDLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztJQUNwQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNsQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDYjtLQUNGO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUkQsb0JBUUMifQ==
import { RecPartial, Omit } from "./shared";
export interface SyncFactoryConfig {
readonly startingSequenceNumber?: number;
}
export declare class Generator<T> {
readonly func: (seq: number) => T;
constructor(func: (seq: number) => T);
build(seq: number): T;
}
export declare class Derived<TOwner, TProperty> {
readonly func: (owner: TOwner, seq: number) => TProperty;
constructor(func: (owner: TOwner, seq: number) => TProperty);
build(owner: TOwner, seq: number): TProperty;
}
export declare type FactoryFunc<T, K extends keyof T> = keyof T extends K ? (item?: RecPartial<T>) => T : (item: RecPartial<T> & Omit<T, K>) => T;
export declare type ListFactoryFunc<T, K extends keyof T> = keyof T extends K ? (count: number, item?: RecPartial<T>) => T[] : (count: number, item: RecPartial<T> & Omit<T, K>) => T[];
export declare class Factory<T, K extends keyof T = keyof T> {
readonly builder: Builder<T, K> | BuilderFactory<T, K>;
private readonly config;
private seqNum;
private getStartingSequenceNumber;
private expandBuilder;
constructor(builder: Builder<T, K> | BuilderFactory<T, K>, config: SyncFactoryConfig | undefined);
resetSequenceNumber(newSequenceNumber?: number): void;
build: FactoryFunc<T, K>;
buildList: ListFactoryFunc<T, K>;
extend(def: RecPartial<Builder<T, K>>): Factory<T, K>;
combine<U, K2 extends keyof U>(other: Factory<U, K2>): Factory<T & U, K | K2>;
withDerivation<KOut extends keyof T>(kOut: KOut, f: (v1: T, seq: number) => T[KOut]): Factory<T, K>;
withDerivation1<K1 extends keyof T, KOut extends keyof T>(kInput: [K1], kOut: KOut, f: (v1: T[K1], seq: number) => T[KOut]): Factory<T, K>;
withDerivation2<K1 extends keyof T, K2 extends keyof T, KOut extends keyof T>(kInput: [K1, K2], kOut: KOut, f: (v1: T[K1], v2: T[K2], seq: number) => T[KOut]): Factory<T, K>;
withDerivation3<K1 extends keyof T, K2 extends keyof T, K3 extends keyof T, KOut extends keyof T>(kInput: [K1, K2, K3], kOut: KOut, f: (v1: T[K1], v2: T[K2], v3: T[K3], seq: number) => T[KOut]): Factory<T, K>;
withDerivation4<K1 extends keyof T, K2 extends keyof T, K3 extends keyof T, K4 extends keyof T, KOut extends keyof T>(kInput: [K1, K2, K3, K4], kOut: KOut, f: (v1: T[K1], v2: T[K2], v3: T[K3], v4: T[K4], seq: number) => T[KOut]): Factory<T, K>;
withDerivation5<K1 extends keyof T, K2 extends keyof T, K3 extends keyof T, K4 extends keyof T, K5 extends keyof T, KOut extends keyof T>(kInput: [K1, K2, K3, K4, K5], kOut: KOut, f: (v1: T[K1], v2: T[K2], v3: T[K3], v4: T[K4], v5: T[K5], seq: number) => T[KOut]): Factory<T, K>;
}
export declare type Builder<T, K extends keyof T = keyof T> = {
[P in K]: T[P] | Generator<T[P]> | Derived<T, T[P]>;
};
export declare type BuilderFactory<T, K extends keyof T = keyof T> = () => Builder<T, K>;
export declare function val<T>(val: T): Generator<T>;
export declare function each<T>(f: (seqNum: number) => T): Generator<T>;
export declare function makeFactory<T>(builder: Builder<T> | BuilderFactory<T>, config?: SyncFactoryConfig): Factory<T>;
export declare function makeFactoryWithRequired<T, K extends keyof T>(builder: Builder<T, Exclude<keyof T, K>> | BuilderFactory<T, Exclude<keyof T, K>>, config?: SyncFactoryConfig): Factory<T, Exclude<keyof T, K>>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeFactoryWithRequired = exports.makeFactory = exports.each = exports.val = exports.Factory = exports.Derived = exports.Generator = void 0;
const shared_1 = require("./shared");
const cloneDeep = require("clone-deep");
class Generator {
constructor(func) {
this.func = func;
}
build(seq) {
return this.func(seq);
}
}
exports.Generator = Generator;
class Derived {
constructor(func) {
this.func = func;
}
build(owner, seq) {
const ret = this.func(owner, seq);
return ret;
}
}
exports.Derived = Derived;
class Factory {
constructor(builder, config) {
this.builder = builder;
this.config = config;
this.getStartingSequenceNumber = () => (this.config && this.config.startingSequenceNumber) || 0;
this.build = ((item) => {
const seqNum = this.seqNum;
this.seqNum++;
const base = buildBase(seqNum, this.expandBuilder());
let v = Object.assign({}, base.value); //, item);
if (item) {
v = (0, shared_1.recursivePartialOverride)(v, item);
}
const keys = Object.keys(item || {});
for (const der of base.derived) {
if (keys.indexOf(der.key) < 0) {
v[der.key] = der.derived.build(v, seqNum);
}
}
return v;
});
this.buildList = ((count, item) => {
const ts = Array(count); // allocate to correct size
for (let i = 0; i < count; i++) {
ts[i] = this.build(item);
}
return ts;
});
this.seqNum = this.getStartingSequenceNumber();
}
expandBuilder() {
return typeof this.builder === "function" ? this.builder() : this.builder;
}
resetSequenceNumber(newSequenceNumber) {
this.seqNum = newSequenceNumber
? newSequenceNumber
: this.getStartingSequenceNumber();
}
extend(def) {
const builder = () => Object.assign({}, this.expandBuilder(), def);
return new Factory(builder, this.config);
}
combine(other) {
const builder = (() => Object.assign({}, this.expandBuilder(), other.expandBuilder()));
return new Factory(builder, this.config);
}
withDerivation(kOut, f) {
const partial = {};
partial[kOut] = new Derived(f);
return this.extend(partial);
}
withDerivation1(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], i));
return this.extend(partial);
}
withDerivation2(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], t[kInput[1]], i));
return this.extend(partial);
}
withDerivation3(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], t[kInput[1]], t[kInput[2]], i));
return this.extend(partial);
}
withDerivation4(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], t[kInput[1]], t[kInput[2]], t[kInput[3]], i));
return this.extend(partial);
}
withDerivation5(kInput, kOut, f) {
const partial = {};
partial[kOut] = new Derived((t, i) => f(t[kInput[0]], t[kInput[1]], t[kInput[2]], t[kInput[3]], t[kInput[4]], i));
return this.extend(partial);
}
}
exports.Factory = Factory;
function val(val) {
return new Generator(() => val);
}
exports.val = val;
function each(f) {
return new Generator(f);
}
exports.each = each;
function buildBase(seqNum, builder) {
const t = {};
const keys = Object.getOwnPropertyNames(builder);
const derived = [];
for (const key of keys) {
const v = builder[key];
let value = v;
if (!!v && typeof v === "object") {
if (v.constructor === Generator) {
value = v.build(seqNum);
}
else if (v.constructor == Derived) {
derived.push({ key, derived: v });
}
else {
value = cloneDeep(v);
}
}
t[key] = value;
}
return { value: t, derived };
}
function makeFactory(builder, config) {
return new Factory(builder, config);
}
exports.makeFactory = makeFactory;
function makeFactoryWithRequired(builder, config) {
return new Factory(builder, config);
}
exports.makeFactoryWithRequired = makeFactoryWithRequired;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFzRTtBQUN0RSx3Q0FBd0M7QUFNeEMsTUFBYSxTQUFTO0lBQ3BCLFlBQXFCLElBQXdCO1FBQXhCLFNBQUksR0FBSixJQUFJLENBQW9CO0lBQUcsQ0FBQztJQUMxQyxLQUFLLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBTEQsOEJBS0M7QUFDRCxNQUFhLE9BQU87SUFDbEIsWUFBcUIsSUFBK0M7UUFBL0MsU0FBSSxHQUFKLElBQUksQ0FBMkM7SUFBRyxDQUFDO0lBQ2pFLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQU5ELDBCQU1DO0FBVUQsTUFBYSxPQUFPO0lBU2xCLFlBQ1csT0FBNkMsRUFDckMsTUFBcUM7UUFEN0MsWUFBTyxHQUFQLE9BQU8sQ0FBc0M7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFUaEQsOEJBQXlCLEdBQUcsR0FBRyxFQUFFLENBQ3ZDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBbUJwRCxVQUFLLEdBQUcsQ0FBQyxDQUFDLElBQWlDLEVBQUssRUFBRTtZQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFD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
+1
-1
export declare type RecPartial<T> = {
[P in keyof T]?: RecPartial<T[P]>;
[P in keyof T]?: unknown extends T[P] ? unknown : RecPartial<T[P]>;
};

@@ -4,0 +4,0 @@ export declare type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

@@ -38,2 +38,2 @@ "use strict";

exports.uniq = uniq;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxTQUFnQix3QkFBd0IsQ0FBSSxDQUFJLEVBQUUsQ0FBZ0I7SUFDaEUsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUTtRQUFFLE9BQU8sQ0FBUSxDQUFDO0lBQzFELElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLFVBQVUsR0FBSSxDQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDeEQsTUFBTSxVQUFVLEdBQUksQ0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxDQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNKLENBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDOUI7U0FDRjtLQUNGO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBbkJELDREQW1CQztBQUVELFNBQWdCLElBQUksQ0FBSSxFQUFZO0lBQ2xDLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztJQUNwQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNsQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDYjtLQUNGO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUkQsb0JBUUMifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxTQUFnQix3QkFBd0IsQ0FBSSxDQUFJLEVBQUUsQ0FBZ0I7SUFDaEUsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUTtRQUFFLE9BQU8sQ0FBUSxDQUFDO0lBQzFELElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLFVBQVUsR0FBSSxDQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDeEQsTUFBTSxVQUFVLEdBQUksQ0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxDQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNKLENBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDOUI7U0FDRjtLQUNGO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBbkJELDREQW1CQztBQUVELFNBQWdCLElBQUksQ0FBSSxFQUFZO0lBQ2xDLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztJQUNwQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNsQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDYjtLQUNGO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUkQsb0JBUUMifQ==
{
"name": "factory.ts",
"version": "1.1.0",
"version": "1.2.0",
"license": "MIT",

@@ -5,0 +5,0 @@ "description": "A Typescript test data factory similar to factory_bot and rosie",

# Changelog
## [1.0.0] - 2022-03-05
- CONSIDER THIS FILE DEPRECATED. MOVING TO GITHUB RELEASES.
## [0.5.1] - 2019-12-06
- fix typing for combine() and 'required keys'
- update TS version and other dependencies
- jest setup fixes for library development
## [0.5.0] - 2019-05-24
- Added ability to create factories where some props are required to build.
- Removed several dependences that were not actually being used.
- Improve some documentation in the README.md.
## [0.4.5] - 2019-04-10
- Moved tslint to devDependencies.
## [0.4.4] - 2019-03-16
- Added `resetSequenceNumber()` function.
## [0.4.2] - 2019-03-03
- Build objects with clone-deep to avoid shared mutable data between multiple factory invocations (or with original seed data).
- `null` now correctly overrides default values.
## [0.4.1] - 2018-12-07
- 0.4.0 changes (sequence numbers, derived values when `build()` called without any arguments) added to async as well as sync.
- Changed makeFactory to take a config object instead of just a starting sequence number, so that any future factory-level config is not an API breaking change
## [0.4.0] - 2018-12-06
### Changed
- Sequence numbers start from 0 by default, but you can specify a starting sequence number (1) to restore previous behavior.
- Mocha -> Jest. I was having a hard time debugging with Mocha so I switched to the framework I know better.
### Fixed
- derived values did not work when `item` was not passed in to `build()`. They would return the internal `Derived` object rather than run the derivation function.
## [0.3.4] - 2018-08-14
### Added
- Async.makeFactoryFromSync can create an asynchronous factory from a synchronous builder. Useful for example when you want to use a Sync builder to make objects synchronously and then apply a transform that changes to asynchronous mode.
### Fixed
- Optional properties may be omitted on the base object, specified in `build()`, and correctly show up in final output. (Fix to changes for Issue #5.)