{
  "version": 3,
  "sources": ["../../src/environment-transform.ts"],
  "sourcesContent": ["import camelCase from 'lodash/camelCase.js';\nimport upperFirst from 'lodash/upperFirst.js';\n\nimport {assert} from '@code-like-a-carpenter/assert';\nimport type {Transform} from '@code-like-a-carpenter/foundation-plugin-cloudformation';\nimport {\n  isDispatcherStack,\n  isHandlerStack,\n} from '@code-like-a-carpenter/foundation-plugin-cloudformation';\n\nexport const transform: Transform = (ir, template, nestedTemplates) => {\n  // @ts-expect-error - typedef does not include Variables\n  const globalVars = template.Globals?.Function?.Environment?.Variables;\n  if (!globalVars) {\n    return;\n  }\n\n  const nestedVars: Record<string, {Ref: string}> = {};\n  const nestedParams: Record<string, {Type: 'String'}> = {};\n  const params: Record<string, unknown> = {};\n\n  for (const [key, value] of Object.entries(globalVars)) {\n    const constCase = key;\n    const pascalCase = upperFirst(camelCase(key));\n\n    nestedVars[constCase] = {Ref: pascalCase};\n    nestedParams[pascalCase] = {\n      Type: 'String',\n    };\n    params[pascalCase] = value;\n  }\n\n  for (const tpl of nestedTemplates.values()) {\n    tpl.Globals = {\n      ...tpl.Globals,\n      Function: {\n        ...tpl.Globals?.Function,\n        Environment: {\n          ...(tpl.Globals?.Function?.Environment ?? {}),\n          Variables: {\n            // @ts-expect-error - typedef does not include Variables\n            ...tpl.Globals?.Function?.Environment?.Variables,\n            ...nestedVars,\n          },\n        },\n      },\n    };\n    tpl.Parameters = {\n      ...tpl.Parameters,\n      ...nestedParams,\n    };\n  }\n\n  Object.entries(template.Resources)\n    .filter(([, resource]) => resource.Type === 'AWS::Serverless::Application')\n    .filter(\n      ([resourceName]) =>\n        isDispatcherStack(resourceName) || isHandlerStack(resourceName)\n    )\n    .forEach(([, resource]) => {\n      assert(\n        resource.Type === 'AWS::Serverless::Application',\n        'Expected resource to be a Serverless Application'\n      );\n      assert(resource.Properties, 'Expected resource to have properties');\n\n      const existing = resource.Properties.Parameters ?? {};\n\n      resource.Properties.Parameters = {\n        ...existing,\n        ...params,\n      };\n    });\n};\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAsB;AACtB,wBAAuB;AAEvB,oBAAqB;AAErB,8CAGO;AAEA,IAAM,YAAuB,CAAC,IAAI,UAAU,oBAAoB;AAErE,QAAM,aAAa,SAAS,SAAS,UAAU,aAAa;AAC5D,MAAI,CAAC,YAAY;AACf;AAAA,EACF;AAEA,QAAM,aAA4C,CAAC;AACnD,QAAM,eAAiD,CAAC;AACxD,QAAM,SAAkC,CAAC;AAEzC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,UAAM,YAAY;AAClB,UAAM,iBAAa,kBAAAA,aAAW,iBAAAC,SAAU,GAAG,CAAC;AAE5C,eAAW,SAAS,IAAI,EAAC,KAAK,WAAU;AACxC,iBAAa,UAAU,IAAI;AAAA,MACzB,MAAM;AAAA,IACR;AACA,WAAO,UAAU,IAAI;AAAA,EACvB;AAEA,aAAW,OAAO,gBAAgB,OAAO,GAAG;AAC1C,QAAI,UAAU;AAAA,MACZ,GAAG,IAAI;AAAA,MACP,UAAU;AAAA,QACR,GAAG,IAAI,SAAS;AAAA,QAChB,aAAa;AAAA,UACX,GAAI,IAAI,SAAS,UAAU,eAAe,CAAC;AAAA,UAC3C,WAAW;AAAA;AAAA,YAET,GAAG,IAAI,SAAS,UAAU,aAAa;AAAA,YACvC,GAAG;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,aAAa;AAAA,MACf,GAAG,IAAI;AAAA,MACP,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAO,QAAQ,SAAS,SAAS,EAC9B,OAAO,CAAC,CAAC,EAAE,QAAQ,MAAM,SAAS,SAAS,8BAA8B,EACzE;AAAA,IACC,CAAC,CAAC,YAAY,UACZ,2DAAkB,YAAY,SAAK,wDAAe,YAAY;AAAA,EAClE,EACC,QAAQ,CAAC,CAAC,EAAE,QAAQ,MAAM;AACzB;AAAA,MACE,SAAS,SAAS;AAAA,MAClB;AAAA,IACF;AACA,8BAAO,SAAS,YAAY,sCAAsC;AAElE,UAAM,WAAW,SAAS,WAAW,cAAc,CAAC;AAEpD,aAAS,WAAW,aAAa;AAAA,MAC/B,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AACL;",
  "names": ["upperFirst", "camelCase"]
}
