@italia-tools/faker
Version:
Italian-specific fake data generator based on Faker.js
98 lines (95 loc) • 2.63 kB
JavaScript
;
class CityAdapter {
/**
* Converts raw city data to ItalianCity
* Used for deserialization
* @param raw RawItalianCity
* @returns ItalianCity
* */
static toEnglish(raw) {
return {
name: raw.nome,
code: raw.codice,
zone: {
code: raw.zona.codice,
name: raw.zona.nome
},
region: {
code: raw.regione.codice,
name: raw.regione.nome
},
province: {
code: raw.provincia.codice,
name: raw.provincia.nome
},
provinceCode: raw.sigla,
belfioreCode: raw.codiceCatastale,
postalCodes: raw.cap,
population: raw.popolazione
};
}
/**
* Converts ItalianCity to raw city data
* Used for serialization
* @param city ItalianCity
* @returns RawItalianCity
* */
static toRaw(city) {
return {
nome: city.name,
codice: city.code,
zona: {
codice: city.zone.code,
nome: city.zone.name
},
regione: {
codice: city.region.code,
nome: city.region.name
},
provincia: {
codice: city.province.code,
nome: city.province.name
},
sigla: city.provinceCode,
codiceCatastale: city.belfioreCode,
cap: city.postalCodes,
popolazione: city.population
};
}
/**
* Converts city data for use with WeightedRandomSelector
* Uses population as weight
*/
static toWeightedItems(cities) {
return cities.map(city => ({
value: city,
weight: city.popolazione
}));
}
/**
* Converts city data with custom formatting
*/
static toFormattedWeightedItems(cities, options = {}) {
return cities.map(city => ({
value: CityAdapter.formatCity(city, options),
weight: city.popolazione
}));
}
/**
* Formats city data as a string
*/
static formatCity(city, options) {
const parts = [city.nome];
if (options.includeProvince) {
parts.push(`(${city.sigla})`);
}
if (options.includeCap) {
parts.push(city.cap[0]);
}
if (options.includeRegion) {
parts.push(city.regione.nome);
}
return parts.join(' ');
}
}
exports.CityAdapter = CityAdapter;