@vibes.diy/api-sql 0.0.0-smoke-85ffc167-1775073098

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/sql-peer.js ADDED
@@ -0,0 +1,114 @@
1
+ import { Option, uint8array2stream, exception2Result, concatUint8, Result } from "@adviser/cement";
2
+ import { eq } from "drizzle-orm/sql/expressions";
3
+ class SQLPeerStream {
4
+ owner;
5
+ chunks = [];
6
+ constructor(owner) {
7
+ this.owner = owner;
8
+ }
9
+ write(chunk) {
10
+ this.chunks.push(chunk);
11
+ if (this.chunks.reduce((acc, curr) => acc + curr.length, 0) > this.owner.cutoffSize) {
12
+ return Promise.reject(new Error("SQLitePeerStream: max size exceeded (4KB)"));
13
+ }
14
+ return Promise.resolve();
15
+ }
16
+ async cancel() {
17
+ }
18
+ async close() {
19
+ }
20
+ async commit() {
21
+ const now = new Date();
22
+ const created = now.toISOString();
23
+ const { cid: assetID } = await this.owner.cider.getCID();
24
+ const res = await exception2Result(() => this.owner.db
25
+ .insert(this.owner.assets)
26
+ .values({
27
+ assetId: assetID,
28
+ content: concatUint8(...this.chunks),
29
+ created,
30
+ })
31
+ .onConflictDoNothing());
32
+ if (res.isErr()) {
33
+ return Result.Err(res);
34
+ }
35
+ return Result.Ok({
36
+ url: `${this.owner.flavour}://Assets/${assetID}`,
37
+ });
38
+ }
39
+ }
40
+ export class SQLPeer {
41
+ db;
42
+ assets;
43
+ cider;
44
+ cutoffSize;
45
+ flavour;
46
+ constructor(flavour, db, assets, cider, cutoffSize) {
47
+ this.flavour = flavour;
48
+ this.db = db;
49
+ this.assets = assets;
50
+ this.cider = cider;
51
+ this.cutoffSize = cutoffSize;
52
+ }
53
+ begin() {
54
+ return Promise.resolve(Result.Ok(new SQLPeerStream(this)));
55
+ }
56
+ }
57
+ export class SQLPeerFetch {
58
+ db;
59
+ assets;
60
+ flavour;
61
+ constructor(flavour, db, assets) {
62
+ this.flavour = flavour;
63
+ this.db = db;
64
+ this.assets = assets;
65
+ }
66
+ async fetch(url) {
67
+ let compatProtocol = url.protocol;
68
+ if (compatProtocol === "sql:") {
69
+ compatProtocol = this.flavour + ":";
70
+ }
71
+ if (compatProtocol !== `${this.flavour}:`) {
72
+ return Promise.resolve(Option.None());
73
+ }
74
+ const assetId = url.pathname.slice("Assets/".length);
75
+ const rAsset = await exception2Result(() => this.db
76
+ .select()
77
+ .from(this.assets)
78
+ .where(eq(this.assets.assetId, assetId))
79
+ .limit(1)
80
+ .then((r) => r[0]));
81
+ if (rAsset.isErr()) {
82
+ return Option.Some({
83
+ type: "fetch.err",
84
+ url: url.toString(),
85
+ error: rAsset.Err(),
86
+ });
87
+ }
88
+ const asset = rAsset.Ok();
89
+ if (!asset) {
90
+ return Option.Some({
91
+ type: "fetch.notfound",
92
+ url: url.toString(),
93
+ });
94
+ }
95
+ return Option.Some({
96
+ type: "fetch.ok",
97
+ url: url.toString(),
98
+ data: uint8array2stream(asset.content),
99
+ });
100
+ }
101
+ }
102
+ export function createSQLPeer(params) {
103
+ switch (params.flavour) {
104
+ case "sqlite":
105
+ case "pg":
106
+ return {
107
+ fetch: new SQLPeerFetch(params.flavour, params.db, params.assets),
108
+ factory: (cider) => new SQLPeer(params.flavour, params.db, params.assets, cider, 10 * 1024 * 1024),
109
+ };
110
+ default:
111
+ throw new Error(`Unsupported DB flavour: ${params.flavour}`);
112
+ }
113
+ }
114
+ //# sourceMappingURL=sql-peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-peer.js","sourceRoot":"","sources":["../jsr/sql-peer.ts"],"names":[],"mappings":"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"}