From 3134307e9316ded5879ab66314c2c1a1ba617b66 Mon Sep 17 00:00:00 2001 From: Andrii Andreiev <129078694+AndriiAndreiev@users.noreply.github.com> Date: Fri, 16 May 2025 14:59:19 +0300 Subject: [PATCH 1/5] feat: debug mode --- .../src/codegen/languages/typescript/index.ts | 26 +++++++++++++++++++ packages/core/src/index.ts | 12 +++++++++ 2 files changed, 38 insertions(+) diff --git a/packages/api/src/codegen/languages/typescript/index.ts b/packages/api/src/codegen/languages/typescript/index.ts index 2b0c8d28..3b6bf5c8 100644 --- a/packages/api/src/codegen/languages/typescript/index.ts +++ b/packages/api/src/codegen/languages/typescript/index.ts @@ -433,6 +433,32 @@ sdk.server('https://eu.api.example.com/v14');`), }, ], }, + { + name: 'debug', + parameters: [], + returnType: 'SDK', + statements: writer => { + writer.writeLine('this.core.setDebugMode(true);'); + writer.writeLine('const self = this;'); + writer.writeLine('return new Proxy(this, {'); + writer.writeLine('get(target: SDK, prop: keyof SDK) {'); + writer.writeLine('if (typeof target[prop] === "function" && prop !== \'debug\') {'); + writer.writeLine('return async(...args: unknown[]) => {'); + writer.writeLine('try {'); + writer.writeLine('return await (target[prop] as Function).apply(target, args);'); + writer.writeLine('} catch (err) {'); + writer.writeLine('throw err;'); + writer.writeLine('} finally {'); + writer.writeLine('self.core.setDebugMode(false);'); + writer.writeLine('}'); + writer.writeLine('}'); + writer.writeLine('}'); + writer.writeLine('return Reflect.get(target, prop);'); + writer.writeLine('},'); + writer.writeLine('});'); + return writer; + }, + } ]); // Add all available operation ID accessors into the SDK. diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index dbf6ac6b..fba5b113 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -10,6 +10,7 @@ import Oas from 'oas'; import FetchError from './errors/fetchError.js'; import { parseResponse, prepareAuth, prepareParams, prepareServer } from './lib/index.js'; +import logger from 'api/dist/logger.js'; export default class APICore { spec!: Oas; @@ -27,6 +28,8 @@ export default class APICore { private userAgent!: string; + private debugMode: boolean = false; + constructor(definition?: OASDocument | Record, userAgent?: string) { if (definition) this.spec = Oas.init(definition); if (userAgent) this.userAgent = userAgent; @@ -56,6 +59,11 @@ export default class APICore { return this; } + setDebugMode(debugMode: boolean) { + this.debugMode = debugMode; + return this; + } + async fetch( path: string, method: HttpMethods, @@ -96,6 +104,10 @@ export default class APICore { const har = this.getHARForRequest(operation, data, prepareAuth(this.auth, operation)); + if (this.debugMode) { + logger(`[DEBUG] HAR: ${JSON.stringify(har, null, 2)}`); + } + let timeoutSignal: NodeJS.Timeout; const init: RequestInit = {}; if (this.config.timeout) { From 956464050791105cfed980f0352c84c8f6de981c Mon Sep 17 00:00:00 2001 From: Andrii Andreiev <129078694+AndriiAndreiev@users.noreply.github.com> Date: Fri, 16 May 2025 17:05:37 +0300 Subject: [PATCH 2/5] feat: debug mode (append docs) --- .../src/codegen/languages/typescript/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/api/src/codegen/languages/typescript/index.ts b/packages/api/src/codegen/languages/typescript/index.ts index 3b6bf5c8..003ac808 100644 --- a/packages/api/src/codegen/languages/typescript/index.ts +++ b/packages/api/src/codegen/languages/typescript/index.ts @@ -458,6 +458,24 @@ sdk.server('https://eu.api.example.com/v14');`), writer.writeLine('});'); return writer; }, + docs: [ + { + description: writer => + writer.writeLine(wordWrap(`Enables debug mode for SDK operations. Debug mode captures additional internal information such as request/response payloads and timing, which may assist in troubleshooting issues during development. + +This method can be used in two modes: + +- **Global mode**: Calls \`sdk.debug();\` and enables debug logging for all subsequent operations. +- **Chained mode**: Calls \`sdk.debug().operation();\` and enables debug logging only for the single operation invoked. Debug mode is automatically turned off afterward. + +@example Global debug mode +sdk.debug(); +sdk.getPets(); + +@example Chained debug mode (single operation) +sdk.debug().getPets();`)), + }, + ], } ]); From c6ce62af0febc2999ff8e5314daea9f0c5e5a552 Mon Sep 17 00:00:00 2001 From: Andrii Andreiev <129078694+AndriiAndreiev@users.noreply.github.com> Date: Fri, 16 May 2025 17:17:41 +0300 Subject: [PATCH 3/5] chore(test-utils): update SDK fixtures --- packages/test-utils/sdks/alby/src/sdk.ts | 41 +++++++++++++++++++ .../test-utils/sdks/metrotransit/src/sdk.ts | 41 +++++++++++++++++++ .../sdks/operationid-quirks/src/sdk.ts | 41 +++++++++++++++++++ .../sdks/optional-payload/src/sdk.ts | 41 +++++++++++++++++++ packages/test-utils/sdks/petstore/src/sdk.ts | 41 +++++++++++++++++++ packages/test-utils/sdks/readme/src/sdk.ts | 41 +++++++++++++++++++ .../sdks/response-title-quirks/src/sdk.ts | 41 +++++++++++++++++++ packages/test-utils/sdks/simple/src/sdk.ts | 41 +++++++++++++++++++ packages/test-utils/sdks/star-trek/src/sdk.ts | 41 +++++++++++++++++++ 9 files changed, 369 insertions(+) diff --git a/packages/test-utils/sdks/alby/src/sdk.ts b/packages/test-utils/sdks/alby/src/sdk.ts index 74bd718a..d47e135a 100644 --- a/packages/test-utils/sdks/alby/src/sdk.ts +++ b/packages/test-utils/sdks/alby/src/sdk.ts @@ -72,6 +72,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + /** * List all applications for the specified account ID. * diff --git a/packages/test-utils/sdks/metrotransit/src/sdk.ts b/packages/test-utils/sdks/metrotransit/src/sdk.ts index d5f6d570..c5fcfcd8 100644 --- a/packages/test-utils/sdks/metrotransit/src/sdk.ts +++ b/packages/test-utils/sdks/metrotransit/src/sdk.ts @@ -72,6 +72,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + /** @throws FetchError<400, types.ProblemDetails> Bad Request */ getNextripAgencies(): Promise> { return this.core.fetch('/nextrip/agencies', 'get'); diff --git a/packages/test-utils/sdks/operationid-quirks/src/sdk.ts b/packages/test-utils/sdks/operationid-quirks/src/sdk.ts index 606d56d3..aaa7824f 100644 --- a/packages/test-utils/sdks/operationid-quirks/src/sdk.ts +++ b/packages/test-utils/sdks/operationid-quirks/src/sdk.ts @@ -71,6 +71,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + /** * This mess of a string is intentionally nasty so we can be sure that we're not including * anything that wouldn't look right as an operationID for a potential method accessor in diff --git a/packages/test-utils/sdks/optional-payload/src/sdk.ts b/packages/test-utils/sdks/optional-payload/src/sdk.ts index 26cdac67..71519ba0 100644 --- a/packages/test-utils/sdks/optional-payload/src/sdk.ts +++ b/packages/test-utils/sdks/optional-payload/src/sdk.ts @@ -72,6 +72,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + /** * Updates a pet in the store with form data * diff --git a/packages/test-utils/sdks/petstore/src/sdk.ts b/packages/test-utils/sdks/petstore/src/sdk.ts index 40ba0e16..154a83ad 100644 --- a/packages/test-utils/sdks/petstore/src/sdk.ts +++ b/packages/test-utils/sdks/petstore/src/sdk.ts @@ -72,6 +72,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + /** * Add a new pet to the store * diff --git a/packages/test-utils/sdks/readme/src/sdk.ts b/packages/test-utils/sdks/readme/src/sdk.ts index 6f5f740f..558d2319 100644 --- a/packages/test-utils/sdks/readme/src/sdk.ts +++ b/packages/test-utils/sdks/readme/src/sdk.ts @@ -72,6 +72,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + /** * Returns project data for the API key. * diff --git a/packages/test-utils/sdks/response-title-quirks/src/sdk.ts b/packages/test-utils/sdks/response-title-quirks/src/sdk.ts index 0e73ab1e..596f5b1f 100644 --- a/packages/test-utils/sdks/response-title-quirks/src/sdk.ts +++ b/packages/test-utils/sdks/response-title-quirks/src/sdk.ts @@ -72,6 +72,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + getAnything(metadata: types.GetAnythingMetadataParam): Promise, types.GetAnythingResponse2XX>> { return this.core.fetch('/anything', 'get', metadata); } diff --git a/packages/test-utils/sdks/simple/src/sdk.ts b/packages/test-utils/sdks/simple/src/sdk.ts index 2c45382a..8e54a135 100644 --- a/packages/test-utils/sdks/simple/src/sdk.ts +++ b/packages/test-utils/sdks/simple/src/sdk.ts @@ -72,6 +72,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + /** * Multiple status values can be provided with comma separated strings * diff --git a/packages/test-utils/sdks/star-trek/src/sdk.ts b/packages/test-utils/sdks/star-trek/src/sdk.ts index e2cea8df..ce8f4fcb 100644 --- a/packages/test-utils/sdks/star-trek/src/sdk.ts +++ b/packages/test-utils/sdks/star-trek/src/sdk.ts @@ -72,6 +72,47 @@ export default class SDK { this.core.setServer(url, variables); } + /** + * Enables debug mode for SDK operations. Debug mode captures additional internal + * information such as request/response payloads and timing, which may assist in + * troubleshooting issues during development. + * + * This method can be used in two modes: + * + * - **Global mode**: Calls `sdk.debug();` and enables debug logging for all subsequent + * operations. + * - **Chained mode**: Calls `sdk.debug().operation();` and enables debug logging only for + * the single operation invoked. Debug mode is automatically turned off afterward. + * + * @example Global debug mode + * sdk.debug(); + * sdk.getPets(); + * + * @example Chained debug mode (single operation) + * sdk.debug().getPets(); + * + */ + debug(): SDK { + this.core.setDebugMode(true); + const self = this; + return new Proxy(this, { + get(target: SDK, prop: keyof SDK) { + if (typeof target[prop] === "function" && prop !== 'debug') { + return async (...args: unknown[]) => { + try { + return await (target[prop] as Function).apply(target, args); + } catch (err) { + throw err; + } finally { + self.core.setDebugMode(false); + } + } + } + return Reflect.get(target, prop); + }, + }); + } + /** * Retrival of a single animal * From c681849dfaf702d10c1cb7cceef3c8b51037a101 Mon Sep 17 00:00:00 2001 From: Andrii Andreiev <129078694+AndriiAndreiev@users.noreply.github.com> Date: Thu, 29 May 2025 17:16:23 +0300 Subject: [PATCH 4/5] refactor: move logger.ts to api-core --- packages/api/src/bin.ts | 2 +- packages/api/src/codegen/languages/typescript/index.ts | 2 +- packages/api/src/commands/install.ts | 2 +- packages/api/src/commands/list.ts | 2 +- packages/api/src/commands/uninstall.ts | 2 +- packages/core/package.json | 4 ++++ packages/core/src/index.ts | 2 +- packages/{api => core}/src/logger.ts | 0 packages/core/tsup.config.ts | 2 +- 9 files changed, 11 insertions(+), 7 deletions(-) rename packages/{api => core}/src/logger.ts (100%) diff --git a/packages/api/src/bin.ts b/packages/api/src/bin.ts index deba3b83..e46a9df1 100644 --- a/packages/api/src/bin.ts +++ b/packages/api/src/bin.ts @@ -2,7 +2,7 @@ import { Command } from 'commander'; import updateNotifier from 'update-notifier'; import commands from './commands/index.js'; -import logger from './logger.js'; +import logger from '@readme/api-core/logger'; import * as pkg from './packageInfo.js'; updateNotifier({ pkg: { name: pkg.PACKAGE_NAME, version: pkg.PACKAGE_VERSION } }).notify(); diff --git a/packages/api/src/codegen/languages/typescript/index.ts b/packages/api/src/codegen/languages/typescript/index.ts index 003ac808..bf89199a 100644 --- a/packages/api/src/codegen/languages/typescript/index.ts +++ b/packages/api/src/codegen/languages/typescript/index.ts @@ -28,7 +28,7 @@ import semver from 'semver'; import { IndentationText, Project, QuoteKind, ScriptTarget, VariableDeclarationKind } from 'ts-morph'; import { buildCodeSnippetForOperation, getSuggestedOperation } from '../../../lib/suggestedOperations.js'; -import logger from '../../../logger.js'; +import logger from '@readme/api-core/logger'; import { PACKAGE_VERSION } from '../../../packageInfo.js'; import Storage from '../../../storage.js'; import CodeGenerator from '../../codegenerator.js'; diff --git a/packages/api/src/commands/install.ts b/packages/api/src/commands/install.ts index 6c7bf17f..ee58af2d 100644 --- a/packages/api/src/commands/install.ts +++ b/packages/api/src/commands/install.ts @@ -11,7 +11,7 @@ import uslug from 'uslug'; import { SupportedLanguages, codegenFactory } from '../codegen/factory.js'; import Fetcher from '../fetcher.js'; import promptTerminal from '../lib/prompt.js'; -import logger, { oraOptions } from '../logger.js'; +import logger, { oraOptions } from '@readme/api-core/logger'; import Storage from '../storage.js'; const { highlight } = createEmphasize(common); diff --git a/packages/api/src/commands/list.ts b/packages/api/src/commands/list.ts index aa24b0bc..26d958c0 100644 --- a/packages/api/src/commands/list.ts +++ b/packages/api/src/commands/list.ts @@ -2,7 +2,7 @@ import chalk from 'chalk'; import { Command } from 'commander'; import { SupportedLanguages } from '../codegen/factory.js'; -import logger from '../logger.js'; +import logger from '@readme/api-core/logger'; import Storage from '../storage.js'; const cmd = new Command(); diff --git a/packages/api/src/commands/uninstall.ts b/packages/api/src/commands/uninstall.ts index 08eddf27..e3a16dd4 100644 --- a/packages/api/src/commands/uninstall.ts +++ b/packages/api/src/commands/uninstall.ts @@ -6,7 +6,7 @@ import ora from 'ora'; import { SupportedLanguages, uninstallerFactory } from '../codegen/factory.js'; import promptTerminal from '../lib/prompt.js'; -import logger, { oraOptions } from '../logger.js'; +import logger, { oraOptions } from '@readme/api-core/logger'; import Storage from '../storage.js'; interface Options { diff --git a/packages/core/package.json b/packages/core/package.json index c12bfac1..0b3f6e20 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -21,6 +21,10 @@ "require": "./dist/types.d.cjs", "import": "./dist/types.d.js" }, + "./logger": { + "require": "./dist/logger.cjs", + "import": "./dist/logger.js" + }, "./package.json": "./package.json" }, "main": "dist/index.cjs", diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index fba5b113..df6d333d 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -10,7 +10,7 @@ import Oas from 'oas'; import FetchError from './errors/fetchError.js'; import { parseResponse, prepareAuth, prepareParams, prepareServer } from './lib/index.js'; -import logger from 'api/dist/logger.js'; +import logger from './logger.js'; export default class APICore { spec!: Oas; diff --git a/packages/api/src/logger.ts b/packages/core/src/logger.ts similarity index 100% rename from packages/api/src/logger.ts rename to packages/core/src/logger.ts diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts index ac904e72..6dc89141 100644 --- a/packages/core/tsup.config.ts +++ b/packages/core/tsup.config.ts @@ -10,7 +10,7 @@ export default defineConfig((options: Options) => ({ ...options, ...config, - entry: ['src/errors/fetchError.ts', 'src/lib/index.ts', 'src/index.ts', 'src/types.ts'], + entry: ['src/errors/fetchError.ts', 'src/lib/index.ts', 'src/index.ts', 'src/types.ts', 'src/logger.ts'], noExternal: [ // These dependencies are ESM-only but because we're building for ESM **and** CJS we can't From 1ce931b02d7efb33413a3cc87730a7f031f942cc Mon Sep 17 00:00:00 2001 From: Andrii Andreiev <129078694+AndriiAndreiev@users.noreply.github.com> Date: Thu, 29 May 2025 17:55:58 +0300 Subject: [PATCH 5/5] fix: linting & prettier --- package-lock.json | 5 +++-- packages/api/src/bin.ts | 3 +-- packages/api/src/codegen/languages/typescript/index.ts | 10 ++++++---- packages/api/src/commands/install.ts | 2 +- packages/api/src/commands/list.ts | 2 +- packages/api/src/commands/uninstall.ts | 2 +- packages/core/package.json | 6 ++++-- packages/core/src/index.ts | 2 +- packages/core/src/logger.ts | 2 +- 9 files changed, 19 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 96e04f05..618af877 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5971,6 +5971,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -24328,7 +24329,6 @@ "license": "MIT", "dependencies": { "@readme/api-core": "file:../core", - "chalk": "^5.3.0", "ci-info": "^4.0.0", "commander": "^14.0.0", "emphasize": "^7.0.0", @@ -24340,7 +24340,6 @@ "lodash-es": "^4.17.21", "oas": "^27.0.0", "oas-normalize": "^14.0.0", - "ora": "^8.0.1", "preferred-pm": "^4.0.0", "prompts": "^2.4.2", "semver": "^7.3.8", @@ -24666,12 +24665,14 @@ "dependencies": { "@readme/oas-to-har": "^26.0.0", "caseless": "^0.12.0", + "chalk": "^5.4.1", "datauri": "^4.1.0", "fetch-har": "^11.0.1", "json-schema-to-ts": "^3.0.0", "json-schema-traverse": "^1.0.0", "lodash.merge": "^4.6.2", "oas": "^27.0.0", + "ora": "^8.0.1", "remove-undefined-objects": "^6.0.0" }, "devDependencies": { diff --git a/packages/api/src/bin.ts b/packages/api/src/bin.ts index 922c51f6..3a68f834 100644 --- a/packages/api/src/bin.ts +++ b/packages/api/src/bin.ts @@ -1,9 +1,8 @@ +import { logger } from '@readme/api-core/logger'; import { Command } from 'commander'; import updateNotifier from 'update-notifier'; import commands from './commands/index.js'; - -import logger from '@readme/api-core/logger'; import * as pkg from './packageInfo.js'; // eslint-disable-line readme/no-wildcard-imports updateNotifier({ pkg: { name: pkg.PACKAGE_NAME, version: pkg.PACKAGE_VERSION } }).notify(); diff --git a/packages/api/src/codegen/languages/typescript/index.ts b/packages/api/src/codegen/languages/typescript/index.ts index bf89199a..100fb3f2 100644 --- a/packages/api/src/codegen/languages/typescript/index.ts +++ b/packages/api/src/codegen/languages/typescript/index.ts @@ -19,6 +19,7 @@ import type { JsonObject, PackageJson, TsConfigJson } from 'type-fest'; import path from 'node:path'; +import { logger } from '@readme/api-core/logger'; import corePkg from '@readme/api-core/package.json' with { type: 'json' }; import { execa } from 'execa'; import { getLicense } from 'license'; @@ -28,7 +29,6 @@ import semver from 'semver'; import { IndentationText, Project, QuoteKind, ScriptTarget, VariableDeclarationKind } from 'ts-morph'; import { buildCodeSnippetForOperation, getSuggestedOperation } from '../../../lib/suggestedOperations.js'; -import logger from '@readme/api-core/logger'; import { PACKAGE_VERSION } from '../../../packageInfo.js'; import Storage from '../../../storage.js'; import CodeGenerator from '../../codegenerator.js'; @@ -461,7 +461,8 @@ sdk.server('https://eu.api.example.com/v14');`), docs: [ { description: writer => - writer.writeLine(wordWrap(`Enables debug mode for SDK operations. Debug mode captures additional internal information such as request/response payloads and timing, which may assist in troubleshooting issues during development. + writer.writeLine( + wordWrap(`Enables debug mode for SDK operations. Debug mode captures additional internal information such as request/response payloads and timing, which may assist in troubleshooting issues during development. This method can be used in two modes: @@ -473,10 +474,11 @@ sdk.debug(); sdk.getPets(); @example Chained debug mode (single operation) -sdk.debug().getPets();`)), +sdk.debug().getPets();`), + ), }, ], - } + }, ]); // Add all available operation ID accessors into the SDK. diff --git a/packages/api/src/commands/install.ts b/packages/api/src/commands/install.ts index ee58af2d..eb2e04e1 100644 --- a/packages/api/src/commands/install.ts +++ b/packages/api/src/commands/install.ts @@ -1,5 +1,6 @@ import type { SupportedLanguage } from '../codegen/factory.js'; +import { logger, oraOptions } from '@readme/api-core/logger'; import chalk from 'chalk'; import { Command, Option } from 'commander'; import { createEmphasize, common } from 'emphasize'; @@ -11,7 +12,6 @@ import uslug from 'uslug'; import { SupportedLanguages, codegenFactory } from '../codegen/factory.js'; import Fetcher from '../fetcher.js'; import promptTerminal from '../lib/prompt.js'; -import logger, { oraOptions } from '@readme/api-core/logger'; import Storage from '../storage.js'; const { highlight } = createEmphasize(common); diff --git a/packages/api/src/commands/list.ts b/packages/api/src/commands/list.ts index 26d958c0..40e54e8c 100644 --- a/packages/api/src/commands/list.ts +++ b/packages/api/src/commands/list.ts @@ -1,8 +1,8 @@ +import { logger } from '@readme/api-core/logger'; import chalk from 'chalk'; import { Command } from 'commander'; import { SupportedLanguages } from '../codegen/factory.js'; -import logger from '@readme/api-core/logger'; import Storage from '../storage.js'; const cmd = new Command(); diff --git a/packages/api/src/commands/uninstall.ts b/packages/api/src/commands/uninstall.ts index e3a16dd4..80745771 100644 --- a/packages/api/src/commands/uninstall.ts +++ b/packages/api/src/commands/uninstall.ts @@ -1,12 +1,12 @@ import path from 'node:path'; +import { logger, oraOptions } from '@readme/api-core/logger'; import chalk from 'chalk'; import { Command, Option } from 'commander'; import ora from 'ora'; import { SupportedLanguages, uninstallerFactory } from '../codegen/factory.js'; import promptTerminal from '../lib/prompt.js'; -import logger, { oraOptions } from '@readme/api-core/logger'; import Storage from '../storage.js'; interface Options { diff --git a/packages/core/package.json b/packages/core/package.json index 0b3f6e20..47d2214b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -22,8 +22,8 @@ "import": "./dist/types.d.js" }, "./logger": { - "require": "./dist/logger.cjs", - "import": "./dist/logger.js" + "require": "./dist/logger.cjs", + "import": "./dist/logger.js" }, "./package.json": "./package.json" }, @@ -55,12 +55,14 @@ "dependencies": { "@readme/oas-to-har": "^26.0.0", "caseless": "^0.12.0", + "chalk": "^5.4.1", "datauri": "^4.1.0", "fetch-har": "^11.0.1", "json-schema-to-ts": "^3.0.0", "json-schema-traverse": "^1.0.0", "lodash.merge": "^4.6.2", "oas": "^27.0.0", + "ora": "^8.0.1", "remove-undefined-objects": "^6.0.0" }, "devDependencies": { diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index df6d333d..61f7bb09 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -10,7 +10,7 @@ import Oas from 'oas'; import FetchError from './errors/fetchError.js'; import { parseResponse, prepareAuth, prepareParams, prepareServer } from './lib/index.js'; -import logger from './logger.js'; +import { logger } from './logger.js'; export default class APICore { spec!: Oas; diff --git a/packages/core/src/logger.ts b/packages/core/src/logger.ts index 128c0f0d..195a186a 100644 --- a/packages/core/src/logger.ts +++ b/packages/core/src/logger.ts @@ -3,7 +3,7 @@ import type { Options as OraOptions } from 'ora'; import chalk from 'chalk'; -export default function logger(log: string, error?: boolean) { +export function logger(log: string, error?: boolean) { if (error) { console.error(chalk.red(log)); } else {