@cloud-cli/d0 1.3.0 → 1.3.1
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/Dockerfile +4 -1
- package/client.mjs +29 -17
- package/dist/index.d.ts +6 -6
- package/dist/index.js +12 -13
- package/package.json +3 -2
package/Dockerfile
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
FROM ghcr.io/cloud-cli/node:latest
|
|
2
|
+
|
|
2
3
|
USER root
|
|
4
|
+
WORKDIR /home/app
|
|
3
5
|
COPY . /home/app
|
|
6
|
+
RUN npm i && npm run build && rm -r src/ node_modules/ && npm cache clean --force
|
|
4
7
|
ENV NODE_ENV=production
|
|
5
|
-
RUN
|
|
8
|
+
RUN npm install --omit=dev && npm cache clean --force
|
package/client.mjs
CHANGED
|
@@ -1,20 +1,32 @@
|
|
|
1
|
-
const baseURL =
|
|
1
|
+
const baseURL = "https://__API_URL__";
|
|
2
2
|
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
});
|
|
3
|
+
export async function query(statement, data, method = "run") {
|
|
4
|
+
const req = await fetch(new URL("/query", baseURL), {
|
|
5
|
+
method: "POST",
|
|
6
|
+
body: JSON.stringify({
|
|
7
|
+
s: statement,
|
|
8
|
+
d: data || null,
|
|
9
|
+
m: method,
|
|
10
|
+
}),
|
|
11
|
+
});
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
if (req.ok) {
|
|
14
|
+
return await req.json();
|
|
15
|
+
}
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
throw new Error(await req.text());
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function get(statement, data) {
|
|
21
|
+
return query(statement, data, "get");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function run(statement, data) {
|
|
25
|
+
return query(statement, data, "run");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function all(statement, data) {
|
|
29
|
+
return query(statement, data, "all");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default { query, get, run, all };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
import { Database } from "better-sqlite3";
|
|
3
|
-
type
|
|
4
|
-
db:
|
|
3
|
+
type Query = {
|
|
4
|
+
db: string;
|
|
5
5
|
request: IncomingMessage;
|
|
6
6
|
response: ServerResponse;
|
|
7
7
|
args: Record<string, string>;
|
|
8
8
|
};
|
|
9
|
-
export declare function getDatabase(file
|
|
10
|
-
export declare function serve():
|
|
11
|
-
export declare function handleRequest(request:
|
|
12
|
-
export declare function onQuery({ db, request, response }:
|
|
9
|
+
export declare function getDatabase(file: string): Database;
|
|
10
|
+
export declare function serve(): Promise<any>;
|
|
11
|
+
export declare function handleRequest(request: IncomingMessage, response: ServerResponse, db: string): Promise<void>;
|
|
12
|
+
export declare function onQuery({ db, request, response }: Query): Promise<void>;
|
|
13
13
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -1,30 +1,28 @@
|
|
|
1
|
-
import { createServer } from "node:http";
|
|
2
1
|
import { readFile } from "node:fs/promises";
|
|
3
2
|
import SQLite from "better-sqlite3";
|
|
4
3
|
import { join } from "node:path";
|
|
4
|
+
import createServer from "@cloud-cli/http";
|
|
5
5
|
const methods = ["all", "run", "get"];
|
|
6
6
|
const baseDomain = process.env.BASE_DOMAIN;
|
|
7
7
|
const dataPath = process.env.DATA_PATH || join(import.meta.dirname, "data");
|
|
8
|
-
export function getDatabase(file
|
|
8
|
+
export function getDatabase(file) {
|
|
9
9
|
const fullPath = join(dataPath, file);
|
|
10
10
|
const db = new SQLite(fullPath);
|
|
11
11
|
db.pragma("journal_mode = WAL");
|
|
12
12
|
return db;
|
|
13
13
|
}
|
|
14
14
|
export function serve() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (baseDomain) {
|
|
15
|
+
if (baseDomain) {
|
|
16
|
+
return createServer((req, res) => {
|
|
18
17
|
const hostname = String(req.headers["x-forwarded-for"] || "");
|
|
19
18
|
const subdomain = hostname.replace(baseDomain, "").replace(".", "");
|
|
20
19
|
if (subdomain) {
|
|
21
|
-
return handleRequest(req, res,
|
|
20
|
+
return handleRequest(req, res, subdomain + ".sqlite3");
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return server;
|
|
22
|
+
res.writeHead(400).end();
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return createServer((req, res) => handleRequest(req, res, "db.sqlite3"));
|
|
28
26
|
}
|
|
29
27
|
export function handleRequest(request, response, db) {
|
|
30
28
|
const url = new URL(request.url, "http://localhost");
|
|
@@ -54,7 +52,8 @@ export async function onQuery({ db, request, response }) {
|
|
|
54
52
|
if (!methods.includes(m)) {
|
|
55
53
|
throw new Error("Invalid method. Must be one of " + methods.join(", "));
|
|
56
54
|
}
|
|
57
|
-
const
|
|
55
|
+
const sqlite = getDatabase(db);
|
|
56
|
+
const runner = sqlite.prepare(s.trim());
|
|
58
57
|
const result = d ? runner[m](d) : runner[m]();
|
|
59
58
|
response.end(JSON.stringify(result));
|
|
60
59
|
}
|
|
@@ -71,7 +70,7 @@ async function getFile() {
|
|
|
71
70
|
return file;
|
|
72
71
|
}
|
|
73
72
|
async function onEsModule({ request, response }) {
|
|
74
|
-
const hostname = request.headers["x-forwarded-for"];
|
|
73
|
+
const hostname = String(request.headers["x-forwarded-for"]);
|
|
75
74
|
const code = await getFile();
|
|
76
75
|
response
|
|
77
76
|
.writeHead(200, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloud-cli/d0",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"access": "public"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"better-sqlite3": "^11.0.0"
|
|
21
|
+
"better-sqlite3": "^11.0.0",
|
|
22
|
+
"@cloud-cli/http": "^1.0.0"
|
|
22
23
|
},
|
|
23
24
|
"devDependencies": {
|
|
24
25
|
"@cloud-cli/prettier-config": "^1.0.0",
|