From 6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Thu, 2 Jul 2026 11:55:17 -0700 Subject: Init --- Homework/cs5260/shared/log/ConsoleLogger.ts | 29 ++++++++++++++++ Homework/cs5260/shared/log/TracingLogger.ts | 7 ++++ Homework/cs5260/shared/log/index.ts | 2 ++ Homework/cs5260/shared/schema/README.md | 3 ++ Homework/cs5260/shared/schema/Widget.ts | 13 +++++++ Homework/cs5260/shared/schema/WidgetRequest.json | 44 ++++++++++++++++++++++++ Homework/cs5260/shared/schema/WidgetRequest.ts | 16 +++++++++ Homework/cs5260/shared/schema/index.ts | 2 ++ Homework/cs5260/shared/t/VoidLogger.ts | 11 ++++++ Homework/cs5260/shared/t/index.ts | 1 + 10 files changed, 128 insertions(+) create mode 100644 Homework/cs5260/shared/log/ConsoleLogger.ts create mode 100644 Homework/cs5260/shared/log/TracingLogger.ts create mode 100644 Homework/cs5260/shared/log/index.ts create mode 100644 Homework/cs5260/shared/schema/README.md create mode 100644 Homework/cs5260/shared/schema/Widget.ts create mode 100644 Homework/cs5260/shared/schema/WidgetRequest.json create mode 100644 Homework/cs5260/shared/schema/WidgetRequest.ts create mode 100644 Homework/cs5260/shared/schema/index.ts create mode 100644 Homework/cs5260/shared/t/VoidLogger.ts create mode 100644 Homework/cs5260/shared/t/index.ts (limited to 'Homework/cs5260/shared') diff --git a/Homework/cs5260/shared/log/ConsoleLogger.ts b/Homework/cs5260/shared/log/ConsoleLogger.ts new file mode 100644 index 0000000..4d594a8 --- /dev/null +++ b/Homework/cs5260/shared/log/ConsoleLogger.ts @@ -0,0 +1,29 @@ +import { TracingLogger } from "."; + +export class ConsoleTracingLogger implements TracingLogger { + private prefix: string; + + constructor(prefix: string) { + this.prefix = prefix; + } + + private makePrefix(level: "info" | "warn" | "error"): string { + return `[${new Date().toISOString()}] ${level} (${this.prefix}) > `; + } + + public info(log: string) { + console.log(this.makePrefix("info") + log); + } + + public warn(log: string) { + console.warn(this.makePrefix("warn") + log); + } + + public error(log: string) { + console.error(this.makePrefix("error") + log); + } + + public createChild(prefix: string) { + return new ConsoleTracingLogger(`${this.prefix} -> ${prefix}`); + } +} diff --git a/Homework/cs5260/shared/log/TracingLogger.ts b/Homework/cs5260/shared/log/TracingLogger.ts new file mode 100644 index 0000000..4765480 --- /dev/null +++ b/Homework/cs5260/shared/log/TracingLogger.ts @@ -0,0 +1,7 @@ +export interface TracingLogger { + info(log: string): void; + warn(log: string): void; + error(log: string): void; + + createChild(prefix: string): TracingLogger; +} diff --git a/Homework/cs5260/shared/log/index.ts b/Homework/cs5260/shared/log/index.ts new file mode 100644 index 0000000..d1bd68d --- /dev/null +++ b/Homework/cs5260/shared/log/index.ts @@ -0,0 +1,2 @@ +export * from "./TracingLogger"; +export * from "./ConsoleLogger"; diff --git a/Homework/cs5260/shared/schema/README.md b/Homework/cs5260/shared/schema/README.md new file mode 100644 index 0000000..6c5d0a0 --- /dev/null +++ b/Homework/cs5260/shared/schema/README.md @@ -0,0 +1,3 @@ +to compile TypeScript types + +`json-schema-to-zod --source= > .ts` diff --git a/Homework/cs5260/shared/schema/Widget.ts b/Homework/cs5260/shared/schema/Widget.ts new file mode 100644 index 0000000..e7f09d1 --- /dev/null +++ b/Homework/cs5260/shared/schema/Widget.ts @@ -0,0 +1,13 @@ +import { z } from "zod"; + +export const Widget = z.object({ + id: z.string(), + owner: z.string().regex(new RegExp("[A-Za-z ]+")), + label: z.string().optional(), + description: z.string().optional(), + otherAttributes: z + .array(z.object({ name: z.string(), value: z.string() })) + .optional(), +}); + +export type WidgetT = z.infer; diff --git a/Homework/cs5260/shared/schema/WidgetRequest.json b/Homework/cs5260/shared/schema/WidgetRequest.json new file mode 100644 index 0000000..a378949 --- /dev/null +++ b/Homework/cs5260/shared/schema/WidgetRequest.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "type": { + "type": "string", + "pattern": "create|delete|update" + }, + "requestId": { + "type": "string" + }, + "widgetId": { + "type": "string" + }, + "owner": { + "type": "string", + "pattern": "[A-Za-z ]+" + }, + "label": { + "type": "string" + }, + "description": { + "type": "string" + }, + "otherAttributes": { + "type": "array", + "items": [ + { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": ["name", "value"] + } + ] + } + }, + "required": ["type", "requestId", "widgetId", "owner"] +} diff --git a/Homework/cs5260/shared/schema/WidgetRequest.ts b/Homework/cs5260/shared/schema/WidgetRequest.ts new file mode 100644 index 0000000..11259cf --- /dev/null +++ b/Homework/cs5260/shared/schema/WidgetRequest.ts @@ -0,0 +1,16 @@ +import { z } from "zod"; + +// generated from json-schema-to-zod +export const WidgetRequest = z.object({ + type: z.string().regex(new RegExp("create|delete|update")), + requestId: z.string(), + widgetId: z.string(), + owner: z.string().regex(new RegExp("[A-Za-z ]+")), + label: z.string().optional(), + description: z.string().optional(), + otherAttributes: z + .array(z.object({ name: z.string(), value: z.string() })) + .optional(), +}); + +export type WidgetRequestT = z.infer; diff --git a/Homework/cs5260/shared/schema/index.ts b/Homework/cs5260/shared/schema/index.ts new file mode 100644 index 0000000..44cdfd7 --- /dev/null +++ b/Homework/cs5260/shared/schema/index.ts @@ -0,0 +1,2 @@ +export * from "./WidgetRequest.ts"; +export * from "./Widget"; diff --git a/Homework/cs5260/shared/t/VoidLogger.ts b/Homework/cs5260/shared/t/VoidLogger.ts new file mode 100644 index 0000000..4133104 --- /dev/null +++ b/Homework/cs5260/shared/t/VoidLogger.ts @@ -0,0 +1,11 @@ +import { TracingLogger } from "../log"; + +export class VoidLogger implements TracingLogger { + public info(_log: string) {} + public warn(_log: string) {} + public error(_log: string) {} + + public createChild(_prefix: string) { + return new VoidLogger(); + } +} diff --git a/Homework/cs5260/shared/t/index.ts b/Homework/cs5260/shared/t/index.ts new file mode 100644 index 0000000..93f45ce --- /dev/null +++ b/Homework/cs5260/shared/t/index.ts @@ -0,0 +1 @@ +export * from "./VoidLogger"; -- cgit v1.3