@meterapp/vehicle-db 2.0.0 → 2.1.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/dist/data.d.ts +14 -0
- package/dist/data.js +5 -0
- package/dist/index.d.ts +0 -5
- package/dist/index.js +10 -31
- package/package.json +2 -3
- package/data/compact.json +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -39,8 +39,3 @@ export declare function getModels(options?: GetModelsOptions): Model[];
|
|
|
39
39
|
* Get all available years in the database.
|
|
40
40
|
*/
|
|
41
41
|
export declare function getAvailableYears(): number[];
|
|
42
|
-
/**
|
|
43
|
-
* Clear cached data (optional cleanup, frees memory).
|
|
44
|
-
*/
|
|
45
|
-
export declare function close(): void;
|
|
46
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -7,31 +7,21 @@ exports.getVehicleTypes = getVehicleTypes;
|
|
|
7
7
|
exports.getMakes = getMakes;
|
|
8
8
|
exports.getModels = getModels;
|
|
9
9
|
exports.getAvailableYears = getAvailableYears;
|
|
10
|
-
|
|
11
|
-
const path_1 = __importDefault(require("path"));
|
|
12
|
-
const fs_1 = __importDefault(require("fs"));
|
|
13
|
-
const DATA_PATH = path_1.default.join(__dirname, "..", "data", "compact.json");
|
|
10
|
+
const data_1 = __importDefault(require("./data"));
|
|
14
11
|
// ---------------------------------------------------------------------------
|
|
15
|
-
//
|
|
12
|
+
// Internal lookup maps (lazy)
|
|
16
13
|
// ---------------------------------------------------------------------------
|
|
17
|
-
let _data = null;
|
|
18
14
|
let _makeMap = null;
|
|
19
15
|
let _typeMap = null;
|
|
20
|
-
function getData() {
|
|
21
|
-
if (!_data) {
|
|
22
|
-
_data = JSON.parse(fs_1.default.readFileSync(DATA_PATH, "utf-8"));
|
|
23
|
-
}
|
|
24
|
-
return _data;
|
|
25
|
-
}
|
|
26
16
|
function getMakeMap() {
|
|
27
17
|
if (!_makeMap) {
|
|
28
|
-
_makeMap = new Map(
|
|
18
|
+
_makeMap = new Map(data_1.default.makes.map((m) => [m.make_id, m.make_name]));
|
|
29
19
|
}
|
|
30
20
|
return _makeMap;
|
|
31
21
|
}
|
|
32
22
|
function getTypeMap() {
|
|
33
23
|
if (!_typeMap) {
|
|
34
|
-
_typeMap = new Map(
|
|
24
|
+
_typeMap = new Map(data_1.default.vehicleTypes.map((t) => [t.vehicle_type_id, t.vehicle_type_name]));
|
|
35
25
|
}
|
|
36
26
|
return _typeMap;
|
|
37
27
|
}
|
|
@@ -42,7 +32,7 @@ function getTypeMap() {
|
|
|
42
32
|
* Returns all vehicle types in the database.
|
|
43
33
|
*/
|
|
44
34
|
function getVehicleTypes() {
|
|
45
|
-
return
|
|
35
|
+
return data_1.default.vehicleTypes.map((t) => ({
|
|
46
36
|
vehicleTypeId: t.vehicle_type_id,
|
|
47
37
|
vehicleTypeName: t.vehicle_type_name,
|
|
48
38
|
}));
|
|
@@ -51,13 +41,12 @@ function getVehicleTypes() {
|
|
|
51
41
|
* Returns makes, optionally filtered by year and/or vehicle type.
|
|
52
42
|
*/
|
|
53
43
|
function getMakes(options = {}) {
|
|
54
|
-
const data = getData();
|
|
55
44
|
const { year, vehicleTypeId } = options;
|
|
56
45
|
if (year == null && vehicleTypeId == null) {
|
|
57
|
-
return
|
|
46
|
+
return data_1.default.makes.map((m) => ({ makeId: m.make_id, makeName: m.make_name }));
|
|
58
47
|
}
|
|
59
48
|
const makeIds = new Set();
|
|
60
|
-
for (const m of
|
|
49
|
+
for (const m of data_1.default.models) {
|
|
61
50
|
if (year != null && m[0] !== year)
|
|
62
51
|
continue;
|
|
63
52
|
if (vehicleTypeId != null && m[4] !== vehicleTypeId)
|
|
@@ -73,12 +62,11 @@ function getMakes(options = {}) {
|
|
|
73
62
|
* Returns models, optionally filtered by year, vehicle type, and/or make.
|
|
74
63
|
*/
|
|
75
64
|
function getModels(options = {}) {
|
|
76
|
-
const data = getData();
|
|
77
65
|
const makeMap = getMakeMap();
|
|
78
66
|
const typeMap = getTypeMap();
|
|
79
67
|
const { year, vehicleTypeId, makeId } = options;
|
|
80
68
|
const results = [];
|
|
81
|
-
for (const m of
|
|
69
|
+
for (const m of data_1.default.models) {
|
|
82
70
|
if (year != null && m[0] !== year)
|
|
83
71
|
continue;
|
|
84
72
|
if (makeId != null && m[1] !== makeId)
|
|
@@ -87,7 +75,7 @@ function getModels(options = {}) {
|
|
|
87
75
|
continue;
|
|
88
76
|
results.push({
|
|
89
77
|
modelId: m[2],
|
|
90
|
-
modelName:
|
|
78
|
+
modelName: data_1.default.modelNames[m[3]],
|
|
91
79
|
makeId: m[1],
|
|
92
80
|
makeName: makeMap.get(m[1]),
|
|
93
81
|
vehicleTypeId: m[4],
|
|
@@ -101,17 +89,8 @@ function getModels(options = {}) {
|
|
|
101
89
|
*/
|
|
102
90
|
function getAvailableYears() {
|
|
103
91
|
const years = new Set();
|
|
104
|
-
for (const m of
|
|
92
|
+
for (const m of data_1.default.models) {
|
|
105
93
|
years.add(m[0]);
|
|
106
94
|
}
|
|
107
95
|
return [...years].sort((a, b) => a - b);
|
|
108
96
|
}
|
|
109
|
-
/**
|
|
110
|
-
* Clear cached data (optional cleanup, frees memory).
|
|
111
|
-
*/
|
|
112
|
-
function close() {
|
|
113
|
-
_data = null;
|
|
114
|
-
_makeMap = null;
|
|
115
|
-
_typeMap = null;
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meterapp/vehicle-db",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Offline NHTSA vehicle makes/models database — zero dependencies",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
|
-
"dist"
|
|
9
|
-
"data/compact.json"
|
|
8
|
+
"dist"
|
|
10
9
|
],
|
|
11
10
|
"scripts": {
|
|
12
11
|
"build:db": "tsx scripts/build-db.ts",
|