@gpc-cli/cli 0.9.60 → 0.9.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -87,7 +87,7 @@ curl -fsSL https://raw.githubusercontent.com/yasserstudio/gpc/main/scripts/insta
87
87
  - [Commands reference](https://yasserstudio.github.io/gpc/commands/)
88
88
  - [CI/CD recipes](https://yasserstudio.github.io/gpc/ci-cd/)
89
89
 
90
- Free to use. 1,941 tests. 90%+ coverage. Every write operation supports `--dry-run`.
90
+ Free to use. 1,978 tests. 90%+ coverage. Every write operation supports `--dry-run`.
91
91
 
92
92
  ## Licensing
93
93
 
package/dist/bin.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  createProgram,
4
4
  handleCliError,
5
5
  loadPlugins
6
- } from "./chunk-CSNCSWUV.js";
6
+ } from "./chunk-CWJJ2BNH.js";
7
7
  import {
8
8
  checkForUpdate,
9
9
  formatUpdateNotification
@@ -57,7 +57,7 @@ if (!_isJsonMode && !_isQuiet && !_isSetupCommand && !existsSync(getUserConfigPa
57
57
  }
58
58
  await setupNetworking();
59
59
  initAudit(getConfigDir());
60
- var currentVersion = "0.9.60";
60
+ var currentVersion = "0.9.61";
61
61
  var isUpdateCommand = process.argv[2] === "update";
62
62
  var isCompletionProvider = process.argv[2] === "__complete";
63
63
  var updateCheckPromise = isUpdateCommand || isCompletionProvider ? Promise.resolve(null) : checkForUpdate(currentVersion);
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ dim,
4
+ yellow
5
+ } from "./chunk-FAN4ZITI.js";
6
+ import {
7
+ getOutputFormat
8
+ } from "./chunk-ELXAK7GI.js";
9
+
10
+ // src/commands/changelog.ts
11
+ import {
12
+ fetchChangelog,
13
+ formatChangelogEntry,
14
+ formatOutput,
15
+ generateChangelog,
16
+ RENDERERS
17
+ } from "@gpc-cli/core";
18
+ import { loadConfig } from "@gpc-cli/config";
19
+ var VALID_OUTPUT_MODES = ["md", "json", "prompt"];
20
+ var REPO_RE = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;
21
+ function registerChangelogCommand(program) {
22
+ 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) => {
23
+ const config = await loadConfig();
24
+ const format = getOutputFormat(program, config);
25
+ const entries = await fetchChangelog({
26
+ limit: opts.all ? 100 : opts.limit,
27
+ version: opts.tag
28
+ });
29
+ if (entries.length === 0) {
30
+ console.log("No releases found.");
31
+ return;
32
+ }
33
+ if (format === "json") {
34
+ console.log(formatOutput(entries, "json"));
35
+ return;
36
+ }
37
+ if (opts.tag || entries.length === 1) {
38
+ console.log(formatChangelogEntry(entries[0]));
39
+ return;
40
+ }
41
+ const header = "VERSION DATE TITLE";
42
+ const separator = "\u2500".repeat(header.length);
43
+ console.log(header);
44
+ console.log(separator);
45
+ for (const entry of entries) {
46
+ const version = entry.version.padEnd(12);
47
+ const date = entry.date.padEnd(12);
48
+ console.log(`${version} ${date} ${entry.title}`);
49
+ }
50
+ console.log("");
51
+ console.log(
52
+ `Showing ${entries.length} releases. Use --tag <tag> for details, or --all for full history.`
53
+ );
54
+ });
55
+ 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("--strict", "Exit non-zero if linter warnings are emitted").action(
56
+ async (opts) => {
57
+ const mode = opts.format;
58
+ if (!VALID_OUTPUT_MODES.includes(mode)) {
59
+ process.stderr.write(
60
+ `Invalid --format "${opts.format}". Valid: ${VALID_OUTPUT_MODES.join(", ")}
61
+ `
62
+ );
63
+ process.exitCode = 2;
64
+ return;
65
+ }
66
+ if (opts.repo && !REPO_RE.test(opts.repo)) {
67
+ process.stderr.write(
68
+ `Invalid --repo "${opts.repo}". Expected "owner/name" (e.g., yasserstudio/gpc).
69
+ `
70
+ );
71
+ process.exitCode = 2;
72
+ return;
73
+ }
74
+ const generated = await generateChangelog({
75
+ from: opts.from,
76
+ to: opts.to,
77
+ repo: opts.repo
78
+ });
79
+ for (const w of generated.warnings) {
80
+ process.stderr.write(`${yellow("warn:")} ${w}
81
+ `);
82
+ }
83
+ if (generated.warnings.length > 0) {
84
+ process.stderr.write(
85
+ `${dim(`(${generated.warnings.length} warning${generated.warnings.length === 1 ? "" : "s"} \u2014 review before publishing)`)}
86
+ `
87
+ );
88
+ }
89
+ const output = RENDERERS[mode](generated);
90
+ console.log(output);
91
+ if (opts.strict && generated.warnings.length > 0) {
92
+ process.exitCode = 1;
93
+ }
94
+ }
95
+ );
96
+ }
97
+ export {
98
+ registerChangelogCommand
99
+ };
100
+ //# sourceMappingURL=changelog-PPTJ7BHJ.js.map
@@ -0,0 +1 @@
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 type OutputMode,\n} from \"@gpc-cli/core\";\nimport { loadConfig } from \"@gpc-cli/config\";\nimport { getOutputFormat } from \"../format.js\";\nimport { yellow, dim } from \"../colors.js\";\n\nconst VALID_OUTPUT_MODES: OutputMode[] = [\"md\", \"json\", \"prompt\"];\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(\"--strict\", \"Exit non-zero if linter warnings are emitted\")\n .action(\n async (opts: {\n from?: string;\n to?: string;\n format: string;\n repo?: 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 (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\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 const output = RENDERERS[mode](generated);\n console.log(output);\n\n if (opts.strict && generated.warnings.length > 0) {\n process.exitCode = 1;\n }\n },\n );\n}\n"],"mappings":"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","names":[]}
@@ -67,25 +67,25 @@ function registerPluginCommands(program, manager) {
67
67
  import { Command } from "commander";
68
68
  async function createProgram(pluginManager) {
69
69
  const program = new Command();
70
- program.name("gpc").description("GPC \u2014 Google Play Console CLI").version("0.9.60", "-V, --version").option("-o, --output <format>", "Output format: table, json, yaml, markdown, junit").option("-v, --verbose", "Enable debug logging").option("-q, --quiet", "Suppress non-essential output").option("-a, --app <package>", "App package name").option("-p, --profile <name>", "Auth profile name").option("--no-color", "Disable colored output").option("--no-interactive", "Disable interactive prompts").option("-y, --yes", "Skip confirmation prompts").option("--dry-run", "Preview changes without executing").option("--notify [target]", "Send webhook notification on completion (slack, discord, custom)").option("--ci", "Force CI mode (JSON output, no prompts, strict exit codes)").option("-j, --json", "Shorthand for --output json").option("--apps <csv>", "Comma-separated package names for multi-app operations").showSuggestionAfterError(false);
70
+ program.name("gpc").description("GPC \u2014 Google Play Console CLI").version("0.9.61", "-V, --version").option("-o, --output <format>", "Output format: table, json, yaml, markdown, junit").option("-v, --verbose", "Enable debug logging").option("-q, --quiet", "Suppress non-essential output").option("-a, --app <package>", "App package name").option("-p, --profile <name>", "Auth profile name").option("--no-color", "Disable colored output").option("--no-interactive", "Disable interactive prompts").option("-y, --yes", "Skip confirmation prompts").option("--dry-run", "Preview changes without executing").option("--notify [target]", "Send webhook notification on completion (slack, discord, custom)").option("--ci", "Force CI mode (JSON output, no prompts, strict exit codes)").option("-j, --json", "Shorthand for --output json").option("--apps <csv>", "Comma-separated package names for multi-app operations").showSuggestionAfterError(false);
71
71
  const commandLoaders = {
72
72
  auth: async () => {
73
73
  (await import("./auth-4DRT7ZH2.js")).registerAuthCommands(program);
74
74
  },
75
75
  config: async () => {
76
- (await import("./config-ZNAM2IHA.js")).registerConfigCommands(program);
76
+ (await import("./config-FNZAEO4G.js")).registerConfigCommands(program);
77
77
  },
78
78
  doctor: async () => {
79
- (await import("./doctor-G2L2KVOO.js")).registerDoctorCommand(program);
79
+ (await import("./doctor-2DWDH7FC.js")).registerDoctorCommand(program);
80
80
  },
81
81
  update: async () => {
82
- (await import("./update-WA6X6LNQ.js")).registerUpdateCommand(program);
82
+ (await import("./update-HIJOMQGO.js")).registerUpdateCommand(program);
83
83
  },
84
84
  docs: async () => {
85
85
  (await import("./docs-GP6AEX4N.js")).registerDocsCommand(program);
86
86
  },
87
87
  changelog: async () => {
88
- (await import("./changelog-QLDFG5TV.js")).registerChangelogCommand(program);
88
+ (await import("./changelog-PPTJ7BHJ.js")).registerChangelogCommand(program);
89
89
  },
90
90
  completion: async () => {
91
91
  (await import("./completion-4I3IJK3M.js")).registerCompletionCommand(program, async () => {
@@ -193,13 +193,13 @@ async function createProgram(pluginManager) {
193
193
  (await import("./verify-H4ZUVHMZ.js")).registerVerifyCommand(program);
194
194
  },
195
195
  version: async () => {
196
- (await import("./version-DYTSDZH2.js")).registerVersionCommand(program);
196
+ (await import("./version-55ADSAN4.js")).registerVersionCommand(program);
197
197
  },
198
198
  cache: async () => {
199
199
  (await import("./cache-FGNP7Y37.js")).registerCacheCommand(program);
200
200
  },
201
201
  feedback: async () => {
202
- (await import("./feedback-WXSCASJK.js")).registerFeedbackCommand(program);
202
+ (await import("./feedback-O4HR6XLM.js")).registerFeedbackCommand(program);
203
203
  },
204
204
  quickstart: async () => {
205
205
  (await import("./quickstart-FOWM3OKT.js")).registerQuickstartCommand(program);
@@ -467,4 +467,4 @@ export {
467
467
  createProgram,
468
468
  handleCliError
469
469
  };
470
- //# sourceMappingURL=chunk-CSNCSWUV.js.map
470
+ //# sourceMappingURL=chunk-CWJJ2BNH.js.map
@@ -78,7 +78,7 @@ Configuration file created: ${path}`);
78
78
  });
79
79
  console.log("\nVerifying setup...");
80
80
  try {
81
- const { registerDoctorCommand } = await import("./doctor-G2L2KVOO.js");
81
+ const { registerDoctorCommand } = await import("./doctor-2DWDH7FC.js");
82
82
  const { Command } = await import("commander");
83
83
  const doctorProgram = new Command();
84
84
  doctorProgram.option("-o, --output <format>", "Output format").option("-j, --json", "JSON mode");
@@ -107,4 +107,4 @@ Configuration file created: ${path}`);
107
107
  export {
108
108
  registerConfigCommands
109
109
  };
110
- //# sourceMappingURL=config-ZNAM2IHA.js.map
110
+ //# sourceMappingURL=config-FNZAEO4G.js.map
@@ -141,7 +141,7 @@ function checkCiEnvironment() {
141
141
  };
142
142
  }
143
143
  async function checkGpcVersion() {
144
- const currentVersion = "0.9.60";
144
+ const currentVersion = "0.9.61";
145
145
  if (currentVersion === "0.0.0") {
146
146
  return { name: "version", status: "info", message: "GPC development build" };
147
147
  }
@@ -800,4 +800,4 @@ export {
800
800
  checkVerificationDeadline,
801
801
  registerDoctorCommand
802
802
  };
803
- //# sourceMappingURL=doctor-G2L2KVOO.js.map
803
+ //# sourceMappingURL=doctor-2DWDH7FC.js.map
@@ -9,7 +9,7 @@ import { execFile } from "child_process";
9
9
  import { listAuditEvents } from "@gpc-cli/core";
10
10
  function registerFeedbackCommand(program) {
11
11
  program.command("feedback").description("Open a pre-filled GitHub issue with system diagnostics").option("--title <title>", "Issue title").option("--print", "Print the report to stdout instead of opening a browser").action(async (opts) => {
12
- const version = "0.9.60";
12
+ const version = "0.9.61";
13
13
  let lastCommand = "";
14
14
  try {
15
15
  const events = await listAuditEvents({ limit: 3 });
@@ -67,4 +67,4 @@ ${url}`);
67
67
  export {
68
68
  registerFeedbackCommand
69
69
  };
70
- //# sourceMappingURL=feedback-WXSCASJK.js.map
70
+ //# sourceMappingURL=feedback-O4HR6XLM.js.map
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  createProgram,
4
4
  handleCliError
5
- } from "./chunk-CSNCSWUV.js";
5
+ } from "./chunk-CWJJ2BNH.js";
6
6
  export {
7
7
  createProgram,
8
8
  handleCliError
@@ -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.60";
20
+ const currentVersion = "0.9.61";
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-WA6X6LNQ.js.map
175
+ //# sourceMappingURL=update-HIJOMQGO.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.60";
10
+ const version = "0.9.61";
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-DYTSDZH2.js.map
28
+ //# sourceMappingURL=version-55ADSAN4.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gpc-cli/cli",
3
- "version": "0.9.60",
3
+ "version": "0.9.61",
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": {
@@ -19,11 +19,11 @@
19
19
  ],
20
20
  "dependencies": {
21
21
  "commander": "^14.0.3",
22
- "@gpc-cli/api": "1.0.35",
23
- "@gpc-cli/auth": "0.9.13",
24
- "@gpc-cli/config": "0.9.13",
25
- "@gpc-cli/core": "0.9.50",
26
- "@gpc-cli/plugin-sdk": "0.9.9"
22
+ "@gpc-cli/api": "1.0.36",
23
+ "@gpc-cli/auth": "0.9.14",
24
+ "@gpc-cli/config": "0.9.14",
25
+ "@gpc-cli/core": "0.9.51",
26
+ "@gpc-cli/plugin-sdk": "0.9.10"
27
27
  },
28
28
  "keywords": [
29
29
  "google-play",
@@ -1,48 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- getOutputFormat
4
- } from "./chunk-ELXAK7GI.js";
5
-
6
- // src/commands/changelog.ts
7
- import { fetchChangelog, formatChangelogEntry } from "@gpc-cli/core";
8
- import { formatOutput } from "@gpc-cli/core";
9
- import { loadConfig } from "@gpc-cli/config";
10
- function registerChangelogCommand(program) {
11
- 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) => {
12
- const config = await loadConfig();
13
- const format = getOutputFormat(program, config);
14
- const entries = await fetchChangelog({
15
- limit: opts.all ? 100 : opts.limit,
16
- version: opts.tag
17
- });
18
- if (entries.length === 0) {
19
- console.log("No releases found.");
20
- return;
21
- }
22
- if (format === "json") {
23
- console.log(formatOutput(entries, "json"));
24
- return;
25
- }
26
- if (opts.tag || entries.length === 1) {
27
- console.log(formatChangelogEntry(entries[0]));
28
- return;
29
- }
30
- const header = "VERSION DATE TITLE";
31
- const separator = "\u2500".repeat(header.length);
32
- console.log(header);
33
- console.log(separator);
34
- for (const entry of entries) {
35
- const version = entry.version.padEnd(12);
36
- const date = entry.date.padEnd(12);
37
- console.log(`${version} ${date} ${entry.title}`);
38
- }
39
- console.log("");
40
- console.log(
41
- `Showing ${entries.length} releases. Use --tag <tag> for details, or --all for full history.`
42
- );
43
- });
44
- }
45
- export {
46
- registerChangelogCommand
47
- };
48
- //# sourceMappingURL=changelog-QLDFG5TV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/changelog.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { fetchChangelog, formatChangelogEntry } from \"@gpc-cli/core\";\nimport { formatOutput } from \"@gpc-cli/core\";\nimport { loadConfig } from \"@gpc-cli/config\";\nimport { getOutputFormat } from \"../format.js\";\n\nexport function registerChangelogCommand(program: Command): void {\n 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 // Single version — show full details\n if (opts.tag || entries.length === 1) {\n console.log(formatChangelogEntry(entries[0]!));\n return;\n }\n\n // Multiple versions — table summary\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"],"mappings":";;;;;;AACA,SAAS,gBAAgB,4BAA4B;AACrD,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAGpB,SAAS,yBAAyB,SAAwB;AAC/D,UACG,QAAQ,WAAW,EACnB,YAAY,sBAAsB,EAClC,OAAO,uBAAuB,8BAA8B,UAAU,CAAC,EACvE,OAAO,eAAe,yCAAyC,EAC/D,OAAO,SAAS,mBAAmB,EACnC,OAAO,OAAO,SAAyD;AACtE,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,SAAS,gBAAgB,SAAS,MAAM;AAE9C,UAAM,UAAU,MAAM,eAAe;AAAA,MACnC,OAAO,KAAK,MAAM,MAAM,KAAK;AAAA,MAC7B,SAAS,KAAK;AAAA,IAChB,CAAC;AAED,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAI,oBAAoB;AAChC;AAAA,IACF;AAEA,QAAI,WAAW,QAAQ;AACrB,cAAQ,IAAI,aAAa,SAAS,MAAM,CAAC;AACzC;AAAA,IACF;AAGA,QAAI,KAAK,OAAO,QAAQ,WAAW,GAAG;AACpC,cAAQ,IAAI,qBAAqB,QAAQ,CAAC,CAAE,CAAC;AAC7C;AAAA,IACF;AAGA,UAAM,SAAS;AACf,UAAM,YAAY,SAAI,OAAO,OAAO,MAAM;AAC1C,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,SAAS;AACrB,eAAW,SAAS,SAAS;AAC3B,YAAM,UAAU,MAAM,QAAQ,OAAO,EAAE;AACvC,YAAM,OAAO,MAAM,KAAK,OAAO,EAAE;AACjC,cAAQ,IAAI,GAAG,OAAO,IAAI,IAAI,IAAI,MAAM,KAAK,EAAE;AAAA,IACjD;AACA,YAAQ,IAAI,EAAE;AACd,YAAQ;AAAA,MACN,WAAW,QAAQ,MAAM;AAAA,IAC3B;AAAA,EACF,CAAC;AACL;","names":[]}