@gojinko/cli 2.20.0 → 2.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/shared.d.ts +12 -0
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +26 -0
- package/dist/commands/shared.js.map +1 -1
- package/dist/commands/travel-demand/demand-shared.d.ts +12 -3
- package/dist/commands/travel-demand/demand-shared.d.ts.map +1 -1
- package/dist/commands/travel-demand/demand-shared.js +26 -21
- package/dist/commands/travel-demand/demand-shared.js.map +1 -1
- package/dist/commands/travel-demand/index.d.ts +6 -6
- package/dist/commands/travel-demand/index.d.ts.map +1 -1
- package/dist/commands/travel-demand/index.js +45 -40
- package/dist/commands/travel-demand/index.js.map +1 -1
- package/dist/commands/travel-demand/trend-shared.d.ts +72 -0
- package/dist/commands/travel-demand/trend-shared.d.ts.map +1 -0
- package/dist/commands/travel-demand/{evolution-shared.js → trend-shared.js} +51 -33
- package/dist/commands/travel-demand/trend-shared.js.map +1 -0
- package/dist/output/formatter.js +3 -3
- package/dist/output/formatter.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/travel-demand/evolution-shared.d.ts +0 -67
- package/dist/commands/travel-demand/evolution-shared.d.ts.map +0 -1
- package/dist/commands/travel-demand/evolution-shared.js.map +0 -1
|
@@ -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,
|
|
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"}
|
package/dist/commands/shared.js
CHANGED
|
@@ -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":"AACA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAoB,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAG/B,iEAAiE;AACjE,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAS;IACtB,YAAY,OAAe,EAAE,IAAI,GAAG,eAAe;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,OAAsB;IAChE,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;QAC9B,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;QAC7B,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAwB,EACxB,UAAyB,EACzB,OAAe,EACf,OAAe;IAEf,IAAI,UAAU,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,uBAAuB,OAAO,KAAK,CAAC,CAAC;QACxF,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CACxB,OAMkB;IAElB,8DAA8D;IAC9D,OAAO,KAAK,WAA0B,GAAG,IAAW;QAClD,uEAAuE;QACvE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAY,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAA4B,CAAC;QACjE,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;gBACrC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,17 @@
|
|
|
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';
|
|
3
|
+
import { type DemandQuery, type JinkoClient, type Level, type TravelPeriod, type TravelerType, type TripType } from '@gojinko/api-client';
|
|
4
4
|
export declare const TRAVEL_PERIODS: readonly TravelPeriod[];
|
|
5
5
|
export declare const TRAVELER_TYPES: readonly TravelerType[];
|
|
6
6
|
export declare const TRIP_TYPES: readonly TripType[];
|
|
7
7
|
export declare const LEVELS: string[];
|
|
8
|
+
/** Values accepted by --level (ranked-output granularity); lowercase, matching the API. */
|
|
9
|
+
export declare const LEVEL_VALUES: readonly Level[];
|
|
8
10
|
/** Raw option bag as parsed by Commander (camelCased flags). */
|
|
9
11
|
export interface DemandCliOpts {
|
|
10
|
-
analysis?: string;
|
|
11
12
|
originMarket?: string;
|
|
12
13
|
destination?: string;
|
|
14
|
+
level?: string;
|
|
13
15
|
travelPeriod?: string;
|
|
14
16
|
departureDateFrom?: string;
|
|
15
17
|
departureDateTo?: string;
|
|
@@ -20,12 +22,13 @@ export interface DemandCliOpts {
|
|
|
20
22
|
searchWindowMin?: string;
|
|
21
23
|
searchWindowMax?: string;
|
|
22
24
|
snapshotWindowDays?: string;
|
|
23
|
-
trendWindowDays?: string;
|
|
24
25
|
limit?: string;
|
|
25
26
|
}
|
|
26
27
|
export interface BuildOpts {
|
|
27
28
|
requireDestination?: boolean;
|
|
28
29
|
allowTravelerType?: boolean;
|
|
30
|
+
/** Whether --level (ranked-output granularity) is a valid option (destination/market, not audience). */
|
|
31
|
+
allowLevel?: boolean;
|
|
29
32
|
}
|
|
30
33
|
export declare function checkEnum<T extends string>(value: string | undefined, allowed: readonly T[], flag: string): T | undefined;
|
|
31
34
|
export declare function checkLocation(value: string | undefined, flag: string): string | undefined;
|
|
@@ -41,6 +44,12 @@ export declare function buildDemandQuery(opts: DemandCliOpts, build?: BuildOpts)
|
|
|
41
44
|
* commands don't use the generic withClient wrapper, which creates the client first.)
|
|
42
45
|
*/
|
|
43
46
|
export declare function demandAction(build: BuildOpts, call: (client: JinkoClient, query: DemandQuery) => Promise<unknown>): (this: Command, ...args: unknown[]) => Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Register the `--level` (ranked-output granularity) option. Only the destination
|
|
49
|
+
* and market rankings (and their trend variants) accept it — not audience,
|
|
50
|
+
* which buckets by traveler type, nor the explicit-pairs trend command.
|
|
51
|
+
*/
|
|
52
|
+
export declare function addLevelOption(cmd: Command): Command;
|
|
44
53
|
/** Register the query options shared by all three demand commands. */
|
|
45
54
|
export declare function addCommonDemandOptions(cmd: Command): Command;
|
|
46
55
|
//# 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,
|
|
1
|
+
{"version":3,"file":"demand-shared.d.ts","sourceRoot":"","sources":["../../../src/commands/travel-demand/demand-shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
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'];
|
|
3
|
+
import { exitWithError, output, resolveCommandPath, UsageError } from '../shared.js';
|
|
5
4
|
export const TRAVEL_PERIODS = [
|
|
6
5
|
'Summer',
|
|
7
6
|
'Winter',
|
|
@@ -14,6 +13,8 @@ export const TRAVEL_PERIODS = [
|
|
|
14
13
|
export const TRAVELER_TYPES = ['Solo', 'Couple', 'Group', 'Family'];
|
|
15
14
|
export const TRIP_TYPES = ['One-Way', 'Round-Trip'];
|
|
16
15
|
export const LEVELS = ['City', 'Country'];
|
|
16
|
+
/** Values accepted by --level (ranked-output granularity); lowercase, matching the API. */
|
|
17
|
+
export const LEVEL_VALUES = ['country', 'city'];
|
|
17
18
|
const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
18
19
|
export function checkEnum(value, allowed, flag) {
|
|
19
20
|
if (value === undefined)
|
|
@@ -67,9 +68,10 @@ export function checkNonNegInt(value, flag) {
|
|
|
67
68
|
return n;
|
|
68
69
|
}
|
|
69
70
|
export function checkRangeInt(value, flag, min, max,
|
|
70
|
-
// Why "1" specifically is rejected. The snapshot
|
|
71
|
-
//
|
|
72
|
-
// so
|
|
71
|
+
// Why "1" specifically is rejected. The snapshot window includes the current
|
|
72
|
+
// (incomplete) day, hence the default reason; a trend series window ends on the
|
|
73
|
+
// last COMPLETE bucket, so the trend builder passes its own reason. `1` looks
|
|
74
|
+
// like a reasonable input either way.
|
|
73
75
|
oneDayReason = 'a 1-day window relies on the current day, whose search data is not yet complete') {
|
|
74
76
|
if (value === undefined)
|
|
75
77
|
return undefined;
|
|
@@ -82,7 +84,6 @@ oneDayReason = 'a 1-day window relies on the current day, whose search data is n
|
|
|
82
84
|
}
|
|
83
85
|
/** Validate CLI options and build the wire query. Throws UsageError (exit 3) on bad input. */
|
|
84
86
|
export function buildDemandQuery(opts, build = {}) {
|
|
85
|
-
const analysis = checkEnum(opts.analysis, ANALYSIS, '--analysis') ?? 'snapshot';
|
|
86
87
|
const travelPeriod = checkEnum(opts.travelPeriod, TRAVEL_PERIODS, '--travel-period');
|
|
87
88
|
const from = checkDate(opts.departureDateFrom, '--departure-date-from');
|
|
88
89
|
const to = checkDate(opts.departureDateTo, '--departure-date-to');
|
|
@@ -102,6 +103,9 @@ export function buildDemandQuery(opts, build = {}) {
|
|
|
102
103
|
throw new UsageError('--destination is required for this command (e.g. --destination Country:TH)');
|
|
103
104
|
}
|
|
104
105
|
const originMarket = checkLocation(opts.originMarket, '--origin-market');
|
|
106
|
+
const level = build.allowLevel
|
|
107
|
+
? checkEnum(opts.level, LEVEL_VALUES, '--level')
|
|
108
|
+
: undefined;
|
|
105
109
|
const travelerType = build.allowTravelerType
|
|
106
110
|
? checkEnum(opts.travelerType, TRAVELER_TYPES, '--traveler-type')
|
|
107
111
|
: undefined;
|
|
@@ -120,22 +124,17 @@ export function buildDemandQuery(opts, build = {}) {
|
|
|
120
124
|
searchWindowMax < searchWindowMin) {
|
|
121
125
|
throw new UsageError('--search-window-max must be >= --search-window-min');
|
|
122
126
|
}
|
|
123
|
-
//
|
|
124
|
-
//
|
|
127
|
+
// Recent-activity window for the snapshot ranking (2-90). A 1-day window is
|
|
128
|
+
// rejected because the current day's search data is still incomplete.
|
|
125
129
|
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
130
|
const limit = checkLimit(opts.limit);
|
|
134
|
-
const query = {
|
|
131
|
+
const query = {};
|
|
135
132
|
if (originMarket)
|
|
136
133
|
query.origin_market = originMarket;
|
|
137
134
|
if (destination)
|
|
138
135
|
query.destination = destination;
|
|
136
|
+
if (level)
|
|
137
|
+
query.level = level;
|
|
139
138
|
if (travelPeriod)
|
|
140
139
|
query.travel_period = travelPeriod;
|
|
141
140
|
if (from)
|
|
@@ -156,8 +155,6 @@ export function buildDemandQuery(opts, build = {}) {
|
|
|
156
155
|
query.search_window_max = searchWindowMax;
|
|
157
156
|
if (snapshotWindowDays !== undefined)
|
|
158
157
|
query.snapshot_window_days = snapshotWindowDays;
|
|
159
|
-
if (trendWindowDays !== undefined)
|
|
160
|
-
query.trend_window_days = trendWindowDays;
|
|
161
158
|
if (limit !== undefined)
|
|
162
159
|
query.limit = limit;
|
|
163
160
|
return query;
|
|
@@ -178,6 +175,8 @@ export function demandAction(build, call) {
|
|
|
178
175
|
const client = await createJinkoClient({
|
|
179
176
|
apiKey: globals.apiKey,
|
|
180
177
|
environment: globals.environment,
|
|
178
|
+
originSource: 'cli',
|
|
179
|
+
originAction: resolveCommandPath(command),
|
|
181
180
|
});
|
|
182
181
|
output(await call(client, query), { format: globals.format });
|
|
183
182
|
}
|
|
@@ -186,10 +185,17 @@ export function demandAction(build, call) {
|
|
|
186
185
|
}
|
|
187
186
|
};
|
|
188
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Register the `--level` (ranked-output granularity) option. Only the destination
|
|
190
|
+
* and market rankings (and their trend variants) accept it — not audience,
|
|
191
|
+
* which buckets by traveler type, nor the explicit-pairs trend command.
|
|
192
|
+
*/
|
|
193
|
+
export function addLevelOption(cmd) {
|
|
194
|
+
return cmd.option('--level <level>', 'ranked output granularity: country (default) or city', 'country');
|
|
195
|
+
}
|
|
189
196
|
/** Register the query options shared by all three demand commands. */
|
|
190
197
|
export function addCommonDemandOptions(cmd) {
|
|
191
198
|
return cmd
|
|
192
|
-
.option('--analysis <mode>', 'analysis mode: snapshot (default) or trend', 'snapshot')
|
|
193
199
|
.option('--origin-market <level:code>', 'origin market filter, e.g. Country:US or City:NYC')
|
|
194
200
|
.option('--travel-period <period>', 'Summer|Winter|Christmas|Easter|Next30Days|Next90Days|Custom (default Next90Days)')
|
|
195
201
|
.option('--departure-date-from <YYYY-MM-DD>', 'start of departure window (requires --travel-period Custom)')
|
|
@@ -199,8 +205,7 @@ export function addCommonDemandOptions(cmd) {
|
|
|
199
205
|
.option('--trip-duration-max <n>', 'maximum trip length in nights (>= --trip-duration-min)')
|
|
200
206
|
.option('--search-window-min <n>', 'minimum advance-purchase window in days before departure (>= 0)')
|
|
201
207
|
.option('--search-window-max <n>', 'maximum advance-purchase window in days (>= --search-window-min)')
|
|
202
|
-
.option('--snapshot-window-days <n>', '
|
|
203
|
-
.option('--trend-window-days <n>', 'trend only: size in days of each compared window (2-45, default 7)')
|
|
208
|
+
.option('--snapshot-window-days <n>', 'days of recent search activity aggregated into the demand level (2-90, default 7)')
|
|
204
209
|
.option('--limit <n>', 'max rows, 1-200 (default 20)');
|
|
205
210
|
}
|
|
206
211
|
//# 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":"AAEA,OAAO,EACL,iBAAiB,GAOlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,
|
|
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
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* is redundant under `travel-demand`.) The SDK keeps its flat
|
|
10
|
-
* names (demandDestination/…/
|
|
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,
|
|
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,CA2DnE"}
|
|
@@ -1,81 +1,86 @@
|
|
|
1
|
-
import { addCommonDemandOptions, demandAction } from './demand-shared.js';
|
|
2
|
-
import {
|
|
1
|
+
import { addCommonDemandOptions, addLevelOption, 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
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* is redundant under `travel-demand`.) The SDK keeps its flat
|
|
11
|
-
* names (demandDestination/…/
|
|
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 +
|
|
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
|
|
21
|
-
|
|
22
|
-
addCommonDemandOptions(td
|
|
20
|
+
'mix — as point-in-time rankings, or as "trend" time series you can plot over a window.');
|
|
21
|
+
addLevelOption(addCommonDemandOptions(td
|
|
23
22
|
.command('destination')
|
|
24
23
|
.summary('Top destinations by search demand')
|
|
25
24
|
.description('Most-searched destinations by de-sampled request share. Optionally scope to an origin ' +
|
|
26
25
|
'market with --origin-market, or filter to a single destination with --destination.')
|
|
27
26
|
.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
|
|
27
|
+
.option('--traveler-type <type>', 'Solo|Couple|Group|Family'))).action(demandAction({ allowTravelerType: true, allowLevel: true }, (client, query) => client.demandDestination(query)));
|
|
28
|
+
addLevelOption(addCommonDemandOptions(td
|
|
30
29
|
.command('market')
|
|
31
30
|
.summary('Top source markets for a destination')
|
|
32
31
|
.description('Which source markets generate the most demand for a destination. --destination is required.')
|
|
33
32
|
.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)));
|
|
33
|
+
.option('--traveler-type <type>', 'Solo|Couple|Group|Family'))).action(demandAction({ requireDestination: true, allowTravelerType: true, allowLevel: true }, (client, query) => client.demandMarket(query)));
|
|
35
34
|
addCommonDemandOptions(td
|
|
36
35
|
.command('audience')
|
|
37
36
|
.summary('Traveler-type mix for a destination')
|
|
38
37
|
.description('Traveler-type composition (Solo/Couple/Family/Group) of demand for a destination. ' +
|
|
39
38
|
'--destination is required. (traveler_type is not a filter here — it is the dimension.)')
|
|
40
39
|
.option('--destination <level:code>', 'destination, e.g. Country:JP (required)')).action(demandAction({ requireDestination: true }, (client, query) => client.demandAudience(query)));
|
|
41
|
-
|
|
40
|
+
registerTrendCommands(td);
|
|
42
41
|
}
|
|
43
42
|
/**
|
|
44
|
-
* The four
|
|
45
|
-
* a series, so there is no --analysis /
|
|
46
|
-
* --
|
|
43
|
+
* The four TREND (time-series) commands (JIN-1471, renamed from "evolution" by
|
|
44
|
+
* JIN-1529). A series is always a series, so there is no --analysis /
|
|
45
|
+
* --snapshot-window-days here; the window is --trend-window (per-granularity:
|
|
46
|
+
* day 2-60 | week 2-52 | month 2-12, default 12) and --granularity (week
|
|
47
|
+
* default) buckets it.
|
|
47
48
|
*/
|
|
48
|
-
function
|
|
49
|
+
function registerTrendCommands(td) {
|
|
49
50
|
// Deep dive over explicit pairs. --origin / --destination are repeatable and
|
|
50
51
|
// comma-splittable; v1 requires one side to be a single location.
|
|
51
|
-
|
|
52
|
-
.command('
|
|
53
|
-
.summary('
|
|
54
|
-
.description('Deep dive: one
|
|
52
|
+
addCommonTrendOptions(td
|
|
53
|
+
.command('trend')
|
|
54
|
+
.summary('Demand time series for explicit origin/destination pairs')
|
|
55
|
+
.description('Deep dive: one de-sampled search-volume series per (origin, destination) pair. ' +
|
|
55
56
|
'--origin and --destination are repeatable (or comma-separated); v1 allows a list on ' +
|
|
56
57
|
'only one side (keep the other a single location).')
|
|
57
58
|
.option('--origin <level:code>', 'origin selector, e.g. Country:US (repeatable)', collectLocations, [])
|
|
58
59
|
.option('--destination <level:code>', 'destination selector, e.g. Country:FR (repeatable)', collectLocations, [])
|
|
59
|
-
.option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(
|
|
60
|
-
|
|
61
|
-
.command('destination-
|
|
62
|
-
.summary('
|
|
60
|
+
.option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(trendAction(buildPairsTrendQuery, (client, query) => client.demandTrend(query)));
|
|
61
|
+
addLevelOption(addRankedTrendOptions(td
|
|
62
|
+
.command('destination-trend')
|
|
63
|
+
.summary('Demand time series for the top-N destinations')
|
|
63
64
|
.description('Ranks destinations (optionally reachable from --origin-market) by within-window growth, ' +
|
|
64
|
-
'then returns each top-N destination’s
|
|
65
|
+
'then returns each top-N destination’s series.')
|
|
65
66
|
.option('--destination <level:code>', 'optional destination filter, e.g. Country:TH')
|
|
66
|
-
.option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(
|
|
67
|
-
|
|
68
|
-
.command('market-
|
|
69
|
-
.summary('
|
|
67
|
+
.option('--traveler-type <type>', 'Solo|Couple|Group|Family'))).action(trendAction((opts) => buildRankedTrendQuery(opts, { allowTravelerType: true, allowLevel: true }), (client, query) => client.demandDestinationTrend(query)));
|
|
68
|
+
addLevelOption(addRankedTrendOptions(td
|
|
69
|
+
.command('market-trend')
|
|
70
|
+
.summary('Demand time series for the top-N source markets')
|
|
70
71
|
.description('Ranks source markets for a destination by within-window growth, then returns each ' +
|
|
71
|
-
'top-N market’s
|
|
72
|
+
'top-N market’s series. --destination is required.')
|
|
72
73
|
.option('--destination <level:code>', 'destination, e.g. Country:TH (required)')
|
|
73
|
-
.option('--traveler-type <type>', 'Solo|Couple|Group|Family')).action(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
.option('--traveler-type <type>', 'Solo|Couple|Group|Family'))).action(trendAction((opts) => buildRankedTrendQuery(opts, {
|
|
75
|
+
requireDestination: true,
|
|
76
|
+
allowTravelerType: true,
|
|
77
|
+
allowLevel: true,
|
|
78
|
+
}), (client, query) => client.demandMarketTrend(query)));
|
|
79
|
+
addRankedTrendOptions(td
|
|
80
|
+
.command('audience-trend')
|
|
81
|
+
.summary('Demand time series for the traveler-type mix')
|
|
82
|
+
.description('A series per traveler-type segment (Solo/Couple/Family/Group) of demand for a ' +
|
|
78
83
|
'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(
|
|
84
|
+
.option('--destination <level:code>', 'destination, e.g. Country:JP (required)')).action(trendAction((opts) => buildRankedTrendQuery(opts, { requireDestination: true }), (client, query) => client.demandAudienceTrend(query)));
|
|
80
85
|
}
|
|
81
86
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/travel-demand/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/travel-demand/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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[];
|
|
23
|
+
destination?: string | string[];
|
|
24
|
+
originMarket?: string;
|
|
25
|
+
level?: string;
|
|
26
|
+
limit?: string;
|
|
27
|
+
travelPeriod?: string;
|
|
28
|
+
departureDateFrom?: string;
|
|
29
|
+
departureDateTo?: string;
|
|
30
|
+
travelerType?: string;
|
|
31
|
+
tripType?: string;
|
|
32
|
+
tripDurationMin?: string;
|
|
33
|
+
tripDurationMax?: string;
|
|
34
|
+
searchWindowMin?: string;
|
|
35
|
+
searchWindowMax?: string;
|
|
36
|
+
trendWindow?: string;
|
|
37
|
+
granularity?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface TrendBuildOpts {
|
|
40
|
+
/** Ranked commands where --destination must be supplied (market / audience). */
|
|
41
|
+
requireDestination?: boolean;
|
|
42
|
+
/** Whether --traveler-type is a valid filter (false for the audience endpoint, which buckets by it). */
|
|
43
|
+
allowTravelerType?: boolean;
|
|
44
|
+
/** Whether --level (ranked-output granularity) is valid (destination/market trend, not audience). */
|
|
45
|
+
allowLevel?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Commander collector for the repeatable, comma-splittable `--origin` /
|
|
49
|
+
* `--destination` flags on the pairs command: `--origin A --origin B` and
|
|
50
|
+
* `--origin A,B` both accumulate into the same array.
|
|
51
|
+
*/
|
|
52
|
+
export declare function collectLocations(value: string, previous?: string[]): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Build the query for the `trend` deep-dive (explicit pairs). v1 requires at
|
|
55
|
+
* least one origin and one destination, caps each list, and allows a list on only
|
|
56
|
+
* one side (the other must be a single location). The wire forwards
|
|
57
|
+
* comma-separated strings — the BFF splits them.
|
|
58
|
+
*/
|
|
59
|
+
export declare function buildPairsTrendQuery(opts: TrendCliOpts): DemandTrendQuery;
|
|
60
|
+
/** Build the query for a ranked trend command (destination / market / audience). */
|
|
61
|
+
export declare function buildRankedTrendQuery(opts: TrendCliOpts, build: TrendBuildOpts): DemandTrendQuery;
|
|
62
|
+
/**
|
|
63
|
+
* Build a Commander action for a trend command. Same ordering contract as
|
|
64
|
+
* the snapshot ranking commands: validate input FIRST (UsageError -> exit 3), THEN
|
|
65
|
+
* construct the client (AuthError -> exit 2), THEN call the API.
|
|
66
|
+
*/
|
|
67
|
+
export declare function trendAction(buildQuery: (opts: TrendCliOpts) => DemandTrendQuery, call: (client: JinkoClient, query: DemandTrendQuery) => Promise<unknown>): (this: Command, ...args: unknown[]) => Promise<void>;
|
|
68
|
+
/** Register the filter options shared by all four trend commands. */
|
|
69
|
+
export declare function addCommonTrendOptions(cmd: Command): Command;
|
|
70
|
+
/** Register the options common to the three RANKED trend commands (origin-market + top-N limit). */
|
|
71
|
+
export declare function addRankedTrendOptions(cmd: Command): Command;
|
|
72
|
+
//# 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;AA+B7B,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAE3B,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;IACf,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,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;CACtB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAOjF;AA0FD;;;;;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,CAqBlB;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,CA4B3D;AAED,oGAAoG;AACpG,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAI3D"}
|
|
@@ -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 { checkDate, checkEnum, checkLocation, checkNonNegInt, checkRangeInt, LEVEL_VALUES, TRAVEL_PERIODS, 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
|
|
28
|
+
function checkTrendLimit(value) {
|
|
20
29
|
if (value === undefined)
|
|
21
30
|
return undefined;
|
|
22
31
|
const n = Number(value);
|
|
@@ -25,8 +34,8 @@ function checkEvolutionLimit(value) {
|
|
|
25
34
|
}
|
|
26
35
|
return n;
|
|
27
36
|
}
|
|
28
|
-
/** Validate the filters shared by all four
|
|
29
|
-
function
|
|
37
|
+
/** Validate the filters shared by all four trend commands and build the common query slice. */
|
|
38
|
+
function buildCommonTrend(opts, build) {
|
|
30
39
|
const travelPeriod = checkEnum(opts.travelPeriod, TRAVEL_PERIODS, '--travel-period');
|
|
31
40
|
const from = checkDate(opts.departureDateFrom, '--departure-date-from');
|
|
32
41
|
const to = checkDate(opts.departureDateTo, '--departure-date-to');
|
|
@@ -59,12 +68,15 @@ function buildCommonEvolution(opts, build) {
|
|
|
59
68
|
searchWindowMax < searchWindowMin) {
|
|
60
69
|
throw new UsageError('--search-window-max must be >= --search-window-min');
|
|
61
70
|
}
|
|
62
|
-
//
|
|
63
|
-
// is
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
// Granularity is resolved FIRST (default week) because the --trend-window cap
|
|
72
|
+
// is per-granularity (mirrors trend.go, which validates granularity before the
|
|
73
|
+
// window range check).
|
|
74
|
+
const granularity = checkEnum(opts.granularity, GRANULARITIES, '--granularity') ?? DEFAULT_GRANULARITY;
|
|
75
|
+
// --trend-window is the number of buckets N in the chosen granularity's own
|
|
76
|
+
// unit. It ends on the last COMPLETE bucket (the in-progress one is excluded),
|
|
77
|
+
// so a single bucket is not a series — 2 is the minimum, and the maximum
|
|
78
|
+
// depends on the granularity (day 60, week 52, month 12).
|
|
79
|
+
const trendWindow = checkRangeInt(opts.trendWindow, '--trend-window', 2, MAX_TREND_WINDOW[granularity], 'a trend series needs at least 2 buckets');
|
|
68
80
|
const query = {};
|
|
69
81
|
if (travelPeriod)
|
|
70
82
|
query.travel_period = travelPeriod;
|
|
@@ -84,20 +96,19 @@ function buildCommonEvolution(opts, build) {
|
|
|
84
96
|
query.search_window_min = searchWindowMin;
|
|
85
97
|
if (searchWindowMax !== undefined)
|
|
86
98
|
query.search_window_max = searchWindowMax;
|
|
87
|
-
if (
|
|
88
|
-
query.
|
|
89
|
-
|
|
90
|
-
query.granularity = granularity;
|
|
99
|
+
if (trendWindow !== undefined)
|
|
100
|
+
query.trend_window = trendWindow;
|
|
101
|
+
query.granularity = granularity;
|
|
91
102
|
return query;
|
|
92
103
|
}
|
|
93
104
|
/**
|
|
94
|
-
* Build the query for the `
|
|
105
|
+
* Build the query for the `trend` deep-dive (explicit pairs). v1 requires at
|
|
95
106
|
* least one origin and one destination, caps each list, and allows a list on only
|
|
96
107
|
* one side (the other must be a single location). The wire forwards
|
|
97
108
|
* comma-separated strings — the BFF splits them.
|
|
98
109
|
*/
|
|
99
|
-
export function
|
|
100
|
-
const query =
|
|
110
|
+
export function buildPairsTrendQuery(opts) {
|
|
111
|
+
const query = buildCommonTrend(opts, { allowTravelerType: true });
|
|
101
112
|
const origins = Array.isArray(opts.origin) ? opts.origin : opts.origin ? [opts.origin] : [];
|
|
102
113
|
const destinations = Array.isArray(opts.destination)
|
|
103
114
|
? opts.destination
|
|
@@ -125,29 +136,34 @@ export function buildPairsEvolutionQuery(opts) {
|
|
|
125
136
|
query.destinations = destinations.join(',');
|
|
126
137
|
return query;
|
|
127
138
|
}
|
|
128
|
-
/** Build the query for a ranked
|
|
129
|
-
export function
|
|
130
|
-
const query =
|
|
139
|
+
/** Build the query for a ranked trend command (destination / market / audience). */
|
|
140
|
+
export function buildRankedTrendQuery(opts, build) {
|
|
141
|
+
const query = buildCommonTrend(opts, build);
|
|
131
142
|
const destination = checkLocation(Array.isArray(opts.destination) ? opts.destination[0] : opts.destination, '--destination');
|
|
132
143
|
if (build.requireDestination && !destination) {
|
|
133
144
|
throw new UsageError('--destination is required for this command (e.g. --destination Country:TH)');
|
|
134
145
|
}
|
|
135
146
|
const originMarket = checkLocation(opts.originMarket, '--origin-market');
|
|
136
|
-
const
|
|
147
|
+
const level = build.allowLevel
|
|
148
|
+
? checkEnum(opts.level, LEVEL_VALUES, '--level')
|
|
149
|
+
: undefined;
|
|
150
|
+
const limit = checkTrendLimit(opts.limit);
|
|
137
151
|
if (destination)
|
|
138
152
|
query.destination = destination;
|
|
139
153
|
if (originMarket)
|
|
140
154
|
query.origin_market = originMarket;
|
|
155
|
+
if (level)
|
|
156
|
+
query.level = level;
|
|
141
157
|
if (limit !== undefined)
|
|
142
158
|
query.limit = limit;
|
|
143
159
|
return query;
|
|
144
160
|
}
|
|
145
161
|
/**
|
|
146
|
-
* Build a Commander action for
|
|
147
|
-
* the snapshot
|
|
162
|
+
* Build a Commander action for a trend command. Same ordering contract as
|
|
163
|
+
* the snapshot ranking commands: validate input FIRST (UsageError -> exit 3), THEN
|
|
148
164
|
* construct the client (AuthError -> exit 2), THEN call the API.
|
|
149
165
|
*/
|
|
150
|
-
export function
|
|
166
|
+
export function trendAction(buildQuery, call) {
|
|
151
167
|
return async function (...args) {
|
|
152
168
|
const command = args[args.length - 1];
|
|
153
169
|
const opts = args[args.length - 2] ?? {};
|
|
@@ -157,6 +173,8 @@ export function evolutionAction(buildQuery, call) {
|
|
|
157
173
|
const client = await createJinkoClient({
|
|
158
174
|
apiKey: globals.apiKey,
|
|
159
175
|
environment: globals.environment,
|
|
176
|
+
originSource: 'cli',
|
|
177
|
+
originAction: resolveCommandPath(command),
|
|
160
178
|
});
|
|
161
179
|
output(await call(client, query), { format: globals.format });
|
|
162
180
|
}
|
|
@@ -165,8 +183,8 @@ export function evolutionAction(buildQuery, call) {
|
|
|
165
183
|
}
|
|
166
184
|
};
|
|
167
185
|
}
|
|
168
|
-
/** Register the filter options shared by all four
|
|
169
|
-
export function
|
|
186
|
+
/** Register the filter options shared by all four trend commands. */
|
|
187
|
+
export function addCommonTrendOptions(cmd) {
|
|
170
188
|
return cmd
|
|
171
189
|
.option('--travel-period <period>', 'Summer|Winter|Christmas|Easter|Next30Days|Next90Days|Custom (default Next90Days)')
|
|
172
190
|
.option('--departure-date-from <YYYY-MM-DD>', 'start of departure window (requires --travel-period Custom)')
|
|
@@ -176,13 +194,13 @@ export function addCommonEvolutionOptions(cmd) {
|
|
|
176
194
|
.option('--trip-duration-max <n>', 'maximum trip length in nights (>= --trip-duration-min)')
|
|
177
195
|
.option('--search-window-min <n>', 'minimum advance-purchase window in days before departure (>= 0)')
|
|
178
196
|
.option('--search-window-max <n>', 'maximum advance-purchase window in days (>= --search-window-min)')
|
|
179
|
-
.option('--trend-window
|
|
180
|
-
.option('--granularity <bucket>', 'series bucket size:
|
|
197
|
+
.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)')
|
|
198
|
+
.option('--granularity <bucket>', 'series bucket size: week (default) | day | month', DEFAULT_GRANULARITY);
|
|
181
199
|
}
|
|
182
|
-
/** Register the options common to the three RANKED
|
|
183
|
-
export function
|
|
184
|
-
return
|
|
200
|
+
/** Register the options common to the three RANKED trend commands (origin-market + top-N limit). */
|
|
201
|
+
export function addRankedTrendOptions(cmd) {
|
|
202
|
+
return addCommonTrendOptions(cmd)
|
|
185
203
|
.option('--origin-market <level:code>', 'origin market filter/scope, e.g. Country:US or City:NYC')
|
|
186
204
|
.option('--limit <n>', 'max number of series (top-N), 1-50 (default 10)');
|
|
187
205
|
}
|
|
188
|
-
//# sourceMappingURL=
|
|
206
|
+
//# 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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"}
|
package/dist/output/formatter.js
CHANGED
|
@@ -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. {
|
|
27
|
-
// fields, then tabulate the rows — instead of collapsing the array
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gojinko/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.21.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
|
+
"@gojinko/api-client": "2.21.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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"}
|