From ab45898a69dd9354cdb365187dec0d58a1836418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Tue, 23 Aug 2022 17:13:48 +0200 Subject: [PATCH] fix(cli): Account for unparseable string in JSON key migration (#3927) :zap: Account for unparseable string in JSON key migration --- .../sqlite/1659888469333-AddJsonKeyPinData.ts | 13 +++++++++++-- .../cli/src/databases/utils/migrations.types.ts | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/databases/migrations/sqlite/1659888469333-AddJsonKeyPinData.ts b/packages/cli/src/databases/migrations/sqlite/1659888469333-AddJsonKeyPinData.ts index 67b8cae704..725be9a6f4 100644 --- a/packages/cli/src/databases/migrations/sqlite/1659888469333-AddJsonKeyPinData.ts +++ b/packages/cli/src/databases/migrations/sqlite/1659888469333-AddJsonKeyPinData.ts @@ -64,8 +64,17 @@ export const addJsonKeyToPinDataColumn = function makeUpdateParams(fetchedWorkflows: PinData.FetchedWorkflow[]) { return fetchedWorkflows.reduce( (updateParams, { id, pinData: rawPinData }) => { - const pinDataPerWorkflow: PinData.Old | PinData.New = - typeof rawPinData === 'string' ? JSON.parse(rawPinData) : rawPinData; + let pinDataPerWorkflow: PinData.Old | PinData.New; + + if (typeof rawPinData === 'string') { + try { + pinDataPerWorkflow = JSON.parse(rawPinData); + } catch (_) { + pinDataPerWorkflow = {}; + } + } else { + pinDataPerWorkflow = rawPinData; + } const newPinDataPerWorkflow = Object.keys(pinDataPerWorkflow).reduce( (newPinDataPerWorkflow, nodeName) => { diff --git a/packages/cli/src/databases/utils/migrations.types.ts b/packages/cli/src/databases/utils/migrations.types.ts index aaa9f66472..bb3fbca85b 100644 --- a/packages/cli/src/databases/utils/migrations.types.ts +++ b/packages/cli/src/databases/utils/migrations.types.ts @@ -5,7 +5,7 @@ export namespace PinData { export type New = { [nodeName: string]: INodeExecutionData[] }; - export type FetchedWorkflow = { id: number; pinData: string | object }; + export type FetchedWorkflow = { id: number; pinData: string | Old }; } export function isObjectLiteral(maybeObject: unknown): maybeObject is { [key: string]: string } {