@meterapp/vehicle-db 2.20.0 → 2.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  An offline, international vehicle make/model catalog for Node.js and TypeScript. The package combines U.S. model-year data, the UK registered fleet, the European Union's new car and van registration register, the daily-updated Dutch vehicle register, Asian-origin vehicles registered in New Zealand, Malaysian registration transactions, Brazil's national vehicle register, an Indian manufacturer catalog, the Brazil-exclusive Hyundai HB20 family, recent U.S. model configurations from FuelEconomy.gov, and reviewed manufacturer body derivatives and Saudi model-year evidence into one small, zero-dependency API. It never makes runtime network requests.
8
8
 
9
- The current snapshot spans **1990–2027** and includes **1,608 makes** and **42,295 models** in **196,747 model years**, from **23 data sources**. Those are distinct vehicles by name, with case, accents and punctuation normalized while preserving the distinct 03+ badge, which is how the [Car Image API](https://carimage.dev/cars?ref=catalog) counts and lists them. The package's own records number more (1,620 makes from `getMakes()`), because sources spell some makes and models more than one way (`MOTO GUZZI` and `MOTO-GUZZI`) and a few makes have no model in these years; see [Snapshot stats](#snapshot-stats).
9
+ The current snapshot spans **1990–2027** and includes **1,608 makes** and **42,296 models** in **196,748 model years**, from **23 data sources**. Those are distinct vehicles by name, with case, accents and punctuation normalized while preserving the distinct 03+ badge, which is how the [Car Image API](https://carimage.dev/cars?ref=catalog) counts and lists them. The package's own records number more (1,620 makes from `getMakes()`), because sources spell some makes and models more than one way (`MOTO GUZZI` and `MOTO-GUZZI`) and a few makes have no model in these years; see [Snapshot stats](#snapshot-stats).
10
10
 
11
11
  The catalog covers seven vehicle types: **Motorcycle**, **Passenger Car**, **Truck**, **Bus**, **Multipurpose Passenger Vehicle (MPV)**, **Auto Rickshaw**, and **Other Vehicle**. The European source adds continental models from Dacia, Cupra, DS, Lynk & Co, Alpine, and the Chinese brands entering Europe such as BYD, MG, Omoda, Xpeng, and Nio, as sold in the EU rather than the UK or U.S. The Dutch register keeps that coverage current: vehicles first registered this year appear within days, so 2026 models such as the BYD Atto 2 and Renault 5 E-Tech are already listed. The Asia-Pacific sources add Japanese domestic and kei models, Chinese EVs, Indian and Korean vehicles, Southeast Asian makes such as Perodua and Proton, and additional motorcycles and commercial vehicles. The Brazilian register adds the cars and motorcycles that fill Brazil's roads but are rarely sold elsewhere, such as the Fiat Argo, Mobi and Toro, the Volkswagen Gol and Saveiro, the Renault Kwid, and the Honda Biz and Pop.
12
12
 
@@ -331,9 +331,9 @@ For scoped resolution of a dated catalog record, pass `yearBasis: "catalog-year"
331
331
 
332
332
  New coverage in 2.16.0 adds 22 year/model/type records: seven consistently labeled Saudi Changan model-year entries, four Mexican Changan catalog facts (one overlaps the Saudi CS75 Plus), six Indonesian Wuling models, and six Indian Bajaj passenger/cargo three-wheelers. Per-record official evidence and year semantics are in `data/evidence/manufacturer-reviewed.json`; the regional audit is in [regional-coverage-status.md](docs/regional-coverage-status.md). `WULING` is now a make alongside the official Malaysian `TQ WULING`; search accepts `wuling bingo` for the latter without changing its published IDs or equating Bingo with BinguoEV.
333
333
 
334
- Broad catalogs in 2.17.0 replace individual Changan/Wuling/Bajaj regional edits with `npm run refresh:manufacturer-catalogs`. Five source snapshots separate official active sales catalogs from explicitly labeled model years: Changan (including separate CHANGAN NEVO), SGMW (separate WULING and BAOJUN), and Bajaj country catalogs. They add 73 selections while retaining all published IDs and legacy source filters. Manufacturer evidence, reviewed translation/body mappings, and manual discovery indexes are retained outside the runtime bundle; see [broad-manufacturer-catalogs.md](docs/broad-manufacturer-catalogs.md).
334
+ Broad catalogs in 2.17.0 replace individual Changan/Wuling/Bajaj regional edits with `pnpm run refresh:manufacturer-catalogs`. Five source snapshots separate official active sales catalogs from explicitly labeled model years: Changan (including separate CHANGAN NEVO), SGMW (separate WULING and BAOJUN), and Bajaj country catalogs. They add 73 selections while retaining all published IDs and legacy source filters. Manufacturer evidence, reviewed translation/body mappings, and manual discovery indexes are retained outside the runtime bundle; see [broad-manufacturer-catalogs.md](docs/broad-manufacturer-catalogs.md).
335
335
 
336
- Indian catalogs in 2.19.0 add five sales-catalog snapshots refreshed with `npm run refresh:india`. Exact reviewed links/headings/selectors preserve model suffixes and published make IDs; their 2026 years mean observed calendar-year catalog presence. Broad dated portfolios refresh with `npm run refresh:india-history` into those same sources: Mahindra, Honda, Yamaha, MG and Ola establish individually evidenced 2020–2025 calendar years. Four Tata 2025 portfolio facts, three Ather 2024 sales facts and two individual Ciaz 2023–2024 sales facts use the existing reviewed catalog source. Historical manuals, fiscal-year periods and successor names do not create guessed year ranges or image-sharing permissions. Source mappings, original names, URLs and retrieval hashes stay outside the runtime bundle; see [the historical source review](docs/indian-historical-catalogs.md).
336
+ Indian catalogs in 2.19.0 add five sales-catalog snapshots refreshed with `pnpm run refresh:india`. Exact reviewed links/headings/selectors preserve model suffixes and published make IDs; their 2026 years mean observed calendar-year catalog presence. Broad dated portfolios refresh with `pnpm run refresh:india-history` into those same sources: Mahindra, Honda, Yamaha, MG and Ola establish individually evidenced 2020–2025 calendar years. Four Tata 2025 portfolio facts, three Ather 2024 sales facts and two individual Ciaz 2023–2024 sales facts use the existing reviewed catalog source. Historical manuals, fiscal-year periods and successor names do not create guessed year ranges or image-sharing permissions. Source mappings, original names, URLs and retrieval hashes stay outside the runtime bundle; see [the historical source review](docs/indian-historical-catalogs.md).
337
337
 
338
338
  ## Factory colors
339
339
 
@@ -356,11 +356,11 @@ New coverage in 2.18.0 adds 112 sourced year/model/type records and four makes (
356
356
  | Sources | 23 |
357
357
  | Vehicle types | 7 |
358
358
  | Makes | 1,608 |
359
- | Models | 42,295 |
360
- | Model years | 196,747 |
359
+ | Models | 42,296 |
360
+ | Model years | 196,748 |
361
361
  | Make records (`getMakes()`) | 1,620 |
362
- | Model records (distinct `modelId`) | 46,798 |
363
- | Model-year records (`getModels()`) | 218,244 |
362
+ | Model records (distinct `modelId`) | 46,799 |
363
+ | Model-year records (`getModels()`) | 218,245 |
364
364
  | Bundled TypeScript data | 7.58 MB |
365
365
 
366
366
  ## Refreshing and rebuilding
@@ -368,26 +368,26 @@ New coverage in 2.18.0 adds 112 sourced year/model/type records and four makes (
368
368
  The committed source snapshots make the package build deterministic and offline:
369
369
 
370
370
  ```bash
371
- npm run build:data
372
- npm test
373
- npm run typecheck
374
- npm run build
371
+ pnpm run build:data
372
+ pnpm test
373
+ pnpm run typecheck
374
+ pnpm run build
375
375
  ```
376
376
 
377
377
  Refresh either network source independently, then rebuild the combined catalog:
378
378
 
379
379
  ```bash
380
- npm run refresh:uk-dft
381
- npm run refresh:nhtsa -- --start-year 2025 --end-year 2027 --merge --cache-dir .cache/nhtsa
382
- npm run refresh:nzta-asia-pacific -- --start-year 1990 --end-year 2027
383
- npm run refresh:malaysia-jpj -- --start-year 2015 --end-year 2026
384
- npm run refresh:eea-co2 -- --start-year 2010 --end-year 2026
385
- npm run refresh:rdw-nl -- --start-year 1990 --end-year 2026
386
- npm run refresh:senatran-br
387
- npm run refresh:fueleconomy-us -- --start-year 2022 --end-year 2027
388
- npm run refresh:reviewed
389
- npm run refresh:manufacturer-catalogs
390
- npm run build:data
380
+ pnpm run refresh:uk-dft
381
+ pnpm run refresh:nhtsa -- --start-year 2025 --end-year 2027 --merge --cache-dir .cache/nhtsa
382
+ pnpm run refresh:nzta-asia-pacific -- --start-year 1990 --end-year 2027
383
+ pnpm run refresh:malaysia-jpj -- --start-year 2015 --end-year 2026
384
+ pnpm run refresh:eea-co2 -- --start-year 2010 --end-year 2026
385
+ pnpm run refresh:rdw-nl -- --start-year 1990 --end-year 2026
386
+ pnpm run refresh:senatran-br
387
+ pnpm run refresh:fueleconomy-us -- --start-year 2022 --end-year 2027
388
+ pnpm run refresh:reviewed
389
+ pnpm run refresh:manufacturer-catalogs
390
+ pnpm run build:data
391
391
  ```
392
392
 
393
393
  **A refresh only adds.** Registers drop scrapped vehicles, count thresholds move between releases, and manufacturers re-file model years in vPIC (the 2026 Maserati MC20 became the MCPura in September 2026), but an application may already store a year/make/model this package published. Every importer therefore keeps the entries its previous snapshot published and the source no longer reports, and logs how many it kept; pass `--prune` to drop them deliberately, for example to remove a source error. Model-year sources run a year ahead of the calendar, so the NHTSA and NZTA importers default to ending next year; registration sources end with the current year.
@@ -397,12 +397,12 @@ The NHTSA API rate-limits aggressively: past a few requests a second its CDN ans
397
397
  ## Evidence and regression checks
398
398
 
399
399
  ```bash
400
- npm run refresh:rdw-nl -- --start-year 2026 --end-year 2026 --evidence-out .cache/rdw-evidence.json
401
- npm run refresh:eea-co2 -- --start-year 2024 --end-year 2024 --evidence-out .cache/eea-evidence.json
400
+ pnpm run refresh:rdw-nl -- --start-year 2026 --end-year 2026 --evidence-out .cache/rdw-evidence.json
401
+ pnpm run refresh:eea-co2 -- --start-year 2024 --end-year 2024 --evidence-out .cache/eea-evidence.json
402
402
  npx tsx scripts/reconcile-source.ts
403
- npm run check:compatibility -- <prior-release-git-ref>
404
- npm run replay
405
- npm run replay -- /private/replay.json /private/report.json
403
+ pnpm run check:compatibility -- <prior-release-git-ref>
404
+ pnpm run replay
405
+ pnpm run replay -- /private/replay.json /private/report.json
406
406
  ```
407
407
 
408
408
  Replay cases contain `query` (or `make`, `model`, `year`), `cohort` (`customer`, `synthetic`, `haraj-sweep`), optional `n`, resolver `options`, `expectedStatus`, and `forbiddenModelNames`. Reports record catalog, fixture and resolver hashes, commit/version, and separate cohort totals. Unreviewed matches measure resolution coverage only; they do not establish render correctness. Synthetic cohorts have zero demand weight. Never commit customer exports.