@eyeauras/youtrack-cli 0.1.0

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.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +349 -0
  3. package/dist/src/agile-commands.d.ts +2 -0
  4. package/dist/src/agile-commands.d.ts.map +1 -0
  5. package/dist/src/agile-commands.js +18 -0
  6. package/dist/src/agile-commands.js.map +1 -0
  7. package/dist/src/agile.d.ts +8 -0
  8. package/dist/src/agile.d.ts.map +1 -0
  9. package/dist/src/agile.js +64 -0
  10. package/dist/src/agile.js.map +1 -0
  11. package/dist/src/article-extras-commands.d.ts +2 -0
  12. package/dist/src/article-extras-commands.d.ts.map +1 -0
  13. package/dist/src/article-extras-commands.js +27 -0
  14. package/dist/src/article-extras-commands.js.map +1 -0
  15. package/dist/src/article-extras.d.ts +8 -0
  16. package/dist/src/article-extras.d.ts.map +1 -0
  17. package/dist/src/article-extras.js +22 -0
  18. package/dist/src/article-extras.js.map +1 -0
  19. package/dist/src/articles-commands.d.ts +3 -0
  20. package/dist/src/articles-commands.d.ts.map +1 -0
  21. package/dist/src/articles-commands.js +25 -0
  22. package/dist/src/articles-commands.js.map +1 -0
  23. package/dist/src/articles.d.ts +11 -0
  24. package/dist/src/articles.d.ts.map +1 -0
  25. package/dist/src/articles.js +41 -0
  26. package/dist/src/articles.js.map +1 -0
  27. package/dist/src/attachment-download-commands.d.ts +2 -0
  28. package/dist/src/attachment-download-commands.d.ts.map +1 -0
  29. package/dist/src/attachment-download-commands.js +19 -0
  30. package/dist/src/attachment-download-commands.js.map +1 -0
  31. package/dist/src/attachment-download.d.ts +16 -0
  32. package/dist/src/attachment-download.d.ts.map +1 -0
  33. package/dist/src/attachment-download.js +127 -0
  34. package/dist/src/attachment-download.js.map +1 -0
  35. package/dist/src/attachment-form.d.ts +2 -0
  36. package/dist/src/attachment-form.d.ts.map +1 -0
  37. package/dist/src/attachment-form.js +20 -0
  38. package/dist/src/attachment-form.js.map +1 -0
  39. package/dist/src/bin.d.ts +3 -0
  40. package/dist/src/bin.d.ts.map +1 -0
  41. package/dist/src/bin.js +10 -0
  42. package/dist/src/bin.js.map +1 -0
  43. package/dist/src/bundle-values-commands.d.ts +3 -0
  44. package/dist/src/bundle-values-commands.d.ts.map +1 -0
  45. package/dist/src/bundle-values-commands.js +30 -0
  46. package/dist/src/bundle-values-commands.js.map +1 -0
  47. package/dist/src/bundle-values.d.ts +13 -0
  48. package/dist/src/bundle-values.d.ts.map +1 -0
  49. package/dist/src/bundle-values.js +24 -0
  50. package/dist/src/bundle-values.js.map +1 -0
  51. package/dist/src/cli-support.d.ts +19 -0
  52. package/dist/src/cli-support.d.ts.map +1 -0
  53. package/dist/src/cli-support.js +81 -0
  54. package/dist/src/cli-support.js.map +1 -0
  55. package/dist/src/cli.d.ts +3 -0
  56. package/dist/src/cli.d.ts.map +1 -0
  57. package/dist/src/cli.js +99 -0
  58. package/dist/src/cli.js.map +1 -0
  59. package/dist/src/client.d.ts +62 -0
  60. package/dist/src/client.d.ts.map +1 -0
  61. package/dist/src/client.js +348 -0
  62. package/dist/src/client.js.map +1 -0
  63. package/dist/src/field-catalog-commands.d.ts +4 -0
  64. package/dist/src/field-catalog-commands.d.ts.map +1 -0
  65. package/dist/src/field-catalog-commands.js +31 -0
  66. package/dist/src/field-catalog-commands.js.map +1 -0
  67. package/dist/src/field-catalog.d.ts +12 -0
  68. package/dist/src/field-catalog.d.ts.map +1 -0
  69. package/dist/src/field-catalog.js +22 -0
  70. package/dist/src/field-catalog.js.map +1 -0
  71. package/dist/src/group-directory-commands.d.ts +3 -0
  72. package/dist/src/group-directory-commands.d.ts.map +1 -0
  73. package/dist/src/group-directory-commands.js +37 -0
  74. package/dist/src/group-directory-commands.js.map +1 -0
  75. package/dist/src/group-directory.d.ts +12 -0
  76. package/dist/src/group-directory.d.ts.map +1 -0
  77. package/dist/src/group-directory.js +23 -0
  78. package/dist/src/group-directory.js.map +1 -0
  79. package/dist/src/index.d.ts +18 -0
  80. package/dist/src/index.d.ts.map +1 -0
  81. package/dist/src/index.js +18 -0
  82. package/dist/src/index.js.map +1 -0
  83. package/dist/src/issue-attachments-commands.d.ts +2 -0
  84. package/dist/src/issue-attachments-commands.d.ts.map +1 -0
  85. package/dist/src/issue-attachments-commands.js +21 -0
  86. package/dist/src/issue-attachments-commands.js.map +1 -0
  87. package/dist/src/issue-attachments.d.ts +5 -0
  88. package/dist/src/issue-attachments.d.ts.map +1 -0
  89. package/dist/src/issue-attachments.js +11 -0
  90. package/dist/src/issue-attachments.js.map +1 -0
  91. package/dist/src/issue-context-commands.d.ts +4 -0
  92. package/dist/src/issue-context-commands.d.ts.map +1 -0
  93. package/dist/src/issue-context-commands.js +47 -0
  94. package/dist/src/issue-context-commands.js.map +1 -0
  95. package/dist/src/issue-context.d.ts +15 -0
  96. package/dist/src/issue-context.d.ts.map +1 -0
  97. package/dist/src/issue-context.js +60 -0
  98. package/dist/src/issue-context.js.map +1 -0
  99. package/dist/src/issue-fields-commands.d.ts +5 -0
  100. package/dist/src/issue-fields-commands.d.ts.map +1 -0
  101. package/dist/src/issue-fields-commands.js +21 -0
  102. package/dist/src/issue-fields-commands.js.map +1 -0
  103. package/dist/src/issue-fields.d.ts +9 -0
  104. package/dist/src/issue-fields.d.ts.map +1 -0
  105. package/dist/src/issue-fields.js +101 -0
  106. package/dist/src/issue-fields.js.map +1 -0
  107. package/dist/src/issue-query-commands.d.ts +3 -0
  108. package/dist/src/issue-query-commands.d.ts.map +1 -0
  109. package/dist/src/issue-query-commands.js +58 -0
  110. package/dist/src/issue-query-commands.js.map +1 -0
  111. package/dist/src/issue-query.d.ts +16 -0
  112. package/dist/src/issue-query.d.ts.map +1 -0
  113. package/dist/src/issue-query.js +75 -0
  114. package/dist/src/issue-query.js.map +1 -0
  115. package/dist/src/issue-relations-commands.d.ts +3 -0
  116. package/dist/src/issue-relations-commands.d.ts.map +1 -0
  117. package/dist/src/issue-relations-commands.js +28 -0
  118. package/dist/src/issue-relations-commands.js.map +1 -0
  119. package/dist/src/issue-relations.d.ts +14 -0
  120. package/dist/src/issue-relations.d.ts.map +1 -0
  121. package/dist/src/issue-relations.js +35 -0
  122. package/dist/src/issue-relations.js.map +1 -0
  123. package/dist/src/issue-time-commands.d.ts +3 -0
  124. package/dist/src/issue-time-commands.d.ts.map +1 -0
  125. package/dist/src/issue-time-commands.js +24 -0
  126. package/dist/src/issue-time-commands.js.map +1 -0
  127. package/dist/src/issue-time.d.ts +9 -0
  128. package/dist/src/issue-time.d.ts.map +1 -0
  129. package/dist/src/issue-time.js +88 -0
  130. package/dist/src/issue-time.js.map +1 -0
  131. package/dist/src/time-settings-commands.d.ts +3 -0
  132. package/dist/src/time-settings-commands.d.ts.map +1 -0
  133. package/dist/src/time-settings-commands.js +27 -0
  134. package/dist/src/time-settings-commands.js.map +1 -0
  135. package/dist/src/time-settings.d.ts +8 -0
  136. package/dist/src/time-settings.d.ts.map +1 -0
  137. package/dist/src/time-settings.js +14 -0
  138. package/dist/src/time-settings.js.map +1 -0
  139. package/dist/src/user-directory-commands.d.ts +3 -0
  140. package/dist/src/user-directory-commands.d.ts.map +1 -0
  141. package/dist/src/user-directory-commands.js +24 -0
  142. package/dist/src/user-directory-commands.js.map +1 -0
  143. package/dist/src/user-directory.d.ts +9 -0
  144. package/dist/src/user-directory.d.ts.map +1 -0
  145. package/dist/src/user-directory.js +15 -0
  146. package/dist/src/user-directory.js.map +1 -0
  147. package/package.json +45 -0
@@ -0,0 +1,22 @@
1
+ import { encodedID, readCollectionAt, readObjectAt } from "./client.js";
2
+ const root = "api/admin/customFieldSettings";
3
+ const customFieldFields = "id,name,fieldType(id,presentation,valueType,isMultiValue),aliases";
4
+ const fieldTypeFields = "id,presentation,valueType,isMultiValue";
5
+ const bundleFields = "id,name,isUpdateable";
6
+ const enumValueFields = "id,name,localizedName,description,archived,ordinal";
7
+ const stateValueFields = `${enumValueFields},isResolved`;
8
+ const bundlePath = (kind, bundleID) => `${root}/bundles/${kind}/${encodedID(bundleID, "bundle ID")}`;
9
+ const valuePath = (kind, bundleID, valueID) => `${bundlePath(kind, bundleID)}/values` +
10
+ (valueID === undefined ? "" : `/${encodedID(valueID, "value ID")}`);
11
+ export const listCustomFields = readCollectionAt(`${root}/customFields`, customFieldFields);
12
+ export const getCustomField = readObjectAt((fieldID) => `${root}/customFields/${encodedID(fieldID, "field ID")}`, customFieldFields);
13
+ export const listFieldTypes = readCollectionAt(`${root}/types`, fieldTypeFields);
14
+ export const listEnumBundles = readCollectionAt(`${root}/bundles/enum`, bundleFields);
15
+ export const getEnumBundle = readObjectAt((bundleID) => bundlePath("enum", bundleID), bundleFields);
16
+ export const listEnumValues = readCollectionAt((bundleID) => valuePath("enum", bundleID), enumValueFields);
17
+ export const getEnumValue = readObjectAt((bundleID, valueID) => valuePath("enum", bundleID, valueID), enumValueFields);
18
+ export const listStateBundles = readCollectionAt(`${root}/bundles/state`, bundleFields);
19
+ export const getStateBundle = readObjectAt((bundleID) => bundlePath("state", bundleID), bundleFields);
20
+ export const listStateValues = readCollectionAt((bundleID) => valuePath("state", bundleID), stateValueFields);
21
+ export const getStateValue = readObjectAt((bundleID, valueID) => valuePath("state", bundleID, valueID), stateValueFields);
22
+ //# sourceMappingURL=field-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-catalog.js","sourceRoot":"","sources":["../../src/field-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,IAAI,GAAG,+BAA+B,CAAC;AAC7C,MAAM,iBAAiB,GAAG,mEAAmE,CAAC;AAC9F,MAAM,eAAe,GAAG,wCAAwC,CAAC;AACjE,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAC5C,MAAM,eAAe,GAAG,oDAAoD,CAAC;AAC7E,MAAM,gBAAgB,GAAG,GAAG,eAAe,aAAa,CAAC;AACzD,MAAM,UAAU,GAAG,CAAC,IAAsB,EAAE,QAAgB,EAAE,EAAE,CAC9D,GAAG,IAAI,YAAY,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;AAChE,MAAM,SAAS,GAAG,CAAC,IAAsB,EAAE,QAAgB,EAAE,OAAgB,EAAE,EAAE,CAC/E,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS;IACtC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,IAAI,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CACxC,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,IAAI,iBAAiB,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAC7E,iBAAiB,CAClB,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,IAAI,QAAQ,EAAE,eAAe,CAAC,CAAC;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,IAAI,eAAe,EAAE,YAAY,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CACvC,CAAC,QAAgB,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,EAClD,YAAY,CACb,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAC5C,CAAC,QAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,EACjD,eAAe,CAChB,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CACtC,CAAC,QAAgB,EAAE,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAC3E,eAAe,CAChB,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,IAAI,gBAAgB,EAAE,YAAY,CAAC,CAAC;AACxF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CACxC,CAAC,QAAgB,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EACnD,YAAY,CACb,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAC7C,CAAC,QAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,EAClD,gBAAgB,CACjB,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CACvC,CAAC,QAAgB,EAAE,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAC5E,gBAAgB,CACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const groupDirectoryRootCommands: import("@eyeauras/cli-factory").CommandDefinition[];
2
+ export declare const groupDirectoryProjectChildren: import("@eyeauras/cli-factory").CommandDefinition[];
3
+ //# sourceMappingURL=group-directory-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-directory-commands.d.ts","sourceRoot":"","sources":["../../src/group-directory-commands.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,0BAA0B,qDAoBtC,CAAC;AAEF,eAAO,MAAM,6BAA6B,qDA2BzC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { command } from "@eyeauras/cli-factory";
2
+ import { pagedRead, projectedRead, readCommand, pageOptions, readOptions } from "./cli-support.js";
3
+ import { getGroup, getProjectTeam, listGroupMembers, listGroups, listProjectTeamGroups, listProjectTeamUsers, listSubgroups, } from "./group-directory.js";
4
+ const memberOptions = [
5
+ ...pageOptions,
6
+ { flags: "--direct", description: "Only directly added users; exclude inherited membership" },
7
+ ];
8
+ export const groupDirectoryRootCommands = [
9
+ command("group", "Inspect user groups and membership", [
10
+ pagedRead("list", "List one page of visible groups without expanding members", listGroups),
11
+ projectedRead("get <group>", "Read a group by database ID without expanding members", getGroup),
12
+ command("member", "Inspect direct or inherited group members", [
13
+ readCommand("list <group>", "List one page of members, including inherited users unless --direct is set", async (connection, { args, options }, context) => listGroupMembers(connection, args.group, {
14
+ ...readOptions(options),
15
+ direct: options.direct === true,
16
+ }), memberOptions),
17
+ ]),
18
+ command("subgroup", "Inspect nested groups without recursive traversal", [
19
+ pagedRead("list <group>", "List one page of immediate subgroups", listSubgroups),
20
+ ]),
21
+ ]),
22
+ ];
23
+ export const groupDirectoryProjectChildren = [
24
+ command("team", "Inspect project teams (YouTrack 2026.1+)", [
25
+ projectedRead("get <project>", "Read team identity and member count without expanding membership", getProjectTeam),
26
+ command("group", "Inspect groups added to the project team", [
27
+ pagedRead("list <project>", "List one page of team groups without expanding their users", listProjectTeamGroups),
28
+ ]),
29
+ command("user", "Inspect direct or inherited project-team users", [
30
+ readCommand("list <project>", "List one page of team users, including group members unless --direct is set", async (connection, { args, options }, context) => listProjectTeamUsers(connection, args.project, {
31
+ ...readOptions(options),
32
+ direct: options.direct === true,
33
+ }), memberOptions),
34
+ ]),
35
+ ]),
36
+ ];
37
+ //# sourceMappingURL=group-directory-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-directory-commands.js","sourceRoot":"","sources":["../../src/group-directory-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,MAAM,aAAa,GAAG;IACpB,GAAG,WAAW;IACd,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,yDAAyD,EAAE;CAC9F,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,OAAO,CAAC,OAAO,EAAE,oCAAoC,EAAE;QACrD,SAAS,CAAC,MAAM,EAAE,2DAA2D,EAAE,UAAU,CAAC;QAC1F,aAAa,CAAC,aAAa,EAAE,uDAAuD,EAAE,QAAQ,CAAC;QAC/F,OAAO,CAAC,QAAQ,EAAE,2CAA2C,EAAE;YAC7D,WAAW,CACT,cAAc,EACd,4EAA4E,EAC5E,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAC/C,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE;gBACvC,GAAG,WAAW,CAAC,OAAO,CAAC;gBACvB,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI;aAChC,CAAC,EACJ,aAAa,CACd;SACF,CAAC;QACF,OAAO,CAAC,UAAU,EAAE,mDAAmD,EAAE;YACvE,SAAS,CAAC,cAAc,EAAE,sCAAsC,EAAE,aAAa,CAAC;SACjF,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,OAAO,CAAC,MAAM,EAAE,0CAA0C,EAAE;QAC1D,aAAa,CACX,eAAe,EACf,kEAAkE,EAClE,cAAc,CACf;QACD,OAAO,CAAC,OAAO,EAAE,0CAA0C,EAAE;YAC3D,SAAS,CACP,gBAAgB,EAChB,4DAA4D,EAC5D,qBAAqB,CACtB;SACF,CAAC;QACF,OAAO,CAAC,MAAM,EAAE,gDAAgD,EAAE;YAChE,WAAW,CACT,gBAAgB,EAChB,6EAA6E,EAC7E,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAC/C,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC7C,GAAG,WAAW,CAAC,OAAO,CAAC;gBACvB,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI;aAChC,CAAC,EACJ,aAAa,CACd;SACF,CAAC;KACH,CAAC;CACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type Connection, type PageOptions, type YouTrackObject } from "./client.js";
2
+ export interface MemberOptions extends PageOptions {
3
+ direct?: boolean;
4
+ }
5
+ export declare const listGroups: (connection: Connection, options?: PageOptions | undefined) => Promise<YouTrackObject[]>;
6
+ export declare const getGroup: (connection: Connection, groupID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<YouTrackObject>;
7
+ export declare function listGroupMembers(connection: Connection, groupID: string, options?: MemberOptions): Promise<YouTrackObject[]>;
8
+ export declare const listSubgroups: (connection: Connection, groupID: string, options?: PageOptions | undefined) => Promise<YouTrackObject[]>;
9
+ export declare const getProjectTeam: (connection: Connection, projectID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<YouTrackObject>;
10
+ export declare const listProjectTeamGroups: (connection: Connection, projectID: string, options?: PageOptions | undefined) => Promise<YouTrackObject[]>;
11
+ export declare function listProjectTeamUsers(connection: Connection, projectID: string, options?: MemberOptions): Promise<YouTrackObject[]>;
12
+ //# sourceMappingURL=group-directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-directory.d.ts","sourceRoot":"","sources":["../../src/group-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAaD,eAAO,MAAM,UAAU,0FAA8C,CAAC;AACtE,eAAO,MAAM,QAAQ,qIAAuC,CAAC;AAE7D,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,cAAc,EAAE,CAAC,CAG3B;AAED,eAAO,MAAM,aAAa,2GAGzB,CAAC;AACF,eAAO,MAAM,cAAc,uIAAsC,CAAC;AAClE,eAAO,MAAM,qBAAqB,6GAGjC,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,cAAc,EAAE,CAAC,CAG3B"}
@@ -0,0 +1,23 @@
1
+ import { encodedID, page, readCollection, readCollectionAt, readObjectAt, } from "./client.js";
2
+ const groupFields = "id,name,usersCount";
3
+ const userFields = "id,login,fullName";
4
+ function groupPath(groupID) {
5
+ return `api/groups/${encodedID(groupID, "group ID")}`;
6
+ }
7
+ function teamPath(projectID) {
8
+ return `api/admin/projects/${encodedID(projectID, "project ID")}/team`;
9
+ }
10
+ export const listGroups = readCollectionAt("api/groups", groupFields);
11
+ export const getGroup = readObjectAt(groupPath, groupFields);
12
+ export async function listGroupMembers(connection, groupID, options = {}) {
13
+ const members = options.direct === true ? "ownUsers" : "users";
14
+ return readCollection(connection, `${groupPath(groupID)}/${members}`, page(options, userFields));
15
+ }
16
+ export const listSubgroups = readCollectionAt((groupID) => `${groupPath(groupID)}/subGroups`, groupFields);
17
+ export const getProjectTeam = readObjectAt(teamPath, groupFields);
18
+ export const listProjectTeamGroups = readCollectionAt((projectID) => `${teamPath(projectID)}/groups`, groupFields);
19
+ export async function listProjectTeamUsers(connection, projectID, options = {}) {
20
+ const members = options.direct === true ? "ownUsers" : "users";
21
+ return readCollection(connection, `${teamPath(projectID)}/${members}`, page(options, userFields));
22
+ }
23
+ //# sourceMappingURL=group-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-directory.js","sourceRoot":"","sources":["../../src/group-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,IAAI,EACJ,cAAc,EACd,gBAAgB,EAChB,YAAY,GAIb,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,GAAG,oBAAoB,CAAC;AACzC,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO,cAAc,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,QAAQ,CAAC,SAAiB;IACjC,OAAO,sBAAsB,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAsB,EACtB,OAAe,EACf,OAAO,GAAkB,EAAE;IAE3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/D,OAAO,cAAc,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAC3C,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,EACtD,WAAW,CACZ,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CACnD,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,EACtD,WAAW,CACZ,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAsB,EACtB,SAAiB,EACjB,OAAO,GAAkB,EAAE;IAE3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/D,OAAO,cAAc,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AACpG,CAAC"}
@@ -0,0 +1,18 @@
1
+ export { createYouTrackCli } from "./cli.js";
2
+ export { addComment, createIssue, currentUser, getIssue, listComments, listIssues, listProjects, readUser, updateIssue, type Connection, type IssueSearchOptions, type PageOptions, type ProjectionOptions, type YouTrackObject, type YouTrackUser, type YouTrackValue, } from "./client.js";
3
+ export { applyCommands, assistCommands, assistSearch, countIssues, getSavedQuery, listSavedQueries, type AssistOptions, type CommandAssistOptions, } from "./issue-query.js";
4
+ export { getProject, getProjectField, listProjectFields, listUsers, getIssueField, listIssueFields, setIssueField, } from "./issue-fields.js";
5
+ export { listLinkTypes, getLinkType, listIssueLinks, getIssueLink, listLinkedIssues, addIssueLink, removeIssueLink, listTags, getTag, listIssueTags, addIssueTag, removeIssueTag, } from "./issue-relations.js";
6
+ export { getActivitiesPage, getIssueActivitiesPage, getComment, updateComment, listIssueSprints, listVcsChanges, getVcsChange, type ActivityOptions, } from "./issue-context.js";
7
+ export { getTimeTracking, listIssueWorkItems, getIssueWorkItem, listWorkItems, getWorkItem, addWorkItem, updateWorkItem, } from "./issue-time.js";
8
+ export { listIssueAttachments, getIssueAttachment, uploadIssueAttachment } from "./issue-attachments.js";
9
+ export { getProjectTimeSettings, listProjectWorkItemTypes, getProjectWorkItemType, getGlobalTimeSettings, listWorkItemTypes, getWorkItemType, getWorkTimeSettings, } from "./time-settings.js";
10
+ export { listCustomFields, getCustomField, listFieldTypes, listEnumBundles, getEnumBundle, listEnumValues, getEnumValue, listStateBundles, getStateBundle, listStateValues, getStateValue, } from "./field-catalog.js";
11
+ export { listUserBundles, getUserBundle, listUserBundleMembers, listUserBundleGroups, getUserBundleGroup, listUserBundleIndividuals, getUserBundleIndividual, getUser, } from "./user-directory.js";
12
+ export { listGroups, getGroup, listGroupMembers, listSubgroups, getProjectTeam, listProjectTeamGroups, listProjectTeamUsers, type MemberOptions, } from "./group-directory.js";
13
+ export { listArticles, getArticle, createArticle, updateArticle, listArticleComments, getArticleComment, addArticleComment, updateArticleComment, listProjectArticles, } from "./articles.js";
14
+ export { listAgiles, getAgile, listSprints, getSprint, createSprint, updateSprint } from "./agile.js";
15
+ export { listBuildBundles, getBuildBundle, listBuildValues, getBuildValue, listOwnedBundles, getOwnedBundle, listOwnedValues, getOwnedValue, listVersionBundles, getVersionBundle, listVersionValues, getVersionValue, } from "./bundle-values.js";
16
+ export { listArticleAttachments, getArticleAttachment, uploadArticleAttachment, listChildArticles, getChildArticle, getParentArticle, } from "./article-extras.js";
17
+ export { downloadIssueAttachment, type DownloadOptions, type AttachmentDownloadResult, } from "./attachment-download.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export { createYouTrackCli } from "./cli.js";
2
+ export { addComment, createIssue, currentUser, getIssue, listComments, listIssues, listProjects, readUser, updateIssue, } from "./client.js";
3
+ export { applyCommands, assistCommands, assistSearch, countIssues, getSavedQuery, listSavedQueries, } from "./issue-query.js";
4
+ export { getProject, getProjectField, listProjectFields, listUsers, getIssueField, listIssueFields, setIssueField, } from "./issue-fields.js";
5
+ export { listLinkTypes, getLinkType, listIssueLinks, getIssueLink, listLinkedIssues, addIssueLink, removeIssueLink, listTags, getTag, listIssueTags, addIssueTag, removeIssueTag, } from "./issue-relations.js";
6
+ export { getActivitiesPage, getIssueActivitiesPage, getComment, updateComment, listIssueSprints, listVcsChanges, getVcsChange, } from "./issue-context.js";
7
+ export { getTimeTracking, listIssueWorkItems, getIssueWorkItem, listWorkItems, getWorkItem, addWorkItem, updateWorkItem, } from "./issue-time.js";
8
+ export { listIssueAttachments, getIssueAttachment, uploadIssueAttachment } from "./issue-attachments.js";
9
+ export { getProjectTimeSettings, listProjectWorkItemTypes, getProjectWorkItemType, getGlobalTimeSettings, listWorkItemTypes, getWorkItemType, getWorkTimeSettings, } from "./time-settings.js";
10
+ export { listCustomFields, getCustomField, listFieldTypes, listEnumBundles, getEnumBundle, listEnumValues, getEnumValue, listStateBundles, getStateBundle, listStateValues, getStateValue, } from "./field-catalog.js";
11
+ export { listUserBundles, getUserBundle, listUserBundleMembers, listUserBundleGroups, getUserBundleGroup, listUserBundleIndividuals, getUserBundleIndividual, getUser, } from "./user-directory.js";
12
+ export { listGroups, getGroup, listGroupMembers, listSubgroups, getProjectTeam, listProjectTeamGroups, listProjectTeamUsers, } from "./group-directory.js";
13
+ export { listArticles, getArticle, createArticle, updateArticle, listArticleComments, getArticleComment, addArticleComment, updateArticleComment, listProjectArticles, } from "./articles.js";
14
+ export { listAgiles, getAgile, listSprints, getSprint, createSprint, updateSprint } from "./agile.js";
15
+ export { listBuildBundles, getBuildBundle, listBuildValues, getBuildValue, listOwnedBundles, getOwnedBundle, listOwnedValues, getOwnedValue, listVersionBundles, getVersionBundle, listVersionValues, getVersionValue, } from "./bundle-values.js";
16
+ export { listArticleAttachments, getArticleAttachment, uploadArticleAttachment, listChildArticles, getChildArticle, getParentArticle, } from "./article-extras.js";
17
+ export { downloadIssueAttachment, } from "./attachment-download.js";
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,GAQZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,GAE1F,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,GACzG,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EACxF,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,GAC9E,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EAAE,sBAAsB,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EACtF,cAAc,EAAE,YAAY,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EACjF,WAAW,EAAE,cAAc,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACzG,OAAO,EACL,sBAAsB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,qBAAqB,EAC/F,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,GACxD,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAChG,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,GAC/E,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAC/F,yBAAyB,EAAE,uBAAuB,EAAE,OAAO,GAC5D,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAC5F,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAC9F,iBAAiB,EAAE,oBAAoB,EAAE,mBAAmB,GAC7D,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtG,OAAO,EACL,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAChE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAChE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,GACzE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EAAE,oBAAoB,EAAE,uBAAuB,EACrE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,GACrD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,GACxB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const attachmentsIssueChildren: import("@eyeauras/cli-factory").CommandDefinition[];
2
+ //# sourceMappingURL=issue-attachments-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-attachments-commands.d.ts","sourceRoot":"","sources":["../../src/issue-attachments-commands.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,wBAAwB,qDAgCpC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { command } from "@eyeauras/cli-factory";
2
+ import { requiredText } from "./client.js";
3
+ import { attachmentDownloadCommand } from "./attachment-download-commands.js";
4
+ import { pagedRead, projectedRead, updateCommand } from "./cli-support.js";
5
+ import { getIssueAttachment, listIssueAttachments, uploadIssueAttachment, } from "./issue-attachments.js";
6
+ export const attachmentsIssueChildren = [
7
+ command("attachments", "Inspect, upload or download one selected attachment", [
8
+ attachmentDownloadCommand,
9
+ pagedRead("list <issueID>", "List one page of attachment metadata without downloading files", listIssueAttachments),
10
+ projectedRead("get <issueID> <attachmentID>", "Read attachment metadata without downloading its contents", getIssueAttachment),
11
+ updateCommand("upload <issueID>", "Upload one selected regular file to an existing issue", async (connection, { args, options }, context) => uploadIssueAttachment(connection, args.issueID, String(options.file)), [
12
+ {
13
+ flags: "--file <path>",
14
+ description: "Required explicit local input file; no copies or recursion",
15
+ required: true,
16
+ parse: (value) => requiredText(value, "file path"),
17
+ },
18
+ ]),
19
+ ]),
20
+ ];
21
+ //# sourceMappingURL=issue-attachments-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-attachments-commands.js","sourceRoot":"","sources":["../../src/issue-attachments-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,OAAO,CAAC,aAAa,EAAE,qDAAqD,EAAE;QAC5E,yBAAyB;QACzB,SAAS,CACP,gBAAgB,EAChB,gEAAgE,EAChE,oBAAoB,CACrB;QACD,aAAa,CACX,8BAA8B,EAC9B,2DAA2D,EAC3D,kBAAkB,CACnB;QACD,aAAa,CACX,kBAAkB,EAClB,uDAAuD,EACvD,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAC/C,qBAAqB,CACnB,UAAU,EACV,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CACrB,EACH;YACI;gBACE,KAAK,EAAE,eAAe;gBACtB,WAAW,EAAE,4DAA4D;gBACzE,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;aACnD;SACF,CACJ;KACF,CAAC;CACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type Connection, type YouTrackObject } from "./client.js";
2
+ export declare const listIssueAttachments: (connection: Connection, issueID: string, options?: import("./client.js").PageOptions | undefined) => Promise<YouTrackObject[]>;
3
+ export declare const getIssueAttachment: (connection: Connection, issueID: string, attachmentID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<YouTrackObject>;
4
+ export declare function uploadIssueAttachment(connection: Connection, issueID: string, filePath: string): Promise<YouTrackObject[] | null>;
5
+ //# sourceMappingURL=issue-attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-attachments.d.ts","sourceRoot":"","sources":["../../src/issue-attachments.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAIrB,eAAO,MAAM,oBAAoB,iIAGhC,CAAC;AACF,eAAO,MAAM,kBAAkB,2JAI9B,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAIlC"}
@@ -0,0 +1,11 @@
1
+ import { attachmentForm } from "./attachment-form.js";
2
+ import { encodedID, issuePath, readCollectionAt, readObjectAt, uploadObjectCollection, } from "./client.js";
3
+ const attachmentFields = "id,name,size,mimeType";
4
+ export const listIssueAttachments = readCollectionAt((issueID) => `${issuePath(issueID)}/attachments`, attachmentFields);
5
+ export const getIssueAttachment = readObjectAt((issueID, attachmentID) => `${issuePath(issueID)}/attachments/${encodedID(attachmentID, "attachment ID")}`, attachmentFields);
6
+ export async function uploadIssueAttachment(connection, issueID, filePath) {
7
+ const path = `${issuePath(issueID)}/attachments`;
8
+ const form = await attachmentForm(filePath);
9
+ return uploadObjectCollection(connection, path, form, attachmentFields);
10
+ }
11
+ //# sourceMappingURL=issue-attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-attachments.js","sourceRoot":"","sources":["../../src/issue-attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,GAGvB,MAAM,aAAa,CAAC;AAErB,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAClD,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,EACxD,gBAAgB,CACjB,CAAC;AACF,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAC5C,CAAC,OAAe,EAAE,YAAoB,EAAE,EAAE,CACxC,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,SAAS,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,EACjF,gBAAgB,CACjB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAsB,EACtB,OAAe,EACf,QAAgB;IAEhB,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,sBAAsB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const contextRootCommands: import("@eyeauras/cli-factory").CommandDefinition[];
2
+ export declare const contextIssueChildren: import("@eyeauras/cli-factory").CommandDefinition[];
3
+ export declare const contextCommentChildren: import("@eyeauras/cli-factory").CommandDefinition[];
4
+ //# sourceMappingURL=issue-context-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-context-commands.d.ts","sourceRoot":"","sources":["../../src/issue-context-commands.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,mBAAmB,qDAU/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,qDAyBhC,CAAC;AAEF,eAAO,MAAM,sBAAsB,qDAOlC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { command } from "@eyeauras/cli-factory";
2
+ import { bodyUpdate, pagedRead, projectedRead, readCommand, projectionOptions, readOptions } from "./cli-support.js";
3
+ import { activityCategories, getActivitiesPage, getComment, getIssueActivitiesPage, getVcsChange, listIssueSprints, listVcsChanges, updateComment, } from "./issue-context.js";
4
+ const activityOptions = [
5
+ ...projectionOptions,
6
+ {
7
+ flags: "--categories <categories>",
8
+ description: "Required comma-separated YouTrack activity category IDs",
9
+ required: true,
10
+ parse: activityCategories,
11
+ },
12
+ {
13
+ flags: "--cursor <cursor>",
14
+ description: "Opaque beforeCursor or afterCursor from a previous page",
15
+ },
16
+ { flags: "--reverse", description: "Return newest activities first" },
17
+ ];
18
+ function activityReadOptions(options) {
19
+ return {
20
+ ...readOptions(options),
21
+ categories: String(options.categories),
22
+ ...(options.reverse === undefined ? {} : { reverse: options.reverse === true }),
23
+ ...(typeof options.cursor === "string" ? { cursor: options.cursor } : {}),
24
+ };
25
+ }
26
+ export const contextRootCommands = [
27
+ command("activities", "Inspect activities across accessible issues", [
28
+ readCommand("page", "Read one server-defined cursor page, including cursor metadata", async (connection, { options }, context) => getActivitiesPage(connection, activityReadOptions(options)), activityOptions),
29
+ ]),
30
+ ];
31
+ export const contextIssueChildren = [
32
+ command("activity", "Inspect the issue activity stream", [
33
+ readCommand("page <issueID>", "Read one server-defined cursor page, including cursor metadata", async (connection, { args, options }, context) => getIssueActivitiesPage(connection, args.issueID, activityReadOptions(options)), activityOptions),
34
+ ]),
35
+ command("sprints", "Inspect sprints that contain an issue", [
36
+ pagedRead("list <issueID>", "List one page of the issue's sprints", listIssueSprints),
37
+ ]),
38
+ command("vcs-changes", "Inspect linked VCS changes and pull requests", [
39
+ pagedRead("list <issueID>", "List one page of VCS changes and pull requests", listVcsChanges),
40
+ projectedRead("get <issueID> <changeID>", "Read a linked VCS change or pull request", getVcsChange),
41
+ ]),
42
+ ];
43
+ export const contextCommentChildren = [
44
+ projectedRead("get <issueID> <commentID>", "Read a specific issue comment", getComment),
45
+ bodyUpdate("update <issueID> <commentID>", "Replace comment text with a nonempty text field", updateComment),
46
+ ];
47
+ //# sourceMappingURL=issue-context-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-context-commands.js","sourceRoot":"","sources":["../../src/issue-context-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAyB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACrH,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,aAAa,GAEd,MAAM,oBAAoB,CAAC;AAE5B,MAAM,eAAe,GAAgC;IACnD,GAAG,iBAAiB;IACpB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,yDAAyD;QACtE,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,kBAAkB;KAC1B;IACD;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,yDAAyD;KACvE;IACD,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gCAAgC,EAAE;CACtE,CAAC;AAEF,SAAS,mBAAmB,CAAC,OAAgC;IAC3D,OAAO;QACL,GAAG,WAAW,CAAC,OAAO,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC/E,GAAG,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,CAAC,YAAY,EAAE,6CAA6C,EAAE;QACnE,WAAW,CACT,MAAM,EACN,gEAAgE,EAChE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CACzC,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAC7D,eAAe,CAChB;KACF,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,CAAC,UAAU,EAAE,mCAAmC,EAAE;QACvD,WAAW,CACT,gBAAgB,EAChB,gEAAgE,EAChE,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAC/C,sBAAsB,CACpB,UAAU,EACV,IAAI,CAAC,OAAO,EACZ,mBAAmB,CAAC,OAAO,CAAC,CAC7B,EACH,eAAe,CAChB;KACF,CAAC;IACF,OAAO,CAAC,SAAS,EAAE,uCAAuC,EAAE;QAC1D,SAAS,CAAC,gBAAgB,EAAE,sCAAsC,EAAE,gBAAgB,CAAC;KACtF,CAAC;IACF,OAAO,CAAC,aAAa,EAAE,8CAA8C,EAAE;QACrE,SAAS,CAAC,gBAAgB,EAAE,gDAAgD,EAAE,cAAc,CAAC;QAC7F,aAAa,CACX,0BAA0B,EAC1B,0CAA0C,EAC1C,YAAY,CACb;KACF,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,aAAa,CAAC,2BAA2B,EAAE,+BAA+B,EAAE,UAAU,CAAC;IACvF,UAAU,CACR,8BAA8B,EAC9B,iDAAiD,EACjD,aAAa,CACd;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type Connection, type PageOptions, type ProjectionOptions, type YouTrackObject } from "./client.js";
2
+ export interface ActivityOptions extends ProjectionOptions {
3
+ categories: string;
4
+ cursor?: string;
5
+ reverse?: boolean;
6
+ }
7
+ export declare function activityCategories(value: string): string;
8
+ export declare function getActivitiesPage(connection: Connection, options: ActivityOptions): Promise<YouTrackObject>;
9
+ export declare function getIssueActivitiesPage(connection: Connection, issueID: string, options: ActivityOptions): Promise<YouTrackObject>;
10
+ export declare const getComment: (connection: Connection, issueID: string, commentID: string, options?: ProjectionOptions | undefined) => Promise<YouTrackObject>;
11
+ export declare function updateComment(connection: Connection, issueID: string, commentID: string, input: unknown): Promise<YouTrackObject | null>;
12
+ export declare const listIssueSprints: (connection: Connection, issueID: string, options?: PageOptions | undefined) => Promise<YouTrackObject[]>;
13
+ export declare const listVcsChanges: (connection: Connection, issueID: string, options?: PageOptions | undefined) => Promise<YouTrackObject[]>;
14
+ export declare const getVcsChange: (connection: Connection, issueID: string, changeID: string, options?: ProjectionOptions | undefined) => Promise<YouTrackObject>;
15
+ //# sourceMappingURL=issue-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-context.d.ts","sourceRoot":"","sources":["../../src/issue-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAaL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxD;AAgDD,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED,eAAO,MAAM,UAAU,kIAItB,CAAC;AAEF,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQhC;AAED,eAAO,MAAM,gBAAgB,2GAG5B,CAAC;AACF,eAAO,MAAM,cAAc,2GAG1B,CAAC;AACF,eAAO,MAAM,YAAY,iIAIxB,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { encodedID, fields, issuePath, mutate, mutationBody, narrative, page, readCollection, readCollectionAt, readObject, readObjectAt, requiredText, } from "./client.js";
2
+ const activityFields = "id,beforeCursor,afterCursor,hasBefore,hasAfter,reverse,activities(id,$type,timestamp,author(id,login),category(id))";
3
+ const commentFields = "id,text,author(id,login),created,updated";
4
+ const vcsFields = "id,$type,date,fetched,text,author(login)";
5
+ export function activityCategories(value) {
6
+ requiredText(value, "categories");
7
+ if (value.split(",").some((category) => !category.trim())) {
8
+ throw new Error("YouTrack categories must contain nonempty comma-separated category IDs.");
9
+ }
10
+ return value;
11
+ }
12
+ function activityQuery(options) {
13
+ if (options.reverse !== undefined && typeof options.reverse !== "boolean") {
14
+ throw new Error("YouTrack reverse must be boolean.");
15
+ }
16
+ return {
17
+ fields: fields(options, activityFields),
18
+ categories: activityCategories(options.categories),
19
+ ...(options.cursor === undefined ? {} : { cursor: requiredText(options.cursor, "cursor") }),
20
+ ...(options.reverse === undefined ? {} : { reverse: String(options.reverse) }),
21
+ };
22
+ }
23
+ async function activityPage(connection, path, options) {
24
+ const result = await readObject(connection, path, activityQuery(options));
25
+ if (options.fields === undefined &&
26
+ ["activities", "beforeCursor", "afterCursor", "hasBefore", "hasAfter", "reverse"]
27
+ .some((key) => !Object.hasOwn(result, key))) {
28
+ throw new Error("YouTrack returned an invalid activity page.");
29
+ }
30
+ if (result.activities !== undefined &&
31
+ (!Array.isArray(result.activities) || result.activities.some((item) => item === null || typeof item !== "object" || Array.isArray(item)))) {
32
+ throw new Error("YouTrack returned an invalid activity page.");
33
+ }
34
+ for (const key of ["beforeCursor", "afterCursor"]) {
35
+ if (result[key] !== undefined && typeof result[key] !== "string") {
36
+ throw new Error("YouTrack returned an invalid activity page.");
37
+ }
38
+ }
39
+ for (const key of ["hasBefore", "hasAfter", "reverse"]) {
40
+ if (result[key] !== undefined && typeof result[key] !== "boolean") {
41
+ throw new Error("YouTrack returned an invalid activity page.");
42
+ }
43
+ }
44
+ return result;
45
+ }
46
+ export async function getActivitiesPage(connection, options) {
47
+ return activityPage(connection, "api/activitiesPage", options);
48
+ }
49
+ export async function getIssueActivitiesPage(connection, issueID, options) {
50
+ return activityPage(connection, `${issuePath(issueID)}/activitiesPage`, options);
51
+ }
52
+ export const getComment = readObjectAt((issueID, commentID) => `${issuePath(issueID)}/comments/${encodedID(commentID, "comment ID")}`, commentFields);
53
+ export async function updateComment(connection, issueID, commentID, input) {
54
+ const body = mutationBody(input, ["text"]);
55
+ return mutate(connection, `${issuePath(issueID)}/comments/${encodedID(commentID, "comment ID")}`, { text: narrative(body.text, "text") }, commentFields);
56
+ }
57
+ export const listIssueSprints = readCollectionAt((issueID) => `${issuePath(issueID)}/sprints`, "id,name,goal,start,finish,archived,agile(id,name)");
58
+ export const listVcsChanges = readCollectionAt((issueID) => `${issuePath(issueID)}/vcsChanges`, vcsFields);
59
+ export const getVcsChange = readObjectAt((issueID, changeID) => `${issuePath(issueID)}/vcsChanges/${encodedID(changeID, "change ID")}`, vcsFields);
60
+ //# sourceMappingURL=issue-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-context.js","sourceRoot":"","sources":["../../src/issue-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type CommandDefinition } from "@eyeauras/cli-factory";
2
+ export declare const fieldsProjectChildren: readonly CommandDefinition[];
3
+ export declare const fieldsUserChildren: readonly CommandDefinition[];
4
+ export declare const fieldsIssueChildren: readonly CommandDefinition[];
5
+ //# sourceMappingURL=issue-fields-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-fields-commands.d.ts","sourceRoot":"","sources":["../../src/issue-fields-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAYxE,eAAO,MAAM,qBAAqB,EAAE,SAAS,iBAAiB,EAM7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,iBAAiB,EAE1D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,iBAAiB,EAc3D,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { command } from "@eyeauras/cli-factory";
2
+ import { bodyUpdate, pagedRead, projectedRead } from "./cli-support.js";
3
+ import { getProject, getProjectField, listProjectFields, listUsers, getIssueField, listIssueFields, setIssueField, } from "./issue-fields.js";
4
+ export const fieldsProjectChildren = [
5
+ projectedRead("get <project>", "Show a project by database ID or short name", getProject),
6
+ command("field", "Inspect project custom-field settings and types", [
7
+ pagedRead("list <project>", "List one page of project custom fields", listProjectFields),
8
+ projectedRead("get <project> <field>", "Show project custom-field settings", getProjectField),
9
+ ]),
10
+ ];
11
+ export const fieldsUserChildren = [
12
+ pagedRead("list", "List one page of YouTrack users", listUsers),
13
+ ];
14
+ export const fieldsIssueChildren = [
15
+ command("fields", "Read and set typed issue custom fields", [
16
+ pagedRead("list <issueID>", "List one page of issue custom fields", listIssueFields),
17
+ projectedRead("get <issueID> <fieldID>", "Show a field; request possibleEvents explicitly for state-machine transitions", getIssueField),
18
+ bodyUpdate("set <issueID> <fieldID>", "Set $type and value, or a state-machine event.id", setIssueField),
19
+ ]),
20
+ ];
21
+ //# sourceMappingURL=issue-fields-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-fields-commands.js","sourceRoot":"","sources":["../../src/issue-fields-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,qBAAqB,GAAiC;IACjE,aAAa,CAAC,eAAe,EAAE,6CAA6C,EAAE,UAAU,CAAC;IACzF,OAAO,CAAC,OAAO,EAAE,iDAAiD,EAAE;QAClE,SAAS,CAAC,gBAAgB,EAAE,wCAAwC,EAAE,iBAAiB,CAAC;QACxF,aAAa,CAAC,uBAAuB,EAAE,oCAAoC,EAAE,eAAe,CAAC;KAC9F,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAiC;IAC9D,SAAS,CAAC,MAAM,EAAE,iCAAiC,EAAE,SAAS,CAAC;CAChE,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAiC;IAC/D,OAAO,CAAC,QAAQ,EAAE,wCAAwC,EAAE;QAC1D,SAAS,CAAC,gBAAgB,EAAE,sCAAsC,EAAE,eAAe,CAAC;QACpF,aAAa,CACX,yBAAyB,EACzB,+EAA+E,EAC/E,aAAa,CACd;QACD,UAAU,CACR,yBAAyB,EACzB,kDAAkD,EAClD,aAAa,CACd;KACF,CAAC;CACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type Connection, type YouTrackObject } from "./client.js";
2
+ export declare const getProject: (connection: Connection, projectID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<YouTrackObject>;
3
+ export declare const listProjectFields: (connection: Connection, projectID: string, options?: import("./client.js").PageOptions | undefined) => Promise<YouTrackObject[]>;
4
+ export declare const getProjectField: (connection: Connection, projectID: string, fieldID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<YouTrackObject>;
5
+ export declare const listUsers: (connection: Connection, options?: import("./client.js").PageOptions | undefined) => Promise<YouTrackObject[]>;
6
+ export declare const listIssueFields: (connection: Connection, issueID: string, options?: import("./client.js").PageOptions | undefined) => Promise<YouTrackObject[]>;
7
+ export declare const getIssueField: (connection: Connection, issueID: string, fieldID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<YouTrackObject>;
8
+ export declare function setIssueField(connection: Connection, issueID: string, fieldID: string, input: unknown): Promise<YouTrackObject | null>;
9
+ //# sourceMappingURL=issue-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-fields.d.ts","sourceRoot":"","sources":["../../src/issue-fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,UAAU,EACf,KAAK,cAAc,EAEpB,MAAM,aAAa,CAAC;AAerB,eAAO,MAAM,UAAU,uIAAsE,CAAC;AAC9F,eAAO,MAAM,iBAAiB,mIAG7B,CAAC;AACF,eAAO,MAAM,eAAe,wJAI3B,CAAC;AACF,eAAO,MAAM,SAAS,gHAAqD,CAAC;AAC5E,eAAO,MAAM,eAAe,iIAG3B,CAAC;AACF,eAAO,MAAM,aAAa,sJAA4C,CAAC;AAwEvE,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAiBhC"}
@@ -0,0 +1,101 @@
1
+ import { encodedID, issuePath, mutationBody, mutate, narrative, readCollectionAt, readObjectAt, } from "./client.js";
2
+ const projectFieldFields = "id,field(id,name,fieldType(id,valueType,isMultiValue)),canBeEmpty,emptyFieldText,isPublic";
3
+ const issueFieldFields = "id,name,$type,value(id,name,login,minutes,presentation,text),projectCustomField(id)";
4
+ function projectPath(projectID) {
5
+ return `api/admin/projects/${encodedID(projectID, "project ID")}`;
6
+ }
7
+ function fieldPath(issueID, fieldID) {
8
+ return `${issuePath(issueID)}/customFields/${encodedID(fieldID, "field ID")}`;
9
+ }
10
+ export const getProject = readObjectAt(projectPath, "id,name,shortName,description,archived");
11
+ export const listProjectFields = readCollectionAt((projectID) => `${projectPath(projectID)}/customFields`, projectFieldFields);
12
+ export const getProjectField = readObjectAt((projectID, fieldID) => `${projectPath(projectID)}/customFields/${encodedID(fieldID, "field ID")}`, projectFieldFields);
13
+ export const listUsers = readCollectionAt("api/users", "id,login,fullName");
14
+ export const listIssueFields = readCollectionAt((issueID) => `${issuePath(issueID)}/customFields`, issueFieldFields);
15
+ export const getIssueField = readObjectAt(fieldPath, issueFieldFields);
16
+ function reference(value, user) {
17
+ const body = mutationBody(value, user ? ["id", "name", "login"] : ["id", "name"]);
18
+ if (Object.keys(body).length === 0) {
19
+ throw new Error("YouTrack field reference requires an identity selector.");
20
+ }
21
+ return Object.fromEntries(Object.entries(body).map(([key, item]) => [
22
+ key, narrative(item, `value.${key}`),
23
+ ]));
24
+ }
25
+ function fieldValue(type, value) {
26
+ const entity = /^(Single|Multi)(Enum|Build|Version|Owned|Group|User)IssueCustomField$/.exec(type);
27
+ if (entity?.[1] === "Multi") {
28
+ if (!Array.isArray(value)) {
29
+ throw new Error("YouTrack multi-value field requires an array; use [] to clear it.");
30
+ }
31
+ return value.map((item) => reference(item, entity[2] === "User"));
32
+ }
33
+ if (entity || type === "StateIssueCustomField") {
34
+ return value === null ? null : reference(value, entity?.[2] === "User");
35
+ }
36
+ if (![
37
+ "SimpleIssueCustomField", "DateIssueCustomField", "PeriodIssueCustomField", "TextIssueCustomField",
38
+ ].includes(type)) {
39
+ throw new Error("YouTrack field $type is not a supported concrete issue custom-field type.");
40
+ }
41
+ if (value === null) {
42
+ return null;
43
+ }
44
+ switch (type) {
45
+ case "SimpleIssueCustomField":
46
+ if (typeof value === "string" || (typeof value === "number" && Number.isFinite(value))) {
47
+ return value;
48
+ }
49
+ throw new Error("YouTrack simple field requires text, a finite number or null.");
50
+ case "DateIssueCustomField":
51
+ if (typeof value === "number" && Number.isSafeInteger(value)) {
52
+ return value;
53
+ }
54
+ throw new Error("YouTrack date field requires a safe integer timestamp in milliseconds or null.");
55
+ case "PeriodIssueCustomField": {
56
+ const body = mutationBody(value, ["minutes", "presentation"]);
57
+ if (Object.keys(body).length === 0) {
58
+ throw new Error("YouTrack period value requires minutes or presentation.");
59
+ }
60
+ const result = {};
61
+ if (Object.hasOwn(body, "minutes")) {
62
+ if (typeof body.minutes !== "number" || !Number.isSafeInteger(body.minutes) ||
63
+ body.minutes < 0 || body.minutes > 2_147_483_647) {
64
+ throw new Error("YouTrack period minutes must be an integer between 0 and 2147483647.");
65
+ }
66
+ result.minutes = body.minutes;
67
+ }
68
+ if (Object.hasOwn(body, "presentation")) {
69
+ result.presentation = narrative(body.presentation, "period presentation");
70
+ }
71
+ return result;
72
+ }
73
+ default: {
74
+ const body = mutationBody(value, ["text"]);
75
+ if (body.text !== null && typeof body.text !== "string") {
76
+ throw new Error("YouTrack text field requires text or null.");
77
+ }
78
+ return { text: body.text };
79
+ }
80
+ }
81
+ }
82
+ export async function setIssueField(connection, issueID, fieldID, input) {
83
+ const body = mutationBody(input, ["$type", "value", "event"]);
84
+ const type = narrative(body.$type, "field $type");
85
+ let update;
86
+ if (type === "StateMachineIssueCustomField") {
87
+ if (Object.hasOwn(body, "value")) {
88
+ throw new Error("YouTrack state-machine fields require event instead of value.");
89
+ }
90
+ const event = mutationBody(body.event, ["id"]);
91
+ update = { $type: type, event: { id: narrative(event.id, "event.id") } };
92
+ }
93
+ else {
94
+ if (Object.hasOwn(body, "event")) {
95
+ throw new Error("YouTrack event is only supported for state-machine fields.");
96
+ }
97
+ update = { $type: type, value: fieldValue(type, body.value) };
98
+ }
99
+ return mutate(connection, fieldPath(issueID, fieldID), update, issueFieldFields);
100
+ }
101
+ //# sourceMappingURL=issue-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-fields.js","sourceRoot":"","sources":["../../src/issue-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const queryRootCommands: import("@eyeauras/cli-factory").CommandDefinition[];
2
+ export declare const queryIssueChildren: import("@eyeauras/cli-factory").CommandDefinition[];
3
+ //# sourceMappingURL=issue-query-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-query-commands.d.ts","sourceRoot":"","sources":["../../src/issue-query-commands.ts"],"names":[],"mappings":"AAoDA,eAAO,MAAM,iBAAiB,qDAmC7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,qDAW9B,CAAC"}