browser-git-ops 0.0.2 → 0.0.5

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 (46) hide show
  1. package/README.md +291 -92
  2. package/dist/git/abstractAdapter.d.ts +167 -0
  3. package/dist/git/abstractAdapter.d.ts.map +1 -0
  4. package/dist/git/adapter.d.ts +23 -1
  5. package/dist/git/adapter.d.ts.map +1 -1
  6. package/dist/git/githubAdapter.d.ts +282 -35
  7. package/dist/git/githubAdapter.d.ts.map +1 -1
  8. package/dist/git/gitlabAdapter.d.ts +220 -34
  9. package/dist/git/gitlabAdapter.d.ts.map +1 -1
  10. package/dist/index.d.ts +7 -6
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +6199 -792
  13. package/dist/index.js.map +4 -4
  14. package/dist/index.mjs +6199 -792
  15. package/dist/index.mjs.map +4 -4
  16. package/dist/virtualfs/changeTracker.d.ts +66 -0
  17. package/dist/virtualfs/changeTracker.d.ts.map +1 -0
  18. package/dist/virtualfs/conflictManager.d.ts +69 -0
  19. package/dist/virtualfs/conflictManager.d.ts.map +1 -0
  20. package/dist/virtualfs/hashUtils.d.ts +13 -0
  21. package/dist/virtualfs/hashUtils.d.ts.map +1 -0
  22. package/dist/virtualfs/indexManager.d.ts +57 -0
  23. package/dist/virtualfs/indexManager.d.ts.map +1 -0
  24. package/dist/virtualfs/indexedDatabaseStorage.d.ts +7 -0
  25. package/dist/virtualfs/indexedDatabaseStorage.d.ts.map +1 -0
  26. package/dist/virtualfs/inmemoryStorage.d.ts +8 -0
  27. package/dist/virtualfs/inmemoryStorage.d.ts.map +1 -0
  28. package/dist/virtualfs/localChangeApplier.d.ts +21 -0
  29. package/dist/virtualfs/localChangeApplier.d.ts.map +1 -0
  30. package/dist/virtualfs/localFileManager.d.ts +58 -0
  31. package/dist/virtualfs/localFileManager.d.ts.map +1 -0
  32. package/dist/virtualfs/metadataManager.d.ts +14 -0
  33. package/dist/virtualfs/metadataManager.d.ts.map +1 -0
  34. package/dist/virtualfs/opfsStorage.d.ts +2 -63
  35. package/dist/virtualfs/opfsStorage.d.ts.map +1 -1
  36. package/dist/virtualfs/remoteSynchronizer.d.ts +192 -0
  37. package/dist/virtualfs/remoteSynchronizer.d.ts.map +1 -0
  38. package/dist/virtualfs/storageBackend.d.ts +57 -4
  39. package/dist/virtualfs/storageBackend.d.ts.map +1 -1
  40. package/dist/virtualfs/types.d.ts +37 -0
  41. package/dist/virtualfs/types.d.ts.map +1 -1
  42. package/dist/virtualfs/virtualfs.d.ts +454 -87
  43. package/dist/virtualfs/virtualfs.d.ts.map +1 -1
  44. package/package.json +30 -13
  45. package/dist/virtualfs/indexedDbStorage.d.ts +0 -62
  46. package/dist/virtualfs/indexedDbStorage.d.ts.map +0 -1
@@ -1,28 +1,56 @@
1
- import { IndexFile, TombstoneEntry } from './types';
2
- import { StorageBackend } from './storageBackend';
1
+ import { IndexFile } from './types.ts';
2
+ import { StorageBackend } from './storageBackend.ts';
3
+ import { Logger } from '../git/abstractAdapter.ts';
4
+ import type { CommitHistoryQuery, CommitHistoryPage } from '../git/adapter.ts';
5
+ import type { BranchListQuery, BranchListPage } from './types.ts';
6
+ type RemoteSnapshotDescriptor = {
7
+ headSha: string;
8
+ shas: Record<string, string>;
9
+ fetchContent: (_paths: string[]) => Promise<Record<string, string>>;
10
+ };
3
11
  /** Virtual file system - 永続化バックエンドを抽象化した仮想ファイルシステム */
4
12
  export declare class VirtualFS {
5
- private storageDir;
6
- private base;
7
- private workspace;
8
- private tombstones;
9
- private index;
13
+ private adapter;
14
+ private logger?;
15
+ private adapterMeta;
16
+ private indexManager;
10
17
  private backend;
18
+ private applier;
19
+ private localFileManager;
20
+ private changeTracker;
21
+ private conflictManager;
22
+ private remoteSynchronizer;
11
23
  /**
12
24
  * VirtualFS のインスタンスを初期化します。
13
25
  * @param options オプション
14
26
  * @returns {void}
15
27
  */
16
28
  constructor(options?: {
17
- storageDir?: string;
18
29
  backend?: StorageBackend;
30
+ logger?: Logger;
19
31
  });
20
32
  /**
21
- * コンテンツから SHA1 を計算します。
22
- * @param {string} content コンテンツ
23
- * @returns {string} 計算された SHA
33
+ * public-facing property accessors for backwards compatibility with tests
34
+ * @returns {string}
35
+ */
36
+ get head(): string;
37
+ /**
38
+ * Setter for head
39
+ * @param {string} h - head value
40
+ * @returns {void}
41
+ */
42
+ set head(h: string);
43
+ /**
44
+ * Get lastCommitKey
45
+ * @returns {string|undefined}
24
46
  */
25
- private shaOf;
47
+ get lastCommitKey(): string | undefined;
48
+ /**
49
+ * Set lastCommitKey
50
+ * @param {string|undefined} k
51
+ * @returns {void}
52
+ */
53
+ set lastCommitKey(k: string | undefined);
26
54
  /**
27
55
  * VirtualFS の初期化を行います(バックエンド初期化と index 読み込み)。
28
56
  * @returns {Promise<void>}
@@ -34,129 +62,303 @@ export declare class VirtualFS {
34
62
  */
35
63
  private loadIndex;
36
64
  /**
37
- * 内部インデックスを永続化します。
65
+ * Set adapter instance and persist adapter metadata into index file.
66
+ * @param adapter adapter instance (or null to clear)
67
+ * @param meta metadata to persist (e.g. { type:'github', opts: {...} })
38
68
  * @returns {Promise<void>}
39
69
  */
40
- private saveIndex;
70
+ setAdapter(adapter: any | null, meta?: any): Promise<void>;
41
71
  /**
42
- *
72
+ * Try to inject the configured logger into the adapter instance (best-effort).
73
+ * @returns {Promise<void>}
43
74
  */
75
+ private _tryInjectLogger;
44
76
  /**
45
- * ワークスペースにファイルを書き込みます(ローカル編集)。
46
- * @param {string} filepath ファイルパス
47
- * @param {string} content コンテンツ
77
+ * Persist adapter metadata into the index file (best-effort).
78
+ * @returns {Promise<void>}
79
+ */
80
+ private _tryPersistAdapterMeta;
81
+ /**
82
+ * Return persisted adapter metadata from the index (or cached meta).
83
+ * This does not necessarily instantiate the adapter instance; use
84
+ * `getAdapterInstance()` to obtain an instantiated adapter.
85
+ * @returns {Promise<any|null>}
86
+ */
87
+ getAdapter(): Promise<any | null>;
88
+ /**
89
+ * Return or lazily create the adapter instance based on persisted metadata.
90
+ * @returns {Promise<any|null>}
91
+ */
92
+ getAdapterInstance(): Promise<any | null>;
93
+ /**
94
+ * Load adapterMeta from index if not present.
95
+ * @returns {Promise<void>}
96
+ */
97
+ private _ensureAdapterMetaLoaded;
98
+ /**
99
+ * Create adapter instance for given type and options. Returns null on failure.
100
+ * @param type adapter type string
101
+ * @param opts adapter options
102
+ * @returns {any|null}
103
+ */
104
+ private _instantiateAdapter;
105
+ /**
106
+ * Helper: obtain backend listFilesRaw in a safe manner.
107
+ * @returns {Promise<any[]>}
108
+ */
109
+ private _getBackendFilesRaw;
110
+ /**
111
+ * Helper: apply parsed info text into stats object when possible.
112
+ * @param infoTxt raw info text
113
+ * @param stats stats object to mutate
114
+ * @returns {void}
115
+ */
116
+ private _applyInfoTxtToStats;
117
+ /**
118
+ * Find a matched backend entry for the given filepath.
119
+ * @param filepath target filepath
120
+ * @param filesRaw backend raw listing
121
+ * @returns {any|null}
122
+ */
123
+ private _findMatchedFile;
124
+ /**
125
+ * Create default stats object with consistent shape.
126
+ * @param now current Date
127
+ * @returns {any}
128
+ */
129
+ private _createDefaultStats;
130
+ /**
131
+ * Populate stats.gitCommitSha from adapterMeta if available.
132
+ * @param stats stats object to mutate
133
+ * @returns {void}
134
+ */
135
+ private _populateCommitShaFromMeta;
136
+ /**
137
+ * Try to resolve commit SHA from an instantiated adapter when needed.
138
+ * @param stats stats object to mutate
139
+ * @returns {Promise<void>}
140
+ */
141
+ private _resolveCommitShaFromAdapter;
142
+ /**
143
+ * Safely get adapter instance, returning null on error.
144
+ * @returns {Promise<any|null>}
145
+ */
146
+ private _safeGetAdapterInstance;
147
+ /**
148
+ * Helper: populate stats.gitCommitSha using adapterMeta or adapter.resolveRef when available.
149
+ * @param stats stats object to mutate
48
150
  * @returns {Promise<void>}
49
151
  */
50
- writeWorkspace(filepath: string, content: string): Promise<void>;
152
+ private _resolveAdapterCommitShaIfNeeded;
51
153
  /**
52
- * ワークスペース上のファイルを削除します(トゥームストーン作成を含む)。
154
+ * Determine whether a normalized path is an exact file entry in the provided entries.
155
+ * @param normalizedDirectory normalized directory string
156
+ * @param keys index keys array
157
+ * @param entries index entries object
158
+ * @returns {boolean}
159
+ */
160
+ private _isExactFile;
161
+ /**
162
+ * Collect immediate child names from index entries for given directory.
163
+ * @param normalizedDirectory normalized directory string
164
+ * @param entries index entries object
165
+ * @returns {Set<string>} set of immediate child names
166
+ */
167
+ private _collectNamesFromIndex;
168
+ /**
169
+ * Process a single index key for a non-root directory and add immediate child when applicable.
170
+ * @param key index key
171
+ * @param normalizedDirectory normalized directory string
172
+ * @param outNames set to mutate
173
+ * @returns {void}
174
+ */
175
+ private _processIndexKeyForDirectory;
176
+ /**
177
+ * Safe wrapper for backend.listFiles returning [] on failure.
178
+ * @param normalizedDirectory directory path
179
+ * @returns {Promise<any[]>}
180
+ */
181
+ private _getBackendList;
182
+ /**
183
+ * Helper for collecting names when scanning root directory entries.
184
+ * @param key index key
185
+ * @param outNames set to mutate
186
+ * @returns {void}
187
+ */
188
+ private _collectNamesFromIndexRoot;
189
+ /**
190
+ * Check whether normalizedDirectory corresponds to an exact file entry.
191
+ * @param normalizedDirectory normalized directory string
192
+ * @param entries index entries object
193
+ * @returns {boolean}
194
+ */
195
+ private _hasExactEntry;
196
+ /**
197
+ * Consult backend.listFiles to collect immediate child names for given directory.
198
+ * Best-effort: logs and returns empty set on failure.
199
+ * @param normalizedDirectory normalized directory string
200
+ * @returns {Promise<Set<string>>}
201
+ */
202
+ private _collectNamesFromBackend;
203
+ /**
204
+ * Return true when backend supports listFiles
205
+ * @returns {boolean}
206
+ */
207
+ private _backendSupportsListFiles;
208
+ /**
209
+ * Process a single backend listFiles entry and add immediate child name to outNames when applicable.
210
+ * @param it backend entry
211
+ * @param normalizedDirectory normalized directory string
212
+ * @param outNames set to mutate
213
+ * @returns {void}
214
+ */
215
+ private _processBackendEntry;
216
+ /**
217
+ * Build Dirent-like lightweight objects for given names.
218
+ * @param names array of names
219
+ * @param keys array of index keys
220
+ * @param entries index entries object
221
+ * @param normalizedDirectory normalized directory string
222
+ * @returns {Array<any>} array of Dirent-like objects
223
+ */
224
+ private _buildDirentTypes;
225
+ /**
226
+ * Determine whether a childPath corresponds to a file, directory, or both.
227
+ * @param childPath path of child
228
+ * @param keys index keys
229
+ * @param entries index entries
230
+ * @returns {{isFile:boolean,isDirectory:boolean}}
231
+ */
232
+ private _determineChildType;
233
+ /**
234
+ * Return persisted adapter metadata (if any).
235
+ * @returns {any|null}
236
+ */
237
+ getAdapterMeta(): any | null;
238
+ /**
239
+ * ファイルを書き込みます(ローカル編集)。
53
240
  * @param {string} filepath ファイルパス
241
+ * @param {string} content コンテンツ
54
242
  * @returns {Promise<void>}
55
243
  */
56
- deleteWorkspace(filepath: string): Promise<void>;
244
+ writeFile(filepath: string, content: string): Promise<void>;
57
245
  /**
58
246
  * rename を delete + create の合成で行うヘルパ
59
247
  * @param from 元パス
60
248
  * @param to 新パス
61
249
  */
62
- renameWorkspace(from: string, to: string): Promise<void>;
250
+ renameFile(from: string, to: string): Promise<void>;
63
251
  /**
64
252
  * ワークスペース/ベースからファイル内容を読み出します。
65
253
  * @param {string} filepath ファイルパス
66
254
  * @returns {Promise<string|null>} ファイル内容または null
67
255
  */
68
- readWorkspace(filepath: string): Promise<string | null>;
256
+ readFile(filepath: string): Promise<string | null>;
69
257
  /**
70
- * リモートのベーススナップショットを適用します。
71
- * @param {{[path:string]:string}} snapshot path->content のマップ
72
- * @param {string} headSha リモート HEAD
73
- * @returns {Promise<void>}
258
+ * 衝突ファイル(.git-conflict/配下)を取得します。
259
+ * @param {string} filepath ファイルパス
260
+ * @returns {Promise<string|null>} ファイル内容または null
74
261
  */
75
- applyBaseSnapshot(snapshot: Record<string, string>, headSha: string): Promise<void>;
262
+ readConflict(filepath: string): Promise<string | null>;
76
263
  /**
77
- * インデックス情報を返します。
78
- * @returns {IndexFile}
264
+ * fs.stat 互換: 指定ファイルのメタ情報を返す
265
+ * ワークスペース上の情報を優先し、未取得時は Git のメタ情報で補完する。
266
+ * @returns {Promise<any>} stats オブジェクト
79
267
  */
80
- getIndex(): IndexFile;
268
+ stat(filepath: string): Promise<any>;
81
269
  /**
82
- * 登録されているパス一覧を返します。
83
- * @returns {string[]}
270
+ * fs.unlink 互換: ファイルを削除する
84
271
  */
85
- listPaths(): string[];
272
+ unlink(filepath: string): Promise<void>;
86
273
  /**
87
- * tombstone を返します。
88
- * @returns {TombstoneEntry[]}
274
+ * fs.mkdir 互換 (簡易実装): workspace 側にディレクトリ情報を書き込む
89
275
  */
90
- getTombstones(): TombstoneEntry[];
276
+ mkdir(dirpath: string, _options?: {
277
+ recursive?: boolean;
278
+ mode?: number;
279
+ }): Promise<void>;
91
280
  /**
92
- * tombstone を返します。
93
- * @returns {TombstoneEntry[]}
281
+ * fs.rmdir 互換 (簡易実装)
94
282
  */
283
+ rmdir(dirpath: string, options?: {
284
+ recursive?: boolean;
285
+ }): Promise<void>;
95
286
  /**
96
- * ワークスペースとインデックスから変更セットを生成します。
97
- * @returns {Promise<Array<{type:string,path:string,content?:string,baseSha?:string}>>} 変更リスト
98
- */
99
- getChangeSet(): Promise<({
100
- type: 'create';
101
- path: string;
102
- content: string;
103
- } | {
104
- type: 'update';
105
- path: string;
106
- content: string;
107
- baseSha?: string | undefined;
108
- } | {
109
- type: 'delete';
110
- path: string;
111
- baseSha: string;
112
- })[]>;
287
+ * Return list of child paths for given dirpath based on index entries.
288
+ * @param dirpath directory path
289
+ * @returns {Promise<string[]>}
290
+ */
291
+ private _listChildrenOfDir;
113
292
  /**
114
- * tombstone からの削除変更リストを生成します。
115
- * @returns {Array<{type:'delete',path:string,baseSha:string}>}
293
+ * Delete array of children using localFileManager, logging failures per-child.
294
+ * @param children array of paths
295
+ * @returns {Promise<void>}
116
296
  */
117
- private _changesFromTombstones;
297
+ private _deleteChildrenRecursive;
118
298
  /**
119
- * index entries から create/update の変更リストを生成します。
120
- * @returns {Array<{type:'create'|'update',path:string,content:string,baseSha?:string}>}
299
+ * fs.readdir 互換 (簡易実装)
300
+ * @returns {Promise<string[]|Array<any>>}
121
301
  */
122
- private _changesFromIndexEntries;
302
+ readdir(dirpath: string, options?: {
303
+ withFileTypes?: boolean;
304
+ }): Promise<any[]>;
123
305
  /**
124
- * 追加状態のエントリから create 変更を生成します。
125
- * @returns {Array<{type:'create',path:string,content:string}>}
306
+ * Return an empty array when names is empty according to options, else null to continue.
307
+ * @param names array of names
308
+ * @param options readdir options
309
+ * @returns {Array<any>|null}
126
310
  */
127
- private _changesFromAddedEntries;
311
+ private _returnIfNoNames;
128
312
  /**
129
- * 変更状態のエントリから update 変更を生成します。
130
- * @returns {Array<{type:'update',path:string,content:string,baseSha:string}>}
313
+ * Gather immediate child names for a directory using index and backend as fallback.
314
+ * Throws ENOTDIR when the path represents a file.
315
+ * @param dirpath original directory path
316
+ * @param entries index entries object
317
+ * @param keys array of index keys
318
+ * @returns {Promise<string[]>} immediate child names
131
319
  */
132
- private _changesFromModifiedEntries;
320
+ private _gatherDirectoryNames;
133
321
  /**
134
- * リモートスナップショットからの差分取り込み時に、単一パスを評価して
135
- * 必要なら conflicts に追加、もしくは base を更新します。
136
- * @returns {Promise<void>}
322
+ * 指定パスのリモート衝突ファイル (.git-conflict/) を削除して
323
+ * 競合を解消済とマークします。
324
+ * @param {string} filepath ファイルパス
325
+ * @returns {Promise<boolean>} 成功したら true
137
326
  */
138
- private _handleRemotePath;
327
+ resolveConflict(filepath: string): Promise<boolean>;
139
328
  /**
140
- * リモートに存在するがローカルにないパスを処理します。
329
+ * リモートのベーススナップショットを適用します。
330
+ * @param {{[path:string]:string}} snapshot path->content のマップ
331
+ * @param {string} headSha リモート HEAD
141
332
  * @returns {Promise<void>}
142
333
  */
143
- private _handleRemoteNew;
334
+ private applyBaseSnapshot;
144
335
  /**
145
- * リモートに存在し、かつローカルにエントリがあるパスを処理します。
146
- * @returns {Promise<void>}
336
+ * 指定エラーが non-fast-forward を示すか判定します。
337
+ * @param {any} err 例外オブジェクト
338
+ * @returns {boolean}
339
+ */
340
+ private _isNonFastForwardError;
341
+ /**
342
+ * インデックス情報を返します。
343
+ * @returns {Promise<IndexFile>}
344
+ */
345
+ getIndex(): Promise<IndexFile>;
346
+ /**
347
+ * 登録されているパス一覧を返します。
348
+ * @returns {string[]}
147
349
  */
148
- private _handleRemoteExisting;
350
+ private listPaths;
351
+ /**
352
+ * ワークスペースとインデックスから変更セットを生成します。
353
+ * @returns {Promise<Array<{type:string,path:string,content?:string,baseSha?:string}>>} 変更リスト
354
+ */
355
+ getChangeSet(): Promise<any[]>;
149
356
  /**
150
357
  * ローカルに対する変更(create/update/delete)を適用するヘルパー
151
358
  * @param {any} ch 変更オブジェクト
152
359
  * @returns {Promise<void>}
153
360
  */
154
361
  private _applyChangeLocally;
155
- /**
156
- * リモート側で削除されたエントリをローカルに反映します。
157
- * @returns {Promise<void>}
158
- */
159
- private _handleRemoteDeletion;
160
362
  /**
161
363
  * GitLab 風の actions ベースコミットフローで push を実行します。
162
364
  * @returns {Promise<{commitSha:string}>}
@@ -167,24 +369,189 @@ export declare class VirtualFS {
167
369
  * @returns {Promise<{commitSha:string}>}
168
370
  */
169
371
  private _pushWithGitHubFlow;
372
+ /**
373
+ * Try to update remote ref and handle common non-fast-forward errors.
374
+ * Throws when the remote reports a non-fast-forward conflict.
375
+ */
376
+ private _tryUpdateRef;
377
+ /**
378
+ * Apply changes locally, update index head and persist index.
379
+ * Returns the commit result object for callers.
380
+ * @returns {Promise<{commitSha:string}>}
381
+ */
382
+ private _applyChangesAndFinalize;
383
+ /**
384
+ * Handle push when an adapter is provided (delegates to _pushWithActions/_pushWithGitHubFlow).
385
+ * Records commitKey in index metadata and returns the push result.
386
+ * @returns {Promise<{commitSha:string}>}
387
+ */
388
+ private _handlePushWithAdapter;
170
389
  /**
171
390
  * リモートのスナップショットを取り込み、コンフリクト情報を返します。
172
391
  * @param {string} remoteHead リモート HEAD
173
392
  * @param {{[path:string]:string}} baseSnapshot path->content マップ
174
393
  * @returns {Promise<{conflicts:Array<import('./types').ConflictEntry>}>}
175
394
  */
176
- pull(remoteHead: string, baseSnapshot: Record<string, string>): Promise<{
177
- conflicts: import("./types").ConflictEntry[];
395
+ pull(remote: RemoteSnapshotDescriptor | string | {
396
+ fetchSnapshot: () => Promise<RemoteSnapshotDescriptor>;
397
+ }, baseSnapshot?: Record<string, string>): Promise<any>;
398
+ /**
399
+ * Pull by a specified commit-ish reference. Resolves the ref, fetches snapshot and
400
+ * delegates to remote synchronizer. Persists adapter branch meta on success.
401
+ * @param {string} reference commit-ish to resolve
402
+ * @param {Record<string,string>=} baseSnapshot optional base snapshot
403
+ * @returns {Promise<any>} pull result
404
+ */
405
+ private _pullByRef;
406
+ /**
407
+ * Pull using the persisted adapterMeta.opts.branch (or 'main').
408
+ * @param {Record<string,string>=} baseSnapshot optional base snapshot
409
+ * @returns {Promise<any>} pull result
410
+ */
411
+ private _pullUsingPersistedBranch;
412
+ /**
413
+ * Handle the case when pull() is called with no args: try persisted adapter branch if possible.
414
+ * Returns the pull result when handled, or null to indicate caller should continue.
415
+ * @param {Record<string,string>=} baseSnapshot optional base snapshot
416
+ * @returns {Promise<any|null>}
417
+ */
418
+ private _handlePullNoArgs;
419
+ /**
420
+ * Persist the requested branch into adapter metadata (best-effort).
421
+ * @param {string} branch branch name to persist
422
+ * @returns {Promise<void>}
423
+ */
424
+ private _persistAdapterBranchMeta;
425
+ /**
426
+ * Best-effort: set backend branch scope when backend supports it.
427
+ * @param branch branch name to set
428
+ * @returns {Promise<void>}
429
+ */
430
+ private _trySetBackendBranch;
431
+ /**
432
+ * Ensure adapterMeta is loaded from index when missing.
433
+ * @returns {Promise<boolean>} true when adapterMeta is available
434
+ */
435
+ private _loadAdapterMetaIfNeeded;
436
+ /**
437
+ * Persist current adapterMeta into the index file (best-effort).
438
+ * @returns {Promise<void>}
439
+ */
440
+ private _writeAdapterMetaToIndex;
441
+ /**
442
+ * Normalize remote input which may be a headSha or a full descriptor.
443
+ * @param {RemoteSnapshotDescriptor | string} remote remote descriptor or headSha
444
+ * @param {Record<string,string>=} baseSnapshot optional snapshot when remote is a headSha
445
+ * @returns {Promise<RemoteSnapshotDescriptor>} normalized descriptor
446
+ */
447
+ private _normalizeRemoteInput;
448
+ /**
449
+ * Obtain remote snapshot (via persisted adapter if available) and
450
+ * compute simple diffs against the current index.
451
+ * Returns an object containing the resolved `remote` descriptor (or null),
452
+ * `remoteShas` map and `diffs` array (strings like `added: path` / `updated: path`).
453
+ * @returns {Promise<{remote: RemoteSnapshotDescriptor|null, remoteShas: Record<string,string>, diffs: string[]}>}
454
+ */
455
+ getRemoteDiffs(remote?: RemoteSnapshotDescriptor | string | {
456
+ fetchSnapshot: () => Promise<RemoteSnapshotDescriptor>;
457
+ }): Promise<{
458
+ remote: RemoteSnapshotDescriptor | null;
459
+ remoteShas: Record<string, string>;
460
+ diffs: string[];
178
461
  }>;
462
+ /**
463
+ * Delegate commit history listing to the underlying adapter when available.
464
+ * Thin passthrough used by UI/CLI to retrieve commit summaries and paging info.
465
+ * @param {CommitHistoryQuery} query
466
+ * @returns {Promise<CommitHistoryPage>}
467
+ */
468
+ listCommits(query: CommitHistoryQuery): Promise<CommitHistoryPage>;
469
+ /**
470
+ * Delegate branch listing to the underlying adapter when available.
471
+ * @param {BranchListQuery} query
472
+ * @returns {Promise<BranchListPage>}
473
+ */
474
+ listBranches(query?: BranchListQuery): Promise<BranchListPage>;
475
+ /**
476
+ * Create a remote-only branch via the configured adapter.
477
+ * @param {{name:string, fromRef?:string}} input
478
+ * @returns {Promise<import('./types.ts').CreateBranchResult>}
479
+ */
480
+ createBranch(input: import('./types.ts').CreateBranchInput): Promise<import('./types.ts').CreateBranchResult>;
481
+ /**
482
+ * Resolve a source reference for createBranch.
483
+ * Preference order: explicit input.fromRef, index.head, adapter default branch.
484
+ * Returns empty string when no resolution found.
485
+ * @param {import('./types.ts').CreateBranchInput} input createBranch input
486
+ * @param {any} instAdapter adapter instance
487
+ * @returns {Promise<string>} resolved ref or empty string
488
+ */
489
+ private _resolveCreateBranchFrom;
490
+ /**
491
+ * Attempt to resolve the default branch via adapter metadata.
492
+ * @param {any} instAdapter adapter instance
493
+ * @returns {Promise<string|null>} resolved SHA or null when not found
494
+ */
495
+ private _resolveAdapterDefaultBranch;
496
+ /**
497
+ * Convenience to get default branch name from adapter repository metadata.
498
+ * Returns null when adapter not available.
499
+ * @returns {Promise<string|null>}
500
+ */
501
+ getDefaultBranch(): Promise<string | null>;
502
+ /**
503
+ * Persist repository metadata into IndexFile.adapter.opts for session persistence.
504
+ * Best-effort: failures are ignored.
505
+ * @returns {Promise<void>}
506
+ */
507
+ private _persistRepositoryMetadata;
508
+ /**
509
+ * Try persisting repository metadata when available. Best-effort.
510
+ * @param instAdapter adapter instance or null
511
+ * @param result branch list result used for fallback default branch detection
512
+ * @returns {Promise<void>}
513
+ */
514
+ private _maybePersistRepositoryMetadata;
515
+ /**
516
+ * Extracted helper to persist default branch candidate derived from branch list.
517
+ * @param result branch list result
518
+ * @returns {Promise<void>}
519
+ */
520
+ private _persistDefaultBranchCandidate;
521
+ /**
522
+ * Normalize a resolved descriptor (string headSha or object) into a
523
+ * RemoteSnapshotDescriptor or null.
524
+ * @param {RemoteSnapshotDescriptor|string|null} resolved descriptor or headSha
525
+ * @returns {Promise<RemoteSnapshotDescriptor|null>} 正規化された descriptor または null
526
+ */
527
+ private _toNormalizedDescriptor;
528
+ /**
529
+ * Resolve the provided `remote` parameter into either a headSha string or a full
530
+ * `RemoteSnapshotDescriptor`. Centralizes adapter fetching and fallback behavior
531
+ * to keep `pull()` small and easier to lint.
532
+ * @param remote remote descriptor or adapter-like object or headSha
533
+ * @param baseSnapshot optional snapshot used when normalizing a headSha
534
+ * @returns {Promise<RemoteSnapshotDescriptor|string>} resolved descriptor or headSha
535
+ */
536
+ private _resolveDescriptor;
537
+ /**
538
+ * Try to obtain a snapshot descriptor from the persisted adapter instance.
539
+ * @returns {Promise<RemoteSnapshotDescriptor|null>} snapshot descriptor or null when unavailable
540
+ */
541
+ private _fetchSnapshotFromAdapterInstance;
179
542
  /**
180
543
  * 変更をコミットしてリモートへ反映します。adapter が無ければローカルシミュレーションします。
181
544
  * @param {import('./types').CommitInput} input コミット入力
182
- * @param {import('../git/adapter').GitAdapter} [adapter] 任意のアダプタ
183
545
  * @returns {Promise<{commitSha:string}>}
184
546
  */
185
- push(input: import('./types').CommitInput, adapter?: import('../git/adapter').GitAdapter): Promise<{
186
- commitSha: any;
547
+ push(input: import('./types.ts').CommitInput): Promise<{
548
+ commitSha: string;
187
549
  }>;
550
+ /**
551
+ * Ensure `input.parentSha` is a string; prefer current index head when available.
552
+ * @param input CommitInput
553
+ */
554
+ private _ensureParentSha;
188
555
  }
189
556
  export default VirtualFS;
190
557
  //# sourceMappingURL=virtualfs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtualfs.d.ts","sourceRoot":"","sources":["../../src/virtualfs/virtualfs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD,sDAAsD;AACtD,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,IAAI,CAAsD;IAClE,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,OAAO,CAAgB;IAE/B;;;;OAIG;gBACS,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,cAAc,CAAA;KAAE;IAOvE;;;;OAIG;YACW,KAAK;IAQnB;;;OAGG;IACG,IAAI;IAKV;;;OAGG;YACW,SAAS;IAmBvB;;;OAGG;YACW,SAAS;IAIvB;;OAEG;IACH;;;;;OAKG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAkBtD;;;;OAIG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM;IAqBtC;;;;OAIG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAa9C;;;;OAIG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM;IAWpC;;;;;OAKG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;IA2BzE;;;OAGG;IACH,QAAQ,IAAI,SAAS;IAIrB;;;OAGG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;;OAGG;IACH,aAAa,IAAI,cAAc,EAAE;IAIjC;;;OAGG;IAEH;;;QAGI;IACI,YAAY;cAGN,QAAQ;cAAQ,MAAM;iBAAW,MAAM;;cACvC,QAAQ;cAAQ,MAAM;iBAAW,MAAM;;;cACvC,QAAQ;cAAQ,MAAM;iBAAW,MAAM;;IAQrD;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAOhC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAWhC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAWnC;;;;OAIG;YACW,iBAAiB;IAS/B;;;OAGG;YACW,gBAAgB;IAa9B;;;OAGG;YACW,qBAAqB;IAkBnC;;;;OAIG;YACW,mBAAmB;IAqBjC;;;OAGG;YACW,qBAAqB;IAYnC;;;OAGG;YACW,gBAAgB;IAe9B;;;OAGG;YACW,mBAAmB;IAkBjC;;;;;OAKG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;IA6BnE;;;;;OAKG;IACG,IAAI,CAAC,KAAK,EAAE,OAAO,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,gBAAgB,EAAE,UAAU;;;CAkD/F;AAED,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"virtualfs.d.ts","sourceRoot":"","sources":["../../src/virtualfs/virtualfs.ts"],"names":[],"mappings":"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"}