gitsheets 1.1.0 → 1.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.
@@ -48,7 +48,15 @@ export declare class Template {
48
48
  * against the partial query, the walk expands across all subtrees at that
49
49
  * level. The caller still applies the full equality filter on the yielded
50
50
  * record contents.
51
+ *
52
+ * `opts.extension` selects which file extension marks a record blob (the
53
+ * leaf of the path). Defaults to `.toml`; markdown sheets pass `.md` (and
54
+ * `.mdx` for mdx). The extension is stripped from the yielded `path`.
51
55
  */
52
- queryTree(tree: PathTemplateTree | undefined, query: RecordLike, pathPrefix?: string, depth?: number): AsyncGenerator<PathTemplateQueryResult>;
56
+ queryTree(tree: PathTemplateTree | undefined, query: RecordLike, opts?: {
57
+ pathPrefix?: string;
58
+ depth?: number;
59
+ extension?: string;
60
+ }): AsyncGenerator<PathTemplateQueryResult>;
53
61
  }
54
62
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/path-template/index.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACjF,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAC5E,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACjC;AAkRD,qBAAa,QAAQ;;IACnB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ;IAQnD,4DAA4D;IAC5D,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAGxB,OAAO;IAKP,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;;;;;;;;;OAUG;IACH,aAAa,IAAI,SAAS,MAAM,EAAE;IAgBlC;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAiBlC;;;;;;;;OAQG;IACI,SAAS,CACd,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,KAAK,EAAE,UAAU,EACjB,UAAU,SAAK,EACf,KAAK,SAAI,GACR,cAAc,CAAC,uBAAuB,CAAC;CAmE3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/path-template/index.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACjF,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAC5E,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACjC;AAkRD,qBAAa,QAAQ;;IACnB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ;IAQnD,4DAA4D;IAC5D,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAGxB,OAAO;IAKP,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;;;;;;;;;OAUG;IACH,aAAa,IAAI,SAAS,MAAM,EAAE;IAgBlC;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAiBlC;;;;;;;;;;;;OAYG;IACI,SAAS,CACd,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACrE,cAAc,CAAC,uBAAuB,CAAC;CA4E3C"}
@@ -269,10 +269,18 @@ export class Template {
269
269
  * against the partial query, the walk expands across all subtrees at that
270
270
  * level. The caller still applies the full equality filter on the yielded
271
271
  * record contents.
272
+ *
273
+ * `opts.extension` selects which file extension marks a record blob (the
274
+ * leaf of the path). Defaults to `.toml`; markdown sheets pass `.md` (and
275
+ * `.mdx` for mdx). The extension is stripped from the yielded `path`.
272
276
  */
273
- async *queryTree(tree, query, pathPrefix = '', depth = 0) {
277
+ async *queryTree(tree, query, opts = {}) {
274
278
  if (!tree)
275
279
  return;
280
+ const pathPrefix = opts.pathPrefix ?? '';
281
+ const depth = opts.depth ?? 0;
282
+ const extension = opts.extension ?? '.toml';
283
+ const extLen = extension.length;
276
284
  const numComponents = this.#components.length;
277
285
  let currentTree = tree;
278
286
  let currentPrefix = pathPrefix;
@@ -282,7 +290,7 @@ export class Template {
282
290
  const rendered = renderComponent(c, query);
283
291
  if (isLast) {
284
292
  if (rendered !== undefined) {
285
- const child = await currentTree.getChild(`${rendered}.toml`);
293
+ const child = await currentTree.getChild(`${rendered}${extension}`);
286
294
  if (child && isBlob(child)) {
287
295
  yield { path: joinPath(currentPrefix, rendered), blob: child };
288
296
  }
@@ -301,14 +309,14 @@ export class Template {
301
309
  allKeys.push(k);
302
310
  const sortedKeys = allKeys.sort();
303
311
  for (const childPath of sortedKeys) {
304
- if (!childPath.endsWith('.toml'))
312
+ if (!childPath.endsWith(extension))
305
313
  continue;
306
314
  if (attachmentPrefix && childPath.startsWith(attachmentPrefix))
307
315
  continue;
308
316
  const child = children[childPath];
309
317
  if (!child || !isBlob(child))
310
318
  continue;
311
- const childName = childPath.slice(0, -5);
319
+ const childName = childPath.slice(0, -extLen);
312
320
  attachmentPrefix = `${childName}/`;
313
321
  yield { path: joinPath(currentPrefix, childName), blob: child };
314
322
  }
@@ -329,7 +337,11 @@ export class Template {
329
337
  const child = children[name];
330
338
  if (!child || !isTree(child))
331
339
  continue;
332
- yield* this.queryTree(child, query, joinPath(currentPrefix, name), i + 1);
340
+ yield* this.queryTree(child, query, {
341
+ pathPrefix: joinPath(currentPrefix, name),
342
+ depth: i + 1,
343
+ extension,
344
+ });
333
345
  }
334
346
  return;
335
347
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/path-template/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/path-template/index.ts"],"names":[],"mappings":"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"}
package/dist/sheet.d.ts CHANGED
@@ -5,6 +5,7 @@ import { type RecordLike } from './path-template/index.js';
5
5
  import type { Repository } from './repository.js';
6
6
  import { Transaction } from './transaction.js';
7
7
  import { type JSONSchema, type StandardSchemaV1 } from './validation.js';
8
+ import { type FormatConfig } from './format/index.js';
8
9
  export declare const RECORD_SHEET_KEY: unique symbol;
9
10
  export declare const RECORD_PATH_KEY: unique symbol;
10
11
  export type SortRule = boolean | readonly string[] | Readonly<Record<string, 'ASC' | 'DESC'>> | string;
@@ -18,11 +19,24 @@ export interface SheetConfig {
18
19
  readonly fields: Readonly<Record<string, SheetFieldConfig>>;
19
20
  /** JSON Schema for record validation; null if no [gitsheet.schema] block. */
20
21
  readonly schema: JSONSchema | null;
22
+ /** Storage-format config from `[gitsheet.format]` (default: `type = 'toml'`). */
23
+ readonly format: FormatConfig;
21
24
  }
22
25
  export interface UpsertResult {
23
26
  readonly blob: BlobObject;
24
27
  readonly path: string;
25
28
  }
29
+ /**
30
+ * Options for `Sheet.upsert`. For content-typed (markdown) sheets only:
31
+ * `allowMissingBody: true` permits an upsert whose record omits the body
32
+ * field. Default `false` because upsert is a full-record replace — silently
33
+ * erasing an on-disk body is rarely the intent. Consumers wanting a body-
34
+ * preserving update should use `Sheet.patch(query, partial)` (which always
35
+ * full-loads the existing record before merging).
36
+ */
37
+ export interface UpsertOptions {
38
+ readonly allowMissingBody?: boolean;
39
+ }
26
40
  /**
27
41
  * Filter passed to `Sheet.query` / `queryFirst` / `queryAll`. Each field's
28
42
  * value can be a literal (equality match) or a predicate function. When `T`
@@ -46,6 +60,18 @@ export interface QueryOptions {
46
60
  * to `controller.abort(reason)`).
47
61
  */
48
62
  readonly signal?: AbortSignal;
63
+ /**
64
+ * For content-typed sheets (markdown/mdx), whether to load the body field
65
+ * into yielded records. Defaults to `true`. Setting `false` reads only the
66
+ * frontmatter — the body field is `undefined`. Saves I/O at scale for
67
+ * bulk metadata queries. Has no effect on TOML sheets (no body concept).
68
+ *
69
+ * When `withBody: false`, filters that reference the body field throw
70
+ * `TypeError` at query start (the filter would silently match zero).
71
+ *
72
+ * @see specs/behaviors/content-types.md#lazy-body-loading
73
+ */
74
+ readonly withBody?: boolean;
49
75
  }
50
76
  /**
51
77
  * Handle on an attachment's bytes, returned by `Sheet.attachments()`. Wraps
@@ -130,6 +156,18 @@ export declare class Sheet<T extends RecordLike = RecordLike> {
130
156
  query(filter?: QueryFilter<T>, opts?: QueryOptions): AsyncGenerator<T>;
131
157
  queryFirst(filter?: QueryFilter<T>, opts?: QueryOptions): Promise<T | undefined>;
132
158
  queryAll(filter?: QueryFilter<T>, opts?: QueryOptions): Promise<T[]>;
159
+ /**
160
+ * Hydrate a body-less record returned by `query`/`findByIndex` with its
161
+ * full body. Re-reads the record blob at the path annotation symbol and
162
+ * returns a fresh record with the body field populated.
163
+ *
164
+ * For TOML sheets (no body concept) this returns the input record
165
+ * unchanged after a fresh parse. For markdown/mdx sheets the body field
166
+ * is populated from the on-disk blob.
167
+ *
168
+ * @see specs/behaviors/content-types.md#lazy-body-loading
169
+ */
170
+ loadBody(record: T): Promise<T>;
133
171
  /**
134
172
  * Async iterator of changes between `srcCommitHash` and the current tree,
135
173
  * scoped to this sheet's root. `srcCommitHash` accepts a commit hash, a
@@ -150,7 +188,7 @@ export declare class Sheet<T extends RecordLike = RecordLike> {
150
188
  normalizeRecord(record: T): Promise<T>;
151
189
  clear(): Promise<void>;
152
190
  clone(): Promise<Sheet<T>>;
153
- upsert(record: T): Promise<UpsertResult>;
191
+ upsert(record: T, opts?: UpsertOptions): Promise<UpsertResult>;
154
192
  /**
155
193
  * RFC 7396 JSON Merge Patch. Reads the matching record, merges `partial`,
156
194
  * validates, and upserts the result. Returns the same shape as upsert.
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../src/sheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../src/sheet.ts"],"names":[],"mappings":"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"}
package/dist/sheet.js CHANGED
@@ -7,10 +7,11 @@ import { createPatch as rfc6902CreatePatch } from 'rfc6902';
7
7
  import { ConfigError, IndexError, NotFoundError, PathTemplateError, RefError, TransactionError, } from './errors.js';
8
8
  import { mergePatch } from './patch.js';
9
9
  import { Template } from './path-template/index.js';
10
- import { stringifyRecord, parseToml, parseConfigToml } from './toml.js';
10
+ import { parseConfigToml } from './toml.js';
11
11
  import sortKeys from 'sort-keys';
12
12
  import { transactionContext } from './transaction.js';
13
13
  import { validateRecord, } from './validation.js';
14
+ import { getFormat, resolveFormatConfig } from './format/index.js';
14
15
  const exec = promisify(execFile);
15
16
  export const RECORD_SHEET_KEY = Symbol.for('gitsheets-sheet');
16
17
  export const RECORD_PATH_KEY = Symbol.for('gitsheets-path');
@@ -135,7 +136,31 @@ async function loadConfig(workspace, configPath) {
135
136
  }
136
137
  schema = schemaRaw;
137
138
  }
138
- const config = { root, path, fields: fieldsClean, schema };
139
+ let format;
140
+ try {
141
+ format = resolveFormatConfig(gitsheet['format']);
142
+ }
143
+ catch (err) {
144
+ throw new ConfigError('config_invalid', `${configPath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
145
+ }
146
+ // Body-field collision: a sheet whose path template references the body
147
+ // field would render the same key for a record regardless of body content.
148
+ if (format.body !== undefined) {
149
+ if (format.type !== 'markdown' && format.type !== 'mdx') {
150
+ throw new ConfigError('config_invalid', `${configPath}: [gitsheet.format].body only applies to markdown/mdx formats`);
151
+ }
152
+ // Static check: the path template's getFieldNames must not include the
153
+ // body field. Tested against the registered field name only — expressions
154
+ // referencing body are caught lazily during render.
155
+ const fieldNames = Template.fromString(path).getFieldNames();
156
+ if (fieldNames.includes(format.body)) {
157
+ throw new ConfigError('config_invalid', `${configPath}: [gitsheet.format].body = ${JSON.stringify(format.body)} collides with the path template — the body field cannot also identify the record`);
158
+ }
159
+ }
160
+ else if (format.type === 'markdown' || format.type === 'mdx') {
161
+ throw new ConfigError('config_invalid', `${configPath}: [gitsheet.format].body is required when type is "markdown" or "mdx"`);
162
+ }
163
+ const config = { root, path, fields: fieldsClean, schema, format };
139
164
  CONFIG_CACHE.set(node.hash, config);
140
165
  return config;
141
166
  }
@@ -167,13 +192,13 @@ function validateSortRule(sort, configPath, field) {
167
192
  // cache the TOML *text* (not the parsed object) so each reader gets a fresh
168
193
  // parsed copy — avoiding the original cache's v8.serialize/Date-subclass
169
194
  // issue without leaking mutable shared state.
170
- const TOML_TEXT_CACHE = new Map();
171
- async function readBlobTomlCached(blob) {
172
- const cached = TOML_TEXT_CACHE.get(blob.hash);
195
+ const RECORD_TEXT_CACHE = new Map();
196
+ async function readBlobTextCached(blob) {
197
+ const cached = RECORD_TEXT_CACHE.get(blob.hash);
173
198
  if (cached !== undefined)
174
199
  return cached;
175
200
  const text = await blob.read();
176
- TOML_TEXT_CACHE.set(blob.hash, text);
201
+ RECORD_TEXT_CACHE.set(blob.hash, text);
177
202
  return text;
178
203
  }
179
204
  // Minimum-viable MIME map — covers the bulk of typical attachment uses
@@ -314,20 +339,20 @@ function mapDiffStatus(ch) {
314
339
  return null;
315
340
  }
316
341
  }
317
- async function readBlobAsRecord(gitDir, hash) {
342
+ async function readBlobAsRecord(gitDir, hash, format, formatConfig) {
318
343
  try {
319
344
  const { stdout } = await exec('git', ['cat-file', 'blob', hash], {
320
345
  cwd: gitDir,
321
346
  maxBuffer: 64 * 1024 * 1024,
322
347
  });
323
- return parseToml(stdout);
348
+ return format.parse(stdout, formatConfig);
324
349
  }
325
350
  catch {
326
- // Blob unreadable or non-TOML — caller treats this as "no record".
351
+ // Blob unreadable or unparsable — caller treats this as "no record".
327
352
  return null;
328
353
  }
329
354
  }
330
- function stripRecordPath(rawPath, root) {
355
+ function stripRecordPath(rawPath, root, extension) {
331
356
  let p = rawPath;
332
357
  const cleanRoot = root.replace(/^\/+|\/+$/g, '');
333
358
  if (cleanRoot && cleanRoot !== '.' && cleanRoot !== '') {
@@ -335,8 +360,8 @@ function stripRecordPath(rawPath, root) {
335
360
  if (p.startsWith(prefix))
336
361
  p = p.slice(prefix.length);
337
362
  }
338
- if (p.endsWith('.toml'))
339
- p = p.slice(0, -5);
363
+ if (p.endsWith(extension))
364
+ p = p.slice(0, -extension.length);
340
365
  return p;
341
366
  }
342
367
  export class Sheet {
@@ -374,6 +399,10 @@ export class Sheet {
374
399
  #txDelegateOpts() {
375
400
  return this.#prefix ? { prefix: this.#prefix } : {};
376
401
  }
402
+ /** Resolve the active `Format` for this sheet's storage type. */
403
+ #getFormat(config) {
404
+ return getFormat(config.format.type);
405
+ }
377
406
  get name() {
378
407
  return this.#name;
379
408
  }
@@ -405,12 +434,21 @@ export class Sheet {
405
434
  const sheetRoot = await this.#getSheetRoot(this.#effectiveRoot(config));
406
435
  if (!sheetRoot)
407
436
  return;
437
+ const format = this.#getFormat(config);
438
+ const withBody = opts.withBody ?? true;
439
+ const bodyField = config.format.body;
440
+ // Guard: if the consumer asked for body-less reads but their filter
441
+ // references the body field, we'd silently match zero records. Fail
442
+ // loudly at query start instead.
443
+ if (!withBody && bodyField !== undefined && bodyField in filter) {
444
+ throw new TypeError(`Sheet.query: filter references body field ${JSON.stringify(bodyField)} while withBody: false — bodies aren't loaded so the filter would match nothing`);
445
+ }
408
446
  // hologit's TreeObject/BlobObject are structurally compatible with the
409
447
  // path-template tree interface; the casts bridge the type lattices.
410
- for await (const { blob, path: blobPath } of template.queryTree(sheetRoot, filter)) {
448
+ for await (const { blob, path: blobPath } of template.queryTree(sheetRoot, filter, { extension: format.extension })) {
411
449
  if (signal?.aborted)
412
450
  throwAborted(signal);
413
- const record = (await this.#readRecordFromBlob(blob, blobPath));
451
+ const record = (await this.#readRecordFromBlob(blob, blobPath, config, { headerOnly: !withBody }));
414
452
  if (!queryMatches(filter, record))
415
453
  continue;
416
454
  yield record;
@@ -429,6 +467,31 @@ export class Sheet {
429
467
  }
430
468
  return results;
431
469
  }
470
+ /**
471
+ * Hydrate a body-less record returned by `query`/`findByIndex` with its
472
+ * full body. Re-reads the record blob at the path annotation symbol and
473
+ * returns a fresh record with the body field populated.
474
+ *
475
+ * For TOML sheets (no body concept) this returns the input record
476
+ * unchanged after a fresh parse. For markdown/mdx sheets the body field
477
+ * is populated from the on-disk blob.
478
+ *
479
+ * @see specs/behaviors/content-types.md#lazy-body-loading
480
+ */
481
+ async loadBody(record) {
482
+ const recordPath = record[RECORD_PATH_KEY];
483
+ if (typeof recordPath !== 'string') {
484
+ throw new TypeError(`Sheet.loadBody: record is missing the path annotation (RECORD_PATH_KEY) — did it come from query()?`);
485
+ }
486
+ const config = await this.readConfig();
487
+ const format = this.#getFormat(config);
488
+ const fullPath = joinTreePath(this.#effectiveRoot(config), `${recordPath}${format.extension}`);
489
+ const node = await this.#dataTree.getChild(fullPath);
490
+ if (!node || !isBlob(node)) {
491
+ throw new NotFoundError('record_not_found', `Sheet.loadBody: no record blob at ${fullPath}`);
492
+ }
493
+ return (await this.#readRecordFromBlob(node, recordPath, config));
494
+ }
432
495
  /**
433
496
  * Async iterator of changes between `srcCommitHash` and the current tree,
434
497
  * scoped to this sheet's root. `srcCommitHash` accepts a commit hash, a
@@ -462,18 +525,17 @@ export class Sheet {
462
525
  catch (err) {
463
526
  throw new RefError('ref_not_found', `Sheet.diffFrom: git diff-tree failed for src=${srcRef} dst=${dstTreeHash}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
464
527
  }
528
+ const format = this.#getFormat(config);
465
529
  const entries = parseDiffTreeZ(stdout);
466
530
  for (const entry of entries) {
467
- // v1.1 scope: `.toml` records only. Filter out anything else
468
- // attachments under the record dir, hidden files, accidental non-TOML
469
- // content in the data tree.
470
- if (!entry.canonicalPath.endsWith('.toml'))
531
+ // Scope to record files for this sheet's storage format. Attachments
532
+ // (any extension), hidden files, and `.gitsheets/` config blobs are
533
+ // filtered out they're not records.
534
+ if (!entry.canonicalPath.endsWith(format.extension))
471
535
  continue;
472
536
  if (entry.canonicalPath.startsWith('.gitsheets/'))
473
537
  continue;
474
- // When root is '.', sheet config blobs would otherwise appear as changes
475
- // — they're metadata, not records.
476
- const recordPath = stripRecordPath(entry.canonicalPath, this.#effectiveRoot(config));
538
+ const recordPath = stripRecordPath(entry.canonicalPath, this.#effectiveRoot(config), format.extension);
477
539
  const change = {
478
540
  path: recordPath,
479
541
  status: entry.status,
@@ -497,8 +559,12 @@ export class Sheet {
497
559
  }
498
560
  }
499
561
  if (opts.records || opts.patches) {
500
- const src = entry.srcHash ? await readBlobAsRecord(gitDir, entry.srcHash) : null;
501
- const dst = entry.dstHash ? await readBlobAsRecord(gitDir, entry.dstHash) : null;
562
+ const src = entry.srcHash
563
+ ? await readBlobAsRecord(gitDir, entry.srcHash, format, config.format)
564
+ : null;
565
+ const dst = entry.dstHash
566
+ ? await readBlobAsRecord(gitDir, entry.dstHash, format, config.format)
567
+ : null;
502
568
  if (opts.records) {
503
569
  if (src !== null)
504
570
  change['src'] = src;
@@ -571,9 +637,9 @@ export class Sheet {
571
637
  }
572
638
  return new Sheet(opts);
573
639
  }
574
- async upsert(record) {
640
+ async upsert(record, opts = {}) {
575
641
  if (this.#transaction !== undefined) {
576
- return this.#upsertInTx(this.#transaction, record);
642
+ return this.#upsertInTx(this.#transaction, record, opts);
577
643
  }
578
644
  this.#checkStrictMode();
579
645
  // The tx-bound Sheet returned by tx.sheet(name) doesn't carry this
@@ -597,9 +663,9 @@ export class Sheet {
597
663
  }
598
664
  const tx = transactionContext.getStore();
599
665
  if (tx !== undefined) {
600
- return tx.sheet(this.#name, this.#txDelegateOpts()).upsert(validated);
666
+ return tx.sheet(this.#name, this.#txDelegateOpts()).upsert(validated, opts);
601
667
  }
602
- return this.#autoTransact(async (innerTx) => innerTx.sheet(this.#name, this.#txDelegateOpts()).upsert(validated), (r) => `${this.#name} upsert ${r.path}`);
668
+ return this.#autoTransact(async (innerTx) => innerTx.sheet(this.#name, this.#txDelegateOpts()).upsert(validated, opts), (r) => `${this.#name} upsert ${r.path}`);
603
669
  }
604
670
  /**
605
671
  * RFC 7396 JSON Merge Patch. Reads the matching record, merges `partial`,
@@ -618,7 +684,10 @@ export class Sheet {
618
684
  if (typeof existingPath === 'string') {
619
685
  merged[RECORD_PATH_KEY] = existingPath;
620
686
  }
621
- return this.upsert(merged);
687
+ // patch may produce a record missing the body field (e.g., `{body: null}`
688
+ // deletes per RFC 7396). The consumer's intent is explicit at the patch
689
+ // call site, so we don't trip the upsert allowMissingBody guard here.
690
+ return this.upsert(merged, { allowMissingBody: true });
622
691
  }
623
692
  async delete(target) {
624
693
  if (this.#transaction !== undefined) {
@@ -825,9 +894,18 @@ export class Sheet {
825
894
  void message;
826
895
  return staged;
827
896
  }
828
- async #upsertInTx(tx, record) {
897
+ async #upsertInTx(tx, record, opts = {}) {
829
898
  const config = await this.readConfig();
830
899
  const template = Template.fromString(config.path);
900
+ // Body presence guard: upsert is a full-record replace. A markdown sheet
901
+ // whose record omits the body field would silently erase the on-disk
902
+ // body. Require explicit opt-in to make the trade visible.
903
+ const bodyField = config.format.body;
904
+ if (bodyField !== undefined &&
905
+ !opts.allowMissingBody &&
906
+ record[bodyField] === undefined) {
907
+ throw new TypeError(`Sheet.upsert: record is missing the body field ${JSON.stringify(bodyField)}. Pass { allowMissingBody: true } to opt in, or use Sheet.patch for body-preserving frontmatter updates.`);
908
+ }
831
909
  // Validate before normalizing — per specs/behaviors/validation.md order:
832
910
  // JSON Schema → Standard Schema (may transform) → normalize → render → write.
833
911
  let validated = (await validateRecord({
@@ -865,25 +943,27 @@ export class Sheet {
865
943
  throw new IndexError('index_unique_conflict', `unique index "${state.name}" on sheet "${this.#name}": key ${JSON.stringify(key)} is already used by ${ownerPath}`, { conflictingPaths: [ownerPath, recordPath] });
866
944
  }
867
945
  }
946
+ const format = this.#getFormat(config);
868
947
  // Rename: if the source record was loaded from a different path, delete the old one.
869
948
  if (typeof existing === 'string' && existing !== recordPath) {
870
949
  try {
871
- await this.#dataTree.deleteChild(joinTreePath(this.#effectiveRoot(config), `${existing}.toml`));
950
+ await this.#dataTree.deleteChild(joinTreePath(this.#effectiveRoot(config), `${existing}${format.extension}`));
872
951
  }
873
952
  catch {
874
953
  // Old path may not exist — ignore.
875
954
  }
876
955
  }
877
- const toml = stringifyRecord(stripSymbols(normalized));
878
- const blob = await this.#dataTree.writeChild(joinTreePath(this.#effectiveRoot(config), `${recordPath}.toml`), toml);
956
+ const text = await format.serialize(stripSymbols(normalized), config.format);
957
+ const blob = await this.#dataTree.writeChild(joinTreePath(this.#effectiveRoot(config), `${recordPath}${format.extension}`), text);
879
958
  tx.markMutated();
880
959
  this.#invalidateIndexes();
881
960
  return { blob, path: recordPath };
882
961
  }
883
962
  async #deleteInTx(tx, target) {
884
963
  const config = await this.readConfig();
964
+ const format = this.#getFormat(config);
885
965
  const recordPath = typeof target === 'string' ? target : await this.pathForRecord(target);
886
- const fullPath = joinTreePath(this.#effectiveRoot(config), `${recordPath}.toml`);
966
+ const fullPath = joinTreePath(this.#effectiveRoot(config), `${recordPath}${format.extension}`);
887
967
  const existing = await this.#dataTree.getChild(fullPath);
888
968
  if (!existing) {
889
969
  throw new NotFoundError('record_not_found', `${this.#name}: no record at ${recordPath}`);
@@ -924,7 +1004,11 @@ export class Sheet {
924
1004
  return;
925
1005
  state.uniqueMap.clear();
926
1006
  state.multiMap.clear();
927
- for await (const record of this.query()) {
1007
+ // Index builds always use body-less reads. Indexing by body content is
1008
+ // not a supported use case; consumers needing the body should call
1009
+ // sheet.loadBody(record) after findByIndex returns.
1010
+ // @see specs/behaviors/content-types.md#lazy-body-loading
1011
+ for await (const record of this.query({}, { withBody: false })) {
928
1012
  const rawKey = state.keyFn(record);
929
1013
  if (rawKey === undefined || rawKey === null)
930
1014
  continue;
@@ -951,11 +1035,14 @@ export class Sheet {
951
1035
  state.treeHashAtBuild = currentHash;
952
1036
  state.built = true;
953
1037
  }
954
- async #readRecordFromBlob(blob, path) {
955
- const text = await readBlobTomlCached(blob);
1038
+ async #readRecordFromBlob(blob, path, config, opts = {}) {
1039
+ const text = await readBlobTextCached(blob);
1040
+ const format = this.#getFormat(config);
956
1041
  let parsed;
957
1042
  try {
958
- parsed = parseToml(text);
1043
+ parsed = opts.headerOnly
1044
+ ? format.parseHeaderOnly(text, config.format)
1045
+ : format.parse(text, config.format);
959
1046
  }
960
1047
  catch (err) {
961
1048
  throw new ConfigError('config_invalid', `failed to parse record at ${path}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });