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.
- package/README.md +291 -92
- package/dist/git/abstractAdapter.d.ts +167 -0
- package/dist/git/abstractAdapter.d.ts.map +1 -0
- package/dist/git/adapter.d.ts +23 -1
- package/dist/git/adapter.d.ts.map +1 -1
- package/dist/git/githubAdapter.d.ts +282 -35
- package/dist/git/githubAdapter.d.ts.map +1 -1
- package/dist/git/gitlabAdapter.d.ts +220 -34
- package/dist/git/gitlabAdapter.d.ts.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6199 -792
- package/dist/index.js.map +4 -4
- package/dist/index.mjs +6199 -792
- package/dist/index.mjs.map +4 -4
- package/dist/virtualfs/changeTracker.d.ts +66 -0
- package/dist/virtualfs/changeTracker.d.ts.map +1 -0
- package/dist/virtualfs/conflictManager.d.ts +69 -0
- package/dist/virtualfs/conflictManager.d.ts.map +1 -0
- package/dist/virtualfs/hashUtils.d.ts +13 -0
- package/dist/virtualfs/hashUtils.d.ts.map +1 -0
- package/dist/virtualfs/indexManager.d.ts +57 -0
- package/dist/virtualfs/indexManager.d.ts.map +1 -0
- package/dist/virtualfs/indexedDatabaseStorage.d.ts +7 -0
- package/dist/virtualfs/indexedDatabaseStorage.d.ts.map +1 -0
- package/dist/virtualfs/inmemoryStorage.d.ts +8 -0
- package/dist/virtualfs/inmemoryStorage.d.ts.map +1 -0
- package/dist/virtualfs/localChangeApplier.d.ts +21 -0
- package/dist/virtualfs/localChangeApplier.d.ts.map +1 -0
- package/dist/virtualfs/localFileManager.d.ts +58 -0
- package/dist/virtualfs/localFileManager.d.ts.map +1 -0
- package/dist/virtualfs/metadataManager.d.ts +14 -0
- package/dist/virtualfs/metadataManager.d.ts.map +1 -0
- package/dist/virtualfs/opfsStorage.d.ts +2 -63
- package/dist/virtualfs/opfsStorage.d.ts.map +1 -1
- package/dist/virtualfs/remoteSynchronizer.d.ts +192 -0
- package/dist/virtualfs/remoteSynchronizer.d.ts.map +1 -0
- package/dist/virtualfs/storageBackend.d.ts +57 -4
- package/dist/virtualfs/storageBackend.d.ts.map +1 -1
- package/dist/virtualfs/types.d.ts +37 -0
- package/dist/virtualfs/types.d.ts.map +1 -1
- package/dist/virtualfs/virtualfs.d.ts +454 -87
- package/dist/virtualfs/virtualfs.d.ts.map +1 -1
- package/package.json +30 -13
- package/dist/virtualfs/indexedDbStorage.d.ts +0 -62
- package/dist/virtualfs/indexedDbStorage.d.ts.map +0 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { StorageBackend } from './storageBackend.ts';
|
|
2
|
+
import { IndexManager } from './indexManager.ts';
|
|
3
|
+
/**
|
|
4
|
+
* 変更追跡を行うユーティリティクラス
|
|
5
|
+
*/
|
|
6
|
+
export declare class ChangeTracker {
|
|
7
|
+
private backend;
|
|
8
|
+
private indexManager;
|
|
9
|
+
/**
|
|
10
|
+
* コンストラクタ
|
|
11
|
+
* @param {StorageBackend} backend - ストレージバックエンド
|
|
12
|
+
* @param {IndexManager} indexManager - インデックス管理オブジェクト
|
|
13
|
+
*/
|
|
14
|
+
constructor(backend: StorageBackend, indexManager: IndexManager);
|
|
15
|
+
/**
|
|
16
|
+
* ワークスペースの変更セットを取得する
|
|
17
|
+
* @returns {Promise<Array>} 変更オブジェクトの配列
|
|
18
|
+
*/
|
|
19
|
+
getChangeSet(): Promise<Array<any>>;
|
|
20
|
+
/**
|
|
21
|
+
* インデックス差分から削除変更を取得する
|
|
22
|
+
* @returns {Promise<Array<{type:'delete';path:string;baseSha:string}>>} 削除変更の配列
|
|
23
|
+
*/
|
|
24
|
+
private _changesFromIndexDeletes;
|
|
25
|
+
/**
|
|
26
|
+
* Determine whether an index entry should be considered a local delete.
|
|
27
|
+
* - explicit deleted state -> true
|
|
28
|
+
* - only if workspaceSha existed previously and workspace blob now missing
|
|
29
|
+
* @param ie index entry
|
|
30
|
+
* @param p file path
|
|
31
|
+
* @returns true when entry represents a local deletion
|
|
32
|
+
*/
|
|
33
|
+
private _isIndexEntryDeleted;
|
|
34
|
+
/**
|
|
35
|
+
* トゥームストーンから削除変更を取得する(未実装:空配列を返す)
|
|
36
|
+
* @returns {Promise<Array<{type:'delete';path:string;baseSha:string}>>}
|
|
37
|
+
*/
|
|
38
|
+
private _changesFromTombstones;
|
|
39
|
+
/**
|
|
40
|
+
* インデックスエントリから作成・更新の変更を取得する
|
|
41
|
+
* @returns {Promise<Array>} 作成/更新変更の配列
|
|
42
|
+
*/
|
|
43
|
+
private _changesFromIndexEntries;
|
|
44
|
+
/**
|
|
45
|
+
* 単一のインデックスファイルから変更を抽出する
|
|
46
|
+
* @param {string} p - ファイルパス
|
|
47
|
+
* @param {string|null} infoTxt - インデックスの情報テキスト
|
|
48
|
+
* @returns {Promise<Array>} 変更配列
|
|
49
|
+
*/
|
|
50
|
+
private _changesForIndexFile;
|
|
51
|
+
/**
|
|
52
|
+
* インデックスエントリから具体的な変更リストを作る
|
|
53
|
+
* @param {any} entry - インデックスエントリ
|
|
54
|
+
* @param {string} p - パス
|
|
55
|
+
* @param {string|null} blob - blob コンテンツ
|
|
56
|
+
* @returns {Array} 変更オブジェクト配列
|
|
57
|
+
*/
|
|
58
|
+
private _changesFromIndexEntry;
|
|
59
|
+
/**
|
|
60
|
+
* エントリが変更対象として考慮されるか判定する
|
|
61
|
+
* @param {any} entry - インデックスエントリ
|
|
62
|
+
* @returns {boolean} 考慮対象ならtrue
|
|
63
|
+
*/
|
|
64
|
+
private _isEntryConsidered;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=changeTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changeTracker.d.ts","sourceRoot":"","sources":["../../src/virtualfs/changeTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAc;IAElC;;;;OAIG;gBACS,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY;IAK/D;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAgBzC;;;OAGG;YACW,wBAAwB;IAgBtC;;;;;;;OAOG;YACW,oBAAoB;IAQlC;;;OAGG;YACW,sBAAsB;IAIpC;;;OAGG;YACW,wBAAwB;IAatC;;;;;OAKG;YACW,oBAAoB;IAiBlC;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAG3B"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { StorageBackend } from './storageBackend.ts';
|
|
2
|
+
import { IndexManager } from './indexManager.ts';
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
export declare class ConflictManager {
|
|
7
|
+
private backend;
|
|
8
|
+
private indexManager;
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
constructor(backend: StorageBackend, indexManager: IndexManager);
|
|
13
|
+
/**
|
|
14
|
+
* 指定パスのコンフリクト内容を読み取る
|
|
15
|
+
* @param {string} filepath - ファイルパス
|
|
16
|
+
* @returns {Promise<string|null>} コンフリクトの内容、なければnull
|
|
17
|
+
*/
|
|
18
|
+
readConflict(filepath: string): Promise<string | null>;
|
|
19
|
+
/**
|
|
20
|
+
* コンフリクトを解消してインデックスを更新する
|
|
21
|
+
* @param {string} filepath - ファイルパス
|
|
22
|
+
* @returns {Promise<boolean>} 成功すればtrue、失敗すればfalse
|
|
23
|
+
*/
|
|
24
|
+
resolveConflict(filepath: string): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Load index entry from info blob or index entries.
|
|
27
|
+
* @param {string} filepath
|
|
28
|
+
* @returns {Promise<any>} index entry or undefined
|
|
29
|
+
*/
|
|
30
|
+
private _loadIndexEntry;
|
|
31
|
+
/**
|
|
32
|
+
* リモートの内容をコンフリクトとして永続化する
|
|
33
|
+
* @param {string} p - ファイルパス
|
|
34
|
+
* @param {string|undefined} content - 永続化する内容
|
|
35
|
+
* @returns {Promise<void>}
|
|
36
|
+
*/
|
|
37
|
+
persistRemoteContentAsConflict(p: string, content: string | undefined): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* 指定のインデックスエントリをコンフリクト状態にする
|
|
40
|
+
* @param {string} p - ファイルパス
|
|
41
|
+
* @param {any} ie - インデックスエントリオブジェクト
|
|
42
|
+
* @param {string} remoteHeadSha - リモートのHEAD SHA
|
|
43
|
+
* @returns {Promise<void>}
|
|
44
|
+
*/
|
|
45
|
+
setIndexEntryToConflict(p: string, ie: any, remoteHeadSha: string): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* 解決済みのコンフリクトエントリを昇格してベース状態に戻す
|
|
48
|
+
* @param {any} c - コンフリクト情報(.path を含む)
|
|
49
|
+
* @param {Record<string,string>} baseSnapshot - ベーススナップショットマップ
|
|
50
|
+
* @returns {Promise<void>}
|
|
51
|
+
*/
|
|
52
|
+
promoteResolvedConflictEntry(c: any, baseSnapshot: Record<string, string>): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* 全てのコンフリクトが解決済みか判定する
|
|
55
|
+
* @param {Array<any>} conflicts - コンフリクト一覧
|
|
56
|
+
* @returns {Promise<boolean>} 全て解決済みならtrue
|
|
57
|
+
*/
|
|
58
|
+
areAllResolved(conflicts: Array<any>): Promise<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* 解決済みのコンフリクト群を昇格してインデックスを更新する
|
|
61
|
+
* @param {Array<any>} conflicts - コンフリクト一覧
|
|
62
|
+
* @param {Record<string,string>} baseSnapshot - ベーススナップショット
|
|
63
|
+
* @param {string} remoteHead - リモートのHEAD
|
|
64
|
+
* @returns {Promise<void>}
|
|
65
|
+
*/
|
|
66
|
+
promoteResolvedConflicts(conflicts: Array<any>, baseSnapshot: Record<string, string>, remoteHead: string): Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
export default ConflictManager;
|
|
69
|
+
//# sourceMappingURL=conflictManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflictManager.d.ts","sourceRoot":"","sources":["../../src/virtualfs/conflictManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAc;IAElC;;OAEG;gBACS,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY;IAK/D;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM5D;;;;OAIG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCzD;;;;OAIG;YACW,eAAe;IAW7B;;;;;OAKG;IACG,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3F;;;;;;OAMG;IACG,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvF;;;;;OAKG;IACG,4BAA4B,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB/F;;;;OAIG;IACG,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAe7D;;;;;;OAMG;IACG,wBAAwB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ/H;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SHA-1ハッシュ値を計算して16進文字列で返す
|
|
3
|
+
* @param {string} content - ハッシュ対象の文字列
|
|
4
|
+
* @returns {Promise<string>} SHA-1ハッシュの16進表現
|
|
5
|
+
*/
|
|
6
|
+
export declare function shaOf(content: string): Promise<string>;
|
|
7
|
+
/**
|
|
8
|
+
* Git の blob としての SHA-1 ハッシュを計算して16進文字列で返す
|
|
9
|
+
* @param {string} content - blob の中身となる文字列
|
|
10
|
+
* @returns {Promise<string>} SHA-1ハッシュの16進表現(git blob 用)
|
|
11
|
+
*/
|
|
12
|
+
export declare function shaOfGitBlob(content: string): Promise<string>;
|
|
13
|
+
//# sourceMappingURL=hashUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashUtils.d.ts","sourceRoot":"","sources":["../../src/virtualfs/hashUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5D;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUnE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { StorageBackend } from './storageBackend.ts';
|
|
2
|
+
import { IndexFile } from './types.ts';
|
|
3
|
+
/**
|
|
4
|
+
* インデックス管理クラス
|
|
5
|
+
*/
|
|
6
|
+
export declare class IndexManager {
|
|
7
|
+
private backend;
|
|
8
|
+
private head;
|
|
9
|
+
private lastCommitKey;
|
|
10
|
+
/**
|
|
11
|
+
* コンストラクタ
|
|
12
|
+
* @param {StorageBackend} backend - ストレージバックエンド
|
|
13
|
+
*/
|
|
14
|
+
constructor(backend: StorageBackend);
|
|
15
|
+
/**
|
|
16
|
+
* インデックスをストレージから読み込む
|
|
17
|
+
* @returns {Promise<void>}
|
|
18
|
+
*/
|
|
19
|
+
loadIndex(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* インデックスをストレージへ書き込む
|
|
22
|
+
* @returns {Promise<void>}
|
|
23
|
+
*/
|
|
24
|
+
saveIndex(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* 現在のheadを返す
|
|
27
|
+
* @returns {string}
|
|
28
|
+
*/
|
|
29
|
+
getHead(): string;
|
|
30
|
+
/**
|
|
31
|
+
* headを設定する
|
|
32
|
+
* @param {string} h - head文字列
|
|
33
|
+
*/
|
|
34
|
+
setHead(h: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* 最後のコミットキーを返す
|
|
37
|
+
* @returns {string|undefined}
|
|
38
|
+
*/
|
|
39
|
+
getLastCommitKey(): string | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* 最後のコミットキーを設定する
|
|
42
|
+
* @param {string|undefined} k - コミットキー
|
|
43
|
+
*/
|
|
44
|
+
setLastCommitKey(k: string | undefined): void;
|
|
45
|
+
/**
|
|
46
|
+
* 現在のインデックスを取得する(Proxyでheadを委譲)
|
|
47
|
+
* @returns {Promise<IndexFile>} インデックスオブジェクト
|
|
48
|
+
*/
|
|
49
|
+
getIndex(): Promise<IndexFile>;
|
|
50
|
+
/**
|
|
51
|
+
* info に存在する全パスを列挙する
|
|
52
|
+
* @returns {Promise<string[]>} パスの配列
|
|
53
|
+
*/
|
|
54
|
+
listPaths(): Promise<string[]>;
|
|
55
|
+
}
|
|
56
|
+
export default IndexManager;
|
|
57
|
+
//# sourceMappingURL=indexManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexManager.d.ts","sourceRoot":"","sources":["../../src/virtualfs/indexManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,aAAa,CAAoB;IAEzC;;;OAGG;gBACS,OAAO,EAAE,cAAc;IAInC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAchC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAUhC;;;OAGG;IACH,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIxB;;;OAGG;IACH,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAItC;;;OAGG;IACH,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI7C;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;IAgCpC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAiBrC;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StorageBackendConstructor } from './storageBackend.ts';
|
|
2
|
+
/**
|
|
3
|
+
* IndexedDB を用いた永続化実装
|
|
4
|
+
*/
|
|
5
|
+
export declare const IndexedDatabaseStorage: StorageBackendConstructor;
|
|
6
|
+
export default IndexedDatabaseStorage;
|
|
7
|
+
//# sourceMappingURL=indexedDatabaseStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexedDatabaseStorage.d.ts","sourceRoot":"","sources":["../../src/virtualfs/indexedDatabaseStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,yBAAyB,EAAW,MAAM,qBAAqB,CAAA;AAExF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,yBAy8BpC,CAAA;AAED,eAAe,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { StorageBackendConstructor } from './storageBackend.ts';
|
|
2
|
+
/**
|
|
3
|
+
* テストや軽量動作検証用のインメモリ実装。
|
|
4
|
+
* `StorageBackend` を実装し、アプリケーション側で差し替えて利用できます。
|
|
5
|
+
*/
|
|
6
|
+
export declare const InMemoryStorage: StorageBackendConstructor;
|
|
7
|
+
export default InMemoryStorage;
|
|
8
|
+
//# sourceMappingURL=inmemoryStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inmemoryStorage.d.ts","sourceRoot":"","sources":["../../src/virtualfs/inmemoryStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAQ/E;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,yBAynB7B,CAAA;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { StorageBackend } from './storageBackend.ts';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
*/
|
|
5
|
+
export declare class LocalChangeApplier {
|
|
6
|
+
private backend;
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
constructor(backend: StorageBackend);
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
applyCreateOrUpdate(ch: any): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
applyDelete(ch: any): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export default LocalChangeApplier;
|
|
21
|
+
//# sourceMappingURL=localChangeApplier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localChangeApplier.d.ts","sourceRoot":"","sources":["../../src/virtualfs/localChangeApplier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAgB;IAE/B;;OAEG;gBACS,OAAO,EAAE,cAAc;IAInC;;OAEG;IACG,mBAAmB,CAAC,EAAE,EAAE,GAAG;IAOjC;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,GAAG;CAM1B;AAED,eAAe,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { StorageBackend } from './storageBackend.ts';
|
|
2
|
+
/**
|
|
3
|
+
* ローカルファイル操作のラッパー
|
|
4
|
+
*/
|
|
5
|
+
export declare class LocalFileManager {
|
|
6
|
+
private backend;
|
|
7
|
+
/**
|
|
8
|
+
* コンストラクタ
|
|
9
|
+
* @param {StorageBackend} backend - ストレージバックエンド
|
|
10
|
+
*/
|
|
11
|
+
constructor(backend: StorageBackend);
|
|
12
|
+
/**
|
|
13
|
+
* ファイルを書き込む(workspace領域)
|
|
14
|
+
* @param {string} filepath - ファイルパス
|
|
15
|
+
* @param {string} content - 書き込む内容
|
|
16
|
+
* @returns {Promise<void>}
|
|
17
|
+
*/
|
|
18
|
+
writeFile(filepath: string, content: string): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* git に残る info を元に workspace 用のトンブストーンを作成して書き込む
|
|
21
|
+
* @param {string} filepath - ファイルパス
|
|
22
|
+
* @returns {Promise<void>}
|
|
23
|
+
*/
|
|
24
|
+
private _writeTombstoneFromGit;
|
|
25
|
+
/**
|
|
26
|
+
* ワークスペースの info をトンブストーン状態に更新して書き込む
|
|
27
|
+
* @param {string} filepath - ファイルパス
|
|
28
|
+
* @returns {Promise<void>}
|
|
29
|
+
*/
|
|
30
|
+
private _writeWorkspaceTombstone;
|
|
31
|
+
/**
|
|
32
|
+
* info 関連のエントリを削除する(best-effort)
|
|
33
|
+
* @param {string} filepath - ファイルパス
|
|
34
|
+
* @returns {Promise<void>}
|
|
35
|
+
*/
|
|
36
|
+
private _deleteInfos;
|
|
37
|
+
/**
|
|
38
|
+
* ファイルを削除する(workspace と info をクリア)
|
|
39
|
+
* @param {string} filepath - ファイルパス
|
|
40
|
+
* @returns {Promise<void>}
|
|
41
|
+
*/
|
|
42
|
+
deleteFile(filepath: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* ワークスペースまたはベースからファイルを読み出す
|
|
45
|
+
* @param {string} filepath - ファイルパス
|
|
46
|
+
* @returns {Promise<string|null>} ファイル内容または null
|
|
47
|
+
*/
|
|
48
|
+
readFile(filepath: string): Promise<string | null>;
|
|
49
|
+
/**
|
|
50
|
+
* ファイルをリネームする(内容をコピーして元を削除)
|
|
51
|
+
* @param {string} from - 元パス
|
|
52
|
+
* @param {string} to - 先パス
|
|
53
|
+
* @returns {Promise<void>}
|
|
54
|
+
*/
|
|
55
|
+
renameFile(from: string, to: string): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
export default LocalFileManager;
|
|
58
|
+
//# sourceMappingURL=localFileManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localFileManager.d.ts","sourceRoot":"","sources":["../../src/virtualfs/localFileManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAQzD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAE/B;;;OAGG;gBACS,OAAO,EAAE,cAAc;IAInC;;;;;OAKG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE;;;;OAIG;YACW,sBAAsB;IAepC;;;;OAIG;YACW,wBAAwB;IAetC;;;;OAIG;YACW,YAAY;IAK1B;;;;OAIG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjD;;;;OAIG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQxD;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM1D;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update in-memory info metadata when a blob is written to a segment.
|
|
3
|
+
* @param store in-memory store object
|
|
4
|
+
* @param filepath path key
|
|
5
|
+
* @param seg segment name ('workspace'|'base'|'conflict'|'info')
|
|
6
|
+
* @param content blob content
|
|
7
|
+
* @returns Promise<void>
|
|
8
|
+
*/
|
|
9
|
+
export declare function updateInfoForWrite(store: any, filepath: string, seg: string, content: string): Promise<void>;
|
|
10
|
+
declare const _default: {
|
|
11
|
+
updateInfoForWrite: typeof updateInfoForWrite;
|
|
12
|
+
};
|
|
13
|
+
export default _default;
|
|
14
|
+
//# sourceMappingURL=metadataManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadataManager.d.ts","sourceRoot":"","sources":["../../src/virtualfs/metadataManager.ts"],"names":[],"mappings":"AAuLA;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlH;;;;AAgBD,wBAAqC"}
|
|
@@ -1,66 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { StorageBackend } from './storageBackend';
|
|
1
|
+
import { StorageBackendConstructor } from './storageBackend.ts';
|
|
3
2
|
/** OPFS (origin private file system) を利用する永続化実装 */
|
|
4
|
-
export declare
|
|
5
|
-
/**
|
|
6
|
-
* 同期的に OPFS 利用可否を判定します(レガシーヒントも含む)。
|
|
7
|
-
* @returns {boolean} 利用可能なら true
|
|
8
|
-
*/
|
|
9
|
-
static canUse(): boolean;
|
|
10
|
-
/** コンストラクタ(OPFS は初期化不要) */
|
|
11
|
-
constructor();
|
|
12
|
-
/**
|
|
13
|
-
* 初期化(OPFS はランタイム判定のみ)
|
|
14
|
-
* @returns {Promise<void>} 初期化完了時に解決
|
|
15
|
-
*/
|
|
16
|
-
init(): Promise<void>;
|
|
17
|
-
/**
|
|
18
|
-
* OPFS のルートディレクトリハンドルを取得します。失敗時は null を返す。
|
|
19
|
-
* @returns {Promise<any|null>} ルートハンドルまたは null
|
|
20
|
-
*/
|
|
21
|
-
private getOpfsRoot;
|
|
22
|
-
/**
|
|
23
|
-
* 指定パスのディレクトリを再帰的に作成して返す
|
|
24
|
-
* @returns {Promise<any>} 生成されたディレクトリハンドル
|
|
25
|
-
*/
|
|
26
|
-
private ensureDir;
|
|
27
|
-
/**
|
|
28
|
-
* index を読み出す
|
|
29
|
-
* @returns {Promise<IndexFile|null>} 読み出した IndexFile、存在しなければ null
|
|
30
|
-
*/
|
|
31
|
-
readIndex(): Promise<IndexFile | null>;
|
|
32
|
-
/**
|
|
33
|
-
* index を書き込む
|
|
34
|
-
* @returns {Promise<void>} 書込完了時に解決
|
|
35
|
-
*/
|
|
36
|
-
writeIndex(index: IndexFile): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* blob を書き込む
|
|
39
|
-
* @returns {Promise<void>} 書込完了時に解決
|
|
40
|
-
*/
|
|
41
|
-
writeBlob(filepath: string, content: string): Promise<void>;
|
|
42
|
-
/**
|
|
43
|
-
* blob を読み出す
|
|
44
|
-
* @returns {Promise<string|null>} ファイル内容、存在しなければ null
|
|
45
|
-
*/
|
|
46
|
-
readBlob(filepath: string): Promise<string | null>;
|
|
47
|
-
/**
|
|
48
|
-
* blob を削除する
|
|
49
|
-
* @returns {Promise<void>} 削除完了時に解決
|
|
50
|
-
*/
|
|
51
|
-
deleteBlob(filepath: string): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Traverse into nested directories without creating them.
|
|
54
|
-
* @param root The starting directory handle
|
|
55
|
-
* @param parts Path parts to traverse
|
|
56
|
-
* @returns The final directory handle
|
|
57
|
-
*/
|
|
58
|
-
private traverseDir;
|
|
59
|
-
/**
|
|
60
|
-
* Try to remove a file via its file handle.
|
|
61
|
-
* @returns {Promise<boolean>} true when removed, false otherwise
|
|
62
|
-
*/
|
|
63
|
-
private tryRemoveFileHandle;
|
|
64
|
-
}
|
|
3
|
+
export declare const OpfsStorage: StorageBackendConstructor;
|
|
65
4
|
export default OpfsStorage;
|
|
66
5
|
//# sourceMappingURL=opfsStorage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opfsStorage.d.ts","sourceRoot":"","sources":["../../src/virtualfs/opfsStorage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opfsStorage.d.ts","sourceRoot":"","sources":["../../src/virtualfs/opfsStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAW/E,mDAAmD;AACnD,eAAO,MAAM,WAAW,EAAE,yBA64BzB,CAAA;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { StorageBackend } from './storageBackend.ts';
|
|
2
|
+
import { IndexManager } from './indexManager.ts';
|
|
3
|
+
import { ConflictManager } from './conflictManager.ts';
|
|
4
|
+
import { LocalChangeApplier } from './localChangeApplier.ts';
|
|
5
|
+
type RemoteSnapshotDescriptor = {
|
|
6
|
+
headSha: string;
|
|
7
|
+
shas: Record<string, string>;
|
|
8
|
+
fetchContent: (_paths: string[]) => Promise<Record<string, string>>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* リモート同期を行うクラス
|
|
12
|
+
*/
|
|
13
|
+
export declare class RemoteSynchronizer {
|
|
14
|
+
private _backend;
|
|
15
|
+
private _indexManager;
|
|
16
|
+
private _conflictManager;
|
|
17
|
+
private _applier;
|
|
18
|
+
/**
|
|
19
|
+
* コンストラクタ
|
|
20
|
+
* @param {StorageBackend} backend - ストレージバックエンド
|
|
21
|
+
* @param {IndexManager} indexManager - インデックス管理
|
|
22
|
+
* @param {ConflictManager} conflictManager - コンフリクト管理
|
|
23
|
+
* @param {LocalChangeApplier} applier - ローカル適用器
|
|
24
|
+
*/
|
|
25
|
+
constructor(_backend: StorageBackend, _indexManager: IndexManager, _conflictManager: ConflictManager, _applier: LocalChangeApplier);
|
|
26
|
+
/**
|
|
27
|
+
* リモートのスナップショットをpullしてローカルを同期する
|
|
28
|
+
* @param {RemoteSnapshotDescriptor|string} remote - リモートスナップショットまたはheadSha
|
|
29
|
+
* @param {Record<string,string>=} baseSnapshot - オプションのベーススナップショット
|
|
30
|
+
* @returns {Promise<object>} conflicts, fetchedPaths, reconciledPaths を含む結果オブジェクト
|
|
31
|
+
*/
|
|
32
|
+
pull(remote: RemoteSnapshotDescriptor | string, baseSnapshot?: Record<string, string>, adapterInstance?: any): Promise<object>;
|
|
33
|
+
/**
|
|
34
|
+
* ローカルの変更をpushする(インデックス更新を行う)
|
|
35
|
+
* @param {any} input - push 入力(parentSha, changes 等)
|
|
36
|
+
* @param {any=} adapter - オプションのアダプタ
|
|
37
|
+
* @returns {Promise<object>} commitSha を含むオブジェクト
|
|
38
|
+
*/
|
|
39
|
+
push(input: any, _adapter?: any): Promise<object>;
|
|
40
|
+
/**
|
|
41
|
+
* ベーススナップショットを適用してローカルを置き換える
|
|
42
|
+
* @param {Record<string,string>} snapshot - パス->内容のマップ
|
|
43
|
+
* @param {string} headSha - 適用後のhead
|
|
44
|
+
* @returns {Promise<void>}
|
|
45
|
+
*/
|
|
46
|
+
applyBaseSnapshot(snapshot: Record<string, string>, headSha: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* remote 引数を標準の RemoteSnapshotDescriptor に変換する
|
|
49
|
+
* @returns {Promise<RemoteSnapshotDescriptor>}
|
|
50
|
+
*/
|
|
51
|
+
private _normalizeRemoteInput;
|
|
52
|
+
/**
|
|
53
|
+
* 追加/更新対象のパス一覧を計算する
|
|
54
|
+
* @returns {Promise<string[]>}
|
|
55
|
+
*/
|
|
56
|
+
private _computeToAddOrUpdate;
|
|
57
|
+
/**
|
|
58
|
+
* 削除対象のパス一覧を計算する
|
|
59
|
+
* @returns {Promise<string[]>}
|
|
60
|
+
*/
|
|
61
|
+
private _computeToRemove;
|
|
62
|
+
/**
|
|
63
|
+
* 指定パスの削除を適用する
|
|
64
|
+
* @param {string[]} toRemove - 削除対象パス配列
|
|
65
|
+
* @returns {Promise<void>}
|
|
66
|
+
*/
|
|
67
|
+
private _applyRemovals;
|
|
68
|
+
/**
|
|
69
|
+
* 追加/更新を適用する
|
|
70
|
+
* @returns {Promise<void>}
|
|
71
|
+
*/
|
|
72
|
+
private _applyAddsOrUpdates;
|
|
73
|
+
/**
|
|
74
|
+
* リモートの追加/更新を処理する
|
|
75
|
+
* @returns {Promise<void>}
|
|
76
|
+
*/
|
|
77
|
+
private _processRemoteAddsAndUpdates;
|
|
78
|
+
/**
|
|
79
|
+
* リモートの削除を処理する
|
|
80
|
+
* @returns {Promise<void>}
|
|
81
|
+
*/
|
|
82
|
+
private _processRemoteDeletions;
|
|
83
|
+
/**
|
|
84
|
+
* プル時に個別パスが既に整合済みか判定する
|
|
85
|
+
* @returns {Promise<boolean>} 整合済みならtrue
|
|
86
|
+
*/
|
|
87
|
+
private _classifyRemotePathForPull;
|
|
88
|
+
/**
|
|
89
|
+
* 個別のリモートパスを処理する(新規/既存の振り分けを行う)
|
|
90
|
+
* @returns {Promise<void>}
|
|
91
|
+
*/
|
|
92
|
+
private _handleRemotePath;
|
|
93
|
+
/**
|
|
94
|
+
* 新規ファイルに対する処理(追加 or conflict)
|
|
95
|
+
* @returns {Promise<void>}
|
|
96
|
+
*/
|
|
97
|
+
private _handleRemoteNew;
|
|
98
|
+
/**
|
|
99
|
+
* 新規でコンフリクトが発生した場合の処理
|
|
100
|
+
* @returns {Promise<void>}
|
|
101
|
+
*/
|
|
102
|
+
private _handleRemoteNewConflict;
|
|
103
|
+
/**
|
|
104
|
+
* 新規追加を処理する
|
|
105
|
+
* @returns {Promise<void>}
|
|
106
|
+
*/
|
|
107
|
+
private _handleRemoteNewAdd;
|
|
108
|
+
/**
|
|
109
|
+
* 既存ファイルに対する更新/競合処理
|
|
110
|
+
* @returns {Promise<void>}
|
|
111
|
+
*/
|
|
112
|
+
private _handleRemoteExisting;
|
|
113
|
+
/**
|
|
114
|
+
* 既存ファイルの更新処理
|
|
115
|
+
* @returns {Promise<void>}
|
|
116
|
+
*/
|
|
117
|
+
private _handleRemoteExistingUpdate;
|
|
118
|
+
/**
|
|
119
|
+
* 既存ファイルで競合が発生した場合の処理
|
|
120
|
+
* @returns {Promise<void>}
|
|
121
|
+
*/
|
|
122
|
+
private _handleRemoteExistingConflict;
|
|
123
|
+
/**
|
|
124
|
+
* リモートで削除されたパスの処理
|
|
125
|
+
* @returns {Promise<void>}
|
|
126
|
+
*/
|
|
127
|
+
private _handleRemoteDeletion;
|
|
128
|
+
/**
|
|
129
|
+
* 変更をローカルに適用する(create/update/delete)
|
|
130
|
+
* @returns {Promise<void>}
|
|
131
|
+
*/
|
|
132
|
+
private _applyChangeLocally;
|
|
133
|
+
/**
|
|
134
|
+
* On-demand: fetch and store base content for a single path when missing.
|
|
135
|
+
* @param {string} path
|
|
136
|
+
* @param {any=} adapterInstance optional adapter instance to fetch remote content
|
|
137
|
+
* @returns {Promise<string|null>} fetched content or null
|
|
138
|
+
*/
|
|
139
|
+
fetchBaseIfMissing(path: string, adapterInstance?: any): Promise<string | null>;
|
|
140
|
+
/**
|
|
141
|
+
* Read and parse the stored info entry for `path`.
|
|
142
|
+
* Returns parsed object or null when missing/invalid.
|
|
143
|
+
* @returns {Promise<any|null>} parsed object or null
|
|
144
|
+
*/
|
|
145
|
+
private _readInfoEntry;
|
|
146
|
+
/**
|
|
147
|
+
* Attempt to fetch base content using adapterInstance.getBlob.
|
|
148
|
+
* Returns string when fetched, null when fetch attempted but failed, or undefined when adapter not supported.
|
|
149
|
+
* @returns {Promise<string|null|undefined>} fetched content, null, or undefined
|
|
150
|
+
*/
|
|
151
|
+
private _tryFetchBaseWithAdapter;
|
|
152
|
+
/**
|
|
153
|
+
* Handle a fetched blob-like object: decode if base64 and persist into backend.
|
|
154
|
+
* Returns decoded content string, or null on failure.
|
|
155
|
+
* @returns {Promise<string|null>} decoded content or null on failure
|
|
156
|
+
*/
|
|
157
|
+
private _handleFetchedBlob;
|
|
158
|
+
/**
|
|
159
|
+
* Attempt to fetch raw file using adapterInstance._fetchFileRaw if available.
|
|
160
|
+
* Returns string when fetched, null when attempted but failed, or undefined when adapter not supported.
|
|
161
|
+
* @returns {Promise<string|null|undefined>} fetched content, null, or undefined
|
|
162
|
+
*/
|
|
163
|
+
private _tryFetchRawFile;
|
|
164
|
+
/**
|
|
165
|
+
* Decode a base64 string into UTF-8 text. Uses global Buffer when available,
|
|
166
|
+
* falls back to atob/TextDecoder for browsers.
|
|
167
|
+
* @returns {string} decoded UTF-8 string
|
|
168
|
+
*/
|
|
169
|
+
private _decodeBase64ToString;
|
|
170
|
+
/**
|
|
171
|
+
* Convert a binary string (result of atob) into a UTF-8 string.
|
|
172
|
+
* @param bin binary string
|
|
173
|
+
* @returns {string} decoded UTF-8 string
|
|
174
|
+
*/
|
|
175
|
+
private _binToUtf8;
|
|
176
|
+
/**
|
|
177
|
+
* Try to decode base64 using a global Buffer if available.
|
|
178
|
+
* Returns decoded string or undefined when Buffer not available.
|
|
179
|
+
* @param safe base64 string
|
|
180
|
+
* @returns {string|undefined}
|
|
181
|
+
*/
|
|
182
|
+
private _tryDecodeWithBuffer;
|
|
183
|
+
/**
|
|
184
|
+
* Try to decode base64 using atob/TextDecoder in browser.
|
|
185
|
+
* Returns decoded string or undefined when atob not available or parse fails.
|
|
186
|
+
* @param safe base64 string
|
|
187
|
+
* @returns {string|undefined}
|
|
188
|
+
*/
|
|
189
|
+
private _tryDecodeWithAtob;
|
|
190
|
+
}
|
|
191
|
+
export default RemoteSynchronizer;
|
|
192
|
+
//# sourceMappingURL=remoteSynchronizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteSynchronizer.d.ts","sourceRoot":"","sources":["../../src/virtualfs/remoteSynchronizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACpE,CAAA;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAS3B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,QAAQ;IAXlB;;;;;;OAMG;gBAEO,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,YAAY,EAC3B,gBAAgB,EAAE,eAAe,EACjC,QAAQ,EAAE,kBAAkB;IAGtC;;;;;OAKG;IACG,IAAI,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BpI;;;;;OAKG;IACG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBvD;;;;;OAKG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAczF;;;OAGG;YACW,qBAAqB;IAoBnC;;;OAGG;YACW,qBAAqB;IAYnC;;;OAGG;YACW,gBAAgB;IAU9B;;;;OAIG;YACW,cAAc;IAY5B;;;OAGG;YACW,mBAAmB;IAmBjC;;;OAGG;YACW,4BAA4B;IAM1C;;;OAGG;YACW,uBAAuB;IAcrC;;;OAGG;YACW,0BAA0B;IAsBxC;;;OAGG;YACW,iBAAiB;IAoB/B;;;OAGG;YACW,gBAAgB;IAS9B;;;OAGG;YACW,wBAAwB;IActC;;;OAGG;YACW,mBAAmB;IAOjC;;;OAGG;YACW,qBAAqB;IAUnC;;;OAGG;YACW,2BAA2B;IASzC;;;OAGG;YACW,6BAA6B;IAW3C;;;OAGG;YACW,qBAAqB;IAmBnC;;;OAGG;YACW,mBAAmB;IAkBjC;;;;;OAKG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqBrF;;;;OAIG;YACW,cAAc;IAgB5B;;;;OAIG;YACW,wBAAwB;IAYtC;;;;OAIG;YACW,kBAAkB;IAYhC;;;;OAIG;YACW,gBAAgB;IAe9B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAOlB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;CAU3B;AAED,eAAe,kBAAkB,CAAA"}
|