@trayai/tray-sync-cli 1.0.10 → 1.0.12

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.
@@ -0,0 +1,15 @@
1
+ export async function rollbackProject(client, projectId, versionNumber) {
2
+ await client.request("POST", `/v1/projects/${projectId}/rollbacks/versions/${versionNumber}`);
3
+ }
4
+ export async function listProjectVersions(client, projectId, options = {}) {
5
+ const params = new URLSearchParams();
6
+ if (options.last !== undefined)
7
+ params.set("last", String(options.last));
8
+ const query = params.size > 0 ? `?${params}` : "";
9
+ const result = (await client.request("GET", `/v1/projects/${projectId}/versions${query}`));
10
+ return {
11
+ versions: result.elements ?? [],
12
+ nextCursor: result.pageInfo?.endCursor ?? undefined,
13
+ };
14
+ }
15
+ //# sourceMappingURL=project.js.map
@@ -1,3 +1,5 @@
1
1
  import { Command } from "commander";
2
+ import { projectCommand } from "./project.js";
2
3
  export const apiCommand = new Command("api").description("Direct, authenticated access to the Tray API");
4
+ apiCommand.addCommand(projectCommand);
3
5
  //# sourceMappingURL=api.js.map
@@ -0,0 +1,82 @@
1
+ import { Command, InvalidArgumentError } from "commander";
2
+ import { listProjectVersions, rollbackProject } from "../../api/resources/project.js";
3
+ import { isUuid } from "../../lib/uuid.js";
4
+ import { parseVersionNumber } from "../../lib/versionNumber.js";
5
+ import { OutputFormats } from "../../lib/outputFormat.js";
6
+ import { printProjectRollbackResult, printProjectVersionListTable } from "../../views/api/project.v2.js";
7
+ import { printConfirmationJson } from "../../views/api/shared.js";
8
+ import { addCommonApiOptions, apiClientFor, realDeps, runApiAction, } from "./shared.js";
9
+ const DEFAULT_VERSION_LIST_LIMIT = 5;
10
+ function parseLimit(value) {
11
+ const limit = Number(value);
12
+ if (!Number.isInteger(limit) || limit < 1) {
13
+ throw new InvalidArgumentError("--limit must be a positive integer");
14
+ }
15
+ return limit;
16
+ }
17
+ function parseProjectId(value) {
18
+ if (!isUuid(value)) {
19
+ throw new InvalidArgumentError("project id must be a UUID");
20
+ }
21
+ return value;
22
+ }
23
+ export async function runProjectRollback(deps, options) {
24
+ const client = apiClientFor(deps, options);
25
+ await rollbackProject(client, options.projectId, options.versionNumber);
26
+ if (options.format === OutputFormats.JSON) {
27
+ printConfirmationJson(deps.stdout, {
28
+ projectId: options.projectId,
29
+ versionNumber: options.versionNumber,
30
+ rolledBack: true,
31
+ });
32
+ }
33
+ else {
34
+ printProjectRollbackResult(deps.stdout, options.projectId, options.versionNumber);
35
+ }
36
+ return 0;
37
+ }
38
+ export async function runProjectVersionList(deps, options) {
39
+ const client = apiClientFor(deps, options);
40
+ const result = await listProjectVersions(client, options.projectId, {
41
+ last: options.limit ?? DEFAULT_VERSION_LIST_LIMIT,
42
+ });
43
+ if (options.format === OutputFormats.JSON) {
44
+ deps.stdout(JSON.stringify(result, null, 2));
45
+ }
46
+ else {
47
+ printProjectVersionListTable(deps.stdout, result.versions);
48
+ }
49
+ return 0;
50
+ }
51
+ export const projectCommand = new Command("project").description("Manage projects");
52
+ const versionCommand = new Command("version").description("Manage project versions");
53
+ projectCommand.addCommand(versionCommand);
54
+ addCommonApiOptions(versionCommand
55
+ .command("rollback")
56
+ .description("Roll back a project to a specific version")
57
+ .argument("<project-id>", "Tray project UUID", parseProjectId)
58
+ .requiredOption("--version-number <major.minor>", "target version number", parseVersionNumber)).action(async (projectId, opts) => {
59
+ const deps = realDeps();
60
+ await runApiAction(deps, () => runProjectRollback(deps, {
61
+ projectId,
62
+ versionNumber: opts.versionNumber,
63
+ region: opts.region,
64
+ token: opts.token,
65
+ format: opts.format,
66
+ }));
67
+ });
68
+ addCommonApiOptions(versionCommand
69
+ .command("list")
70
+ .description("List a project's most recent versions")
71
+ .argument("<project-id>", "Tray project UUID", parseProjectId)
72
+ .option("--limit <n>", `most recent versions to show (default ${DEFAULT_VERSION_LIST_LIMIT})`, parseLimit)).action(async (projectId, opts) => {
73
+ const deps = realDeps();
74
+ await runApiAction(deps, () => runProjectVersionList(deps, {
75
+ projectId,
76
+ limit: opts.limit,
77
+ region: opts.region,
78
+ token: opts.token,
79
+ format: opts.format,
80
+ }));
81
+ });
82
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1,24 @@
1
+ import ansis from "ansis";
2
+ import Table from "cli-table3";
3
+ import { SUCCESS_ICON } from "../icons.js";
4
+ export function printProjectRollbackResult(stdout, projectId, versionNumber) {
5
+ stdout(`${SUCCESS_ICON} Project ${ansis.bold(projectId)} rolled back to version ${ansis.bold(versionNumber)}.`);
6
+ }
7
+ function formatCreated(created) {
8
+ return created.replace("T", " ").slice(0, 19);
9
+ }
10
+ export function printProjectVersionListTable(stdout, versions) {
11
+ if (versions.length === 0) {
12
+ stdout("No versions found.");
13
+ return;
14
+ }
15
+ const table = new Table({
16
+ head: ["Version", "Title", "Created", "Creator"].map((h) => ansis.bold(h)),
17
+ style: { head: [] },
18
+ });
19
+ for (const version of versions) {
20
+ table.push([ansis.bold(version.versionNumber), version.title, formatCreated(version.created), version.creator]);
21
+ }
22
+ stdout(table.toString());
23
+ }
24
+ //# sourceMappingURL=project.v2.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trayai/tray-sync-cli",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "CLI tool to clone Tray projects and related assets to a local directory, and promote them between Tray environments",
5
5
  "bin": {
6
6
  "tray": "dist/cli.js"