pm-csv 2026.8.10 → 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 +33 -0
- package/README.md +37 -15
- package/dist/index.d.ts +244 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +514 -413
- package/dist/index.js.map +1 -1
- package/manifest.json +3 -6
- package/package.json +22 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
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
|
+
|
|
30
|
+
## 2026.8.16 - 2026-08-16
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
|
|
34
|
+
- A truncated list-all answer is consumed as if it were complete ([pm-csv-mua3](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-mua3.toon))
|
|
35
|
+
|
|
3
36
|
## 2026.8.10 - 2026-08-10
|
|
4
37
|
|
|
5
38
|
### 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,5 +1,17 @@
|
|
|
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";
|
|
4
|
+
/**
|
|
5
|
+
* Error carrying a semantic process exit code, thrown by every failure path
|
|
6
|
+
* the command runtime must turn into a clean nonzero exit (including the
|
|
7
|
+
* complete-list refusals). Exported so regression tests can assert the
|
|
8
|
+
* typed failure instead of matching on message text alone.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CommandError extends Error {
|
|
11
|
+
/** Numeric exit code the runtime propagates to the shell. */
|
|
12
|
+
exitCode: number;
|
|
13
|
+
constructor(message: string, exitCode?: number);
|
|
14
|
+
}
|
|
3
15
|
type ItemStatus = "open" | "in_progress" | "blocked" | "closed" | "canceled" | "draft";
|
|
4
16
|
interface PmItem {
|
|
5
17
|
id: string;
|
|
@@ -110,6 +122,59 @@ declare function resolveDelimiter(raw: string | undefined): string;
|
|
|
110
122
|
* three causes can be regression-tested directly with synthetic results.
|
|
111
123
|
*/
|
|
112
124
|
export declare function describePmNullStatus(result: SpawnSyncReturns<string>, label: string): string;
|
|
125
|
+
/**
|
|
126
|
+
* Refuse an incomplete canonical `pm list --all` envelope instead of consuming it.
|
|
127
|
+
*
|
|
128
|
+
* Reading `.items` without consulting the envelope's completeness receipt is
|
|
129
|
+
* how this package once shipped a 10-row CSV export from a 682-item workspace
|
|
130
|
+
* (pm 2026.8.14 defaulted the deprecated list-all alias to a truncated answer;
|
|
131
|
+
* verified on this
|
|
132
|
+
* host), saw none of the applied rows on an atomic-import resume scan, and
|
|
133
|
+
* missed upsert keys - each reporting success. Any one of four independent
|
|
134
|
+
* signals means the rows in `items` are NOT the whole workspace, so this
|
|
135
|
+
* throws (never returns a partial list, never logs and continues) naming the
|
|
136
|
+
* signal that tripped plus the `count`/`total` figures:
|
|
137
|
+
*
|
|
138
|
+
* - `truncated === true` - the row list was cut short (output budget, limit);
|
|
139
|
+
* - `has_more === true` - rows exist past the returned cursor boundary;
|
|
140
|
+
* - `completeness.status !== "complete"` - items/directories were unreadable
|
|
141
|
+
* ("partial") or the corpus was never scanned ("unchecked"); a missing
|
|
142
|
+
* receipt also trips this, because an unverifiable answer is not complete;
|
|
143
|
+
* - `omission_receipt.has_omissions === true` - field groups were dropped from
|
|
144
|
+
* the projection, so rows are present but degraded.
|
|
145
|
+
*
|
|
146
|
+
* Thrown errors are {@link CommandError} so the command runtime turns them
|
|
147
|
+
* into a clean nonzero exit. Paging is deliberately NOT attempted: every
|
|
148
|
+
* consumer here (CSV export, resume scan, key index) needs the WHOLE
|
|
149
|
+
* workspace, so refusing loudly is simpler and safer than a paging loop that
|
|
150
|
+
* could itself silently drop rows.
|
|
151
|
+
*
|
|
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.
|
|
161
|
+
*/
|
|
162
|
+
export declare function assertListAllComplete(envelope: unknown): PmItem[];
|
|
163
|
+
/** Minimal spawn options the seam forwards to `spawnSync`. */
|
|
164
|
+
export interface PmSpawnOptions {
|
|
165
|
+
/** Decoding requested for the child's captured output. */
|
|
166
|
+
encoding: "utf-8";
|
|
167
|
+
/** Read-buffer cap for the child's stdout. */
|
|
168
|
+
maxBuffer: number;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Injectable seam over the `pm` shell-out every complete-list reader uses.
|
|
172
|
+
*
|
|
173
|
+
* A parameter defaulting to the real `spawnPm`, so production callers are
|
|
174
|
+
* unchanged while tests substitute a canned envelope - captured from the real
|
|
175
|
+
* CLI and mutated - instead of mocking `child_process`.
|
|
176
|
+
*/
|
|
177
|
+
export type PmSpawn = (args: string[], options: PmSpawnOptions) => SpawnSyncReturns<string>;
|
|
113
178
|
/**
|
|
114
179
|
* Normalize a dedup key value for stable matching. pm lower-cases tags on
|
|
115
180
|
* storage, so a `csv-key:` tag written from "Fix Bug" comes back as
|
|
@@ -131,6 +196,8 @@ declare function encodeKeyTagValue(value: string): string;
|
|
|
131
196
|
* @returns The decoded value, or `value` itself when it cannot be decoded.
|
|
132
197
|
*/
|
|
133
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;
|
|
134
201
|
/**
|
|
135
202
|
* Parse a `--map csvHeader=field` spec (repeatable / comma-joined) into a
|
|
136
203
|
* lookup from a normalized CSV header name to the canonical pm field name.
|
|
@@ -198,6 +265,51 @@ declare function stringifyTags(tags: string[] | undefined): string;
|
|
|
198
265
|
* BufferEncoding. Accepts utf-8/utf8, utf16le, latin1. Throws USAGE otherwise.
|
|
199
266
|
*/
|
|
200
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
|
+
}
|
|
201
313
|
/**
|
|
202
314
|
* Row-level import filter. Mirrors the `csv export` filter semantics exactly:
|
|
203
315
|
* - `status` matches the row's *normalized* SDK status (so `done` matches
|
|
@@ -212,6 +324,19 @@ interface ImportRowFilter {
|
|
|
212
324
|
type?: string;
|
|
213
325
|
priority?: number;
|
|
214
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
|
+
}
|
|
215
340
|
interface ParsedRow {
|
|
216
341
|
title: string;
|
|
217
342
|
status: ItemStatus;
|
|
@@ -242,6 +367,28 @@ declare function parseImportFilter(statusRaw: string | undefined, typeRaw: strin
|
|
|
242
367
|
* Unset criteria are wildcards. Exposed for unit testing.
|
|
243
368
|
*/
|
|
244
369
|
declare function rowMatchesFilter(row: ParsedRow, filter: ImportRowFilter | undefined): boolean;
|
|
370
|
+
/**
|
|
371
|
+
* List existing items once and build a lookup from csv-key provenance value to
|
|
372
|
+
* item id, for idempotent upsert. The complete-list answer must be COMPLETE — a
|
|
373
|
+
* truncated answer silently missing keys would turn upserts into duplicate
|
|
374
|
+
* creates — so the envelope's receipt is checked before any key is read.
|
|
375
|
+
*/
|
|
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>;
|
|
245
392
|
/**
|
|
246
393
|
* Public helper: the atomic transaction id that `pm csv import <file> --atomic`
|
|
247
394
|
* derives for the given file and options (reads and parses the file exactly as
|
|
@@ -271,14 +418,17 @@ export declare function atomicTransactionId(filePath: string, opts?: {
|
|
|
271
418
|
* whose CSV `status` is `closed`/`canceled` is legitimately imported as a
|
|
272
419
|
* closed item (upsertCreate/upsertUpdate apply the row's status, routing
|
|
273
420
|
* terminal transitions through `pm close --reason`), so it must
|
|
274
|
-
* still be recognized on resume and never re-imported. Conversely a
|
|
275
|
-
* create must NOT be recognized:
|
|
276
|
-
* `
|
|
277
|
-
*
|
|
278
|
-
*
|
|
279
|
-
*
|
|
280
|
-
|
|
281
|
-
|
|
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.)
|
|
430
|
+
*/
|
|
431
|
+
declare function loadAppliedByTransaction(pmRoot: string, transactionId: string, spawn?: PmSpawn): {
|
|
282
432
|
byRowIndex: Map<number, string>;
|
|
283
433
|
};
|
|
284
434
|
/**
|
|
@@ -298,20 +448,21 @@ declare function loadAppliedByTransaction(pmRoot: string, transactionId: string)
|
|
|
298
448
|
* non-zero exit (item truly absent, or a failed lookup such as the
|
|
299
449
|
* `fake-get-fail` regression) still returns `undefined` unchanged.
|
|
300
450
|
*/
|
|
301
|
-
declare function itemStatus(pmRoot: string, id: string): ItemStatus | undefined;
|
|
451
|
+
declare function itemStatus(pmRoot: string, id: string, spawn?: PmSpawn): ItemStatus | undefined;
|
|
302
452
|
/**
|
|
303
|
-
* Idempotently undo one row's create. First
|
|
304
|
-
*
|
|
305
|
-
*
|
|
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.
|
|
306
457
|
*
|
|
307
|
-
* Stripping the markers
|
|
308
|
-
* signal: a
|
|
309
|
-
* retry re-imports it, while a *successfully* imported row (even
|
|
310
|
-
* status is `closed`/`canceled`) keeps its marker and is resumed
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
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.
|
|
315
466
|
*
|
|
316
467
|
* The status lookup itself is also tolerated: if `itemStatus` throws (a stdout
|
|
317
468
|
* overrun or a signal kill on the `pm get`), the throw is caught and this row's
|
|
@@ -322,6 +473,14 @@ declare function itemStatus(pmRoot: string, id: string): ItemStatus | undefined;
|
|
|
322
473
|
* and leaving every later applied create un-compensated.
|
|
323
474
|
*/
|
|
324
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
|
+
}
|
|
325
484
|
interface CsvValidateReport {
|
|
326
485
|
ok: boolean;
|
|
327
486
|
rowCount: number;
|
|
@@ -338,6 +497,12 @@ interface CsvValidateReport {
|
|
|
338
497
|
fieldMapWarnings: string[];
|
|
339
498
|
issues: string[];
|
|
340
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;
|
|
341
506
|
/**
|
|
342
507
|
* Core validation logic over already-parsed headers + rows. Pure and
|
|
343
508
|
* side-effect-free so it can be unit tested directly.
|
|
@@ -356,6 +521,29 @@ declare function validateParsedCSV(rawHeaders: string[], dataRows: string[][], f
|
|
|
356
521
|
* the import proceed.
|
|
357
522
|
*/
|
|
358
523
|
declare function strictValidationIssues(report: CsvValidateReport): string[];
|
|
524
|
+
interface CsvExportOptions {
|
|
525
|
+
statusFilter?: string;
|
|
526
|
+
typeFilter?: string;
|
|
527
|
+
delimiter: string;
|
|
528
|
+
/**
|
|
529
|
+
* Ordered columns to emit. Built-in columns are keys of {@link PmItem};
|
|
530
|
+
* discovered custom fields (see {@link discoverCustomFields}) are arbitrary
|
|
531
|
+
* string keys read straight off the item JSON, hence the widened type.
|
|
532
|
+
*/
|
|
533
|
+
columns: string[];
|
|
534
|
+
/**
|
|
535
|
+
* Optional column-header → item-property remap, used when a discovered custom
|
|
536
|
+
* field's display key differs from the metadata key its value is stored under.
|
|
537
|
+
* Columns absent from the map are read by their own name.
|
|
538
|
+
*/
|
|
539
|
+
columnSource?: Record<string, string>;
|
|
540
|
+
/** Omit the header row. */
|
|
541
|
+
noHeader?: boolean;
|
|
542
|
+
/** Use CRLF line endings (RFC-4180 / Excel-friendly). */
|
|
543
|
+
crlf?: boolean;
|
|
544
|
+
/** Excel-friendly output: forces CRLF and prepends a UTF-8 BOM. */
|
|
545
|
+
excel?: boolean;
|
|
546
|
+
}
|
|
359
547
|
/**
|
|
360
548
|
* A custom (workspace-registered) item field discovered from the runtime
|
|
361
549
|
* schema. `key` is the human-facing column name; `metadataKey` is the property
|
|
@@ -397,13 +585,48 @@ declare function discoverCustomFields(pmRoot: string): DiscoveredField[];
|
|
|
397
585
|
* @throws CommandError naming every unrecognised column and listing the valid ones.
|
|
398
586
|
*/
|
|
399
587
|
declare function selectExportColumns(spec: string | undefined, extraValid?: ReadonlyArray<string>): string[];
|
|
588
|
+
/**
|
|
589
|
+
* Read every item from a tracker and render the CSV export body.
|
|
590
|
+
*
|
|
591
|
+
* Shells out to canonical `pm list --all --json --include-body` with an explicit
|
|
592
|
+
* `maxBuffer`, because a stdout overrun kills the child with a null status and
|
|
593
|
+
* an EMPTY stderr — which would otherwise surface as an unexplained
|
|
594
|
+
* "pm list --all failed" rather than as the size problem it is.
|
|
595
|
+
*
|
|
596
|
+
* Status and type filters are applied after the read, not pushed into the
|
|
597
|
+
* query. Each item's `csv_source` is then derived from its internal source tag
|
|
598
|
+
* via {@link decodeKeyTagValue}, so a re-export carries the provenance of the
|
|
599
|
+
* file the row originally came from.
|
|
600
|
+
*
|
|
601
|
+
* The envelope's completeness receipt is verified by
|
|
602
|
+
* {@link assertListAllComplete} before any row is rendered: a truncated,
|
|
603
|
+
* paged, partially-read or field-omitted answer refuses instead of exporting a
|
|
604
|
+
* silent subset (the 2026.8.14 truncated-default regression shipped a 10-row
|
|
605
|
+
* export of a 682-item workspace as success).
|
|
606
|
+
*
|
|
607
|
+
* @param pmRoot - Tracker root to export.
|
|
608
|
+
* @param opts - Column selection, per-column property remap, and status/type filters.
|
|
609
|
+
* @param spawn - Injectable shell-out seam (tests substitute a canned real
|
|
610
|
+
* envelope); defaults to the real `spawnPm`.
|
|
611
|
+
* @returns The rendered CSV text, the exported row count, and the line ending used.
|
|
612
|
+
* @throws CommandError when the pm read fails or the answer is incomplete,
|
|
613
|
+
* naming the buffer overrun or the tripped completeness signal.
|
|
614
|
+
*/
|
|
615
|
+
declare function buildCsvExport(pmRoot: string, opts: CsvExportOptions, spawn?: PmSpawn): {
|
|
616
|
+
csvText: string;
|
|
617
|
+
count: number;
|
|
618
|
+
eol: "\n" | "\r\n";
|
|
619
|
+
};
|
|
400
620
|
declare const _default: {
|
|
401
621
|
name: string;
|
|
402
622
|
version: string;
|
|
403
623
|
activate(api: ExtensionApi): void;
|
|
404
624
|
};
|
|
405
625
|
export default _default;
|
|
406
|
-
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, };
|
|
407
627
|
export { loadAppliedByTransaction, itemStatus, compensateCreate };
|
|
628
|
+
export { loadKeyIndex, buildCsvExport };
|
|
629
|
+
export { importCSV };
|
|
630
|
+
export type { CsvExportOptions, CsvImportOptions };
|
|
408
631
|
export type { ParsedRow, ImportRowFilter, DiscoveredField, AutoFieldMapping };
|
|
409
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":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,iCAAiC,CAAC;AAGrF,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItE,OAAO,KAAK,EACV,wBAAwB,EACxB,gCAAgC,EAGjC,MAAM,uBAAuB,CAAC;AAoB/B;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkC,EAIxE;CACF;AAMD,KAAK,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEvF,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,QAAA,MAAM,cAAc,YAClB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,CACJ,CAAC;AAGX,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,MAAM,MAAM,CAiBvC,CAAC;AAYF,2DAA2D;AAC3D,QAAA,MAAM,mBAAmB,YAAI,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAC5E,KAAK,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAM9D;;;;;;;GAOG;AACH,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,EAAE,EAAE,CAwEnE;AAED;;;;GAIG;AACH,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtC;AAED;;;GAGG;AACH,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAWhE;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,iBAAS,YAAY,CACnB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,eAAe,EAAE,MAAM,GAAG,gBAAgB,GACzC,MAAM,CASR;AAQD;;;;GAIG;AACH,cAAM,kBAAkB;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAM;IAEjC,YAAY,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,EAG5D;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA2DvB;IAED,GAAG,IAAI,IAAI,CAaV;CACF;AAED;;;;;GAKG;AACH,iBAAS,aAAa,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CAqBf;AA8BD;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQzD;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAU5F;AAuHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAgBjE;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,KAAK,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAO5F;;;;;GAKG;AACH,iBAAS,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,iBAAS,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;;;;;;GAWG;AACH,iBAAS,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,kFAAkF;AAClF,iBAAS,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5C;AAED;;;;GAIG;AACH,iBAAS,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBlF;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAEpF;AAED;;;GAGG;AACH,iBAAS,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAiBjD;AAED;;;;GAIG;AACH,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAanF;AAED;;;;GAIG;AACH,iBAAS,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAa3E;AAED;;;GAGG;AACH,iBAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAY7F;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAsBD;;;;;GAKG;AACH,iBAAS,qBAAqB,CAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,OAAO,EAAE,OAAO,GACf,kBAAkB,CA8BpB;AAYD;;;GAGG;AACH,iBAAS,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAsBhD;AAED;;GAEG;AACH,iBAAS,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAGxC;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAGzD;AAED;;;GAGG;AACH,iBAAS,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAUnE;AAuCD,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;QAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,KAAK,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAChD,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAgBD,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwCD;;;;;;;;;GASG;AACH,iBAAS,iBAAiB,CACxB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,eAAe,GAAG,SAAS,CAkB7B;AAED;;;GAGG;AACH,iBAAS,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAMtF;AAED;;;;;GAKG;AACH,iBAAS,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,OAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA8CnF;AAyJD;;;;;;;;;;;;;GAaG;AACH,iBAAS,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAYlG;AAyDD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACrF,MAAM,CAQR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,iBAAS,wBAAwB,CAC/B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,KAAK,GAAE,OAAiB,GACvB;IAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAmDrC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,OAAiB,GAAG,UAAU,GAAG,SAAS,CAahG;AAeD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,iBAAS,gBAAgB,CACvB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,SAAS,MAAM,EAAO,EAC/B,MAAM,GAAE,MAAwC,GAC/C,IAAI,CAsCN;AA2iBD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,iBAAiB;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,0BAA0B,EAAE,MAAM,CAAC;IACnC,0BAA0B,EAAE,MAAM,CAAC;IACnC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,iBAAS,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,CAelF;AAED;;;GAGG;AACH,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,MAAM,EAAE,EAAE,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,iBAAiB,CAkFnB;AAED;;;;;;;;;;;GAWG;AACH,iBAAS,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CASnE;AA2GD,UAAU,gBAAgB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mEAAmE;IACnE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAUD;;;;GAIG;AACH,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,iBAAS,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CA6C/D;AAMD;;;;;;;;;;;;GAYG;AACH,iBAAS,mBAAmB,CAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,GAAE,aAAa,CAAC,MAAM,CAAM,GACrC,MAAM,EAAE,CAaV;AAqCD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,iBAAS,cAAc,CACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,gBAAgB,EACtB,KAAK,GAAE,OAAiB,GACvB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAmExD;;;;kBAiCe,YAAY;;;AA4U5B,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,sBAAsB,GACvB,CAAC;AAWF,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AAIlE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AAEnD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
|