pm-csv 2026.8.16 → 2026.8.28
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 +27 -0
- package/README.md +37 -15
- package/dist/index.d.ts +133 -60
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +419 -463
- package/dist/index.js.map +1 -1
- package/manifest.json +3 -6
- package/package.json +22 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.8.28 - 2026-08-28
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Enforce exact all-source 100/100/100 coverage ([pm-csv-oqmm](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/features/pm-csv-oqmm.toon))
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Changelog scripts consume bounded tracker output and erase release history ([pm-csv-zmcb](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-zmcb.toon))
|
|
12
|
+
- Adopt the canonical certified complete-list reader ([pm-csv-t4cc](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-t4cc.toon))
|
|
13
|
+
- Resume reader comment falsely permits empty map on list-all failure ([pm-csv-u254](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-u254.toon))
|
|
14
|
+
- Post-apply close conflict retains applied transaction markers ([pm-csv-zv31](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-zv31.toon))
|
|
15
|
+
- loadAppliedByTransaction comment describes unsafe pre-fix marker ordering ([pm-csv-21ik](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-21ik.toon))
|
|
16
|
+
- Failed atomic create compensation erases orphan reconciliation markers ([pm-csv-qebc](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-qebc.toon))
|
|
17
|
+
- Atomic aggregate failure receipt overstates rollback certainty ([pm-csv-5si5](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-5si5.toon))
|
|
18
|
+
- Dry-run upserts misreport existing keys as creates ([pm-csv-njaq](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-njaq.toon))
|
|
19
|
+
- Latest published manifest fails pm 2026.8.20 strict health ([pm-csv-0aal](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-0aal.toon))
|
|
20
|
+
|
|
21
|
+
### Security
|
|
22
|
+
|
|
23
|
+
- The identity gate deadlocks the one remediation its own failure message prescribes ([pm-csv-om24](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-om24.toon))
|
|
24
|
+
|
|
25
|
+
### Other
|
|
26
|
+
|
|
27
|
+
- Enable GitHub CodeQL code scanning ([pm-csv-pam9](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/chores/pm-csv-pam9.toon))
|
|
28
|
+
- Alert on daily release failure and require merge drivers in CI ([pm-csv-76gz](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/chores/pm-csv-76gz.toon))
|
|
29
|
+
|
|
3
30
|
## 2026.8.16 - 2026-08-16
|
|
4
31
|
|
|
5
32
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,6 +4,9 @@ CSV importer and exporter for [pm-cli](https://github.com/unbraind/pm-cli).
|
|
|
4
4
|
|
|
5
5
|
Import pm items from a CSV file, export them back out, or wire up a programmatic `csv-import` importer — all with zero external runtime dependencies.
|
|
6
6
|
|
|
7
|
+
The extension requires pm CLI 2026.8.20 or newer. Its development and release
|
|
8
|
+
gates are pinned to pm CLI/SDK 2026.8.21 so host behavior stays reproducible.
|
|
9
|
+
|
|
7
10
|
---
|
|
8
11
|
|
|
9
12
|
## Installation
|
|
@@ -42,7 +45,7 @@ pm csv import legacy.csv --encoding latin1 # non-UTF-8 source
|
|
|
42
45
|
pm csv import sprint12.csv --source 'jira-export-2026-06'
|
|
43
46
|
pm csv import vendor.csv --strict # fail before writing on bad row data
|
|
44
47
|
pm csv import items.csv --dry-run
|
|
45
|
-
pm csv import tasks.csv --atomic #
|
|
48
|
+
pm csv import tasks.csv --atomic # writer-locked, crash-recoverable import
|
|
46
49
|
```
|
|
47
50
|
|
|
48
51
|
**Flags**
|
|
@@ -60,7 +63,7 @@ pm csv import tasks.csv --atomic # all-or-nothing import (pm-cli >= 2026.7.19)
|
|
|
60
63
|
| `--priority <n>` | integer | — | Import **only** rows whose integer priority equals this value |
|
|
61
64
|
| `--strict` | boolean | false | Abort before writing if validation finds missing titles, unknown statuses, invalid/out-of-range priorities, or duplicate mapped columns |
|
|
62
65
|
| `--dry-run` | boolean | false | Preview what would be imported without writing any data |
|
|
63
|
-
| `--atomic` | boolean | false |
|
|
66
|
+
| `--atomic` | boolean | false | Use one writer-locked, crash-recoverable transaction. On failure, attempt best-effort create compensation; pre-existing item updates are intentionally not reverted. Inspect and reconcile any marked orphan before retrying. Incompatible with `--stream` |
|
|
64
67
|
|
|
65
68
|
#### Strict import gate
|
|
66
69
|
|
|
@@ -71,22 +74,26 @@ strict mode the importer runs the same parser as `pm csv validate` before any
|
|
|
71
74
|
write, then aborts on row-level data issues or duplicate mapped columns so a bad
|
|
72
75
|
file cannot partially mutate the pm store.
|
|
73
76
|
|
|
74
|
-
#### Atomic,
|
|
77
|
+
#### Atomic, crash-recoverable import (`--atomic`)
|
|
75
78
|
|
|
76
79
|
By default, `csv import` creates items one row at a time. If a row fails
|
|
77
80
|
mid-import, the rows already written stay in the tracker — a partial,
|
|
78
81
|
non-atomic state — and concurrent agents can interleave writes. `--atomic`
|
|
79
82
|
(requires pm-cli **>= 2026.7.19**) wraps the whole row set in a single
|
|
80
|
-
`commitWorkspaceTransaction` primitive:
|
|
81
|
-
workspace writer
|
|
82
|
-
|
|
83
|
-
- **
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
`commitWorkspaceTransaction` primitive: mutations are serialized under one
|
|
84
|
+
workspace writer lock and recorded in a crash-recoverable journal.
|
|
85
|
+
|
|
86
|
+
- **Failure compensation:** if any row fails, the coordinator attempts
|
|
87
|
+
reverse-order, best-effort compensation for creates by closing them with
|
|
88
|
+
reason `atomic csv import rolled back`, rolls back the transaction journal,
|
|
89
|
+
and exits non-zero with a reconciliation warning. A failed close deliberately
|
|
90
|
+
retains both transaction markers so an operator can inspect and reconcile the
|
|
91
|
+
open orphan by transaction id before retrying. Pre-existing item updates are
|
|
92
|
+
intentionally not reverted because arbitrary prior state is not captured.
|
|
87
93
|
- **Crash-recoverable / resumable:** the transaction id is stable and derivable
|
|
88
|
-
from the
|
|
89
|
-
same `--atomic` import
|
|
94
|
+
from the resolved file path and parsed content fingerprint, so re-running the
|
|
95
|
+
same unchanged `--atomic` import resumes from the durable journal while edited
|
|
96
|
+
content receives a fresh transaction id.
|
|
90
97
|
Resume/compensation matching is **per-row-precise**: every item this
|
|
91
98
|
transaction writes is stamped with a per-row ownership marker
|
|
92
99
|
`csv-txrow:<transactionId>#<rowIndex>` (plus a batch-level
|
|
@@ -105,17 +112,18 @@ workspace writer-locked, crash-recoverable journal, or none are.
|
|
|
105
112
|
- **Parity:** `--atomic` shells out to the same `pm create` the non-atomic path
|
|
106
113
|
uses; without `--atomic`, import output and exit codes are unchanged.
|
|
107
114
|
- **Incompatible with `--stream`:** an unbounded stream cannot be committed as
|
|
108
|
-
one
|
|
115
|
+
one bounded transaction, so `--atomic --stream` fails fast with a usage
|
|
109
116
|
error.
|
|
110
117
|
- **Compensation uses `close`, not `delete`**, to avoid the known history-
|
|
111
118
|
resurrection issue, so compensated items remain in the tracker as closed
|
|
112
119
|
items rather than being erased. For `--key` upsert rows that update
|
|
113
120
|
pre-existing items, the update is applied within the transaction but is not
|
|
114
121
|
reverted on failure (an arbitrary update cannot be safely undone without
|
|
115
|
-
capturing prior state)
|
|
122
|
+
capturing prior state). Compensation is best-effort and reports remaining
|
|
123
|
+
work for operator reconciliation.
|
|
116
124
|
|
|
117
125
|
```bash
|
|
118
|
-
pm csv import tasks.csv --atomic #
|
|
126
|
+
pm csv import tasks.csv --atomic # resumes an unchanged interrupted import
|
|
119
127
|
pm csv import tasks.csv --atomic --source q2 # provenance still recorded
|
|
120
128
|
```
|
|
121
129
|
|
|
@@ -176,6 +184,15 @@ the effective mapped headers.
|
|
|
176
184
|
|
|
177
185
|
Export all pm items (or a filtered subset) to CSV. Without `--output` the CSV is returned in the command result object.
|
|
178
186
|
|
|
187
|
+
Every export, upsert index, and atomic-resume scan reads the whole tracker with
|
|
188
|
+
canonical `pm list --all`, strict source reads, full metadata, and explicitly
|
|
189
|
+
unbounded row and token controls. The public pm SDK certifies source status,
|
|
190
|
+
filter scope, pagination, projection, counts, and item identity before pm-csv
|
|
191
|
+
uses a row. pm-csv additionally rejects missing or contradictory omission,
|
|
192
|
+
read-output, and unreadable-item receipts tracked in pm-cli issue 1078. A
|
|
193
|
+
partial or unverifiable workspace therefore fails closed instead of exporting
|
|
194
|
+
missing rows, creating duplicate upserts, or reapplying an atomic import.
|
|
195
|
+
|
|
179
196
|
```
|
|
180
197
|
pm csv export
|
|
181
198
|
pm csv export --output items.csv
|
|
@@ -348,6 +365,11 @@ no-op without breaking any other behavior.
|
|
|
348
365
|
|
|
349
366
|
## Building
|
|
350
367
|
|
|
368
|
+
`npm run accept:packed` packs the real artifact and exercises strict CSV import
|
|
369
|
+
plus complete CSV export in fresh npm/npx and Bun/bunx projects on the pinned
|
|
370
|
+
development host, and in npm/npx on the declared minimum host. It is mandatory
|
|
371
|
+
inside `npm run release:check`.
|
|
372
|
+
|
|
351
373
|
```bash
|
|
352
374
|
npm install
|
|
353
375
|
npm run build # runs tsc → dist/
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { ExtensionApi } from "@unbrained/pm-cli/sdk/authoring";
|
|
2
2
|
import { type SpawnSyncReturns } from "node:child_process";
|
|
3
|
+
import type { WorkspaceTransactionStep, WorkspaceTransactionCommitResult } from "@unbrained/pm-cli/sdk";
|
|
3
4
|
/**
|
|
4
5
|
* Error carrying a semantic process exit code, thrown by every failure path
|
|
5
6
|
* the command runtime must turn into a clean nonzero exit (including the
|
|
6
|
-
* list
|
|
7
|
+
* complete-list refusals). Exported so regression tests can assert the
|
|
7
8
|
* typed failure instead of matching on message text alone.
|
|
8
9
|
*/
|
|
9
10
|
export declare class CommandError extends Error {
|
|
@@ -121,41 +122,13 @@ declare function resolveDelimiter(raw: string | undefined): string;
|
|
|
121
122
|
* three causes can be regression-tested directly with synthetic results.
|
|
122
123
|
*/
|
|
123
124
|
export declare function describePmNullStatus(result: SpawnSyncReturns<string>, label: string): string;
|
|
124
|
-
/** Subset of the `pm list-all --json` envelope the completeness gate reads.
|
|
125
|
-
*
|
|
126
|
-
* `items` is typed loosely because the CLI owns its row shape; the fields below
|
|
127
|
-
* it are the 2026.8.15 completeness receipt whose signals this package refuses
|
|
128
|
-
* to consume silently at every list-all call site. */
|
|
129
|
-
export interface ListAllEnvelope {
|
|
130
|
-
/** Rows the CLI actually returned. Length can be less than {@link ListAllEnvelope.total}. */
|
|
131
|
-
items?: PmItem[];
|
|
132
|
-
/** Number of rows in `items` as reported by the CLI. */
|
|
133
|
-
count?: number;
|
|
134
|
-
/** Number of rows that exist in the workspace. */
|
|
135
|
-
total?: number;
|
|
136
|
-
/** True when the row list was cut short (output budget, `--limit`, cursor). */
|
|
137
|
-
truncated?: boolean;
|
|
138
|
-
/** True when more rows exist past a cursor boundary. */
|
|
139
|
-
has_more?: boolean;
|
|
140
|
-
/** Readability receipt for the directories/items backing the list. */
|
|
141
|
-
completeness?: {
|
|
142
|
-
status?: string;
|
|
143
|
-
unreadable_item_count?: number;
|
|
144
|
-
unreadable_directory_count?: number;
|
|
145
|
-
};
|
|
146
|
-
/** Receipt for field groups omitted from the projection. */
|
|
147
|
-
omission_receipt?: {
|
|
148
|
-
has_omissions?: boolean;
|
|
149
|
-
omitted_field_group_count?: number;
|
|
150
|
-
omitted_field_groups?: string[];
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
125
|
/**
|
|
154
|
-
* Refuse an incomplete `pm list
|
|
126
|
+
* Refuse an incomplete canonical `pm list --all` envelope instead of consuming it.
|
|
155
127
|
*
|
|
156
128
|
* Reading `.items` without consulting the envelope's completeness receipt is
|
|
157
129
|
* how this package once shipped a 10-row CSV export from a 682-item workspace
|
|
158
|
-
* (pm 2026.8.14 defaulted list-all to a truncated answer;
|
|
130
|
+
* (pm 2026.8.14 defaulted the deprecated list-all alias to a truncated answer;
|
|
131
|
+
* verified on this
|
|
159
132
|
* host), saw none of the applied rows on an atomic-import resume scan, and
|
|
160
133
|
* missed upsert keys - each reporting success. Any one of four independent
|
|
161
134
|
* signals means the rows in `items` are NOT the whole workspace, so this
|
|
@@ -176,11 +149,17 @@ export interface ListAllEnvelope {
|
|
|
176
149
|
* workspace, so refusing loudly is simpler and safer than a paging loop that
|
|
177
150
|
* could itself silently drop rows.
|
|
178
151
|
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
152
|
+
* Shared source, filter, pagination, projection, count, and identity rules come
|
|
153
|
+
* from the public SDK. A narrow package supplement rejects the missing or
|
|
154
|
+
* contradictory omission, read-output, and unreadable-counter evidence
|
|
155
|
+
* reproduced in pm-cli issue 1078. The returned rows are therefore safe for
|
|
156
|
+
* mutation planning, resume reconciliation, and CSV export.
|
|
157
|
+
*
|
|
158
|
+
* @param envelope - Parsed canonical complete-list JSON output.
|
|
159
|
+
* @returns Every certified full item row.
|
|
160
|
+
* @throws {@link CommandError} naming every tripped signal and the counts.
|
|
182
161
|
*/
|
|
183
|
-
export declare function assertListAllComplete(envelope: unknown):
|
|
162
|
+
export declare function assertListAllComplete(envelope: unknown): PmItem[];
|
|
184
163
|
/** Minimal spawn options the seam forwards to `spawnSync`. */
|
|
185
164
|
export interface PmSpawnOptions {
|
|
186
165
|
/** Decoding requested for the child's captured output. */
|
|
@@ -189,7 +168,7 @@ export interface PmSpawnOptions {
|
|
|
189
168
|
maxBuffer: number;
|
|
190
169
|
}
|
|
191
170
|
/**
|
|
192
|
-
* Injectable seam over the `pm` shell-out every list
|
|
171
|
+
* Injectable seam over the `pm` shell-out every complete-list reader uses.
|
|
193
172
|
*
|
|
194
173
|
* A parameter defaulting to the real `spawnPm`, so production callers are
|
|
195
174
|
* unchanged while tests substitute a canned envelope - captured from the real
|
|
@@ -217,6 +196,8 @@ declare function encodeKeyTagValue(value: string): string;
|
|
|
217
196
|
* @returns The decoded value, or `value` itself when it cannot be decoded.
|
|
218
197
|
*/
|
|
219
198
|
declare function decodeKeyTagValue(value: string): string;
|
|
199
|
+
/** Normalize JavaScript's open-ended thrown-value channel for operator errors. */
|
|
200
|
+
declare function errorMessage(error: unknown): string;
|
|
220
201
|
/**
|
|
221
202
|
* Parse a `--map csvHeader=field` spec (repeatable / comma-joined) into a
|
|
222
203
|
* lookup from a normalized CSV header name to the canonical pm field name.
|
|
@@ -284,6 +265,51 @@ declare function stringifyTags(tags: string[] | undefined): string;
|
|
|
284
265
|
* BufferEncoding. Accepts utf-8/utf8, utf16le, latin1. Throws USAGE otherwise.
|
|
285
266
|
*/
|
|
286
267
|
declare function resolveEncoding(raw: string | undefined): SupportedEncoding;
|
|
268
|
+
interface CsvImportOptions {
|
|
269
|
+
delimiter: string;
|
|
270
|
+
dryRun: boolean;
|
|
271
|
+
fieldMap: Record<string, string>;
|
|
272
|
+
/** Auto-map well-known third-party headers (summary->title, owner->assignee, ...). */
|
|
273
|
+
autoMap?: boolean;
|
|
274
|
+
/** Canonical pm field whose value is the dedup key (e.g. "title" or "id"). */
|
|
275
|
+
keyField?: string;
|
|
276
|
+
/** File text encoding to decode the source with (default utf-8). */
|
|
277
|
+
encoding?: SupportedEncoding;
|
|
278
|
+
/** Optional provenance label recorded on imported items via the csv_source field. */
|
|
279
|
+
source?: string;
|
|
280
|
+
/** Row-level filter: only rows matching every set criterion are imported. */
|
|
281
|
+
filter?: ImportRowFilter;
|
|
282
|
+
/** The CSV file has no header row; map columns positionally to IMPORT_COLUMNS. */
|
|
283
|
+
skipHeaders?: boolean;
|
|
284
|
+
/** Stream the file row-by-row instead of loading it fully into memory. */
|
|
285
|
+
stream?: boolean;
|
|
286
|
+
/**
|
|
287
|
+
* Import under one workspace writer-locked, crash-recoverable transaction
|
|
288
|
+
* (pm-cli >= 2026.7.19 `commitWorkspaceTransaction`). On failure the
|
|
289
|
+
* coordinator attempts reverse-order, best-effort create compensation;
|
|
290
|
+
* pre-existing item updates are intentionally not reverted. An interrupted
|
|
291
|
+
* run resumes from the durable journal, while a failed compensation remains
|
|
292
|
+
* transaction-marked so an operator can inspect and reconcile it before a
|
|
293
|
+
* retry. Incompatible with `--stream` (an unbounded stream cannot be one
|
|
294
|
+
* transaction).
|
|
295
|
+
*/
|
|
296
|
+
atomic?: boolean;
|
|
297
|
+
/**
|
|
298
|
+
* Bound commit coordinator for the atomic path. Bound by the command path
|
|
299
|
+
* and importer capability from the host-injected `ctx.sdk`, so a copied
|
|
300
|
+
* extension never tries to resolve the host package through its own module
|
|
301
|
+
* tree. Atomic import refuses when an incompatible host omits this primitive.
|
|
302
|
+
*/
|
|
303
|
+
commitTransaction?: (options: {
|
|
304
|
+
transactionId: string;
|
|
305
|
+
author: string;
|
|
306
|
+
steps: readonly WorkspaceTransactionStep[];
|
|
307
|
+
lockTtlSeconds?: number;
|
|
308
|
+
lockWaitMs?: number;
|
|
309
|
+
}) => Promise<WorkspaceTransactionCommitResult>;
|
|
310
|
+
/** Author attributed to the atomic transaction journal (defaults to `pm-csv`). */
|
|
311
|
+
atomicAuthor?: string;
|
|
312
|
+
}
|
|
287
313
|
/**
|
|
288
314
|
* Row-level import filter. Mirrors the `csv export` filter semantics exactly:
|
|
289
315
|
* - `status` matches the row's *normalized* SDK status (so `done` matches
|
|
@@ -298,6 +324,19 @@ interface ImportRowFilter {
|
|
|
298
324
|
type?: string;
|
|
299
325
|
priority?: number;
|
|
300
326
|
}
|
|
327
|
+
interface ImportResult {
|
|
328
|
+
imported: number;
|
|
329
|
+
updated: number;
|
|
330
|
+
skipped: number;
|
|
331
|
+
/** Subset of `skipped` attributable to a row not matching the import filter. */
|
|
332
|
+
filtered: number;
|
|
333
|
+
/** Auto-applied alias mappings when `--auto-map` is enabled. */
|
|
334
|
+
autoMappings: AutoFieldMapping[];
|
|
335
|
+
errors: string[];
|
|
336
|
+
previews: Record<string, unknown>[];
|
|
337
|
+
/** Helpful warnings about unknown --map targets or missing source headers. */
|
|
338
|
+
fieldMapWarnings: string[];
|
|
339
|
+
}
|
|
301
340
|
interface ParsedRow {
|
|
302
341
|
title: string;
|
|
303
342
|
status: ItemStatus;
|
|
@@ -330,11 +369,26 @@ declare function parseImportFilter(statusRaw: string | undefined, typeRaw: strin
|
|
|
330
369
|
declare function rowMatchesFilter(row: ParsedRow, filter: ImportRowFilter | undefined): boolean;
|
|
331
370
|
/**
|
|
332
371
|
* List existing items once and build a lookup from csv-key provenance value to
|
|
333
|
-
* item id, for idempotent upsert. The list
|
|
372
|
+
* item id, for idempotent upsert. The complete-list answer must be COMPLETE — a
|
|
334
373
|
* truncated answer silently missing keys would turn upserts into duplicate
|
|
335
374
|
* creates — so the envelope's receipt is checked before any key is read.
|
|
336
375
|
*/
|
|
337
376
|
declare function loadKeyIndex(pmRoot: string, spawn?: PmSpawn): Map<string, string>;
|
|
377
|
+
/**
|
|
378
|
+
* Import CSV rows into a pm tracker as items.
|
|
379
|
+
*
|
|
380
|
+
* Rejects rather than throws when `--atomic` is combined with `--stream`: the
|
|
381
|
+
* two are genuinely incompatible, because a bounded transaction plan needs the
|
|
382
|
+
* whole row set in hand and a stream is unbounded. Returning a rejected promise
|
|
383
|
+
* keeps the failure on the same channel as the rest of the async path.
|
|
384
|
+
*
|
|
385
|
+
* @param pmRoot - Tracker root passed through to the pm CLI.
|
|
386
|
+
* @param filePath - CSV file to read.
|
|
387
|
+
* @param opts - Import behaviour, including the atomic and stream modes.
|
|
388
|
+
* @returns The import outcome; rejects with a {@link CommandError} on a usage
|
|
389
|
+
* conflict or an unreadable file.
|
|
390
|
+
*/
|
|
391
|
+
declare function importCSV(pmRoot: string, filePath: string, opts: CsvImportOptions): Promise<ImportResult>;
|
|
338
392
|
/**
|
|
339
393
|
* Public helper: the atomic transaction id that `pm csv import <file> --atomic`
|
|
340
394
|
* derives for the given file and options (reads and parses the file exactly as
|
|
@@ -364,12 +418,15 @@ export declare function atomicTransactionId(filePath: string, opts?: {
|
|
|
364
418
|
* whose CSV `status` is `closed`/`canceled` is legitimately imported as a
|
|
365
419
|
* closed item (upsertCreate/upsertUpdate apply the row's status, routing
|
|
366
420
|
* terminal transitions through `pm close --reason`), so it must
|
|
367
|
-
* still be recognized on resume and never re-imported. Conversely a
|
|
368
|
-
* create must NOT be recognized:
|
|
369
|
-
* `
|
|
370
|
-
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
421
|
+
* still be recognized on resume and never re-imported. Conversely a
|
|
422
|
+
* successfully compensated create must NOT be recognized:
|
|
423
|
+
* `compensateCreate()` removes the markers only after closure succeeds or the
|
|
424
|
+
* item is already confirmed closed, so a compensated
|
|
425
|
+
* tombstone carries no marker and a post-rollback retry re-imports its row. If
|
|
426
|
+
* closure fails, both markers remain and make the orphan discoverable for
|
|
427
|
+
* reconciliation. (This is why matching by marker-presence is correct for both
|
|
428
|
+
* a legitimately-closed applied row and a rolled-back one; see
|
|
429
|
+
* compensateCreate.)
|
|
373
430
|
*/
|
|
374
431
|
declare function loadAppliedByTransaction(pmRoot: string, transactionId: string, spawn?: PmSpawn): {
|
|
375
432
|
byRowIndex: Map<number, string>;
|
|
@@ -391,20 +448,21 @@ declare function loadAppliedByTransaction(pmRoot: string, transactionId: string,
|
|
|
391
448
|
* non-zero exit (item truly absent, or a failed lookup such as the
|
|
392
449
|
* `fake-get-fail` regression) still returns `undefined` unchanged.
|
|
393
450
|
*/
|
|
394
|
-
declare function itemStatus(pmRoot: string, id: string): ItemStatus | undefined;
|
|
451
|
+
declare function itemStatus(pmRoot: string, id: string, spawn?: PmSpawn): ItemStatus | undefined;
|
|
395
452
|
/**
|
|
396
|
-
* Idempotently undo one row's create. First
|
|
397
|
-
*
|
|
398
|
-
*
|
|
453
|
+
* Idempotently undo one row's create. First closes a still-open item via
|
|
454
|
+
* `pm close` (NOT delete, to avoid the known history-resurrection issue), then
|
|
455
|
+
* strips this transaction's ownership markers (`markers`) only after the item
|
|
456
|
+
* is confirmed closed.
|
|
399
457
|
*
|
|
400
|
-
* Stripping the markers
|
|
401
|
-
* signal: a
|
|
402
|
-
* retry re-imports it, while a *successfully* imported row (even
|
|
403
|
-
* status is `closed`/`canceled`) keeps its marker and is resumed
|
|
404
|
-
*
|
|
405
|
-
*
|
|
406
|
-
*
|
|
407
|
-
*
|
|
458
|
+
* Stripping the markers after closure makes marker-presence a correct
|
|
459
|
+
* reconciliation signal: a compensated row no longer carries a marker, so a
|
|
460
|
+
* post-rollback retry re-imports it, while a *successfully* imported row (even
|
|
461
|
+
* one whose CSV status is `closed`/`canceled`) keeps its marker and is resumed
|
|
462
|
+
* idempotently. If the close fails, the markers deliberately remain so the open
|
|
463
|
+
* orphan can be found by transaction id and reconciled before retrying. The
|
|
464
|
+
* strip also runs for an item that was already closed; every step tolerates a
|
|
465
|
+
* missing item / absent tag, so repeated compensation is a safe no-op.
|
|
408
466
|
*
|
|
409
467
|
* The status lookup itself is also tolerated: if `itemStatus` throws (a stdout
|
|
410
468
|
* overrun or a signal kill on the `pm get`), the throw is caught and this row's
|
|
@@ -415,6 +473,14 @@ declare function itemStatus(pmRoot: string, id: string): ItemStatus | undefined;
|
|
|
415
473
|
* and leaving every later applied create un-compensated.
|
|
416
474
|
*/
|
|
417
475
|
declare function compensateCreate(pmRoot: string, id: string, markers?: readonly string[], reason?: string): void;
|
|
476
|
+
interface CsvValidateOptions {
|
|
477
|
+
delimiter: string;
|
|
478
|
+
fieldMap: Record<string, string>;
|
|
479
|
+
encoding?: SupportedEncoding;
|
|
480
|
+
autoMap?: boolean;
|
|
481
|
+
/** The CSV file has no header row; map columns positionally to IMPORT_COLUMNS. */
|
|
482
|
+
skipHeaders?: boolean;
|
|
483
|
+
}
|
|
418
484
|
interface CsvValidateReport {
|
|
419
485
|
ok: boolean;
|
|
420
486
|
rowCount: number;
|
|
@@ -431,6 +497,12 @@ interface CsvValidateReport {
|
|
|
431
497
|
fieldMapWarnings: string[];
|
|
432
498
|
issues: string[];
|
|
433
499
|
}
|
|
500
|
+
/**
|
|
501
|
+
* Parse a CSV and report data-quality issues without writing anything.
|
|
502
|
+
* Pure function over file contents — exposed for unit testing via the
|
|
503
|
+
* lower-level {@link validateParsedCSV} helper below.
|
|
504
|
+
*/
|
|
505
|
+
declare function validateCSV(filePath: string, opts: CsvValidateOptions): CsvValidateReport;
|
|
434
506
|
/**
|
|
435
507
|
* Core validation logic over already-parsed headers + rows. Pure and
|
|
436
508
|
* side-effect-free so it can be unit tested directly.
|
|
@@ -516,10 +588,10 @@ declare function selectExportColumns(spec: string | undefined, extraValid?: Read
|
|
|
516
588
|
/**
|
|
517
589
|
* Read every item from a tracker and render the CSV export body.
|
|
518
590
|
*
|
|
519
|
-
* Shells out to `pm list
|
|
591
|
+
* Shells out to canonical `pm list --all --json --include-body` with an explicit
|
|
520
592
|
* `maxBuffer`, because a stdout overrun kills the child with a null status and
|
|
521
593
|
* an EMPTY stderr — which would otherwise surface as an unexplained
|
|
522
|
-
* "pm list
|
|
594
|
+
* "pm list --all failed" rather than as the size problem it is.
|
|
523
595
|
*
|
|
524
596
|
* Status and type filters are applied after the read, not pushed into the
|
|
525
597
|
* query. Each item's `csv_source` is then derived from its internal source tag
|
|
@@ -551,9 +623,10 @@ declare const _default: {
|
|
|
551
623
|
activate(api: ExtensionApi): void;
|
|
552
624
|
};
|
|
553
625
|
export default _default;
|
|
554
|
-
export { parseCSV, serializeCSV, serializeField, stripBOM, resolveDelimiter, parseFieldMap, resolveImportFieldMap, applyFieldMap, normalizeStatus, parseTags, stringifyTags, encodeKeyTagValue, decodeKeyTagValue, normalizeKeyValue, selectExportColumns, resolveEncoding, validateParsedCSV, strictValidationIssues, parseImportFilter, rowMatchesFilter, discoverCustomFields, EXPORT_COLUMNS, IMPORT_COLUMNS, StreamingCSVParser, streamCSVFile, levenshtein, suggestClosest, validateFieldMapTargets, checkMapSourcesPresent, };
|
|
626
|
+
export { parseCSV, serializeCSV, serializeField, stripBOM, resolveDelimiter, parseFieldMap, resolveImportFieldMap, applyFieldMap, normalizeStatus, parseTags, stringifyTags, encodeKeyTagValue, decodeKeyTagValue, errorMessage, normalizeKeyValue, selectExportColumns, resolveEncoding, validateParsedCSV, validateCSV, strictValidationIssues, parseImportFilter, rowMatchesFilter, discoverCustomFields, EXPORT_COLUMNS, IMPORT_COLUMNS, StreamingCSVParser, streamCSVFile, levenshtein, suggestClosest, validateFieldMapTargets, checkMapSourcesPresent, };
|
|
555
627
|
export { loadAppliedByTransaction, itemStatus, compensateCreate };
|
|
556
628
|
export { loadKeyIndex, buildCsvExport };
|
|
557
|
-
export
|
|
629
|
+
export { importCSV };
|
|
630
|
+
export type { CsvExportOptions, CsvImportOptions };
|
|
558
631
|
export type { ParsedRow, ImportRowFilter, DiscoveredField, AutoFieldMapping };
|
|
559
632
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,iCAAiC,CAAC;AAGrF,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|