nixelo 0.0.1
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 +98 -0
- package/dist/commands/apiKeys.d.ts +3 -0
- package/dist/commands/apiKeys.d.ts.map +1 -0
- package/dist/commands/apiKeys.js +200 -0
- package/dist/commands/apiKeys.js.map +1 -0
- package/dist/commands/auth.d.ts +7 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +201 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/automations.d.ts +3 -0
- package/dist/commands/automations.d.ts.map +1 -0
- package/dist/commands/automations.js +302 -0
- package/dist/commands/automations.js.map +1 -0
- package/dist/commands/commandTree.d.ts +10 -0
- package/dist/commands/commandTree.d.ts.map +1 -0
- package/dist/commands/commandTree.js +36 -0
- package/dist/commands/commandTree.js.map +1 -0
- package/dist/commands/completion.d.ts +6 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +101 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +133 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/documents.d.ts +3 -0
- package/dist/commands/documents.d.ts.map +1 -0
- package/dist/commands/documents.js +200 -0
- package/dist/commands/documents.js.map +1 -0
- package/dist/commands/fields.d.ts +3 -0
- package/dist/commands/fields.d.ts.map +1 -0
- package/dist/commands/fields.js +199 -0
- package/dist/commands/fields.js.map +1 -0
- package/dist/commands/filters.d.ts +3 -0
- package/dist/commands/filters.d.ts.map +1 -0
- package/dist/commands/filters.js +243 -0
- package/dist/commands/filters.js.map +1 -0
- package/dist/commands/global.d.ts +5 -0
- package/dist/commands/global.d.ts.map +1 -0
- package/dist/commands/global.js +42 -0
- package/dist/commands/global.js.map +1 -0
- package/dist/commands/index.d.ts +23 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +23 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/invites.d.ts +3 -0
- package/dist/commands/invites.d.ts.map +1 -0
- package/dist/commands/invites.js +113 -0
- package/dist/commands/invites.js.map +1 -0
- package/dist/commands/issues/filter.d.ts +19 -0
- package/dist/commands/issues/filter.d.ts.map +1 -0
- package/dist/commands/issues/filter.js +72 -0
- package/dist/commands/issues/filter.js.map +1 -0
- package/dist/commands/issues/options.d.ts +33 -0
- package/dist/commands/issues/options.d.ts.map +1 -0
- package/dist/commands/issues/options.js +68 -0
- package/dist/commands/issues/options.js.map +1 -0
- package/dist/commands/issues/output.d.ts +12 -0
- package/dist/commands/issues/output.d.ts.map +1 -0
- package/dist/commands/issues/output.js +285 -0
- package/dist/commands/issues/output.js.map +1 -0
- package/dist/commands/issues.d.ts +3 -0
- package/dist/commands/issues.d.ts.map +1 -0
- package/dist/commands/issues.js +483 -0
- package/dist/commands/issues.js.map +1 -0
- package/dist/commands/labels.d.ts +3 -0
- package/dist/commands/labels.d.ts.map +1 -0
- package/dist/commands/labels.js +222 -0
- package/dist/commands/labels.js.map +1 -0
- package/dist/commands/notifications.d.ts +3 -0
- package/dist/commands/notifications.d.ts.map +1 -0
- package/dist/commands/notifications.js +127 -0
- package/dist/commands/notifications.js.map +1 -0
- package/dist/commands/projects.d.ts +5 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +749 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/registerAll.d.ts +3 -0
- package/dist/commands/registerAll.d.ts.map +1 -0
- package/dist/commands/registerAll.js +54 -0
- package/dist/commands/registerAll.js.map +1 -0
- package/dist/commands/sprints.d.ts +3 -0
- package/dist/commands/sprints.d.ts.map +1 -0
- package/dist/commands/sprints.js +359 -0
- package/dist/commands/sprints.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +206 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/teams.d.ts +3 -0
- package/dist/commands/teams.d.ts.map +1 -0
- package/dist/commands/teams.js +435 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/templates.d.ts +3 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +264 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/time.d.ts +3 -0
- package/dist/commands/time.d.ts.map +1 -0
- package/dist/commands/time.js +191 -0
- package/dist/commands/time.js.map +1 -0
- package/dist/commands/tokens.d.ts +3 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +76 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/commands/users.d.ts +5 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/users.js +160 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/commands/version.d.ts +3 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +17 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/webhooks.d.ts +3 -0
- package/dist/commands/webhooks.d.ts.map +1 -0
- package/dist/commands/webhooks.js +407 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/commands/workspaces.d.ts +3 -0
- package/dist/commands/workspaces.d.ts.map +1 -0
- package/dist/commands/workspaces.js +424 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +20 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +80 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/convex.d.ts +1243 -0
- package/dist/lib/convex.d.ts.map +1 -0
- package/dist/lib/convex.js +675 -0
- package/dist/lib/convex.js.map +1 -0
- package/dist/lib/options.d.ts +10 -0
- package/dist/lib/options.d.ts.map +1 -0
- package/dist/lib/options.js +79 -0
- package/dist/lib/options.js.map +1 -0
- package/dist/lib/output.d.ts +19 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +60 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/project-key.d.ts +5 -0
- package/dist/lib/project-key.d.ts.map +1 -0
- package/dist/lib/project-key.js +56 -0
- package/dist/lib/project-key.js.map +1 -0
- package/dist/lib/prompt.d.ts +5 -0
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/prompt.js +28 -0
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/user-picker.d.ts +4 -0
- package/dist/lib/user-picker.d.ts.map +1 -0
- package/dist/lib/user-picker.js +57 -0
- package/dist/lib/user-picker.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/commands/documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA0JxC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+DhE"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { getDocument, getDocumentTree, listDocuments, searchDocuments } from "../lib/convex.js";
|
|
2
|
+
import { parsePositiveIntegerOption, readRequiredText } from "../lib/options.js";
|
|
3
|
+
import { getActiveOutputFormat, printError, printJson, printOutput, printRows } from "../lib/output.js";
|
|
4
|
+
import { addOutputOptions } from "./global.js";
|
|
5
|
+
const DOCUMENT_COLUMNS = [
|
|
6
|
+
{ header: "id", value: document => document.id },
|
|
7
|
+
{ header: "title", value: document => document.title },
|
|
8
|
+
{ header: "scope", value: document => document.scopeType },
|
|
9
|
+
{ header: "updatedAt", value: document => new Date(document.updatedAt).toISOString() }
|
|
10
|
+
];
|
|
11
|
+
const DOCUMENT_DETAIL_COLUMNS = [
|
|
12
|
+
{ header: "id", value: document => document.id },
|
|
13
|
+
{ header: "title", value: document => document.title },
|
|
14
|
+
{ header: "scope", value: document => document.scopeType },
|
|
15
|
+
{ header: "creator", value: document => document.creatorName },
|
|
16
|
+
{ header: "public", value: document => document.isPublic },
|
|
17
|
+
{ header: "archived", value: document => document.isArchived },
|
|
18
|
+
{ header: "locked", value: document => document.isLocked },
|
|
19
|
+
{ header: "createdAt", value: document => new Date(document.createdAt).toISOString() },
|
|
20
|
+
{ header: "updatedAt", value: document => new Date(document.updatedAt).toISOString() }
|
|
21
|
+
];
|
|
22
|
+
const DOCUMENT_TREE_COLUMNS = [
|
|
23
|
+
{ header: "depth", value: document => document.depth },
|
|
24
|
+
{ header: "id", value: document => document.id },
|
|
25
|
+
{ header: "parentId", value: document => document.parentId },
|
|
26
|
+
{ header: "title", value: document => document.title },
|
|
27
|
+
{ header: "scope", value: document => document.scopeType },
|
|
28
|
+
{ header: "order", value: document => document.order }
|
|
29
|
+
];
|
|
30
|
+
function readDocumentListOptions(opts) {
|
|
31
|
+
const scopes = [opts.workspace, opts.team, opts.project].filter(value => value !== undefined);
|
|
32
|
+
if (scopes.length > 1) {
|
|
33
|
+
throw new Error("Pass only one of --workspace, --team, or --project.");
|
|
34
|
+
}
|
|
35
|
+
const options = {};
|
|
36
|
+
const limit = parsePositiveIntegerOption(opts.limit);
|
|
37
|
+
if (limit !== undefined)
|
|
38
|
+
options.limit = limit;
|
|
39
|
+
if (opts.workspace !== undefined)
|
|
40
|
+
options.workspace = opts.workspace;
|
|
41
|
+
if (opts.team !== undefined)
|
|
42
|
+
options.team = opts.team;
|
|
43
|
+
if (opts.project !== undefined)
|
|
44
|
+
options.project = opts.project;
|
|
45
|
+
return options;
|
|
46
|
+
}
|
|
47
|
+
function printDocumentList(result) {
|
|
48
|
+
const format = getActiveOutputFormat();
|
|
49
|
+
if (format === "json") {
|
|
50
|
+
printJson(result);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!result) {
|
|
54
|
+
if (format === "csv")
|
|
55
|
+
printRows([], DOCUMENT_COLUMNS, format);
|
|
56
|
+
else
|
|
57
|
+
printOutput("Document scope not found or inaccessible.");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (result.documents.length === 0 && format === "table") {
|
|
61
|
+
printOutput("No documents found.");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
printRows(result.documents, DOCUMENT_COLUMNS, format);
|
|
65
|
+
if (result.truncated && format === "table") {
|
|
66
|
+
printOutput("Results truncated; narrow the scope or increase --limit.");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function formatDocumentScope(document) {
|
|
70
|
+
if (document.scopeType === "project")
|
|
71
|
+
return `project ${document.projectKey ?? document.projectId}`;
|
|
72
|
+
if (document.scopeType === "team")
|
|
73
|
+
return `team ${document.teamSlug ?? document.teamId}`;
|
|
74
|
+
if (document.scopeType === "workspace") {
|
|
75
|
+
return `workspace ${document.workspaceSlug ?? document.workspaceId}`;
|
|
76
|
+
}
|
|
77
|
+
return "organization";
|
|
78
|
+
}
|
|
79
|
+
function printDocumentDetail(document, id) {
|
|
80
|
+
const format = getActiveOutputFormat();
|
|
81
|
+
if (format === "json") {
|
|
82
|
+
printJson(document);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (!document) {
|
|
86
|
+
if (format === "csv")
|
|
87
|
+
printRows([], DOCUMENT_DETAIL_COLUMNS, format);
|
|
88
|
+
else
|
|
89
|
+
printOutput(`Document ${id} not found or inaccessible.`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (format === "csv") {
|
|
93
|
+
printRows([document], DOCUMENT_DETAIL_COLUMNS, format);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
printOutput(`${document.title} (${document.id})`);
|
|
97
|
+
printOutput(`Scope: ${formatDocumentScope(document)}`);
|
|
98
|
+
printOutput(`Creator: ${document.creatorName} (${document.creatorId})`);
|
|
99
|
+
printOutput(`Visibility: ${document.isPublic ? "public" : "private"}`);
|
|
100
|
+
printOutput(`Created: ${new Date(document.createdAt).toISOString()}`);
|
|
101
|
+
printOutput(`Updated: ${new Date(document.updatedAt).toISOString()}`);
|
|
102
|
+
if (document.isArchived)
|
|
103
|
+
printOutput("Archived: yes");
|
|
104
|
+
if (document.isLocked)
|
|
105
|
+
printOutput("Locked: yes");
|
|
106
|
+
if (document.parentId)
|
|
107
|
+
printOutput(`Parent: ${document.parentId}`);
|
|
108
|
+
}
|
|
109
|
+
function printDocumentTree(result) {
|
|
110
|
+
const format = getActiveOutputFormat();
|
|
111
|
+
if (format === "json") {
|
|
112
|
+
printJson(result);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (!result) {
|
|
116
|
+
if (format === "csv")
|
|
117
|
+
printRows([], DOCUMENT_TREE_COLUMNS, format);
|
|
118
|
+
else
|
|
119
|
+
printOutput("Document scope not found or inaccessible.");
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (result.nodes.length === 0 && format === "table") {
|
|
123
|
+
printOutput("No documents found.");
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (format === "csv") {
|
|
127
|
+
printRows(result.nodes, DOCUMENT_TREE_COLUMNS, format);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
for (const node of result.nodes) {
|
|
131
|
+
printOutput(`${" ".repeat(node.depth)}${node.title} (${node.id})`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (result.truncated && format === "table") {
|
|
135
|
+
printOutput("Results truncated; narrow the scope or increase --limit.");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export function registerDocumentsCommands(program) {
|
|
139
|
+
const documentsCmd = program.command("docs").description("Manage documents");
|
|
140
|
+
addOutputOptions(documentsCmd.command("list"))
|
|
141
|
+
.option("--workspace <slug>", "Limit results to a workspace and its descendants")
|
|
142
|
+
.option("--team <slug>", "Limit results to a team and its projects")
|
|
143
|
+
.option("--project <key>", "Limit results to a project")
|
|
144
|
+
.option("-n, --limit <number>", "Maximum documents to return")
|
|
145
|
+
.description("List accessible documents")
|
|
146
|
+
.action(async (opts) => {
|
|
147
|
+
try {
|
|
148
|
+
printDocumentList(await listDocuments(readDocumentListOptions(opts)));
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
printError("Failed:", error instanceof Error ? error.message : error);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
addOutputOptions(documentsCmd
|
|
156
|
+
.command("view")
|
|
157
|
+
.argument("<id>", "Document ID")
|
|
158
|
+
.description("View document metadata")).action(async (id) => {
|
|
159
|
+
try {
|
|
160
|
+
const documentId = readRequiredText(id, "Document ID", "<id>");
|
|
161
|
+
printDocumentDetail(await getDocument(documentId), documentId);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
printError("Failed:", error instanceof Error ? error.message : error);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
addOutputOptions(documentsCmd.command("search").argument("<query>", "Document title query"))
|
|
169
|
+
.option("--workspace <slug>", "Limit results to a workspace and its descendants")
|
|
170
|
+
.option("--team <slug>", "Limit results to a team and its projects")
|
|
171
|
+
.option("--project <key>", "Limit results to a project")
|
|
172
|
+
.option("-n, --limit <number>", "Maximum documents to return")
|
|
173
|
+
.description("Search accessible document titles")
|
|
174
|
+
.action(async (query, opts) => {
|
|
175
|
+
try {
|
|
176
|
+
const searchQuery = readRequiredText(query, "Search query", "<query>");
|
|
177
|
+
printDocumentList(await searchDocuments(searchQuery, readDocumentListOptions(opts)));
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
printError("Failed:", error instanceof Error ? error.message : error);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
addOutputOptions(documentsCmd.command("tree"))
|
|
185
|
+
.option("--workspace <slug>", "Limit results to a workspace and its descendants")
|
|
186
|
+
.option("--team <slug>", "Limit results to a team and its projects")
|
|
187
|
+
.option("--project <key>", "Limit results to a project")
|
|
188
|
+
.option("-n, --limit <number>", "Maximum documents to return")
|
|
189
|
+
.description("Show the accessible document hierarchy")
|
|
190
|
+
.action(async (opts) => {
|
|
191
|
+
try {
|
|
192
|
+
printDocumentTree(await getDocumentTree(readDocumentListOptions(opts)));
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
printError("Failed:", error instanceof Error ? error.message : error);
|
|
196
|
+
process.exit(1);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/commands/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/commands/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsLxC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsE5D"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { CUSTOM_FIELD_TYPE_VALUES, createCustomField, listCustomFields, removeCustomField, updateCustomField } from "../lib/convex.js";
|
|
2
|
+
import { parseCommaSeparatedListOption, parsePositiveIntegerOption, readOptionalText, readRequiredText } from "../lib/options.js";
|
|
3
|
+
import { getActiveOutputFormat, printError, printJson, printOutput, printRows } from "../lib/output.js";
|
|
4
|
+
import { resolveRequiredProjectKey } from "../lib/project-key.js";
|
|
5
|
+
import { requireConfirmation } from "../lib/prompt.js";
|
|
6
|
+
import { addOutputOptions } from "./global.js";
|
|
7
|
+
const CUSTOM_FIELD_COLUMNS = [
|
|
8
|
+
{ header: "id", value: field => field.id },
|
|
9
|
+
{ header: "key", value: field => field.fieldKey },
|
|
10
|
+
{ header: "name", value: field => field.name },
|
|
11
|
+
{ header: "type", value: field => field.fieldType },
|
|
12
|
+
{ header: "required", value: field => field.isRequired },
|
|
13
|
+
{ header: "options", value: field => field.options?.join(", ") ?? "" }
|
|
14
|
+
];
|
|
15
|
+
const CUSTOM_FIELD_TYPE_SET = new Set(CUSTOM_FIELD_TYPE_VALUES);
|
|
16
|
+
function isCustomFieldType(value) {
|
|
17
|
+
return CUSTOM_FIELD_TYPE_SET.has(value);
|
|
18
|
+
}
|
|
19
|
+
function readCustomFieldType(value) {
|
|
20
|
+
const fieldType = readRequiredText(value, "Custom field type", "--type");
|
|
21
|
+
if (!isCustomFieldType(fieldType)) {
|
|
22
|
+
throw new Error(`Custom field type must be one of: ${CUSTOM_FIELD_TYPE_VALUES.join(", ")}.`);
|
|
23
|
+
}
|
|
24
|
+
return fieldType;
|
|
25
|
+
}
|
|
26
|
+
function readCustomFieldCreateInput(projectKey, opts) {
|
|
27
|
+
return {
|
|
28
|
+
description: readOptionalText(opts.description, "Custom field description", "--description"),
|
|
29
|
+
fieldKey: readRequiredText(opts.key, "Custom field key", "--key"),
|
|
30
|
+
fieldType: readCustomFieldType(opts.type),
|
|
31
|
+
isRequired: opts.required ?? false,
|
|
32
|
+
name: readRequiredText(opts.name, "Custom field name", "--name"),
|
|
33
|
+
options: parseCommaSeparatedListOption(opts.options),
|
|
34
|
+
projectKey
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function readCustomFieldUpdateInput(id, opts) {
|
|
38
|
+
if (opts.required && opts.optional) {
|
|
39
|
+
throw new Error("Use either --required or --optional, not both.");
|
|
40
|
+
}
|
|
41
|
+
const input = { id: readRequiredText(id, "Custom field ID", "<id>") };
|
|
42
|
+
if (opts.name !== undefined)
|
|
43
|
+
input.name = readOptionalText(opts.name, "Custom field name", "--name");
|
|
44
|
+
if (opts.description !== undefined) {
|
|
45
|
+
input.description = readOptionalText(opts.description, "Custom field description", "--description");
|
|
46
|
+
}
|
|
47
|
+
if (opts.options !== undefined)
|
|
48
|
+
input.options = parseCommaSeparatedListOption(opts.options);
|
|
49
|
+
if (opts.required)
|
|
50
|
+
input.isRequired = true;
|
|
51
|
+
if (opts.optional)
|
|
52
|
+
input.isRequired = false;
|
|
53
|
+
if (Object.keys(input).length === 1)
|
|
54
|
+
throw new Error("Pass at least one custom field update option.");
|
|
55
|
+
return input;
|
|
56
|
+
}
|
|
57
|
+
function printCustomFields(result, projectKey) {
|
|
58
|
+
const format = getActiveOutputFormat();
|
|
59
|
+
if (format === "json") {
|
|
60
|
+
printJson(result);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!result) {
|
|
64
|
+
if (format === "csv")
|
|
65
|
+
printRows([], CUSTOM_FIELD_COLUMNS, format);
|
|
66
|
+
else
|
|
67
|
+
printOutput(`Project ${projectKey} not found or inaccessible.`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (result.fields.length === 0 && format === "table") {
|
|
71
|
+
printOutput("No custom fields found.");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
printRows(result.fields, CUSTOM_FIELD_COLUMNS, format);
|
|
75
|
+
if (result.truncated && format === "table")
|
|
76
|
+
printOutput("Results truncated; increase --limit.");
|
|
77
|
+
}
|
|
78
|
+
function printCreatedCustomField(field, projectKey) {
|
|
79
|
+
const format = getActiveOutputFormat();
|
|
80
|
+
if (!field) {
|
|
81
|
+
if (format === "json")
|
|
82
|
+
printJson(null);
|
|
83
|
+
else if (format === "csv")
|
|
84
|
+
printRows([], CUSTOM_FIELD_COLUMNS, format);
|
|
85
|
+
else
|
|
86
|
+
printOutput(`Project ${projectKey} not found or inaccessible.`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (format === "json")
|
|
90
|
+
printJson(field);
|
|
91
|
+
else if (format === "table")
|
|
92
|
+
printOutput(`Created custom field ${field.name} (${field.id}).`);
|
|
93
|
+
else
|
|
94
|
+
printRows([field], CUSTOM_FIELD_COLUMNS, format);
|
|
95
|
+
}
|
|
96
|
+
function printUpdatedCustomField(field) {
|
|
97
|
+
const format = getActiveOutputFormat();
|
|
98
|
+
if (!field) {
|
|
99
|
+
if (format === "json")
|
|
100
|
+
printJson(null);
|
|
101
|
+
else if (format === "csv")
|
|
102
|
+
printRows([], CUSTOM_FIELD_COLUMNS, format);
|
|
103
|
+
else
|
|
104
|
+
printOutput("Custom field not found or inaccessible.");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (format === "json")
|
|
108
|
+
printJson(field);
|
|
109
|
+
else if (format === "table")
|
|
110
|
+
printOutput(`Updated custom field ${field.name} (${field.id}).`);
|
|
111
|
+
else
|
|
112
|
+
printRows([field], CUSTOM_FIELD_COLUMNS, format);
|
|
113
|
+
}
|
|
114
|
+
function printRemovedCustomField(result, id) {
|
|
115
|
+
const format = getActiveOutputFormat();
|
|
116
|
+
if (format === "json") {
|
|
117
|
+
printJson(result);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (!result) {
|
|
121
|
+
printOutput("Custom field not found or inaccessible.");
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (format === "csv") {
|
|
125
|
+
printRows([result], [
|
|
126
|
+
{ header: "id", value: item => item.id },
|
|
127
|
+
{ header: "deleted", value: item => item.deleted }
|
|
128
|
+
], format);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
printOutput(`Removed custom field ${id}.`);
|
|
132
|
+
}
|
|
133
|
+
export function registerFieldCommands(program) {
|
|
134
|
+
const fieldsCmd = program.command("fields").description("Manage project custom fields");
|
|
135
|
+
addOutputOptions(fieldsCmd.command("list"))
|
|
136
|
+
.option("-p, --project <key>", "Project key; defaults to config.defaultProject")
|
|
137
|
+
.option("-n, --limit <number>", "Maximum custom fields", "20")
|
|
138
|
+
.description("List project custom fields")
|
|
139
|
+
.action(async (opts) => {
|
|
140
|
+
try {
|
|
141
|
+
const projectKey = await resolveRequiredProjectKey(opts.project);
|
|
142
|
+
printCustomFields(await listCustomFields(projectKey, { limit: parsePositiveIntegerOption(opts.limit) }), projectKey);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
printError("Failed:", error instanceof Error ? error.message : error);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
addOutputOptions(fieldsCmd.command("create"))
|
|
150
|
+
.option("-p, --project <key>", "Project key; defaults to config.defaultProject")
|
|
151
|
+
.requiredOption("-n, --name <name>", "Custom field name")
|
|
152
|
+
.requiredOption("-k, --key <key>", "Stable custom field key")
|
|
153
|
+
.requiredOption("-t, --type <type>", "Custom field type")
|
|
154
|
+
.option("--options <values>", "Comma-separated select options")
|
|
155
|
+
.option("--required", "Require a value for this field", false)
|
|
156
|
+
.option("--description <text>", "Custom field description")
|
|
157
|
+
.description("Create a project custom field")
|
|
158
|
+
.action(async (opts) => {
|
|
159
|
+
try {
|
|
160
|
+
const projectKey = await resolveRequiredProjectKey(opts.project);
|
|
161
|
+
printCreatedCustomField(await createCustomField(readCustomFieldCreateInput(projectKey, opts)), projectKey);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
printError("Failed:", error instanceof Error ? error.message : error);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
addOutputOptions(fieldsCmd.command("update <id>"))
|
|
169
|
+
.option("-n, --name <name>", "Custom field name")
|
|
170
|
+
.option("--options <values>", "Comma-separated select options; pass an empty value to clear")
|
|
171
|
+
.option("--required", "Require a value for this field")
|
|
172
|
+
.option("--optional", "Do not require a value for this field")
|
|
173
|
+
.option("--description <text>", "Custom field description")
|
|
174
|
+
.description("Update a project custom field")
|
|
175
|
+
.action(async (id, opts) => {
|
|
176
|
+
try {
|
|
177
|
+
printUpdatedCustomField(await updateCustomField(readCustomFieldUpdateInput(id, opts)));
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
printError("Failed:", error instanceof Error ? error.message : error);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
addOutputOptions(fieldsCmd.command("remove <id>"))
|
|
185
|
+
.option("-y, --yes", "Confirm custom field removal")
|
|
186
|
+
.description("Remove a project custom field and its values")
|
|
187
|
+
.action(async (id, opts) => {
|
|
188
|
+
try {
|
|
189
|
+
const fieldId = readRequiredText(id, "Custom field ID", "<id>");
|
|
190
|
+
await requireConfirmation(`Remove custom field ${fieldId}?`, opts.yes === true);
|
|
191
|
+
printRemovedCustomField(await removeCustomField(fieldId), fieldId);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
printError("Failed:", error instanceof Error ? error.message : error);
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/commands/fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/commands/filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6KxC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoF7D"}
|