@gojinko/cli 2.20.0 → 2.22.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.
@@ -30,6 +30,18 @@ export declare function exitWithError(err: unknown, globals: GlobalOptions): nev
30
30
  * Returns the resolved canonical value so callers can use it inline.
31
31
  */
32
32
  export declare function resolveDeprecatedFlag<T>(canonical: T | undefined, deprecated: T | undefined, oldFlag: string, newFlag: string): T | undefined;
33
+ /**
34
+ * Build the source-native action string for the `X-Origin-Action` header: the
35
+ * invoked CLI command path (e.g. `flight-search`, `book`, `auth login`),
36
+ * excluding the root `jinko` program name. Threaded into the api-client so its
37
+ * middleware can stamp `X-Origin-Action` for intent tracking.
38
+ *
39
+ * Walks up the Commander parent chain until the root program (whose `.parent`
40
+ * is null), so the program name is never included. Returns undefined when the
41
+ * command cannot be determined (e.g. a stub Command in unit tests), keeping the
42
+ * header omitted rather than blank.
43
+ */
44
+ export declare function resolveCommandPath(cmd: Command | undefined): string | undefined;
33
45
  /**
34
46
  * Wraps a command handler with standard error handling and client creation.
35
47
  * Commander calls action with varying arg counts:
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAA0C,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC/B,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,iEAAiE;AACjE,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,IAAI,SAAkB;CAKpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,CAezE;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,SAAS,EAAE,CAAC,GAAG,SAAS,EACxB,UAAU,EAAE,CAAC,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,SAAS,CAMf;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,CACP,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EAEtB,OAAO,CAAC,EAAE,GAAG,EACb,GAAG,CAAC,EAAE,OAAO,KACV,OAAO,CAAC,IAAI,CAAC,IAGK,MAAM,OAAO,EAAE,GAAG,MAAM,GAAG,EAAE,mBA4BrD"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAA0C,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC/B,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,iEAAiE;AACjE,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,IAAI,SAAkB;CAKpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,CAezE;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,SAAS,EAAE,CAAC,GAAG,SAAS,EACxB,UAAU,EAAE,CAAC,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,SAAS,CAMf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAY/E;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,CACP,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EAEtB,OAAO,CAAC,EAAE,GAAG,EACb,GAAG,CAAC,EAAE,OAAO,KACV,OAAO,CAAC,IAAI,CAAC,IAGK,MAAM,OAAO,EAAE,GAAG,MAAM,GAAG,EAAE,mBA8BrD"}
@@ -53,6 +53,30 @@ export function resolveDeprecatedFlag(canonical, deprecated, oldFlag, newFlag) {
53
53
  }
54
54
  return canonical;
55
55
  }
56
+ /**
57
+ * Build the source-native action string for the `X-Origin-Action` header: the
58
+ * invoked CLI command path (e.g. `flight-search`, `book`, `auth login`),
59
+ * excluding the root `jinko` program name. Threaded into the api-client so its
60
+ * middleware can stamp `X-Origin-Action` for intent tracking.
61
+ *
62
+ * Walks up the Commander parent chain until the root program (whose `.parent`
63
+ * is null), so the program name is never included. Returns undefined when the
64
+ * command cannot be determined (e.g. a stub Command in unit tests), keeping the
65
+ * header omitted rather than blank.
66
+ */
67
+ export function resolveCommandPath(cmd) {
68
+ if (!cmd || typeof cmd.name !== 'function') {
69
+ return undefined;
70
+ }
71
+ const names = [];
72
+ let current = cmd;
73
+ while (current && current.parent) {
74
+ names.unshift(current.name());
75
+ current = current.parent;
76
+ }
77
+ const path = names.join(' ').trim();
78
+ return path.length > 0 ? path : undefined;
79
+ }
56
80
  /**
57
81
  * Wraps a command handler with standard error handling and client creation.
58
82
  * Commander calls action with varying arg counts:
@@ -72,6 +96,8 @@ export function withClient(handler) {
72
96
  const client = await createJinkoClient({
73
97
  apiKey: globals.apiKey,
74
98
  environment: globals.environment,
99
+ originSource: 'cli',
100
+ originAction: resolveCommandPath(cmd),
75
101
  });
76
102
  await handler(client, globals, cmdOpts, cmd);
77
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,20 @@
1
1
  /** Shared option registration + request building for the three travel-demand commands. */
2
2
  import type { Command } from 'commander';
3
- import { type DemandQuery, type JinkoClient, type TravelPeriod, type TravelerType, type TripType } from '@gojinko/api-client';
4
- export declare const TRAVEL_PERIODS: readonly TravelPeriod[];
3
+ import { type DemandQuery, type JinkoClient, type Level, type TravelerType, type TripType } from '@gojinko/api-client';
5
4
  export declare const TRAVELER_TYPES: readonly TravelerType[];
6
5
  export declare const TRIP_TYPES: readonly TripType[];
7
6
  export declare const LEVELS: string[];
7
+ /** Values accepted by --level (ranked-output granularity); lowercase, matching the API. */
8
+ export declare const LEVEL_VALUES: readonly Level[];
8
9
  /** Raw option bag as parsed by Commander (camelCased flags). */
9
10
  export interface DemandCliOpts {
10
- analysis?: string;
11
- originMarket?: string;
11
+ origin?: string;
12
+ /** market only: a Country selector, allowed only with --level city. */
13
+ originCountry?: string;
12
14
  destination?: string;
13
- travelPeriod?: string;
15
+ /** destination only: a Country selector, allowed only with --level city. */
16
+ destinationCountry?: string;
17
+ level?: string;
14
18
  departureDateFrom?: string;
15
19
  departureDateTo?: string;
16
20
  travelerType?: string;
@@ -20,18 +24,54 @@ export interface DemandCliOpts {
20
24
  searchWindowMin?: string;
21
25
  searchWindowMax?: string;
22
26
  snapshotWindowDays?: string;
23
- trendWindowDays?: string;
24
27
  limit?: string;
25
28
  }
26
29
  export interface BuildOpts {
27
30
  requireDestination?: boolean;
28
31
  allowTravelerType?: boolean;
32
+ /** Whether --level (ranked-output granularity) is a valid option (destination/market, not audience). */
33
+ allowLevel?: boolean;
34
+ /**
35
+ * The market ranking takes `--origin-country` (a Country selector, allowed only
36
+ * with `--level city`) in place of the `--origin` filter used by
37
+ * destination/audience. When set, the builder reads/validates `--origin-country`
38
+ * and emits `origin_country`; otherwise it reads `--origin`.
39
+ */
40
+ originCountry?: boolean;
41
+ /**
42
+ * The destination ranking takes `--destination-country` (a Country selector,
43
+ * allowed only with `--level city`) in place of the plain `--destination`
44
+ * narrowing filter. When set, the builder reads/validates `--destination-country`
45
+ * and emits `destination_country`; otherwise it reads `--destination`.
46
+ */
47
+ destinationCountry?: boolean;
29
48
  }
30
49
  export declare function checkEnum<T extends string>(value: string | undefined, allowed: readonly T[], flag: string): T | undefined;
31
50
  export declare function checkLocation(value: string | undefined, flag: string): string | undefined;
51
+ /**
52
+ * Validate a COUNTRY-only scope filter (`--origin-country` / `--destination-country`):
53
+ * it must be a COUNTRY selector (`Country:<code>`) and is only allowed together
54
+ * with `--level city` (it scopes the ranked side to one country so its cities are
55
+ * ranked). Mirrors resolveScopeCountry in the Go BFF.
56
+ */
57
+ export declare function checkScopeCountry(value: string | undefined, level: Level | undefined, flag: string): string | undefined;
58
+ /** market ranking: `--origin-country` scopes the ranked origin cities to one country. */
59
+ export declare function checkOriginCountry(value: string | undefined, level: Level | undefined): string | undefined;
60
+ /** destination ranking: `--destination-country` scopes the ranked destination cities to one country. */
61
+ export declare function checkDestinationCountry(value: string | undefined, level: Level | undefined): string | undefined;
32
62
  export declare function checkDate(value: string | undefined, flag: string): string | undefined;
33
63
  export declare function checkNonNegInt(value: string | undefined, flag: string): number | undefined;
34
64
  export declare function checkRangeInt(value: string | undefined, flag: string, min: number, max: number, oneDayReason?: string): number | undefined;
65
+ /**
66
+ * Validate the optional departure-date window: both bounds together (or neither),
67
+ * with --departure-date-to on or after --departure-date-from. When both are omitted
68
+ * no departure-date filter is applied (all departure dates). Returns the validated
69
+ * [from, to]. Throws UsageError (exit 3) on bad input. Shared with the trend commands.
70
+ */
71
+ export declare function checkDepartureWindow(fromRaw: string | undefined, toRaw: string | undefined): {
72
+ from?: string;
73
+ to?: string;
74
+ };
35
75
  /** Validate CLI options and build the wire query. Throws UsageError (exit 3) on bad input. */
36
76
  export declare function buildDemandQuery(opts: DemandCliOpts, build?: BuildOpts): DemandQuery;
37
77
  /**
@@ -41,6 +81,30 @@ export declare function buildDemandQuery(opts: DemandCliOpts, build?: BuildOpts)
41
81
  * commands don't use the generic withClient wrapper, which creates the client first.)
42
82
  */
43
83
  export declare function demandAction(build: BuildOpts, call: (client: JinkoClient, query: DemandQuery) => Promise<unknown>): (this: Command, ...args: unknown[]) => Promise<void>;
44
- /** Register the query options shared by all three demand commands. */
84
+ /**
85
+ * Register the `--level` (ranked-output granularity) option. Only the destination
86
+ * and market rankings (and their trend variants) accept it — not audience,
87
+ * which buckets by traveler type, nor the explicit-pairs trend command.
88
+ */
89
+ export declare function addLevelOption(cmd: Command): Command;
90
+ /**
91
+ * Register `--origin` (destination/audience rankings + their trend variants):
92
+ * a `<Level>:<Code>` origin filter that accepts City or Country, or `global`.
93
+ */
94
+ export declare function addOriginOption(cmd: Command): Command;
95
+ /**
96
+ * Register `--origin-country` (market ranking + market-trend only): a COUNTRY
97
+ * selector, allowed only with `--level city`, that narrows the ranking to that
98
+ * country's origin cities. Registered after `--level` so it reads as a modifier of it.
99
+ */
100
+ export declare function addOriginCountryOption(cmd: Command): Command;
101
+ /**
102
+ * Register `--destination-country` (destination ranking + destination-trend only):
103
+ * a COUNTRY selector, allowed only with `--level city`, that narrows the ranking to
104
+ * that country's destination cities. The symmetric mirror of `--origin-country`.
105
+ * Registered after `--level` so it reads as a modifier of it.
106
+ */
107
+ export declare function addDestinationCountryOption(cmd: Command): Command;
108
+ /** Register the query options shared by all three demand commands (origin is per-command). */
45
109
  export declare function addCommonDemandOptions(cmd: Command): Command;
46
110
  //# sourceMappingURL=demand-shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"demand-shared.d.ts","sourceRoot":"","sources":["../../../src/commands/travel-demand/demand-shared.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAK7B,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAQjD,CAAC;AACF,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAA0C,CAAC;AAC7F,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EAA8B,CAAC;AACzE,eAAO,MAAM,MAAM,UAAsB,CAAC;AAG1C,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EACxC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,SAAS,CAMf;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUzF;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWrF;AAWD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO1F;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EAIX,YAAY,SAAoF,GAC/F,MAAM,GAAG,SAAS,CAUpB;AAED,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,GAAE,SAAc,GAAG,WAAW,CAiFxF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,IAE5C,MAAM,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CAezE;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CA8B5D"}
1
+ {"version":3,"file":"demand-shared.d.ts","sourceRoot":"","sources":["../../../src/commands/travel-demand/demand-shared.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,11 @@
1
1
  import { createJinkoClient, } from '@gojinko/api-client';
2
2
  import { getGlobalOptions } from '../../config/config.js';
3
- import { exitWithError, output, UsageError } from '../shared.js';
4
- const ANALYSIS = ['snapshot', 'trend'];
5
- export const TRAVEL_PERIODS = [
6
- 'Summer',
7
- 'Winter',
8
- 'Christmas',
9
- 'Easter',
10
- 'Next30Days',
11
- 'Next90Days',
12
- 'Custom',
13
- ];
3
+ import { exitWithError, output, resolveCommandPath, UsageError } from '../shared.js';
14
4
  export const TRAVELER_TYPES = ['Solo', 'Couple', 'Group', 'Family'];
15
5
  export const TRIP_TYPES = ['One-Way', 'Round-Trip'];
16
6
  export const LEVELS = ['City', 'Country'];
7
+ /** Values accepted by --level (ranked-output granularity); lowercase, matching the API. */
8
+ export const LEVEL_VALUES = ['country', 'city'];
17
9
  const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
18
10
  export function checkEnum(value, allowed, flag) {
19
11
  if (value === undefined)
@@ -35,6 +27,32 @@ export function checkLocation(value, flag) {
35
27
  }
36
28
  return value;
37
29
  }
30
+ /**
31
+ * Validate a COUNTRY-only scope filter (`--origin-country` / `--destination-country`):
32
+ * it must be a COUNTRY selector (`Country:<code>`) and is only allowed together
33
+ * with `--level city` (it scopes the ranked side to one country so its cities are
34
+ * ranked). Mirrors resolveScopeCountry in the Go BFF.
35
+ */
36
+ export function checkScopeCountry(value, level, flag) {
37
+ if (value === undefined)
38
+ return undefined;
39
+ const loc = checkLocation(value, flag);
40
+ if (!loc || !loc.startsWith('Country:')) {
41
+ throw new UsageError(`${flag} must be a country selector, e.g. Country:US (a City is not allowed) (got "${value}")`);
42
+ }
43
+ if (level !== 'city') {
44
+ throw new UsageError(`${flag} is only allowed together with --level city`);
45
+ }
46
+ return loc;
47
+ }
48
+ /** market ranking: `--origin-country` scopes the ranked origin cities to one country. */
49
+ export function checkOriginCountry(value, level) {
50
+ return checkScopeCountry(value, level, '--origin-country');
51
+ }
52
+ /** destination ranking: `--destination-country` scopes the ranked destination cities to one country. */
53
+ export function checkDestinationCountry(value, level) {
54
+ return checkScopeCountry(value, level, '--destination-country');
55
+ }
38
56
  export function checkDate(value, flag) {
39
57
  if (value === undefined)
40
58
  return undefined;
@@ -67,9 +85,10 @@ export function checkNonNegInt(value, flag) {
67
85
  return n;
68
86
  }
69
87
  export function checkRangeInt(value, flag, min, max,
70
- // Why "1" specifically is rejected. The snapshot/trend windows include the
71
- // current (incomplete) day, hence the default; evolution windows end yesterday,
72
- // so they pass their own reason. `1` looks like a reasonable input either way.
88
+ // Why "1" specifically is rejected. The snapshot window includes the current
89
+ // (incomplete) day, hence the default reason; a trend series window ends on the
90
+ // last COMPLETE bucket, so the trend builder passes its own reason. `1` looks
91
+ // like a reasonable input either way.
73
92
  oneDayReason = 'a 1-day window relies on the current day, whose search data is not yet complete') {
74
93
  if (value === undefined)
75
94
  return undefined;
@@ -80,28 +99,49 @@ oneDayReason = 'a 1-day window relies on the current day, whose search data is n
80
99
  }
81
100
  return n;
82
101
  }
83
- /** Validate CLI options and build the wire query. Throws UsageError (exit 3) on bad input. */
84
- export function buildDemandQuery(opts, build = {}) {
85
- const analysis = checkEnum(opts.analysis, ANALYSIS, '--analysis') ?? 'snapshot';
86
- const travelPeriod = checkEnum(opts.travelPeriod, TRAVEL_PERIODS, '--travel-period');
87
- const from = checkDate(opts.departureDateFrom, '--departure-date-from');
88
- const to = checkDate(opts.departureDateTo, '--departure-date-to');
89
- if (travelPeriod === 'Custom') {
90
- if (!from || !to) {
91
- throw new UsageError('--travel-period Custom requires both --departure-date-from and --departure-date-to');
92
- }
93
- if (to < from) {
94
- throw new UsageError('--departure-date-to must be on or after --departure-date-from');
95
- }
102
+ /**
103
+ * Validate the optional departure-date window: both bounds together (or neither),
104
+ * with --departure-date-to on or after --departure-date-from. When both are omitted
105
+ * no departure-date filter is applied (all departure dates). Returns the validated
106
+ * [from, to]. Throws UsageError (exit 3) on bad input. Shared with the trend commands.
107
+ */
108
+ export function checkDepartureWindow(fromRaw, toRaw) {
109
+ const from = checkDate(fromRaw, '--departure-date-from');
110
+ const to = checkDate(toRaw, '--departure-date-to');
111
+ if ((from && !to) || (!from && to)) {
112
+ throw new UsageError('--departure-date-from and --departure-date-to must be provided together');
96
113
  }
97
- else if (from || to) {
98
- throw new UsageError('--departure-date-from/--departure-date-to are only valid with --travel-period Custom');
114
+ if (from && to && to < from) {
115
+ throw new UsageError('--departure-date-to must be on or after --departure-date-from');
99
116
  }
100
- const destination = checkLocation(opts.destination, '--destination');
117
+ return { from, to };
118
+ }
119
+ /** Validate CLI options and build the wire query. Throws UsageError (exit 3) on bad input. */
120
+ export function buildDemandQuery(opts, build = {}) {
121
+ const { from, to } = checkDepartureWindow(opts.departureDateFrom, opts.departureDateTo);
122
+ const level = build.allowLevel
123
+ ? checkEnum(opts.level, LEVEL_VALUES, '--level')
124
+ : undefined;
125
+ // destination takes --destination-country (Country-only, --level city only) in
126
+ // place of the plain --destination narrowing filter; market/audience take the
127
+ // required/optional --destination. Mutually exclusive per command.
128
+ const destinationCountry = build.destinationCountry
129
+ ? checkDestinationCountry(opts.destinationCountry, level)
130
+ : undefined;
131
+ const destination = build.destinationCountry
132
+ ? undefined
133
+ : checkLocation(opts.destination, '--destination');
101
134
  if (build.requireDestination && !destination) {
102
135
  throw new UsageError('--destination is required for this command (e.g. --destination Country:TH)');
103
136
  }
104
- const originMarket = checkLocation(opts.originMarket, '--origin-market');
137
+ // market takes --origin-country (Country-only, --level city only); the other
138
+ // rankings take --origin. The two are mutually exclusive per command.
139
+ const originCountry = build.originCountry
140
+ ? checkOriginCountry(opts.originCountry, level)
141
+ : undefined;
142
+ const origin = build.originCountry
143
+ ? undefined
144
+ : checkLocation(opts.origin, '--origin');
105
145
  const travelerType = build.allowTravelerType
106
146
  ? checkEnum(opts.travelerType, TRAVELER_TYPES, '--traveler-type')
107
147
  : undefined;
@@ -120,24 +160,21 @@ export function buildDemandQuery(opts, build = {}) {
120
160
  searchWindowMax < searchWindowMin) {
121
161
  throw new UsageError('--search-window-max must be >= --search-window-min');
122
162
  }
123
- // Per-mode analysis-window overrides. Each is only valid in its own mode;
124
- // pairing it with the other mode is rejected (matches the API/BFF).
163
+ // Recent-activity window for the snapshot ranking (2-90). A 1-day window is
164
+ // rejected because the current day's search data is still incomplete.
125
165
  const snapshotWindowDays = checkRangeInt(opts.snapshotWindowDays, '--snapshot-window-days', 2, 90);
126
- if (snapshotWindowDays !== undefined && analysis !== 'snapshot') {
127
- throw new UsageError('--snapshot-window-days is only valid with --analysis snapshot');
128
- }
129
- const trendWindowDays = checkRangeInt(opts.trendWindowDays, '--trend-window-days', 2, 45);
130
- if (trendWindowDays !== undefined && analysis !== 'trend') {
131
- throw new UsageError('--trend-window-days is only valid with --analysis trend');
132
- }
133
166
  const limit = checkLimit(opts.limit);
134
- const query = { analysis };
135
- if (originMarket)
136
- query.origin_market = originMarket;
167
+ const query = {};
168
+ if (origin)
169
+ query.origin = origin;
170
+ if (originCountry)
171
+ query.origin_country = originCountry;
137
172
  if (destination)
138
173
  query.destination = destination;
139
- if (travelPeriod)
140
- query.travel_period = travelPeriod;
174
+ if (destinationCountry)
175
+ query.destination_country = destinationCountry;
176
+ if (level)
177
+ query.level = level;
141
178
  if (from)
142
179
  query.departure_date_from = from;
143
180
  if (to)
@@ -156,8 +193,6 @@ export function buildDemandQuery(opts, build = {}) {
156
193
  query.search_window_max = searchWindowMax;
157
194
  if (snapshotWindowDays !== undefined)
158
195
  query.snapshot_window_days = snapshotWindowDays;
159
- if (trendWindowDays !== undefined)
160
- query.trend_window_days = trendWindowDays;
161
196
  if (limit !== undefined)
162
197
  query.limit = limit;
163
198
  return query;
@@ -178,6 +213,8 @@ export function demandAction(build, call) {
178
213
  const client = await createJinkoClient({
179
214
  apiKey: globals.apiKey,
180
215
  environment: globals.environment,
216
+ originSource: 'cli',
217
+ originAction: resolveCommandPath(command),
181
218
  });
182
219
  output(await call(client, query), { format: globals.format });
183
220
  }
@@ -186,21 +223,49 @@ export function demandAction(build, call) {
186
223
  }
187
224
  };
188
225
  }
189
- /** Register the query options shared by all three demand commands. */
226
+ /**
227
+ * Register the `--level` (ranked-output granularity) option. Only the destination
228
+ * and market rankings (and their trend variants) accept it — not audience,
229
+ * which buckets by traveler type, nor the explicit-pairs trend command.
230
+ */
231
+ export function addLevelOption(cmd) {
232
+ return cmd.option('--level <level>', 'ranked output granularity: country (default) or city', 'country');
233
+ }
234
+ /**
235
+ * Register `--origin` (destination/audience rankings + their trend variants):
236
+ * a `<Level>:<Code>` origin filter that accepts City or Country, or `global`.
237
+ */
238
+ export function addOriginOption(cmd) {
239
+ return cmd.option('--origin <level:code>', "origin filter, e.g. Country:US or City:NYC (or 'global' for all origins)");
240
+ }
241
+ /**
242
+ * Register `--origin-country` (market ranking + market-trend only): a COUNTRY
243
+ * selector, allowed only with `--level city`, that narrows the ranking to that
244
+ * country's origin cities. Registered after `--level` so it reads as a modifier of it.
245
+ */
246
+ export function addOriginCountryOption(cmd) {
247
+ return cmd.option('--origin-country <Country:code>', "origin country to rank cities within, e.g. Country:US — allowed only with --level city");
248
+ }
249
+ /**
250
+ * Register `--destination-country` (destination ranking + destination-trend only):
251
+ * a COUNTRY selector, allowed only with `--level city`, that narrows the ranking to
252
+ * that country's destination cities. The symmetric mirror of `--origin-country`.
253
+ * Registered after `--level` so it reads as a modifier of it.
254
+ */
255
+ export function addDestinationCountryOption(cmd) {
256
+ return cmd.option('--destination-country <Country:code>', "destination country to rank cities within, e.g. Country:FR — allowed only with --level city");
257
+ }
258
+ /** Register the query options shared by all three demand commands (origin is per-command). */
190
259
  export function addCommonDemandOptions(cmd) {
191
260
  return cmd
192
- .option('--analysis <mode>', 'analysis mode: snapshot (default) or trend', 'snapshot')
193
- .option('--origin-market <level:code>', 'origin market filter, e.g. Country:US or City:NYC')
194
- .option('--travel-period <period>', 'Summer|Winter|Christmas|Easter|Next30Days|Next90Days|Custom (default Next90Days)')
195
- .option('--departure-date-from <YYYY-MM-DD>', 'start of departure window (requires --travel-period Custom)')
196
- .option('--departure-date-to <YYYY-MM-DD>', 'end of departure window (requires --travel-period Custom)')
261
+ .option('--departure-date-from <YYYY-MM-DD>', 'start of departure window (use with --departure-date-to; omit both for no departure-date filter)')
262
+ .option('--departure-date-to <YYYY-MM-DD>', 'end of departure window (use with --departure-date-from; omit both for no departure-date filter)')
197
263
  .option('--trip-type <type>', 'One-Way|Round-Trip')
198
264
  .option('--trip-duration-min <n>', 'minimum trip length in nights (round-trips only, >= 0)')
199
265
  .option('--trip-duration-max <n>', 'maximum trip length in nights (>= --trip-duration-min)')
200
266
  .option('--search-window-min <n>', 'minimum advance-purchase window in days before departure (>= 0)')
201
267
  .option('--search-window-max <n>', 'maximum advance-purchase window in days (>= --search-window-min)')
202
- .option('--snapshot-window-days <n>', 'snapshot only: days of recent search activity in the level window (2-90, default 7)')
203
- .option('--trend-window-days <n>', 'trend only: size in days of each compared window (2-45, default 7)')
268
+ .option('--snapshot-window-days <n>', 'days of recent search activity aggregated into the demand level (2-90, default 7)')
204
269
  .option('--limit <n>', 'max rows, 1-200 (default 20)');
205
270
  }
206
271
  //# sourceMappingURL=demand-shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"demand-shared.js","sourceRoot":"","sources":["../../../src/commands/travel-demand/demand-shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"demand-shared.js","sourceRoot":"","sources":["../../../src/commands/travel-demand/demand-shared.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,12 @@ import type { Command } from 'commander';
3
3
  * `jinko travel-demand <operation>` — Travel Demand Intelligence (JIN-1378, JIN-1471).
4
4
  *
5
5
  * A second-level command group (like `auth`/`config`) with seven operations:
6
- * three snapshot/trend rankings — destination / market / audience — and four
7
- * daily time-series ("evolution") deep-dives — evolution / destination-evolution
8
- * / market-evolution / audience-evolution (JIN-1471). ("demand-" is dropped — it
9
- * is redundant under `travel-demand`.) The SDK keeps its flat demand* method
10
- * names (demandDestination/…/demandEvolution/…). Registration is purely
11
- * additive — see createProgram() in ../../index.ts.
6
+ * three snapshot rankings — destination / market / audience — and four
7
+ * time-series ("trend") deep-dives — trend / destination-trend / market-trend /
8
+ * audience-trend (JIN-1471, renamed from "evolution" by JIN-1529). ("demand-" is
9
+ * dropped — it is redundant under `travel-demand`.) The SDK keeps its flat
10
+ * demand* method names (demandDestination/…/demandTrend/…). Registration is
11
+ * purely additive — see createProgram() in ../../index.ts.
12
12
  */
13
13
  export declare function registerTravelDemandCommands(program: Command): void;
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/travel-demand/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsDnE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/travel-demand/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuEnE"}
@@ -1,81 +1,96 @@
1
- import { addCommonDemandOptions, demandAction } from './demand-shared.js';
2
- import { addCommonEvolutionOptions, addRankedEvolutionOptions, buildPairsEvolutionQuery, buildRankedEvolutionQuery, collectLocations, evolutionAction, } from './evolution-shared.js';
1
+ import { addCommonDemandOptions, addDestinationCountryOption, addLevelOption, addOriginCountryOption, addOriginOption, demandAction, } from './demand-shared.js';
2
+ import { addCommonTrendOptions, addRankedTrendOptions, buildPairsTrendQuery, buildRankedTrendQuery, collectLocations, trendAction, } from './trend-shared.js';
3
3
  /**
4
4
  * `jinko travel-demand <operation>` — Travel Demand Intelligence (JIN-1378, JIN-1471).
5
5
  *
6
6
  * A second-level command group (like `auth`/`config`) with seven operations:
7
- * three snapshot/trend rankings — destination / market / audience — and four
8
- * daily time-series ("evolution") deep-dives — evolution / destination-evolution
9
- * / market-evolution / audience-evolution (JIN-1471). ("demand-" is dropped — it
10
- * is redundant under `travel-demand`.) The SDK keeps its flat demand* method
11
- * names (demandDestination/…/demandEvolution/…). Registration is purely
12
- * additive — see createProgram() in ../../index.ts.
7
+ * three snapshot rankings — destination / market / audience — and four
8
+ * time-series ("trend") deep-dives — trend / destination-trend / market-trend /
9
+ * audience-trend (JIN-1471, renamed from "evolution" by JIN-1529). ("demand-" is
10
+ * dropped — it is redundant under `travel-demand`.) The SDK keeps its flat
11
+ * demand* method names (demandDestination/…/demandTrend/…). Registration is
12
+ * purely additive — see createProgram() in ../../index.ts.
13
13
  */
14
14
  export function registerTravelDemandCommands(program) {
15
15
  const td = program
16
16
  .command('travel-demand')
17
- .summary('Travel Demand Intelligence — rankings + daily evolution time series')
17
+ .summary('Travel Demand Intelligence — rankings + trend time series')
18
18
  .description('Query de-sampled search-demand analytics (JIN-1378, JIN-1471): the most-searched ' +
19
19
  'destinations, the source markets driving demand for a destination, and the traveler-type ' +
20
- 'mix — as point-in-time rankings (snapshot/trend) or as daily "evolution" time series you ' +
21
- 'can plot over a window.');
22
- addCommonDemandOptions(td
20
+ 'mix — as point-in-time rankings, or as "trend" time series you can plot over a window.');
21
+ addDestinationCountryOption(addOriginOption(addLevelOption(addCommonDemandOptions(td
23
22
  .command('destination')
24
23
  .summary('Top destinations by search demand')
25
- .description('Most-searched destinations by de-sampled request share. Optionally scope to an origin ' +
26
- 'market with --origin-market, or filter to a single destination with --destination.')
27
- .option('--destination <level:code>', 'optional destination filter, e.g. Country:TH')
28
- .option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(demandAction({ allowTravelerType: true }, (client, query) => client.demandDestination(query)));
29
- addCommonDemandOptions(td
24
+ .description('Most-searched destinations by de-sampled request share. Optionally scope to a single ' +
25
+ 'origin with --origin. Optional --destination-country (a Country selector, allowed ' +
26
+ "only with --level city) narrows the ranking to that country's destination cities.")
27
+ .option('--traveler-type <type>', 'Solo|Couple|Group|Family'))))).action(demandAction({ allowTravelerType: true, allowLevel: true, destinationCountry: true }, (client, query) => client.demandDestination(query)));
28
+ addOriginCountryOption(addLevelOption(addCommonDemandOptions(td
30
29
  .command('market')
31
30
  .summary('Top source markets for a destination')
32
- .description('Which source markets generate the most demand for a destination. --destination is required.')
31
+ .description('Which source markets generate the most demand for a destination. --destination is ' +
32
+ 'required. Optional --origin-country (a Country selector, allowed only with --level ' +
33
+ "city) narrows the ranking to that country's origin cities.")
33
34
  .option('--destination <level:code>', 'destination, e.g. Country:TH (required)')
34
- .option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(demandAction({ requireDestination: true, allowTravelerType: true }, (client, query) => client.demandMarket(query)));
35
- addCommonDemandOptions(td
35
+ .option('--traveler-type <type>', 'Solo|Couple|Group|Family')))).action(demandAction({ requireDestination: true, allowTravelerType: true, allowLevel: true, originCountry: true }, (client, query) => client.demandMarket(query)));
36
+ addOriginOption(addCommonDemandOptions(td
36
37
  .command('audience')
37
38
  .summary('Traveler-type mix for a destination')
38
39
  .description('Traveler-type composition (Solo/Couple/Family/Group) of demand for a destination. ' +
39
40
  '--destination is required. (traveler_type is not a filter here — it is the dimension.)')
40
- .option('--destination <level:code>', 'destination, e.g. Country:JP (required)')).action(demandAction({ requireDestination: true }, (client, query) => client.demandAudience(query)));
41
- registerEvolutionCommands(td);
41
+ .option('--destination <level:code>', 'destination, e.g. Country:JP (required)'))).action(demandAction({ requireDestination: true }, (client, query) => client.demandAudience(query)));
42
+ registerTrendCommands(td);
42
43
  }
43
44
  /**
44
- * The four EVOLUTION (daily time-series) commands (JIN-1471). A series is always
45
- * a series, so there is no --analysis / --snapshot-window-days here; the window is
46
- * --trend-window-days (2-45, default 7) and --granularity buckets it.
45
+ * The four TREND (time-series) commands (JIN-1471, renamed from "evolution" by
46
+ * JIN-1529). A series is always a series, so there is no --analysis /
47
+ * --snapshot-window-days here; the window is --trend-window (per-granularity:
48
+ * day 2-60 | week 2-52 | month 2-12, default 12) and --granularity (week
49
+ * default) buckets it.
47
50
  */
48
- function registerEvolutionCommands(td) {
51
+ function registerTrendCommands(td) {
49
52
  // Deep dive over explicit pairs. --origin / --destination are repeatable and
50
53
  // comma-splittable; v1 requires one side to be a single location.
51
- addCommonEvolutionOptions(td
52
- .command('evolution')
53
- .summary('Daily demand time series for explicit origin/destination pairs')
54
- .description('Deep dive: one daily de-sampled search-volume series per (origin, destination) pair. ' +
54
+ addCommonTrendOptions(td
55
+ .command('trend')
56
+ .summary('Demand time series for explicit origin/destination pairs')
57
+ .description('Deep dive: one de-sampled search-volume series per (origin, destination) pair. ' +
55
58
  '--origin and --destination are repeatable (or comma-separated); v1 allows a list on ' +
56
59
  'only one side (keep the other a single location).')
57
60
  .option('--origin <level:code>', 'origin selector, e.g. Country:US (repeatable)', collectLocations, [])
58
61
  .option('--destination <level:code>', 'destination selector, e.g. Country:FR (repeatable)', collectLocations, [])
59
- .option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(evolutionAction(buildPairsEvolutionQuery, (client, query) => client.demandEvolution(query)));
60
- addRankedEvolutionOptions(td
61
- .command('destination-evolution')
62
- .summary('Daily demand time series for the top-N destinations')
63
- .description('Ranks destinations (optionally reachable from --origin-market) by within-window growth, ' +
64
- 'then returns each top-N destination’s daily series.')
65
- .option('--destination <level:code>', 'optional destination filter, e.g. Country:TH')
66
- .option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(evolutionAction((opts) => buildRankedEvolutionQuery(opts, { allowTravelerType: true }), (client, query) => client.demandDestinationEvolution(query)));
67
- addRankedEvolutionOptions(td
68
- .command('market-evolution')
69
- .summary('Daily demand time series for the top-N source markets')
62
+ .option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(trendAction(buildPairsTrendQuery, (client, query) => client.demandTrend(query)));
63
+ addDestinationCountryOption(addOriginOption(addLevelOption(addRankedTrendOptions(td
64
+ .command('destination-trend')
65
+ .summary('Demand time series for the top-N destinations')
66
+ .description('Ranks destinations (optionally reachable from --origin) by within-window growth, ' +
67
+ 'then returns each top-N destination’s series. Optional --destination-country (a Country ' +
68
+ "selector, allowed only with --level city) narrows the ranking to that country's " +
69
+ 'destination cities.')
70
+ .option('--traveler-type <type>', 'Solo|Couple|Group|Family'))))).action(trendAction((opts) => buildRankedTrendQuery(opts, {
71
+ allowTravelerType: true,
72
+ allowLevel: true,
73
+ destinationCountry: true,
74
+ }), (client, query) => client.demandDestinationTrend(query)));
75
+ addOriginCountryOption(addLevelOption(addRankedTrendOptions(td
76
+ .command('market-trend')
77
+ .summary('Demand time series for the top-N source markets')
70
78
  .description('Ranks source markets for a destination by within-window growth, then returns each ' +
71
- 'top-N market’s daily series. --destination is required.')
79
+ 'top-N market’s series. --destination is required. Optional --origin-country (a ' +
80
+ "Country selector, allowed only with --level city) narrows the ranking to that " +
81
+ "country's origin cities.")
72
82
  .option('--destination <level:code>', 'destination, e.g. Country:TH (required)')
73
- .option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(evolutionAction((opts) => buildRankedEvolutionQuery(opts, { requireDestination: true, allowTravelerType: true }), (client, query) => client.demandMarketEvolution(query)));
74
- addRankedEvolutionOptions(td
75
- .command('audience-evolution')
76
- .summary('Daily demand time series for the traveler-type mix')
77
- .description('A daily series per traveler-type segment (Solo/Couple/Family/Group) of demand for a ' +
83
+ .option('--traveler-type <type>', 'Solo|Couple|Group|Family')))).action(trendAction((opts) => buildRankedTrendQuery(opts, {
84
+ requireDestination: true,
85
+ allowTravelerType: true,
86
+ allowLevel: true,
87
+ originCountry: true,
88
+ }), (client, query) => client.demandMarketTrend(query)));
89
+ addOriginOption(addRankedTrendOptions(td
90
+ .command('audience-trend')
91
+ .summary('Demand time series for the traveler-type mix')
92
+ .description('A series per traveler-type segment (Solo/Couple/Family/Group) of demand for a ' +
78
93
  'destination. --destination is required. (traveler_type is not a filter here — it is the dimension.)')
79
- .option('--destination <level:code>', 'destination, e.g. Country:JP (required)')).action(evolutionAction((opts) => buildRankedEvolutionQuery(opts, { requireDestination: true }), (client, query) => client.demandAudienceEvolution(query)));
94
+ .option('--destination <level:code>', 'destination, e.g. Country:JP (required)'))).action(trendAction((opts) => buildRankedTrendQuery(opts, { requireDestination: true }), (client, query) => client.demandAudienceTrend(query)));
80
95
  }
81
96
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/travel-demand/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/travel-demand/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Shared option registration + request building for the four travel-demand
3
+ * TREND (time-series) commands (JIN-1471, renamed from "evolution" by JIN-1529):
4
+ *
5
+ * trend — deep dive over explicit origin×destination pairs
6
+ * destination-trend — top-N destinations, one series each
7
+ * market-trend — top-N source markets (destination required)
8
+ * audience-trend — per traveler-type segment (destination required)
9
+ *
10
+ * Trend shares the demand filter vocabulary but drops `analysis` (a series is
11
+ * always a series — never snapshot/trend) and `snapshot_window_days`. The single
12
+ * window is `trend_window`, counted in the chosen granularity's own unit
13
+ * (day 2-60, week 2-52, month 2-12; default 12); the series spans the last N
14
+ * complete buckets, excluding the in-progress one. Granularity defaults to week.
15
+ * The reusable validators live in ./demand-shared.ts to avoid duplicating the
16
+ * rules.
17
+ */
18
+ import type { Command } from 'commander';
19
+ import { type DemandTrendQuery, type JinkoClient } from '@gojinko/api-client';
20
+ /** Raw option bag as parsed by Commander (camelCased flags). */
21
+ export interface TrendCliOpts {
22
+ origin?: string | string[];
23
+ destination?: string | string[];
24
+ /** market-trend only: a Country selector, allowed only with --level city. */
25
+ originCountry?: string;
26
+ /** destination-trend only: a Country selector, allowed only with --level city. */
27
+ destinationCountry?: string;
28
+ level?: string;
29
+ limit?: string;
30
+ departureDateFrom?: string;
31
+ departureDateTo?: string;
32
+ travelerType?: string;
33
+ tripType?: string;
34
+ tripDurationMin?: string;
35
+ tripDurationMax?: string;
36
+ searchWindowMin?: string;
37
+ searchWindowMax?: string;
38
+ trendWindow?: string;
39
+ granularity?: string;
40
+ }
41
+ export interface TrendBuildOpts {
42
+ /** Ranked commands where --destination must be supplied (market / audience). */
43
+ requireDestination?: boolean;
44
+ /** Whether --traveler-type is a valid filter (false for the audience endpoint, which buckets by it). */
45
+ allowTravelerType?: boolean;
46
+ /** Whether --level (ranked-output granularity) is valid (destination/market trend, not audience). */
47
+ allowLevel?: boolean;
48
+ /**
49
+ * market-trend takes `--origin-country` (a Country selector, allowed only with
50
+ * `--level city`) in place of `--origin`. When set, the builder
51
+ * reads/validates `--origin-country` and emits `origin_country`.
52
+ */
53
+ originCountry?: boolean;
54
+ /**
55
+ * destination-trend takes `--destination-country` (a Country selector, allowed
56
+ * only with `--level city`) in place of the plain `--destination` narrowing
57
+ * filter. When set, the builder reads/validates `--destination-country` and
58
+ * emits `destination_country`.
59
+ */
60
+ destinationCountry?: boolean;
61
+ }
62
+ /**
63
+ * Commander collector for the repeatable, comma-splittable `--origin` /
64
+ * `--destination` flags on the pairs command: `--origin A --origin B` and
65
+ * `--origin A,B` both accumulate into the same array.
66
+ */
67
+ export declare function collectLocations(value: string, previous?: string[]): string[];
68
+ /**
69
+ * Build the query for the `trend` deep-dive (explicit pairs). v1 requires at
70
+ * least one origin and one destination, caps each list, and allows a list on only
71
+ * one side (the other must be a single location). The wire forwards
72
+ * comma-separated strings — the BFF splits them.
73
+ */
74
+ export declare function buildPairsTrendQuery(opts: TrendCliOpts): DemandTrendQuery;
75
+ /** Build the query for a ranked trend command (destination / market / audience). */
76
+ export declare function buildRankedTrendQuery(opts: TrendCliOpts, build: TrendBuildOpts): DemandTrendQuery;
77
+ /**
78
+ * Build a Commander action for a trend command. Same ordering contract as
79
+ * the snapshot ranking commands: validate input FIRST (UsageError -> exit 3), THEN
80
+ * construct the client (AuthError -> exit 2), THEN call the API.
81
+ */
82
+ export declare function trendAction(buildQuery: (opts: TrendCliOpts) => DemandTrendQuery, call: (client: JinkoClient, query: DemandTrendQuery) => Promise<unknown>): (this: Command, ...args: unknown[]) => Promise<void>;
83
+ /** Register the filter options shared by all four trend commands. */
84
+ export declare function addCommonTrendOptions(cmd: Command): Command;
85
+ /**
86
+ * Register the options common to the three RANKED trend commands (top-N limit).
87
+ * The origin option is per-command: destination/audience trend take
88
+ * `--origin`, market-trend takes `--origin-country` (added in index.ts).
89
+ */
90
+ export declare function addRankedTrendOptions(cmd: Command): Command;
91
+ //# sourceMappingURL=trend-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trend-shared.d.ts","sourceRoot":"","sources":["../../../src/commands/travel-demand/trend-shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAgC7B,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAG3B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE3B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wGAAwG;IACxG,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qGAAqG;IACrG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAOjF;AAwED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAoCzE;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,cAAc,GACpB,gBAAgB,CAyClB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,gBAAgB,EACpD,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,IAEjD,MAAM,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CAiBzE;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CA8B3D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAK3D"}
@@ -1,8 +1,17 @@
1
1
  import { createJinkoClient, } from '@gojinko/api-client';
2
2
  import { getGlobalOptions } from '../../config/config.js';
3
- import { exitWithError, output, UsageError } from '../shared.js';
4
- import { checkDate, checkEnum, checkLocation, checkNonNegInt, checkRangeInt, TRAVEL_PERIODS, TRAVELER_TYPES, TRIP_TYPES, } from './demand-shared.js';
3
+ import { exitWithError, output, resolveCommandPath, UsageError } from '../shared.js';
4
+ import { checkDepartureWindow, checkDestinationCountry, checkEnum, checkLocation, checkNonNegInt, checkOriginCountry, checkRangeInt, LEVEL_VALUES, TRAVELER_TYPES, TRIP_TYPES, } from './demand-shared.js';
5
5
  const GRANULARITIES = ['day', 'week', 'month'];
6
+ /** Default series bucket size when --granularity is omitted (mirrors trend.go). */
7
+ const DEFAULT_GRANULARITY = 'week';
8
+ /**
9
+ * Per-granularity maximum for --trend-window, in that granularity's own unit
10
+ * (minimum 2). Mirrors trend.go maxTrendWindow(): day <= 60, week <= 52,
11
+ * month <= 12 — a static numeric cap cannot express this, so the window is
12
+ * range-checked AFTER the granularity is resolved.
13
+ */
14
+ const MAX_TREND_WINDOW = { day: 60, week: 52, month: 12 };
6
15
  /** v1 caps the pairs deep-dive to a handful of locations per side to avoid an explosion of series. */
7
16
  const MAX_PAIR_LOCATIONS = 10;
8
17
  /**
@@ -16,7 +25,7 @@ export function collectLocations(value, previous = []) {
16
25
  .map((s) => s.trim())
17
26
  .filter((s) => s.length > 0));
18
27
  }
19
- function checkEvolutionLimit(value) {
28
+ function checkTrendLimit(value) {
20
29
  if (value === undefined)
21
30
  return undefined;
22
31
  const n = Number(value);
@@ -25,22 +34,9 @@ function checkEvolutionLimit(value) {
25
34
  }
26
35
  return n;
27
36
  }
28
- /** Validate the filters shared by all four evolution commands and build the common query slice. */
29
- function buildCommonEvolution(opts, build) {
30
- const travelPeriod = checkEnum(opts.travelPeriod, TRAVEL_PERIODS, '--travel-period');
31
- const from = checkDate(opts.departureDateFrom, '--departure-date-from');
32
- const to = checkDate(opts.departureDateTo, '--departure-date-to');
33
- if (travelPeriod === 'Custom') {
34
- if (!from || !to) {
35
- throw new UsageError('--travel-period Custom requires both --departure-date-from and --departure-date-to');
36
- }
37
- if (to < from) {
38
- throw new UsageError('--departure-date-to must be on or after --departure-date-from');
39
- }
40
- }
41
- else if (from || to) {
42
- throw new UsageError('--departure-date-from/--departure-date-to are only valid with --travel-period Custom');
43
- }
37
+ /** Validate the filters shared by all four trend commands and build the common query slice. */
38
+ function buildCommonTrend(opts, build) {
39
+ const { from, to } = checkDepartureWindow(opts.departureDateFrom, opts.departureDateTo);
44
40
  const travelerType = build.allowTravelerType
45
41
  ? checkEnum(opts.travelerType, TRAVELER_TYPES, '--traveler-type')
46
42
  : undefined;
@@ -59,15 +55,16 @@ function buildCommonEvolution(opts, build) {
59
55
  searchWindowMax < searchWindowMin) {
60
56
  throw new UsageError('--search-window-max must be >= --search-window-min');
61
57
  }
62
- // The evolution window reuses the wire field `trend_window_days` (2-45). Here it
63
- // is not tied to an analysis mode — it is simply the span of the series, which
64
- // ends yesterday (the current, incomplete day is excluded). A single day is not
65
- // a series, so 1 is rejected for its own reason, not the snapshot/trend one.
66
- const trendWindowDays = checkRangeInt(opts.trendWindowDays, '--trend-window-days', 2, 45, 'an evolution series needs at least 2 days');
67
- const granularity = checkEnum(opts.granularity, GRANULARITIES, '--granularity');
58
+ // Granularity is resolved FIRST (default week) because the --trend-window cap
59
+ // is per-granularity (mirrors trend.go, which validates granularity before the
60
+ // window range check).
61
+ const granularity = checkEnum(opts.granularity, GRANULARITIES, '--granularity') ?? DEFAULT_GRANULARITY;
62
+ // --trend-window is the number of buckets N in the chosen granularity's own
63
+ // unit. It ends on the last COMPLETE bucket (the in-progress one is excluded),
64
+ // so a single bucket is not a series — 2 is the minimum, and the maximum
65
+ // depends on the granularity (day 60, week 52, month 12).
66
+ const trendWindow = checkRangeInt(opts.trendWindow, '--trend-window', 2, MAX_TREND_WINDOW[granularity], 'a trend series needs at least 2 buckets');
68
67
  const query = {};
69
- if (travelPeriod)
70
- query.travel_period = travelPeriod;
71
68
  if (from)
72
69
  query.departure_date_from = from;
73
70
  if (to)
@@ -84,20 +81,19 @@ function buildCommonEvolution(opts, build) {
84
81
  query.search_window_min = searchWindowMin;
85
82
  if (searchWindowMax !== undefined)
86
83
  query.search_window_max = searchWindowMax;
87
- if (trendWindowDays !== undefined)
88
- query.trend_window_days = trendWindowDays;
89
- if (granularity)
90
- query.granularity = granularity;
84
+ if (trendWindow !== undefined)
85
+ query.trend_window = trendWindow;
86
+ query.granularity = granularity;
91
87
  return query;
92
88
  }
93
89
  /**
94
- * Build the query for the `evolution` deep-dive (explicit pairs). v1 requires at
90
+ * Build the query for the `trend` deep-dive (explicit pairs). v1 requires at
95
91
  * least one origin and one destination, caps each list, and allows a list on only
96
92
  * one side (the other must be a single location). The wire forwards
97
93
  * comma-separated strings — the BFF splits them.
98
94
  */
99
- export function buildPairsEvolutionQuery(opts) {
100
- const query = buildCommonEvolution(opts, { allowTravelerType: true });
95
+ export function buildPairsTrendQuery(opts) {
96
+ const query = buildCommonTrend(opts, { allowTravelerType: true });
101
97
  const origins = Array.isArray(opts.origin) ? opts.origin : opts.origin ? [opts.origin] : [];
102
98
  const destinations = Array.isArray(opts.destination)
103
99
  ? opts.destination
@@ -125,29 +121,53 @@ export function buildPairsEvolutionQuery(opts) {
125
121
  query.destinations = destinations.join(',');
126
122
  return query;
127
123
  }
128
- /** Build the query for a ranked evolution command (destination / market / audience). */
129
- export function buildRankedEvolutionQuery(opts, build) {
130
- const query = buildCommonEvolution(opts, build);
131
- const destination = checkLocation(Array.isArray(opts.destination) ? opts.destination[0] : opts.destination, '--destination');
124
+ /** Build the query for a ranked trend command (destination / market / audience). */
125
+ export function buildRankedTrendQuery(opts, build) {
126
+ const query = buildCommonTrend(opts, build);
127
+ const level = build.allowLevel
128
+ ? checkEnum(opts.level, LEVEL_VALUES, '--level')
129
+ : undefined;
130
+ // destination-trend takes --destination-country (Country-only, --level city
131
+ // only) in place of the plain --destination narrowing filter; market/audience
132
+ // trend take the required/optional --destination. Mutually exclusive per command.
133
+ const destinationCountry = build.destinationCountry
134
+ ? checkDestinationCountry(opts.destinationCountry, level)
135
+ : undefined;
136
+ const destination = build.destinationCountry
137
+ ? undefined
138
+ : checkLocation(Array.isArray(opts.destination) ? opts.destination[0] : opts.destination, '--destination');
132
139
  if (build.requireDestination && !destination) {
133
140
  throw new UsageError('--destination is required for this command (e.g. --destination Country:TH)');
134
141
  }
135
- const originMarket = checkLocation(opts.originMarket, '--origin-market');
136
- const limit = checkEvolutionLimit(opts.limit);
142
+ // market-trend takes --origin-country (Country-only, --level city only); the
143
+ // other ranked trends take --origin. Mutually exclusive per command.
144
+ const originCountry = build.originCountry
145
+ ? checkOriginCountry(opts.originCountry, level)
146
+ : undefined;
147
+ const origin = build.originCountry
148
+ ? undefined
149
+ : checkLocation(Array.isArray(opts.origin) ? opts.origin[0] : opts.origin, '--origin');
150
+ const limit = checkTrendLimit(opts.limit);
137
151
  if (destination)
138
152
  query.destination = destination;
139
- if (originMarket)
140
- query.origin_market = originMarket;
153
+ if (destinationCountry)
154
+ query.destination_country = destinationCountry;
155
+ if (origin)
156
+ query.origin = origin;
157
+ if (originCountry)
158
+ query.origin_country = originCountry;
159
+ if (level)
160
+ query.level = level;
141
161
  if (limit !== undefined)
142
162
  query.limit = limit;
143
163
  return query;
144
164
  }
145
165
  /**
146
- * Build a Commander action for an evolution command. Same ordering contract as
147
- * the snapshot/trend commands: validate input FIRST (UsageError -> exit 3), THEN
166
+ * Build a Commander action for a trend command. Same ordering contract as
167
+ * the snapshot ranking commands: validate input FIRST (UsageError -> exit 3), THEN
148
168
  * construct the client (AuthError -> exit 2), THEN call the API.
149
169
  */
150
- export function evolutionAction(buildQuery, call) {
170
+ export function trendAction(buildQuery, call) {
151
171
  return async function (...args) {
152
172
  const command = args[args.length - 1];
153
173
  const opts = args[args.length - 2] ?? {};
@@ -157,6 +177,8 @@ export function evolutionAction(buildQuery, call) {
157
177
  const client = await createJinkoClient({
158
178
  apiKey: globals.apiKey,
159
179
  environment: globals.environment,
180
+ originSource: 'cli',
181
+ originAction: resolveCommandPath(command),
160
182
  });
161
183
  output(await call(client, query), { format: globals.format });
162
184
  }
@@ -165,24 +187,25 @@ export function evolutionAction(buildQuery, call) {
165
187
  }
166
188
  };
167
189
  }
168
- /** Register the filter options shared by all four evolution commands. */
169
- export function addCommonEvolutionOptions(cmd) {
190
+ /** Register the filter options shared by all four trend commands. */
191
+ export function addCommonTrendOptions(cmd) {
170
192
  return cmd
171
- .option('--travel-period <period>', 'Summer|Winter|Christmas|Easter|Next30Days|Next90Days|Custom (default Next90Days)')
172
- .option('--departure-date-from <YYYY-MM-DD>', 'start of departure window (requires --travel-period Custom)')
173
- .option('--departure-date-to <YYYY-MM-DD>', 'end of departure window (requires --travel-period Custom)')
193
+ .option('--departure-date-from <YYYY-MM-DD>', 'start of departure window (use with --departure-date-to; omit both for no departure-date filter — buckets count searches for all departure dates, recommended)')
194
+ .option('--departure-date-to <YYYY-MM-DD>', 'end of departure window (use with --departure-date-from; omit both for no departure-date filter)')
174
195
  .option('--trip-type <type>', 'One-Way|Round-Trip')
175
196
  .option('--trip-duration-min <n>', 'minimum trip length in nights (round-trips only, >= 0)')
176
197
  .option('--trip-duration-max <n>', 'maximum trip length in nights (>= --trip-duration-min)')
177
198
  .option('--search-window-min <n>', 'minimum advance-purchase window in days before departure (>= 0)')
178
199
  .option('--search-window-max <n>', 'maximum advance-purchase window in days (>= --search-window-min)')
179
- .option('--trend-window-days <n>', 'evolution window: number of days the series spans, ending yesterday (2-45, default 7)')
180
- .option('--granularity <bucket>', 'series bucket size: day (default) | week | month');
200
+ .option('--trend-window <n>', 'number of buckets the series spans, in the granularity unit (day 2-60 | week 2-52 | month 2-12, default 12)')
201
+ .option('--granularity <bucket>', 'series bucket size: week (default) | day | month', DEFAULT_GRANULARITY);
181
202
  }
182
- /** Register the options common to the three RANKED evolution commands (origin-market + top-N limit). */
183
- export function addRankedEvolutionOptions(cmd) {
184
- return addCommonEvolutionOptions(cmd)
185
- .option('--origin-market <level:code>', 'origin market filter/scope, e.g. Country:US or City:NYC')
186
- .option('--limit <n>', 'max number of series (top-N), 1-50 (default 10)');
203
+ /**
204
+ * Register the options common to the three RANKED trend commands (top-N limit).
205
+ * The origin option is per-command: destination/audience trend take
206
+ * `--origin`, market-trend takes `--origin-country` (added in index.ts).
207
+ */
208
+ export function addRankedTrendOptions(cmd) {
209
+ return addCommonTrendOptions(cmd).option('--limit <n>', 'max number of series (top-N), 1-50 (default 10)');
187
210
  }
188
- //# sourceMappingURL=evolution-shared.js.map
211
+ //# sourceMappingURL=trend-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trend-shared.js","sourceRoot":"","sources":["../../../src/commands/travel-demand/trend-shared.ts"],"names":[],"mappings":"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"}
@@ -23,9 +23,9 @@ function outputTable(data) {
23
23
  const entries = Object.entries(data);
24
24
  const arrayEntry = entries.find(([, v]) => Array.isArray(v));
25
25
  if (arrayEntry) {
26
- // Object wrapping a list (e.g. { analysis_type, rows }): show the scalar
27
- // fields, then tabulate the rows — instead of collapsing the array into a
28
- // single key/value cell. Used by the travel-demand responses.
26
+ // Object wrapping a list (e.g. { granularity, from, to, series }): show the
27
+ // scalar fields, then tabulate the rows — instead of collapsing the array
28
+ // into a single key/value cell. Used by the travel-demand responses.
29
29
  const scalars = entries.filter(([, v]) => !Array.isArray(v) && (v === null || typeof v !== 'object'));
30
30
  for (const [key, value] of scalars) {
31
31
  console.log(`${chalk.bold(key)}: ${formatCell(value)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,IAAa,EAAE,OAAsB;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,UAAU,EAAE,CAAC;YACf,4EAA4E;YAC5E,0EAA0E;YAC1E,qEAAqE;YACrE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CACtE,CAAC;YACF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAc,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,6DAA6D;AAC7D,SAAS,SAAS,CAAC,IAAe;IAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACpD,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IACD,uCAAuC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAA4B,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,GAA8B,CAAC;QAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,OAAiB,EAAE,IAAgB;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAClE,CAAC;IAEF,SAAS;IACT,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEzD,OAAO;IACP,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAA2D,EAAE,OAAsB;IAC7G,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gojinko/cli",
3
- "version": "2.20.0",
3
+ "version": "2.22.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "jinko": "./dist/bin/jinko.js"
@@ -17,7 +17,7 @@
17
17
  "docs:gen": "tsx scripts/gen-cli-docs.ts"
18
18
  },
19
19
  "dependencies": {
20
- "@gojinko/api-client": "2.20.0",
20
+ "@gojinko/api-client": "2.22.0",
21
21
  "commander": "^12.1.0",
22
22
  "chalk": "^5.4.1",
23
23
  "open": "^10.0.0"
@@ -1,67 +0,0 @@
1
- /**
2
- * Shared option registration + request building for the four travel-demand
3
- * EVOLUTION (daily time-series) commands (JIN-1471):
4
- *
5
- * evolution — deep dive over explicit origin×destination pairs
6
- * destination-evolution — top-N destinations, one series each
7
- * market-evolution — top-N source markets (destination required)
8
- * audience-evolution — per traveler-type segment (destination required)
9
- *
10
- * Evolution shares the demand filter vocabulary but drops `analysis` (a series is
11
- * always a series — never snapshot/trend) and `snapshot_window_days`. The single
12
- * window is `trend_window_days` (2-45, default 7); the series spans the last N
13
- * complete days ending yesterday. The reusable validators live in
14
- * ./demand-shared.ts to avoid duplicating the rules.
15
- */
16
- import type { Command } from 'commander';
17
- import { type DemandEvolutionQuery, type JinkoClient } from '@gojinko/api-client';
18
- /** Raw option bag as parsed by Commander (camelCased flags). */
19
- export interface EvolutionCliOpts {
20
- origin?: string[];
21
- destination?: string | string[];
22
- originMarket?: string;
23
- limit?: string;
24
- travelPeriod?: string;
25
- departureDateFrom?: string;
26
- departureDateTo?: string;
27
- travelerType?: string;
28
- tripType?: string;
29
- tripDurationMin?: string;
30
- tripDurationMax?: string;
31
- searchWindowMin?: string;
32
- searchWindowMax?: string;
33
- trendWindowDays?: string;
34
- granularity?: string;
35
- }
36
- export interface EvolutionBuildOpts {
37
- /** Ranked commands where --destination must be supplied (market / audience). */
38
- requireDestination?: boolean;
39
- /** Whether --traveler-type is a valid filter (false for the audience endpoint, which buckets by it). */
40
- allowTravelerType?: boolean;
41
- }
42
- /**
43
- * Commander collector for the repeatable, comma-splittable `--origin` /
44
- * `--destination` flags on the pairs command: `--origin A --origin B` and
45
- * `--origin A,B` both accumulate into the same array.
46
- */
47
- export declare function collectLocations(value: string, previous?: string[]): string[];
48
- /**
49
- * Build the query for the `evolution` deep-dive (explicit pairs). v1 requires at
50
- * least one origin and one destination, caps each list, and allows a list on only
51
- * one side (the other must be a single location). The wire forwards
52
- * comma-separated strings — the BFF splits them.
53
- */
54
- export declare function buildPairsEvolutionQuery(opts: EvolutionCliOpts): DemandEvolutionQuery;
55
- /** Build the query for a ranked evolution command (destination / market / audience). */
56
- export declare function buildRankedEvolutionQuery(opts: EvolutionCliOpts, build: EvolutionBuildOpts): DemandEvolutionQuery;
57
- /**
58
- * Build a Commander action for an evolution command. Same ordering contract as
59
- * the snapshot/trend commands: validate input FIRST (UsageError -> exit 3), THEN
60
- * construct the client (AuthError -> exit 2), THEN call the API.
61
- */
62
- export declare function evolutionAction(buildQuery: (opts: EvolutionCliOpts) => DemandEvolutionQuery, call: (client: JinkoClient, query: DemandEvolutionQuery) => Promise<unknown>): (this: Command, ...args: unknown[]) => Promise<void>;
63
- /** Register the filter options shared by all four evolution commands. */
64
- export declare function addCommonEvolutionOptions(cmd: Command): Command;
65
- /** Register the options common to the three RANKED evolution commands (origin-market + top-N limit). */
66
- export declare function addRankedEvolutionOptions(cmd: Command): Command;
67
- //# sourceMappingURL=evolution-shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evolution-shared.d.ts","sourceRoot":"","sources":["../../../src/commands/travel-demand/evolution-shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAmB7B,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAE/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEhC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wGAAwG;IACxG,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAOjF;AAqFD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,CAoCrF;AAED,wFAAwF;AACxF,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,kBAAkB,GACxB,oBAAoB,CAiBtB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,oBAAoB,EAC5D,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,IAErD,MAAM,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CAezE;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAwB/D;AAED,wGAAwG;AACxG,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAI/D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"evolution-shared.js","sourceRoot":"","sources":["../../../src/commands/travel-demand/evolution-shared.ts"],"names":[],"mappings":"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"}