@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,99 @@
1
+ import { command, createCli, tokenAuth, } from "@eyeauras/cli-factory";
2
+ import { addComment, createIssue, currentUser, getIssue, listComments, listIssues, listProjects, readUser, updateIssue, youTrackUrl, } from "./client.js";
3
+ import { bodyUpdate, pagedRead, pageOptions, projectedRead, readCommand, readOptions, } from "./cli-support.js";
4
+ import { contextRootCommands, contextIssueChildren, contextCommentChildren } from "./issue-context-commands.js";
5
+ import { timeRootCommands, timeIssueChildren } from "./issue-time-commands.js";
6
+ import { relationsRootCommands, relationsIssueChildren } from "./issue-relations-commands.js";
7
+ import { fieldsProjectChildren, fieldsUserChildren, fieldsIssueChildren } from "./issue-fields-commands.js";
8
+ import { attachmentsIssueChildren } from "./issue-attachments-commands.js";
9
+ import { queryRootCommands, queryIssueChildren } from "./issue-query-commands.js";
10
+ import { timeSettingsRootCommands, timeSettingsProjectChildren } from "./time-settings-commands.js";
11
+ import { fieldCatalogRootCommands, fieldCatalogBundleChildren } from "./field-catalog-commands.js";
12
+ import { userDirectoryUserChildren, userDirectoryBundleChildren } from "./user-directory-commands.js";
13
+ import { groupDirectoryRootCommands, groupDirectoryProjectChildren } from "./group-directory-commands.js";
14
+ import { articlesRootCommands, articlesProjectChildren } from "./articles-commands.js";
15
+ import { agileRootCommands } from "./agile-commands.js";
16
+ import { bundleValuesChildren } from "./bundle-values-commands.js";
17
+ export function createYouTrackCli(runtime) {
18
+ return createCli({
19
+ name: "youtrack-cli",
20
+ description: "AI-friendly access to YouTrack",
21
+ version: "0.1.0",
22
+ applicationId: "youtrack-cli",
23
+ permissions: {},
24
+ profile: {
25
+ fields: [
26
+ {
27
+ name: "url",
28
+ flags: "--url <url>",
29
+ description: "YouTrack server URL including any context path, without /api",
30
+ required: true,
31
+ },
32
+ ],
33
+ validate(values) {
34
+ if (values.url !== undefined) {
35
+ youTrackUrl(values.url);
36
+ }
37
+ },
38
+ },
39
+ auth: tokenAuth({
40
+ env: "YOUTRACK_TOKEN",
41
+ validate: ({ profile, token, fetch, signal }) => currentUser({
42
+ baseUrl: youTrackUrl(profile.values.url),
43
+ token,
44
+ fetch,
45
+ signal,
46
+ }),
47
+ }),
48
+ commands: [
49
+ ...contextRootCommands,
50
+ ...timeRootCommands,
51
+ ...relationsRootCommands,
52
+ ...queryRootCommands,
53
+ ...timeSettingsRootCommands,
54
+ ...fieldCatalogRootCommands,
55
+ ...groupDirectoryRootCommands,
56
+ ...articlesRootCommands,
57
+ ...agileRootCommands,
58
+ command("bundle", "Inspect available custom-field value bundles", [
59
+ ...fieldCatalogBundleChildren,
60
+ ...userDirectoryBundleChildren,
61
+ ...bundleValuesChildren,
62
+ ]),
63
+ command("user", "Inspect YouTrack users", [
64
+ ...fieldsUserChildren,
65
+ ...userDirectoryUserChildren,
66
+ projectedRead("me", "Show the authenticated user (default: ID and login)", readUser),
67
+ ]),
68
+ command("project", "Inspect YouTrack projects", [
69
+ ...fieldsProjectChildren,
70
+ ...timeSettingsProjectChildren,
71
+ ...groupDirectoryProjectChildren,
72
+ ...articlesProjectChildren,
73
+ pagedRead("list", "List one page of projects", listProjects),
74
+ ]),
75
+ command("issues", "Read and update YouTrack issues", [
76
+ ...contextIssueChildren,
77
+ ...timeIssueChildren,
78
+ ...relationsIssueChildren,
79
+ ...fieldsIssueChildren,
80
+ ...attachmentsIssueChildren,
81
+ ...queryIssueChildren,
82
+ bodyUpdate("create", "Create an issue with project.id, summary and optional description", createIssue),
83
+ bodyUpdate("update <issueID>", "Update summary and/or description; description null clears it", updateIssue),
84
+ readCommand("list", "Search one page of issues using YouTrack query syntax", (client, { options }) => listIssues(client, readOptions(options)), [
85
+ ...pageOptions,
86
+ { flags: "--query <query>", description: "YouTrack search query" },
87
+ ]),
88
+ projectedRead("get <issueID>", "Show an issue by database or readable ID", getIssue),
89
+ command("comments", "Read and add issue comments", [
90
+ ...contextCommentChildren,
91
+ bodyUpdate("add <issueID>", "Add a comment with a nonempty text field", addComment),
92
+ pagedRead("list <issueID>", "List one page of comments for an issue", listComments),
93
+ ]),
94
+ ]),
95
+ ],
96
+ ...(runtime === undefined ? {} : { runtime }),
97
+ });
98
+ }
99
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ export interface YouTrackUser {
2
+ id: string;
3
+ login: string;
4
+ }
5
+ export interface Connection {
6
+ baseUrl: string;
7
+ token: string;
8
+ fetch?: typeof globalThis.fetch;
9
+ signal?: AbortSignal;
10
+ }
11
+ export declare function youTrackUrl(value: unknown): string;
12
+ export type YouTrackValue = null | boolean | number | string | YouTrackObject | YouTrackValue[];
13
+ export interface YouTrackObject {
14
+ [field: string]: YouTrackValue;
15
+ }
16
+ export interface ProjectionOptions {
17
+ fields?: string;
18
+ }
19
+ export interface PageOptions extends ProjectionOptions {
20
+ top?: number;
21
+ skip?: number;
22
+ }
23
+ export interface IssueSearchOptions extends PageOptions {
24
+ query?: string;
25
+ }
26
+ export declare function requiredText(value: string, label: string): string;
27
+ export declare function fields(options: ProjectionOptions, defaults: string): string;
28
+ export declare function page(options: PageOptions, defaults: string): Record<string, string>;
29
+ export declare function encodedID(id: string, label?: string): string;
30
+ export declare function issuePath(id: string): string;
31
+ export declare function readObject(connection: Connection, path: string, query: Record<string, string>, body?: YouTrackObject): Promise<YouTrackObject>;
32
+ export declare function readNullableObject(connection: Connection, path: string, query: Record<string, string>): Promise<YouTrackObject | null>;
33
+ export declare function getIssueAttachmentDownloadMetadata(connection: Connection, issueID: string, attachmentID: string): Promise<{
34
+ id: string;
35
+ name: string;
36
+ mimeType: string | null;
37
+ url: string;
38
+ }>;
39
+ export declare function readCollection(connection: Connection, path: string, query: Record<string, string>): Promise<YouTrackObject[]>;
40
+ type ResourcePath = string | ((...arguments_: never[]) => string);
41
+ type ResourcePathArguments<Path extends ResourcePath> = Path extends (...arguments_: infer Arguments extends string[]) => string ? Arguments : [];
42
+ /** Define one ordinary bounded YouTrack collection without repeating transport/query plumbing. */
43
+ export declare function readCollectionAt<const Path extends ResourcePath>(path: Path, defaultFields: string): (connection: Connection, ...arguments_: [...ResourcePathArguments<Path>, options?: PageOptions]) => Promise<YouTrackObject[]>;
44
+ /** Define one ordinary projected YouTrack object without repeating transport/query plumbing. */
45
+ export declare function readObjectAt<const Path extends ResourcePath>(path: Path, defaultFields: string): (connection: Connection, ...arguments_: [...ResourcePathArguments<Path>, options?: ProjectionOptions]) => Promise<YouTrackObject>;
46
+ export declare function currentUser(connection: Connection): Promise<YouTrackUser>;
47
+ export declare function readUser(connection: Connection, options?: ProjectionOptions): Promise<YouTrackUser | YouTrackObject>;
48
+ export declare const listProjects: (connection: Connection, options?: PageOptions | undefined) => Promise<YouTrackObject[]>;
49
+ export declare function listIssues(connection: Connection, options?: IssueSearchOptions): Promise<YouTrackObject[]>;
50
+ export declare const getIssue: (connection: Connection, id: string, options?: ProjectionOptions | undefined) => Promise<YouTrackObject>;
51
+ export declare const listComments: (connection: Connection, issueID: string, options?: PageOptions | undefined) => Promise<YouTrackObject[]>;
52
+ export declare function mutationBody(value: unknown, allowed: readonly string[]): Record<string, unknown>;
53
+ export declare function narrative(value: unknown, label: string): string;
54
+ export declare function nullableText(value: unknown, label: string): string | null;
55
+ export declare function mutate(connection: Connection, path: string, body: YouTrackObject, projection: string): Promise<YouTrackObject | null>;
56
+ export declare function deleteObject(connection: Connection, path: string): Promise<YouTrackObject | null>;
57
+ export declare function uploadObjectCollection(connection: Connection, path: string, body: FormData, projection: string): Promise<YouTrackObject[] | null>;
58
+ export declare function createIssue(connection: Connection, input: unknown): Promise<YouTrackObject | null>;
59
+ export declare function updateIssue(connection: Connection, id: string, input: unknown): Promise<YouTrackObject | null>;
60
+ export declare function addComment(connection: Connection, issueID: string, input: unknown): Promise<YouTrackObject | null>;
61
+ export {};
62
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,348 @@
1
+ import { readBoundedResponseBody } from "@eyeauras/cli-factory";
2
+ export function youTrackUrl(value) {
3
+ const message = "YouTrack URL must be an HTTPS server URL with an optional context path, " +
4
+ "without credentials, query, fragment or appended /api (HTTP is allowed only on localhost).";
5
+ if (typeof value !== "string" || /[\\\u0000-\u0020\u007f]/.test(value.trim())) {
6
+ throw new Error(message);
7
+ }
8
+ let url;
9
+ try {
10
+ url = new URL(value.trim());
11
+ }
12
+ catch {
13
+ throw new Error(message);
14
+ }
15
+ const localhost = ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname);
16
+ let pathname;
17
+ try {
18
+ pathname = decodeURIComponent(url.pathname).replace(/\/+$/, "");
19
+ }
20
+ catch {
21
+ throw new Error(message);
22
+ }
23
+ if ((url.protocol !== "https:" && !(url.protocol === "http:" && localhost)) ||
24
+ url.username || url.password || url.search || url.hash || /\/api$/i.test(pathname) ||
25
+ value.includes("?") || value.includes("#")) {
26
+ throw new Error(message);
27
+ }
28
+ url.pathname = url.pathname.replace(/\/+$/, "") + "/";
29
+ return url.href;
30
+ }
31
+ const issueListFields = "id,idReadable,summary,project(id,name,shortName),updated,resolved";
32
+ const commentFields = "id,text,author(id,login),created,updated";
33
+ export function requiredText(value, label) {
34
+ if (!value.trim() || /[\u0000-\u001f\u007f]/.test(value)) {
35
+ throw new Error(`YouTrack ${label} must be nonempty text without control characters.`);
36
+ }
37
+ return value;
38
+ }
39
+ export function fields(options, defaults) {
40
+ return requiredText(options.fields ?? defaults, "fields");
41
+ }
42
+ export function page(options, defaults) {
43
+ const top = options.top ?? 50;
44
+ const skip = options.skip ?? 0;
45
+ if (!Number.isSafeInteger(top) || top < 1 || top > 100) {
46
+ throw new Error("YouTrack top must be an integer between 1 and 100.");
47
+ }
48
+ if (!Number.isSafeInteger(skip) || skip < 0) {
49
+ throw new Error("YouTrack skip must be a nonnegative safe integer.");
50
+ }
51
+ return { fields: fields(options, defaults), $top: String(top), $skip: String(skip) };
52
+ }
53
+ export function encodedID(id, label = "ID") {
54
+ requiredText(id, label);
55
+ if (id === "." || id === "..") {
56
+ throw new Error(`YouTrack ${label} must not be a dot path segment.`);
57
+ }
58
+ try {
59
+ return encodeURIComponent(id);
60
+ }
61
+ catch {
62
+ throw new Error(`YouTrack ${label} must contain valid Unicode text.`);
63
+ }
64
+ }
65
+ export function issuePath(id) {
66
+ return `api/issues/${encodedID(id, "issue ID")}`;
67
+ }
68
+ function scrubUrl(text, token) {
69
+ try {
70
+ const url = new URL(text, "https://youtrack.example.com");
71
+ const path = decodeURIComponent(url.pathname);
72
+ const fragment = new URLSearchParams(url.hash.slice(1));
73
+ const signedPath = /(?:^|\/)(?:sign|signature|token)=/i.test(path);
74
+ const keys = [...url.searchParams.keys(), ...fragment.keys()];
75
+ const reflectedToken = [
76
+ path, decodeURIComponent(url.hash.slice(1)), ...keys,
77
+ ...url.searchParams.values(), ...fragment.values(),
78
+ ].some((part) => part.includes(token));
79
+ const credentialQuery = keys.some((key) => [
80
+ "sign", "sig", "signature", "token", "accesstoken", "refreshtoken", "idtoken",
81
+ "secret", "password", "credential", "credentials", "auth", "authorization", "authtoken",
82
+ "apikey", "key", "awsaccesskeyid", "xamzsignature", "xamzcredential", "xamzsecuritytoken",
83
+ "xgoogsignature", "xgoogcredential",
84
+ ].includes(key.replace(/[-_]/g, "").toLowerCase()));
85
+ return url.username || url.password || signedPath || credentialQuery || reflectedToken ? "[redacted]" : text;
86
+ }
87
+ catch {
88
+ return "[redacted]";
89
+ }
90
+ }
91
+ function scrubText(text, token) {
92
+ if (!/\s/.test(text) && /[\/?#]/.test(text) && scrubUrl(text, token) === "[redacted]") {
93
+ return "[redacted]";
94
+ }
95
+ return text.replace(/(?:https?:\/\/|\.\.?\/|\/)[^\s"'<>]+/gi, (url) => scrubUrl(url, token))
96
+ .replaceAll(token, "[redacted]");
97
+ }
98
+ function scrub(value, token) {
99
+ if (typeof value === "string") {
100
+ return scrubText(value, token);
101
+ }
102
+ if (Array.isArray(value)) {
103
+ return value.map((item) => scrub(item, token));
104
+ }
105
+ if (value !== null && typeof value === "object") {
106
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [
107
+ scrubText(key, token), scrub(item, token),
108
+ ]));
109
+ }
110
+ return value;
111
+ }
112
+ function object(value) {
113
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
114
+ throw new Error("YouTrack returned an invalid object response.");
115
+ }
116
+ return value;
117
+ }
118
+ async function request(connection, path, query, responseName = "JSON", options = {}) {
119
+ const url = new URL(path, youTrackUrl(connection.baseUrl));
120
+ url.search = new URLSearchParams(query).toString();
121
+ const token = connection.token.trim();
122
+ if (!token || /[\r\n]/.test(token)) {
123
+ throw new Error("YouTrack authentication requires a non-empty single-line token.");
124
+ }
125
+ const body = options.body;
126
+ const multipart = body instanceof FormData;
127
+ let response;
128
+ try {
129
+ response = await (connection.fetch ?? globalThis.fetch)(url, {
130
+ headers: {
131
+ Accept: "application/json",
132
+ Authorization: `Bearer ${token}`,
133
+ ...(body === undefined || multipart ? {} : { "Content-Type": "application/json" }),
134
+ },
135
+ method: options.method ?? "GET",
136
+ ...(body === undefined ? {} : { body: multipart ? body : JSON.stringify(body) }),
137
+ redirect: "error",
138
+ ...(connection.signal === undefined ? {} : { signal: connection.signal }),
139
+ });
140
+ }
141
+ catch {
142
+ throw new Error("YouTrack request failed; check connectivity, TLS and the configured URL.");
143
+ }
144
+ if (!response.ok) {
145
+ void response.body?.cancel().catch(() => undefined);
146
+ const retryAfter = response.headers.get("retry-after");
147
+ let retry = "";
148
+ if (response.status === 429 && retryAfter) {
149
+ if (/^\d{1,10}$/.test(retryAfter)) {
150
+ retry = ` Retry after ${Number(retryAfter)} seconds.`;
151
+ }
152
+ else if (/^[A-Z][a-z]{2}, \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2} GMT$/.test(retryAfter)) {
153
+ const date = new Date(retryAfter);
154
+ if (!Number.isNaN(date.getTime())) {
155
+ retry = ` Retry after ${date.toUTCString()}.`;
156
+ }
157
+ }
158
+ }
159
+ throw new Error(`YouTrack request failed (HTTP ${response.status}).${retry}`);
160
+ }
161
+ let text;
162
+ try {
163
+ const bytes = await readBoundedResponseBody(response, {
164
+ maxBytes: 8 * 1024 * 1024,
165
+ signal: connection.signal,
166
+ });
167
+ // Match Response.text(): UTF-8 replacement decoding with an initial BOM removed.
168
+ text = new TextDecoder().decode(bytes);
169
+ }
170
+ catch {
171
+ throw new Error("YouTrack response stream failed, exceeded 8 MiB, or was cancelled.");
172
+ }
173
+ let value;
174
+ try {
175
+ if (options.allowEmpty && !text.trim()) {
176
+ return null;
177
+ }
178
+ value = JSON.parse(text);
179
+ }
180
+ catch {
181
+ throw new Error(`YouTrack returned an invalid ${responseName} response.`);
182
+ }
183
+ if (options.allowEmpty && value === null) {
184
+ throw new Error("YouTrack returned an invalid mutation response.");
185
+ }
186
+ return value;
187
+ }
188
+ export async function readObject(connection, path, query, body) {
189
+ const options = body === undefined ? {} : { method: "POST", body };
190
+ return object(scrub(await request(connection, path, query, "JSON", options), connection.token.trim()));
191
+ }
192
+ export async function readNullableObject(connection, path, query) {
193
+ const value = scrub(await request(connection, path, query), connection.token.trim());
194
+ return value === null ? null : object(value);
195
+ }
196
+ // Only the download implementation may consume this transient, unredacted URL.
197
+ export async function getIssueAttachmentDownloadMetadata(connection, issueID, attachmentID) {
198
+ const value = object(await request(connection, `${issuePath(issueID)}/attachments/${encodedID(attachmentID, "attachment ID")}`, { fields: "id,name,mimeType,url" }));
199
+ const token = connection.token.trim();
200
+ const { id, name, mimeType, url } = value;
201
+ if (typeof id !== "string" || !id.trim() ||
202
+ typeof name !== "string" || !name.trim() ||
203
+ typeof url !== "string" || !url.trim() ||
204
+ (mimeType !== null && typeof mimeType !== "string") ||
205
+ [id, name, mimeType, url].some((item) => typeof item === "string" && item.includes(token))) {
206
+ throw new Error("YouTrack returned invalid attachment download metadata or no download URL.");
207
+ }
208
+ return { id, name, mimeType, url };
209
+ }
210
+ export async function readCollection(connection, path, query) {
211
+ const value = scrub(await request(connection, path, query), connection.token.trim());
212
+ if (!Array.isArray(value)) {
213
+ throw new Error("YouTrack returned an invalid collection response.");
214
+ }
215
+ if (value.length > Number(query.$top)) {
216
+ throw new Error("YouTrack returned more items than the requested top limit.");
217
+ }
218
+ return value.map(object);
219
+ }
220
+ function resourceArguments(values) {
221
+ const items = [...values];
222
+ const tail = items.at(-1);
223
+ const hasOptions = tail === undefined ||
224
+ (tail !== null && typeof tail === "object" && !Array.isArray(tail));
225
+ const options = hasOptions && items.length
226
+ ? (items.pop() ?? {})
227
+ : {};
228
+ if (items.some((item) => typeof item !== "string")) {
229
+ throw new Error("YouTrack resource arguments must be text.");
230
+ }
231
+ return { pathArguments: items, options };
232
+ }
233
+ function resourcePath(path, arguments_) {
234
+ return typeof path === "string"
235
+ ? path
236
+ : Reflect.apply(path, undefined, arguments_);
237
+ }
238
+ /** Define one ordinary bounded YouTrack collection without repeating transport/query plumbing. */
239
+ export function readCollectionAt(path, defaultFields) {
240
+ return async (connection, ...values) => {
241
+ const { pathArguments, options } = resourceArguments(values);
242
+ return readCollection(connection, resourcePath(path, pathArguments), page(options, defaultFields));
243
+ };
244
+ }
245
+ /** Define one ordinary projected YouTrack object without repeating transport/query plumbing. */
246
+ export function readObjectAt(path, defaultFields) {
247
+ return async (connection, ...values) => {
248
+ const { pathArguments, options } = resourceArguments(values);
249
+ return readObject(connection, resourcePath(path, pathArguments), {
250
+ fields: fields(options, defaultFields),
251
+ });
252
+ };
253
+ }
254
+ export async function currentUser(connection) {
255
+ const value = await request(connection, "api/users/me", { fields: "id,login" }, "identity");
256
+ const token = connection.token.trim();
257
+ if (value === null || typeof value !== "object" ||
258
+ !("id" in value) || typeof value.id !== "string" || !value.id.trim() ||
259
+ !("login" in value) || typeof value.login !== "string" || !value.login.trim() ||
260
+ scrubText(value.id, token) !== value.id || scrubText(value.login, token) !== value.login) {
261
+ throw new Error("YouTrack returned an invalid identity response.");
262
+ }
263
+ return { id: value.id, login: value.login };
264
+ }
265
+ export async function readUser(connection, options = {}) {
266
+ return options.fields === undefined
267
+ ? currentUser(connection)
268
+ : readObject(connection, "api/users/me", { fields: fields(options, "id,login") });
269
+ }
270
+ export const listProjects = readCollectionAt("api/admin/projects", "id,name,shortName");
271
+ export async function listIssues(connection, options = {}) {
272
+ return readCollection(connection, "api/issues", {
273
+ ...page(options, issueListFields),
274
+ ...(options.query === undefined ? {} : { query: requiredText(options.query, "query") }),
275
+ });
276
+ }
277
+ export const getIssue = readObjectAt(issuePath, `${issueListFields},description,created`);
278
+ export const listComments = readCollectionAt((issueID) => `${issuePath(issueID)}/comments`, commentFields);
279
+ export function mutationBody(value, allowed) {
280
+ if (value === null || typeof value !== "object" || Array.isArray(value) ||
281
+ ![Object.prototype, null].includes(Object.getPrototypeOf(value))) {
282
+ throw new Error("YouTrack body must be a JSON object.");
283
+ }
284
+ if (Object.keys(value).some((key) => !allowed.includes(key))) {
285
+ throw new Error(`This YouTrack slice supports only these body fields: ${allowed.join(", ")}.`);
286
+ }
287
+ return value;
288
+ }
289
+ export function narrative(value, label) {
290
+ if (typeof value !== "string" || !value.trim()) {
291
+ throw new Error(`YouTrack ${label} must be nonempty text.`);
292
+ }
293
+ return value;
294
+ }
295
+ export function nullableText(value, label) {
296
+ if (value !== null && typeof value !== "string") {
297
+ throw new Error(`YouTrack ${label} must be text or null.`);
298
+ }
299
+ return value;
300
+ }
301
+ export async function mutate(connection, path, body, projection) {
302
+ const value = await request(connection, path, { fields: projection }, "JSON", {
303
+ method: "POST", body, allowEmpty: true,
304
+ });
305
+ return value === null ? null : object(scrub(value, connection.token.trim()));
306
+ }
307
+ export async function deleteObject(connection, path) {
308
+ const value = await request(connection, path, {}, "JSON", { method: "DELETE", allowEmpty: true });
309
+ return value === null ? null : object(scrub(value, connection.token.trim()));
310
+ }
311
+ export async function uploadObjectCollection(connection, path, body, projection) {
312
+ const value = await request(connection, path, { fields: projection }, "JSON", {
313
+ method: "POST", body, allowEmpty: true,
314
+ });
315
+ if (value === null) {
316
+ return null;
317
+ }
318
+ if (!Array.isArray(value)) {
319
+ throw new Error("YouTrack returned an invalid upload collection response.");
320
+ }
321
+ return value.map((item) => object(scrub(item, connection.token.trim())));
322
+ }
323
+ export async function createIssue(connection, input) {
324
+ const body = mutationBody(input, ["project", "summary", "description"]);
325
+ const project = mutationBody(body.project, ["id"]);
326
+ return mutate(connection, "api/issues", {
327
+ project: { id: narrative(project.id, "project.id") },
328
+ summary: narrative(body.summary, "summary"),
329
+ ...(Object.hasOwn(body, "description") ? { description: nullableText(body.description, "description") } : {}),
330
+ }, "id,idReadable,summary,updated");
331
+ }
332
+ export async function updateIssue(connection, id, input) {
333
+ const body = mutationBody(input, ["summary", "description"]);
334
+ if (Object.keys(body).length === 0) {
335
+ throw new Error("YouTrack issue update requires summary or description.");
336
+ }
337
+ return mutate(connection, issuePath(id), {
338
+ ...(Object.hasOwn(body, "summary") ? { summary: narrative(body.summary, "summary") } : {}),
339
+ ...(Object.hasOwn(body, "description") ? { description: nullableText(body.description, "description") } : {}),
340
+ }, "id,idReadable,summary,updated");
341
+ }
342
+ export async function addComment(connection, issueID, input) {
343
+ const body = mutationBody(input, ["text"]);
344
+ return mutate(connection, `${issuePath(issueID)}/comments`, {
345
+ text: narrative(body.text, "text"),
346
+ }, commentFields);
347
+ }
348
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAchE,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,OAAO,GACX,0EAA0E;QAC1E,4FAA4F,CAAC;IAC/F,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7E,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,IACE,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,CAAC;QACvE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClF,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC1C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACtD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAiBD,MAAM,eAAe,GAAG,mEAAmE,CAAC;AAC5F,MAAM,aAAa,GAAG,0CAA0C,CAAC;AAEjE,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,KAAa;IACvD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,oDAAoD,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAA0B,EAAE,QAAgB;IACjE,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAoB,EAAE,QAAgB;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAU,EAAE,KAAK,GAAG,IAAI;IAChD,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,kCAAkC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,mCAAmC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,cAAc,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG;YACrB,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;YACpD,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE;SACnD,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YACzC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS;YAC7E,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW;YACvF,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB;YACzF,gBAAgB,EAAE,iBAAiB;SACpC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,UAAU,IAAI,eAAe,IAAI,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,YAAY,EAAE,CAAC;QACtF,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,wCAAwC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACzF,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,KAAK,CAAC,KAAoB,EAAE,KAAa;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YACnE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;SAC1C,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,MAAM,CAAC,KAAoB;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAQD,KAAK,UAAU,OAAO,CACpB,UAAsB,EACtB,IAAY,EACZ,KAA6B,EAC7B,YAAY,GAAG,MAAM,EACrB,OAAO,GAAmB,EAAE;IAE5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,GAAG,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,YAAY,QAAQ,CAAC;IAC3C,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;YAC3D,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;aACnF;YACD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAChF,QAAQ,EAAE,OAAO;YACjB,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;YAC1C,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,KAAK,GAAG,gBAAgB,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;YACxD,CAAC;iBAAM,IAAI,kEAAkE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/F,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAClC,KAAK,GAAG,gBAAgB,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,QAAQ,EAAE;YACpD,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;YACzB,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,iFAAiF;QACjF,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,KAAoB,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,YAAY,YAAY,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAsB,EACtB,IAAY,EACZ,KAA6B,EAC7B,IAAqB;IAErB,MAAM,OAAO,GAAmB,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnF,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAsB,EACtB,IAAY,EACZ,KAA6B;IAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,UAAsB,EACtB,OAAe,EACf,YAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,OAAO,CAChC,UAAU,EACV,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,SAAS,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,EAC/E,EAAE,MAAM,EAAE,sBAAsB,EAAE,CACnC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAC1C,IACE,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;QACpC,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACxC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QACtC,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,CAAC;QACnD,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAC1F,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAsB,EACtB,IAAY,EACZ,KAA6B;IAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAMD,SAAS,iBAAiB,CAAyB,MAAiB;IAIlE,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS;QACnC,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,UAAU,IAAI,KAAK,CAAC,MAAM;QACxC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAY;QAChC,CAAC,CAAC,EAAa,CAAC;IAClB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,KAAiB,EAAE,OAAO,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,YAAY,CACnB,IAAkB,EAClB,UAAoB;IAEpB,OAAO,OAAO,IAAI,KAAK,QAAQ;QAC7B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAW,CAAC;AAC3D,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAC9B,IAAU,EACV,aAAqB;IAKrB,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAc,MAAM,CAAC,CAAC;QAC1E,OAAO,cAAc,CACnB,UAAU,EACV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,EACjC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAC7B,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,YAAY,CAC1B,IAAU,EACV,aAAqB;IAKrB,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAoB,MAAM,CAAC,CAAC;QAChF,OAAO,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE;YAC/D,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;SACvC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAsB;IACtD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACtC,IACE,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3C,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QACpE,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QAC7E,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,EACxF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,UAAsB,EACtB,OAAO,GAAsB,EAAE;IAE/B,OAAO,OAAO,CAAC,MAAM,KAAK,SAAS;QACjC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;QACzB,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;AAExF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAsB,EACtB,OAAO,GAAuB,EAAE;IAEhC,OAAO,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE;QAC9C,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;QACjC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;KACxF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,eAAe,sBAAsB,CAAC,CAAC;AAC1F,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAC1C,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EACrD,aAAa,CACd,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,OAA0B;IACrE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,wDAAwD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,KAAa;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,yBAAyB,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,KAAa;IACxD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,wBAAwB,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,UAAsB,EACtB,IAAY,EACZ,IAAoB,EACpB,UAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE;QAC5E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI;KACvC,CAAC,CAAC;IACH,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAsB,EAAE,IAAY;IACrE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAClG,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAsB,EACtB,IAAY,EACZ,IAAc,EACd,UAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE;QAC5E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI;KACvC,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAsB,EACtB,KAAc;IAEd,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE;QACtC,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE;QACpD,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QAC3C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9G,EAAE,+BAA+B,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAsB,EACtB,EAAU,EACV,KAAc;IAEd,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE;QACvC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9G,EAAE,+BAA+B,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAsB,EACtB,OAAe,EACf,KAAc;IAEd,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE;QAC1D,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;KACnC,EAAE,aAAa,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type CommandDefinition } from "@eyeauras/cli-factory";
2
+ export declare const fieldCatalogRootCommands: readonly CommandDefinition[];
3
+ export declare const fieldCatalogBundleChildren: readonly CommandDefinition[];
4
+ //# sourceMappingURL=field-catalog-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-catalog-commands.d.ts","sourceRoot":"","sources":["../../src/field-catalog-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAgBxE,eAAO,MAAM,wBAAwB,EAAE,SAAS,iBAAiB,EAQhE,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,SAAS,iBAAiB,EAyClE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { command } from "@eyeauras/cli-factory";
2
+ import { pagedRead, projectedRead } from "./cli-support.js";
3
+ import { getCustomField, getEnumBundle, getEnumValue, getStateBundle, getStateValue, listCustomFields, listEnumBundles, listEnumValues, listFieldTypes, listStateBundles, listStateValues, } from "./field-catalog.js";
4
+ export const fieldCatalogRootCommands = [
5
+ command("field", "Inspect global custom fields and their types", [
6
+ pagedRead("list", "List one page of global custom fields", listCustomFields),
7
+ projectedRead("get <field>", "Show a global custom field by database ID", getCustomField),
8
+ command("type", "Inspect custom-field types", [
9
+ pagedRead("list", "List one page of supported field types", listFieldTypes),
10
+ ]),
11
+ ]),
12
+ ];
13
+ export const fieldCatalogBundleChildren = [
14
+ command("enum", "Inspect enum bundles and their values", [
15
+ pagedRead("list", "List one page of enum bundles without expanding values", listEnumBundles),
16
+ projectedRead("get <bundle>", "Show an enum bundle by database ID without expanding values", getEnumBundle),
17
+ command("value", "Inspect values in an enum bundle", [
18
+ pagedRead("list <bundle>", "List one page of enum values, preserving archived entries", listEnumValues),
19
+ projectedRead("get <bundle> <value>", "Show an enum value by database ID", getEnumValue),
20
+ ]),
21
+ ]),
22
+ command("state", "Inspect state bundles and their values", [
23
+ pagedRead("list", "List one page of state bundles without expanding values", listStateBundles),
24
+ projectedRead("get <bundle>", "Show a state bundle by database ID without expanding values", getStateBundle),
25
+ command("value", "Inspect values in a state bundle", [
26
+ pagedRead("list <bundle>", "List one page of state values, preserving archived entries", listStateValues),
27
+ projectedRead("get <bundle> <value>", "Show a state value and whether it resolves an issue", getStateValue),
28
+ ]),
29
+ ]),
30
+ ];
31
+ //# sourceMappingURL=field-catalog-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-catalog-commands.js","sourceRoot":"","sources":["../../src/field-catalog-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,wBAAwB,GAAiC;IACpE,OAAO,CAAC,OAAO,EAAE,8CAA8C,EAAE;QAC/D,SAAS,CAAC,MAAM,EAAE,uCAAuC,EAAE,gBAAgB,CAAC;QAC5E,aAAa,CAAC,aAAa,EAAE,2CAA2C,EAAE,cAAc,CAAC;QACzF,OAAO,CAAC,MAAM,EAAE,4BAA4B,EAAE;YAC5C,SAAS,CAAC,MAAM,EAAE,wCAAwC,EAAE,cAAc,CAAC;SAC5E,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAiC;IACtE,OAAO,CAAC,MAAM,EAAE,uCAAuC,EAAE;QACvD,SAAS,CAAC,MAAM,EAAE,wDAAwD,EAAE,eAAe,CAAC;QAC5F,aAAa,CACX,cAAc,EACd,6DAA6D,EAC7D,aAAa,CACd;QACD,OAAO,CAAC,OAAO,EAAE,kCAAkC,EAAE;YACnD,SAAS,CACP,eAAe,EACf,2DAA2D,EAC3D,cAAc,CACf;YACD,aAAa,CACX,sBAAsB,EACtB,mCAAmC,EACnC,YAAY,CACb;SACF,CAAC;KACH,CAAC;IACF,OAAO,CAAC,OAAO,EAAE,wCAAwC,EAAE;QACzD,SAAS,CAAC,MAAM,EAAE,yDAAyD,EAAE,gBAAgB,CAAC;QAC9F,aAAa,CACX,cAAc,EACd,6DAA6D,EAC7D,cAAc,CACf;QACD,OAAO,CAAC,OAAO,EAAE,kCAAkC,EAAE;YACnD,SAAS,CACP,eAAe,EACf,4DAA4D,EAC5D,eAAe,CAChB;YACD,aAAa,CACX,sBAAsB,EACtB,qDAAqD,EACrD,aAAa,CACd;SACF,CAAC;KACH,CAAC;CACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const listCustomFields: (connection: import("./client.js").Connection, options?: import("./client.js").PageOptions | undefined) => Promise<import("./client.js").YouTrackObject[]>;
2
+ export declare const getCustomField: (connection: import("./client.js").Connection, fieldID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<import("./client.js").YouTrackObject>;
3
+ export declare const listFieldTypes: (connection: import("./client.js").Connection, options?: import("./client.js").PageOptions | undefined) => Promise<import("./client.js").YouTrackObject[]>;
4
+ export declare const listEnumBundles: (connection: import("./client.js").Connection, options?: import("./client.js").PageOptions | undefined) => Promise<import("./client.js").YouTrackObject[]>;
5
+ export declare const getEnumBundle: (connection: import("./client.js").Connection, bundleID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<import("./client.js").YouTrackObject>;
6
+ export declare const listEnumValues: (connection: import("./client.js").Connection, bundleID: string, options?: import("./client.js").PageOptions | undefined) => Promise<import("./client.js").YouTrackObject[]>;
7
+ export declare const getEnumValue: (connection: import("./client.js").Connection, bundleID: string, valueID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<import("./client.js").YouTrackObject>;
8
+ export declare const listStateBundles: (connection: import("./client.js").Connection, options?: import("./client.js").PageOptions | undefined) => Promise<import("./client.js").YouTrackObject[]>;
9
+ export declare const getStateBundle: (connection: import("./client.js").Connection, bundleID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<import("./client.js").YouTrackObject>;
10
+ export declare const listStateValues: (connection: import("./client.js").Connection, bundleID: string, options?: import("./client.js").PageOptions | undefined) => Promise<import("./client.js").YouTrackObject[]>;
11
+ export declare const getStateValue: (connection: import("./client.js").Connection, bundleID: string, valueID: string, options?: import("./client.js").ProjectionOptions | undefined) => Promise<import("./client.js").YouTrackObject>;
12
+ //# sourceMappingURL=field-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-catalog.d.ts","sourceRoot":"","sources":["../../src/field-catalog.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,gBAAgB,4JAA8D,CAAC;AAC5F,eAAO,MAAM,cAAc,iLAG1B,CAAC;AACF,eAAO,MAAM,cAAc,4JAAqD,CAAC;AACjF,eAAO,MAAM,eAAe,4JAAyD,CAAC;AACtF,eAAO,MAAM,aAAa,kLAGzB,CAAC;AACF,eAAO,MAAM,cAAc,8KAG1B,CAAC;AACF,eAAO,MAAM,YAAY,mMAGxB,CAAC;AACF,eAAO,MAAM,gBAAgB,4JAA0D,CAAC;AACxF,eAAO,MAAM,cAAc,kLAG1B,CAAC;AACF,eAAO,MAAM,eAAe,8KAG3B,CAAC;AACF,eAAO,MAAM,aAAa,mMAGzB,CAAC"}