diff --git a/package.json b/package.json index 7bea04219..a5144f79d 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,8 @@ "tsconfig-paths": "^4.1.0", "ttypescript": "^1.5.15", "type-is": "^1.6.18", - "typescript": "4.9.3" + "typescript": "4.9.3", + "jsonrepair": "^3.12.0" }, "lint-staged": { "**/packages/**/*.ts": [ diff --git a/packages/cli/src/util/createServer.ts b/packages/cli/src/util/createServer.ts index 33d95a616..23f4a6a77 100644 --- a/packages/cli/src/util/createServer.ts +++ b/packages/cli/src/util/createServer.ts @@ -15,6 +15,7 @@ import { getHttpOperationsFromSpec } from '@stoplight/prism-http'; import { createExamplePath } from './paths'; import { attachTagsToParamsValues, transformPathParamsValues } from './colorizer'; import { configureExtensionsUserProvided } from '../extensions'; +import { jsonrepair } from 'jsonrepair'; type PrismLogDescriptor = pino.LogDescriptor & { name: keyof typeof LOG_COLOR_MAP; @@ -132,10 +133,20 @@ function pipeOutputToSignale(stream: Readable) { ? prefix.concat(' ' + chalk.bold.white(`${logLine.input.method} ${logLine.input.url.path}`)) : prefix; } - - stream.pipe(split(JSON.parse)).on('data', (logLine: PrismLogDescriptor) => { - signale[logLine.level]({ prefix: constructPrefix(logLine), message: logLine.msg }); - }); + stream + .pipe( + split(chunk => { + try { + const repairedJson = jsonrepair(chunk); + return JSON.parse(repairedJson); + } catch (error) { + signale.await({ prefix: chalk.bgWhiteBright.black('[CLI]'), message: 'Invalid JSON and unable to correct'}); + } + }) + ) + .on('data', (logLine: PrismLogDescriptor) => { + signale[logLine.level]({ prefix: constructPrefix(logLine), message: logLine.msg }); + }); } function isProxyServerOptions(options: CreateBaseServerOptions): options is CreateProxyServerOptions { diff --git a/yarn.lock b/yarn.lock index c61c50f6c..8977b1322 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4740,6 +4740,11 @@ jsonpath-plus@^10.1.0: "@jsep-plugin/regex" "^1.0.3" jsep "^1.3.9" +jsonrepair@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/jsonrepair/-/jsonrepair-3.12.0.tgz#a0c9f97f5628156a44b78597fc8cdaf3561db751" + integrity sha512-SWfjz8SuQ0wZjwsxtSJ3Zy8vvLg6aO/kxcp9TWNPGwJKgTZVfhNEQBMk/vPOpYCDFWRxD6QWuI6IHR1t615f0w== + just-diff-apply@^5.2.0: version "5.5.0" resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz"