vercel
Version:
The command-line interface for Vercel
188 lines (185 loc) • 5.81 kB
JavaScript
import { createRequire as __createRequire } from 'node:module';
import { fileURLToPath as __fileURLToPath } from 'node:url';
import { dirname as __dirname_ } from 'node:path';
const require = __createRequire(import.meta.url);
const __filename = __fileURLToPath(import.meta.url);
const __dirname = __dirname_(__filename);
import {
fetchMetricDetailOrExit,
fetchMetricListOrExit,
formatErrorJson
} from "./chunk-ZINNI4TC.js";
import {
indent_default
} from "./chunk-A3NYPUKZ.js";
import {
formatTable
} from "./chunk-2DFWEDF7.js";
import {
validateJsonOutput
} from "./chunk-XPKWKPWA.js";
import {
schemaSubcommand
} from "./chunk-IFATV36R.js";
import {
getScope
} from "./chunk-KWDV5FZH.js";
import {
require_pluralize
} from "./chunk-X775BOSL.js";
import "./chunk-4OEA5ILS.js";
import "./chunk-ULXHXZCZ.js";
import "./chunk-CO5D46AG.js";
import "./chunk-N2T234LO.js";
import "./chunk-DKD6GTQT.js";
import {
getFlagsSpecification,
parseArguments,
printError
} from "./chunk-4GQQJY5Y.js";
import "./chunk-UGXBNJMO.js";
import "./chunk-P4QNYOFB.js";
import {
output_manager_default
} from "./chunk-ZQKJVHXY.js";
import "./chunk-S7KYDPEM.js";
import {
__toESM
} from "./chunk-TZ2YI2VH.js";
// src/commands/metrics/schema.ts
var import_pluralize = __toESM(require_pluralize(), 1);
async function schema(client, telemetry) {
let parsedArgs;
const flagsSpecification = getFlagsSpecification(schemaSubcommand.options);
try {
parsedArgs = parseArguments(client.argv.slice(2), flagsSpecification);
} catch (err) {
printError(err);
return 1;
}
const flags = parsedArgs.flags;
const positionalArgs = parsedArgs.args.slice(1);
const positionalMetric = positionalArgs[0] === "schema" ? positionalArgs[1] : positionalArgs[0];
const formatResult = validateJsonOutput(flags);
if (!formatResult.valid) {
output_manager_default.error(formatResult.error);
return 1;
}
const jsonOutput = formatResult.jsonOutput;
const metric = positionalMetric;
telemetry.trackCliArgumentMetricId(metric);
telemetry.trackCliOptionFormat(flags["--format"]);
const { team } = await getScope(client);
if (!team) {
const message = "The metrics schema API request was not authorized. Run `vercel login` to authenticate and `vercel switch` to select a team, then try again.";
if (jsonOutput) {
client.stdout.write(formatErrorJson("SCHEMA_UNAUTHORIZED", message));
} else {
output_manager_default.error(message);
}
return 1;
}
if (metric) {
const detailOrExitCode = await fetchMetricDetailOrExit(
client,
team.id,
metric,
jsonOutput
);
if (typeof detailOrExitCode === "number") {
return detailOrExitCode;
}
if (jsonOutput) {
client.stdout.write(JSON.stringify(detailOrExitCode, null, 2));
return 0;
}
output_manager_default.log(`Metric: ${metric}`);
const metricsTable = formatMetricsTable(detailOrExitCode);
if (metricsTable) {
output_manager_default.print(metricsTable);
output_manager_default.print("\n");
}
return 0;
}
const metricsOrExitCode = await fetchMetricListOrExit(
client,
team.id,
jsonOutput
);
if (typeof metricsOrExitCode === "number") {
return metricsOrExitCode;
}
if (jsonOutput) {
client.stdout.write(JSON.stringify(metricsOrExitCode, null, 2));
} else {
output_manager_default.log(`${(0, import_pluralize.default)("Metric", metricsOrExitCode.length, true)} found`);
output_manager_default.print(formatMetricListTable(metricsOrExitCode));
output_manager_default.print("\n");
}
return 0;
}
function formatMetricListTable(metrics) {
return indent_default(
formatTable(
["Metric", "Description"],
["l", "l"],
[{ rows: metrics.map((metric) => [metric.id, metric.description]) }]
),
1
);
}
function formatMetricsTable(metrics) {
if (metrics.length === 0) {
return null;
}
const dimensionsByMetric = metrics.map(
(metric) => metric.dimensions.map((dimension) => dimension.name)
);
const sharedDimensions = dimensionsByMetric[0].filter(
(dimension) => dimensionsByMetric.every(
(metricDimensions) => metricDimensions.includes(dimension)
)
);
const rows = metrics.map((metric) => {
const extraDimensions = metric.dimensions.map((dimension) => dimension.name).filter((dimension) => !sharedDimensions.includes(dimension)).map((dimension) => `+${dimension}`);
const aggregations = metric.aggregations.map(
(aggregation) => aggregation === metric.defaultAggregation ? `${aggregation} (default)` : aggregation
).join(", ");
return {
metric: metric.id,
description: metric.description,
unit: metric.unit,
aggregations,
extraDimensions
};
});
const hasExtraDimensions = rows.some((row) => row.extraDimensions.length > 0);
const tableHeaders = hasExtraDimensions ? ["Metric", "Description", "Unit", "Aggregations", "Dimensions"] : ["Metric", "Description", "Unit", "Aggregations"];
const tableRows = rows.map(
(row) => hasExtraDimensions ? [
row.metric,
row.description,
row.unit,
row.aggregations,
row.extraDimensions.join(", ") || "\u2014"
] : [row.metric, row.description, row.unit, row.aggregations]
);
const sharedDimensionsLine = sharedDimensions.length > 0 ? metrics.length === 1 ? `Dimensions:
${sharedDimensions.join(", ")}` : `Shared dimensions:
${sharedDimensions.join(", ")}` : null;
const table = indent_default(
formatTable(
tableHeaders,
hasExtraDimensions ? ["l", "l", "l", "l", "l"] : ["l", "l", "l", "l"],
[{ rows: tableRows }]
),
1
);
return sharedDimensionsLine ? `
${table}
${sharedDimensionsLine}` : `
${table}`;
}
export {
schema as default
};