@mxpicture/teslamate-extended-cli 2.1.60 → 2.1.61

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.
@@ -5,18 +5,52 @@ import { type IStore } from "@mxpicture/teslamate-extended-api/store";
5
5
  export declare const readVersion: () => string;
6
6
  /** One day in milliseconds — the schedule interval. */
7
7
  export declare const DAY_MS: number;
8
+ /**
9
+ * Match radius (km) for `--charged`: a TeslaMate charge location counts as a
10
+ * given Supercharger when it sits within this distance of it. ~300 m comfortably
11
+ * covers the gap between where the car parks and the site's listed point while
12
+ * staying well under the spacing between distinct sites.
13
+ */
14
+ export declare const CHARGED_MATCH_KM = 0.3;
8
15
  /** Parses a non-negative float (e.g. --delay). */
9
16
  export declare const parseFloatArg: (v: string) => number;
10
17
  /** Parses a non-negative integer (e.g. --limit). */
11
18
  export declare const parseIntArg: (v: string) => number;
12
19
  /** Validates an HH:MM (24h) time string (e.g. --at). */
13
20
  export declare const parseTime: (v: string) => string;
21
+ /** Parses a "lat,lon" coordinate pair (e.g. --near). */
22
+ export declare const parseNear: (v: string) => {
23
+ lat: number;
24
+ lon: number;
25
+ };
26
+ /** One schedule tier: fetch within `radiusKm` of home every `everyDays` days. */
27
+ export interface Tier {
28
+ radiusKm: number;
29
+ everyDays: number;
30
+ }
31
+ /** Collects a repeatable --tier "radiusKm:everyDays" value onto the previous list. */
32
+ export declare const parseTier: (v: string, prev: Tier[]) => Tier[];
14
33
  /** Commander option: restrict to a single country. */
15
34
  export declare const countryOption: Option<"-c, --country <name>", undefined, undefined, undefined, false, undefined>;
16
35
  /** Commander option: restrict to a single region. */
17
36
  export declare const regionOption: Option<"-R, --region <name>", undefined, undefined, undefined, false, undefined>;
18
37
  /** Commander option: all Superchargers worldwide. */
19
38
  export declare const allOption: Option<"-a, --all", undefined, undefined, undefined, false, undefined>;
39
+ /** Commander option: center coordinate "lat,lon" for a radius scope. */
40
+ export declare const nearOption: Option<"--near <lat,lon>", undefined, undefined, {
41
+ lat: number;
42
+ lon: number;
43
+ }, false, undefined>;
44
+ /** Commander option: radius in km around --near. */
45
+ export declare const radiusOption: Option<"--radius <km>", undefined, undefined, number, false, undefined>;
46
+ /** Commander option (schedule): repeatable tier "radiusKm:everyDays". */
47
+ export declare const tierOption: Option<"--tier <km:everyDays>", undefined, Tier[], Tier[], false, undefined>;
48
+ /** Commander option: scope = the Superchargers you've charged at (TeslaMate DB). */
49
+ export declare const chargedOption: Option<"--charged", undefined, undefined, undefined, false, undefined>;
50
+ /** Commander option: center the radius scope on the TeslaMate "Home" geofence. */
51
+ export declare const homeFromTeslamateOption: Option<"--home-from-teslamate", undefined, undefined, undefined, false, undefined>;
52
+ /** Commander option: also upsert each fetched Supercharger as a TeslaMate geofence. */
53
+ export declare const geofencesOption: Option<"--teslamate-geofences", undefined, undefined, undefined, false, undefined>;
20
54
  /** Commander option: pricing locale. */
21
55
  export declare const localeOption: Option<"-l, --locale <locale>", undefined, "en-US", undefined, false, undefined>;
22
56
  /** Commander option: politeness delay between requests (seconds). */
@@ -48,6 +82,14 @@ export interface CommonOpts {
48
82
  country?: string;
49
83
  region?: string;
50
84
  all?: boolean;
85
+ near?: {
86
+ lat: number;
87
+ lon: number;
88
+ };
89
+ radius?: number;
90
+ charged?: boolean;
91
+ homeFromTeslamate?: boolean;
92
+ teslamateGeofences?: boolean;
51
93
  locale: string;
52
94
  delay: number;
53
95
  limit: number;
@@ -59,14 +101,25 @@ export interface CommonOpts {
59
101
  httpPassword?: string;
60
102
  proxy?: string;
61
103
  }
62
- /** `schedule` options: the common ones plus the daily run time. */
104
+ /** `schedule` options: the common ones plus the daily run time and tiers. */
63
105
  export type ScheduleOpts = CommonOpts & {
64
106
  at: string;
107
+ tier: Tier[];
65
108
  };
66
- /** Resolves the single scope flag (exactly one of country/region/all). */
109
+ /** Resolves the single scope flag (exactly one of country/region/all/near). */
67
110
  export declare const toScope: (o: CommonOpts) => FetchScope;
68
- /** Maps CLI options to the api fetch options. */
69
- export declare const toFetchOptions: (o: CommonOpts) => FetchOptions;
111
+ /** The radius center: --near, or the TeslaMate "Home" geofence (--home-from-teslamate). */
112
+ export declare const resolveCenter: (o: CommonOpts) => Promise<{
113
+ lat: number;
114
+ lon: number;
115
+ }>;
116
+ /**
117
+ * Resolves the fetch scope, including the TeslaMate-backed ones. Exactly one of
118
+ * --country / --region / --all / --near|--home-from-teslamate / --charged.
119
+ */
120
+ export declare const resolveFetchScope: (o: CommonOpts) => Promise<FetchScope>;
121
+ /** Maps CLI options to the api fetch options, optionally with an explicit scope. */
122
+ export declare const toFetchOptions: (o: CommonOpts, scope?: FetchScope) => FetchOptions;
70
123
  /** Builds the sinks the user asked for (CLI flag or env). At least one required. */
71
124
  export declare const buildStores: (o: CommonOpts) => IStore[];
72
125
  /**
@@ -76,9 +129,19 @@ export declare const buildStores: (o: CommonOpts) => IStore[];
76
129
  */
77
130
  export declare const applyProxy: (o: CommonOpts) => void;
78
131
  /** Fetches one snapshot, stores it, and closes the sinks. */
79
- export declare const runOnce: (o: CommonOpts) => Promise<void>;
132
+ export declare const runOnce: (o: CommonOpts, scope?: FetchScope) => Promise<void>;
133
+ /** `fetch` command: resolve the (possibly TeslaMate-backed) scope, then run once. */
134
+ export declare const runFetch: (o: CommonOpts) => Promise<void>;
80
135
  /** ms from now until the next HH:MM (local); rolls to tomorrow if already passed. */
81
136
  export declare const msUntil: (at: string) => number;
137
+ /**
138
+ * The largest tier radius whose cadence is due on `date`, or null if none is.
139
+ * A tier is "due" when `epochDay % everyDays === 0` (epochDay = whole days since
140
+ * the Unix epoch, UTC) — date-driven so it survives restarts, with `7` landing on
141
+ * a fixed weekday and `30` meaning every 30 days. Cumulative: the chosen radius
142
+ * already covers every smaller tier, so one fetch at it satisfies all due tiers.
143
+ */
144
+ export declare const dueRadiusKm: (tiers: Tier[], date: Date) => number | null;
82
145
  /** Runs once on start, then every day at o.at — keeping the process alive. */
83
146
  export declare const scheduleDaily: (o: ScheduleOpts) => Promise<void>;
84
147
  /** Prints the countries and regions that have Superchargers. */
@@ -1 +1 @@
1
- {"version":3,"file":"cli.common.d.ts","sourceRoot":"","sources":["../src/cli.common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.common.d.ts","sourceRoot":"","sources":["../src/cli.common.ts"],"names":[],"mappings":"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"}
@@ -3,14 +3,21 @@ import { readFileSync } from "node:fs";
3
3
  import { dirname, resolve } from "node:path";
4
4
  import { env, exit } from "node:process";
5
5
  import { fileURLToPath } from "node:url";
6
- import { fetchAllLocations, isSupercharger, } from "@mxpicture/teslamate-extended-api/api";
7
- import { HttpStore, ingestSuperchargers, JsonFileStore, PostgresStore, } from "@mxpicture/teslamate-extended-api/store";
6
+ import { fetchAllLocations, fetchChargeSiteCoords, fetchHomeGeofence, isSupercharger, } from "@mxpicture/teslamate-extended-api/api";
7
+ import { HttpStore, ingestSuperchargers, JsonFileStore, PostgresStore, TeslaMateGeofenceStore, } from "@mxpicture/teslamate-extended-api/store";
8
8
  const __dirname = dirname(fileURLToPath(import.meta.url));
9
9
  /** Reads the CLI package version from its package.json. */
10
10
  export const readVersion = () => JSON.parse(readFileSync(resolve(__dirname, "../package.json"), "utf8"))
11
11
  .version;
12
12
  /** One day in milliseconds — the schedule interval. */
13
13
  export const DAY_MS = 24 * 60 * 60 * 1000;
14
+ /**
15
+ * Match radius (km) for `--charged`: a TeslaMate charge location counts as a
16
+ * given Supercharger when it sits within this distance of it. ~300 m comfortably
17
+ * covers the gap between where the car parks and the site's listed point while
18
+ * staying well under the spacing between distinct sites.
19
+ */
20
+ export const CHARGED_MATCH_KM = 0.3;
14
21
  // ---------- argument parsers ----------
15
22
  /** Parses a non-negative float (e.g. --delay). */
16
23
  export const parseFloatArg = (v) => {
@@ -32,6 +39,27 @@ export const parseTime = (v) => {
32
39
  throw new InvalidArgumentError("expected HH:MM (24h)");
33
40
  return v;
34
41
  };
42
+ /** Parses a "lat,lon" coordinate pair (e.g. --near). */
43
+ export const parseNear = (v) => {
44
+ const parts = v.split(",").map((s) => Number(s.trim()));
45
+ if (parts.length !== 2 || !parts.every((n) => Number.isFinite(n)))
46
+ throw new InvalidArgumentError("expected 'lat,lon' (e.g. 48.137,11.575)");
47
+ const [lat, lon] = parts;
48
+ if (lat < -90 || lat > 90 || lon < -180 || lon > 180)
49
+ throw new InvalidArgumentError("lat must be -90..90 and lon -180..180");
50
+ return { lat, lon };
51
+ };
52
+ /** Collects a repeatable --tier "radiusKm:everyDays" value onto the previous list. */
53
+ export const parseTier = (v, prev) => {
54
+ const [kmStr, daysStr] = v.split(":");
55
+ const radiusKm = Number(kmStr);
56
+ const everyDays = parseInt(daysStr ?? "", 10);
57
+ if (!Number.isFinite(radiusKm) || radiusKm <= 0)
58
+ throw new InvalidArgumentError("radius (km) must be a positive number");
59
+ if (!Number.isInteger(everyDays) || everyDays <= 0)
60
+ throw new InvalidArgumentError("everyDays must be a positive integer");
61
+ return [...prev, { radiusKm, everyDays }];
62
+ };
35
63
  // ---------- commander options ----------
36
64
  /** Commander option: restrict to a single country. */
37
65
  export const countryOption = new Option("-c, --country <name>", "Only this country");
@@ -39,6 +67,20 @@ export const countryOption = new Option("-c, --country <name>", "Only this count
39
67
  export const regionOption = new Option("-R, --region <name>", "Only this region");
40
68
  /** Commander option: all Superchargers worldwide. */
41
69
  export const allOption = new Option("-a, --all", "All Superchargers worldwide");
70
+ /** Commander option: center coordinate "lat,lon" for a radius scope. */
71
+ export const nearOption = new Option("--near <lat,lon>", "Center coordinate for a radius scope, e.g. 48.137,11.575").argParser(parseNear);
72
+ /** Commander option: radius in km around --near. */
73
+ export const radiusOption = new Option("--radius <km>", "Radius in km around --near").argParser(parseFloatArg);
74
+ /** Commander option (schedule): repeatable tier "radiusKm:everyDays". */
75
+ export const tierOption = new Option("--tier <km:everyDays>", "Schedule tier 'radiusKm:everyDays' (repeatable); fetch within radiusKm every everyDays days")
76
+ .default([])
77
+ .argParser(parseTier);
78
+ /** Commander option: scope = the Superchargers you've charged at (TeslaMate DB). */
79
+ export const chargedOption = new Option("--charged", "Only Superchargers you've charged at (read from the TeslaMate DB); needs --postgres-url");
80
+ /** Commander option: center the radius scope on the TeslaMate "Home" geofence. */
81
+ export const homeFromTeslamateOption = new Option("--home-from-teslamate", "Center --near/--tier on the TeslaMate 'Home' geofence instead of a coordinate; needs --postgres-url");
82
+ /** Commander option: also upsert each fetched Supercharger as a TeslaMate geofence. */
83
+ export const geofencesOption = new Option("--teslamate-geofences", "Also upsert each fetched Supercharger as a TeslaMate geofence (name + price); needs --postgres-url");
42
84
  /** Commander option: pricing locale. */
43
85
  export const localeOption = new Option("-l, --locale <locale>", "Locale for pricing").default("en-US");
44
86
  /** Commander option: politeness delay between requests (seconds). */
@@ -71,19 +113,88 @@ export const atOption = new Option("-t, --at <HH:MM>", "Daily run time (24h, loc
71
113
  * set in the environment). Use this to escape datacenter IPs Akamai 403s.
72
114
  */
73
115
  export const proxyOption = new Option("--proxy <url>", "Route requests through this proxy (env HTTPS_PROXY / ALL_PROXY also honored)");
74
- /** Resolves the single scope flag (exactly one of country/region/all). */
116
+ /** Resolves the single scope flag (exactly one of country/region/all/near). */
75
117
  export const toScope = (o) => {
76
- const picked = [o.country, o.region, o.all ? "all" : undefined].filter(Boolean);
118
+ const picked = [
119
+ o.country,
120
+ o.region,
121
+ o.all ? "all" : undefined,
122
+ o.near ? "near" : undefined,
123
+ ].filter(Boolean);
124
+ if (picked.length !== 1) {
125
+ console.error("Pick exactly one scope: --country | --region | --all | --near.");
126
+ exit(1);
127
+ }
128
+ if (o.near) {
129
+ if (o.radius === undefined) {
130
+ console.error("--near requires --radius <km>.");
131
+ exit(1);
132
+ }
133
+ return { near: { lat: o.near.lat, lon: o.near.lon, radiusKm: o.radius } };
134
+ }
135
+ return { country: o.country, region: o.region, all: o.all };
136
+ };
137
+ /** pgUrl from --postgres-url or env; errors out when a flag needs it and it's absent. */
138
+ const requirePgUrl = (o, flag) => {
139
+ const pgUrl = o.postgresUrl ?? env.SUPERCHARGERS_PG_URL;
140
+ if (!pgUrl) {
141
+ console.error(`${flag} needs --postgres-url <url> (or env SUPERCHARGERS_PG_URL).`);
142
+ exit(1);
143
+ }
144
+ return pgUrl;
145
+ };
146
+ /** The radius center: --near, or the TeslaMate "Home" geofence (--home-from-teslamate). */
147
+ export const resolveCenter = async (o) => {
148
+ if (o.near && o.homeFromTeslamate) {
149
+ console.error("Pass either --near or --home-from-teslamate, not both.");
150
+ exit(1);
151
+ }
152
+ if (o.near)
153
+ return o.near;
154
+ const home = await fetchHomeGeofence(requirePgUrl(o, "--home-from-teslamate"));
155
+ if (!home) {
156
+ console.error("No TeslaMate 'Home' geofence found (name ILIKE 'home').");
157
+ exit(1);
158
+ }
159
+ console.log(`Home geofence center: ${home.lat},${home.lon}.`);
160
+ return home;
161
+ };
162
+ /**
163
+ * Resolves the fetch scope, including the TeslaMate-backed ones. Exactly one of
164
+ * --country / --region / --all / --near|--home-from-teslamate / --charged.
165
+ */
166
+ export const resolveFetchScope = async (o) => {
167
+ const nearScope = o.near || o.homeFromTeslamate;
168
+ const picked = [
169
+ o.country,
170
+ o.region,
171
+ o.all ? "all" : undefined,
172
+ nearScope ? "near" : undefined,
173
+ o.charged ? "charged" : undefined,
174
+ ].filter(Boolean);
77
175
  if (picked.length !== 1) {
78
- console.error("Pick exactly one scope: --country | --region | --all.");
176
+ console.error("Pick exactly one scope: --country | --region | --all | --near | --home-from-teslamate | --charged.");
79
177
  exit(1);
80
178
  }
179
+ if (o.charged) {
180
+ const points = await fetchChargeSiteCoords(requirePgUrl(o, "--charged"));
181
+ console.log(`Found ${points.length} charge locations in TeslaMate.`);
182
+ return { nearAny: { points, radiusKm: CHARGED_MATCH_KM } };
183
+ }
184
+ if (nearScope) {
185
+ if (o.radius === undefined) {
186
+ console.error("--near/--home-from-teslamate requires --radius <km>.");
187
+ exit(1);
188
+ }
189
+ const c = await resolveCenter(o);
190
+ return { near: { lat: c.lat, lon: c.lon, radiusKm: o.radius } };
191
+ }
81
192
  return { country: o.country, region: o.region, all: o.all };
82
193
  };
83
- /** Maps CLI options to the api fetch options. */
84
- export const toFetchOptions = (o) => {
194
+ /** Maps CLI options to the api fetch options, optionally with an explicit scope. */
195
+ export const toFetchOptions = (o, scope) => {
85
196
  return {
86
- scope: toScope(o),
197
+ scope: scope ?? toScope(o),
87
198
  locale: o.locale,
88
199
  delayMs: o.delay * 1000,
89
200
  limit: o.limit,
@@ -106,6 +217,10 @@ export const buildStores = (o) => {
106
217
  username: o.httpUser ?? env.SUPERCHARGERS_HTTP_USER,
107
218
  password: o.httpPassword ?? env.SUPERCHARGERS_HTTP_PASSWORD,
108
219
  }));
220
+ if (o.teslamateGeofences)
221
+ stores.push(new TeslaMateGeofenceStore({
222
+ connectionString: requirePgUrl(o, "--teslamate-geofences"),
223
+ }));
109
224
  if (stores.length === 0) {
110
225
  console.error("No output configured. Pass --out <dir>, --postgres-url <url>, and/or " +
111
226
  "--http-url <url> (or set SUPERCHARGERS_OUT_DIR / SUPERCHARGERS_PG_URL " +
@@ -126,9 +241,9 @@ export const applyProxy = (o) => {
126
241
  env.ALL_PROXY = o.proxy;
127
242
  };
128
243
  /** Fetches one snapshot, stores it, and closes the sinks. */
129
- export const runOnce = async (o) => {
244
+ export const runOnce = async (o, scope) => {
130
245
  applyProxy(o);
131
- const fetchOpts = toFetchOptions(o);
246
+ const fetchOpts = toFetchOptions(o, scope);
132
247
  const stores = buildStores(o);
133
248
  try {
134
249
  const res = await ingestSuperchargers(fetchOpts, stores);
@@ -140,6 +255,10 @@ export const runOnce = async (o) => {
140
255
  await s.close?.();
141
256
  }
142
257
  };
258
+ /** `fetch` command: resolve the (possibly TeslaMate-backed) scope, then run once. */
259
+ export const runFetch = async (o) => {
260
+ await runOnce(o, await resolveFetchScope(o));
261
+ };
143
262
  /** ms from now until the next HH:MM (local); rolls to tomorrow if already passed. */
144
263
  export const msUntil = (at) => {
145
264
  const [h, m] = at.split(":").map(Number);
@@ -150,11 +269,47 @@ export const msUntil = (at) => {
150
269
  next.setTime(next.getTime() + DAY_MS);
151
270
  return next.getTime() - now.getTime();
152
271
  };
272
+ /**
273
+ * The largest tier radius whose cadence is due on `date`, or null if none is.
274
+ * A tier is "due" when `epochDay % everyDays === 0` (epochDay = whole days since
275
+ * the Unix epoch, UTC) — date-driven so it survives restarts, with `7` landing on
276
+ * a fixed weekday and `30` meaning every 30 days. Cumulative: the chosen radius
277
+ * already covers every smaller tier, so one fetch at it satisfies all due tiers.
278
+ */
279
+ export const dueRadiusKm = (tiers, date) => {
280
+ const epochDay = Math.floor(date.getTime() / DAY_MS);
281
+ const due = tiers.filter((t) => epochDay % t.everyDays === 0);
282
+ if (due.length === 0)
283
+ return null;
284
+ return Math.max(...due.map((t) => t.radiusKm));
285
+ };
153
286
  /** Runs once on start, then every day at o.at — keeping the process alive. */
154
287
  export const scheduleDaily = async (o) => {
288
+ const tiers = o.tier;
289
+ if (tiers.length > 0 && !o.near && !o.homeFromTeslamate) {
290
+ console.error("--tier requires --near <lat,lon> or --home-from-teslamate.");
291
+ exit(1);
292
+ }
293
+ // Resolve the tier center once (a coordinate, or the TeslaMate "Home" geofence).
294
+ const center = tiers.length > 0 ? await resolveCenter(o) : undefined;
155
295
  const safeRun = async () => {
156
296
  try {
157
- await runOnce(o);
297
+ if (tiers.length > 0 && center) {
298
+ const radiusKm = dueRadiusKm(tiers, new Date());
299
+ if (radiusKm === null) {
300
+ console.log("No tier due today; skipping run.");
301
+ return;
302
+ }
303
+ console.log(`Tier due: fetching within ${radiusKm} km of ${center.lat},${center.lon}.`);
304
+ await runOnce(o, {
305
+ near: { lat: center.lat, lon: center.lon, radiusKm },
306
+ });
307
+ }
308
+ else {
309
+ // No tiers: country/region/all, --near, --home-from-teslamate, or --charged
310
+ // (re-resolved each fire so new charge locations are picked up over time).
311
+ await runOnce(o, await resolveFetchScope(o));
312
+ }
158
313
  }
159
314
  catch (e) {
160
315
  console.error("Run failed:", e instanceof Error ? e.message : e);
@@ -1 +1 @@
1
- {"version":3,"file":"cli.common.js","sourceRoot":"","sources":["../src/cli.common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.common.js","sourceRoot":"","sources":["../src/cli.common.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -16,7 +16,7 @@
16
16
  */
17
17
  import { program } from "@commander-js/extra-typings";
18
18
  import { argv, exit } from "node:process";
19
- import { allOption, atOption, countryOption, delayOption, httpPasswordOption, httpUrlOption, httpUserOption, limitOption, listCountries, localeOption, outOption, pgTableOption, postgresUrlOption, proxyOption, readVersion, regionOption, runOnce, scheduleDaily, } from "./cli.common.js";
19
+ import { allOption, atOption, chargedOption, countryOption, delayOption, geofencesOption, homeFromTeslamateOption, httpPasswordOption, httpUrlOption, httpUserOption, limitOption, listCountries, localeOption, nearOption, outOption, pgTableOption, postgresUrlOption, proxyOption, radiusOption, readVersion, regionOption, runFetch, scheduleDaily, tierOption, } from "./cli.common.js";
20
20
  program
21
21
  .name("teslamate-superchargers")
22
22
  .version(readVersion())
@@ -27,6 +27,11 @@ program
27
27
  .addOption(countryOption)
28
28
  .addOption(regionOption)
29
29
  .addOption(allOption)
30
+ .addOption(nearOption)
31
+ .addOption(radiusOption)
32
+ .addOption(chargedOption)
33
+ .addOption(homeFromTeslamateOption)
34
+ .addOption(geofencesOption)
30
35
  .addOption(localeOption)
31
36
  .addOption(delayOption)
32
37
  .addOption(limitOption)
@@ -37,13 +42,19 @@ program
37
42
  .addOption(httpUserOption)
38
43
  .addOption(httpPasswordOption)
39
44
  .addOption(proxyOption)
40
- .action(runOnce);
45
+ .action((o) => runFetch(o));
41
46
  program
42
47
  .command("schedule")
43
48
  .description("Fetch now, then refresh once a day at --at (keeps running)")
44
49
  .addOption(countryOption)
45
50
  .addOption(regionOption)
46
51
  .addOption(allOption)
52
+ .addOption(nearOption)
53
+ .addOption(radiusOption)
54
+ .addOption(tierOption)
55
+ .addOption(chargedOption)
56
+ .addOption(homeFromTeslamateOption)
57
+ .addOption(geofencesOption)
47
58
  .addOption(localeOption)
48
59
  .addOption(delayOption)
49
60
  .addOption(limitOption)
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,YAAY,EACZ,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO;KACJ,IAAI,CAAC,yBAAyB,CAAC;KAC/B,OAAO,CAAC,WAAW,EAAE,CAAC;KACtB,WAAW,CAAC,wDAAwD,CAAC,CAAC;AAEzE,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4CAA4C,CAAC;KACzD,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,SAAS,CAAC;KACpB,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,SAAS,CAAC;KACpB,SAAS,CAAC,iBAAiB,CAAC;KAC5B,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,cAAc,CAAC;KACzB,SAAS,CAAC,kBAAkB,CAAC;KAC7B,SAAS,CAAC,WAAW,CAAC;KACtB,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,4DAA4D,CAAC;KACzE,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,SAAS,CAAC;KACpB,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,SAAS,CAAC;KACpB,SAAS,CAAC,iBAAiB,CAAC;KAC5B,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,cAAc,CAAC;KACzB,SAAS,CAAC,kBAAkB,CAAC;KAC7B,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,QAAQ,CAAC;KACnB,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACnC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,CAAC,CAAC,CAAC;AACV,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO;KACJ,IAAI,CAAC,yBAAyB,CAAC;KAC/B,OAAO,CAAC,WAAW,EAAE,CAAC;KACtB,WAAW,CAAC,wDAAwD,CAAC,CAAC;AAEzE,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4CAA4C,CAAC;KACzD,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,SAAS,CAAC;KACpB,SAAS,CAAC,UAAU,CAAC;KACrB,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,uBAAuB,CAAC;KAClC,SAAS,CAAC,eAAe,CAAC;KAC1B,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,SAAS,CAAC;KACpB,SAAS,CAAC,iBAAiB,CAAC;KAC5B,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,cAAc,CAAC;KACzB,SAAS,CAAC,kBAAkB,CAAC;KAC7B,SAAS,CAAC,WAAW,CAAC;KACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,4DAA4D,CAAC;KACzE,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,SAAS,CAAC;KACpB,SAAS,CAAC,UAAU,CAAC;KACrB,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,UAAU,CAAC;KACrB,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,uBAAuB,CAAC;KAClC,SAAS,CAAC,eAAe,CAAC;KAC1B,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,SAAS,CAAC;KACpB,SAAS,CAAC,iBAAiB,CAAC;KAC5B,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,aAAa,CAAC;KACxB,SAAS,CAAC,cAAc,CAAC;KACzB,SAAS,CAAC,kBAAkB,CAAC;KAC7B,SAAS,CAAC,WAAW,CAAC;KACtB,SAAS,CAAC,QAAQ,CAAC;KACnB,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACnC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,CAAC,CAAC,CAAC;AACV,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mxpicture/teslamate-extended-cli",
3
- "version": "2.1.60",
3
+ "version": "2.1.61",
4
4
  "description": "CLI to fetch + store Tesla Supercharger locations and pricing",
5
5
  "type": "module",
6
6
  "author": "MXPicture",
@@ -28,19 +28,21 @@
28
28
  "scripts": {
29
29
  "lint": "eslint \"src/**/*.ts\" --ext .ts --cache --cache-strategy content",
30
30
  "lint:ci": "eslint \"src/**/*.ts\" --ext .ts --max-warnings=0",
31
- "build": "tsc -b ."
31
+ "build": "tsc -b .",
32
+ "test": "tsc -b . && vitest run"
32
33
  },
33
34
  "publishConfig": {
34
35
  "access": "public"
35
36
  },
36
37
  "dependencies": {
37
38
  "@commander-js/extra-typings": "^14.0.0",
38
- "@mxpicture/teslamate-extended-api": "^2.1.60",
39
+ "@mxpicture/teslamate-extended-api": "^2.1.61",
39
40
  "commander": "^14.0.3"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@types/node": "^25.2.3",
43
44
  "eslint": "^9.39.3",
44
- "typescript": "^5.9.3"
45
+ "typescript": "^5.9.3",
46
+ "vitest": "^4.0.18"
45
47
  }
46
48
  }