{"_id":"@danielsoheil/typeorm-better-factory","_rev":"4-26d653ec42968f51c2bba21b6a1986b9","name":"@danielsoheil/typeorm-better-factory","dist-tags":{"latest":"1.3.2"},"versions":{"1.2.0":{"name":"@danielsoheil/typeorm-better-factory","version":"1.2.0","description":"Factory for typeorm","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc","test":"jest","codecov":"codecov","lint":"eslint . --ext .ts","format":"prettier --write \"src/**/*.{ts,js}\"","prepublish":"tsc","prepublishOnly":"npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"author":{"name":"Bogdan Darius"},"repository":{"type":"git","url":"git+https://github.com/danielsoheil/typeorm-better-factory.git"},"keywords":["typeorm","factory","testing","typescript","factories","tests"],"homepage":"https://github.com/danielsoheil/typeorm-better-factory#readme","license":"ISC","peerDependencies":{"typeorm":"^0.3.16"},"devDependencies":{"@types/node":"^14.14.25","@types/sinon":"^9.0.10","@typescript-eslint/eslint-plugin":"^4.15.0","@typescript-eslint/parser":"^4.15.0","codecov":"^3.8.1","eslint":"^7.19.0","jest":"^29.5.0","prettier":"^2.2.1","sinon":"^9.2.4","sqlite3":"^5.0.1","ts-node":"^10.9.1","typeorm":"^0.3.16","typescript":"^4.1.3"},"bugs":{"url":"https://github.com/danielsoheil/typeorm-better-factory/issues"},"_id":"@danielsoheil/typeorm-better-factory@1.2.0","_integrity":"sha512-QcQA0qOQx/rKiifuR/6h80L9/tZTecIYIDoJ2Gz6Z2XpdJdGEtbqyjNUMOALIGdCPgwWBbmoLRFD7aT2bn+w7w==","_resolved":"/home/daniel/Documents/projects/typeorm-betterfactory/danielsoheil-typeorm-better-factory-1.2.0.tgz","_from":"file:danielsoheil-typeorm-better-factory-1.2.0.tgz","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-QcQA0qOQx/rKiifuR/6h80L9/tZTecIYIDoJ2Gz6Z2XpdJdGEtbqyjNUMOALIGdCPgwWBbmoLRFD7aT2bn+w7w==","shasum":"a7a397a7f0c3db0dd6f9ff6d20466eaaa678d3ad","tarball":"https://registry.npmjs.org/@danielsoheil/typeorm-better-factory/-/typeorm-better-factory-1.2.0.tgz","fileCount":19,"unpackedSize":14795,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDB+MnX3JkVZpdwiawmyERBg+aKSM1C/YB+eRRksfLv+gIgLh+Wx5iyItvMMuxKyH1CbDA9DPaMiBCuJUSgT4wonmM="}]},"_npmUser":{"name":"danielsoheil","email":"daniel@sohe.ir"},"directories":{},"maintainers":[{"name":"danielsoheil","email":"daniel@sohe.ir"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/typeorm-better-factory_1.2.0_1687331359271_0.16659468088032647"},"_hasShrinkwrap":false},"1.2.1":{"name":"@danielsoheil/typeorm-better-factory","version":"1.2.1","description":"Factory for typeorm","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc","test":"jest","codecov":"codecov","lint":"eslint . --ext .ts","format":"prettier --write \"src/**/*.{ts,js}\"","prepublish":"tsc","prepublishOnly":"npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"author":{"name":"Bogdan Darius"},"repository":{"type":"git","url":"git+https://github.com/danielsoheil/typeorm-better-factory.git"},"keywords":["typeorm","factory","testing","typescript","factories","tests"],"homepage":"https://github.com/danielsoheil/typeorm-better-factory#readme","license":"ISC","peerDependencies":{"typeorm":"^0.3.16"},"devDependencies":{"@types/node":"^14.14.25","@types/sinon":"^9.0.10","@typescript-eslint/eslint-plugin":"^4.15.0","@typescript-eslint/parser":"^4.15.0","codecov":"^3.8.1","eslint":"^7.19.0","jest":"^29.5.0","prettier":"^2.2.1","sinon":"^9.2.4","sqlite3":"^5.0.1","ts-node":"^10.9.1","typeorm":"^0.3.16","typescript":"^4.1.3"},"bugs":{"url":"https://github.com/danielsoheil/typeorm-better-factory/issues"},"_id":"@danielsoheil/typeorm-better-factory@1.2.1","_integrity":"sha512-bwiwFgMF6y7JNm+sIDFd2YZ26G62Rlm0kXxU54pQ/qe/EsVpT6cLo7UBhxLyM2KYW3y/Id/Qrb0j/c1uRiutgw==","_resolved":"/home/daniel/Documents/projects/typeorm-betterfactory/danielsoheil-typeorm-better-factory-1.2.1.tgz","_from":"file:danielsoheil-typeorm-better-factory-1.2.1.tgz","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-bwiwFgMF6y7JNm+sIDFd2YZ26G62Rlm0kXxU54pQ/qe/EsVpT6cLo7UBhxLyM2KYW3y/Id/Qrb0j/c1uRiutgw==","shasum":"8156903c58b1e70976cdae15972caa3fc3974928","tarball":"https://registry.npmjs.org/@danielsoheil/typeorm-better-factory/-/typeorm-better-factory-1.2.1.tgz","fileCount":19,"unpackedSize":15189,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDeSYp0tNtJxwKX5V5Gqv/PJufZT885Cj62hpRKYileeAiEA9yhvWETrDaQ8zUBCSr5HE7o+qYyaJlGTWtUstjtnBo8="}]},"_npmUser":{"name":"danielsoheil","email":"daniel@sohe.ir"},"directories":{},"maintainers":[{"name":"danielsoheil","email":"daniel@sohe.ir"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/typeorm-better-factory_1.2.1_1687333698949_0.24233775389384116"},"_hasShrinkwrap":false},"1.3.0":{"name":"@danielsoheil/typeorm-better-factory","version":"1.3.0","description":"Factory for typeorm","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc","test":"jest","codecov":"codecov","lint":"eslint . --ext .ts","format":"prettier --write \"src/**/*.{ts,js}\"","prepublish":"tsc","prepublishOnly":"npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"author":{"name":"Bogdan Darius"},"repository":{"type":"git","url":"git+https://github.com/danielsoheil/typeorm-better-factory.git"},"keywords":["typeorm","factory","testing","typescript","factories","tests"],"homepage":"https://github.com/danielsoheil/typeorm-better-factory#readme","license":"ISC","peerDependencies":{"typeorm":"^0.3.16"},"devDependencies":{"@types/node":"^14.14.25","@types/sinon":"^9.0.10","@typescript-eslint/eslint-plugin":"^4.15.0","@typescript-eslint/parser":"^4.15.0","codecov":"^3.8.1","eslint":"^7.19.0","jest":"^29.5.0","prettier":"^2.2.1","sinon":"^9.2.4","sqlite3":"^5.0.1","ts-node":"^10.9.1","typeorm":"^0.3.16","typescript":"^4.1.3"},"bugs":{"url":"https://github.com/danielsoheil/typeorm-better-factory/issues"},"_id":"@danielsoheil/typeorm-better-factory@1.3.0","_integrity":"sha512-X4l9Q0dHIFSQsTpHil2eOUIGjj8cy0mj+K7gl6fjL7+laDrTMJO980oGeAbtOvV5X+YEmNjtto5f7Ulxbxnpag==","_resolved":"/home/daniel/Documents/projects/typeorm-betterfactory/danielsoheil-typeorm-better-factory-1.3.0.tgz","_from":"file:danielsoheil-typeorm-better-factory-1.3.0.tgz","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-X4l9Q0dHIFSQsTpHil2eOUIGjj8cy0mj+K7gl6fjL7+laDrTMJO980oGeAbtOvV5X+YEmNjtto5f7Ulxbxnpag==","shasum":"609625114505c943da303e67402ffa9ecb84cf0c","tarball":"https://registry.npmjs.org/@danielsoheil/typeorm-better-factory/-/typeorm-better-factory-1.3.0.tgz","fileCount":3,"unpackedSize":6444,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB4na/ACwJ1NZ/blZfMNv7xjYzgEe96XFHI1O+FQ+zeCAiEAjRh0MZr0IluDH3s3F3tiKpM6IoMrnoa+wcguBU5lOnc="}]},"_npmUser":{"name":"danielsoheil","email":"daniel@sohe.ir"},"directories":{},"maintainers":[{"name":"danielsoheil","email":"daniel@sohe.ir"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/typeorm-better-factory_1.3.0_1688464531001_0.9521968057538048"},"_hasShrinkwrap":false},"1.3.1":{"name":"@danielsoheil/typeorm-better-factory","version":"1.3.1","description":"Factory for typeorm","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc -p tsconfig.build.json","test":"jest","lint":"eslint .","lint:quiet":"eslint . --quiet","format":"prettier --write \"src/**/*.{ts,js}\"","format:check":"prettier --write \"src/**/*.{ts,js}\"","check":"tsc --noEmit","prepublish":"tsc -p tsconfig.build.json","prepublishOnly":"npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags","ci":"npm run format:check && npm run lint:quiet && npm run check"},"author":{"name":"Bogdan Darius"},"repository":{"type":"git","url":"git+https://github.com/danielsoheil/typeorm-better-factory.git"},"keywords":["typeorm","factory","testing","typescript","factories","tests"],"homepage":"https://github.com/danielsoheil/typeorm-better-factory#readme","license":"ISC","peerDependencies":{"typeorm":"^0.3.16"},"devDependencies":{"@types/node":"^20.3.3","@types/sinon":"^9.0.10","@typescript-eslint/eslint-plugin":"^5.61.0","@typescript-eslint/parser":"^5.61.0","eslint":"^7.19.0","jest":"^29.5.0","prettier":"^2.2.1","sinon":"^9.2.4","sqlite3":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","typeorm":"^0.3.16","typescript":"^5.1.6"},"bugs":{"url":"https://github.com/danielsoheil/typeorm-better-factory/issues"},"_id":"@danielsoheil/typeorm-better-factory@1.3.1","_integrity":"sha512-r0NMLXded+HSWoz4q5oFJYrA31M3z217FSSiqP6jWweeZVpARSfbKL+aclhObIBg2muUiFvwmowrxlQ1tJ+smA==","_resolved":"/home/daniel/Documents/projects/typeorm-betterfactory/danielsoheil-typeorm-better-factory-1.3.1.tgz","_from":"file:danielsoheil-typeorm-better-factory-1.3.1.tgz","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-r0NMLXded+HSWoz4q5oFJYrA31M3z217FSSiqP6jWweeZVpARSfbKL+aclhObIBg2muUiFvwmowrxlQ1tJ+smA==","shasum":"78f202a22b72122e103502442061acc8703ada93","tarball":"https://registry.npmjs.org/@danielsoheil/typeorm-better-factory/-/typeorm-better-factory-1.3.1.tgz","fileCount":3,"unpackedSize":6634,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6SdFRmrw9HX1VuMfUi9r7oCtnLHCX25Iw2yE7yMYZDgIgfuVBBlgcn2uyz6Ua1mWMcdjX2wcm+K4+53hDepf9rLw="}]},"_npmUser":{"name":"danielsoheil","email":"daniel@sohe.ir"},"directories":{},"maintainers":[{"name":"danielsoheil","email":"daniel@sohe.ir"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/typeorm-better-factory_1.3.1_1688467678996_0.633924877677396"},"_hasShrinkwrap":false},"1.3.2":{"name":"@danielsoheil/typeorm-better-factory","version":"1.3.2","description":"Factory for typeorm","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc -p tsconfig.build.json","test":"jest","lint":"eslint .","lint:quiet":"eslint . --quiet","format":"prettier --write \"src/**/*.{ts,js}\"","format:check":"prettier --write \"src/**/*.{ts,js}\"","check":"tsc --noEmit","prepublish":"tsc -p tsconfig.build.json","prepublishOnly":"npm run lint","preversion":"npm run lint","version":"npm run format && git add -A src","postversion":"git push && git push --tags","ci":"npm run format:check && npm run lint:quiet && npm run check"},"author":{"name":"Bogdan Darius"},"repository":{"type":"git","url":"git+https://github.com/danielsoheil/typeorm-better-factory.git"},"keywords":["typeorm","factory","testing","typescript","factories","tests"],"homepage":"https://github.com/danielsoheil/typeorm-better-factory#readme","license":"ISC","peerDependencies":{"typeorm":"^0.3.16"},"devDependencies":{"@types/node":"^20.3.3","@types/sinon":"^9.0.10","@typescript-eslint/eslint-plugin":"^5.61.0","@typescript-eslint/parser":"^5.61.0","eslint":"^7.19.0","jest":"^29.5.0","prettier":"^2.2.1","sinon":"^9.2.4","sqlite3":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","typeorm":"^0.3.16","typescript":"^5.1.6"},"bugs":{"url":"https://github.com/danielsoheil/typeorm-better-factory/issues"},"_id":"@danielsoheil/typeorm-better-factory@1.3.2","_integrity":"sha512-h4bTkUms/CePVO1WxCF4CeG21W9WHpRygCI11blDYjo0GjEqxCfz2a2XhX1gjRCgv6TYdNNsl4PskKFWaMoryg==","_resolved":"/home/daniel/Documents/projects/typeorm-betterfactory/danielsoheil-typeorm-better-factory-1.3.2.tgz","_from":"file:danielsoheil-typeorm-better-factory-1.3.2.tgz","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-h4bTkUms/CePVO1WxCF4CeG21W9WHpRygCI11blDYjo0GjEqxCfz2a2XhX1gjRCgv6TYdNNsl4PskKFWaMoryg==","shasum":"1769ba896ea54d9cd286f986e79ff77d3ef89cff","tarball":"https://registry.npmjs.org/@danielsoheil/typeorm-better-factory/-/typeorm-better-factory-1.3.2.tgz","fileCount":19,"unpackedSize":15215,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEcFpfHsuCIjMmmx+UcM3uFkotFSi8skld9mJt7ezCCgIhAKDYC3R2CyzBlaYwyvEJq35EMToZo9QvpT94RCxtCqoD"}]},"_npmUser":{"name":"danielsoheil","email":"daniel@sohe.ir"},"directories":{},"maintainers":[{"name":"danielsoheil","email":"daniel@sohe.ir"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/typeorm-better-factory_1.3.2_1688468315135_0.881601501713235"},"_hasShrinkwrap":false}},"time":{"created":"2023-06-21T07:09:19.211Z","1.2.0":"2023-06-21T07:09:19.473Z","modified":"2023-07-04T10:58:35.456Z","1.2.1":"2023-06-21T07:48:19.077Z","1.3.0":"2023-07-04T09:55:31.161Z","1.3.1":"2023-07-04T10:47:59.150Z","1.3.2":"2023-07-04T10:58:35.338Z"},"maintainers":[{"name":"danielsoheil","email":"daniel@sohe.ir"}],"description":"Factory for typeorm","homepage":"https://github.com/danielsoheil/typeorm-better-factory#readme","keywords":["typeorm","factory","testing","typescript","factories","tests"],"repository":{"type":"git","url":"git+https://github.com/danielsoheil/typeorm-better-factory.git"},"author":{"name":"Bogdan Darius"},"bugs":{"url":"https://github.com/danielsoheil/typeorm-better-factory/issues"},"license":"ISC","readme":"# Typeorm Better Factory\n\n\nThis package makes testing easier by creating factories for your TypeORM entities. It is inspired by the python package [Factory Boy](https://github.com/FactoryBoy/factory_boy).\n\n## Installation\n\n#### NPM\n\n```bash\nnpm install @danielsoheil/typeorm-better-factory --save-dev\n```\n\n#### Yarn\n\n```bash\nyarn add @danielsoheil/typeorm-better-factory --dev\n```\n\n\n## Usage\n\nThis section provides examples on how to use this library's features.\n\n### Factories\n\n#### Declaration\n\nFor declaring a factory, we make use of typescript classes and add as properties on the class the fields from our entity with the desired values\n\n```typescript\nimport { Factory } from '@danielsoheil/typeorm-better-factory';\n\nexport class NormalUserFactory extends Factory<User> {\n  entity = User;\n  \n  firstName = 'John'\n  lastName = 'Doe'\n  email = 'john.doe@typeorm-factory.com'\n  role = 'normal_user'\n}\n\nexport class AdminUserFactory extends Factory<User> {\n  entity = User;\n\n  firstName = 'Admin'\n  lastName = 'Factory'\n  email = 'admin@typeorm-factory.com'\n  role = 'admin'\n}\n```\n\n#### Usage\n\nAfter defining our factories, we can make use of them by creating a new instance of a factory:\n\n```typescript\nconst userFactory: NormalUserFactory = new NormalUserFactory();\n```\n\nWhen creating the factory, we make use of the `create` function. By default, the entity is created and saved to the database by using the properties defined on the factory.\n\n```typescript\nconst user: User = await userFactory.create();\n```\n\nIf we want to modify the default attributes from the factory, we add them as parameter to the `create` function:\n\n\n```typescript\nconst user: User = await userFactory.create({firstName: 'AnotherFirstName', lastName: 'AnotherLastName'});\n```\n\nWe can create multiple instances by using the `createMany` function. In the below example we create 5 users:\n\n```typescript\nconst users: User[] = await userFactory.createMany(5)\n```\n\nIn the case when we have some unique attributes by which we define entities. We do not want to create multiple objects with some properties, we make use of the `getOrCreate` function. We define the attributes by which the entity should be unique. Calling the `create` method multiple times will return the same object.\n\nIn our example, we do not want to create 2 users with the same email.\n\n```typescript\nimport { Factory } from '@danielsoheil/typeorm-better-factory';\n\nexport class NormalUserFactory extends Factory<User> {\n  ...\n\n  protected getOrCreate(): string[] {\n    return ['email'];\n  }\n}\n...\n\n// Creates the user \nconst user: User = await userFactory.create();\n\n// Gets the user that was created above\nconst sameUser: User = await userFactory.create();\n\n```\n### SubFactories\n\nA common case is that the entities have relations between them. In this case we create factories for all the entities and make use of `SubFactory` to create a link between them.\n\n#### Example\n\nIf the user has multiple addresses we add the `UserFactory` as a subfactory on the `AddressFactory`\n\n```typescript\nimport { Factory, SubFactory } from '@danielsoheil/typeorm-better-factory';\n\nexport class AddressFactory extends Factory<Address> {\n  street = 'Factory Street'\n  number = '100'\n  user = new SubFactory(UserFactory)\n}\n```\n\n### Sequences\n\nWe can add sequences on our factories when we want a property to have a different every time we create an object using the same factory\n\n```typescript\nimport { Factory, Sequence } from '@danielsoheil/typeorm-better-factory';\n\nexport class NormalUserFactory extends Factory<User> {\n  ...\n  email = new Sequence((i: number) => `john.doe.${i}@typeorm-factory.com`)\n\n}\n```\n\n### Post Generations\n\nSometimes we have the need to call some functions after the object was created. For this, we have created a `PostGeneration` decorator that can be used on multiple functions and all of them will be called after the entity was created.\n\n```typescript\nimport { Factory, PostGeneration } from '@danielsoheil/typeorm-better-factory';\n\nexport class NormalUserFactory extends Factory<User> {\n  ...\n  \n  @PostGeneration()\n  addLogsForUser() {\n    // create some logs for the created user\n  }\n  \n  @PostGeneration()\n  async anotherFunctionToBeCalled(createdUser: User) {\n    // do something with the created user\n  }\n}\n```\n","readmeFilename":"README.md"}