@gpc-cli/cli 0.9.62 → 0.9.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -8
- package/dist/{__complete-QFD3SUAO.js → __complete-AZXI2O25.js} +2 -4
- package/dist/__complete-AZXI2O25.js.map +1 -0
- package/dist/{audit-M7GYID74.js → audit-BDPS5ODN.js} +4 -4
- package/dist/bin.js +2 -2
- package/dist/changelog-EHQYZP22.js +365 -0
- package/dist/changelog-EHQYZP22.js.map +1 -0
- package/dist/{chunk-QM5RTQ6R.js → chunk-I3SFXLIY.js} +29 -29
- package/dist/{completion-4I3IJK3M.js → completion-ZK7RPPFD.js} +7 -3
- package/dist/{completion-4I3IJK3M.js.map → completion-ZK7RPPFD.js.map} +1 -1
- package/dist/{config-B76LNM7C.js → config-SK7BOURM.js} +5 -5
- package/dist/docs-WVJCDX5X.js +378 -0
- package/dist/docs-WVJCDX5X.js.map +1 -0
- package/dist/{doctor-6SNZEFME.js → doctor-FSUI44DD.js} +5 -5
- package/dist/{enterprise-SIKXDT64.js → enterprise-L7DTIX2O.js} +4 -4
- package/dist/{external-transactions-JL3G4IG5.js → external-transactions-BP42CK3H.js} +4 -4
- package/dist/{feedback-JRTQBJUP.js → feedback-PDQU5E6S.js} +2 -2
- package/dist/generated/docs-bundle.json +1 -0
- package/dist/{grants-UHNBPIFD.js → grants-32DED5QL.js} +4 -4
- package/dist/{iap-ETOL7OAC.js → iap-EPJ76IAC.js} +4 -4
- package/dist/index.js +1 -1
- package/dist/{init-6CCSVJC2.js → init-OCBFI4VH.js} +6 -6
- package/dist/{listings-2Z6DSO3D.js → listings-QKRIVZG6.js} +6 -6
- package/dist/{one-time-products-Y5RNIPV2.js → one-time-products-OIDBVCFE.js} +4 -4
- package/dist/{publish-5HZAJEDZ.js → publish-H2IAOKP7.js} +4 -4
- package/dist/{purchases-AHWGLW6V.js → purchases-GFLYTKR3.js} +4 -4
- package/dist/{recovery-B7DZQ6XG.js → recovery-2VJJLAIQ.js} +4 -4
- package/dist/{releases-XY57V22L.js → releases-RTF5NPTD.js} +4 -4
- package/dist/{reviews-P4M6BEJI.js → reviews-GZ2VOIRN.js} +4 -4
- package/dist/{subscriptions-GTVJB4HX.js → subscriptions-JPHFBREY.js} +4 -4
- package/dist/{system-apks-L6M7QYB3.js → system-apks-KWTN5LHO.js} +4 -4
- package/dist/{testers-FGLBJAXL.js → testers-7ILUCKYB.js} +4 -4
- package/dist/{train-D2NKUW3M.js → train-G44NEK43.js} +4 -4
- package/dist/{update-6AGIO5DW.js → update-E4VGHQUR.js} +2 -2
- package/dist/{users-FOMAT7DY.js → users-W66YCFDX.js} +4 -4
- package/dist/{version-JL66BIVI.js → version-HXUIOHCL.js} +2 -2
- package/package.json +5 -3
- package/dist/__complete-QFD3SUAO.js.map +0 -1
- package/dist/changelog-OHZ4M7D6.js +0 -172
- package/dist/changelog-OHZ4M7D6.js.map +0 -1
- package/dist/docs-GP6AEX4N.js +0 -115
- package/dist/docs-GP6AEX4N.js.map +0 -1
- /package/dist/{audit-M7GYID74.js.map → audit-BDPS5ODN.js.map} +0 -0
- /package/dist/{chunk-QM5RTQ6R.js.map → chunk-I3SFXLIY.js.map} +0 -0
- /package/dist/{config-B76LNM7C.js.map → config-SK7BOURM.js.map} +0 -0
- /package/dist/{doctor-6SNZEFME.js.map → doctor-FSUI44DD.js.map} +0 -0
- /package/dist/{enterprise-SIKXDT64.js.map → enterprise-L7DTIX2O.js.map} +0 -0
- /package/dist/{external-transactions-JL3G4IG5.js.map → external-transactions-BP42CK3H.js.map} +0 -0
- /package/dist/{feedback-JRTQBJUP.js.map → feedback-PDQU5E6S.js.map} +0 -0
- /package/dist/{grants-UHNBPIFD.js.map → grants-32DED5QL.js.map} +0 -0
- /package/dist/{iap-ETOL7OAC.js.map → iap-EPJ76IAC.js.map} +0 -0
- /package/dist/{init-6CCSVJC2.js.map → init-OCBFI4VH.js.map} +0 -0
- /package/dist/{listings-2Z6DSO3D.js.map → listings-QKRIVZG6.js.map} +0 -0
- /package/dist/{one-time-products-Y5RNIPV2.js.map → one-time-products-OIDBVCFE.js.map} +0 -0
- /package/dist/{publish-5HZAJEDZ.js.map → publish-H2IAOKP7.js.map} +0 -0
- /package/dist/{purchases-AHWGLW6V.js.map → purchases-GFLYTKR3.js.map} +0 -0
- /package/dist/{recovery-B7DZQ6XG.js.map → recovery-2VJJLAIQ.js.map} +0 -0
- /package/dist/{releases-XY57V22L.js.map → releases-RTF5NPTD.js.map} +0 -0
- /package/dist/{reviews-P4M6BEJI.js.map → reviews-GZ2VOIRN.js.map} +0 -0
- /package/dist/{subscriptions-GTVJB4HX.js.map → subscriptions-JPHFBREY.js.map} +0 -0
- /package/dist/{system-apks-L6M7QYB3.js.map → system-apks-KWTN5LHO.js.map} +0 -0
- /package/dist/{testers-FGLBJAXL.js.map → testers-7ILUCKYB.js.map} +0 -0
- /package/dist/{train-D2NKUW3M.js.map → train-G44NEK43.js.map} +0 -0
- /package/dist/{update-6AGIO5DW.js.map → update-E4VGHQUR.js.map} +0 -0
- /package/dist/{users-FOMAT7DY.js.map → users-W66YCFDX.js.map} +0 -0
- /package/dist/{version-JL66BIVI.js.map → version-HXUIOHCL.js.map} +0 -0
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
isDryRun,
|
|
4
4
|
printDryRun
|
|
5
5
|
} from "./chunk-Y3QZDAKS.js";
|
|
6
|
-
import {
|
|
7
|
-
getOutputFormat
|
|
8
|
-
} from "./chunk-ELXAK7GI.js";
|
|
9
6
|
import {
|
|
10
7
|
requireConfirm
|
|
11
8
|
} from "./chunk-RZQSEDKI.js";
|
|
9
|
+
import {
|
|
10
|
+
getOutputFormat
|
|
11
|
+
} from "./chunk-ELXAK7GI.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/grants.ts
|
|
14
14
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -128,4 +128,4 @@ function registerGrantsCommands(program) {
|
|
|
128
128
|
export {
|
|
129
129
|
registerGrantsCommands
|
|
130
130
|
};
|
|
131
|
-
//# sourceMappingURL=grants-
|
|
131
|
+
//# sourceMappingURL=grants-32DED5QL.js.map
|
|
@@ -10,12 +10,12 @@ import {
|
|
|
10
10
|
isDryRun,
|
|
11
11
|
printDryRun
|
|
12
12
|
} from "./chunk-Y3QZDAKS.js";
|
|
13
|
-
import {
|
|
14
|
-
getOutputFormat
|
|
15
|
-
} from "./chunk-ELXAK7GI.js";
|
|
16
13
|
import {
|
|
17
14
|
requireConfirm
|
|
18
15
|
} from "./chunk-RZQSEDKI.js";
|
|
16
|
+
import {
|
|
17
|
+
getOutputFormat
|
|
18
|
+
} from "./chunk-ELXAK7GI.js";
|
|
19
19
|
|
|
20
20
|
// src/commands/iap.ts
|
|
21
21
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -201,4 +201,4 @@ function registerIapCommands(program) {
|
|
|
201
201
|
export {
|
|
202
202
|
registerIapCommands
|
|
203
203
|
};
|
|
204
|
-
//# sourceMappingURL=iap-
|
|
204
|
+
//# sourceMappingURL=iap-EPJ76IAC.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
dim,
|
|
4
|
-
green,
|
|
5
|
-
yellow
|
|
6
|
-
} from "./chunk-FAN4ZITI.js";
|
|
7
2
|
import {
|
|
8
3
|
isInteractive,
|
|
9
4
|
promptInput,
|
|
10
5
|
promptSelect
|
|
11
6
|
} from "./chunk-RZQSEDKI.js";
|
|
7
|
+
import {
|
|
8
|
+
dim,
|
|
9
|
+
green,
|
|
10
|
+
yellow
|
|
11
|
+
} from "./chunk-FAN4ZITI.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/init.ts
|
|
14
14
|
import { initProject } from "@gpc-cli/core";
|
|
@@ -67,4 +67,4 @@ function registerInitCommand(program) {
|
|
|
67
67
|
export {
|
|
68
68
|
registerInitCommand
|
|
69
69
|
};
|
|
70
|
-
//# sourceMappingURL=init-
|
|
70
|
+
//# sourceMappingURL=init-OCBFI4VH.js.map
|
|
@@ -10,6 +10,11 @@ import {
|
|
|
10
10
|
isDryRun,
|
|
11
11
|
printDryRun
|
|
12
12
|
} from "./chunk-Y3QZDAKS.js";
|
|
13
|
+
import {
|
|
14
|
+
isInteractive,
|
|
15
|
+
requireConfirm,
|
|
16
|
+
requireOption
|
|
17
|
+
} from "./chunk-RZQSEDKI.js";
|
|
13
18
|
import {
|
|
14
19
|
green,
|
|
15
20
|
red
|
|
@@ -17,11 +22,6 @@ import {
|
|
|
17
22
|
import {
|
|
18
23
|
getOutputFormat
|
|
19
24
|
} from "./chunk-ELXAK7GI.js";
|
|
20
|
-
import {
|
|
21
|
-
isInteractive,
|
|
22
|
-
requireConfirm,
|
|
23
|
-
requireOption
|
|
24
|
-
} from "./chunk-RZQSEDKI.js";
|
|
25
25
|
|
|
26
26
|
// src/commands/listings.ts
|
|
27
27
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -448,4 +448,4 @@ Missing locales: ${missingLocales.join(", ")}`);
|
|
|
448
448
|
export {
|
|
449
449
|
registerListingsCommands
|
|
450
450
|
};
|
|
451
|
-
//# sourceMappingURL=listings-
|
|
451
|
+
//# sourceMappingURL=listings-QKRIVZG6.js.map
|
|
@@ -10,12 +10,12 @@ import {
|
|
|
10
10
|
isDryRun,
|
|
11
11
|
printDryRun
|
|
12
12
|
} from "./chunk-Y3QZDAKS.js";
|
|
13
|
-
import {
|
|
14
|
-
getOutputFormat
|
|
15
|
-
} from "./chunk-ELXAK7GI.js";
|
|
16
13
|
import {
|
|
17
14
|
requireConfirm
|
|
18
15
|
} from "./chunk-RZQSEDKI.js";
|
|
16
|
+
import {
|
|
17
|
+
getOutputFormat
|
|
18
|
+
} from "./chunk-ELXAK7GI.js";
|
|
19
19
|
|
|
20
20
|
// src/commands/one-time-products.ts
|
|
21
21
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -469,4 +469,4 @@ function registerOneTimeProductsCommands(program) {
|
|
|
469
469
|
export {
|
|
470
470
|
registerOneTimeProductsCommands
|
|
471
471
|
};
|
|
472
|
-
//# sourceMappingURL=one-time-products-
|
|
472
|
+
//# sourceMappingURL=one-time-products-OIDBVCFE.js.map
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
isDryRun
|
|
10
10
|
} from "./chunk-Y3QZDAKS.js";
|
|
11
|
-
import {
|
|
12
|
-
getOutputFormat
|
|
13
|
-
} from "./chunk-ELXAK7GI.js";
|
|
14
11
|
import {
|
|
15
12
|
isInteractive,
|
|
16
13
|
promptInput,
|
|
17
14
|
promptSelect
|
|
18
15
|
} from "./chunk-RZQSEDKI.js";
|
|
16
|
+
import {
|
|
17
|
+
getOutputFormat
|
|
18
|
+
} from "./chunk-ELXAK7GI.js";
|
|
19
19
|
|
|
20
20
|
// src/commands/publish.ts
|
|
21
21
|
import { appendFile, stat } from "fs/promises";
|
|
@@ -227,4 +227,4 @@ function registerPublishCommand(program) {
|
|
|
227
227
|
export {
|
|
228
228
|
registerPublishCommand
|
|
229
229
|
};
|
|
230
|
-
//# sourceMappingURL=publish-
|
|
230
|
+
//# sourceMappingURL=publish-H2IAOKP7.js.map
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
isDryRun,
|
|
8
8
|
printDryRun
|
|
9
9
|
} from "./chunk-Y3QZDAKS.js";
|
|
10
|
-
import {
|
|
11
|
-
getOutputFormat
|
|
12
|
-
} from "./chunk-ELXAK7GI.js";
|
|
13
10
|
import {
|
|
14
11
|
isInteractive,
|
|
15
12
|
requireConfirm,
|
|
16
13
|
requireOption
|
|
17
14
|
} from "./chunk-RZQSEDKI.js";
|
|
15
|
+
import {
|
|
16
|
+
getOutputFormat
|
|
17
|
+
} from "./chunk-ELXAK7GI.js";
|
|
18
18
|
|
|
19
19
|
// src/commands/purchases.ts
|
|
20
20
|
import { Option } from "commander";
|
|
@@ -396,4 +396,4 @@ Use one of these instead:
|
|
|
396
396
|
export {
|
|
397
397
|
registerPurchasesCommands
|
|
398
398
|
};
|
|
399
|
-
//# sourceMappingURL=purchases-
|
|
399
|
+
//# sourceMappingURL=purchases-GFLYTKR3.js.map
|
|
@@ -7,12 +7,12 @@ import {
|
|
|
7
7
|
isDryRun,
|
|
8
8
|
printDryRun
|
|
9
9
|
} from "./chunk-Y3QZDAKS.js";
|
|
10
|
-
import {
|
|
11
|
-
getOutputFormat
|
|
12
|
-
} from "./chunk-ELXAK7GI.js";
|
|
13
10
|
import {
|
|
14
11
|
requireConfirm
|
|
15
12
|
} from "./chunk-RZQSEDKI.js";
|
|
13
|
+
import {
|
|
14
|
+
getOutputFormat
|
|
15
|
+
} from "./chunk-ELXAK7GI.js";
|
|
16
16
|
|
|
17
17
|
// src/commands/recovery.ts
|
|
18
18
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -170,4 +170,4 @@ function registerRecoveryCommands(program) {
|
|
|
170
170
|
export {
|
|
171
171
|
registerRecoveryCommands
|
|
172
172
|
};
|
|
173
|
-
//# sourceMappingURL=recovery-
|
|
173
|
+
//# sourceMappingURL=recovery-2VJJLAIQ.js.map
|
|
@@ -6,9 +6,6 @@ import {
|
|
|
6
6
|
isDryRun,
|
|
7
7
|
printDryRun
|
|
8
8
|
} from "./chunk-Y3QZDAKS.js";
|
|
9
|
-
import {
|
|
10
|
-
getOutputFormat
|
|
11
|
-
} from "./chunk-ELXAK7GI.js";
|
|
12
9
|
import {
|
|
13
10
|
isInteractive,
|
|
14
11
|
promptInput,
|
|
@@ -16,6 +13,9 @@ import {
|
|
|
16
13
|
requireConfirm,
|
|
17
14
|
requireOption
|
|
18
15
|
} from "./chunk-RZQSEDKI.js";
|
|
16
|
+
import {
|
|
17
|
+
getOutputFormat
|
|
18
|
+
} from "./chunk-ELXAK7GI.js";
|
|
19
19
|
|
|
20
20
|
// src/commands/releases.ts
|
|
21
21
|
import { appendFile, stat } from "fs/promises";
|
|
@@ -593,4 +593,4 @@ function registerReleasesCommands(program) {
|
|
|
593
593
|
export {
|
|
594
594
|
registerReleasesCommands
|
|
595
595
|
};
|
|
596
|
-
//# sourceMappingURL=releases-
|
|
596
|
+
//# sourceMappingURL=releases-RTF5NPTD.js.map
|
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
isDryRun,
|
|
8
8
|
printDryRun
|
|
9
9
|
} from "./chunk-Y3QZDAKS.js";
|
|
10
|
-
import {
|
|
11
|
-
getOutputFormat
|
|
12
|
-
} from "./chunk-ELXAK7GI.js";
|
|
13
10
|
import {
|
|
14
11
|
isInteractive,
|
|
15
12
|
requireOption
|
|
16
13
|
} from "./chunk-RZQSEDKI.js";
|
|
14
|
+
import {
|
|
15
|
+
getOutputFormat
|
|
16
|
+
} from "./chunk-ELXAK7GI.js";
|
|
17
17
|
|
|
18
18
|
// src/commands/reviews.ts
|
|
19
19
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -194,4 +194,4 @@ Rating distribution:`);
|
|
|
194
194
|
export {
|
|
195
195
|
registerReviewsCommands
|
|
196
196
|
};
|
|
197
|
-
//# sourceMappingURL=reviews-
|
|
197
|
+
//# sourceMappingURL=reviews-GZ2VOIRN.js.map
|
|
@@ -10,12 +10,12 @@ import {
|
|
|
10
10
|
isDryRun,
|
|
11
11
|
printDryRun
|
|
12
12
|
} from "./chunk-Y3QZDAKS.js";
|
|
13
|
-
import {
|
|
14
|
-
getOutputFormat
|
|
15
|
-
} from "./chunk-ELXAK7GI.js";
|
|
16
13
|
import {
|
|
17
14
|
requireConfirm
|
|
18
15
|
} from "./chunk-RZQSEDKI.js";
|
|
16
|
+
import {
|
|
17
|
+
getOutputFormat
|
|
18
|
+
} from "./chunk-ELXAK7GI.js";
|
|
19
19
|
|
|
20
20
|
// src/commands/subscriptions.ts
|
|
21
21
|
import { Option } from "commander";
|
|
@@ -507,4 +507,4 @@ By product:`);
|
|
|
507
507
|
export {
|
|
508
508
|
registerSubscriptionsCommands
|
|
509
509
|
};
|
|
510
|
-
//# sourceMappingURL=subscriptions-
|
|
510
|
+
//# sourceMappingURL=subscriptions-JPHFBREY.js.map
|
|
@@ -10,12 +10,12 @@ import {
|
|
|
10
10
|
isDryRun,
|
|
11
11
|
printDryRun
|
|
12
12
|
} from "./chunk-Y3QZDAKS.js";
|
|
13
|
-
import {
|
|
14
|
-
getOutputFormat
|
|
15
|
-
} from "./chunk-ELXAK7GI.js";
|
|
16
13
|
import {
|
|
17
14
|
requireConfirm
|
|
18
15
|
} from "./chunk-RZQSEDKI.js";
|
|
16
|
+
import {
|
|
17
|
+
getOutputFormat
|
|
18
|
+
} from "./chunk-ELXAK7GI.js";
|
|
19
19
|
|
|
20
20
|
// src/commands/system-apks.ts
|
|
21
21
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -108,4 +108,4 @@ function registerSystemApksCommands(program) {
|
|
|
108
108
|
export {
|
|
109
109
|
registerSystemApksCommands
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=system-apks-
|
|
111
|
+
//# sourceMappingURL=system-apks-KWTN5LHO.js.map
|
|
@@ -10,14 +10,14 @@ import {
|
|
|
10
10
|
isDryRun,
|
|
11
11
|
printDryRun
|
|
12
12
|
} from "./chunk-Y3QZDAKS.js";
|
|
13
|
-
import {
|
|
14
|
-
getOutputFormat
|
|
15
|
-
} from "./chunk-ELXAK7GI.js";
|
|
16
13
|
import {
|
|
17
14
|
isInteractive,
|
|
18
15
|
requireConfirm,
|
|
19
16
|
requireOption
|
|
20
17
|
} from "./chunk-RZQSEDKI.js";
|
|
18
|
+
import {
|
|
19
|
+
getOutputFormat
|
|
20
|
+
} from "./chunk-ELXAK7GI.js";
|
|
21
21
|
|
|
22
22
|
// src/commands/testers.ts
|
|
23
23
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -188,4 +188,4 @@ function registerTestersCommands(program) {
|
|
|
188
188
|
export {
|
|
189
189
|
registerTestersCommands
|
|
190
190
|
};
|
|
191
|
-
//# sourceMappingURL=testers-
|
|
191
|
+
//# sourceMappingURL=testers-7ILUCKYB.js.map
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
isDryRun,
|
|
7
7
|
printDryRun
|
|
8
8
|
} from "./chunk-Y3QZDAKS.js";
|
|
9
|
-
import {
|
|
10
|
-
getOutputFormat
|
|
11
|
-
} from "./chunk-ELXAK7GI.js";
|
|
12
9
|
import {
|
|
13
10
|
requireConfirm
|
|
14
11
|
} from "./chunk-RZQSEDKI.js";
|
|
12
|
+
import {
|
|
13
|
+
getOutputFormat
|
|
14
|
+
} from "./chunk-ELXAK7GI.js";
|
|
15
15
|
|
|
16
16
|
// src/commands/train.ts
|
|
17
17
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -122,4 +122,4 @@ function registerTrainCommands(program) {
|
|
|
122
122
|
export {
|
|
123
123
|
registerTrainCommands
|
|
124
124
|
};
|
|
125
|
-
//# sourceMappingURL=train-
|
|
125
|
+
//# sourceMappingURL=train-G44NEK43.js.map
|
|
@@ -17,7 +17,7 @@ function registerUpdateCommand(program) {
|
|
|
17
17
|
program.command("update").description("Update gpc to the latest version").option("--check", "Check for updates without installing (exits 0 always)").option("--force", "Update even if already on the latest version").action(async (opts, cmd) => {
|
|
18
18
|
const parentOpts = cmd.parent?.opts() ?? {};
|
|
19
19
|
const jsonMode = !!(parentOpts["json"] || parentOpts["output"] === "json");
|
|
20
|
-
const currentVersion = "0.9.
|
|
20
|
+
const currentVersion = "0.9.64";
|
|
21
21
|
if (currentVersion === "0.0.0") {
|
|
22
22
|
if (jsonMode) {
|
|
23
23
|
console.log(
|
|
@@ -172,4 +172,4 @@ Run: gpc update`);
|
|
|
172
172
|
export {
|
|
173
173
|
registerUpdateCommand
|
|
174
174
|
};
|
|
175
|
-
//# sourceMappingURL=update-
|
|
175
|
+
//# sourceMappingURL=update-E4VGHQUR.js.map
|
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
isDryRun,
|
|
4
4
|
printDryRun
|
|
5
5
|
} from "./chunk-Y3QZDAKS.js";
|
|
6
|
-
import {
|
|
7
|
-
getOutputFormat
|
|
8
|
-
} from "./chunk-ELXAK7GI.js";
|
|
9
6
|
import {
|
|
10
7
|
requireConfirm
|
|
11
8
|
} from "./chunk-RZQSEDKI.js";
|
|
9
|
+
import {
|
|
10
|
+
getOutputFormat
|
|
11
|
+
} from "./chunk-ELXAK7GI.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/users.ts
|
|
14
14
|
import { loadConfig } from "@gpc-cli/config";
|
|
@@ -162,4 +162,4 @@ function registerUsersCommands(program) {
|
|
|
162
162
|
export {
|
|
163
163
|
registerUsersCommands
|
|
164
164
|
};
|
|
165
|
-
//# sourceMappingURL=users-
|
|
165
|
+
//# sourceMappingURL=users-W66YCFDX.js.map
|
|
@@ -7,7 +7,7 @@ import "./chunk-3SJ6OXCZ.js";
|
|
|
7
7
|
// src/commands/version.ts
|
|
8
8
|
function registerVersionCommand(program) {
|
|
9
9
|
program.command("version").description("Show version information").action(() => {
|
|
10
|
-
const version = "0.9.
|
|
10
|
+
const version = "0.9.64";
|
|
11
11
|
if (program.opts()["output"] === "json") {
|
|
12
12
|
console.log(
|
|
13
13
|
JSON.stringify({
|
|
@@ -25,4 +25,4 @@ function registerVersionCommand(program) {
|
|
|
25
25
|
export {
|
|
26
26
|
registerVersionCommand
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=version-
|
|
28
|
+
//# sourceMappingURL=version-HXUIOHCL.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gpc-cli/cli",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.64",
|
|
4
4
|
"description": "GPC — Google Play Console CLI. 217 API endpoints including Managed Google Play. Upload AABs, manage releases, monitor vitals, publish private enterprise apps. Fastlane alternative for Android.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"commander": "^14.0.3",
|
|
22
22
|
"@gpc-cli/api": "1.0.36",
|
|
23
23
|
"@gpc-cli/config": "0.9.14",
|
|
24
|
+
"@gpc-cli/core": "0.9.54",
|
|
24
25
|
"@gpc-cli/auth": "0.9.14",
|
|
25
|
-
"@gpc-cli/plugin-sdk": "0.9.10"
|
|
26
|
-
"@gpc-cli/core": "0.9.52"
|
|
26
|
+
"@gpc-cli/plugin-sdk": "0.9.10"
|
|
27
27
|
},
|
|
28
28
|
"keywords": [
|
|
29
29
|
"google-play",
|
|
@@ -53,7 +53,9 @@
|
|
|
53
53
|
"url": "https://github.com/yasserstudio/gpc"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
|
+
"prebuild": "tsx ../../scripts/build-docs-bundle.ts",
|
|
56
57
|
"build": "tsup",
|
|
58
|
+
"postbuild": "mkdir -p dist/generated && cp src/generated/docs-bundle.json dist/generated/",
|
|
57
59
|
"dev": "tsup --watch",
|
|
58
60
|
"test": "vitest run",
|
|
59
61
|
"test:watch": "vitest",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/__complete.ts"],"sourcesContent":["import { readFile, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { Command } from \"commander\";\nimport { getCacheDir, getUserConfigPath, listProfiles } from \"@gpc-cli/config\";\n\n// Keep this file dependency-light on purpose.\n// It is called on every TAB press; loading @gpc-cli/api or @gpc-cli/auth would\n// blow the <100ms cold-start budget. Only pull from @gpc-cli/config + node:fs.\n\nconst STATIC_TRACKS = [\"production\", \"beta\", \"alpha\", \"internal\"] as const;\n\nconst DEBUG = process.env[\"GPC_DEBUG\"] === \"1\";\n\nfunction debug(msg: string): void {\n if (DEBUG) process.stderr.write(`[gpc __complete] ${msg}\\n`);\n}\n\n/** Emit one value per line; silent on any error. */\nfunction emit(values: readonly string[]): void {\n for (const v of values) {\n if (v) console.log(v);\n }\n}\n\n// Prototype-pollution defense: strip __proto__/constructor/prototype from\n// parsed JSON. Mirrors packages/config/src/loader.ts:92 so cache and config\n// files are treated consistently.\nconst DANGEROUS_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\nfunction sanitize(obj: unknown): void {\n if (!obj || typeof obj !== \"object\") return;\n if (Array.isArray(obj)) {\n for (const item of obj) sanitize(item);\n return;\n }\n const record = obj as Record<string, unknown>;\n for (const key of Object.keys(record)) {\n if (DANGEROUS_KEYS.has(key)) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete record[key];\n } else if (typeof record[key] === \"object\" && record[key] !== null) {\n sanitize(record[key]);\n }\n }\n}\n\nasync function readJson<T>(path: string): Promise<T | null> {\n try {\n const raw = await readFile(path, \"utf-8\");\n const parsed = JSON.parse(raw) as T;\n sanitize(parsed);\n return parsed;\n } catch (err) {\n // Silent fallback is by design (empty/stale cache is indistinguishable\n // from corrupt from the user's POV), but under GPC_DEBUG=1 surface the\n // error so authors can diagnose bad config or cache files.\n debug(`readJson(${path}) failed: ${err instanceof Error ? err.message : String(err)}`);\n return null;\n }\n}\n\ninterface ProfileEntry {\n app?: string;\n}\ninterface RawConfig {\n app?: string;\n profiles?: Record<string, ProfileEntry>;\n}\n\nasync function readProjectConfig(): Promise<RawConfig | null> {\n return readJson<RawConfig>(join(process.cwd(), \".gpcrc.json\"));\n}\n\nasync function readUserConfig(): Promise<RawConfig | null> {\n return readJson<RawConfig>(getUserConfigPath());\n}\n\nasync function cachedPackageNames(): Promise<string[]> {\n try {\n const entries = await readdir(getCacheDir());\n return entries\n .filter((f) => f.startsWith(\"status-\") && f.endsWith(\".json\"))\n .map((f) => f.slice(\"status-\".length, -\".json\".length));\n } catch {\n return [];\n }\n}\n\ninterface StatusCacheEntry {\n fetchedAt?: string;\n ttl?: number;\n data?: {\n releases?: Array<{ track?: string; versionCode?: string }>;\n };\n}\n\nasync function readFreshStatusCache(packageName: string): Promise<StatusCacheEntry | null> {\n const entry = await readJson<StatusCacheEntry>(\n join(getCacheDir(), `status-${packageName}.json`),\n );\n if (!entry?.fetchedAt) return null;\n const ttl = entry.ttl ?? 3600;\n const ageSec = (Date.now() - new Date(entry.fetchedAt).getTime()) / 1000;\n if (ageSec > ttl) return null;\n return entry;\n}\n\nexport async function runContext(context: string, args: readonly string[] = []): Promise<string[]> {\n switch (context) {\n case \"profiles\":\n return completeProfiles();\n case \"packages\":\n return completePackages();\n case \"tracks-for-app\":\n return completeTracksForApp(args[0]);\n case \"releases-for-track\":\n return completeReleasesForTrack(args[0], args[1]);\n default:\n return [];\n }\n}\n\nexport async function completeProfiles(): Promise<string[]> {\n return listProfiles();\n}\n\nexport async function completePackages(): Promise<string[]> {\n const seen = new Set<string>();\n const [proj, user, cached] = await Promise.all([\n readProjectConfig(),\n readUserConfig(),\n cachedPackageNames(),\n ]);\n for (const cfg of [proj, user]) {\n if (cfg?.app) seen.add(cfg.app);\n if (cfg?.profiles) {\n for (const p of Object.values(cfg.profiles)) {\n if (p?.app) seen.add(p.app);\n }\n }\n }\n for (const pkg of cached) seen.add(pkg);\n return [...seen].sort();\n}\n\nexport async function completeTracksForApp(packageName: string | undefined): Promise<string[]> {\n const tracks = new Set<string>(STATIC_TRACKS);\n if (packageName) {\n const entry = await readFreshStatusCache(packageName);\n for (const r of entry?.data?.releases ?? []) {\n if (r.track) tracks.add(r.track);\n }\n } else {\n // No package arg: shell scripts don't currently parse the already-typed\n // --app value. As a best-effort, aggregate custom track names from every\n // fresh status cache so `gpc --track <TAB>` still surfaces non-standard\n // tracks the user has published to recently.\n const packages = await cachedPackageNames();\n const entries = await Promise.all(packages.map((p) => readFreshStatusCache(p)));\n for (const entry of entries) {\n for (const r of entry?.data?.releases ?? []) {\n if (r.track) tracks.add(r.track);\n }\n }\n }\n return [...tracks];\n}\n\nexport async function completeReleasesForTrack(\n packageName: string | undefined,\n track: string | undefined,\n): Promise<string[]> {\n if (!packageName || !track) return [];\n const entry = await readFreshStatusCache(packageName);\n return (entry?.data?.releases ?? [])\n .filter((r) => r.track === track && r.versionCode)\n .map((r) => r.versionCode as string);\n}\n\n/** Register the hidden `__complete` subcommand on the program. */\nexport function registerCompleteCommand(program: Command): void {\n const complete = new Command(\"__complete\")\n .description(\"Internal: shell completion value provider (hidden)\")\n .argument(\"<context>\", \"profiles | packages | tracks-for-app | releases-for-track\")\n .argument(\"[args...]\", \"Context-specific positional args\")\n .allowUnknownOption(true)\n .action(async (context: string, args: string[]) => {\n try {\n const values = await runContext(context, args);\n emit(values);\n } catch {\n // Never throw from a completion handler.\n }\n });\n\n program.addCommand(complete, { hidden: true });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
getClient,
|
|
4
|
-
resolvePackageName
|
|
5
|
-
} from "./chunk-JDRY7HK5.js";
|
|
6
|
-
import {
|
|
7
|
-
dim,
|
|
8
|
-
yellow
|
|
9
|
-
} from "./chunk-FAN4ZITI.js";
|
|
10
|
-
import {
|
|
11
|
-
getOutputFormat
|
|
12
|
-
} from "./chunk-ELXAK7GI.js";
|
|
13
|
-
|
|
14
|
-
// src/commands/changelog.ts
|
|
15
|
-
import {
|
|
16
|
-
fetchChangelog,
|
|
17
|
-
formatChangelogEntry,
|
|
18
|
-
formatOutput,
|
|
19
|
-
generateChangelog,
|
|
20
|
-
RENDERERS,
|
|
21
|
-
renderPlayStore,
|
|
22
|
-
resolveLocales,
|
|
23
|
-
GpcError
|
|
24
|
-
} from "@gpc-cli/core";
|
|
25
|
-
import { loadConfig } from "@gpc-cli/config";
|
|
26
|
-
var VALID_OUTPUT_MODES = ["md", "json", "prompt"];
|
|
27
|
-
var VALID_TARGETS = ["github", "play-store"];
|
|
28
|
-
var REPO_RE = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;
|
|
29
|
-
function registerChangelogCommand(program) {
|
|
30
|
-
const changelog = program.command("changelog").description("Show release history").option("-n, --limit <count>", "Number of releases to show", parseInt, 5).option("--tag <tag>", "Show a specific release (e.g., v0.9.43)").option("--all", "Show all releases").action(async (opts) => {
|
|
31
|
-
const config = await loadConfig();
|
|
32
|
-
const format = getOutputFormat(program, config);
|
|
33
|
-
const entries = await fetchChangelog({
|
|
34
|
-
limit: opts.all ? 100 : opts.limit,
|
|
35
|
-
version: opts.tag
|
|
36
|
-
});
|
|
37
|
-
if (entries.length === 0) {
|
|
38
|
-
console.log("No releases found.");
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (format === "json") {
|
|
42
|
-
console.log(formatOutput(entries, "json"));
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (opts.tag || entries.length === 1) {
|
|
46
|
-
console.log(formatChangelogEntry(entries[0]));
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
const header = "VERSION DATE TITLE";
|
|
50
|
-
const separator = "\u2500".repeat(header.length);
|
|
51
|
-
console.log(header);
|
|
52
|
-
console.log(separator);
|
|
53
|
-
for (const entry of entries) {
|
|
54
|
-
const version = entry.version.padEnd(12);
|
|
55
|
-
const date = entry.date.padEnd(12);
|
|
56
|
-
console.log(`${version} ${date} ${entry.title}`);
|
|
57
|
-
}
|
|
58
|
-
console.log("");
|
|
59
|
-
console.log(
|
|
60
|
-
`Showing ${entries.length} releases. Use --tag <tag> for details, or --all for full history.`
|
|
61
|
-
);
|
|
62
|
-
});
|
|
63
|
-
changelog.command("generate").description("Generate release notes from local git commits").option("--from <ref>", "Starting ref (default: latest v* tag)").option("--to <ref>", "Ending ref (default: HEAD)").option("--format <mode>", "Renderer: md, json, or prompt", "md").option("--repo <owner/name>", "Override auto-detected repo (e.g., yasserstudio/gpc)").option("--target <mode>", "Output target: github or play-store", "github").option("--locales <csv|auto>", "Comma-separated BCP 47 locales, or 'auto' (play-store target only)").option("--strict", "Exit non-zero if linter warnings or locale overflows are emitted").action(
|
|
64
|
-
async (opts) => {
|
|
65
|
-
const mode = opts.format;
|
|
66
|
-
if (!VALID_OUTPUT_MODES.includes(mode)) {
|
|
67
|
-
process.stderr.write(
|
|
68
|
-
`Invalid --format "${opts.format}". Valid: ${VALID_OUTPUT_MODES.join(", ")}
|
|
69
|
-
`
|
|
70
|
-
);
|
|
71
|
-
process.exitCode = 2;
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
if (!VALID_TARGETS.includes(opts.target)) {
|
|
75
|
-
process.stderr.write(
|
|
76
|
-
`Invalid --target "${opts.target}". Valid: ${VALID_TARGETS.join(", ")}
|
|
77
|
-
`
|
|
78
|
-
);
|
|
79
|
-
process.exitCode = 2;
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const target = opts.target;
|
|
83
|
-
if (opts.repo && !REPO_RE.test(opts.repo)) {
|
|
84
|
-
process.stderr.write(
|
|
85
|
-
`Invalid --repo "${opts.repo}". Expected "owner/name" (e.g., yasserstudio/gpc).
|
|
86
|
-
`
|
|
87
|
-
);
|
|
88
|
-
process.exitCode = 2;
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
if (target === "github" && opts.locales) {
|
|
92
|
-
process.stderr.write(
|
|
93
|
-
`--locales only applies to --target play-store (current target: github)
|
|
94
|
-
`
|
|
95
|
-
);
|
|
96
|
-
process.exitCode = 2;
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (target === "play-store" && !opts.locales) {
|
|
100
|
-
process.stderr.write(
|
|
101
|
-
"--target play-store requires --locales <csv|auto>\n Example: --locales en-US,fr-FR,de-DE\n Example: --locales auto (reads current Play Store listing \u2014 requires --app)\n"
|
|
102
|
-
);
|
|
103
|
-
process.exitCode = 2;
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
const generated = await generateChangelog({
|
|
107
|
-
from: opts.from,
|
|
108
|
-
to: opts.to,
|
|
109
|
-
repo: opts.repo
|
|
110
|
-
});
|
|
111
|
-
for (const w of generated.warnings) {
|
|
112
|
-
process.stderr.write(`${yellow("warn:")} ${w}
|
|
113
|
-
`);
|
|
114
|
-
}
|
|
115
|
-
if (generated.warnings.length > 0) {
|
|
116
|
-
process.stderr.write(
|
|
117
|
-
`${dim(`(${generated.warnings.length} warning${generated.warnings.length === 1 ? "" : "s"} \u2014 review before publishing)`)}
|
|
118
|
-
`
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
if (target === "github") {
|
|
122
|
-
const output2 = RENDERERS[mode](generated);
|
|
123
|
-
console.log(output2);
|
|
124
|
-
if (opts.strict && generated.warnings.length > 0) {
|
|
125
|
-
process.exitCode = 1;
|
|
126
|
-
}
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
let locales;
|
|
130
|
-
try {
|
|
131
|
-
if (opts.locales === "auto") {
|
|
132
|
-
const config = await loadConfig();
|
|
133
|
-
const packageName = resolvePackageName(program.opts()["app"], config);
|
|
134
|
-
const client = await getClient(config);
|
|
135
|
-
locales = await resolveLocales("auto", { client, packageName });
|
|
136
|
-
} else {
|
|
137
|
-
locales = await resolveLocales(opts.locales);
|
|
138
|
-
}
|
|
139
|
-
} catch (error) {
|
|
140
|
-
if (error instanceof GpcError) {
|
|
141
|
-
process.stderr.write(`${error.message}
|
|
142
|
-
`);
|
|
143
|
-
if (error.suggestion) process.stderr.write(`${dim(error.suggestion)}
|
|
144
|
-
`);
|
|
145
|
-
process.exitCode = error.exitCode;
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
throw error;
|
|
149
|
-
}
|
|
150
|
-
const { output, bundle } = renderPlayStore(generated, {
|
|
151
|
-
locales,
|
|
152
|
-
format: mode
|
|
153
|
-
});
|
|
154
|
-
console.log(output);
|
|
155
|
-
for (const lang of bundle.overflows) {
|
|
156
|
-
process.stderr.write(
|
|
157
|
-
`${yellow("warn:")} ${lang} exceeds ${bundle.limit} chars (truncated)
|
|
158
|
-
`
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
const hasOverflow = bundle.overflows.length > 0;
|
|
162
|
-
const hasWarnings = generated.warnings.length > 0;
|
|
163
|
-
if (opts.strict && (hasWarnings || hasOverflow)) {
|
|
164
|
-
process.exitCode = 1;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
export {
|
|
170
|
-
registerChangelogCommand
|
|
171
|
-
};
|
|
172
|
-
//# sourceMappingURL=changelog-OHZ4M7D6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/changelog.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport {\n fetchChangelog,\n formatChangelogEntry,\n formatOutput,\n generateChangelog,\n RENDERERS,\n renderPlayStore,\n resolveLocales,\n GpcError,\n type OutputMode,\n type PlayStoreFormat,\n} from \"@gpc-cli/core\";\nimport { loadConfig } from \"@gpc-cli/config\";\nimport { getOutputFormat } from \"../format.js\";\nimport { yellow, dim } from \"../colors.js\";\nimport { resolvePackageName, getClient } from \"../resolve.js\";\n\nconst VALID_OUTPUT_MODES: OutputMode[] = [\"md\", \"json\", \"prompt\"];\nconst VALID_TARGETS = [\"github\", \"play-store\"] as const;\ntype ChangelogTarget = (typeof VALID_TARGETS)[number];\nconst REPO_RE = /^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$/;\n\nexport function registerChangelogCommand(program: Command): void {\n const changelog = program\n .command(\"changelog\")\n .description(\"Show release history\")\n .option(\"-n, --limit <count>\", \"Number of releases to show\", parseInt, 5)\n .option(\"--tag <tag>\", \"Show a specific release (e.g., v0.9.43)\")\n .option(\"--all\", \"Show all releases\")\n .action(async (opts: { limit: number; tag?: string; all?: boolean }) => {\n const config = await loadConfig();\n const format = getOutputFormat(program, config);\n\n const entries = await fetchChangelog({\n limit: opts.all ? 100 : opts.limit,\n version: opts.tag,\n });\n\n if (entries.length === 0) {\n console.log(\"No releases found.\");\n return;\n }\n\n if (format === \"json\") {\n console.log(formatOutput(entries, \"json\"));\n return;\n }\n\n if (opts.tag || entries.length === 1) {\n console.log(formatChangelogEntry(entries[0]!));\n return;\n }\n\n const header = \"VERSION DATE TITLE\";\n const separator = \"─\".repeat(header.length);\n console.log(header);\n console.log(separator);\n for (const entry of entries) {\n const version = entry.version.padEnd(12);\n const date = entry.date.padEnd(12);\n console.log(`${version} ${date} ${entry.title}`);\n }\n console.log(\"\");\n console.log(\n `Showing ${entries.length} releases. Use --tag <tag> for details, or --all for full history.`,\n );\n });\n\n changelog\n .command(\"generate\")\n .description(\"Generate release notes from local git commits\")\n .option(\"--from <ref>\", \"Starting ref (default: latest v* tag)\")\n .option(\"--to <ref>\", \"Ending ref (default: HEAD)\")\n .option(\"--format <mode>\", \"Renderer: md, json, or prompt\", \"md\")\n .option(\"--repo <owner/name>\", \"Override auto-detected repo (e.g., yasserstudio/gpc)\")\n .option(\"--target <mode>\", \"Output target: github or play-store\", \"github\")\n .option(\"--locales <csv|auto>\", \"Comma-separated BCP 47 locales, or 'auto' (play-store target only)\")\n .option(\"--strict\", \"Exit non-zero if linter warnings or locale overflows are emitted\")\n .action(\n async (opts: {\n from?: string;\n to?: string;\n format: string;\n repo?: string;\n target: string;\n locales?: string;\n strict?: boolean;\n }) => {\n const mode = opts.format as OutputMode;\n if (!VALID_OUTPUT_MODES.includes(mode)) {\n process.stderr.write(\n `Invalid --format \"${opts.format}\". Valid: ${VALID_OUTPUT_MODES.join(\", \")}\\n`,\n );\n process.exitCode = 2;\n return;\n }\n if (!VALID_TARGETS.includes(opts.target as ChangelogTarget)) {\n process.stderr.write(\n `Invalid --target \"${opts.target}\". Valid: ${VALID_TARGETS.join(\", \")}\\n`,\n );\n process.exitCode = 2;\n return;\n }\n const target = opts.target as ChangelogTarget;\n if (opts.repo && !REPO_RE.test(opts.repo)) {\n process.stderr.write(\n `Invalid --repo \"${opts.repo}\". Expected \"owner/name\" (e.g., yasserstudio/gpc).\\n`,\n );\n process.exitCode = 2;\n return;\n }\n if (target === \"github\" && opts.locales) {\n process.stderr.write(\n `--locales only applies to --target play-store (current target: github)\\n`,\n );\n process.exitCode = 2;\n return;\n }\n if (target === \"play-store\" && !opts.locales) {\n process.stderr.write(\n \"--target play-store requires --locales <csv|auto>\\n\" +\n \" Example: --locales en-US,fr-FR,de-DE\\n\" +\n \" Example: --locales auto (reads current Play Store listing — requires --app)\\n\",\n );\n process.exitCode = 2;\n return;\n }\n\n const generated = await generateChangelog({\n from: opts.from,\n to: opts.to,\n repo: opts.repo,\n });\n\n for (const w of generated.warnings) {\n process.stderr.write(`${yellow(\"warn:\")} ${w}\\n`);\n }\n if (generated.warnings.length > 0) {\n process.stderr.write(\n `${dim(`(${generated.warnings.length} warning${generated.warnings.length === 1 ? \"\" : \"s\"} — review before publishing)`)}\\n`,\n );\n }\n\n if (target === \"github\") {\n const output = RENDERERS[mode](generated);\n console.log(output);\n if (opts.strict && generated.warnings.length > 0) {\n process.exitCode = 1;\n }\n return;\n }\n\n // target === \"play-store\"\n let locales: string[];\n try {\n if (opts.locales === \"auto\") {\n const config = await loadConfig();\n const packageName = resolvePackageName(program.opts()[\"app\"], config);\n const client = await getClient(config);\n locales = await resolveLocales(\"auto\", { client, packageName });\n } else {\n locales = await resolveLocales(opts.locales!);\n }\n } catch (error) {\n if (error instanceof GpcError) {\n process.stderr.write(`${error.message}\\n`);\n if (error.suggestion) process.stderr.write(`${dim(error.suggestion)}\\n`);\n process.exitCode = error.exitCode;\n return;\n }\n throw error;\n }\n\n const { output, bundle } = renderPlayStore(generated, {\n locales,\n format: mode as PlayStoreFormat,\n });\n console.log(output);\n\n for (const lang of bundle.overflows) {\n process.stderr.write(\n `${yellow(\"warn:\")} ${lang} exceeds ${bundle.limit} chars (truncated)\\n`,\n );\n }\n\n const hasOverflow = bundle.overflows.length > 0;\n const hasWarnings = generated.warnings.length > 0;\n if (opts.strict && (hasWarnings || hasOverflow)) {\n process.exitCode = 1;\n }\n },\n );\n}\n"],"mappings":"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","names":["output"]}
|