@e280/mammoth 0.1.0-7 → 0.1.0-9
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 +3 -3
- package/package.json +4 -2
- package/s/browser/example.ts +1 -1
- package/s/core/mammoth.ts +3 -3
- package/s/test.ts +11 -11
- package/x/browser/example.js +1 -1
- package/x/browser/example.js.map +1 -1
- package/x/core/mammoth.d.ts +2 -2
- package/x/core/mammoth.js +1 -1
- package/x/core/mammoth.js.map +1 -1
- package/x/test.js +11 -11
- package/x/test.js.map +1 -1
package/README.md
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
# 🦣 mammoth
|
|
5
5
|
> *big files. small api.*
|
|
6
6
|
|
|
7
|
-
**mammoth is a file storage typescript library.** we use it in our web apps to store files like user uploads. it's content-addressed. files are streamed into a bucket, identified by their blake3 hash, and deduplicated. mammoth works the same whether it's backed by a bucket in memory, on disk, in the cloud, or in the browser's opfs.
|
|
7
|
+
**mammoth is a file storage typescript library.** we use it in our web apps to store files like user uploads. it's content-addressed. files are streamed into a bucket, identified by their blake3 hash, and deduplicated. mammoth works the same whether it's backed by a bucket in memory, on disk, in the cloud, or in the browser's opfs. mammoth uses [kv](https://github.com/e280/kv) for bookkeeping.
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install @e280/mammoth
|
|
10
|
+
npm install @e280/mammoth @e280/kv
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
```ts
|
|
@@ -19,7 +19,7 @@ const mammoth = new Mammoth()
|
|
|
19
19
|
### 🦣 mammoth stores files.
|
|
20
20
|
- **write a file,** and you get back its blake3 `hash` and `size` in bytes.
|
|
21
21
|
```ts
|
|
22
|
-
const
|
|
22
|
+
const hash = await mammoth.write(blob.stream())
|
|
23
23
|
```
|
|
24
24
|
- **read a file,** identified by its hash.
|
|
25
25
|
```ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@e280/mammoth",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-9",
|
|
4
4
|
"description": "big file storage",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Chase Moskal <chasemoskal@gmail.com>",
|
|
@@ -22,8 +22,10 @@
|
|
|
22
22
|
"test": "node x/test.js",
|
|
23
23
|
"count": "find s -path '*/_archive' -prune -o -name '*.ts' -exec wc -l {} +"
|
|
24
24
|
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@e280/kv": "^0.1.5"
|
|
27
|
+
},
|
|
25
28
|
"dependencies": {
|
|
26
|
-
"@e280/kv": "^0.1.5",
|
|
27
29
|
"@e280/stz": "^0.3.5",
|
|
28
30
|
"@noble/hashes": "^2.2.0"
|
|
29
31
|
},
|
package/s/browser/example.ts
CHANGED
|
@@ -19,7 +19,7 @@ export async function example() {
|
|
|
19
19
|
const myFile = new Blob([new Uint8Array([0xDE, 0xAD, 0xBE, 0xEF])])
|
|
20
20
|
|
|
21
21
|
// write a file as an example
|
|
22
|
-
const
|
|
22
|
+
const hash = await mammoth.write(myFile.stream())
|
|
23
23
|
console.log(`mammoth stored file "${hash}"`)
|
|
24
24
|
}
|
|
25
25
|
|
package/s/core/mammoth.ts
CHANGED
|
@@ -4,10 +4,10 @@ import {lane, queue} from "@e280/stz"
|
|
|
4
4
|
|
|
5
5
|
import {consts} from "./consts.js"
|
|
6
6
|
import {save} from "./utils/save.js"
|
|
7
|
+
import {Hash, Bucket} from "./types.js"
|
|
7
8
|
import {Manifest} from "./utils/manifest.js"
|
|
8
9
|
import {randomId} from "./utils/random-id.js"
|
|
9
10
|
import {MemoryBucket} from "./memory-bucket.js"
|
|
10
|
-
import {Hash, Bucket, Analysis} from "./types.js"
|
|
11
11
|
|
|
12
12
|
/** file storage datalake, content-addressed with blake3 hashes. */
|
|
13
13
|
export class Mammoth {
|
|
@@ -50,7 +50,7 @@ export class Mammoth {
|
|
|
50
50
|
await this.#cleanup()
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
async write(readable: ReadableStream<Uint8Array>): Promise<
|
|
53
|
+
async write(readable: ReadableStream<Uint8Array>): Promise<Hash> {
|
|
54
54
|
const id = randomId()
|
|
55
55
|
await this.#manifest.addWip(id)
|
|
56
56
|
try {
|
|
@@ -58,7 +58,7 @@ export class Mammoth {
|
|
|
58
58
|
const {hash, size} = analysis
|
|
59
59
|
const info = {id, size, added: Date.now()}
|
|
60
60
|
await this.#wholesome(() => this.#manifest.commit(hash, info))
|
|
61
|
-
return analysis
|
|
61
|
+
return analysis.hash
|
|
62
62
|
}
|
|
63
63
|
catch (error) {
|
|
64
64
|
await this.#manifest.moveWipToTrash(id)
|
package/s/test.ts
CHANGED
|
@@ -24,7 +24,7 @@ await science.run({
|
|
|
24
24
|
const dataDir = "data"
|
|
25
25
|
await rm(dataDir, {recursive: true, force: true})
|
|
26
26
|
const mammoth = new Mammoth(new DiskBucket(dataDir), new Kv())
|
|
27
|
-
const
|
|
27
|
+
const hash = await mammoth.write(blob().stream())
|
|
28
28
|
const second = await mammoth.read(hash)
|
|
29
29
|
expect(bytes.eq(await second.bytes(), await blob().bytes()))
|
|
30
30
|
}),
|
|
@@ -32,15 +32,15 @@ await science.run({
|
|
|
32
32
|
"mammoth memory": {
|
|
33
33
|
".write and .read": test(async() => {
|
|
34
34
|
const {mammoth} = setup()
|
|
35
|
-
const
|
|
35
|
+
const hash = await mammoth.write(blob().stream())
|
|
36
36
|
const second = await mammoth.read(hash)
|
|
37
37
|
expect(bytes.eq(await second.bytes(), await blob().bytes()))
|
|
38
38
|
}),
|
|
39
39
|
|
|
40
40
|
".write deduplication": test(async() => {
|
|
41
41
|
const {mammoth} = setup()
|
|
42
|
-
const
|
|
43
|
-
const
|
|
42
|
+
const hashA = await mammoth.write(blob().stream())
|
|
43
|
+
const hashB = await mammoth.write(blob().stream())
|
|
44
44
|
const keys = await collect(mammoth.hashes())
|
|
45
45
|
expect(hashA).is(hashB)
|
|
46
46
|
expect(keys.length).is(1)
|
|
@@ -49,7 +49,7 @@ await science.run({
|
|
|
49
49
|
|
|
50
50
|
".write empty file": test(async() => {
|
|
51
51
|
const {mammoth} = setup()
|
|
52
|
-
const
|
|
52
|
+
const hash = await mammoth.write(new Blob().stream())
|
|
53
53
|
expect((await mammoth.info(hash)).size).is(0)
|
|
54
54
|
expect((await mammoth.read(hash)).size).is(0)
|
|
55
55
|
}),
|
|
@@ -65,9 +65,9 @@ await science.run({
|
|
|
65
65
|
".stats": test(async() => {
|
|
66
66
|
const {mammoth} = setup()
|
|
67
67
|
expect(await mammoth.stats()).deep({count: 0, size: 0})
|
|
68
|
-
const
|
|
68
|
+
const hashA = await mammoth.write(quickstream([0xC0, 0xFF, 0xEE]))
|
|
69
69
|
expect(await mammoth.stats()).deep({count: 1, size: 3})
|
|
70
|
-
const
|
|
70
|
+
const hashB = await mammoth.write(quickstream([0xB0, 0x0B, 0x1E, 0x5]))
|
|
71
71
|
expect(await mammoth.stats()).deep({count: 2, size: 7})
|
|
72
72
|
await mammoth.delete(hashA)
|
|
73
73
|
expect(await mammoth.stats()).deep({count: 1, size: 4})
|
|
@@ -77,7 +77,7 @@ await science.run({
|
|
|
77
77
|
|
|
78
78
|
".has": test(async() => {
|
|
79
79
|
const {mammoth} = setup()
|
|
80
|
-
const
|
|
80
|
+
const hash = await mammoth.write(blob().stream())
|
|
81
81
|
expect(await mammoth.has(hash)).is(true)
|
|
82
82
|
expect(await mammoth.has(randomId())).is(false)
|
|
83
83
|
}),
|
|
@@ -85,13 +85,13 @@ await science.run({
|
|
|
85
85
|
".size": test(async() => {
|
|
86
86
|
const {mammoth} = setup()
|
|
87
87
|
const b = blob()
|
|
88
|
-
const
|
|
88
|
+
const hash = await mammoth.write(b.stream())
|
|
89
89
|
expect((await mammoth.info(hash)).size).is(b.size)
|
|
90
90
|
}),
|
|
91
91
|
|
|
92
92
|
".delete": test(async() => {
|
|
93
93
|
const {mammoth} = setup()
|
|
94
|
-
const
|
|
94
|
+
const hash = await mammoth.write(blob().stream())
|
|
95
95
|
await mammoth.delete(hash)
|
|
96
96
|
expect(await mammoth.has(hash)).is(false)
|
|
97
97
|
expect(await collect(mammoth.hashes())).deep([])
|
|
@@ -104,7 +104,7 @@ await science.run({
|
|
|
104
104
|
|
|
105
105
|
".keys": test(async() => {
|
|
106
106
|
const {mammoth} = setup()
|
|
107
|
-
const
|
|
107
|
+
const hash = await mammoth.write(blob().stream())
|
|
108
108
|
const keys = await collect(mammoth.hashes())
|
|
109
109
|
expect(keys.length).is(1)
|
|
110
110
|
expect(keys[0]).is(hash)
|
package/x/browser/example.js
CHANGED
|
@@ -13,7 +13,7 @@ export async function example() {
|
|
|
13
13
|
const mammoth = new Mammoth(bucket, kv);
|
|
14
14
|
const myFile = new Blob([new Uint8Array([0xDE, 0xAD, 0xBE, 0xEF])]);
|
|
15
15
|
// write a file as an example
|
|
16
|
-
const
|
|
16
|
+
const hash = await mammoth.write(myFile.stream());
|
|
17
17
|
console.log(`mammoth stored file "${hash}"`);
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=example.js.map
|
package/x/browser/example.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../s/browser/example.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAE,aAAa,EAAC,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAE3C,MAAM,CAAC,KAAK,UAAU,OAAO;IAE5B,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACrD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAE1C,6BAA6B;IAC7B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA;IACnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAA;IAC1E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;IAExC,oBAAoB;IACpB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAEnE,6BAA6B;IAC7B,MAAM,
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../s/browser/example.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAE,aAAa,EAAC,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAE3C,MAAM,CAAC,KAAK,UAAU,OAAO;IAE5B,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACrD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAE1C,6BAA6B;IAC7B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA;IACnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAA;IAC1E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;IAExC,oBAAoB;IACpB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAEnE,6BAA6B;IAC7B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC,CAAA;AAC7C,CAAC"}
|
package/x/core/mammoth.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Kv } from "@e280/kv";
|
|
2
|
-
import { Hash, Bucket
|
|
2
|
+
import { Hash, Bucket } from "./types.js";
|
|
3
3
|
/** file storage datalake, content-addressed with blake3 hashes. */
|
|
4
4
|
export declare class Mammoth {
|
|
5
5
|
#private;
|
|
@@ -10,5 +10,5 @@ export declare class Mammoth {
|
|
|
10
10
|
stats(): Promise<import("./types.js").Stats>;
|
|
11
11
|
read(hash: Hash): Promise<Blob>;
|
|
12
12
|
delete(hash: Hash): Promise<void>;
|
|
13
|
-
write(readable: ReadableStream<Uint8Array>): Promise<
|
|
13
|
+
write(readable: ReadableStream<Uint8Array>): Promise<Hash>;
|
|
14
14
|
}
|
package/x/core/mammoth.js
CHANGED
|
@@ -46,7 +46,7 @@ export class Mammoth {
|
|
|
46
46
|
const { hash, size } = analysis;
|
|
47
47
|
const info = { id, size, added: Date.now() };
|
|
48
48
|
await this.#wholesome(() => this.#manifest.commit(hash, info));
|
|
49
|
-
return analysis;
|
|
49
|
+
return analysis.hash;
|
|
50
50
|
}
|
|
51
51
|
catch (error) {
|
|
52
52
|
await this.#manifest.moveWipToTrash(id);
|
package/x/core/mammoth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mammoth.js","sourceRoot":"","sources":["../../s/core/mammoth.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,UAAU,CAAA;AAC3B,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,WAAW,CAAA;AAErC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"mammoth.js","sourceRoot":"","sources":["../../s/core/mammoth.ts"],"names":[],"mappings":"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"}
|
package/x/test.js
CHANGED
|
@@ -19,21 +19,21 @@ await science.run({
|
|
|
19
19
|
const dataDir = "data";
|
|
20
20
|
await rm(dataDir, { recursive: true, force: true });
|
|
21
21
|
const mammoth = new Mammoth(new DiskBucket(dataDir), new Kv());
|
|
22
|
-
const
|
|
22
|
+
const hash = await mammoth.write(blob().stream());
|
|
23
23
|
const second = await mammoth.read(hash);
|
|
24
24
|
expect(bytes.eq(await second.bytes(), await blob().bytes()));
|
|
25
25
|
}),
|
|
26
26
|
"mammoth memory": {
|
|
27
27
|
".write and .read": test(async () => {
|
|
28
28
|
const { mammoth } = setup();
|
|
29
|
-
const
|
|
29
|
+
const hash = await mammoth.write(blob().stream());
|
|
30
30
|
const second = await mammoth.read(hash);
|
|
31
31
|
expect(bytes.eq(await second.bytes(), await blob().bytes()));
|
|
32
32
|
}),
|
|
33
33
|
".write deduplication": test(async () => {
|
|
34
34
|
const { mammoth } = setup();
|
|
35
|
-
const
|
|
36
|
-
const
|
|
35
|
+
const hashA = await mammoth.write(blob().stream());
|
|
36
|
+
const hashB = await mammoth.write(blob().stream());
|
|
37
37
|
const keys = await collect(mammoth.hashes());
|
|
38
38
|
expect(hashA).is(hashB);
|
|
39
39
|
expect(keys.length).is(1);
|
|
@@ -41,7 +41,7 @@ await science.run({
|
|
|
41
41
|
}),
|
|
42
42
|
".write empty file": test(async () => {
|
|
43
43
|
const { mammoth } = setup();
|
|
44
|
-
const
|
|
44
|
+
const hash = await mammoth.write(new Blob().stream());
|
|
45
45
|
expect((await mammoth.info(hash)).size).is(0);
|
|
46
46
|
expect((await mammoth.read(hash)).size).is(0);
|
|
47
47
|
}),
|
|
@@ -55,9 +55,9 @@ await science.run({
|
|
|
55
55
|
".stats": test(async () => {
|
|
56
56
|
const { mammoth } = setup();
|
|
57
57
|
expect(await mammoth.stats()).deep({ count: 0, size: 0 });
|
|
58
|
-
const
|
|
58
|
+
const hashA = await mammoth.write(quickstream([0xC0, 0xFF, 0xEE]));
|
|
59
59
|
expect(await mammoth.stats()).deep({ count: 1, size: 3 });
|
|
60
|
-
const
|
|
60
|
+
const hashB = await mammoth.write(quickstream([0xB0, 0x0B, 0x1E, 0x5]));
|
|
61
61
|
expect(await mammoth.stats()).deep({ count: 2, size: 7 });
|
|
62
62
|
await mammoth.delete(hashA);
|
|
63
63
|
expect(await mammoth.stats()).deep({ count: 1, size: 4 });
|
|
@@ -66,19 +66,19 @@ await science.run({
|
|
|
66
66
|
}),
|
|
67
67
|
".has": test(async () => {
|
|
68
68
|
const { mammoth } = setup();
|
|
69
|
-
const
|
|
69
|
+
const hash = await mammoth.write(blob().stream());
|
|
70
70
|
expect(await mammoth.has(hash)).is(true);
|
|
71
71
|
expect(await mammoth.has(randomId())).is(false);
|
|
72
72
|
}),
|
|
73
73
|
".size": test(async () => {
|
|
74
74
|
const { mammoth } = setup();
|
|
75
75
|
const b = blob();
|
|
76
|
-
const
|
|
76
|
+
const hash = await mammoth.write(b.stream());
|
|
77
77
|
expect((await mammoth.info(hash)).size).is(b.size);
|
|
78
78
|
}),
|
|
79
79
|
".delete": test(async () => {
|
|
80
80
|
const { mammoth } = setup();
|
|
81
|
-
const
|
|
81
|
+
const hash = await mammoth.write(blob().stream());
|
|
82
82
|
await mammoth.delete(hash);
|
|
83
83
|
expect(await mammoth.has(hash)).is(false);
|
|
84
84
|
expect(await collect(mammoth.hashes())).deep([]);
|
|
@@ -89,7 +89,7 @@ await science.run({
|
|
|
89
89
|
}),
|
|
90
90
|
".keys": test(async () => {
|
|
91
91
|
const { mammoth } = setup();
|
|
92
|
-
const
|
|
92
|
+
const hash = await mammoth.write(blob().stream());
|
|
93
93
|
const keys = await collect(mammoth.hashes());
|
|
94
94
|
expect(keys.length).is(1);
|
|
95
95
|
expect(keys[0]).is(hash);
|
package/x/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../s/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,UAAU,CAAA;AAC3B,OAAO,EAAC,EAAE,EAAC,MAAM,aAAa,CAAA;AAC9B,OAAO,EAAC,KAAK,EAAE,OAAO,EAAC,MAAM,WAAW,CAAA;AACxC,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAC,QAAQ,EAAC,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAA;AAEpD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACvE,MAAM,WAAW,GAAG,CAAC,CAAW,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;AAE3E,SAAS,KAAK;IACb,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,CAAA;IACnB,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACvC,OAAO,EAAC,OAAO,EAAC,CAAA;AACjB,CAAC;AAED,MAAM,OAAO,CAAC,GAAG,CAAC;IACjB,cAAc,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAA;QACtB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QAC9D,MAAM,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../s/test.ts"],"names":[],"mappings":"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"}
|