5.6 KiB
5.6 KiB
Changelog
Format: Keep a Changelog. A release's
Breaking section comes first and names each rejected spelling with its
replacement, and each removed path, column or flag.
[Unreleased]
The first release: a Go library and a CLI that render locale-aware fake data from JSON templates, and the data they ship with. The README documents each part.
Added
- The CLI,
fejkdata, renders exactly the template on its stdin and adds nothing:echo '{/sv_SE.person} hihi' | fejkdataprintsSara Eriksson hihi.--seedmakes a run reproducible,-nrepeats it,--listprints every path, and--data-pathlayers a directory of your own data over the shipped set, or alone with--no-shipped-data.--format json|ndjson|csv|sqlwrites a record's columns, one record per row. It exits0on success,1on a runtime error such as data that fails to load, and2on misuse. - The library,
github.com/larvit/fejkdata, for Go 1.22 or later.Newloads the modulesWithDataFSnames and the foldersWithDataPathnames, and fails, namingWithDataFS, where neither is given;WithSeedmakes its draws reproducible.Fakerenders a path,FakeTemplateandNewTemplatea template,FakeRecord,FakeRecordTemplateandNewRecordTemplatea record, whose columnsJSON,CSVHeader,CSVLineandSQLInsertwrite as the CLI does, andFakeStructfills a struct'sfake:"…"tagged fields. Data that fails to load gives an error matchingErrLoad, and a record with no fields one matchingErrNoColumns. - Package
github.com/larvit/fejkdata/cliis thefejkdatacommand:cli.Main(modules...)runs it over the modules given, socli.Main(append(data.Modules(), mydata)...)builds a CLI carrying your own data. That CLI names itself by the file it runs from, and its--versionprints its own module's version before fejkdata's. - The template language (Data format). A node is a string, a
choice, a template, a table, a number or a boolean. A format string's
{…}tokens read sibling fields, references from the data root or the file's folder ({/sv_SE.person.last},{.x},{..x}), builtins and names. Every{…}draws afresh, and a name is the one way to keep a pick:{/sv_SE.person as p}{p.first} {p.last}is one person. The builtins draw check digits (luhn,mod11,ean), samples (digits,int,float,uuid,ulid,iban,date,timeand more), a counter (seq), arithmetic (calc) and transforms (lowercase,uppercase,ascii).Newrefuses data that breaks the grammar, could mean two things or cannot render a valid value. - Records (Records): a template seen as columns. A column is a
string unless it declares a
datatype,integer,numberorboolean, and anullitem draws it as null. - Tables (Table): a category naming a
rowsTSV beside it, with the optionskey,name,weightandparent. A path selects a row by key or name,misc.territory[SE], descends to a linked table,geo.SE.locality[Lund].street, and steps up to the parent row,{/misc.timezone[Europe/Oslo]..territory.name}. - Data sources (Data): a directory is a namespace, and each JSON file
in it a category. A
.fejkdata.jsonmanifest at a source's root may carry anamespace, the dot path the source mounts under, and anindex, with which each category loads on the first call reaching it. - The shipped data, in Go packages that each export
FSandModules():github.com/larvit/fejkdata/data/en_US(packageenus),…/sv_SE(svse),…/misc,…/geo/SE(geose) and…/geo/US(geous).data.Modules(), fromgithub.com/larvit/fejkdata/data, lists every one, and the CLI carries them all.DATA-LICENSES.mdnames each source.sv_SEanden_US: anaddress, apersonand more per locale.sex,first-nameandlast-nameare tables weighted by bearers, from SCB, the SSA and the Census Bureau. A person's first name and sex agree, and so does anen_USperson's title;person.prefixis null where a person has no title.sv_SE.personnummerandsv_SE.samordningsnummerdraw Skatteverket's test series.en_US.ssnanden_US.itindraw the ranges the SSA and the IRS assign, with the columnsarea,groupandserial, anden_US.phonedraws an exchange NANPA may assign.misc: IANA's registries of HTTP methods, protocols, ports and root-zone TLDs, the HTTP status codes, ISO 3166-1 territories, ISO 4217 currencies with their CLDR symbols, ISO 639 languages, the syslog severities, mime-db's media types, tzdb's zones weighted by the people living in each, user agents and cars, all as tables; and coordinates, credit card numbers, RFC 3339 instants, emoji, MAC addresses, ObjectIds and UUIDs.geo.SEandgeo.US: five linked tables per country,region,municipality,locality,postal-codeandstreet, weighted by population and address counts and built from SCB, GeoNames, Trafikverket NVDB, the US Census Bureau and Wikidata, and anaddressrecord drawing a street and postal code inside one locality, whichsv_SE.addressanden_US.addressprint. Every Swedish postort the import can place ships with all its streets. Of the US incorporated places that hold most of some postal code's land, every state capital but Honolulu, every place of 100,000 or more and a population-weighted tenth of the rest ship, each with a quarter of its streets, at least ten.