factory.ts
Advanced tools
| 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NwZWMvYXN5bmMuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLHNDQUFzQztBQUN0QyxvQ0FBb0M7QUFDcEMsd0NBQTJDO0FBbUIzQyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO0lBQzNDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQVk7UUFDaEQsSUFBSSxFQUFFLEtBQUs7UUFDWCxLQUFLLEVBQUUsQ0FBQztLQUNULENBQUMsQ0FBQztJQUNILE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQ3JDO1FBQ0UsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxFQUFFLElBQUk7S0FDYixFQUNELEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLENBQzlCLENBQUM7SUFDRixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBUyxFQUFFO1FBQzlDLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDSCxFQUFF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 |
| 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 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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 |
| export {}; |
| "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>; |
+194
| "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>>; |
+141
| "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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFzRTtBQUN0RSx3Q0FBd0M7QUFNeEMsTUFBYSxTQUFTO0lBQ3BCLFlBQXFCLElBQXdCO1FBQXhCLFNBQUksR0FBSixJQUFJLENBQW9CO0lBQUcsQ0FBQztJQUMxQyxLQUFLLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBTEQsOEJBS0M7QUFDRCxNQUFhLE9BQU87SUFDbEIsWUFBcUIsSUFBK0M7UUFBL0MsU0FBSSxHQUFKLElBQUksQ0FBMkM7SUFBRyxDQUFDO0lBQ2pFLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQU5ELDBCQU1DO0FBVUQsTUFBYSxPQUFPO0lBU2xCLFlBQ1csT0FBNkMsRUFDckMsTUFBcUM7UUFEN0MsWUFBTyxHQUFQLE9BQU8sQ0FBc0M7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFUaEQsOEJBQXlCLEdBQUcsR0FBRyxFQUFFLENBQ3ZDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBbUJwRCxVQUFLLEdBQUcsQ0FBQyxDQUFDLElBQWlDLEVBQUssRUFBRTtZQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVTtZQUNqRCxJQUFJLElBQUksRUFBRTtnQkFDUixDQUFDLEdBQUcsSUFBQSxpQ0FBd0IsRUFBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdkM7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM1QixDQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDcEQ7YUFDRjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFzQixDQUFDO1FBRWpCLGNBQVMsR0FBRyxDQUFDLENBQ2xCLEtBQWEsRUFDYixJQUFpQyxFQUM1QixFQUFFO1lBQ1AsTUFBTSxFQUFFLEdBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1lBQ3pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQVcsQ0FBQyxDQUFDO2FBQ2pDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQTBCLENBQUM7UUFuQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDakQsQ0FBQztJQVRPLGFBQWE7UUFDbkIsT0FBTyxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDNUUsQ0FBQztJQVNNLG1CQUFtQixDQUFDLGlCQUEwQjtRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFpQjtZQUM3QixDQUFDLENBQUMsaUJBQWlCO1lBQ25CLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBOEJNLE1BQU0sQ0FBQyxHQUE4QjtRQUMxQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxPQUFPLENBQ1osS0FBcUI7UUFFckIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUNsQyxFQUFFLEVBQ0YsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUNwQixLQUFLLENBQUMsYUFBYSxFQUFFLENBQ3RCLENBQWtDLENBQUM7UUFDcEMsT0FBTyxJQUFJLE9BQU8sQ0FBZ0IsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sY0FBYyxDQUNuQixJQUFVLEVBQ1YsQ0FBa0M7UUFFbEMsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBYSxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsTUFBWSxFQUNaLElBQVUsRUFDVixDQUFzQztRQUV0QyxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sZUFBZSxDQUtwQixNQUFnQixFQUNoQixJQUFVLEVBQ1YsQ0FBaUQ7UUFFakQsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDakMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sZUFBZSxDQU1wQixNQUFvQixFQUNwQixJQUFVLEVBQ1YsQ0FBNEQ7UUFFNUQsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQy9DLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLGVBQWUsQ0FPcEIsTUFBd0IsRUFDeEIsSUFBVSxFQUNWLENBQXVFO1FBRXZFLE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDN0QsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sZUFBZSxDQVFwQixNQUE0QixFQUM1QixJQUFVLEVBQ1YsQ0FPWTtRQUVaLE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzNFLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBaktELDBCQWlLQztBQVFELFNBQWdCLEdBQUcsQ0FBSSxHQUFNO0lBQzNCLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUZELGtCQUVDO0FBRUQsU0FBZ0IsSUFBSSxDQUFJLENBQXdCO0lBQzlDLE9BQU8sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUZELG9CQUVDO0FBWUQsU0FBUyxTQUFTLENBQ2hCLE1BQWMsRUFDZCxPQUFzQjtJQUV0QixNQUFNLENBQUMsR0FBMkIsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxNQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBQ2xDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ3RCLE1BQU0sQ0FBQyxHQUFJLE9BQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7Z0JBQy9CLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxPQUFPLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0wsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QjtTQUNGO1FBQ0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUNoQjtJQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQ3pCLE9BQXVDLEVBQ3ZDLE1BQTBCO0lBRTFCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFMRCxrQ0FLQztBQUVELFNBQWdCLHVCQUF1QixDQUNyQyxPQUFpRixFQUNqRixNQUEwQjtJQUUxQixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBTEQsMERBS0MifQ== |
+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>>; |
+1
-1
@@ -38,2 +38,2 @@ "use strict"; | ||
| exports.uniq = uniq; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxTQUFnQix3QkFBd0IsQ0FBSSxDQUFJLEVBQUUsQ0FBZ0I7SUFDaEUsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUTtRQUFFLE9BQU8sQ0FBUSxDQUFDO0lBQzFELElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLFVBQVUsR0FBSSxDQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDeEQsTUFBTSxVQUFVLEdBQUksQ0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxDQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNKLENBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDOUI7U0FDRjtLQUNGO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBbkJELDREQW1CQztBQUVELFNBQWdCLElBQUksQ0FBSSxFQUFZO0lBQ2xDLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztJQUNwQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNsQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDYjtLQUNGO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUkQsb0JBUUMifQ== | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxTQUFnQix3QkFBd0IsQ0FBSSxDQUFJLEVBQUUsQ0FBZ0I7SUFDaEUsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUTtRQUFFLE9BQU8sQ0FBUSxDQUFDO0lBQzFELElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLFVBQVUsR0FBSSxDQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDeEQsTUFBTSxVQUFVLEdBQUksQ0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxDQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3BFO2lCQUFNO2dCQUNKLENBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDOUI7U0FDRjtLQUNGO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBbkJELDREQW1CQztBQUVELFNBQWdCLElBQUksQ0FBSSxFQUFZO0lBQ2xDLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztJQUNwQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNsQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDYjtLQUNGO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUkQsb0JBUUMifQ== |
+1
-1
| { | ||
| "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", |
-56
| # 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.) |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
180985
197.41%29
107.14%1896
226.9%5
400%1
Infinity%