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.
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +88 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/format/index.d.ts +49 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +60 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/markdown.d.ts +3 -0
- package/dist/format/markdown.d.ts.map +1 -0
- package/dist/format/markdown.js +131 -0
- package/dist/format/markdown.js.map +1 -0
- package/dist/format/toml.d.ts +3 -0
- package/dist/format/toml.d.ts.map +1 -0
- package/dist/format/toml.js +16 -0
- package/dist/format/toml.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/path-template/index.d.ts +9 -1
- package/dist/path-template/index.d.ts.map +1 -1
- package/dist/path-template/index.js +17 -5
- package/dist/path-template/index.js.map +1 -1
- package/dist/sheet.d.ts +39 -1
- package/dist/sheet.d.ts.map +1 -1
- package/dist/sheet.js +124 -37
- package/dist/sheet.js.map +1 -1
- package/package.json +2 -1
|
@@ -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,
|
|
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
|
|
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,
|
|
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}
|
|
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(
|
|
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, -
|
|
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,
|
|
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.
|
package/dist/sheet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../src/sheet.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAqC,KAAK,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AAW3F,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;
|
|
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 {
|
|
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
|
-
|
|
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
|
|
171
|
-
async function
|
|
172
|
-
const cached =
|
|
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
|
-
|
|
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
|
|
348
|
+
return format.parse(stdout, formatConfig);
|
|
324
349
|
}
|
|
325
350
|
catch {
|
|
326
|
-
// Blob unreadable or
|
|
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(
|
|
339
|
-
p = p.slice(0, -
|
|
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
|
-
//
|
|
468
|
-
//
|
|
469
|
-
//
|
|
470
|
-
if (!entry.canonicalPath.endsWith(
|
|
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
|
-
|
|
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
|
|
501
|
-
|
|
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
|
-
|
|
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}.
|
|
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
|
|
878
|
-
const blob = await this.#dataTree.writeChild(joinTreePath(this.#effectiveRoot(config), `${recordPath}.
|
|
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}.
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 });
|