summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-03-25 06:42:35 -0300
committerEuAndreh <eu@euandre.org>2024-03-25 06:44:18 -0300
commit077b81b2bd2c0d418635b265b35f582d68cec16a (patch)
treeed3c928ea3b1d5df539b6e1902ab418caa937672 /src
parentsrc/hero.mjs: Retire code (diff)
downloadpapod-077b81b2bd2c0d418635b265b35f582d68cec16a.tar.gz
papod-077b81b2bd2c0d418635b265b35f582d68cec16a.tar.xz
Node.js -> Go
Diffstat (limited to 'src')
-rw-r--r--src/accretion.mjs42
-rw-r--r--src/api.mjs20
-rwxr-xr-xsrc/bin.mjs4
-rw-r--r--src/cmd/papo.go28
-rw-r--r--src/db.mjs57
-rw-r--r--src/escape.mjs14
-rw-r--r--src/ircd.mjs19
-rw-r--r--src/package.json3
-rw-r--r--src/papo.go8
-rw-r--r--src/sqlite.cjs1
-rw-r--r--src/utils.mjs105
-rw-r--r--src/web.mjs38
12 files changed, 36 insertions, 303 deletions
diff --git a/src/accretion.mjs b/src/accretion.mjs
deleted file mode 100644
index dd3372c..0000000
--- a/src/accretion.mjs
+++ /dev/null
@@ -1,42 +0,0 @@
-import assert from "node:assert/strict";
-import fs from "node:fs";
-import path from "node:path";
-import url from "node:url";
-
-import sqlite from "./sqlite.cjs";
-
-import * as u from "./utils.mjs";
-
-
-const DIRNAME = path.dirname(url.fileURLToPath(import.meta.url));
-export const MIGRATIONS_DIR = DIRNAME + "/sql/migrations/";
-
-export const runMigrations = async (logFn, db) => {
- assert(db);
-
- await db.exec(`
- BEGIN TRANSACTION;
- CREATE TABLE IF NOT EXISTS migrations (
- filename TEXT NOT NULL PRIMARY KEY
- );
- COMMIT TRANSACTION;
- `);
-
- const done = [...(await db.all("SELECT filename FROM migrations;"))]
- .map(row => row.filename);
- const allFiles = fs.readdirSync(MIGRATIONS_DIR, "UTF-8");
- const pending = u.difference(new Set(allFiles), new Set(done));
- const sortedPending = [...pending].sort(u.strSortFn);
-
- for (const filename of sortedPending) {
- logFn({ log: "exec-migration", filename });
- const sql = fs.readFileSync(MIGRATIONS_DIR + filename, "UTF-8");
- await db.exec("BEGIN TRANSACTION;");
- await db.exec(sql);
- await db.run(
- "INSERT INTO migrations (filename) VALUES ($filename);",
- { $filename: filename },
- );
- await db.exec("COMMIT TRANSACTION;")
- }
-};
diff --git a/src/api.mjs b/src/api.mjs
deleted file mode 100644
index 31bb09e..0000000
--- a/src/api.mjs
+++ /dev/null
@@ -1,20 +0,0 @@
-import process from "node:process";
-
-import * as ircd from "./ircd.mjs";
-import * as web from "./web.mjs";
-
-const SUBCOMMANDS = {
- ircd: ircd.app,
- web: web.app,
-};
-
-export const main = async () => {
- const [_node, _file, cmdName, ...args] = process.argv;
- const cmd = SUBCOMMANDS[cmdName];
- if (cmd === undefined) {
- console.error("Usage: papo SUBCOMMAND [OPTIONS]");
- return process.exit(2);
- }
-
- await cmd(...args);
-};
diff --git a/src/bin.mjs b/src/bin.mjs
deleted file mode 100755
index e79904f..0000000
--- a/src/bin.mjs
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env node
-import * as api from "./api.mjs";
-
-api.main();
diff --git a/src/cmd/papo.go b/src/cmd/papo.go
new file mode 100644
index 0000000..301e4b0
--- /dev/null
+++ b/src/cmd/papo.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+ "database/sql"
+ "fmt"
+ "log"
+ "os"
+
+ _ "github.com/mattn/go-sqlite3"
+ "euandre.org/papo/src"
+)
+
+
+func main() {
+ os.Remove("./foo.db")
+
+ db, err := sql.Open("sqlite3", "./foo.db")
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer db.Close()
+
+ message := papo.Hello("Xablau")
+ fmt.Println(message)
+ fmt.Println(message)
+ message = papo.Hello("Xupliu")
+ fmt.Println(message)
+}
diff --git a/src/db.mjs b/src/db.mjs
deleted file mode 100644
index 7d6c6c5..0000000
--- a/src/db.mjs
+++ /dev/null
@@ -1,57 +0,0 @@
-import assert from "node:assert/strict";
-import fs from "node:fs";
-import path from "node:path";
-import process from "node:process";
-import url from "node:url";
-import util from "node:util";
-
-import sqlite from "./sqlite.cjs";
-
-import * as u from "./utils.mjs";
-import * as accretion from "./accretion.mjs";
-
-
-export const promisifyDb = dbHandle => ({
- ref: dbHandle,
- all: util.promisify((...args) => dbHandle.all(...args)),
- exec: util.promisify((...args) => dbHandle.exec(...args)),
- run: util.promisify((...args) => dbHandle.run(...args)),
- each: (...args) =>
- new Promise((resolve, reject) => {
- const cb = args[args.length - 1];
- dbHandle.each(
- ...args.slice(0, args.length - 1),
- (err, row) => err ? reject(err) : cb(row),
- (err, data) => err ? reject(err) : resolve(data),
- );
- }),
- prepare: (...args) =>
- new Promise((resolve, reject) => {
- const mkStmt = stmtRef => ({
- ref: stmtRef,
- run: util.promisify((...args) => stmtRef.run(...args)),
- finalize: util.promisify((...args) => stmtRef.finalize(...args)),
- });
- const ref = dbHandle.prepare(
- ...args,
- err => err ? reject(err) : resolve(mkStmt(ref)),
- );
- }),
-});
-
-export const open = (...args) =>
- new Promise((resolve, reject) => {
- const dbName = args[0];
- assert(dbName);
- const ref = promisifyDb(new sqlite.Database(
- ...args,
- err => err ? reject(err) : resolve(ref),
- ));
- });
-
-export let handle = null;
-
-export const init = async (logFn, dbName = process.env.PAPO_DB_PATH || ":memory:") => {
- handle = await open(dbName);
- await accretion.runMigrations(logFn, handle);
-};
diff --git a/src/escape.mjs b/src/escape.mjs
deleted file mode 100644
index 78e08f8..0000000
--- a/src/escape.mjs
+++ /dev/null
@@ -1,14 +0,0 @@
-const FROM = /[&<>'"]/g;
-
-const ESCAPES = {
- '&': '&amp;',
- '<': '&lt;',
- '>': '&gt;',
- "'": '&#39;',
- '"': '&quot;'
-};
-
-const mappingFn = c => ESCAPES[c];
-
-export const escape = s =>
- String.prototype.replace.call(s, FROM, mappingFn);
diff --git a/src/ircd.mjs b/src/ircd.mjs
deleted file mode 100644
index 1924350..0000000
--- a/src/ircd.mjs
+++ /dev/null
@@ -1,19 +0,0 @@
-import fs from "node:fs";
-import net from "node:net";
-
-import * as hero from "./hero.mjs";
-
-
-const server = net.createServer(socket => {
- socket.write("olar\r\n");
- socket.pipe(socket);
-});
-
-export const app = async path => {
- if (fs.existsSync(path)) {
- fs.unlinkSync(path);
- }
- server.listen(path, () => {
- hero.log.info({ type: "starting-server", path });
- });
-};
diff --git a/src/package.json b/src/package.json
deleted file mode 100644
index fb3cb61..0000000
--- a/src/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "main": "api.mjs"
-}
diff --git a/src/papo.go b/src/papo.go
new file mode 100644
index 0000000..d83ac58
--- /dev/null
+++ b/src/papo.go
@@ -0,0 +1,8 @@
+package papo
+
+import "fmt"
+
+func Hello(name string) string {
+ message := fmt.Sprintf("Hi, %v. Welcome!", name)
+ return message
+}
diff --git a/src/sqlite.cjs b/src/sqlite.cjs
deleted file mode 100644
index a1b8ab7..0000000
--- a/src/sqlite.cjs
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require("sqlite3");
diff --git a/src/utils.mjs b/src/utils.mjs
deleted file mode 100644
index a3b36b3..0000000
--- a/src/utils.mjs
+++ /dev/null
@@ -1,105 +0,0 @@
-import util from "node:util";
-
-
-export const eq = util.isDeepStrictEqual;
-
-export const keys = (ks, obj) =>
- ks.reduce(
- (ret, k) =>
- obj.hasOwnProperty(k) ? {...ret, [k]: obj[k]} : ret,
- {},
- );
-
-export const difference = (a, b) => {
- const diff = new Set(a);
- for (const el of b) {
- diff.delete(el);
- }
- return diff;
-};
-
-export const assocIn = (obj, path, value) =>
- path.length === 0 ? obj :
- path.length === 1 ? { ...obj, [path[0]]: value } :
- {
- ...obj,
- [path[0]]: assocIn(
- (obj[path[0]] || {}),
- path.slice(1),
- value
- )
- };
-
-export const dissoc = (obj, key) => {
- const ret = { ...obj };
- delete ret[key]
- return ret;
-};
-
-export const getIn = (obj, path) =>
- path.length === 0 ? obj :
- getIn(obj?.[path[0]], path.slice(1));
-
-export const findFirst = (arr, fn) => {
- for (const x of arr) {
- const ret = fn(x);
- if (ret) {
- return ret;
- }
- }
-
- return null;
-};
-
-export const partial = (fn, ...startArgs) =>
- (...endArgs) =>
- fn(...startArgs, ...endArgs);
-
-export const strSortFn = (a, b) => a.localeCompare(b, "POSIX");
-
-export const undefinedAsNull = x => x === undefined ? null : x;
-
-export const first = a => a[0];
-export const rest = a => a.slice(1);
-export const butlast = a => a.slice(a, a.length - 1);
-export const last = a => a[a.length - 1];
-
-export const take = function*(n, gen) {
- let i = 0n;
- for (const x of gen) {
- if (i >= n) {
- break;
- }
- i++;
- yield x;
- }
-};
-
-export const range = function*(x, y, step = 1n) {
- if (x === undefined) {
- let i = 0n;
- while (true) {
- yield i++;
- }
- }
- const [from, to] = y === undefined ?
- [0n, x] :
- [x, y];
- const fromn = BigInt(from);
- const ton = BigInt(to);
- const stepn = BigInt(step);
- if (stepn === 0n) {
- while (true) {
- yield fromn;
- }
- }
- if (step < 0n) {
- for (let i = fromn; i > ton; i+= stepn) {
- yield i;
- }
- } else {
- for (let i = fromn; i < ton; i += stepn) {
- yield i;
- }
- }
-};
diff --git a/src/web.mjs b/src/web.mjs
deleted file mode 100644
index 69be59c..0000000
--- a/src/web.mjs
+++ /dev/null
@@ -1,38 +0,0 @@
-import * as u from "./utils.mjs";
-import * as hero from "./hero.mjs";
-
-
-const name = "papo";
-
-const newConnection = (req) => {
- const { socket, websocket } = req;
- websocket.onmessage(message => {
- console.log({ message });
- });
- // console.log({ req, socket, websocket });
- // websocket.onclose(() => console.log("closed"));
- // websocket.onerror(() => console.log("errored"));
- /*
- req.socket.on("data", data => {
- console.log("antes");
- console.log({ data });
- console.log({ data: new Uint8Array(data) });
- console.log("depois");
- });
- */
- // ws.on("error", console.error);
- // ws.on("message", x => console.log(x.toString()));
- // ws.send("hello from the server");
-};
-
-const routes = [
- [ "WEBSOCKET", "/api/socket", newConnection ],
-];
-
-export const app = async (socket, pipe) =>
- await hero.buildServer({
- name,
- routes,
- socket,
- pipe,
- }).start();