summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/either.ts48
-rw-r--r--utils/env.ts5
-rw-r--r--utils/isObject.ts2
-rw-r--r--utils/mod.ts8
-rw-r--r--utils/prepend.ts4
-rw-r--r--utils/run.ts40
-rw-r--r--utils/trace.ts130
-rw-r--r--utils/validate_identifier.ts17
8 files changed, 0 insertions, 254 deletions
diff --git a/utils/either.ts b/utils/either.ts
deleted file mode 100644
index 10e4f43..0000000
--- a/utils/either.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-export interface IEither<E, T> {
- ok?: T;
- err?: E;
- mapBoth: <Ee, Tt>(
- errBranch: (e: E) => Ee,
- okBranch: (o: T) => Tt,
- ) => IEither<Ee, Tt>;
- mapRight: <Tt>(mapper: (t: T) => Tt) => Either<E, Tt>;
- mapLeft: <Ee>(mapper: (e: E) => Ee) => Either<Ee, T>;
- flatMap: <Ee extends E, Tt>(
- mapper: (e: T) => Either<Ee, Tt>,
- ) => Either<Ee, Tt>;
-}
-
-export class Either<E, T> implements IEither<E, T> {
- private constructor(readonly err?: E, readonly ok?: T) {}
-
- public mapBoth<Ee, Tt>(
- errBranch: (e: E) => Ee,
- okBranch: (t: T) => Tt,
- ): Either<Ee, Tt> {
- if (this.err) return Either.left(errBranch(this.err));
- return Either.right(okBranch(this.ok!));
- }
-
- public flatMap<Ee extends E, Tt>(mapper: (t: T) => Either<Ee, Tt>) {
- if (this.ok) return mapper(this.ok);
- return this;
- }
-
- public mapRight<Tt>(mapper: (t: T) => Tt): Either<E, Tt> {
- if (this.ok) return Either.right(mapper(this.ok));
- return Either.left(this.err!);
- }
-
- public mapLeft<Ee>(mapper: (e: E) => Ee): Either<Ee, T> {
- if (this.err) return Either.left(mapper(this.err));
- return Either.right(this.ok!);
- }
-
- static left<E, T>(e: E) {
- return new Either<E, T>(e);
- }
-
- static right<E, T>(t: T) {
- return new Either<E, T>(undefined, t);
- }
-}
diff --git a/utils/env.ts b/utils/env.ts
deleted file mode 100644
index 31b7ccf..0000000
--- a/utils/env.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export const getRequiredEnv = (name: string): string => {
- const value = Deno.env.get(name);
- if (!value) throw new Error(`environment variable "${name}" is required D:`);
- return value;
-};
diff --git a/utils/isObject.ts b/utils/isObject.ts
deleted file mode 100644
index 73f7f80..0000000
--- a/utils/isObject.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export const isObject = (o: unknown): o is object =>
- typeof o === "object" && !Array.isArray(o) && !!o;
diff --git a/utils/mod.ts b/utils/mod.ts
deleted file mode 100644
index d8cb526..0000000
--- a/utils/mod.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export * from "./isObject.ts";
-export * from "./trace.ts";
-export * from "./either.ts";
-export * from "./env.ts";
-export * from "./run.ts";
-export * from "./secret.ts";
-export * from "./validate_identifier.ts";
-export * from "./prepend.ts";
diff --git a/utils/prepend.ts b/utils/prepend.ts
deleted file mode 100644
index 9b77aff..0000000
--- a/utils/prepend.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export const prependWith = (arr: string[], prep: string) =>
- Array(arr.length * 2).fill(0)
- .map((_, i) => i % 2 === 0)
- .map((isPrep, i) => isPrep ? prep : arr[i]);
diff --git a/utils/run.ts b/utils/run.ts
deleted file mode 100644
index 9093863..0000000
--- a/utils/run.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Either, type Traceable } from "./mod.ts";
-
-export class ProcessError extends Error {}
-export const getStdout = async (
- { item: cmd, logger: _logger }: Traceable<string[] | string>,
- options: Deno.CommandOptions = {},
-): Promise<Either<ProcessError, string>> => {
- const logger = _logger.addTracer(() => "[getStdout]");
-
- logger.log(`:> im gonna run this command!`, cmd);
- const [exec, ...args] = (typeof cmd === "string") ? cmd.split(" ") : cmd;
- const command = new Deno.Command(exec, {
- args,
- stdout: "piped",
- stderr: "piped",
- ...options,
- });
-
- try {
- const { code, stdout, stderr } = await command.output();
- const stdoutText = new TextDecoder().decode(stdout);
- const stderrText = new TextDecoder().decode(stderr);
-
- if (code !== 0) {
- logger.error(`i weceived an exit code of ${code} i wanna zeroooo :<`);
- return Either.left<ProcessError, string>(
- new ProcessError(`command failed\n${stderrText}`),
- );
- }
-
- logger.log("yay! i got code 0 :3", cmd);
- return Either.right<ProcessError, string>(stdoutText);
- } catch (e) {
- logger.error(`o.o wat`, e);
- if (e instanceof Error) {
- return Either.left<ProcessError, string>(e);
- }
- throw new Error("unknown error " + e);
- }
-};
diff --git a/utils/trace.ts b/utils/trace.ts
deleted file mode 100644
index 1a5e51d..0000000
--- a/utils/trace.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-export interface Logger {
- log: (...args: unknown[]) => void;
- debug: (...args: unknown[]) => void;
- warn: (...args: unknown[]) => void;
- error: (...args: unknown[]) => void;
-}
-
-type Supplier<T> = () => T;
-type TraceSupplier = Supplier<string>;
-export interface ITraceableLogger<L extends ITraceableLogger<L>>
- extends Logger {
- addTracer: (traceSupplier: TraceSupplier) => L;
-}
-
-export type ITraceableTuple<T> = [T, TraceSupplier];
-export type ITraceableMapper<T, L extends ITraceableLogger<L>, U> = (
- t: ITraceable<T, L>,
-) => U;
-export interface ITraceable<T, L extends ITraceableLogger<L>> {
- item: T;
- logger: L;
-
- map: <U>(mapper: ITraceableMapper<T, L, U>) => ITraceable<U, L>;
- bimap: <U>(
- mapper: ITraceableMapper<T, L, ITraceableTuple<U>>,
- ) => ITraceable<U, L>;
- peek: (peek: ITraceableMapper<T, L, void>) => ITraceable<T, L>;
- flatMap: <U>(
- mapper: ITraceableMapper<T, L, ITraceable<U, L>>,
- ) => ITraceable<U, L>;
- flatMapAsync<U>(
- mapper: ITraceableMapper<T, L, Promise<ITraceable<U, L>>>,
- ): ITraceable<Promise<U>, L>;
- move<Tt>(t: Tt): ITraceable<Tt, L>;
-}
-
-export class TraceableLogger implements ITraceableLogger<TraceableLogger> {
- private readonly logger: Logger = console;
- constructor(
- private readonly traces = [() => `[${new Date().toISOString()}]`],
- ) {
- }
-
- public debug(...args: unknown[]) {
- this.logger.debug("[DEBUG]", ...this.getPrefix(), args);
- }
-
- public log(...args: unknown[]) {
- this.logger.log("[INFO]", ...this.getPrefix(), args);
- }
-
- public warn(...args: unknown[]) {
- this.logger.warn("[WARN]", ...this.getPrefix(), args);
- }
-
- public error(...args: unknown[]) {
- this.logger.error("[ERROR]", ...this.getPrefix(), args);
- }
-
- public addTracer(traceSupplier: TraceSupplier) {
- return new TraceableLogger(this.traces.concat(traceSupplier));
- }
-
- private getPrefix() {
- return this.traces.map((tracer) => tracer());
- }
-}
-
-class TraceableImpl<
- T,
- L extends ITraceableLogger<L>,
-> implements ITraceable<T, L> {
- protected constructor(readonly item: T, readonly logger: L) {}
-
- public map<U>(mapper: ITraceableMapper<T, L, U>) {
- const result = mapper(this);
- return new TraceableImpl(result, this.logger);
- }
-
- public flatMap<U>(
- mapper: ITraceableMapper<T, L, ITraceable<U, L>>,
- ): ITraceable<U, L> {
- return mapper(this);
- }
-
- public flatMapAsync<U>(
- mapper: ITraceableMapper<T, L, Promise<ITraceable<U, L>>>,
- ): ITraceable<Promise<U>, L> {
- return new TraceableImpl(
- mapper(this).then(({ item }) => item),
- this.logger,
- );
- }
-
- public peek(peek: ITraceableMapper<T, L, void>) {
- peek(this);
- return this;
- }
-
- public move<Tt>(t: Tt) {
- return this.map(() => t);
- }
-
- public bimap<U>(mapper: ITraceableMapper<T, L, ITraceableTuple<U>>) {
- const [item, trace] = mapper(this);
- return new TraceableImpl(item, this.logger.addTracer(trace));
- }
-
- static promiseify<T, L extends ITraceableLogger<L>, U>(
- mapper: ITraceableMapper<T, L, U>,
- ): ITraceableMapper<Promise<T>, L, Promise<U>> {
- return (traceablePromise) =>
- traceablePromise.flatMapAsync(async (t) => {
- const item = await t.item;
- return t.map(() => item).map(mapper);
- }).item;
- }
-}
-
-export class Traceable<T> extends TraceableImpl<T, TraceableLogger> {
- static withClassTrace<C extends object, T>(
- c: C,
- ): ITraceableMapper<T, TraceableLogger, ITraceableTuple<T>> {
- return (t) => [t.item, () => c.constructor.name];
- }
-
- static from<T>(t: T) {
- return new Traceable(t, new TraceableLogger());
- }
-}
diff --git a/utils/validate_identifier.ts b/utils/validate_identifier.ts
deleted file mode 100644
index ec8b77b..0000000
--- a/utils/validate_identifier.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Either } from "./mod.ts";
-
-export const validateIdentifier = (token: string) => {
- return (/^[a-zA-Z0-9_\-:. \/]+$/).test(token) && !token.includes("..");
-};
-
-// ensure {@param obj} is a Record<string, string> with stuff that won't
-// have the potential for shell injection, just to be super safe.
-export const validateExecutionEntries = (
- obj: Record<string, unknown>,
-): Either<Array<[string, unknown]>, Record<string, string>> => {
- const invalidEntries = Object.entries(obj).filter((e) =>
- !e.every((x) => typeof x === "string" && validateIdentifier(x))
- );
- if (invalidEntries.length > 0) return Either.left(invalidEntries);
- return Either.right(<Record<string, string>> obj);
-};