@platforma-sdk/pl-cli 0.7.70 → 0.7.72

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.
@@ -1,40 +1,33 @@
1
- import { Args, Flags } from "@oclif/core";
2
- import { PlCommand } from "../../base_command";
1
+ import { Command, Option } from "commander";
2
+ import { connect } from "../../base_command";
3
+ import { addOptions, GlobalOptions, UserAuthOptions, AdminTargetOptions } from "../../cmd-opts";
3
4
  import { resolveProject, renameProject } from "../../project_ops";
4
5
  import { outputJson, outputText } from "../../output";
5
6
  import { resourceIdToString } from "@milaboratories/pl-client";
6
7
 
7
- export default class ProjectRename extends PlCommand {
8
- static override description = "Rename a project.";
8
+ export default function projectRenameCommand(): Command {
9
+ const cmd = new Command("rename").description("Rename a project.");
9
10
 
10
- static override args = {
11
- project: Args.string({
12
- description: "Project ID or label",
13
- required: true,
14
- }),
15
- };
11
+ cmd.argument("<project>", "Project ID or label");
12
+ addOptions(cmd, GlobalOptions(), UserAuthOptions(), AdminTargetOptions());
13
+ cmd.addOption(new Option("-n, --name <name>", "New name for the project").makeOptionMandatory());
16
14
 
17
- static override flags = {
18
- ...PlCommand.baseFlags,
19
- name: Flags.string({
20
- char: "n",
21
- summary: "New name for the project",
22
- helpValue: "<name>",
23
- required: true,
24
- }),
25
- };
15
+ cmd.action(async (project: string, flags) => {
16
+ const { pl, projectListRid } = await connect(flags);
17
+ try {
18
+ const { id, rid } = await resolveProject(pl, projectListRid, project);
26
19
 
27
- public async run(): Promise<void> {
28
- const { args, flags } = await this.parse(ProjectRename);
29
- const { pl, projectListRid } = await this.connect(flags);
30
- const { id, rid } = await resolveProject(pl, projectListRid, args.project);
20
+ await renameProject(pl, rid, flags.name);
31
21
 
32
- await renameProject(pl, rid, flags.name);
33
-
34
- if (flags.format === "json") {
35
- outputJson({ id, rid: resourceIdToString(rid), label: flags.name });
36
- } else {
37
- outputText(`Renamed project to "${flags.name}"`);
22
+ if (flags.format === "json") {
23
+ outputJson({ id, rid: resourceIdToString(rid), label: flags.name });
24
+ } else {
25
+ outputText(`Renamed project to "${flags.name}"`);
26
+ }
27
+ } finally {
28
+ await pl.close();
38
29
  }
39
- }
30
+ });
31
+
32
+ return cmd;
40
33
  }
package/src/cmd-opts.ts CHANGED
@@ -1,60 +1,43 @@
1
- import { Flags } from "@oclif/core";
1
+ import { Command, Option } from "commander";
2
2
 
3
- export const GlobalFlags = {
4
- address: Flags.string({
5
- char: "a",
6
- summary: "Platforma server address",
7
- helpValue: "<url>",
8
- env: "PL_ADDRESS",
9
- required: true,
10
- }),
11
- format: Flags.string({
12
- char: "f",
13
- summary: "Output format",
14
- options: ["text", "json"],
15
- default: "text",
16
- }),
17
- };
3
+ /** Add one or more groups of options to a command, preserving group order. */
4
+ export function addOptions(cmd: Command, ...optionGroups: Option[][]): Command {
5
+ for (const group of optionGroups) {
6
+ for (const opt of group) cmd.addOption(opt);
7
+ }
8
+ return cmd;
9
+ }
18
10
 
19
- export const UserAuthFlags = {
20
- user: Flags.string({
21
- char: "u",
22
- summary: "Username for authentication",
23
- env: "PL_USER",
24
- }),
25
- password: Flags.string({
26
- char: "p",
27
- summary: "Password for authentication",
28
- env: "PL_PASSWORD",
29
- }),
30
- };
11
+ export const GlobalOptions = (): Option[] => [
12
+ new Option("-a, --address <url>", "Platforma server address")
13
+ .env("PL_ADDRESS")
14
+ .makeOptionMandatory(),
15
+ new Option("-f, --format <format>", "Output format").choices(["text", "json"]).default("text"),
16
+ ];
17
+
18
+ export const UserAuthOptions = (): Option[] => [
19
+ new Option("-u, --user <user>", "Username for authentication").env("PL_USER"),
20
+ new Option("-p, --password <password>", "Password for authentication").env("PL_PASSWORD"),
21
+ ];
31
22
 
32
23
  /** Admin credentials only (for purely admin commands like copy-project). */
33
- export const AdminAuthFlags = {
34
- "admin-user": Flags.string({
35
- summary: "Admin/controller username",
36
- env: "PL_ADMIN_USER",
37
- required: true,
38
- }),
39
- "admin-password": Flags.string({
40
- summary: "Admin/controller password",
41
- env: "PL_ADMIN_PASSWORD",
42
- required: true,
43
- }),
44
- };
24
+ export const AdminAuthOptions = (): Option[] => [
25
+ new Option("--admin-user <user>", "Admin/controller username")
26
+ .env("PL_ADMIN_USER")
27
+ .makeOptionMandatory(),
28
+ new Option("--admin-password <password>", "Admin/controller password")
29
+ .env("PL_ADMIN_PASSWORD")
30
+ .makeOptionMandatory(),
31
+ ];
45
32
 
46
33
  /** Admin credentials + target user (for regular commands that can optionally operate on another user). */
47
- export const AdminTargetFlags = {
48
- "admin-user": Flags.string({
49
- summary: "Admin/controller username (enables admin mode)",
50
- env: "PL_ADMIN_USER",
51
- }),
52
- "admin-password": Flags.string({
53
- summary: "Admin/controller password",
54
- env: "PL_ADMIN_PASSWORD",
55
- }),
56
- "target-user": Flags.string({
57
- summary: "Operate on this user's data (requires admin credentials)",
58
- env: "PL_TARGET_USER",
59
- }),
60
- };
34
+ export const AdminTargetOptions = (): Option[] => [
35
+ new Option("--admin-user <user>", "Admin/controller username (enables admin mode)").env(
36
+ "PL_ADMIN_USER",
37
+ ),
38
+ new Option("--admin-password <password>", "Admin/controller password").env("PL_ADMIN_PASSWORD"),
39
+ new Option(
40
+ "--target-user <user>",
41
+ "Operate on this user's data (requires admin credentials)",
42
+ ).env("PL_TARGET_USER"),
43
+ ];
@@ -1,14 +0,0 @@
1
- import { default as ProjectList } from './project/list';
2
- import { default as ProjectInfo } from './project/info';
3
- import { default as ProjectDuplicate } from './project/duplicate';
4
- import { default as ProjectRename } from './project/rename';
5
- import { default as ProjectDelete } from './project/delete';
6
- import { default as AdminCopyProject } from './admin/copy-project';
7
- export declare const COMMANDS: {
8
- "project:list": typeof ProjectList;
9
- "project:info": typeof ProjectInfo;
10
- "project:duplicate": typeof ProjectDuplicate;
11
- "project:rename": typeof ProjectRename;
12
- "project:delete": typeof ProjectDelete;
13
- "admin:copy-project": typeof AdminCopyProject;
14
- };
package/src/cmd/index.ts DELETED
@@ -1,17 +0,0 @@
1
- // Command index for oclif. Run `pnpm run oclif:index` to regenerate.
2
-
3
- import ProjectList from "./project/list";
4
- import ProjectInfo from "./project/info";
5
- import ProjectDuplicate from "./project/duplicate";
6
- import ProjectRename from "./project/rename";
7
- import ProjectDelete from "./project/delete";
8
- import AdminCopyProject from "./admin/copy-project";
9
-
10
- export const COMMANDS = {
11
- "project:list": ProjectList,
12
- "project:info": ProjectInfo,
13
- "project:duplicate": ProjectDuplicate,
14
- "project:rename": ProjectRename,
15
- "project:delete": ProjectDelete,
16
- "admin:copy-project": AdminCopyProject,
17
- };