From 1d66a0f58e4ebcdf4f42c9d78f82a1ab49a2cf11 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Tue, 13 May 2025 18:58:45 -0700 Subject: snapshot! --- utils/either.ts | 48 ---------------- utils/env.ts | 5 -- utils/isObject.ts | 2 - utils/mod.ts | 8 --- utils/prepend.ts | 4 -- utils/run.ts | 40 ------------- utils/trace.ts | 130 ------------------------------------------- utils/validate_identifier.ts | 17 ------ 8 files changed, 254 deletions(-) delete mode 100644 utils/either.ts delete mode 100644 utils/env.ts delete mode 100644 utils/isObject.ts delete mode 100644 utils/mod.ts delete mode 100644 utils/prepend.ts delete mode 100644 utils/run.ts delete mode 100644 utils/trace.ts delete mode 100644 utils/validate_identifier.ts (limited to 'utils') 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 { - ok?: T; - err?: E; - mapBoth: ( - errBranch: (e: E) => Ee, - okBranch: (o: T) => Tt, - ) => IEither; - mapRight: (mapper: (t: T) => Tt) => Either; - mapLeft: (mapper: (e: E) => Ee) => Either; - flatMap: ( - mapper: (e: T) => Either, - ) => Either; -} - -export class Either implements IEither { - private constructor(readonly err?: E, readonly ok?: T) {} - - public mapBoth( - errBranch: (e: E) => Ee, - okBranch: (t: T) => Tt, - ): Either { - if (this.err) return Either.left(errBranch(this.err)); - return Either.right(okBranch(this.ok!)); - } - - public flatMap(mapper: (t: T) => Either) { - if (this.ok) return mapper(this.ok); - return this; - } - - public mapRight(mapper: (t: T) => Tt): Either { - if (this.ok) return Either.right(mapper(this.ok)); - return Either.left(this.err!); - } - - public mapLeft(mapper: (e: E) => Ee): Either { - if (this.err) return Either.left(mapper(this.err)); - return Either.right(this.ok!); - } - - static left(e: E) { - return new Either(e); - } - - static right(t: T) { - return new Either(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, - options: Deno.CommandOptions = {}, -): Promise> => { - 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( - new ProcessError(`command failed\n${stderrText}`), - ); - } - - logger.log("yay! i got code 0 :3", cmd); - return Either.right(stdoutText); - } catch (e) { - logger.error(`o.o wat`, e); - if (e instanceof Error) { - return Either.left(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; -type TraceSupplier = Supplier; -export interface ITraceableLogger> - extends Logger { - addTracer: (traceSupplier: TraceSupplier) => L; -} - -export type ITraceableTuple = [T, TraceSupplier]; -export type ITraceableMapper, U> = ( - t: ITraceable, -) => U; -export interface ITraceable> { - item: T; - logger: L; - - map: (mapper: ITraceableMapper) => ITraceable; - bimap: ( - mapper: ITraceableMapper>, - ) => ITraceable; - peek: (peek: ITraceableMapper) => ITraceable; - flatMap: ( - mapper: ITraceableMapper>, - ) => ITraceable; - flatMapAsync( - mapper: ITraceableMapper>>, - ): ITraceable, L>; - move(t: Tt): ITraceable; -} - -export class TraceableLogger implements ITraceableLogger { - 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, -> implements ITraceable { - protected constructor(readonly item: T, readonly logger: L) {} - - public map(mapper: ITraceableMapper) { - const result = mapper(this); - return new TraceableImpl(result, this.logger); - } - - public flatMap( - mapper: ITraceableMapper>, - ): ITraceable { - return mapper(this); - } - - public flatMapAsync( - mapper: ITraceableMapper>>, - ): ITraceable, L> { - return new TraceableImpl( - mapper(this).then(({ item }) => item), - this.logger, - ); - } - - public peek(peek: ITraceableMapper) { - peek(this); - return this; - } - - public move(t: Tt) { - return this.map(() => t); - } - - public bimap(mapper: ITraceableMapper>) { - const [item, trace] = mapper(this); - return new TraceableImpl(item, this.logger.addTracer(trace)); - } - - static promiseify, U>( - mapper: ITraceableMapper, - ): ITraceableMapper, L, Promise> { - return (traceablePromise) => - traceablePromise.flatMapAsync(async (t) => { - const item = await t.item; - return t.map(() => item).map(mapper); - }).item; - } -} - -export class Traceable extends TraceableImpl { - static withClassTrace( - c: C, - ): ITraceableMapper> { - return (t) => [t.item, () => c.constructor.name]; - } - - static from(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 with stuff that won't -// have the potential for shell injection, just to be super safe. -export const validateExecutionEntries = ( - obj: Record, -): Either, Record> => { - 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(> obj); -}; -- cgit v1.2.3-70-g09d2