pm-jira 2026.6.1 → 2026.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -1
- package/README.md +68 -23
- package/dist/index.d.ts +108 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +359 -155
- package/dist/index.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2026.6.
|
|
3
|
+
## 2026.6.2 - 2026-06-02
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Adopt full SDK surface: jira import/export + schema fields + flags ([pm-jira-27sk](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/features/pm-jira-27sk.toon))
|
|
8
|
+
|
|
9
|
+
## 2026.06.01 - 2026-06-01
|
|
4
10
|
|
|
5
11
|
### Fixed
|
|
6
12
|
|
package/README.md
CHANGED
|
@@ -4,12 +4,14 @@ A [pm-cli](https://github.com/unbraind/pm-cli) extension that syncs Jira issues
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
7
|
+
- Pull issues from any Jira project into pm items via `pm jira import` or `pm jira sync`
|
|
8
|
+
- Export pm items back out as Jira create payloads via `pm jira export` (preview, or `--push` to create issues)
|
|
9
|
+
- Custom JQL support for fine-grained control over what gets pulled
|
|
10
|
+
- Automatic mapping of Jira statuses and priorities to pm equivalents, with a `--status-map` override
|
|
10
11
|
- Labels and fix versions mapped as pm tags
|
|
12
|
+
- Jira provenance (key + browse URL) persisted in the item description and declared as `jira_key` / `jira_url` schema fields
|
|
11
13
|
- Dry-run mode to preview changes before writing
|
|
12
|
-
- Works as
|
|
14
|
+
- Works as a `pm jira sync`/`pm jira import` command, a `pm jira export` exporter, and a config-driven `jira-sync` importer
|
|
13
15
|
|
|
14
16
|
## Installation
|
|
15
17
|
|
|
@@ -74,17 +76,57 @@ pm jira sync --project PROJ --status wip
|
|
|
74
76
|
pm jira sync --project PROJ --max-results 100 --status todo --dry-run
|
|
75
77
|
```
|
|
76
78
|
|
|
77
|
-
###
|
|
79
|
+
### Command / Importer: `pm jira import`
|
|
78
80
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
| `--project` | `-p` | string | — | Jira project key (e.g. `PROJ`). Used to build default JQL. |
|
|
82
|
-
| `--jql` | `-q` | string | — | Custom JQL query. Overrides `--project` default JQL. |
|
|
83
|
-
| `--max-results` | `-n` | number | `500` | Maximum number of issues to sync. |
|
|
84
|
-
| `--dry-run` | — | boolean | `false` | Preview what would be synced without writing. |
|
|
85
|
-
| `--status` | `-s` | string | — | Filter by mapped pm status (`todo`, `wip`, `done`, `blocked`). |
|
|
81
|
+
`pm jira import` is the native importer pipeline equivalent of `pm jira sync` — it
|
|
82
|
+
pulls issues via JQL and creates pm items. Both share the same flags and logic.
|
|
86
83
|
|
|
87
|
-
|
|
84
|
+
```bash
|
|
85
|
+
# Pull all open issues from a project
|
|
86
|
+
pm jira import --project PROJ
|
|
87
|
+
|
|
88
|
+
# Use a custom Jira host (instead of JIRA_BASE_URL) + custom JQL
|
|
89
|
+
pm jira import --host https://company.atlassian.net --jql "project = PROJ AND assignee = currentUser()"
|
|
90
|
+
|
|
91
|
+
# Override status mapping
|
|
92
|
+
pm jira import --project PROJ --status-map "QA=blocked,Done=closed"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Pull flags (`pm jira sync` / `pm jira import`)
|
|
96
|
+
|
|
97
|
+
| Flag | Type | Default | Description |
|
|
98
|
+
|---|---|---|---|
|
|
99
|
+
| `--project` | string | — | Jira project key (e.g. `PROJ`). Used to build default JQL. |
|
|
100
|
+
| `--jql` | string | — | Custom JQL query. Overrides `--project` default JQL. |
|
|
101
|
+
| `--host` | string | `$JIRA_BASE_URL` | Jira base URL override. |
|
|
102
|
+
| `--max-results` | number | `500` | Maximum number of issues to pull. |
|
|
103
|
+
| `--status` | string | — | Filter by mapped pm status (`open`, `in_progress`, `closed`, `blocked`). |
|
|
104
|
+
| `--status-map` | string | — | Override mapping, e.g. `"In Review=in_progress,QA=blocked"`. |
|
|
105
|
+
| `--dry-run` | boolean | `false` | Preview what would be created without writing. |
|
|
106
|
+
|
|
107
|
+
### Exporter: `pm jira export`
|
|
108
|
+
|
|
109
|
+
Render pm items as Jira create payloads. Prints JSON by default; with `--push`
|
|
110
|
+
(and credentials + `--project`) it POSTs each payload to Jira's create-issue API.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Preview the Jira create payloads for all pm items (no network, no creds needed)
|
|
114
|
+
pm jira export --project PROJ
|
|
115
|
+
|
|
116
|
+
# Actually create the issues in Jira (requires creds + --project)
|
|
117
|
+
pm jira export --push --project PROJ
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
| Flag | Type | Default | Description |
|
|
121
|
+
|---|---|---|---|
|
|
122
|
+
| `--project` | string | — | Target Jira project key for created issues (required for `--push`). |
|
|
123
|
+
| `--host` | string | `$JIRA_BASE_URL` | Jira base URL override. |
|
|
124
|
+
| `--push` | boolean | `false` | POST payloads to Jira (requires credentials + `--project`). |
|
|
125
|
+
|
|
126
|
+
Items whose description carries a `Jira <KEY>: <url>` provenance marker (added on
|
|
127
|
+
import) can be matched back to their upstream issue.
|
|
128
|
+
|
|
129
|
+
### Importer: `jira-sync` (config-driven)
|
|
88
130
|
|
|
89
131
|
Use the `jira-sync` importer in your pm-cli config for automated syncing:
|
|
90
132
|
|
|
@@ -116,11 +158,13 @@ Credentials are read from environment variables or from the importer config:
|
|
|
116
158
|
|
|
117
159
|
## Status Mapping
|
|
118
160
|
|
|
161
|
+
The default mapping (override per-status with `--status-map`):
|
|
162
|
+
|
|
119
163
|
| Jira Status | pm Status |
|
|
120
164
|
|---|---|
|
|
121
|
-
| To Do, Open, Backlog, (any other) | `
|
|
122
|
-
| In Progress, In Review, In Development, Code Review | `
|
|
123
|
-
| Done, Resolved, Closed, Complete, Completed | `
|
|
165
|
+
| To Do, Open, Backlog, (any other) | `open` |
|
|
166
|
+
| In Progress, In Review, In Development, Code Review | `in_progress` |
|
|
167
|
+
| Done, Resolved, Closed, Complete, Completed | `closed` |
|
|
124
168
|
| Blocked | `blocked` |
|
|
125
169
|
|
|
126
170
|
## Priority Mapping
|
|
@@ -134,19 +178,20 @@ Credentials are read from environment variables or from the importer config:
|
|
|
134
178
|
|
|
135
179
|
## Item Structure
|
|
136
180
|
|
|
137
|
-
Each
|
|
138
|
-
|
|
139
|
-
Items include:
|
|
181
|
+
Each imported item includes:
|
|
140
182
|
|
|
141
183
|
- **title**: `[PROJ-123] Issue summary`
|
|
142
184
|
- **body**: Issue description (converted from Atlassian Document Format to plain text)
|
|
185
|
+
- **description**: A provenance marker `Jira PROJ-123: https://…/browse/PROJ-123` so the
|
|
186
|
+
Jira key + URL survive round-trips and power `pm jira export`. The extension also
|
|
187
|
+
declares `jira_key` and `jira_url` as optional item schema fields (capability `schema`).
|
|
143
188
|
- **status**: Mapped from Jira status (see table above)
|
|
144
189
|
- **priority**: Mapped from Jira priority (see table above)
|
|
145
190
|
- **tags**: Jira labels + fix version names
|
|
146
|
-
- **
|
|
147
|
-
|
|
148
|
-
-
|
|
149
|
-
|
|
191
|
+
- **deadline**: Jira due date (`YYYY-MM-DD`), if set
|
|
192
|
+
|
|
193
|
+
> Note: pm's `create` has no generic custom-field setter for a standalone extension, so
|
|
194
|
+
> provenance is stored in the description marker rather than as structured metadata.
|
|
150
195
|
|
|
151
196
|
## JQL Examples
|
|
152
197
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,117 @@
|
|
|
1
|
+
export declare const EXIT_CODE: {
|
|
2
|
+
readonly GENERIC_FAILURE: 1;
|
|
3
|
+
readonly USAGE: 2;
|
|
4
|
+
readonly NOT_FOUND: 3;
|
|
5
|
+
};
|
|
6
|
+
export declare class CommandError extends Error {
|
|
7
|
+
exitCode: number;
|
|
8
|
+
constructor(message: string, exitCode?: number);
|
|
9
|
+
}
|
|
10
|
+
interface JiraIssue {
|
|
11
|
+
key: string;
|
|
12
|
+
fields: {
|
|
13
|
+
summary: string;
|
|
14
|
+
description?: {
|
|
15
|
+
type: string;
|
|
16
|
+
content?: Array<{
|
|
17
|
+
type: string;
|
|
18
|
+
content?: Array<{
|
|
19
|
+
type: string;
|
|
20
|
+
text?: string;
|
|
21
|
+
}>;
|
|
22
|
+
}>;
|
|
23
|
+
} | null;
|
|
24
|
+
status: {
|
|
25
|
+
name: string;
|
|
26
|
+
statusCategory: {
|
|
27
|
+
key: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
priority?: {
|
|
31
|
+
name: string;
|
|
32
|
+
} | null;
|
|
33
|
+
labels?: string[];
|
|
34
|
+
assignee?: {
|
|
35
|
+
displayName: string;
|
|
36
|
+
emailAddress: string;
|
|
37
|
+
} | null;
|
|
38
|
+
duedate?: string | null;
|
|
39
|
+
fixVersions?: Array<{
|
|
40
|
+
name: string;
|
|
41
|
+
}>;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
type PmPriority = 1 | 2 | 3 | 4;
|
|
45
|
+
type PmStatus = "open" | "in_progress" | "closed" | "blocked";
|
|
46
|
+
export declare function mapJiraPriority(jiraPriority: string | undefined): PmPriority;
|
|
47
|
+
export declare function mapJiraStatus(jiraStatus: string, statusMap?: Record<string, PmStatus>): PmStatus;
|
|
48
|
+
export declare function parseStatusMap(raw: string | undefined): Record<string, PmStatus> | undefined;
|
|
49
|
+
export declare function adfToPlainText(node: JiraIssue["fields"]["description"] | {
|
|
50
|
+
type: string;
|
|
51
|
+
content?: unknown[];
|
|
52
|
+
text?: string;
|
|
53
|
+
} | null | undefined): string;
|
|
54
|
+
export declare function plainTextToAdf(text: string): {
|
|
55
|
+
type: "doc";
|
|
56
|
+
version: 1;
|
|
57
|
+
content: Array<{
|
|
58
|
+
type: "paragraph";
|
|
59
|
+
content: Array<{
|
|
60
|
+
type: "text";
|
|
61
|
+
text: string;
|
|
62
|
+
}>;
|
|
63
|
+
}>;
|
|
64
|
+
};
|
|
65
|
+
export declare function jiraProvenance(key: string, browseUrl: string): string;
|
|
66
|
+
export declare function extractJiraKey(text: string | undefined): {
|
|
67
|
+
key: string;
|
|
68
|
+
url: string;
|
|
69
|
+
} | undefined;
|
|
1
70
|
export declare function readStringOption(options: Record<string, unknown>, kebab: string): string | undefined;
|
|
2
71
|
export declare function readNumberOption(options: Record<string, unknown>, kebab: string): number | undefined;
|
|
3
72
|
export declare function readBooleanOption(options: Record<string, unknown>, kebab: string): boolean;
|
|
4
73
|
export declare function optionString(options: Record<string, unknown>, ...keys: string[]): string | undefined;
|
|
5
74
|
export declare function optionInt(options: Record<string, unknown>, defaultValue: number, ...keys: string[]): number;
|
|
6
75
|
export declare function optionEnabled(options: Record<string, unknown>, ...keys: string[]): boolean;
|
|
76
|
+
export interface JiraCreds {
|
|
77
|
+
baseUrl: string;
|
|
78
|
+
email: string;
|
|
79
|
+
token: string;
|
|
80
|
+
authHeader: string;
|
|
81
|
+
}
|
|
82
|
+
export declare function resolveCreds(options: Record<string, unknown>, envLike?: NodeJS.ProcessEnv): JiraCreds;
|
|
83
|
+
export interface IssueToItem {
|
|
84
|
+
title: string;
|
|
85
|
+
status: PmStatus;
|
|
86
|
+
priority: PmPriority;
|
|
87
|
+
body: string;
|
|
88
|
+
tags: string[];
|
|
89
|
+
deadline?: string;
|
|
90
|
+
description: string;
|
|
91
|
+
}
|
|
92
|
+
export declare function issueToItem(issue: JiraIssue, baseUrl: string, statusMap?: Record<string, PmStatus>): IssueToItem;
|
|
93
|
+
interface PmItem {
|
|
94
|
+
id?: string;
|
|
95
|
+
title?: string;
|
|
96
|
+
status?: string;
|
|
97
|
+
body?: string;
|
|
98
|
+
description?: string;
|
|
99
|
+
tags?: string[];
|
|
100
|
+
}
|
|
101
|
+
export interface JiraCreatePayload {
|
|
102
|
+
fields: {
|
|
103
|
+
project?: {
|
|
104
|
+
key: string;
|
|
105
|
+
};
|
|
106
|
+
summary: string;
|
|
107
|
+
description: ReturnType<typeof plainTextToAdf>;
|
|
108
|
+
issuetype: {
|
|
109
|
+
name: string;
|
|
110
|
+
};
|
|
111
|
+
labels: string[];
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export declare function itemToJiraPayload(item: PmItem, projectKey?: string): JiraCreatePayload;
|
|
7
115
|
declare const _default: {
|
|
8
116
|
name: string;
|
|
9
117
|
version: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
// pm-jira — Jira issue sync / importer / exporter for pm-cli
|
|
2
|
+
//
|
|
3
|
+
// Capabilities (see manifest.json):
|
|
4
|
+
// commands — `pm jira sync` (legacy, full-featured pull)
|
|
5
|
+
// importers — `pm jira import` (native import pipeline: pull issues via JQL)
|
|
6
|
+
// — `jira-sync` (config-driven importer, kept for back-compat)
|
|
7
|
+
// exporters — `pm jira export` (render pm items as Jira-create payloads;
|
|
8
|
+
// only POSTs to Jira with explicit --push AND creds present)
|
|
9
|
+
// schema — declares jira_key / jira_url item fields
|
|
10
|
+
// services — declared for governance parity with the sync service surface
|
|
1
11
|
import https from "node:https";
|
|
2
12
|
import { URL } from "node:url";
|
|
3
13
|
import { spawnSync } from "node:child_process";
|
|
@@ -6,15 +16,16 @@ const defineExtension = ((extension) => extension);
|
|
|
6
16
|
// handled non-zero exit when the error carries a numeric `exitCode` property
|
|
7
17
|
// (see @unbrained/pm-cli runCommandHandler). A plain `Error` makes the runtime
|
|
8
18
|
// fall through to its "unhandled" path, which RE-INVOKES the command handler a
|
|
9
|
-
// second time
|
|
19
|
+
// second time — doubling side effects (e.g. a second Jira fetch) and exiting
|
|
20
|
+
// with a generic code instead of a semantic one. We mirror the SDK's EXIT_CODE
|
|
10
21
|
// contract here rather than importing it: standalone-installed extensions load
|
|
11
22
|
// only their own `dist/`, so `@unbrained/pm-cli` is not resolvable at runtime.
|
|
12
|
-
const EXIT_CODE = {
|
|
23
|
+
export const EXIT_CODE = {
|
|
13
24
|
GENERIC_FAILURE: 1,
|
|
14
25
|
USAGE: 2,
|
|
15
26
|
NOT_FOUND: 3,
|
|
16
27
|
};
|
|
17
|
-
class CommandError extends Error {
|
|
28
|
+
export class CommandError extends Error {
|
|
18
29
|
exitCode;
|
|
19
30
|
constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
|
|
20
31
|
super(message);
|
|
@@ -22,7 +33,7 @@ class CommandError extends Error {
|
|
|
22
33
|
this.exitCode = exitCode;
|
|
23
34
|
}
|
|
24
35
|
}
|
|
25
|
-
function mapJiraPriority(jiraPriority) {
|
|
36
|
+
export function mapJiraPriority(jiraPriority) {
|
|
26
37
|
if (!jiraPriority)
|
|
27
38
|
return 3;
|
|
28
39
|
const name = jiraPriority.toLowerCase();
|
|
@@ -36,8 +47,11 @@ function mapJiraPriority(jiraPriority) {
|
|
|
36
47
|
return 4;
|
|
37
48
|
return 3;
|
|
38
49
|
}
|
|
39
|
-
function mapJiraStatus(jiraStatus) {
|
|
50
|
+
export function mapJiraStatus(jiraStatus, statusMap) {
|
|
40
51
|
const name = jiraStatus.toLowerCase();
|
|
52
|
+
// A caller-supplied --status-map override wins over the built-in heuristics.
|
|
53
|
+
if (statusMap && name in statusMap)
|
|
54
|
+
return statusMap[name];
|
|
41
55
|
if (name === "blocked")
|
|
42
56
|
return "blocked";
|
|
43
57
|
if (name === "in progress" ||
|
|
@@ -54,10 +68,39 @@ function mapJiraStatus(jiraStatus) {
|
|
|
54
68
|
// Default: to do / open / backlog / any other
|
|
55
69
|
return "open";
|
|
56
70
|
}
|
|
71
|
+
const PM_STATUSES = ["open", "in_progress", "closed", "blocked"];
|
|
72
|
+
// Parse a --status-map value of the form
|
|
73
|
+
// "In Progress=in_progress,QA=blocked"
|
|
74
|
+
// into a lower-cased lookup table. Invalid pm-status targets are rejected with
|
|
75
|
+
// a USAGE CommandError so a typo never silently maps everything to "open".
|
|
76
|
+
export function parseStatusMap(raw) {
|
|
77
|
+
if (!raw)
|
|
78
|
+
return undefined;
|
|
79
|
+
const map = {};
|
|
80
|
+
for (const pair of raw.split(",")) {
|
|
81
|
+
const trimmed = pair.trim();
|
|
82
|
+
if (!trimmed)
|
|
83
|
+
continue;
|
|
84
|
+
const eq = trimmed.indexOf("=");
|
|
85
|
+
if (eq < 0) {
|
|
86
|
+
throw new CommandError(`Invalid --status-map entry "${trimmed}" (expected "JiraStatus=pm_status").`, EXIT_CODE.USAGE);
|
|
87
|
+
}
|
|
88
|
+
const from = trimmed.slice(0, eq).trim().toLowerCase();
|
|
89
|
+
const to = trimmed.slice(eq + 1).trim();
|
|
90
|
+
if (!from) {
|
|
91
|
+
throw new CommandError(`Invalid --status-map entry "${trimmed}" (empty Jira status).`, EXIT_CODE.USAGE);
|
|
92
|
+
}
|
|
93
|
+
if (!PM_STATUSES.includes(to)) {
|
|
94
|
+
throw new CommandError(`Invalid --status-map target "${to}" (expected one of ${PM_STATUSES.join("|")}).`, EXIT_CODE.USAGE);
|
|
95
|
+
}
|
|
96
|
+
map[from] = to;
|
|
97
|
+
}
|
|
98
|
+
return Object.keys(map).length > 0 ? map : undefined;
|
|
99
|
+
}
|
|
57
100
|
// ---------------------------------------------------------------------------
|
|
58
101
|
// Jira description (Atlassian Document Format) → plain text
|
|
59
102
|
// ---------------------------------------------------------------------------
|
|
60
|
-
function adfToPlainText(node) {
|
|
103
|
+
export function adfToPlainText(node) {
|
|
61
104
|
if (!node)
|
|
62
105
|
return "";
|
|
63
106
|
if ("text" in node && typeof node.text === "string") {
|
|
@@ -71,6 +114,34 @@ function adfToPlainText(node) {
|
|
|
71
114
|
}
|
|
72
115
|
return "";
|
|
73
116
|
}
|
|
117
|
+
// Render a plain-text body as a minimal Atlassian Document Format doc so it can
|
|
118
|
+
// be POSTed back to the Jira create API.
|
|
119
|
+
export function plainTextToAdf(text) {
|
|
120
|
+
const body = text && text.trim().length > 0 ? text : " ";
|
|
121
|
+
return {
|
|
122
|
+
type: "doc",
|
|
123
|
+
version: 1,
|
|
124
|
+
content: [{ type: "paragraph", content: [{ type: "text", text: body }] }],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// Provenance marker — pm `create` has no generic custom-field setter for an
|
|
129
|
+
// extension, so (like pm-github) we persist the Jira key + browse URL inside
|
|
130
|
+
// the item description with a stable marker. This survives round-trips and
|
|
131
|
+
// powers `pm jira export`.
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
const JIRA_MARKER = /^Jira ([A-Z][A-Z0-9]+-\d+): (\S+)\s*$/m;
|
|
134
|
+
export function jiraProvenance(key, browseUrl) {
|
|
135
|
+
return `Jira ${key}: ${browseUrl}`;
|
|
136
|
+
}
|
|
137
|
+
export function extractJiraKey(text) {
|
|
138
|
+
if (!text)
|
|
139
|
+
return undefined;
|
|
140
|
+
const m = text.match(JIRA_MARKER);
|
|
141
|
+
if (!m)
|
|
142
|
+
return undefined;
|
|
143
|
+
return { key: m[1], url: m[2] };
|
|
144
|
+
}
|
|
74
145
|
// ---------------------------------------------------------------------------
|
|
75
146
|
// Option readers — tolerate both kebab-case and camelCase keys.
|
|
76
147
|
// The pm CLI normalizes loose extension flags to camelCase (e.g. --dry-run
|
|
@@ -126,8 +197,31 @@ export function optionInt(options, defaultValue, ...keys) {
|
|
|
126
197
|
export function optionEnabled(options, ...keys) {
|
|
127
198
|
return keys.some((key) => readBooleanOption(options, key));
|
|
128
199
|
}
|
|
200
|
+
// Resolve Jira credentials from options (--host) + env. Returns a structured
|
|
201
|
+
// CommandError (numeric exitCode) when anything is missing rather than throwing
|
|
202
|
+
// a bare Error, so the CLI exits non-zero exactly once with a helpful message.
|
|
203
|
+
export function resolveCreds(options, envLike = process.env) {
|
|
204
|
+
const baseUrl = readStringOption(options, "host") ??
|
|
205
|
+
(envLike["JIRA_BASE_URL"]?.trim() || undefined);
|
|
206
|
+
const token = envLike["JIRA_API_TOKEN"]?.trim() || undefined;
|
|
207
|
+
const email = envLike["JIRA_EMAIL"]?.trim() || undefined;
|
|
208
|
+
const missing = [];
|
|
209
|
+
if (!baseUrl)
|
|
210
|
+
missing.push("JIRA_BASE_URL (or --host)");
|
|
211
|
+
if (!email)
|
|
212
|
+
missing.push("JIRA_EMAIL");
|
|
213
|
+
if (!token)
|
|
214
|
+
missing.push("JIRA_API_TOKEN");
|
|
215
|
+
if (missing.length > 0) {
|
|
216
|
+
throw new CommandError(`Missing Jira credentials: ${missing.join(", ")}. ` +
|
|
217
|
+
`Set JIRA_BASE_URL (or pass --host), JIRA_EMAIL, and JIRA_API_TOKEN. ` +
|
|
218
|
+
`Create a token at https://id.atlassian.com/manage-profile/security/api-tokens`, EXIT_CODE.USAGE);
|
|
219
|
+
}
|
|
220
|
+
const authHeader = `Basic ${Buffer.from(`${email}:${token}`).toString("base64")}`;
|
|
221
|
+
return { baseUrl: baseUrl.replace(/\/$/, ""), email: email, token: token, authHeader };
|
|
222
|
+
}
|
|
129
223
|
// ---------------------------------------------------------------------------
|
|
130
|
-
// HTTP
|
|
224
|
+
// HTTP helpers using Node.js native https module
|
|
131
225
|
// ---------------------------------------------------------------------------
|
|
132
226
|
function httpsGet(url, authHeader) {
|
|
133
227
|
return new Promise((resolve, reject) => {
|
|
@@ -157,6 +251,47 @@ function httpsGet(url, authHeader) {
|
|
|
157
251
|
});
|
|
158
252
|
});
|
|
159
253
|
req.on("error", reject);
|
|
254
|
+
req.setTimeout(30000, () => {
|
|
255
|
+
req.destroy();
|
|
256
|
+
reject(new Error("Jira API request timed out"));
|
|
257
|
+
});
|
|
258
|
+
req.end();
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
function httpsPost(url, authHeader, payload) {
|
|
262
|
+
return new Promise((resolve, reject) => {
|
|
263
|
+
const parsed = new URL(url);
|
|
264
|
+
const options = {
|
|
265
|
+
hostname: parsed.hostname,
|
|
266
|
+
path: parsed.pathname + parsed.search,
|
|
267
|
+
method: "POST",
|
|
268
|
+
headers: {
|
|
269
|
+
Authorization: authHeader,
|
|
270
|
+
"Content-Type": "application/json",
|
|
271
|
+
Accept: "application/json",
|
|
272
|
+
"Content-Length": String(Buffer.byteLength(payload)),
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
const req = https.request(options, (res) => {
|
|
276
|
+
let body = "";
|
|
277
|
+
res.on("data", (chunk) => {
|
|
278
|
+
body += chunk.toString();
|
|
279
|
+
});
|
|
280
|
+
res.on("end", () => {
|
|
281
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
282
|
+
reject(new Error(`Jira API error ${res.statusCode}: ${body.slice(0, 200)}`));
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
resolve(body);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
req.on("error", reject);
|
|
290
|
+
req.setTimeout(30000, () => {
|
|
291
|
+
req.destroy();
|
|
292
|
+
reject(new Error("Jira API request timed out"));
|
|
293
|
+
});
|
|
294
|
+
req.write(payload);
|
|
160
295
|
req.end();
|
|
161
296
|
});
|
|
162
297
|
}
|
|
@@ -187,15 +322,162 @@ async function fetchAllJiraIssues(baseUrl, authHeader, jql, maxResults) {
|
|
|
187
322
|
}
|
|
188
323
|
return allIssues;
|
|
189
324
|
}
|
|
325
|
+
export function issueToItem(issue, baseUrl, statusMap) {
|
|
326
|
+
const tags = [
|
|
327
|
+
...(issue.fields.labels ?? []),
|
|
328
|
+
...(issue.fields.fixVersions?.map((v) => v.name) ?? []),
|
|
329
|
+
];
|
|
330
|
+
const rawBody = adfToPlainText(issue.fields.description);
|
|
331
|
+
const browseUrl = `${baseUrl.replace(/\/$/, "")}/browse/${issue.key}`;
|
|
332
|
+
return {
|
|
333
|
+
title: `[${issue.key}] ${issue.fields.summary}`,
|
|
334
|
+
status: mapJiraStatus(issue.fields.status.name, statusMap),
|
|
335
|
+
priority: mapJiraPriority(issue.fields.priority?.name),
|
|
336
|
+
body: rawBody,
|
|
337
|
+
tags,
|
|
338
|
+
deadline: issue.fields.duedate ?? undefined,
|
|
339
|
+
// Provenance marker lives in the description so it survives round-trips.
|
|
340
|
+
description: jiraProvenance(issue.key, browseUrl),
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function createPmItem(pmRoot, item) {
|
|
344
|
+
const args = [
|
|
345
|
+
"--path", pmRoot,
|
|
346
|
+
"create",
|
|
347
|
+
"--title", item.title,
|
|
348
|
+
"--status", item.status,
|
|
349
|
+
"--type", "Issue",
|
|
350
|
+
"--priority", String(item.priority),
|
|
351
|
+
"--description", item.description,
|
|
352
|
+
...(item.body ? ["--body", item.body] : []),
|
|
353
|
+
...(item.deadline ? ["--deadline", item.deadline] : []),
|
|
354
|
+
...(item.tags.length > 0 ? ["--tags", item.tags.join(",")] : []),
|
|
355
|
+
];
|
|
356
|
+
const result = spawnSync("pm", args, { encoding: "utf-8" });
|
|
357
|
+
return result.status === 0;
|
|
358
|
+
}
|
|
359
|
+
// Shared import core for both `pm jira sync`, `pm jira import` and the
|
|
360
|
+
// `jira-sync` importer. Throws CommandError (semantic exitCode) on failure.
|
|
361
|
+
async function runImport(options, pmRoot, opts = {}) {
|
|
362
|
+
const creds = resolveCreds(options);
|
|
363
|
+
const project = readStringOption(options, "project");
|
|
364
|
+
const customJql = readStringOption(options, "jql");
|
|
365
|
+
const maxResults = readNumberOption(options, "max-results") ?? 500;
|
|
366
|
+
const statusMap = parseStatusMap(readStringOption(options, "status-map"));
|
|
367
|
+
const dryRun = opts.dryRun ?? readBooleanOption(options, "dry-run");
|
|
368
|
+
const statusFilter = opts.statusFilter ?? readStringOption(options, "status");
|
|
369
|
+
if (!project && !customJql) {
|
|
370
|
+
throw new CommandError("Provide either --project <KEY> or --jql <query> to specify which issues to import.", EXIT_CODE.USAGE);
|
|
371
|
+
}
|
|
372
|
+
const jql = customJql ??
|
|
373
|
+
`project = ${project} AND statusCategory != Done ORDER BY priority ASC`;
|
|
374
|
+
console.error(`Fetching issues from Jira... (JQL: ${jql})`);
|
|
375
|
+
let issues;
|
|
376
|
+
try {
|
|
377
|
+
issues = await fetchAllJiraIssues(creds.baseUrl, creds.authHeader, jql, maxResults);
|
|
378
|
+
}
|
|
379
|
+
catch (err) {
|
|
380
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
381
|
+
const exitCode = /error 404/.test(msg) ? EXIT_CODE.NOT_FOUND : EXIT_CODE.GENERIC_FAILURE;
|
|
382
|
+
throw new CommandError(`Failed to fetch issues from Jira: ${msg}`, exitCode);
|
|
383
|
+
}
|
|
384
|
+
console.error(`Fetched ${issues.length} issues from Jira`);
|
|
385
|
+
const mapped = issues.map((issue) => ({
|
|
386
|
+
issue,
|
|
387
|
+
item: issueToItem(issue, creds.baseUrl, statusMap),
|
|
388
|
+
}));
|
|
389
|
+
const filtered = statusFilter
|
|
390
|
+
? mapped.filter(({ item }) => item.status === statusFilter)
|
|
391
|
+
: mapped;
|
|
392
|
+
if (statusFilter && filtered.length !== mapped.length) {
|
|
393
|
+
console.error(`Filtered to ${filtered.length} issues with pm status "${statusFilter}"`);
|
|
394
|
+
}
|
|
395
|
+
const projectLabel = project ?? "custom-jql";
|
|
396
|
+
if (dryRun) {
|
|
397
|
+
console.error(`[dry-run] Would create ${filtered.length} items:`);
|
|
398
|
+
for (const { issue, item } of filtered.slice(0, 20)) {
|
|
399
|
+
console.error(` ${issue.key}: ${issue.fields.summary} [${item.status}]`);
|
|
400
|
+
}
|
|
401
|
+
if (filtered.length > 20)
|
|
402
|
+
console.error(` ... and ${filtered.length - 20} more`);
|
|
403
|
+
return { success: true, dryRun: true, total: filtered.length, project: projectLabel };
|
|
404
|
+
}
|
|
405
|
+
let created = 0;
|
|
406
|
+
for (const { issue, item } of filtered) {
|
|
407
|
+
if (createPmItem(pmRoot, item))
|
|
408
|
+
created++;
|
|
409
|
+
else
|
|
410
|
+
console.error(`Failed to create item for ${issue.key}`);
|
|
411
|
+
}
|
|
412
|
+
console.error(`Imported ${created} issues from Jira ${projectLabel}`);
|
|
413
|
+
return {
|
|
414
|
+
success: true,
|
|
415
|
+
synced: created,
|
|
416
|
+
imported: created,
|
|
417
|
+
total: filtered.length,
|
|
418
|
+
project: projectLabel,
|
|
419
|
+
summary: `Imported ${created} issues from Jira ${projectLabel}`,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
function readPmItems(pmRoot) {
|
|
423
|
+
const result = spawnSync("pm", ["--path", pmRoot, "--json", "list", "--full", "--include-body", "--limit", "10000"], { encoding: "utf-8" });
|
|
424
|
+
if (result.status !== 0) {
|
|
425
|
+
throw new CommandError(result.stderr || "pm list failed");
|
|
426
|
+
}
|
|
427
|
+
try {
|
|
428
|
+
const parsed = JSON.parse(result.stdout);
|
|
429
|
+
const items = Array.isArray(parsed) ? parsed : parsed.items ?? parsed.results ?? [];
|
|
430
|
+
return items;
|
|
431
|
+
}
|
|
432
|
+
catch {
|
|
433
|
+
throw new CommandError("Could not parse `pm list --json` output.");
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
// Convert a pm item to a Jira create payload. `projectKey` is optional so the
|
|
437
|
+
// transform stays pure/testable; the exporter requires it before POSTing.
|
|
438
|
+
export function itemToJiraPayload(item, projectKey) {
|
|
439
|
+
const summary = (item.title ?? "(untitled)").trim() || "(untitled)";
|
|
440
|
+
const bodyText = item.body || item.description || "";
|
|
441
|
+
return {
|
|
442
|
+
fields: {
|
|
443
|
+
...(projectKey ? { project: { key: projectKey } } : {}),
|
|
444
|
+
summary,
|
|
445
|
+
description: plainTextToAdf(bodyText),
|
|
446
|
+
issuetype: { name: "Task" },
|
|
447
|
+
labels: (item.tags ?? []).map((t) => t.replace(/\s+/g, "-")),
|
|
448
|
+
},
|
|
449
|
+
};
|
|
450
|
+
}
|
|
190
451
|
// ---------------------------------------------------------------------------
|
|
191
|
-
// Extension
|
|
452
|
+
// Extension
|
|
192
453
|
// ---------------------------------------------------------------------------
|
|
454
|
+
const PULL_FLAGS = [
|
|
455
|
+
{ long: "--project", value_name: "KEY", description: "Jira project key (e.g. PROJ)" },
|
|
456
|
+
{ long: "--jql", value_name: "query", description: "Custom JQL query (overrides --project default)" },
|
|
457
|
+
{ long: "--host", value_name: "url", description: "Jira base URL override (else JIRA_BASE_URL)" },
|
|
458
|
+
{ long: "--max-results", value_name: "n", description: "Max issues to fetch (default: 500)" },
|
|
459
|
+
{ long: "--status", value_name: "filter", description: "Filter by pm status (open|in_progress|closed|blocked)" },
|
|
460
|
+
{ long: "--status-map", value_name: "map", description: 'Override status mapping, e.g. "QA=blocked,Done=closed"' },
|
|
461
|
+
{ long: "--dry-run", description: "Preview without writing" },
|
|
462
|
+
];
|
|
463
|
+
const EXPORT_FLAGS = [
|
|
464
|
+
{ long: "--project", value_name: "KEY", description: "Target Jira project key for created issues" },
|
|
465
|
+
{ long: "--host", value_name: "url", description: "Jira base URL override (else JIRA_BASE_URL)" },
|
|
466
|
+
{ long: "--push", description: "POST the payloads to Jira (requires creds + --project)" },
|
|
467
|
+
];
|
|
193
468
|
export default defineExtension({
|
|
194
469
|
name: "pm-jira",
|
|
195
|
-
version: "2026.6.
|
|
470
|
+
version: "2026.6.2",
|
|
196
471
|
activate(api) {
|
|
197
472
|
// -----------------------------------------------------------------------
|
|
198
|
-
//
|
|
473
|
+
// schema — declare Jira provenance fields so the workspace knows them
|
|
474
|
+
// -----------------------------------------------------------------------
|
|
475
|
+
api.registerItemFields([
|
|
476
|
+
{ name: "jira_key", type: "string", optional: true },
|
|
477
|
+
{ name: "jira_url", type: "string", optional: true },
|
|
478
|
+
]);
|
|
479
|
+
// -----------------------------------------------------------------------
|
|
480
|
+
// Command: pm jira sync (legacy name; kept for back-compat)
|
|
199
481
|
// -----------------------------------------------------------------------
|
|
200
482
|
api.registerCommand({
|
|
201
483
|
name: "jira sync",
|
|
@@ -206,167 +488,89 @@ export default defineExtension({
|
|
|
206
488
|
"pm jira sync --project PROJ --max-results 200",
|
|
207
489
|
"pm jira sync --jql 'project = PROJ AND assignee = currentUser()'",
|
|
208
490
|
"pm jira sync --project PROJ --status open --dry-run",
|
|
491
|
+
"pm jira sync --project PROJ --status-map 'QA=blocked,Done=closed'",
|
|
209
492
|
],
|
|
210
|
-
flags:
|
|
211
|
-
{
|
|
212
|
-
long: "--project",
|
|
213
|
-
value_name: "KEY",
|
|
214
|
-
description: "Jira project key (e.g. PROJ)",
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
long: "--jql",
|
|
218
|
-
value_name: "query",
|
|
219
|
-
description: "Custom JQL query",
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
long: "--max-results",
|
|
223
|
-
value_name: "n",
|
|
224
|
-
description: "Max issues to sync (default: 500)",
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
long: "--dry-run",
|
|
228
|
-
description: "Preview without writing",
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
long: "--status",
|
|
232
|
-
value_name: "filter",
|
|
233
|
-
description: "Filter by pm status (open|in_progress|closed|blocked)",
|
|
234
|
-
},
|
|
235
|
-
],
|
|
493
|
+
flags: PULL_FLAGS,
|
|
236
494
|
async run(ctx) {
|
|
237
|
-
|
|
238
|
-
const customJql = readStringOption(ctx.options, "jql");
|
|
239
|
-
const maxResults = readNumberOption(ctx.options, "max-results") ?? 500;
|
|
240
|
-
const dryRun = readBooleanOption(ctx.options, "dry-run");
|
|
241
|
-
const statusFilter = readStringOption(ctx.options, "status");
|
|
242
|
-
// Validate env vars
|
|
243
|
-
const baseUrl = process.env["JIRA_BASE_URL"];
|
|
244
|
-
const token = process.env["JIRA_API_TOKEN"];
|
|
245
|
-
const email = process.env["JIRA_EMAIL"];
|
|
246
|
-
if (!baseUrl || !token || !email) {
|
|
247
|
-
throw new CommandError("Missing required environment variables. Please set JIRA_BASE_URL, JIRA_API_TOKEN, and JIRA_EMAIL.", EXIT_CODE.USAGE);
|
|
248
|
-
}
|
|
249
|
-
if (!project && !customJql) {
|
|
250
|
-
throw new CommandError("Provide either --project <KEY> or --jql <query> to specify which issues to sync.", EXIT_CODE.USAGE);
|
|
251
|
-
}
|
|
252
|
-
const jql = customJql ??
|
|
253
|
-
`project = ${project} AND statusCategory != Done ORDER BY priority ASC`;
|
|
254
|
-
const authHeader = `Basic ${Buffer.from(`${email}:${token}`).toString("base64")}`;
|
|
255
|
-
console.error(`Fetching issues from Jira... (JQL: ${jql})`);
|
|
256
|
-
let issues;
|
|
257
|
-
try {
|
|
258
|
-
issues = await fetchAllJiraIssues(baseUrl.replace(/\/$/, ""), authHeader, jql, maxResults);
|
|
259
|
-
}
|
|
260
|
-
catch (err) {
|
|
261
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
262
|
-
throw new CommandError(`Failed to fetch issues from Jira: ${msg}`);
|
|
263
|
-
}
|
|
264
|
-
console.error(`Fetched ${issues.length} issues from Jira`);
|
|
265
|
-
// Apply status filter before upsert
|
|
266
|
-
const filtered = statusFilter
|
|
267
|
-
? issues.filter((issue) => mapJiraStatus(issue.fields.status.name) === statusFilter)
|
|
268
|
-
: issues;
|
|
269
|
-
if (statusFilter && filtered.length !== issues.length) {
|
|
270
|
-
console.error(`Filtered to ${filtered.length} issues with pm status "${statusFilter}"`);
|
|
271
|
-
}
|
|
272
|
-
if (dryRun) {
|
|
273
|
-
console.error(`[dry-run] Would upsert ${filtered.length} items:`);
|
|
274
|
-
for (const issue of filtered.slice(0, 20)) {
|
|
275
|
-
console.error(` ${issue.key}: ${issue.fields.summary} [${mapJiraStatus(issue.fields.status.name)}]`);
|
|
276
|
-
}
|
|
277
|
-
if (filtered.length > 20) {
|
|
278
|
-
console.error(` ... and ${filtered.length - 20} more`);
|
|
279
|
-
}
|
|
280
|
-
return {
|
|
281
|
-
success: true,
|
|
282
|
-
dryRun: true,
|
|
283
|
-
total: filtered.length,
|
|
284
|
-
project: project ?? "custom-jql",
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
// Create items via pm CLI
|
|
288
|
-
let upserted = 0;
|
|
289
|
-
for (const issue of filtered) {
|
|
290
|
-
const tags = [
|
|
291
|
-
...(issue.fields.labels ?? []),
|
|
292
|
-
...(issue.fields.fixVersions?.map((v) => v.name) ?? []),
|
|
293
|
-
];
|
|
294
|
-
const body = adfToPlainText(issue.fields.description);
|
|
295
|
-
const priority = mapJiraPriority(issue.fields.priority?.name);
|
|
296
|
-
const result = spawnSync("pm", [
|
|
297
|
-
"--path", ctx.pm_root,
|
|
298
|
-
"create",
|
|
299
|
-
"--title", `[${issue.key}] ${issue.fields.summary}`,
|
|
300
|
-
"--status", mapJiraStatus(issue.fields.status.name),
|
|
301
|
-
"--type", "Issue",
|
|
302
|
-
"--priority", String(priority),
|
|
303
|
-
...(body ? ["--body", body] : []),
|
|
304
|
-
...(issue.fields.duedate ? ["--deadline", issue.fields.duedate] : []),
|
|
305
|
-
...(tags.length > 0 ? ["--tags", tags.join(",")] : []),
|
|
306
|
-
], { encoding: "utf-8" });
|
|
307
|
-
if (result.status === 0) {
|
|
308
|
-
upserted++;
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
console.error(`Failed to create item for ${issue.key}: ${result.stderr ?? ""}`);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
const projectLabel = project ?? "custom-jql";
|
|
315
|
-
console.error(`Synced ${upserted} issues from Jira project ${projectLabel}`);
|
|
316
|
-
return {
|
|
317
|
-
success: true,
|
|
318
|
-
synced: upserted,
|
|
319
|
-
total: filtered.length,
|
|
320
|
-
project: projectLabel,
|
|
321
|
-
summary: `Synced ${upserted} issues from Jira project ${projectLabel}`,
|
|
322
|
-
};
|
|
495
|
+
return runImport(ctx.options, ctx.pm_root);
|
|
323
496
|
},
|
|
324
497
|
});
|
|
325
498
|
// -----------------------------------------------------------------------
|
|
326
|
-
//
|
|
499
|
+
// importer — `pm jira import` (native import pipeline)
|
|
500
|
+
// -----------------------------------------------------------------------
|
|
501
|
+
api.registerImporter("jira", async (ctx) => {
|
|
502
|
+
return runImport(ctx.options || {}, ctx.pm_root);
|
|
503
|
+
});
|
|
504
|
+
// -----------------------------------------------------------------------
|
|
505
|
+
// importer — `jira-sync` (config-driven; kept for back-compat)
|
|
506
|
+
// Credentials may arrive via options (importer config) or env.
|
|
327
507
|
// -----------------------------------------------------------------------
|
|
328
508
|
api.registerImporter("jira-sync", async (ctx) => {
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
509
|
+
const options = ctx.options || {};
|
|
510
|
+
// Merge importer-config creds into a virtual env so resolveCreds can read
|
|
511
|
+
// them uniformly without leaking secrets into process.env.
|
|
512
|
+
const envLike = {
|
|
513
|
+
...process.env,
|
|
514
|
+
...(typeof options["JIRA_BASE_URL"] === "string" ? { JIRA_BASE_URL: options["JIRA_BASE_URL"] } : {}),
|
|
515
|
+
...(typeof options["JIRA_API_TOKEN"] === "string" ? { JIRA_API_TOKEN: options["JIRA_API_TOKEN"] } : {}),
|
|
516
|
+
...(typeof options["JIRA_EMAIL"] === "string" ? { JIRA_EMAIL: options["JIRA_EMAIL"] } : {}),
|
|
517
|
+
};
|
|
518
|
+
const creds = resolveCreds(options, envLike);
|
|
519
|
+
const project = readStringOption(options, "project");
|
|
520
|
+
const customJql = readStringOption(options, "jql");
|
|
521
|
+
const maxResults = readNumberOption(options, "max-results") ?? 500;
|
|
522
|
+
const statusMap = parseStatusMap(readStringOption(options, "status-map"));
|
|
341
523
|
if (!project && !customJql) {
|
|
342
524
|
throw new CommandError("jira-sync importer requires either options.project or options.jql", EXIT_CODE.USAGE);
|
|
343
525
|
}
|
|
344
526
|
const jql = customJql ??
|
|
345
527
|
`project = ${project} AND statusCategory != Done ORDER BY priority ASC`;
|
|
346
|
-
const authHeader = `Basic ${Buffer.from(`${email}:${token}`).toString("base64")}`;
|
|
347
528
|
console.error(`[jira-sync] Fetching issues with JQL: ${jql}`);
|
|
348
|
-
const issues = await fetchAllJiraIssues(baseUrl
|
|
529
|
+
const issues = await fetchAllJiraIssues(creds.baseUrl, creds.authHeader, jql, maxResults);
|
|
349
530
|
console.error(`[jira-sync] Importing ${issues.length} issues`);
|
|
531
|
+
let created = 0;
|
|
350
532
|
for (const issue of issues) {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
533
|
+
if (createPmItem(ctx.pm_root, issueToItem(issue, creds.baseUrl, statusMap)))
|
|
534
|
+
created++;
|
|
535
|
+
}
|
|
536
|
+
console.error(`[jira-sync] Done. Imported ${created} issues.`);
|
|
537
|
+
return { imported: created, total: issues.length };
|
|
538
|
+
});
|
|
539
|
+
// -----------------------------------------------------------------------
|
|
540
|
+
// exporter — `pm jira export` (render pm items as Jira-create payloads)
|
|
541
|
+
// Default: print the JSON payloads. With --push AND creds AND --project,
|
|
542
|
+
// POST each payload to Jira's create-issue API.
|
|
543
|
+
// -----------------------------------------------------------------------
|
|
544
|
+
api.registerExporter("jira", async (ctx) => {
|
|
545
|
+
const options = ctx.options || {};
|
|
546
|
+
const push = readBooleanOption(options, "push");
|
|
547
|
+
const project = readStringOption(options, "project");
|
|
548
|
+
const items = readPmItems(ctx.pm_root);
|
|
549
|
+
if (push) {
|
|
550
|
+
// Resolve creds first so the missing-creds path returns a structured
|
|
551
|
+
// CommandError before we ever build payloads or hit the network.
|
|
552
|
+
const creds = resolveCreds(options);
|
|
553
|
+
if (!project) {
|
|
554
|
+
throw new CommandError("--push requires --project <KEY> (the target Jira project for new issues).", EXIT_CODE.USAGE);
|
|
555
|
+
}
|
|
556
|
+
const payloads = items.map((item) => itemToJiraPayload(item, project));
|
|
557
|
+
let created = 0;
|
|
558
|
+
for (const payload of payloads) {
|
|
559
|
+
try {
|
|
560
|
+
await httpsPost(`${creds.baseUrl}/rest/api/3/issue`, creds.authHeader, JSON.stringify(payload));
|
|
561
|
+
created++;
|
|
562
|
+
}
|
|
563
|
+
catch (err) {
|
|
564
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
565
|
+
throw new CommandError(`Failed to create Jira issue: ${msg}`);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
console.error(`Created ${created} issue(s) in Jira project ${project}.`);
|
|
569
|
+
return { pushed: true, created, project };
|
|
368
570
|
}
|
|
369
|
-
|
|
571
|
+
const payloads = items.map((item) => itemToJiraPayload(item, project));
|
|
572
|
+
console.log(JSON.stringify(payloads, null, 2));
|
|
573
|
+
return { exported: payloads.length, pushed: false };
|
|
370
574
|
});
|
|
371
575
|
},
|
|
372
576
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,oCAAoC;AACpC,4DAA4D;AAC5D,+EAA+E;AAC/E,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,yDAAyD;AACzD,6EAA6E;AAE7E,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,MAAM,eAAe,GAA+B,CAAC,CAAC,SAAc,EAAE,EAAE,CAAC,SAAS,CAAQ,CAAC;AAE3F,yEAAyE;AACzE,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,eAAe,EAAE,CAAC;IAClB,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;CACJ,CAAC;AAEX,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAS;IACjB,YAAY,OAAe,EAAE,WAAmB,SAAS,CAAC,eAAe;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAyCD,MAAM,UAAU,eAAe,CAAC,YAAgC;IAC9D,IAAI,CAAC,YAAY;QAAE,OAAO,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,CAAC,CAAC;IACxD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,SAAoC;IAEpC,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACtC,6EAA6E;IAC7E,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,IAAI,CAAE,CAAC;IAC5D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,IACE,IAAI,KAAK,aAAa;QACtB,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,gBAAgB;QACzB,IAAI,KAAK,aAAa;QAEtB,OAAO,aAAa,CAAC;IACvB,IACE,IAAI,KAAK,MAAM;QACf,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,QAAQ;QACjB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,WAAW;QAEpB,OAAO,QAAQ,CAAC;IAClB,8CAA8C;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,WAAW,GAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEtF,yCAAyC;AACzC,yCAAyC;AACzC,+EAA+E;AAC/E,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,GAAuB;IACpD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,GAAG,GAA6B,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,YAAY,CACpB,+BAA+B,OAAO,sCAAsC,EAC5E,SAAS,CAAC,KAAK,CAChB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAc,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,YAAY,CACpB,+BAA+B,OAAO,wBAAwB,EAC9D,SAAS,CAAC,KAAK,CAChB,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,YAAY,CACpB,gCAAgC,EAAE,sBAAsB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EACjF,SAAS,CAAC,KAAK,CAChB,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,8EAA8E;AAC9E,4DAA4D;AAC5D,8EAA8E;AAE9E,MAAM,UAAU,cAAc,CAC5B,IAIa;IAEb,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,MAAM,IAAI,IAAI,IAAI,OAAQ,IAA0B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3E,OAAQ,IAAyB,CAAC,IAAI,CAAC;IACzC,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAE,IAAgC,CAAC,OAAO,CAAC,EAAE,CAAC;QAClF,OAAQ,IAA+B,CAAC,OAAO;aAC5C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAA6D,CAAC,CAAC;aAC7F,IAAI,CAAC,EAAE,CAAC;aACR,IAAI,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gFAAgF;AAChF,yCAAyC;AACzC,MAAM,UAAU,cAAc,CAAC,IAAY;IAKzC,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,OAAO;QACL,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAM,WAAW,GAAG,wCAAwC,CAAC;AAE7D,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,SAAiB;IAC3D,OAAO,QAAQ,GAAG,KAAK,SAAS,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC;AACpC,CAAC;AAED,8EAA8E;AAC9E,gEAAgE;AAChE,2EAA2E;AAC3E,wEAAwE;AACxE,6EAA6E;AAC7E,qDAAqD;AACrD,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,eAAe,CAAC,OAAgC,EAAE,KAAa;IACtE,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAgC,EAChC,KAAa;IAEb,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAgC,EAChC,KAAa;IAEb,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAgC,EAChC,KAAa;IAEb,MAAM,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgC,EAAE,GAAG,IAAc;IAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgC,EAAE,YAAoB,EAAE,GAAG,IAAc;IACjG,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgC,EAAE,GAAG,IAAc;IAC/E,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC;AAcD,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,MAAM,UAAU,YAAY,CAC1B,OAAgC,EAChC,UAA6B,OAAO,CAAC,GAAG;IAExC,MAAM,OAAO,GACX,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC;QACjC,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAEzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CACpB,6BAA6B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACjD,sEAAsE;YACtE,+EAA+E,EACjF,SAAS,CAAC,KAAK,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClF,OAAO,EAAE,OAAO,EAAE,OAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAM,EAAE,KAAK,EAAE,KAAM,EAAE,UAAU,EAAE,CAAC;AAC5F,CAAC;AAED,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,GAAW,EAAE,UAAkB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;YACrC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU;gBACzB,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC/B,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBAC5C,MAAM,CACJ,IAAI,KAAK,CACP,kBAAkB,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC1D,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;YACzB,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,UAAkB,EAAE,OAAe;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU;gBACzB,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;gBAC1B,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aACrD;SACF,CAAC;QAEF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC/B,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBAC5C,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;YACzB,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,UAAkB,EAClB,GAAW,EACX,UAAkB;IAElB,MAAM,MAAM,GACV,yEAAyE,CAAC;IAC5E,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAE3C,OAAO,SAAS,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,GAAG,GACP,GAAG,OAAO,oBAAoB;YAC9B,QAAQ,kBAAkB,CAAC,GAAG,CAAC,EAAE;YACjC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE;YACvC,YAAY,OAAO,EAAE;YACrB,eAAe,SAAS,EAAE,CAAC;QAE7B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QACpD,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAE9B,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM;IACnC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAgBD,MAAM,UAAU,WAAW,CACzB,KAAgB,EAChB,OAAe,EACf,SAAoC;IAEpC,MAAM,IAAI,GAAa;QACrB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACxD,CAAC;IACF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,KAAK,CAAC,GAAG,EAAE,CAAC;IACtE,OAAO;QACL,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;QAC/C,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;QAC1D,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;QACtD,IAAI,EAAE,OAAO;QACb,IAAI;QACJ,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;QAC3C,yEAAyE;QACzE,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,IAAiB;IACrD,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE,MAAM;QAChB,QAAQ;QACR,SAAS,EAAE,IAAI,CAAC,KAAK;QACrB,UAAU,EAAE,IAAI,CAAC,MAAM;QACvB,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC,eAAe,EAAE,IAAI,CAAC,WAAW;QACjC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,uEAAuE;AACvE,4EAA4E;AAC5E,KAAK,UAAU,SAAS,CACtB,OAAgC,EAChC,MAAc,EACd,OAAoD,EAAE;IAEtD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC;IACnE,MAAM,SAAS,GAAG,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE9E,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CACpB,oFAAoF,EACpF,SAAS,CAAC,KAAK,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GACP,SAAS;QACT,aAAa,OAAO,mDAAmD,CAAC;IAE1E,OAAO,CAAC,KAAK,CAAC,sCAAsC,GAAG,GAAG,CAAC,CAAC;IAE5D,IAAI,MAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC;QACzF,MAAM,IAAI,YAAY,CAAC,qCAAqC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,MAAM,mBAAmB,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,KAAK;QACL,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;KACnD,CAAC,CAAC,CAAC;IAEJ,MAAM,QAAQ,GAAG,YAAY;QAC3B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC;QAC3D,CAAC,CAAC,MAAM,CAAC;IAEX,IAAI,YAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,2BAA2B,YAAY,GAAG,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,IAAI,YAAY,CAAC;IAE7C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC;QAClE,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,CAAC,KAAK,CAAC,aAAa,QAAQ,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;QAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACxF,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;QACvC,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;;YACrC,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,YAAY,OAAO,qBAAqB,YAAY,EAAE,CAAC,CAAC;IACtE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,YAAY,OAAO,qBAAqB,YAAY,EAAE;KAChE,CAAC;AACJ,CAAC;AAeD,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,MAAM,GAAG,SAAS,CACtB,IAAI,EACJ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,CAAC,EACpF,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACpF,OAAO,KAAiB,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CAAC,0CAA0C,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAYD,8EAA8E;AAC9E,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,UAAmB;IACjE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IACrD,OAAO;QACL,MAAM,EAAE;YACN,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,OAAO;YACP,WAAW,EAAE,cAAc,CAAC,QAAQ,CAAC;YACrC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3B,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAC7D;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,UAAU,GAAG;IACjB,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,8BAA8B,EAAE;IACrF,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,gDAAgD,EAAE;IACrG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,6CAA6C,EAAE;IACjG,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,oCAAoC,EAAE;IAC7F,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,uDAAuD,EAAE;IAChH,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,wDAAwD,EAAE;IAClH,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,yBAAyB,EAAE;CAC9D,CAAC;AAEF,MAAM,YAAY,GAAG;IACnB,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,4CAA4C,EAAE;IACnG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,6CAA6C,EAAE;IACjG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;CAC1F,CAAC;AAEF,eAAe,eAAe,CAAC;IAC7B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,UAAU;IAEnB,QAAQ,CAAC,GAAG;QACV,0EAA0E;QAC1E,sEAAsE;QACtE,0EAA0E;QAC1E,GAAG,CAAC,kBAAkB,CAAC;YACrB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;SACrD,CAAC,CAAC;QAEH,0EAA0E;QAC1E,4DAA4D;QAC5D,0EAA0E;QAC1E,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,gCAAgC;YAC7C,MAAM,EAAE,uEAAuE;YAC/E,QAAQ,EAAE;gBACR,6BAA6B;gBAC7B,+CAA+C;gBAC/C,kEAAkE;gBAClE,qDAAqD;gBACrD,mEAAmE;aACpE;YACD,KAAK,EAAE,UAAU;YACjB,KAAK,CAAC,GAAG,CAAC,GAAG;gBACX,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;SACF,CAAC,CAAC;QAEH,0EAA0E;QAC1E,uDAAuD;QACvD,0EAA0E;QAC1E,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YAC9C,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,0EAA0E;QAC1E,+DAA+D;QAC/D,+DAA+D;QAC/D,0EAA0E;QAC1E,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YACnD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAClC,0EAA0E;YAC1E,2DAA2D;YAC3D,MAAM,OAAO,GAAsB;gBACjC,GAAG,OAAO,CAAC,GAAG;gBACd,GAAG,CAAC,OAAO,OAAO,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpG,GAAG,CAAC,OAAO,OAAO,CAAC,gBAAgB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvG,GAAG,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5F,CAAC;YACF,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC;YACnE,MAAM,SAAS,GAAG,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YAE1E,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,YAAY,CACpB,mEAAmE,EACnE,SAAS,CAAC,KAAK,CAChB,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GACP,SAAS;gBACT,aAAa,OAAO,mDAAmD,CAAC;YAE1E,OAAO,CAAC,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;YAC1F,OAAO,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;YAE/D,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBAAE,OAAO,EAAE,CAAC;YACzF,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,UAAU,CAAC,CAAC;YAC/D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,0EAA0E;QAC1E,wEAAwE;QACxE,yEAAyE;QACzE,gDAAgD;QAChD,0EAA0E;QAC1E,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEvC,IAAI,IAAI,EAAE,CAAC;gBACT,qEAAqE;gBACrE,iEAAiE;gBACjE,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,YAAY,CACpB,2EAA2E,EAC3E,SAAS,CAAC,KAAK,CAChB,CAAC;gBACJ,CAAC;gBACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvE,IAAI,OAAO,GAAG,CAAC,CAAC;gBAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC;wBACH,MAAM,SAAS,CACb,GAAG,KAAK,CAAC,OAAO,mBAAmB,EACnC,KAAK,CAAC,UAAU,EAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACxB,CAAC;wBACF,OAAO,EAAE,CAAC;oBACZ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC7D,MAAM,IAAI,YAAY,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,6BAA6B,OAAO,GAAG,CAAC,CAAC;gBACzE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC5C,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-jira",
|
|
3
|
-
"version": "2026.6.
|
|
3
|
+
"version": "2026.6.2",
|
|
4
4
|
"description": "Jira issue sync for pm-cli",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/node": "^25.9.1",
|
|
42
|
-
"@unbrained/pm-cli": "^2026.5.
|
|
42
|
+
"@unbrained/pm-cli": "^2026.5.31",
|
|
43
43
|
"pm-changelog": "^2026.5.29-2",
|
|
44
44
|
"typescript": "^6.0.3"
|
|
45
45
|
},
|