hunk.code_window: - Build resources:
     - [`intel-medium`](eas-json/#resourceclass-2): 3 cores, 12 GB RAM, 2 builder VMs per host
     - [`m1-medium`](eas-json/#resourceclass-2): 2 cores, 8 GB RAM, 2 builder VMs per host
   - [npm cache](caching/#javascript-dependencies)
   - [CocoaPods cache](caching/#ios-dependencies)
   - [`cocoapods-nexus-plugin`](https://github.com/expo/eas-build/tree/main/packages/cocoapods-nexus-plugin)
   - Global npm configuration in **~/.npmrc**:
  
hunk.labels: keep keep replace keep keep keep keep keep
hunk.after_edit:   - [`m-medium`](eas-json/#resourceclass-2): 2 cores, 8 GB RAM, 2 builder VMs per host
  
hunk.file_path: docs/pages/build-reference/infrastructure.mdx
hunk.type: replace
file: {"version":3,"file":"ExpoMailComposer.web.js","sourceRoot":"","sources":["../src/ExpoMailComposer.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,cAAc,CAAC;AAE9B,OAAO,EAA2C,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEnG,SAAS,mBAAmB,CAAC,GAAG;IAC9B,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE;QAC1B,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;YACzB,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;SACtB;KACF;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,eAAe;IACb,IAAI,IAAI;QACN,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,MAAM,KAAK,GAAG,mBAAmB,CAAC;YAChC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC;YACpC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC;YACtC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC;QAE/C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpB,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,YAAY,EAAE,CAAC;IACrD,CAAC;IACD,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC","sourcesContent":["import qs from 'query-string';\n\nimport { MailComposerOptions, MailComposerResult, MailComposerStatus } from './MailComposer.types';\n\nfunction removeNullishValues(obj) {\n  for (const propName in obj) {\n    if (obj[propName] == null) {\n      delete obj[propName];\n    }\n  }\n  return obj;\n}\n\nfunction checkValue(value?: string[] | string): string | null {\n  if (!value) {\n    return null;\n  }\n\n  const arr = Array.isArray(value) ? value : [value];\n  return arr.join(',');\n}\n\nexport default {\n  get name(): string {\n    return 'ExpoMailComposer';\n  },\n  async composeAsync(options: MailComposerOptions): Promise<MailComposerResult> {\n    const email = removeNullishValues({\n      cc: checkValue(options.ccRecipients),\n      bcc: checkValue(options.bccRecipients),\n      subject: options.subject,\n      body: options.body,\n    });\n\n    const query = qs.stringify(email);\n    const queryComponent = query ? '?' + query : '';\n    const to = checkValue(options.recipients) || '';\n    const mailto = `mailto:${to}${queryComponent}`;\n\n    window.open(mailto);\n\n    return { status: MailComposerStatus.UNDETERMINED };\n  },\n  async isAvailableAsync(): Promise<boolean> {\n    return true;\n  },\n};\n"]}