{"version":3,"file":"SuiteSerializer.mjs","names":["arr: any[]","clonedNode: Record<string, any>"],"sources":["../../src/exports/SuiteSerializer.ts"],"sourcesContent":["import { CB, Result } from 'vest-utils';\nimport { IsolateSerializer } from 'vestjs-runtime';\n\nimport { TestStatus } from '../core/StateMachines/IsolateTestStateMachine';\nimport { TIsolateSuite } from '../core/isolate/IsolateSuite/IsolateSuite';\nimport { Suite } from '../suite/SuiteTypes';\nimport {\n  TFieldName,\n  TGroupName,\n  TSchema,\n} from '../suiteResult/SuiteResultTypes';\n\ntype Dumpable = {\n  dump: CB<TIsolateSuite>;\n};\n\nexport class SuiteSerializer {\n  static serialize(suite: Dumpable) {\n    const dump = stripMessagesExceptFailedAndWarning(suite.dump());\n\n    return IsolateSerializer.serialize(dump, suiteSerializerReplacer);\n  }\n\n  static safeDeserialize(\n    serialized: string | TIsolateSuite | Record<string, any>,\n  ): Result<TIsolateSuite, Error> {\n    return IsolateSerializer.safeDeserialize(serialized).map(\n      isolate => isolate as TIsolateSuite,\n    );\n  }\n\n  static deserialize(\n    serialized: string | TIsolateSuite | Record<string, any>,\n  ): TIsolateSuite {\n    return SuiteSerializer.safeDeserialize(serialized).unwrap();\n  }\n\n  static resume<\n    F extends TFieldName,\n    G extends TGroupName,\n    T extends CB,\n    S extends TSchema,\n  >(\n    suite: Suite<F, G, T, S>,\n    root: string | TIsolateSuite | Record<string, any>,\n  ): void {\n    const suiteRoot = SuiteSerializer.deserialize(root);\n\n    suite.resume(suiteRoot);\n  }\n}\n\nfunction stripMessagesExceptFailedAndWarning<T>(node: T): T {\n  const visited = new WeakMap<object, any>();\n\n  return strip(node, visited);\n}\n\n// eslint-disable-next-line complexity, max-statements\nfunction strip<T>(node: T, visited: WeakMap<object, any>): T {\n  if (!node || typeof node !== 'object') {\n    return node;\n  }\n\n  if (visited.has(node as object)) {\n    return visited.get(node as object);\n  }\n\n  if (Array.isArray(node)) {\n    const arr: any[] = [];\n    visited.set(node, arr);\n\n    node.forEach(value => {\n      arr.push(strip(value, visited));\n    });\n\n    return arr as T;\n  }\n\n  const root = node as Record<string, any>;\n  const shouldKeepMessage =\n    root.testStatus === TestStatus.FAILED ||\n    root.testStatus === TestStatus.WARNING;\n  const clonedNode: Record<string, any> = {};\n  visited.set(node, clonedNode);\n\n  for (const [key, value] of Object.entries(root)) {\n    if (SkipTraversalKeys.has(key)) {\n      continue;\n    }\n\n    if (!shouldKeepMessage && key === 'message') {\n      continue;\n    }\n\n    clonedNode[key] = strip(value, visited);\n  }\n\n  return clonedNode as T;\n}\n\nfunction suiteSerializerReplacer(value: any, key: string) {\n  if (isStatusKey(key)) {\n    return getAllowedStatus(value);\n  }\n\n  if (DisallowedKeys.has(key)) {\n    return undefined;\n  }\n\n  return value;\n}\n\nfunction isStatusKey(key: string): boolean {\n  return key === 'testStatus';\n}\n\nfunction getAllowedStatus(value: any): any {\n  return AllowedStatuses.has(value) ? value : undefined;\n}\n\nconst DisallowedKeys = new Set([\n  'focusMode',\n  'match',\n  'matchAll',\n  'output',\n  'severity',\n  'tests',\n]);\n\nconst SkipTraversalKeys = new Set([\n  'parent',\n  'abortController',\n  'keys',\n  ...DisallowedKeys,\n]);\n\nconst AllowedStatuses = new Set([\n  TestStatus.FAILED,\n  TestStatus.PASSING,\n  TestStatus.WARNING,\n]);\n"],"mappings":";;;;AAgBA,IAAa,kBAAb,MAAa,gBAAgB;CAC3B,OAAO,UAAU,OAAiB;EAChC,MAAM,OAAO,oCAAoC,MAAM,MAAM,CAAC;AAE9D,SAAO,kBAAkB,UAAU,MAAM,wBAAwB;;CAGnE,OAAO,gBACL,YAC8B;AAC9B,SAAO,kBAAkB,gBAAgB,WAAW,CAAC,KACnD,YAAW,QACZ;;CAGH,OAAO,YACL,YACe;AACf,SAAO,gBAAgB,gBAAgB,WAAW,CAAC,QAAQ;;CAG7D,OAAO,OAML,OACA,MACM;EACN,MAAM,YAAY,gBAAgB,YAAY,KAAK;AAEnD,QAAM,OAAO,UAAU;;;AAI3B,SAAS,oCAAuC,MAAY;AAG1D,QAAO,MAAM,sBAFG,IAAI,SAAsB,CAEf;;AAI7B,SAAS,MAAS,MAAS,SAAkC;AAC3D,KAAI,CAAC,QAAQ,OAAO,SAAS,SAC3B,QAAO;AAGT,KAAI,QAAQ,IAAI,KAAe,CAC7B,QAAO,QAAQ,IAAI,KAAe;AAGpC,KAAI,MAAM,QAAQ,KAAK,EAAE;EACvB,MAAMA,MAAa,EAAE;AACrB,UAAQ,IAAI,MAAM,IAAI;AAEtB,OAAK,SAAQ,UAAS;AACpB,OAAI,KAAK,MAAM,OAAO,QAAQ,CAAC;IAC/B;AAEF,SAAO;;CAGT,MAAM,OAAO;CACb,MAAM,oBACJ,KAAK,eAAe,WAAW,UAC/B,KAAK,eAAe,WAAW;CACjC,MAAMC,aAAkC,EAAE;AAC1C,SAAQ,IAAI,MAAM,WAAW;AAE7B,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,EAAE;AAC/C,MAAI,kBAAkB,IAAI,IAAI,CAC5B;AAGF,MAAI,CAAC,qBAAqB,QAAQ,UAChC;AAGF,aAAW,OAAO,MAAM,OAAO,QAAQ;;AAGzC,QAAO;;AAGT,SAAS,wBAAwB,OAAY,KAAa;AACxD,KAAI,YAAY,IAAI,CAClB,QAAO,iBAAiB,MAAM;AAGhC,KAAI,eAAe,IAAI,IAAI,CACzB;AAGF,QAAO;;AAGT,SAAS,YAAY,KAAsB;AACzC,QAAO,QAAQ;;AAGjB,SAAS,iBAAiB,OAAiB;AACzC,QAAO,gBAAgB,IAAI,MAAM,GAAG,QAAQ;;AAG9C,MAAM,iBAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,oBAAoB,IAAI,IAAI;CAChC;CACA;CACA;CACA,GAAG;CACJ,CAAC;AAEF,MAAM,kBAAkB,IAAI,IAAI;CAC9B,WAAW;CACX,WAAW;CACX,WAAW;CACZ,CAAC"}