@italia-tools/faker
Version:
Italian-specific fake data generator based on Faker.js
190 lines (160 loc) • 6.26 kB
JavaScript
import { Command } from 'commander';
import { ItFaker } from '../dist/lib/index.mjs';
const faker = new ItFaker();
function parseInteger(value) {
const parsedValue = Number.parseInt(value, 10);
if (Number.isNaN(parsedValue)) {
throw new Error('Value must be a number');
}
return parsedValue;
}
function formatOutput(data) {
return JSON.stringify(data, null, 2);
}
const program = new Command();
program
.name('it-faker')
.description('Generate authentic Italian fake data')
.version('0.1.2-alpha.0');
program.command('firstName')
.description('Generate Italian first name')
.option('-g, --gender <gender>', 'Specify gender (male/female)')
.option('-p, --prefix', 'Include professional title')
.option('-c, --count <number>', 'Number of names to generate', '1')
.action(async (options) => {
try {
const count = parseInteger(options.count);
if (count < 1) {
console.error('Count must be greater than 0');
process.exit(1);
}
const names = await Promise.all(
Array(count).fill(null).map(() =>
faker.itFirstName.firstName({
gender: options.gender,
prefix: options.prefix
})
)
);
console.log(formatOutput(count === 1 ? names[0] : names));
} catch (error) {
console.error('Error generating first name:', error.message);
process.exit(1);
}
});
program.command('lastName')
.description('Generate Italian last name')
.option('-r, --region <region>', 'Specify Italian region')
.option('-p, --province <province>', 'Specify Italian province')
.option('-c, --count <number>', 'Number of surnames to generate', '1')
.action(async (options) => {
try {
const count = parseInteger(options.count);
if (count < 1) {
console.error('Count must be greater than 0');
process.exit(1);
}
const surnames = await Promise.all(
Array(count).fill(null).map(() =>
faker.itLastName.lastName({
region: options.region,
province: options.province
})
)
);
console.log(formatOutput(count === 1 ? surnames[0] : surnames));
} catch (error) {
console.error('Error generating last name:', error.message);
process.exit(1);
}
});
program.command('person')
.description('Generate Italian person data')
.option('-r, --region <region>', 'Specify Italian region')
.option('-p, --province <province>', 'Specify Italian province')
.option('-g, --gender <gender>', 'Specify gender (male/female)')
.option('-c, --count <number>', 'Number of persons to generate', '1')
.option('--with-address', 'Include address')
.action(async (options) => {
try {
const count = parseInteger(options.count);
if (count < 1) {
console.error('Count must be greater than 0');
process.exit(1);
}
const persons = await Promise.all(
Array(count).fill(null).map(async () => {
const person = await faker.itPerson.generatePerson({
gender: options.gender,
region: options.region,
province: options.province
});
if (options.withAddress) {
const address = await faker.itAddress.completeAddress({
region: options.region,
province: options.province
});
return { ...person, address };
}
return person;
})
);
console.log(formatOutput(count === 1 ? persons[0] : persons));
} catch (error) {
console.error('Error generating person data:', error.message);
process.exit(1);
}
});
program.command('address')
.description('Generate Italian address')
.option('-r, --region <region>', 'Specify Italian region')
.option('-p, --province <province>', 'Specify Italian province')
.option('-c, --count <number>', 'Number of addresses to generate', '1')
.action(async (options) => {
try {
const count = parseInteger(options.count);
if (count < 1) {
console.error('Count must be greater than 0');
process.exit(1);
}
const addresses = await Promise.all(
Array(count).fill(null).map(() =>
faker.itAddress.completeAddress({
region: options.region,
province: options.province
})
)
);
console.log(formatOutput(count === 1 ? addresses[0] : addresses));
} catch (error) {
console.error('Error generating address:', error.message);
process.exit(1);
}
});
program.command('fiscal-code')
.description('Generate Italian fiscal code')
.option('-c, --count <number>', 'Number of fiscal codes to generate', '1')
.action(async (options) => {
try {
const count = parseInteger(options.count);
if (count < 1) {
console.error('Count must be greater than 0');
process.exit(1);
}
const codes = await Promise.all(
Array(count).fill(null).map(() =>
faker.itFiscalCode.generate()
)
);
console.log(formatOutput(count === 1 ? codes[0] : codes));
} catch (error) {
console.error('Error generating fiscal code:', error.message);
process.exit(1);
}
});
// Mostra help se non vengono forniti argomenti
if (process.argv.length === 2) {
program.help();
}
program.parse();