diff --git a/jest.config.js b/jest.config.js index 19dcf0b..6bb62a0 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,5 +2,5 @@ module.exports = { preset: "ts-jest", testEnvironment: "node", - testPathIgnorePatterns: ["lib/loggers/test.ts"], + testPathIgnorePatterns: ["lib/core/loggers/test.ts"], }; diff --git a/lib/bucket.ts b/lib/core/bucket.ts similarity index 100% rename from lib/bucket.ts rename to lib/core/bucket.ts diff --git a/lib/buckets/bucket.ts b/lib/core/buckets/bucket.ts similarity index 100% rename from lib/buckets/bucket.ts rename to lib/core/buckets/bucket.ts diff --git a/lib/encoder.ts b/lib/core/encoder.ts similarity index 100% rename from lib/encoder.ts rename to lib/core/encoder.ts diff --git a/lib/encoders/base64.ts b/lib/core/encoders/base64.ts similarity index 100% rename from lib/encoders/base64.ts rename to lib/core/encoders/base64.ts diff --git a/lib/encoders/error.ts b/lib/core/encoders/error.ts similarity index 100% rename from lib/encoders/error.ts rename to lib/core/encoders/error.ts diff --git a/lib/encoders/json.ts b/lib/core/encoders/json.ts similarity index 100% rename from lib/encoders/json.ts rename to lib/core/encoders/json.ts diff --git a/lib/error.ts b/lib/core/error.ts similarity index 100% rename from lib/error.ts rename to lib/core/error.ts diff --git a/lib/logger.ts b/lib/core/logger.ts similarity index 100% rename from lib/logger.ts rename to lib/core/logger.ts diff --git a/lib/core/loggers/logger.ts b/lib/core/loggers/logger.ts new file mode 100644 index 0000000..e1bfacc --- /dev/null +++ b/lib/core/loggers/logger.ts @@ -0,0 +1,75 @@ +import { ILogger, ITrace } from "../logger"; + +type LogLevel = "debug" | "info" | "warn" | "error"; + +export class Logger implements ILogger { + private _level: number; + + constructor(public level: LogLevel = "info") { + switch (level) { + case "debug": + this._level = 0; + break; + case "info": + this._level = 1; + break; + case "warn": + this._level = 2; + break; + case "error": + this._level = 3; + break; + } + } + + startTrace(id: string, attrs?: Record): ITrace { + return new Trace(this, id, attrs); + } + + private log(level: number, args: any[]): void { + if (this._level <= level) { + console.log(...args); + } + } + + debug(...args: any[]): void { + this.log(0, args); + } + + info(...args: any[]): void { + this.log(1, args); + } + + warn(...args: any[]): void { + this.log(2, args); + } + + error(...args: any[]): void { + this.log(3, args); + } +} + +class Trace implements ITrace { + private timestamp: number = Date.now(); + + constructor( + private logger: Logger, + private id: string, + private attrs?: Record, + private parent?: string, + ) {} + + start(id: string, attrs?: Record): ITrace { + return new Trace(this.logger, id, attrs, this.id); + } + + end(): void { + this.logger.debug({ + id: this.id, + parentId: this.parent, + timestamp: this.timestamp, + duration: Date.now() - this.timestamp, + attrs: this.attrs, + }); + } +} diff --git a/lib/loggers/opentelemetry.ts b/lib/core/loggers/opentelemetry.ts similarity index 100% rename from lib/loggers/opentelemetry.ts rename to lib/core/loggers/opentelemetry.ts diff --git a/lib/loggers/test.ts b/lib/core/loggers/test.ts similarity index 100% rename from lib/loggers/test.ts rename to lib/core/loggers/test.ts diff --git a/lib/opts.ts b/lib/core/opts.ts similarity index 100% rename from lib/opts.ts rename to lib/core/opts.ts diff --git a/lib/promise.ts b/lib/core/promise.ts similarity index 100% rename from lib/promise.ts rename to lib/core/promise.ts diff --git a/lib/retries/retry.ts b/lib/core/retries/retry.ts similarity index 95% rename from lib/retries/retry.ts rename to lib/core/retries/retry.ts index 2dbcf33..c98e262 100644 --- a/lib/retries/retry.ts +++ b/lib/core/retries/retry.ts @@ -1,4 +1,4 @@ -import { Context } from "../resonate"; +import { Context } from "../../resonate"; import { IRetry } from "../retry"; export class Retry implements IRetry { diff --git a/lib/retry.ts b/lib/core/retry.ts similarity index 69% rename from lib/retry.ts rename to lib/core/retry.ts index d397902..aaead2d 100644 --- a/lib/retry.ts +++ b/lib/core/retry.ts @@ -1,4 +1,4 @@ -import { Context } from "./resonate"; +import { Context } from "../resonate"; export interface IRetry { next(context: Context): { done: boolean; delay?: number }; diff --git a/lib/store.ts b/lib/core/store.ts similarity index 100% rename from lib/store.ts rename to lib/core/store.ts diff --git a/lib/stores/durable.ts b/lib/core/stores/durable.ts similarity index 100% rename from lib/stores/durable.ts rename to lib/core/stores/durable.ts diff --git a/lib/stores/volatile.ts b/lib/core/stores/volatile.ts similarity index 100% rename from lib/stores/volatile.ts rename to lib/core/stores/volatile.ts diff --git a/lib/loggers/logger.ts b/lib/loggers/logger.ts deleted file mode 100644 index 2e347b5..0000000 --- a/lib/loggers/logger.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ILogger, ITrace } from "../logger"; - -export class Logger implements ILogger { - startTrace(id: string, attrs?: Record): ITrace { - return new Trace(this, id, attrs); - } - - debug = console.debug; - - info = console.info; - - warn = console.warn; - - error = console.error; -} - -class Trace implements ITrace { - private timestamp: number = Date.now(); - - constructor( - private logger: Logger, - private id: string, - private attrs?: Record, - private parent?: string, - ) {} - - start(id: string, attrs?: Record): ITrace { - return new Trace(this.logger, id, attrs, this.id); - } - - end(): void { - this.logger.info({ - id: this.id, - parentId: this.parent, - timestamp: this.timestamp, - duration: Date.now() - this.timestamp, - attrs: this.attrs, - }); - } -} diff --git a/lib/resonate.ts b/lib/resonate.ts index 32afb4f..7ef2178 100644 --- a/lib/resonate.ts +++ b/lib/resonate.ts @@ -1,5 +1,5 @@ -import { Opts, isPartialOpts } from "./opts"; -import { IPromiseStore } from "./store"; +import { Opts, isPartialOpts } from "./core/opts"; +import { IPromiseStore } from "./core/store"; import { DurablePromise, isCanceledPromise, @@ -7,19 +7,19 @@ import { isRejectedPromise, isResolvedPromise, isTimedoutPromise, -} from "./promise"; -import { IRetry } from "./retry"; -import { Retry } from "./retries/retry"; -import { IBucket } from "./bucket"; -import { Bucket } from "./buckets/bucket"; -import { VolatilePromiseStore } from "./stores/volatile"; -import { DurablePromiseStore } from "./stores/durable"; -import { ILogger, ITrace } from "./logger"; -import { Logger } from "./loggers/logger"; -import { IEncoder } from "./encoder"; -import { JSONEncoder } from "./encoders/json"; -import { ErrorEncoder } from "./encoders/error"; -import { ErrorCodes, ResonateError } from "./error"; +} from "./core/promise"; +import { IRetry } from "./core/retry"; +import { Retry } from "./core/retries/retry"; +import { IBucket } from "./core/bucket"; +import { Bucket } from "./core/buckets/bucket"; +import { VolatilePromiseStore } from "./core/stores/volatile"; +import { DurablePromiseStore } from "./core/stores/durable"; +import { ILogger, ITrace } from "./core/logger"; +import { Logger } from "./core/loggers/logger"; +import { IEncoder } from "./core/encoder"; +import { JSONEncoder } from "./core/encoders/json"; +import { ErrorEncoder } from "./core/encoders/error"; +import { ErrorCodes, ResonateError } from "./core/error"; // Types diff --git a/test/retry.test.ts b/test/retry.test.ts index 5ff0645..50d2bdf 100644 --- a/test/retry.test.ts +++ b/test/retry.test.ts @@ -1,7 +1,7 @@ import { jest, describe, test, expect, beforeEach } from "@jest/globals"; import { Resonate, Context } from "../lib/resonate"; -import { IRetry } from "../lib/retry"; -import { Retry } from "../lib/retries/retry"; +import { IRetry } from "../lib/core/retry"; +import { Retry } from "../lib/core/retries/retry"; // Set a larger timeout for hooks (e.g., 10 seconds) jest.setTimeout(10000); diff --git a/test/store.test.ts b/test/store.test.ts index 25bfd91..a9ace9d 100644 --- a/test/store.test.ts +++ b/test/store.test.ts @@ -1,7 +1,7 @@ import { jest, describe, test, expect } from "@jest/globals"; -import { DurablePromiseStore } from "../lib/stores/durable"; -import { VolatilePromiseStore } from "../lib/stores/volatile"; +import { DurablePromiseStore } from "../lib/core/stores/durable"; +import { VolatilePromiseStore } from "../lib/core/stores/volatile"; // Set a larger timeout for hooks (e.g., 10 seconds) jest.setTimeout(10000); diff --git a/test/trace.test.ts b/test/trace.test.ts index da6c404..3c579b5 100644 --- a/test/trace.test.ts +++ b/test/trace.test.ts @@ -2,7 +2,7 @@ import { jest, describe, test, expect } from "@jest/globals"; import { Resonate, Context } from "../lib/resonate"; -import { TestLogger } from "../lib/loggers/test"; +import { TestLogger } from "../lib/core/loggers/test"; jest.setTimeout(100000); // 100 seconds