pm-jira 2026.6.2 → 2026.6.4
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 +35 -1
- package/README.md +111 -14
- package/dist/index.d.ts +95 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +595 -53
- package/dist/index.js.map +1 -1
- package/manifest.json +2 -2
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 2026.6.
|
|
3
|
+
## 2026.6.4 - 2026-06-04
|
|
4
|
+
|
|
5
|
+
### Other
|
|
6
|
+
|
|
7
|
+
- Export --update-existing PUT + import progress and attachment/comment transparency ([pm-jira-yhm3](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-yhm3.toon))
|
|
8
|
+
|
|
9
|
+
## 2026.06.03 - 2026-06-03
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- pm-jira: deepen filters/dry-run/field-mapping/validate/hooks \(enhancement brief 2026-06-03\) ([pm-jira-i7fd](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/features/pm-jira-i7fd.toon))
|
|
14
|
+
- pm-jira: domain-max SDK enhancement \(idempotent import, preflight, rate-limit backoff\) ([pm-jira-4804](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/features/pm-jira-4804.toon))
|
|
15
|
+
- export-on-write hook \(opt-in\) + add 'hooks' capability ([pm-jira-65ao](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-65ao.toon))
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Idempotent import: match on Jira key, update instead of duplicate; persist jira\_key/jira\_url ([pm-jira-3b0b](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-3b0b.toon))
|
|
20
|
+
|
|
21
|
+
### Other
|
|
22
|
+
|
|
23
|
+
- Production-readiness audit 2026-05-28 ([pm-jira-fc13](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-fc13.toon))
|
|
24
|
+
- preflight capability: pm jira preflight command + registerPreflight guard ([pm-jira-vfb3](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-vfb3.toon))
|
|
25
|
+
- Robustness: 429/503 rate-limit backoff + Retry-After on GET/POST ([pm-jira-2up8](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-2up8.toon))
|
|
26
|
+
- manifest capabilities correctness + README + tests + functional verification ([pm-jira-lu1f](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-lu1f.toon))
|
|
27
|
+
- Filters: --assignee augments default JQL ([pm-jira-ia8o](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-ia8o.toon))
|
|
28
|
+
- Decision: what needs live Jira creds \(not exercisable here\) ([pm-jira-49oh](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-49oh.toon))
|
|
29
|
+
- Decision: hook policy \(best-effort, opt-in, no auto-push\) ([pm-jira-h5wu](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-h5wu.toon))
|
|
30
|
+
- Decision: field-mapping model ([pm-jira-7y1y](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-7y1y.toon))
|
|
31
|
+
- Manifest capability correctness + README ([pm-jira-wsn0](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-wsn0.toon))
|
|
32
|
+
- pm jira validate diagnostics \(--json, no secret leak\) ([pm-jira-4dfb](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-4dfb.toon))
|
|
33
|
+
- Field-mapping depth + --map override \(both directions\) ([pm-jira-7bmf](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-7bmf.toon))
|
|
34
|
+
- --dry-run on import AND export \(no-network\), with strace proof ([pm-jira-4r5q](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-4r5q.toon))
|
|
35
|
+
- JQL builder + convenience filters \(--assignee/--issue-type/--label/--updated-since\) ([pm-jira-ko1c](https://github.com/unbraind/pm-jira/blob/main/.agents/pm/tasks/pm-jira-ko1c.toon))
|
|
36
|
+
|
|
37
|
+
## 2026.06.02 - 2026-06-02
|
|
4
38
|
|
|
5
39
|
### Added
|
|
6
40
|
|
package/README.md
CHANGED
|
@@ -6,13 +6,16 @@ A [pm-cli](https://github.com/unbraind/pm-cli) extension that syncs Jira issues
|
|
|
6
6
|
|
|
7
7
|
- Pull issues from any Jira project into pm items via `pm jira import` or `pm jira sync`
|
|
8
8
|
- Export pm items back out as Jira create payloads via `pm jira export` (preview, or `--push` to create issues)
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
9
|
+
- **Convenience JQL filters** — `--project`, `--status`, `--assignee`, `--issue-type`, `--label`, `--updated-since` compose into a single JQL query (or pass full `--jql` to override)
|
|
10
|
+
- **Rich field mapping** — Jira status (by name, with a `statusCategory` fallback for custom workflows), priority, issue type → pm type, labels/fix-versions → tags, assignee → tag; configurable with `--status-map` and a general `--map jiraField=pmField`
|
|
11
|
+
- **`--dry-run` everywhere** — both import and export print the exact request / mutations they *would* make and perform **no network call** (the offline-testable, creds-free path)
|
|
12
|
+
- **`pm jira validate`** — report Jira credential/base-URL readiness without leaking any secret (hostname-only preview); `--json` aware
|
|
13
|
+
- Optional, opt-in **export-on-write hook** (`PM_JIRA_PUSH_ON_WRITE`) — best-effort, never breaks your pm command, no-op without credentials
|
|
14
|
+
- Jira provenance (key + browse URL) persisted in the item description and declared as `jira_key` / `jira_url` schema fields; on export, items that already carry a Jira key become an `update` (PUT) instead of a duplicate create
|
|
14
15
|
- Works as a `pm jira sync`/`pm jira import` command, a `pm jira export` exporter, and a config-driven `jira-sync` importer
|
|
15
16
|
|
|
17
|
+
> **Which features need live Jira credentials?** Everything except the actual network round-trip is usable and testable offline. Building JQL, previewing requests/mutations with `--dry-run`, field mapping in both directions, and `pm jira validate` all work with **no creds and no network**. You only need `JIRA_BASE_URL` / `JIRA_EMAIL` / `JIRA_API_TOKEN` for: a real import fetch, `pm jira export --push` (creating/updating issues), and live reachability.
|
|
18
|
+
|
|
16
19
|
## Installation
|
|
17
20
|
|
|
18
21
|
Install with pm from GitHub:
|
|
@@ -96,13 +99,47 @@ pm jira import --project PROJ --status-map "QA=blocked,Done=closed"
|
|
|
96
99
|
|
|
97
100
|
| Flag | Type | Default | Description |
|
|
98
101
|
|---|---|---|---|
|
|
99
|
-
| `--project` | string | — | Jira project key (e.g. `PROJ`).
|
|
100
|
-
| `--jql` | string | — | Custom JQL query.
|
|
102
|
+
| `--project` | string | — | Jira project key (e.g. `PROJ`). Composed into JQL. |
|
|
103
|
+
| `--jql` | string | — | Custom JQL query. Used verbatim; overrides all convenience filters below. |
|
|
104
|
+
| `--status` | string | — | Filter by pm status (`open`/`in_progress`/`closed`/`blocked`, mapped to a `statusCategory` clause) or a raw Jira status name. Also filters imported items client-side. |
|
|
105
|
+
| `--assignee` | string | — | Filter by assignee (accountId, name, or a function like `currentUser()`). |
|
|
106
|
+
| `--issue-type` | string | — | Filter by Jira issue type (e.g. `Bug`). |
|
|
107
|
+
| `--label` | string | — | Filter by Jira label. |
|
|
108
|
+
| `--updated-since` | string | — | Filter by updated date, relative (`-7d`) or absolute (`2026-01-01`). |
|
|
109
|
+
| `--status-map` | string | — | Override status mapping, e.g. `"In Review=in_progress,QA=blocked"`. |
|
|
110
|
+
| `--map` | string | — | Override field mapping, e.g. `"issuetype=Task,assignee=skip"`. |
|
|
101
111
|
| `--host` | string | `$JIRA_BASE_URL` | Jira base URL override. |
|
|
102
112
|
| `--max-results` | number | `500` | Maximum number of issues to pull. |
|
|
103
|
-
| `--
|
|
104
|
-
|
|
105
|
-
|
|
113
|
+
| `--dry-run` | boolean | `false` | Print the JQL + exact GET request that would run; **no network call**. |
|
|
114
|
+
|
|
115
|
+
When no `--jql` is given, the convenience filters are AND-combined; if you don't
|
|
116
|
+
filter on status, a `statusCategory != Done` clause is appended so an unscoped
|
|
117
|
+
pull stays focused on active work (the historical default).
|
|
118
|
+
|
|
119
|
+
#### `--map` field overrides
|
|
120
|
+
|
|
121
|
+
`--map` accepts a comma list of `jiraField=pmTarget` pairs. Recognized Jira-side
|
|
122
|
+
keys: `status`, `statuscategory`, `priority`, `issuetype` (alias `type`),
|
|
123
|
+
`labels`, `assignee`, `duedate`. Examples:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# Pin every imported item's type, and skip the assignee tag
|
|
127
|
+
pm jira import --project PROJ --map "issuetype=Task,assignee=skip"
|
|
128
|
+
|
|
129
|
+
# Force a pm status regardless of the Jira workflow state
|
|
130
|
+
pm jira import --project PROJ --map "status=in_progress"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### Progress + transparency notes (STDERR)
|
|
134
|
+
|
|
135
|
+
For large paginated imports the importer prints `Fetched N/total...` progress to
|
|
136
|
+
**STDERR** after each page, so a multi-page pull surfaces feedback instead of
|
|
137
|
+
looking hung. This is additive and never touches the stdout / `--json` output.
|
|
138
|
+
|
|
139
|
+
If any fetched issue carries **attachments or comments**, the importer logs a
|
|
140
|
+
one-line note to STDERR that those are **not imported** (pm-jira imports
|
|
141
|
+
title / body / status / priority / labels / due-date only). This prevents a
|
|
142
|
+
silent expectation that attachment or comment data came across.
|
|
106
143
|
|
|
107
144
|
### Exporter: `pm jira export`
|
|
108
145
|
|
|
@@ -113,18 +150,62 @@ Render pm items as Jira create payloads. Prints JSON by default; with `--push`
|
|
|
113
150
|
# Preview the Jira create payloads for all pm items (no network, no creds needed)
|
|
114
151
|
pm jira export --project PROJ
|
|
115
152
|
|
|
153
|
+
# Print the exact mutations that WOULD run (create vs update), no network/creds
|
|
154
|
+
pm jira export --project PROJ --dry-run
|
|
155
|
+
|
|
156
|
+
# Derive Jira issuetype + priority from each pm item's type/priority
|
|
157
|
+
pm jira export --project PROJ --rich --dry-run
|
|
158
|
+
|
|
116
159
|
# Actually create the issues in Jira (requires creds + --project)
|
|
117
160
|
pm jira export --push --project PROJ
|
|
161
|
+
|
|
162
|
+
# Also PUT changed fields back to issues that already carry a Jira key
|
|
163
|
+
pm jira export --push --project PROJ --update-existing
|
|
164
|
+
|
|
165
|
+
# Preview exactly what --update-existing would do (no network)
|
|
166
|
+
pm jira export --project PROJ --update-existing --dry-run
|
|
118
167
|
```
|
|
119
168
|
|
|
120
169
|
| Flag | Type | Default | Description |
|
|
121
170
|
|---|---|---|---|
|
|
122
171
|
| `--project` | string | — | Target Jira project key for created issues (required for `--push`). |
|
|
172
|
+
| `--map` | string | — | Override field mapping, e.g. `"issuetype=Story"`. |
|
|
173
|
+
| `--rich` | boolean | `false` | Derive Jira `issuetype` + `priority` from the pm item type/priority. |
|
|
174
|
+
| `--update-existing` | boolean | `false` | PUT changed fields to issues that already carry a Jira key. Without it, those items are skipped (no duplicate, no mutation). |
|
|
175
|
+
| `--dry-run` | boolean | `false` | Print the Jira POST/PUT mutations that would run; **no network call**. |
|
|
123
176
|
| `--host` | string | `$JIRA_BASE_URL` | Jira base URL override. |
|
|
124
177
|
| `--push` | boolean | `false` | POST payloads to Jira (requires credentials + `--project`). |
|
|
125
178
|
|
|
126
179
|
Items whose description carries a `Jira <KEY>: <url>` provenance marker (added on
|
|
127
|
-
import)
|
|
180
|
+
import) are matched back to their upstream issue and become an `update` (PUT):
|
|
181
|
+
|
|
182
|
+
- **By default** (`--push` alone) those items are **skipped** so a re-export
|
|
183
|
+
never duplicates or unexpectedly mutates an existing Jira issue — only items
|
|
184
|
+
without a key are created. `--dry-run` shows them as `SKIP`.
|
|
185
|
+
- **With `--update-existing`** each matched item is PUT to Jira's edit-issue
|
|
186
|
+
endpoint (`/rest/api/3/issue/<KEY>`) with its changed fields (the immutable
|
|
187
|
+
`project` field is stripped, as Jira's edit API rejects it). `--dry-run` shows
|
|
188
|
+
them as `UPDATE PUT ...` so you can review the exact mutations offline first.
|
|
189
|
+
|
|
190
|
+
### Command: `pm jira validate`
|
|
191
|
+
|
|
192
|
+
Report whether pm-jira has the credentials/base URL it needs — **without making
|
|
193
|
+
a network call and without leaking any secret value** (it prints a hostname-only
|
|
194
|
+
preview, never the token or email):
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
pm jira validate # human-readable readiness summary
|
|
198
|
+
pm jira validate --json # structured object: { ready, baseUrlPresent, ... }
|
|
199
|
+
pm jira validate --host https://company.atlassian.net
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Export-on-write hook (opt-in)
|
|
203
|
+
|
|
204
|
+
Setting `PM_JIRA_PUSH_ON_WRITE=1` activates a best-effort `onWrite` hook. It is a
|
|
205
|
+
strict no-op unless both the env flag is truthy **and** Jira credentials are
|
|
206
|
+
present, and it can never fail your `pm` command (the pm hook runtime swallows
|
|
207
|
+
any error). It intentionally does **not** auto-POST on every write; use the
|
|
208
|
+
explicit, reviewable `pm jira export --push` to mirror items upstream.
|
|
128
209
|
|
|
129
210
|
### Importer: `jira-sync` (config-driven)
|
|
130
211
|
|
|
@@ -167,6 +248,22 @@ The default mapping (override per-status with `--status-map`):
|
|
|
167
248
|
| Done, Resolved, Closed, Complete, Completed | `closed` |
|
|
168
249
|
| Blocked | `blocked` |
|
|
169
250
|
|
|
251
|
+
When the Jira status *name* is unrecognized (custom workflows), pm-jira falls
|
|
252
|
+
back to the issue's `statusCategory` bucket: `new` → `open`, `indeterminate` →
|
|
253
|
+
`in_progress`, `done` → `closed`.
|
|
254
|
+
|
|
255
|
+
### Issue type mapping
|
|
256
|
+
|
|
257
|
+
| Jira Issue Type | pm Type |
|
|
258
|
+
|---|---|
|
|
259
|
+
| Bug, Defect | `Bug` |
|
|
260
|
+
| Story, Epic | `Feature` |
|
|
261
|
+
| Task, Sub-task | `Task` |
|
|
262
|
+
| (any other) | `Issue` |
|
|
263
|
+
|
|
264
|
+
Override with `--map issuetype=<pmType>` (import) or `--map issuetype=<jiraType>`
|
|
265
|
+
(export, with `--rich`).
|
|
266
|
+
|
|
170
267
|
## Priority Mapping
|
|
171
268
|
|
|
172
269
|
| Jira Priority | pm Priority |
|
|
@@ -230,9 +327,9 @@ npm run dev
|
|
|
230
327
|
|
|
231
328
|
## Requirements
|
|
232
329
|
|
|
233
|
-
- Node.js
|
|
234
|
-
- pm-cli `>=2026.5.
|
|
235
|
-
- TypeScript
|
|
330
|
+
- Node.js 20+ (uses native `https` module and `Buffer`)
|
|
331
|
+
- pm-cli `>=2026.5.31`
|
|
332
|
+
- TypeScript 6.x (dev dependency)
|
|
236
333
|
|
|
237
334
|
## License
|
|
238
335
|
|
package/dist/index.d.ts
CHANGED
|
@@ -39,13 +39,38 @@ interface JiraIssue {
|
|
|
39
39
|
fixVersions?: Array<{
|
|
40
40
|
name: string;
|
|
41
41
|
}>;
|
|
42
|
+
issuetype?: {
|
|
43
|
+
name: string;
|
|
44
|
+
} | null;
|
|
45
|
+
attachment?: Array<unknown> | null;
|
|
46
|
+
comment?: {
|
|
47
|
+
total?: number;
|
|
48
|
+
comments?: Array<unknown>;
|
|
49
|
+
} | null;
|
|
42
50
|
};
|
|
43
51
|
}
|
|
44
52
|
type PmPriority = 1 | 2 | 3 | 4;
|
|
45
53
|
type PmStatus = "open" | "in_progress" | "closed" | "blocked";
|
|
46
54
|
export declare function mapJiraPriority(jiraPriority: string | undefined): PmPriority;
|
|
47
55
|
export declare function mapJiraStatus(jiraStatus: string, statusMap?: Record<string, PmStatus>): PmStatus;
|
|
56
|
+
export declare function mapJiraStatusCategory(categoryKey: string | undefined): PmStatus;
|
|
57
|
+
export declare function mapJiraIssueType(jiraType: string | undefined): string;
|
|
58
|
+
export declare function mapPmPriorityToJira(priority: PmPriority | number | undefined): string;
|
|
59
|
+
export type FieldMap = Record<string, string>;
|
|
60
|
+
export declare function parseFieldMap(raw: string | undefined): FieldMap | undefined;
|
|
48
61
|
export declare function parseStatusMap(raw: string | undefined): Record<string, PmStatus> | undefined;
|
|
62
|
+
export interface JqlFilters {
|
|
63
|
+
jql?: string;
|
|
64
|
+
project?: string;
|
|
65
|
+
status?: string;
|
|
66
|
+
assignee?: string;
|
|
67
|
+
issueType?: string;
|
|
68
|
+
label?: string;
|
|
69
|
+
updatedSince?: string;
|
|
70
|
+
}
|
|
71
|
+
export declare function jqlQuote(value: string): string;
|
|
72
|
+
export declare function buildJql(filters: JqlFilters): string;
|
|
73
|
+
export declare function readJqlFilters(options: Record<string, unknown>): JqlFilters;
|
|
49
74
|
export declare function adfToPlainText(node: JiraIssue["fields"]["description"] | {
|
|
50
75
|
type: string;
|
|
51
76
|
content?: unknown[];
|
|
@@ -80,16 +105,46 @@ export interface JiraCreds {
|
|
|
80
105
|
authHeader: string;
|
|
81
106
|
}
|
|
82
107
|
export declare function resolveCreds(options: Record<string, unknown>, envLike?: NodeJS.ProcessEnv): JiraCreds;
|
|
108
|
+
export interface CredDiagnostics {
|
|
109
|
+
ready: boolean;
|
|
110
|
+
baseUrlPresent: boolean;
|
|
111
|
+
emailPresent: boolean;
|
|
112
|
+
tokenPresent: boolean;
|
|
113
|
+
baseUrlSource: "option" | "env" | "none";
|
|
114
|
+
hostPreview?: string;
|
|
115
|
+
missing: string[];
|
|
116
|
+
}
|
|
117
|
+
export declare function diagnoseCreds(options: Record<string, unknown>, envLike?: NodeJS.ProcessEnv): CredDiagnostics;
|
|
118
|
+
export declare function formatImportProgress(fetched: number, jiraTotal: number, maxResults: number): string;
|
|
83
119
|
export interface IssueToItem {
|
|
84
120
|
title: string;
|
|
85
121
|
status: PmStatus;
|
|
86
122
|
priority: PmPriority;
|
|
123
|
+
type: string;
|
|
87
124
|
body: string;
|
|
88
125
|
tags: string[];
|
|
89
126
|
deadline?: string;
|
|
90
127
|
description: string;
|
|
128
|
+
jiraKey: string;
|
|
129
|
+
jiraUrl: string;
|
|
130
|
+
}
|
|
131
|
+
export interface IssueMapOptions {
|
|
132
|
+
statusMap?: Record<string, PmStatus>;
|
|
133
|
+
fieldMap?: FieldMap;
|
|
134
|
+
}
|
|
135
|
+
export declare function issueToItem(issue: JiraIssue, baseUrl: string, optionsOrStatusMap?: IssueMapOptions | Record<string, PmStatus>): IssueToItem;
|
|
136
|
+
export interface JiraSearchRequest {
|
|
137
|
+
method: "GET";
|
|
138
|
+
url: string;
|
|
139
|
+
fields: string;
|
|
91
140
|
}
|
|
92
|
-
export
|
|
141
|
+
export interface IssueExtras {
|
|
142
|
+
attachments: number;
|
|
143
|
+
comments: number;
|
|
144
|
+
hasExtras: boolean;
|
|
145
|
+
}
|
|
146
|
+
export declare function countIssueExtras(issue: JiraIssue): IssueExtras;
|
|
147
|
+
export declare function buildSearchRequest(baseUrl: string, jql: string, startAt: number, maxResults: number): JiraSearchRequest;
|
|
93
148
|
interface PmItem {
|
|
94
149
|
id?: string;
|
|
95
150
|
title?: string;
|
|
@@ -97,7 +152,10 @@ interface PmItem {
|
|
|
97
152
|
body?: string;
|
|
98
153
|
description?: string;
|
|
99
154
|
tags?: string[];
|
|
155
|
+
priority?: number;
|
|
156
|
+
type?: string;
|
|
100
157
|
}
|
|
158
|
+
export declare function mapPmTypeToJira(pmType: string | undefined, override?: string): string;
|
|
101
159
|
export interface JiraCreatePayload {
|
|
102
160
|
fields: {
|
|
103
161
|
project?: {
|
|
@@ -109,9 +167,44 @@ export interface JiraCreatePayload {
|
|
|
109
167
|
name: string;
|
|
110
168
|
};
|
|
111
169
|
labels: string[];
|
|
170
|
+
priority?: {
|
|
171
|
+
name: string;
|
|
172
|
+
};
|
|
112
173
|
};
|
|
113
174
|
}
|
|
114
|
-
export
|
|
175
|
+
export interface PayloadOptions {
|
|
176
|
+
projectKey?: string;
|
|
177
|
+
fieldMap?: FieldMap;
|
|
178
|
+
richMapping?: boolean;
|
|
179
|
+
}
|
|
180
|
+
export declare function itemToJiraPayload(item: PmItem, projectKeyOrOptions?: string | PayloadOptions): JiraCreatePayload;
|
|
181
|
+
export interface ExportPlanEntry {
|
|
182
|
+
op: "create" | "update";
|
|
183
|
+
itemId?: string;
|
|
184
|
+
existingKey?: string;
|
|
185
|
+
method: "POST" | "PUT";
|
|
186
|
+
endpoint: string;
|
|
187
|
+
payload: JiraCreatePayload;
|
|
188
|
+
}
|
|
189
|
+
export interface ExportPlan {
|
|
190
|
+
baseUrl: string;
|
|
191
|
+
project?: string;
|
|
192
|
+
entries: ExportPlanEntry[];
|
|
193
|
+
}
|
|
194
|
+
export declare function buildExportPlan(items: PmItem[], baseUrl: string, opts?: {
|
|
195
|
+
projectKey?: string;
|
|
196
|
+
fieldMap?: FieldMap;
|
|
197
|
+
richMapping?: boolean;
|
|
198
|
+
}): ExportPlan;
|
|
199
|
+
export interface PushOnWriteDecision {
|
|
200
|
+
shouldPush: boolean;
|
|
201
|
+
reason: string;
|
|
202
|
+
}
|
|
203
|
+
export declare function decidePushOnWrite(hookCtx: {
|
|
204
|
+
path?: string;
|
|
205
|
+
scope?: string;
|
|
206
|
+
op?: string;
|
|
207
|
+
} | undefined, envLike?: NodeJS.ProcessEnv): PushOnWriteDecision;
|
|
115
208
|
declare const _default: {
|
|
116
209
|
name: string;
|
|
117
210
|
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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"}
|