gitsheets-axi 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/src/cli.d.ts +1 -1
  2. package/dist/src/cli.d.ts.map +1 -1
  3. package/dist/src/cli.js +17 -9
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/commands/count.d.ts +4 -0
  6. package/dist/src/commands/count.d.ts.map +1 -0
  7. package/dist/src/commands/count.js +84 -0
  8. package/dist/src/commands/count.js.map +1 -0
  9. package/dist/src/commands/delete.d.ts +1 -1
  10. package/dist/src/commands/delete.d.ts.map +1 -1
  11. package/dist/src/commands/delete.js +132 -43
  12. package/dist/src/commands/delete.js.map +1 -1
  13. package/dist/src/commands/distinct.d.ts +4 -0
  14. package/dist/src/commands/distinct.d.ts.map +1 -0
  15. package/dist/src/commands/distinct.js +81 -0
  16. package/dist/src/commands/distinct.js.map +1 -0
  17. package/dist/src/commands/patch.d.ts +1 -1
  18. package/dist/src/commands/patch.d.ts.map +1 -1
  19. package/dist/src/commands/patch.js +238 -49
  20. package/dist/src/commands/patch.js.map +1 -1
  21. package/dist/src/commands/query.d.ts +1 -1
  22. package/dist/src/commands/query.d.ts.map +1 -1
  23. package/dist/src/commands/query.js +129 -58
  24. package/dist/src/commands/query.js.map +1 -1
  25. package/dist/src/commands/rename.d.ts +4 -0
  26. package/dist/src/commands/rename.d.ts.map +1 -0
  27. package/dist/src/commands/rename.js +131 -0
  28. package/dist/src/commands/rename.js.map +1 -0
  29. package/dist/src/commands/sheets.js +13 -4
  30. package/dist/src/commands/sheets.js.map +1 -1
  31. package/dist/src/commands/upsert.d.ts +9 -1
  32. package/dist/src/commands/upsert.d.ts.map +1 -1
  33. package/dist/src/commands/upsert.js +134 -33
  34. package/dist/src/commands/upsert.js.map +1 -1
  35. package/dist/src/util/aggregate.d.ts +13 -0
  36. package/dist/src/util/aggregate.d.ts.map +1 -0
  37. package/dist/src/util/aggregate.js +44 -0
  38. package/dist/src/util/aggregate.js.map +1 -0
  39. package/dist/src/util/export-file.d.ts +22 -0
  40. package/dist/src/util/export-file.d.ts.map +1 -0
  41. package/dist/src/util/export-file.js +67 -0
  42. package/dist/src/util/export-file.js.map +1 -0
  43. package/dist/src/util/filter.d.ts +30 -0
  44. package/dist/src/util/filter.d.ts.map +1 -0
  45. package/dist/src/util/filter.js +138 -0
  46. package/dist/src/util/filter.js.map +1 -0
  47. package/dist/src/util/hints.d.ts +8 -0
  48. package/dist/src/util/hints.d.ts.map +1 -0
  49. package/dist/src/util/hints.js +8 -0
  50. package/dist/src/util/hints.js.map +1 -0
  51. package/dist/src/util/open-sheet.d.ts +13 -0
  52. package/dist/src/util/open-sheet.d.ts.map +1 -0
  53. package/dist/src/util/open-sheet.js +31 -0
  54. package/dist/src/util/open-sheet.js.map +1 -0
  55. package/dist/src/util/parse-records.d.ts +26 -0
  56. package/dist/src/util/parse-records.d.ts.map +1 -0
  57. package/dist/src/util/parse-records.js +76 -0
  58. package/dist/src/util/parse-records.js.map +1 -0
  59. package/package.json +3 -2
@@ -1,31 +1,57 @@
1
1
  import { AxiError } from 'axi-sdk-js';
2
- import { mergePatch } from 'gitsheets';
2
+ import { mergePatch, Template } from 'gitsheets';
3
3
  import { translateError } from '../errors.js';
4
- import { renderObject } from '../output/render.js';
4
+ import { joinBlocks, renderHelp, renderObject } from '../output/render.js';
5
5
  import { readStdin } from '../util/stdin.js';
6
+ import { openSheetForCommand } from '../util/open-sheet.js';
7
+ import { parseRecordsInput, recordLabel } from '../util/parse-records.js';
8
+ import { MATERIALIZE_HINT } from '../util/hints.js';
9
+ import { renderDryRun } from './upsert.js';
10
+ const PATH_KEY = Symbol.for('gitsheets-path');
6
11
  export const PATCH_HELP = `usage: gitsheets-axi patch <sheet> <query-json> [--patch <json>] [--prefix p] [--message m]
7
- flags[3]:
8
- --patch <json> RFC 7396 partial. If omitted, reads stdin.
12
+ gitsheets-axi patch <sheet> [--data <json>] [--on-missing m] [--delete-missing] [--dry-run] # bulk
13
+ flags[7]:
14
+ --patch <json> Single mode: RFC 7396 partial. If omitted, reads stdin.
15
+ --data <json> Bulk mode: JSON array / NDJSON of combined records.
16
+ --on-missing <m> Bulk: what to do when a record's query matches nothing —
17
+ abort (default) | skip | insert (upsert it as new).
18
+ --delete-missing Bulk: delete existing records NOT targeted by the batch
19
+ (exact re-sync). One commit.
20
+ --dry-run Bulk: preview {will-change, no-op, missing, invalid,
21
+ delete} — no commit.
9
22
  --prefix <p> Tenant sub-tree scope
10
23
  --message <m> Commit message (default: "<sheet> patch <path>")
11
24
  examples:
12
25
  gitsheets-axi patch users '{"slug":"jane"}' --patch '{"name":"Jane O. Doe"}'
13
- echo '{"name":"Jane O. Doe"}' | gitsheets-axi patch users '{"slug":"jane"}'
26
+ jq -c '.[]' classify.json | gitsheets-axi patch repos # bulk, one commit
27
+ jq -c '.[]' classify.json | gitsheets-axi patch repos --on-missing skip # tolerate stale rows
28
+ gitsheets-axi patch repos --data "$(cat sync.json)" --on-missing insert --delete-missing
29
+ bulk:
30
+ With no <query-json>, input is a JSON array or NDJSON of records. In each
31
+ record the sheet's path-template fields form the query (which record to
32
+ patch); the remaining fields are the merge patch. Every patch runs in a
33
+ SINGLE transaction → ONE commit. This is the tool for incremental
34
+ classification: emit {<path-fields>, <fields-to-set>} per record.
14
35
  semantics:
15
36
  RFC 7396 JSON Merge Patch. \`null\` deletes a field, arrays replace
16
37
  in full, objects merge recursively. Same as gitsheets's library patch.
17
38
  idempotency:
18
- Reads the existing record, applies the merge, runs the result through
19
- willChange. If the canonical bytes are unchanged, exits 0 with
20
- result: "no-op" and no commit is produced.
39
+ Unchanged records are skipped; a batch where nothing changed exits 0 with
40
+ result: "no-op" and no commit. With --on-missing abort (default), a record
41
+ matching nothing aborts the batch (nothing committed); --dry-run reports all
42
+ missing/invalid rows at once.
21
43
  `;
22
44
  function parsePatchFlags(args) {
23
45
  const flags = {
24
46
  sheet: '',
25
- queryJson: '',
47
+ queryJson: undefined,
26
48
  patchJson: undefined,
49
+ data: undefined,
27
50
  prefix: undefined,
28
51
  message: undefined,
52
+ onMissing: 'abort',
53
+ deleteMissing: false,
54
+ dryRun: false,
29
55
  };
30
56
  const positional = [];
31
57
  for (let i = 0; i < args.length; i++) {
@@ -40,6 +66,25 @@ function parsePatchFlags(args) {
40
66
  flags.patchJson = next;
41
67
  i++;
42
68
  break;
69
+ case '--data':
70
+ if (!next)
71
+ throw new AxiError('--data expects JSON', 'VALIDATION_ERROR');
72
+ flags.data = next;
73
+ i++;
74
+ break;
75
+ case '--on-missing':
76
+ if (next !== 'abort' && next !== 'skip' && next !== 'insert') {
77
+ throw new AxiError('--on-missing expects abort | skip | insert', 'VALIDATION_ERROR');
78
+ }
79
+ flags.onMissing = next;
80
+ i++;
81
+ break;
82
+ case '--delete-missing':
83
+ flags.deleteMissing = true;
84
+ break;
85
+ case '--dry-run':
86
+ flags.dryRun = true;
87
+ break;
43
88
  case '--prefix':
44
89
  if (!next)
45
90
  throw new AxiError('--prefix expects a path', 'VALIDATION_ERROR');
@@ -61,9 +106,10 @@ function parsePatchFlags(args) {
61
106
  positional.push(arg);
62
107
  }
63
108
  }
64
- if (positional.length !== 2) {
65
- throw new AxiError('patch requires <sheet> <query-json>', 'VALIDATION_ERROR', [
66
- "Example: gitsheets-axi patch users '{\"slug\":\"jane\"}' --patch '{...}'",
109
+ if (positional.length === 0 || positional.length > 2) {
110
+ throw new AxiError('patch requires <sheet> [<query-json>]', 'VALIDATION_ERROR', [
111
+ "Single: gitsheets-axi patch users '{\"slug\":\"jane\"}' --patch '{...}'",
112
+ 'Bulk: gitsheets-axi patch repos --data \'[{...}, ...]\'',
67
113
  ]);
68
114
  }
69
115
  flags.sheet = positional[0];
@@ -75,6 +121,26 @@ export async function patchCommand(args, ctx) {
75
121
  return PATCH_HELP;
76
122
  }
77
123
  const flags = parsePatchFlags(args);
124
+ const prefixOpts = flags.prefix !== undefined ? { prefix: flags.prefix } : {};
125
+ const repo = await ctx.repo();
126
+ const sheet = await openSheetForCommand(repo, flags.sheet, prefixOpts);
127
+ // Single mode is signalled by an explicit <query-json> positional; bulk mode
128
+ // by its absence (records come from --data / stdin, query embedded per record).
129
+ if (flags.queryJson !== undefined) {
130
+ if (flags.data !== undefined) {
131
+ throw new AxiError('--data is bulk mode — drop the <query-json> positional to use it', 'VALIDATION_ERROR');
132
+ }
133
+ if (flags.onMissing !== 'abort' || flags.deleteMissing || flags.dryRun) {
134
+ throw new AxiError('--on-missing / --delete-missing / --dry-run are bulk-only — drop the <query-json> positional', 'VALIDATION_ERROR');
135
+ }
136
+ return singlePatch(repo, sheet, flags, prefixOpts);
137
+ }
138
+ if (flags.patchJson !== undefined) {
139
+ throw new AxiError('--patch is single mode — it needs a <query-json> positional', 'VALIDATION_ERROR', ['For bulk, embed the query fields in each record and use --data / stdin']);
140
+ }
141
+ return batchPatch(repo, sheet, flags, prefixOpts);
142
+ }
143
+ async function singlePatch(repo, sheet, flags, prefixOpts) {
78
144
  let query;
79
145
  try {
80
146
  query = JSON.parse(flags.queryJson);
@@ -96,70 +162,193 @@ export async function patchCommand(args, ctx) {
96
162
  if (!partial || typeof partial !== 'object' || Array.isArray(partial)) {
97
163
  throw new AxiError('Patch must be a JSON object', 'VALIDATION_ERROR');
98
164
  }
99
- const repo = await ctx.repo();
100
- let sheet;
101
- try {
102
- sheet = await repo.openSheet(flags.sheet, flags.prefix !== undefined ? { prefix: flags.prefix } : {});
165
+ const willResult = await previewPatch(sheet, query, partial);
166
+ if (willResult === 'not-found') {
167
+ throw new AxiError(`${flags.sheet}: no record matches the query`, 'NOT_FOUND');
103
168
  }
104
- catch (error) {
105
- throw translateError(error);
169
+ if (!willResult.changed) {
170
+ return renderObject({
171
+ result: 'no-op',
172
+ sheet: flags.sheet,
173
+ path: willResult.path,
174
+ hash: willResult.hash ?? '',
175
+ });
106
176
  }
107
- let existing;
177
+ const commitMessage = flags.message ?? `${flags.sheet} patch ${willResult.path}`;
108
178
  try {
109
- existing = await sheet.queryFirst(query);
179
+ const result = await repo.transact({ message: commitMessage }, async (tx) => {
180
+ const txSheet = tx.sheet(flags.sheet, prefixOpts);
181
+ return txSheet.patch(query, partial);
182
+ });
183
+ return renderObject({
184
+ result: 'committed',
185
+ sheet: flags.sheet,
186
+ path: result.value.path,
187
+ hash: result.value.blob.hash,
188
+ commit: result.commitHash,
189
+ });
110
190
  }
111
191
  catch (error) {
112
192
  throw translateError(error);
113
193
  }
114
- if (!existing) {
115
- throw new AxiError(`${flags.sheet}: no record matches the query`, 'NOT_FOUND');
194
+ }
195
+ async function batchPatch(repo, sheet, flags, prefixOpts) {
196
+ const raw = flags.data ?? (await readStdin());
197
+ const { records } = parseRecordsInput(raw);
198
+ const config = await sheet.readConfig();
199
+ const template = Template.fromString(config.path);
200
+ const templateFields = new Set(template.getFieldNames());
201
+ // Pre-flight: split each record into (query, partial) and categorize —
202
+ // changed / unchanged / missing (query matched nothing) / invalid — before
203
+ // opening a transaction. We never throw mid-loop so --dry-run can report the
204
+ // full picture; the commit path aborts explicitly afterward.
205
+ const changes = [];
206
+ const inserts = [];
207
+ const batchPaths = new Set();
208
+ const invalid = [];
209
+ const missing = [];
210
+ let unchanged = 0;
211
+ for (let i = 0; i < records.length; i++) {
212
+ const record = records[i];
213
+ const query = {};
214
+ const partial = {};
215
+ for (const [k, v] of Object.entries(record)) {
216
+ if (templateFields.has(k))
217
+ query[k] = v;
218
+ else
219
+ partial[k] = v;
220
+ }
221
+ if (Object.keys(query).length === 0) {
222
+ invalid.push({
223
+ row: i + 1,
224
+ id: recordLabel(record),
225
+ reason: `has none of the path-template fields (${[...templateFields].join(', ')})`,
226
+ code: 'VALIDATION_ERROR',
227
+ });
228
+ continue;
229
+ }
230
+ let preview;
231
+ try {
232
+ preview = await previewPatch(sheet, query, partial);
233
+ }
234
+ catch (error) {
235
+ const axi = translateError(error);
236
+ invalid.push({ row: i + 1, id: recordLabel(record), reason: axi.message, code: axi.code });
237
+ continue;
238
+ }
239
+ if (preview === 'not-found') {
240
+ if (flags.onMissing === 'skip') {
241
+ missing.push({ row: i + 1, id: recordLabel(record) });
242
+ }
243
+ else if (flags.onMissing === 'insert') {
244
+ inserts.push(record);
245
+ try {
246
+ batchPaths.add(template.render(record));
247
+ }
248
+ catch {
249
+ /* un-renderable insert surfaces at commit; ignore for path set */
250
+ }
251
+ }
252
+ else {
253
+ missing.push({ row: i + 1, id: recordLabel(record) }); // abort mode: collected, thrown below
254
+ }
255
+ continue;
256
+ }
257
+ batchPaths.add(preview.path);
258
+ if (preview.changed)
259
+ changes.push({ query, partial });
260
+ else
261
+ unchanged++;
116
262
  }
117
- // Apply RFC 7396 merge in-axi so we can run willChange against the result.
118
- const merged = mergePatch(stripSymbols(existing), partial);
119
- // Preserve the record's path annotation so willChange uses the rename path
120
- // logic if any path-template field changed (matches Sheet.patch behavior).
121
- const pathSym = existing[Symbol.for('gitsheets-path')];
122
- if (typeof pathSym === 'string') {
123
- merged[Symbol.for('gitsheets-path')] = pathSym;
263
+ // --delete-missing: existing records not targeted by the batch.
264
+ const deletions = [];
265
+ if (flags.deleteMissing) {
266
+ const existing = await sheet.queryAll({}, { withBody: false });
267
+ for (const r of existing) {
268
+ const p = r[PATH_KEY];
269
+ if (typeof p === 'string' && !batchPaths.has(p))
270
+ deletions.push(p);
271
+ }
124
272
  }
125
- // Body-presence on content-typed sheets: patch is body-preserving — the
126
- // merged record carries the existing body forward unless the partial
127
- // explicitly replaced it. Use allowMissingBody to defer the upsert guard
128
- // since the merge produces the canonical record either way.
129
- const upsertOpts = { allowMissingBody: true };
130
- let willResult;
131
- try {
132
- willResult = await sheet.willChange(merged, upsertOpts);
273
+ if (flags.dryRun) {
274
+ return renderDryRun(flags.sheet, {
275
+ willChange: changes.length,
276
+ insert: inserts.length,
277
+ noOp: unchanged,
278
+ missing: missing.length,
279
+ invalid: invalid.length,
280
+ ...(flags.deleteMissing ? { willDelete: deletions.length } : {}),
281
+ }, invalid);
133
282
  }
134
- catch (error) {
135
- throw translateError(error);
283
+ if (invalid.length > 0) {
284
+ const first = invalid[0];
285
+ throw new AxiError(`Record ${first.row} (${first.id}): ${first.reason}`, first.code, [
286
+ `${invalid.length} record(s) invalid — the whole batch was aborted, nothing committed. Run --dry-run to see all.`,
287
+ ]);
136
288
  }
137
- if (!willResult.changed) {
289
+ if (flags.onMissing === 'abort' && missing.length > 0) {
290
+ const first = missing[0];
291
+ throw new AxiError(`Record ${first.row} (${first.id}): no record matches its query`, 'NOT_FOUND', [
292
+ `${missing.length} record(s) matched nothing — batch aborted. Use --on-missing skip|insert, or --dry-run to see all.`,
293
+ ]);
294
+ }
295
+ if (changes.length === 0 && inserts.length === 0 && deletions.length === 0) {
138
296
  return renderObject({
139
297
  result: 'no-op',
140
298
  sheet: flags.sheet,
141
- path: willResult.path,
142
- hash: willResult.currentBlobHash ?? '',
299
+ patched: 0,
300
+ unchanged: records.length - invalid.length - missing.length,
301
+ ...(missing.length > 0 ? { skipped: missing.length } : {}),
143
302
  });
144
303
  }
145
- const commitMessage = flags.message ?? `${flags.sheet} patch ${willResult.path}`;
304
+ const commitMessage = flags.message ?? `${flags.sheet} patch (${changes.length + inserts.length})`;
146
305
  try {
147
306
  const result = await repo.transact({ message: commitMessage }, async (tx) => {
148
- const txSheet = tx.sheet(flags.sheet, flags.prefix !== undefined ? { prefix: flags.prefix } : {});
149
- return txSheet.patch(query, partial);
307
+ const txSheet = tx.sheet(flags.sheet, prefixOpts);
308
+ for (const { query, partial } of changes)
309
+ await txSheet.patch(query, partial);
310
+ for (const record of inserts)
311
+ await txSheet.upsert(record);
312
+ for (const path of deletions)
313
+ await txSheet.delete(path);
314
+ return changes.length;
150
315
  });
151
- return renderObject({
316
+ return joinBlocks(renderObject({
152
317
  result: 'committed',
153
318
  sheet: flags.sheet,
154
- path: result.value.path,
155
- hash: result.value.blob.hash,
319
+ patched: changes.length,
320
+ ...(inserts.length > 0 ? { inserted: inserts.length } : {}),
321
+ unchanged,
322
+ ...(missing.length > 0 ? { skipped: missing.length } : {}),
323
+ ...(flags.deleteMissing ? { deleted: deletions.length } : {}),
156
324
  commit: result.commitHash,
157
- });
325
+ }), renderHelp([MATERIALIZE_HINT]));
158
326
  }
159
327
  catch (error) {
160
328
  throw translateError(error);
161
329
  }
162
330
  }
331
+ /**
332
+ * Resolve the record matched by `query`, apply the RFC 7396 merge, and run the
333
+ * result through willChange — the shared pre-flight for both single and bulk
334
+ * patch. Returns 'not-found' when the query matches no record.
335
+ */
336
+ async function previewPatch(sheet, query, partial) {
337
+ const existing = await sheet.queryFirst(query);
338
+ if (!existing)
339
+ return 'not-found';
340
+ const merged = mergePatch(stripSymbols(existing), partial);
341
+ // Preserve the record's path annotation so willChange applies rename logic
342
+ // when a path-template field changed (matches Sheet.patch behavior).
343
+ const pathSym = existing[Symbol.for('gitsheets-path')];
344
+ if (typeof pathSym === 'string') {
345
+ merged[Symbol.for('gitsheets-path')] = pathSym;
346
+ }
347
+ // patch is body-preserving; allowMissingBody defers the upsert body guard
348
+ // since the merge already produced the canonical record.
349
+ const wc = await sheet.willChange(merged, { allowMissingBody: true });
350
+ return { changed: wc.changed, path: wc.path, hash: wc.currentBlobHash };
351
+ }
163
352
  function stripSymbols(record) {
164
353
  if (!record || typeof record !== 'object')
165
354
  return record;
@@ -1 +1 @@
1
- {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/commands/patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;CAezB,CAAC;AAUF,SAAS,eAAe,CAAC,IAAc;IACrC,MAAM,KAAK,GAAe;QACxB,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;KACnB,CAAC;IACF,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,SAAS;gBACZ,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAC;gBAC1E,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;gBACvB,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,QAAQ,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;gBAC7E,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBACpB,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,QAAQ,CAAC,4BAA4B,EAAE,kBAAkB,CAAC,CAAC;gBAChF,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;gBACrB,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR;gBACE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,IAAI,QAAQ,CAAC,iBAAiB,GAAG,EAAE,EAAE,kBAAkB,EAAE;wBAC7D,kCAAkC;qBACnC,CAAC,CAAC;gBACL,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,QAAQ,CAAC,qCAAqC,EAAE,kBAAkB,EAAE;YAC5E,0EAA0E;SAC3E,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAC7B,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAc,EACd,GAAqB;IAErB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;QACrE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,KAA8B,CAAC;IACnC,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAA4B,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACvF,cAAc,CACf,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAChB,mEAAmE,EACnE,kBAAkB,CACnB,CAAC;IACJ,CAAC;IACD,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACvF,cAAc,CACf,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,QAAQ,CAAC,6BAA6B,EAAE,kBAAkB,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAC1B,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAC3D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,QAAQ,CAChB,GAAG,KAAK,CAAC,KAAK,+BAA+B,EAC7C,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAGxD,CAAC;IAEF,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,OAAO,GAAI,QAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAkC,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAC;IAC9E,CAAC;IAED,wEAAwE;IACxE,qEAAqE;IACrE,yEAAyE;IACzE,4DAA4D;IAC5D,MAAM,UAAU,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAW,CAAC;IAEvD,IAAI,UAAU,CAAC;IACf,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAe,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC;YAClB,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,eAAe,IAAI,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GACjB,KAAK,CAAC,OAAO,IAAI,GAAG,KAAK,CAAC,KAAK,UAAU,UAAU,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChC,EAAE,OAAO,EAAE,aAAa,EAAE,EAC1B,KAAK,EAAE,EAAE,EAAE,EAAE;YACX,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CACtB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAC3D,CAAC;YACF,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC,CACF,CAAC;QACF,OAAO,YAAY,CAAC;YAClB,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;YACvB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;YAC5B,MAAM,EAAE,MAAM,CAAC,UAAU;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAe;IACnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IACzD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAiC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,GAAG,CAAC,GAAI,MAAkC,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/commands/patch.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { GitsheetsContext } from '../context.js';
2
- export declare const QUERY_HELP = "usage: gitsheets-axi query <sheet> [--filter k=v ...] [--fields a,b,c] [--limit n]\nflags[4]:\n --filter <k>=<v> Equality match against record field (repeatable)\n --fields <list> Extra columns beyond the default schema (comma-separated)\n --limit <n> Cap results (default: 100, max: 10000)\n --prefix <p> Tenant sub-tree scope (see gitsheets --prefix)\nexamples:\n gitsheets-axi query users\n gitsheets-axi query users --filter status=active --limit 50\n gitsheets-axi query posts --fields title,published\noutput:\n Default schema is format-aware:\n TOML sheets \u2014 path-template fields + first scalar properties (cap 4)\n Markdown/MDX \u2014 path-template fields + title + body_size (never body content)\n --fields appends additional columns.\n";
2
+ export declare const QUERY_HELP = "usage: gitsheets-axi query <sheet> [--filter expr ...] [--fields a,b] [--sort f [--desc]] [--limit n] [--group-by f] [--json-out[=path]] [--ndjson-out[=path]] [--csv-out[=path]]\nflags[9]:\n --filter <expr> Filter clause (repeatable): k=v \u00B7 k!=v \u00B7 k<v \u00B7 k>v \u00B7\n k<=v \u00B7 k>=v \u00B7 k~regex \u00B7 \"k in (a,b)\" \u00B7 k:present \u00B7 k:empty\n --fields <list> Extra columns beyond the default schema (comma-separated)\n --sort <field> Sort records by a field (missing values sort last)\n --desc Sort descending (with --sort)\n --limit <n> Cap the stdout preview (default: 100, max: 10000)\n --group-by <field> Faceted counts by a field instead of a record list\n --prefix <p> Tenant sub-tree scope\n --json-out[=path] Also write the FULL matched result to a JSON array file\n --ndjson-out[=path] Also write the FULL matched result to an NDJSON file\n --csv-out[=path] Also write the FULL matched result to a CSV file (flat)\nexamples:\n gitsheets-axi query repos --filter status=unclassified\n gitsheets-axi query repos --filter 'pushed_at<2022-01-01' --sort pushed_at\n gitsheets-axi query repos --group-by target_team\n gitsheets-axi query repos --filter 'target_team in (archive,sencha)' --ndjson-out\noutput:\n Default schema is format-aware (TOML: path fields + first scalars, cap 4;\n Markdown: path fields + title + body_size). --fields appends columns.\n --group-by emits {value,count} facets (biggest first) over the filtered set.\nexport (--json-out / --ndjson-out / --csv-out):\n stdout stays the TOON preview; the file carries EVERY matched record (ignores\n --limit). JSON/NDJSON verbatim (round-trip into upsert); CSV flat + lossy.\n";
3
3
  export declare function queryCommand(args: string[], ctx: GitsheetsContext): Promise<string>;
4
4
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/commands/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAStD,eAAO,MAAM,UAAU,iyBAetB,CAAC;AAwEF,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,MAAM,CAAC,CAgFjB"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/commands/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAkBtD,eAAO,MAAM,UAAU,gvDAyBtB,CAAC;AAmHF,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,MAAM,CAAC,CAyEjB"}