{
  "version": 3,
  "sources": ["../../../src/fragments/combine-fragments.ts"],
  "sourcesContent": ["import {filterNull} from '../helpers.ts';\nimport type {ServerlessApplicationModel} from '../types.ts';\n\n/** Combines multiple fragments into a single fragment. */\nexport function combineFragments(\n  ...fragments: readonly ServerlessApplicationModel[]\n): ServerlessApplicationModel {\n  if (fragments.length === 0) {\n    return {\n      Resources: {},\n    };\n  }\n\n  return fragments.reduce((acc, next) => ({\n    AWSTemplateFormatVersion:\n      acc.AWSTemplateFormatVersion ?? next.AWSTemplateFormatVersion,\n    Conditions: {...acc.Conditions, ...next.Conditions},\n    Globals: {\n      ...acc.Globals,\n      ...next.Globals,\n      Function: {\n        ...acc.Globals?.Function,\n        ...next.Globals?.Function,\n        Environment: {\n          // @ts-expect-error - typedef treats `Environment` as `unknown`\n          ...acc.Globals?.Function?.Environment,\n          // @ts-expect-error - typedef treats `Environment` as `unknown`\n          ...next.Globals?.Function?.Environment,\n          Variables: {\n            // @ts-expect-error - typedef treats `Environment` as `unknown`\n            ...acc.Globals?.Function?.Environment?.Variables,\n            // @ts-expect-error - typedef treats `Environment` as `unknown`\n            ...next.Globals?.Function?.Environment?.Variables,\n          },\n        },\n      },\n    },\n    Outputs: {...acc.Outputs, ...next.Outputs},\n    Parameters: {...acc.Parameters, ...next.Parameters},\n    Resources: {...acc.Resources, ...next.Resources},\n    Transform: combineTransforms(acc.Transform, next.Transform),\n  }));\n}\n\nfunction combineTransforms(\n  left: string | readonly string[] | undefined,\n  right: string | readonly string[] | undefined\n): string | string[] | undefined {\n  left = Array.isArray(left) ? left : [left];\n  right = Array.isArray(right) ? right : [right];\n\n  const items = Array.from(new Set([...left, ...right])).filter(filterNull);\n\n  if (items.length === 0) {\n    return undefined;\n  }\n\n  if (items.length === 1) {\n    return items[0];\n  }\n\n  return items;\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAyB;AAIlB,SAAS,oBACX,WACyB;AAC5B,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAO;AAAA,MACL,WAAW,CAAC;AAAA,IACd;AAAA,EACF;AAEA,SAAO,UAAU,OAAO,CAAC,KAAK,UAAU;AAAA,IACtC,0BACE,IAAI,4BAA4B,KAAK;AAAA,IACvC,YAAY,EAAC,GAAG,IAAI,YAAY,GAAG,KAAK,WAAU;AAAA,IAClD,SAAS;AAAA,MACP,GAAG,IAAI;AAAA,MACP,GAAG,KAAK;AAAA,MACR,UAAU;AAAA,QACR,GAAG,IAAI,SAAS;AAAA,QAChB,GAAG,KAAK,SAAS;AAAA,QACjB,aAAa;AAAA;AAAA,UAEX,GAAG,IAAI,SAAS,UAAU;AAAA;AAAA,UAE1B,GAAG,KAAK,SAAS,UAAU;AAAA,UAC3B,WAAW;AAAA;AAAA,YAET,GAAG,IAAI,SAAS,UAAU,aAAa;AAAA;AAAA,YAEvC,GAAG,KAAK,SAAS,UAAU,aAAa;AAAA,UAC1C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS,EAAC,GAAG,IAAI,SAAS,GAAG,KAAK,QAAO;AAAA,IACzC,YAAY,EAAC,GAAG,IAAI,YAAY,GAAG,KAAK,WAAU;AAAA,IAClD,WAAW,EAAC,GAAG,IAAI,WAAW,GAAG,KAAK,UAAS;AAAA,IAC/C,WAAW,kBAAkB,IAAI,WAAW,KAAK,SAAS;AAAA,EAC5D,EAAE;AACJ;AAEA,SAAS,kBACP,MACA,OAC+B;AAC/B,SAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACzC,UAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAE7C,QAAM,QAAQ,MAAM,KAAK,oBAAI,IAAI,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,yBAAU;AAExE,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC;AAAA,EAChB;AAEA,SAAO;AACT;",
  "names": []
}
