@diaryx/wasm 0.11.1-dev.0fde73f → 0.13.0-dev.c0e2eed
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 +19 -0
- package/diaryx_wasm.d.ts +37 -37
- package/diaryx_wasm.js +19 -19
- package/diaryx_wasm_bg.wasm.d.ts +37 -37
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,6 +27,25 @@ To build the WebAssembly module:
|
|
|
27
27
|
wasm-pack build --target web --out-dir ../../apps/web/src/lib/wasm
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
+
## Testing
|
|
31
|
+
|
|
32
|
+
Run browser filesystem integration tests (wasm + browser):
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
nix develop -c wasm-pack test --headless --chrome crates/diaryx_wasm
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Current filesystem test suites live in:
|
|
39
|
+
|
|
40
|
+
- `crates/diaryx_wasm/tests/opfs_fs.rs`
|
|
41
|
+
- `crates/diaryx_wasm/tests/fs_trait_parity.rs`
|
|
42
|
+
|
|
43
|
+
`fs_trait_parity.rs` runs the same contract checks across:
|
|
44
|
+
|
|
45
|
+
- `OpfsFileSystem`
|
|
46
|
+
- `IndexedDbFileSystem`
|
|
47
|
+
- `FsaFileSystem`
|
|
48
|
+
|
|
30
49
|
## Architecture
|
|
31
50
|
|
|
32
51
|
The crate provides typed class-based APIs that wrap `diaryx_core` functionality:
|
package/diaryx_wasm.d.ts
CHANGED
|
@@ -549,20 +549,28 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
|
|
|
549
549
|
|
|
550
550
|
export interface InitOutput {
|
|
551
551
|
readonly memory: WebAssembly.Memory;
|
|
552
|
-
readonly
|
|
553
|
-
readonly
|
|
554
|
-
readonly
|
|
555
|
-
readonly
|
|
556
|
-
readonly
|
|
557
|
-
readonly
|
|
558
|
-
readonly
|
|
559
|
-
readonly
|
|
552
|
+
readonly __wbg_diaryxbackend_free: (a: number, b: number) => void;
|
|
553
|
+
readonly diaryxbackend_create: (a: number, b: number) => any;
|
|
554
|
+
readonly diaryxbackend_createFromDirectoryHandle: (a: any) => [number, number, number];
|
|
555
|
+
readonly diaryxbackend_createInMemory: () => [number, number, number];
|
|
556
|
+
readonly diaryxbackend_createIndexedDb: () => any;
|
|
557
|
+
readonly diaryxbackend_createOpfs: () => any;
|
|
558
|
+
readonly diaryxbackend_createSyncClient: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
|
|
559
|
+
readonly diaryxbackend_emitFileSystemEvent: (a: number, b: number, c: number) => [number, number];
|
|
560
|
+
readonly diaryxbackend_eventSubscriberCount: (a: number) => number;
|
|
561
|
+
readonly diaryxbackend_execute: (a: number, b: number, c: number) => any;
|
|
562
|
+
readonly diaryxbackend_executeJs: (a: number, b: any) => any;
|
|
563
|
+
readonly diaryxbackend_getConfig: (a: number) => any;
|
|
564
|
+
readonly diaryxbackend_hasNativeSync: (a: number) => number;
|
|
565
|
+
readonly diaryxbackend_offFileSystemEvent: (a: number, b: bigint) => number;
|
|
566
|
+
readonly diaryxbackend_onFileSystemEvent: (a: number, b: any) => bigint;
|
|
567
|
+
readonly diaryxbackend_readBinary: (a: number, b: number, c: number) => any;
|
|
568
|
+
readonly diaryxbackend_saveConfig: (a: number, b: any) => any;
|
|
569
|
+
readonly diaryxbackend_writeBinary: (a: number, b: number, c: number, d: any) => any;
|
|
560
570
|
readonly __wbg_jsasyncfilesystem_free: (a: number, b: number) => void;
|
|
571
|
+
readonly __wbg_wasmsyncclient_free: (a: number, b: number) => void;
|
|
561
572
|
readonly jsasyncfilesystem_has_callback: (a: number, b: number, c: number) => number;
|
|
562
|
-
readonly now_timestamp: () => [number, number];
|
|
563
|
-
readonly today_formatted: (a: number, b: number) => [number, number];
|
|
564
573
|
readonly jsasyncfilesystem_new: (a: any) => number;
|
|
565
|
-
readonly __wbg_wasmsyncclient_free: (a: number, b: number) => void;
|
|
566
574
|
readonly wasmsyncclient_focusFiles: (a: number, b: number, c: number) => void;
|
|
567
575
|
readonly wasmsyncclient_getServerUrl: (a: number) => [number, number];
|
|
568
576
|
readonly wasmsyncclient_getWorkspaceId: (a: number) => [number, number];
|
|
@@ -580,32 +588,24 @@ export interface InitOutput {
|
|
|
580
588
|
readonly wasmsyncclient_queueLocalUpdate: (a: number, b: number, c: number, d: number, e: number) => any;
|
|
581
589
|
readonly wasmsyncclient_setSessionCode: (a: number, b: number, c: number) => void;
|
|
582
590
|
readonly wasmsyncclient_unfocusFiles: (a: number, b: number, c: number) => void;
|
|
583
|
-
readonly
|
|
584
|
-
readonly
|
|
585
|
-
readonly
|
|
586
|
-
readonly
|
|
587
|
-
readonly
|
|
588
|
-
readonly
|
|
589
|
-
readonly
|
|
590
|
-
readonly
|
|
591
|
-
readonly
|
|
592
|
-
readonly
|
|
593
|
-
readonly
|
|
594
|
-
readonly
|
|
595
|
-
readonly
|
|
596
|
-
readonly
|
|
597
|
-
readonly
|
|
598
|
-
readonly
|
|
599
|
-
readonly
|
|
600
|
-
readonly
|
|
601
|
-
readonly wasm_bindgen__closure__destroy__h618e5e7a2f4a4844: (a: number, b: number) => void;
|
|
602
|
-
readonly wasm_bindgen__closure__destroy__h4b2a5ceca2370348: (a: number, b: number) => void;
|
|
603
|
-
readonly wasm_bindgen__closure__destroy__hf59ea51dfabf38c5: (a: number, b: number) => void;
|
|
604
|
-
readonly wasm_bindgen__convert__closures_____invoke__h143edeab5759fb7b: (a: number, b: number, c: any) => [number, number];
|
|
605
|
-
readonly wasm_bindgen__convert__closures_____invoke__hcef8d709b492a91f: (a: number, b: number, c: any, d: any) => void;
|
|
606
|
-
readonly wasm_bindgen__convert__closures_____invoke__h4f5175e7ff77e24c: (a: number, b: number, c: any) => void;
|
|
607
|
-
readonly wasm_bindgen__convert__closures_____invoke__h1598c516b2d5b326: (a: number, b: number, c: any) => void;
|
|
608
|
-
readonly wasm_bindgen__convert__closures_____invoke__ha6231ef7710d1c67: (a: number, b: number, c: any) => void;
|
|
591
|
+
readonly __wbg_fsafilesystem_free: (a: number, b: number) => void;
|
|
592
|
+
readonly __wbg_indexeddbfilesystem_free: (a: number, b: number) => void;
|
|
593
|
+
readonly fsafilesystem_fromHandle: (a: any) => number;
|
|
594
|
+
readonly indexeddbfilesystem_create: () => any;
|
|
595
|
+
readonly now_timestamp: () => [number, number];
|
|
596
|
+
readonly today_formatted: (a: number, b: number) => [number, number];
|
|
597
|
+
readonly __wbg_opfsfilesystem_free: (a: number, b: number) => void;
|
|
598
|
+
readonly opfsfilesystem_create: () => any;
|
|
599
|
+
readonly opfsfilesystem_createWithName: (a: number, b: number) => any;
|
|
600
|
+
readonly init: () => void;
|
|
601
|
+
readonly wasm_bindgen__closure__destroy__h42aa0e93a1f9e16d: (a: number, b: number) => void;
|
|
602
|
+
readonly wasm_bindgen__closure__destroy__h54a6b627d1123dca: (a: number, b: number) => void;
|
|
603
|
+
readonly wasm_bindgen__closure__destroy__h440f08373ff30a05: (a: number, b: number) => void;
|
|
604
|
+
readonly wasm_bindgen__convert__closures_____invoke__h91799ae173fd0a87: (a: number, b: number, c: any) => [number, number];
|
|
605
|
+
readonly wasm_bindgen__convert__closures_____invoke__h4e796b59e8c15a06: (a: number, b: number, c: any, d: any) => void;
|
|
606
|
+
readonly wasm_bindgen__convert__closures_____invoke__hbf5a94dccea95824: (a: number, b: number, c: any) => void;
|
|
607
|
+
readonly wasm_bindgen__convert__closures_____invoke__h7d21c95eeb3011e3: (a: number, b: number, c: any) => void;
|
|
608
|
+
readonly wasm_bindgen__convert__closures_____invoke__h359356b1e0b37746: (a: number, b: number, c: any) => void;
|
|
609
609
|
readonly __wbindgen_malloc: (a: number, b: number) => number;
|
|
610
610
|
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
|
611
611
|
readonly __wbindgen_exn_store: (a: number) => void;
|
package/diaryx_wasm.js
CHANGED
|
@@ -1266,7 +1266,7 @@ function __wbg_get_imports() {
|
|
|
1266
1266
|
const a = state0.a;
|
|
1267
1267
|
state0.a = 0;
|
|
1268
1268
|
try {
|
|
1269
|
-
return
|
|
1269
|
+
return wasm_bindgen__convert__closures_____invoke__h4e796b59e8c15a06(a, state0.b, arg0, arg1);
|
|
1270
1270
|
} finally {
|
|
1271
1271
|
state0.a = a;
|
|
1272
1272
|
}
|
|
@@ -1495,23 +1495,23 @@ function __wbg_get_imports() {
|
|
|
1495
1495
|
return ret;
|
|
1496
1496
|
}, arguments); },
|
|
1497
1497
|
__wbindgen_cast_0000000000000001: function(arg0, arg1) {
|
|
1498
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1499
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1498
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 653, function: Function { arguments: [NamedExternref("Event")], shim_idx: 747, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.
|
|
1499
|
+
const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h42aa0e93a1f9e16d, wasm_bindgen__convert__closures_____invoke__h91799ae173fd0a87);
|
|
1500
1500
|
return ret;
|
|
1501
1501
|
},
|
|
1502
1502
|
__wbindgen_cast_0000000000000002: function(arg0, arg1) {
|
|
1503
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1504
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1503
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 653, function: Function { arguments: [NamedExternref("IDBVersionChangeEvent")], shim_idx: 748, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1504
|
+
const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h42aa0e93a1f9e16d, wasm_bindgen__convert__closures_____invoke__hbf5a94dccea95824);
|
|
1505
1505
|
return ret;
|
|
1506
1506
|
},
|
|
1507
1507
|
__wbindgen_cast_0000000000000003: function(arg0, arg1) {
|
|
1508
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1509
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1508
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 777, function: Function { arguments: [NamedExternref("Event")], shim_idx: 778, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1509
|
+
const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h54a6b627d1123dca, wasm_bindgen__convert__closures_____invoke__h7d21c95eeb3011e3);
|
|
1510
1510
|
return ret;
|
|
1511
1511
|
},
|
|
1512
1512
|
__wbindgen_cast_0000000000000004: function(arg0, arg1) {
|
|
1513
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1514
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1513
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 803, function: Function { arguments: [Externref], shim_idx: 804, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1514
|
+
const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h440f08373ff30a05, wasm_bindgen__convert__closures_____invoke__h359356b1e0b37746);
|
|
1515
1515
|
return ret;
|
|
1516
1516
|
},
|
|
1517
1517
|
__wbindgen_cast_0000000000000005: function(arg0) {
|
|
@@ -1555,27 +1555,27 @@ function __wbg_get_imports() {
|
|
|
1555
1555
|
};
|
|
1556
1556
|
}
|
|
1557
1557
|
|
|
1558
|
-
function
|
|
1559
|
-
wasm.
|
|
1558
|
+
function wasm_bindgen__convert__closures_____invoke__hbf5a94dccea95824(arg0, arg1, arg2) {
|
|
1559
|
+
wasm.wasm_bindgen__convert__closures_____invoke__hbf5a94dccea95824(arg0, arg1, arg2);
|
|
1560
1560
|
}
|
|
1561
1561
|
|
|
1562
|
-
function
|
|
1563
|
-
wasm.
|
|
1562
|
+
function wasm_bindgen__convert__closures_____invoke__h7d21c95eeb3011e3(arg0, arg1, arg2) {
|
|
1563
|
+
wasm.wasm_bindgen__convert__closures_____invoke__h7d21c95eeb3011e3(arg0, arg1, arg2);
|
|
1564
1564
|
}
|
|
1565
1565
|
|
|
1566
|
-
function
|
|
1567
|
-
wasm.
|
|
1566
|
+
function wasm_bindgen__convert__closures_____invoke__h359356b1e0b37746(arg0, arg1, arg2) {
|
|
1567
|
+
wasm.wasm_bindgen__convert__closures_____invoke__h359356b1e0b37746(arg0, arg1, arg2);
|
|
1568
1568
|
}
|
|
1569
1569
|
|
|
1570
|
-
function
|
|
1571
|
-
const ret = wasm.
|
|
1570
|
+
function wasm_bindgen__convert__closures_____invoke__h91799ae173fd0a87(arg0, arg1, arg2) {
|
|
1571
|
+
const ret = wasm.wasm_bindgen__convert__closures_____invoke__h91799ae173fd0a87(arg0, arg1, arg2);
|
|
1572
1572
|
if (ret[1]) {
|
|
1573
1573
|
throw takeFromExternrefTable0(ret[0]);
|
|
1574
1574
|
}
|
|
1575
1575
|
}
|
|
1576
1576
|
|
|
1577
|
-
function
|
|
1578
|
-
wasm.
|
|
1577
|
+
function wasm_bindgen__convert__closures_____invoke__h4e796b59e8c15a06(arg0, arg1, arg2, arg3) {
|
|
1578
|
+
wasm.wasm_bindgen__convert__closures_____invoke__h4e796b59e8c15a06(arg0, arg1, arg2, arg3);
|
|
1579
1579
|
}
|
|
1580
1580
|
|
|
1581
1581
|
|
package/diaryx_wasm_bg.wasm.d.ts
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
/* tslint:disable */
|
|
2
2
|
/* eslint-disable */
|
|
3
3
|
export const memory: WebAssembly.Memory;
|
|
4
|
-
export const
|
|
5
|
-
export const
|
|
6
|
-
export const
|
|
7
|
-
export const
|
|
8
|
-
export const
|
|
9
|
-
export const
|
|
10
|
-
export const
|
|
11
|
-
export const
|
|
4
|
+
export const __wbg_diaryxbackend_free: (a: number, b: number) => void;
|
|
5
|
+
export const diaryxbackend_create: (a: number, b: number) => any;
|
|
6
|
+
export const diaryxbackend_createFromDirectoryHandle: (a: any) => [number, number, number];
|
|
7
|
+
export const diaryxbackend_createInMemory: () => [number, number, number];
|
|
8
|
+
export const diaryxbackend_createIndexedDb: () => any;
|
|
9
|
+
export const diaryxbackend_createOpfs: () => any;
|
|
10
|
+
export const diaryxbackend_createSyncClient: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
|
|
11
|
+
export const diaryxbackend_emitFileSystemEvent: (a: number, b: number, c: number) => [number, number];
|
|
12
|
+
export const diaryxbackend_eventSubscriberCount: (a: number) => number;
|
|
13
|
+
export const diaryxbackend_execute: (a: number, b: number, c: number) => any;
|
|
14
|
+
export const diaryxbackend_executeJs: (a: number, b: any) => any;
|
|
15
|
+
export const diaryxbackend_getConfig: (a: number) => any;
|
|
16
|
+
export const diaryxbackend_hasNativeSync: (a: number) => number;
|
|
17
|
+
export const diaryxbackend_offFileSystemEvent: (a: number, b: bigint) => number;
|
|
18
|
+
export const diaryxbackend_onFileSystemEvent: (a: number, b: any) => bigint;
|
|
19
|
+
export const diaryxbackend_readBinary: (a: number, b: number, c: number) => any;
|
|
20
|
+
export const diaryxbackend_saveConfig: (a: number, b: any) => any;
|
|
21
|
+
export const diaryxbackend_writeBinary: (a: number, b: number, c: number, d: any) => any;
|
|
12
22
|
export const __wbg_jsasyncfilesystem_free: (a: number, b: number) => void;
|
|
23
|
+
export const __wbg_wasmsyncclient_free: (a: number, b: number) => void;
|
|
13
24
|
export const jsasyncfilesystem_has_callback: (a: number, b: number, c: number) => number;
|
|
14
|
-
export const now_timestamp: () => [number, number];
|
|
15
|
-
export const today_formatted: (a: number, b: number) => [number, number];
|
|
16
25
|
export const jsasyncfilesystem_new: (a: any) => number;
|
|
17
|
-
export const __wbg_wasmsyncclient_free: (a: number, b: number) => void;
|
|
18
26
|
export const wasmsyncclient_focusFiles: (a: number, b: number, c: number) => void;
|
|
19
27
|
export const wasmsyncclient_getServerUrl: (a: number) => [number, number];
|
|
20
28
|
export const wasmsyncclient_getWorkspaceId: (a: number) => [number, number];
|
|
@@ -32,32 +40,24 @@ export const wasmsyncclient_pollOutgoingText: (a: number) => [number, number];
|
|
|
32
40
|
export const wasmsyncclient_queueLocalUpdate: (a: number, b: number, c: number, d: number, e: number) => any;
|
|
33
41
|
export const wasmsyncclient_setSessionCode: (a: number, b: number, c: number) => void;
|
|
34
42
|
export const wasmsyncclient_unfocusFiles: (a: number, b: number, c: number) => void;
|
|
35
|
-
export const
|
|
36
|
-
export const
|
|
37
|
-
export const
|
|
38
|
-
export const
|
|
39
|
-
export const
|
|
40
|
-
export const
|
|
41
|
-
export const
|
|
42
|
-
export const
|
|
43
|
-
export const
|
|
44
|
-
export const
|
|
45
|
-
export const
|
|
46
|
-
export const
|
|
47
|
-
export const
|
|
48
|
-
export const
|
|
49
|
-
export const
|
|
50
|
-
export const
|
|
51
|
-
export const
|
|
52
|
-
export const
|
|
53
|
-
export const wasm_bindgen__closure__destroy__h618e5e7a2f4a4844: (a: number, b: number) => void;
|
|
54
|
-
export const wasm_bindgen__closure__destroy__h4b2a5ceca2370348: (a: number, b: number) => void;
|
|
55
|
-
export const wasm_bindgen__closure__destroy__hf59ea51dfabf38c5: (a: number, b: number) => void;
|
|
56
|
-
export const wasm_bindgen__convert__closures_____invoke__h143edeab5759fb7b: (a: number, b: number, c: any) => [number, number];
|
|
57
|
-
export const wasm_bindgen__convert__closures_____invoke__hcef8d709b492a91f: (a: number, b: number, c: any, d: any) => void;
|
|
58
|
-
export const wasm_bindgen__convert__closures_____invoke__h4f5175e7ff77e24c: (a: number, b: number, c: any) => void;
|
|
59
|
-
export const wasm_bindgen__convert__closures_____invoke__h1598c516b2d5b326: (a: number, b: number, c: any) => void;
|
|
60
|
-
export const wasm_bindgen__convert__closures_____invoke__ha6231ef7710d1c67: (a: number, b: number, c: any) => void;
|
|
43
|
+
export const __wbg_fsafilesystem_free: (a: number, b: number) => void;
|
|
44
|
+
export const __wbg_indexeddbfilesystem_free: (a: number, b: number) => void;
|
|
45
|
+
export const fsafilesystem_fromHandle: (a: any) => number;
|
|
46
|
+
export const indexeddbfilesystem_create: () => any;
|
|
47
|
+
export const now_timestamp: () => [number, number];
|
|
48
|
+
export const today_formatted: (a: number, b: number) => [number, number];
|
|
49
|
+
export const __wbg_opfsfilesystem_free: (a: number, b: number) => void;
|
|
50
|
+
export const opfsfilesystem_create: () => any;
|
|
51
|
+
export const opfsfilesystem_createWithName: (a: number, b: number) => any;
|
|
52
|
+
export const init: () => void;
|
|
53
|
+
export const wasm_bindgen__closure__destroy__h42aa0e93a1f9e16d: (a: number, b: number) => void;
|
|
54
|
+
export const wasm_bindgen__closure__destroy__h54a6b627d1123dca: (a: number, b: number) => void;
|
|
55
|
+
export const wasm_bindgen__closure__destroy__h440f08373ff30a05: (a: number, b: number) => void;
|
|
56
|
+
export const wasm_bindgen__convert__closures_____invoke__h91799ae173fd0a87: (a: number, b: number, c: any) => [number, number];
|
|
57
|
+
export const wasm_bindgen__convert__closures_____invoke__h4e796b59e8c15a06: (a: number, b: number, c: any, d: any) => void;
|
|
58
|
+
export const wasm_bindgen__convert__closures_____invoke__hbf5a94dccea95824: (a: number, b: number, c: any) => void;
|
|
59
|
+
export const wasm_bindgen__convert__closures_____invoke__h7d21c95eeb3011e3: (a: number, b: number, c: any) => void;
|
|
60
|
+
export const wasm_bindgen__convert__closures_____invoke__h359356b1e0b37746: (a: number, b: number, c: any) => void;
|
|
61
61
|
export const __wbindgen_malloc: (a: number, b: number) => number;
|
|
62
62
|
export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
|
63
63
|
export const __wbindgen_exn_store: (a: number) => void;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@diaryx/wasm",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"description": "WebAssembly bindings for Diaryx core functionality",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.13.0-dev.c0e2eed",
|
|
6
6
|
"license": "SEE LICENSE IN ../../LICENSE.md",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|