
Research
Security News
Malicious PyPI Package Exploits Deezer API for Coordinated Music Piracy
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
typeorm-fixtures-cli-fork
Advanced tools
[](https://circleci.com/gh/RobinCK/typeorm-fixtures)  ['
post2:
title: '{{name.title}}'
description: '{{lorem.paragraphs}}'
user: '@user($current)'
fixtures/User.yml
entity: User
items:
user1:
firstName: '{{name.firstName}}'
lastName: '{{name.lastName}}'
email: '{{internet.email}}'
profile: '@profile1'
__call:
setPassword:
- foo
user2:
firstName: '{{name.firstName}}'
lastName: '{{name.lastName}}'
email: '{{internet.email}}'
profile: '@profile2'
__call:
setPassword:
- foo
fixtures/Profile.yml
entity: Profile
items:
profile1:
aboutMe: <%= ['about string', 'about string 2', 'about string 3'].join(", ") %>
skype: skype-account>
language: english
profile2:
aboutMe: <%= ['about string', 'about string 2', 'about string 3'].join(", ") %>
skype: skype-account
language: english
The most basic functionality of this library is to turn flat yaml files into objects
entity: User
items:
user0:
username: bob
fullname: Bob
birthDate: 1980-10-10
email: bob@example.org
favoriteNumber: 42
user1:
username: alice
fullname: Alice
birthDate: 1978-07-12
email: alice@example.org
favoriteNumber: 27
The first step is to let create many copies of an object for you to remove duplication from the yaml file.
You can do that by defining a range in the fixture name:
entity: User
items:
user{1..10}:
username: bob
fullname: Bob
birthDate: 1980-10-10
email: bob@example.org
favoriteNumber: 42
Now it will generate ten users, with IDs user1 to user10. Pretty good but we only have 10 bobs with the same name, username and email, which is not so fancy yet.
You can also specify a reference to a previously created list of fixtures:
entity: Post
items:
post1:
title: 'Post title'
description: 'Post description'
user: '@user1'
You can also specify a list of values instead of a range:
entity: Post
items:
post{1..10}:
title: 'Post title'
description: 'Post description'
user: '@user($current)'
In the case of a range (e.g. user{1..10}), ($current)
will return 1 for user1, 2 for user2 etc.
The current iteration can be used as a string value:
entity: Post
items:
post{1..10}:
title: 'Post($current)'
description: 'Post description'
Post($current)
will return Post1 for post1, Post2 for post2 etc.
You can mutate this output by using basic math operators:
entity: Post
items:
post{1..10}:
title: 'Post($current*100)'
description: 'Post description'
Post($current*100)
will return Post100 for post1, Post200 for post2 etc.
Sometimes though you need to call a method to initialize some more data, you can do this just like with properties but instead using the method name and giving it an array of arguments.
entity: User
items:
user{1..10}:
username: bob
fullname: Bob
birthDate: 1980-10-10
email: bob@example.org
favoriteNumber: 42
__call:
setPassword:
- foo
entity: User
items:
user1:
# ...
entity: Group
items:
group1:
name: '<{names.admin}>'
owner: '@user1'
members:
- '@user2'
- '@user3'
If you want to create ten users and ten groups and have each user own one group, you can use ($current)
which is replaced with the current ID of each iteration when using fixture ranges:
entity: User
items:
user1:
# ...
entity: Group
items:
group{1..10}:
name: 'name'
owner: '@user($current)'
members:
- '@user2'
- '@user3'
If you would like a random user instead of a fixed one, you can define a reference with a wildcard:
entity: User
items:
user1:
# ...
entity: Group
items:
group{1..10}:
name: 'name'
owner: '@user*'
members:
- '@user2'
- '@user3'
or
entity: User
items:
user1:
# ...
entity: Group
items:
group{1..10}:
name: 'name'
owner: '@user{1..2}' # @user1 or @user2
members:
- '@user2'
- '@user3'
You can set global parameters that will be inserted everywhere those values are used to help with readability. For example:
entity: Group
parameters:
names:
admin: Admin
items:
group1:
name: '<{names.admin}>' # <--- set Admin
owner: '@user1'
members:
- '@user2'
- '@user3'
This library integrates with the faker.js library. Using {{foo}} you can call Faker data providers to generate random data.
Let's turn our static bob user into a randomized entry:
entity: User
items:
user{1..10}:
username: '{{internet.userName}}'
fullname: '{{name.firstName}} {{name.lastName}}'
birthDate: '{{date.past}}'
email: '{{internet.email}}'
favoriteNumber: '{{datatype.number}}'
__call:
setPassword:
- foo
This library integrates with the EJS
entity: Profile
items:
profile1:
aboutMe: <%= ['about string', 'about string 2', 'about string 3'].join(", ") %>
skype: skype-account>
language: english
Processors allow you to process objects before and/or after they are persisted. Processors must implement the: IProcessor
import { IProcessor } from 'typeorm-fixtures-cli';
Here is an example:
processor/UserProcessor.ts
import { IProcessor } from 'typeorm-fixtures-cli';
import { User } from '../entity/User';
export default class UserProcessor implements IProcessor<User> {
preProcess(name: string, object: any): any {
return { ...object, firstName: 'foo' };
}
postProcess(name: string, object: { [key: string]: any }): void {
object.name = `${object.firstName} ${object.lastName}`;
}
}
fixture config fixtures/user.yml
entity: User
processor: ../processor/UserProcessor
items:
user1:
firstName: '{{name.firstName}}'
lastName: '{{name.lastName}}'
email: '{{internet.email}}'
Usage: fixtures [options] <path> Fixtures folder/file path
Options:
-v, --version output the version number
-c, -d, --dataSource [path] TypeORM config path (default: "dataSource.ts")
--require A list of additional modules. e.g. ts-node/register
-cn, --connection [value] TypeORM connection name (default: "default")
-s, --sync Database schema sync
--debug Enable debug
-h, --help output usage information
--no-color Disable color
If you're using multiple modules at once (e.g. ts-node and tsconfig-paths) you have the ability to require these modules with multiple require flags. For example:
fixtures ./fixtures --config ./typeorm.config.ts --sync --require=ts-node/register --require=tsconfig-paths/register
Although typeorm-fixtures-cli is intended to use as a CLI, you can still load fixtures via APIs in your program.
For example, the below code snippet will load all fixtures exist in ./fixtures
directory:
import * as path from 'path';
import { Builder, fixturesIterator, Loader, Parser, Resolver } from 'typeorm-fixtures-cli/dist';
import { createConnection, getRepository } from 'typeorm';
const loadFixtures = async (fixturesPath: string) => {
let connection;
try {
connection = await createConnection();
await connection.synchronize(true);
const loader = new Loader();
loader.load(path.resolve(fixturesPath));
const resolver = new Resolver();
const fixtures = resolver.resolve(loader.fixtureConfigs);
const builder = new Builder(connection, new Parser());
for (const fixture of fixturesIterator(fixtures)) {
const entity = await builder.build(fixture);
await getRepository(entity.constructor.name).save(entity);
}
} catch (err) {
throw err;
} finally {
if (connection) {
await connection.close();
}
}
};
loadFixtures('./fixtures')
.then(() => {
console.log('Fixtures are successfully loaded.');
})
.catch((err) => {
console.log(err);
});
This project exists thanks to all the people who contribute. [Contribute].
Become a financial contributor and help us sustain our community. [Contribute]
Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]
MIT © Igor Ognichenko
FAQs
[](https://circleci.com/gh/RobinCK/typeorm-fixtures)  [![OpenCollective](https
The npm package typeorm-fixtures-cli-fork receives a total of 0 weekly downloads. As such, typeorm-fixtures-cli-fork popularity was classified as not popular.
We found that typeorm-fixtures-cli-fork demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.
Security News
Newly introduced telemetry in devenv 1.4 sparked a backlash over privacy concerns, leading to the removal of its AI-powered feature after strong community pushback.