aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-06-10 19:07:50 +0800
committerYuqian Yang <crupest@crupest.life>2025-06-10 19:07:50 +0800
commit417a389ecdaddcf3fade720d31e717f299ed11b8 (patch)
tree3e5fa703d7068e774c4ddd17fdcddf463a98caba
parent8b591500e6d2dddb77a6a5089a2c0f1fb9ce364b (diff)
downloadcrupest-417a389ecdaddcf3fade720d31e717f299ed11b8.tar.gz
crupest-417a389ecdaddcf3fade720d31e717f299ed11b8.tar.bz2
crupest-417a389ecdaddcf3fade720d31e717f299ed11b8.zip
chore(deno): prettier all.dev
-rw-r--r--deno/base/config.ts1
-rw-r--r--deno/base/log.ts1
-rw-r--r--deno/deno.json2
-rw-r--r--deno/mail-relay/aws/deliver.ts6
-rw-r--r--deno/mail-relay/db.ts45
-rw-r--r--deno/mail-relay/dovecot.ts15
-rw-r--r--deno/mail-relay/dumb-smtp-server.ts9
-rw-r--r--deno/mail-relay/mail.test.ts26
-rw-r--r--deno/mail-relay/mail.ts56
-rw-r--r--deno/service-manager/deno.json1
-rw-r--r--deno/service-manager/template.ts8
11 files changed, 85 insertions, 85 deletions
diff --git a/deno/base/config.ts b/deno/base/config.ts
index 98722f6..8fce1d8 100644
--- a/deno/base/config.ts
+++ b/deno/base/config.ts
@@ -91,4 +91,3 @@ export class ConfigProvider<K extends string> {
.join("\n");
}
}
-
diff --git a/deno/base/log.ts b/deno/base/log.ts
index 1a4942d..d0a5b80 100644
--- a/deno/base/log.ts
+++ b/deno/base/log.ts
@@ -161,4 +161,3 @@ export class Logger {
};
}
}
-
diff --git a/deno/deno.json b/deno/deno.json
index 71ad398..2125808 100644
--- a/deno/deno.json
+++ b/deno/deno.json
@@ -1,5 +1,5 @@
{
- "workspace": [ "./base", "./service-manager", "./mail-relay" ],
+ "workspace": ["./base", "./service-manager", "./mail-relay"],
"tasks": {
"compile:mail-relay": "deno task --cwd=mail-relay compile",
"compile:service-manager": "deno task --cwd=service-manager compile"
diff --git a/deno/mail-relay/aws/deliver.ts b/deno/mail-relay/aws/deliver.ts
index 3e1f162..9950e37 100644
--- a/deno/mail-relay/aws/deliver.ts
+++ b/deno/mail-relay/aws/deliver.ts
@@ -45,14 +45,12 @@ export class AwsMailDeliverer extends SyncMailDeliverer {
if (res.MessageId == null) {
this.#logger.warn("Aws send-email returns no message id.");
} else {
- context.result.awsMessageId =
- `${res.MessageId}@${this.#aws.region}.amazonses.com`;
+ context.result.awsMessageId = `${res.MessageId}@${this.#aws.region}.amazonses.com`;
}
context.result.recipients.set("*", {
kind: "done",
- message:
- `Successfully called aws send-email, message id ${context.result.awsMessageId}.`,
+ message: `Successfully called aws send-email, message id ${context.result.awsMessageId}.`,
});
} catch (cause) {
context.result.recipients.set("*", {
diff --git a/deno/mail-relay/db.ts b/deno/mail-relay/db.ts
index 9b05e32..807ecf6 100644
--- a/deno/mail-relay/db.ts
+++ b/deno/mail-relay/db.ts
@@ -20,19 +20,20 @@ class SqliteStatementAdapter implements SqliteStatement {
}
all(parameters: readonly unknown[]): unknown[] {
- return this.stmt.all(...parameters as sqlite.BindValue[]);
+ return this.stmt.all(...(parameters as sqlite.BindValue[]));
}
iterate(parameters: readonly unknown[]): IterableIterator<unknown> {
- return this.stmt.iter(...parameters as sqlite.BindValue[]);
+ return this.stmt.iter(...(parameters as sqlite.BindValue[]));
}
- run(
- parameters: readonly unknown[],
- ): { changes: number | bigint; lastInsertRowid: number | bigint } {
+ run(parameters: readonly unknown[]): {
+ changes: number | bigint;
+ lastInsertRowid: number | bigint;
+ } {
const { db } = this.stmt;
const totalChangesBefore = db.totalChanges;
- const changes = this.stmt.run(...parameters as sqlite.BindValue[]);
+ const changes = this.stmt.run(...(parameters as sqlite.BindValue[]));
return {
changes: totalChangesBefore === db.totalChanges ? 0 : changes,
lastInsertRowid: db.lastInsertRowId,
@@ -52,8 +53,7 @@ class SqliteDatabaseAdapter implements SqliteDatabase {
}
}
-export class DbError extends Error {
-}
+export class DbError extends Error {}
interface AwsMessageIdMapTable {
id: Generated<number>;
@@ -100,9 +100,9 @@ export class DbService {
constructor(public readonly path: string) {
this.#db = new sqlite.Database(path);
this.#kysely = new Kysely<Database>({
- dialect: new SqliteDialect(
- { database: new SqliteDatabaseAdapter(this.#db) },
- ),
+ dialect: new SqliteDialect({
+ database: new SqliteDatabaseAdapter(this.#db),
+ }),
});
this.#migrator = new Migrator({
db: this.#kysely,
@@ -121,24 +121,27 @@ export class DbService {
async addMessageIdMap(
mail: Insertable<AwsMessageIdMapTable>,
): Promise<number> {
- const inserted = await this.#kysely.insertInto("aws_message_id_map").values(
- mail,
- ).executeTakeFirstOrThrow();
+ const inserted = await this.#kysely
+ .insertInto("aws_message_id_map")
+ .values(mail)
+ .executeTakeFirstOrThrow();
return Number(inserted.insertId!);
}
async messageIdToAws(messageId: string): Promise<string | null> {
- const row = await this.#kysely.selectFrom("aws_message_id_map").where(
- "message_id",
- "=",
- messageId,
- ).select("aws_message_id").executeTakeFirst();
+ const row = await this.#kysely
+ .selectFrom("aws_message_id_map")
+ .where("message_id", "=", messageId)
+ .select("aws_message_id")
+ .executeTakeFirst();
return row?.aws_message_id ?? null;
}
async messageIdFromAws(awsMessageId: string): Promise<string | null> {
- const row = await this.#kysely.selectFrom("aws_message_id_map")
- .where("aws_message_id", "=", awsMessageId).select("message_id")
+ const row = await this.#kysely
+ .selectFrom("aws_message_id_map")
+ .where("aws_message_id", "=", awsMessageId)
+ .select("message_id")
.executeTakeFirst();
return row?.message_id ?? null;
}
diff --git a/deno/mail-relay/dovecot.ts b/deno/mail-relay/dovecot.ts
index cb63766..124a82b 100644
--- a/deno/mail-relay/dovecot.ts
+++ b/deno/mail-relay/dovecot.ts
@@ -2,11 +2,7 @@ import { basename } from "@std/path";
import { Logger } from "@crupest/base/log";
-import {
- Mail,
- MailDeliverContext,
- MailDeliverer,
-} from "./mail.ts";
+import { Mail, MailDeliverContext, MailDeliverer } from "./mail.ts";
export class DovecotMailDeliverer extends MailDeliverer {
readonly name = "dovecot";
@@ -38,9 +34,7 @@ export class DovecotMailDeliverer extends MailDeliverer {
for (const recipient of recipients) {
try {
const commandArgs = ["-d", recipient];
- this.logger.info(
- `Run ${ldaBinName} ${commandArgs.join(" ")}...`,
- );
+ this.logger.info(`Run ${ldaBinName} ${commandArgs.join(" ")}...`);
const ldaCommand = new Deno.Command(ldaPath, {
args: commandArgs,
@@ -50,9 +44,8 @@ export class DovecotMailDeliverer extends MailDeliverer {
});
const ldaProcess = ldaCommand.spawn();
- using logFiles = await this.logger.createExternalLogStreamsForProgram(
- ldaBinName,
- );
+ using logFiles =
+ await this.logger.createExternalLogStreamsForProgram(ldaBinName);
ldaProcess.stdout.pipeTo(logFiles.stdout);
ldaProcess.stderr.pipeTo(logFiles.stderr);
diff --git a/deno/mail-relay/dumb-smtp-server.ts b/deno/mail-relay/dumb-smtp-server.ts
index 66c2f7c..15cafa5 100644
--- a/deno/mail-relay/dumb-smtp-server.ts
+++ b/deno/mail-relay/dumb-smtp-server.ts
@@ -107,10 +107,7 @@ export class DumbSmtpServer {
}
}
- async serve(options: {
- hostname: string,
- port: number
- }) {
+ async serve(options: { hostname: string; port: number }) {
const listener = Deno.listen(options);
this.#responses = createResponses(options.hostname, options.port);
this.#logger.info(
@@ -121,7 +118,9 @@ export class DumbSmtpServer {
try {
await this.#handleConnection(conn);
} catch (cause) {
- this.#logger.error("One smtp connection session throws an error " + cause);
+ this.#logger.error(
+ "One smtp connection session throws an error " + cause,
+ );
}
}
}
diff --git a/deno/mail-relay/mail.test.ts b/deno/mail-relay/mail.test.ts
index 6f3cd13..09cf8eb 100644
--- a/deno/mail-relay/mail.test.ts
+++ b/deno/mail-relay/mail.test.ts
@@ -67,33 +67,31 @@ describe("Mail", () => {
});
it("simple parse date", () => {
- expect(new Mail(mockMailStr).startSimpleParse().sections().headers().date())
- .toEqual(new Date(mockDate));
+ expect(
+ new Mail(mockMailStr).startSimpleParse().sections().headers().date(),
+ ).toEqual(new Date(mockDate));
});
it("simple parse headers", () => {
expect(
new Mail(mockMailStr).startSimpleParse().sections().headers().fields,
- ).toEqual(mockHeaders.map(
- (h) => [h[0], " " + h[1].replaceAll("\n", "")],
- ));
+ ).toEqual(mockHeaders.map((h) => [h[0], " " + h[1].replaceAll("\n", "")]));
});
it("parse recipients", () => {
const mail = new Mail(mockMailStr);
- expect([...mail.startSimpleParse().sections().headers().recipients()])
- .toEqual([
- ...mockToAddresses,
- mockCcAddress,
- ]);
+ expect([
+ ...mail.startSimpleParse().sections().headers().recipients(),
+ ]).toEqual([...mockToAddresses, mockCcAddress]);
expect([
...mail.startSimpleParse().sections().headers().recipients({
domain: "example.com",
}),
- ]).toEqual([
- ...mockToAddresses,
- mockCcAddress,
- ].filter((a) => a.endsWith("example.com")));
+ ]).toEqual(
+ [...mockToAddresses, mockCcAddress].filter((a) =>
+ a.endsWith("example.com"),
+ ),
+ );
});
it("find all addresses", () => {
diff --git a/deno/mail-relay/mail.ts b/deno/mail-relay/mail.ts
index 8c2e067..8c977fe 100644
--- a/deno/mail-relay/mail.ts
+++ b/deno/mail-relay/mail.ts
@@ -4,12 +4,15 @@ import emailAddresses from "email-addresses";
import { Logger } from "@crupest/base/log";
-class MailSimpleParseError extends Error { }
+class MailSimpleParseError extends Error {}
class MailSimpleParsedHeaders {
- #logger
+ #logger;
- constructor(logger: Logger | undefined, public fields: [key:string, value: string][]) {
+ constructor(
+ logger: Logger | undefined,
+ public fields: [key: string, value: string][],
+ ) {
this.#logger = logger;
}
@@ -71,10 +74,10 @@ class MailSimpleParsedSections {
eol: string;
sep: string;
- #logger
+ #logger;
constructor(logger: Logger | undefined, raw: string) {
- this.#logger = logger
+ this.#logger = logger;
const twoEolMatch = raw.match(/(\r?\n)(\r?\n)/);
if (twoEolMatch == null) {
@@ -96,7 +99,7 @@ class MailSimpleParsedSections {
}
headers(): MailSimpleParsedHeaders {
- const headers = [] as [key:string, value: string][];
+ const headers = [] as [key: string, value: string][];
let field: string | null = null;
let lineNumber = 1;
@@ -105,9 +108,7 @@ class MailSimpleParsedSections {
if (field == null) return;
const sepPos = field.indexOf(":");
if (sepPos === -1) {
- throw new MailSimpleParseError(
- `No ':' in the header line: ${field}`,
- );
+ throw new MailSimpleParseError(`No ':' in the header line: ${field}`);
}
headers.push([field.slice(0, sepPos).trim(), field.slice(sepPos + 1)]);
field = null;
@@ -149,8 +150,8 @@ export class Mail {
}
simpleFindAllAddresses(): string[] {
- const re = /,?\<?([a-z0-9_'+\-\.]+\@[a-z0-9_'+\-\.]+)\>?,?/ig
- return [...this.raw.matchAll(re)].map(m => m[1])
+ const re = /,?\<?([a-z0-9_'+\-\.]+\@[a-z0-9_'+\-\.]+)\>?,?/gi;
+ return [...this.raw.matchAll(re)].map((m) => m[1]);
}
}
@@ -169,16 +170,21 @@ export class MailDeliverResult {
constructor(public mail: Mail) {}
hasError(): boolean {
- return this.recipients.size === 0 ||
- this.recipients.values().some((r) => r.kind !== "done");
+ return (
+ this.recipients.size === 0 ||
+ this.recipients.values().some((r) => r.kind !== "done")
+ );
}
[Symbol.for("Deno.customInspect")]() {
return [
`message: ${this.message}`,
- ...this.recipients.entries().map(([recipient, result]) =>
- `${recipient} [${result.kind}]: ${result.message}`
- ),
+ ...this.recipients
+ .entries()
+ .map(
+ ([recipient, result]) =>
+ `${recipient} [${result.kind}]: ${result.message}`,
+ ),
].join("\n");
}
}
@@ -204,7 +210,7 @@ export abstract class MailDeliverer {
preHooks: MailDeliverHook[] = [];
postHooks: MailDeliverHook[] = [];
- constructor(protected readonly logger: Logger) { }
+ constructor(protected readonly logger: Logger) {}
protected abstract doDeliver(
mail: Mail,
@@ -248,13 +254,19 @@ export abstract class MailDeliverer {
export abstract class SyncMailDeliverer extends MailDeliverer {
#last: Promise<void> = Promise.resolve();
- override async deliver(
- options: { mail: Mail; recipients?: string[] },
- ): Promise<MailDeliverResult> {
- this.logger.info("The mail deliverer is sync. Wait for last delivering done...");
+ override async deliver(options: {
+ mail: Mail;
+ recipients?: string[];
+ }): Promise<MailDeliverResult> {
+ this.logger.info(
+ "The mail deliverer is sync. Wait for last delivering done...",
+ );
await this.#last;
const result = super.deliver(options);
- this.#last = result.then(() => {}, () => {});
+ this.#last = result.then(
+ () => {},
+ () => {},
+ );
return result;
}
}
diff --git a/deno/service-manager/deno.json b/deno/service-manager/deno.json
index 2ba8394..9f30853 100644
--- a/deno/service-manager/deno.json
+++ b/deno/service-manager/deno.json
@@ -1,4 +1,3 @@
-
{
"version": "0.1.0",
"tasks": {
diff --git a/deno/service-manager/template.ts b/deno/service-manager/template.ts
index be6cb60..0b043a1 100644
--- a/deno/service-manager/template.ts
+++ b/deno/service-manager/template.ts
@@ -1,9 +1,9 @@
import { dirname, join, relative } from "@std/path";
import { copySync, existsSync, walkSync } from "@std/fs";
import { parse } from "@std/dotenv";
-import { distinct } from "@std/collections"
+import { distinct } from "@std/collections";
// @ts-types="npm:@types/mustache"
-import Mustache from "mustache"
+import Mustache from "mustache";
Mustache.tags = ["@@", "@@"];
Mustache.escape = (value) => String(value);
@@ -21,7 +21,7 @@ function getVariableKeys(original: string): string[] {
}
export function loadVariables(files: string[]): Record<string, string> {
- const vars: Record<string, string> = {}
+ const vars: Record<string, string> = {};
for (const file of files) {
const text = Deno.readTextFileSync(file);
for (const [key, valueText] of Object.entries(parse(text))) {
@@ -38,7 +38,7 @@ export function loadVariables(files: string[]): Record<string, string> {
return vars;
}
-const TEMPLATE_FILE_EXT = ".template"
+const TEMPLATE_FILE_EXT = ".template";
export class TemplateDir {
templates: { path: string; ext: string; text: string; vars: string[] }[] = [];