1{"version":3,"file":"extensions.js","names":["getExtensions","platforms","extensions","workflows","assert","Array","isArray","fileExtensions","workflow","platform","extension","push","filter","Boolean","join","getLanguageExtensionsInOrder","isTS","isModern","isReact","addLanguage","lang","unshift","getManagedExtensions","languageOptions","_addMiscellaneousExtensions","getBareExtensions","includes"],"sources":["../../src/paths/extensions.ts"],"sourcesContent":["import assert from 'assert';\n\nexport type LanguageOptions = {\n  isTS: boolean;\n  isModern: boolean;\n  isReact: boolean;\n};\n\nexport function getExtensions(\n  platforms: string[],\n  extensions: string[],\n  workflows: string[]\n): string[] {\n  // In the past we used spread operators to collect the values so now we enforce type safety on them.\n  assert(Array.isArray(platforms), 'Expected: `platforms: string[]`');\n  assert(Array.isArray(extensions), 'Expected: `extensions: string[]`');\n  assert(Array.isArray(workflows), 'Expected: `workflows: string[]`');\n\n  const fileExtensions = [];\n  // support .expo files\n  for (const workflow of [...workflows, '']) {\n    // Ensure order is correct: [platformA.js, platformB.js, js]\n    for (const platform of [...platforms, '']) {\n      // Support both TypeScript and JavaScript\n      for (const extension of extensions) {\n        fileExtensions.push([platform, workflow, extension].filter(Boolean).join('.'));\n      }\n    }\n  }\n  return fileExtensions;\n}\n\nexport function getLanguageExtensionsInOrder({\n  isTS,\n  isModern,\n  isReact,\n}: LanguageOptions): string[] {\n  // @ts-ignore: filter removes false type\n  const addLanguage = (lang: string): string[] => [lang, isReact && `${lang}x`].filter(Boolean);\n\n  // Support JavaScript\n  let extensions = addLanguage('js');\n\n  if (isModern) {\n    extensions.unshift('mjs');\n  }\n  if (isTS) {\n    extensions = [...addLanguage('ts'), ...extensions];\n  }\n\n  return extensions;\n}\n\nexport function getManagedExtensions(\n  platforms: string[],\n  languageOptions: LanguageOptions = { isTS: true, isModern: true, isReact: true }\n): string[] {\n  const fileExtensions = getExtensions(platforms, getLanguageExtensionsInOrder(languageOptions), [\n    'expo',\n  ]);\n  // Always add these last\n  _addMiscellaneousExtensions(platforms, fileExtensions);\n  return fileExtensions;\n}\n\nexport function getBareExtensions(\n  platforms: string[],\n  languageOptions: LanguageOptions = { isTS: true, isModern: true, isReact: true }\n): string[] {\n  const fileExtensions = getExtensions(\n    platforms,\n    getLanguageExtensionsInOrder(languageOptions),\n    []\n  );\n  // Always add these last\n  _addMiscellaneousExtensions(platforms, fileExtensions);\n  return fileExtensions;\n}\n\nfunction _addMiscellaneousExtensions(platforms: string[], fileExtensions: string[]): string[] {\n  // Always add these with no platform extension\n  // In the future we may want to add platform and workspace extensions to json.\n  fileExtensions.push('json');\n  // Native doesn't currently support web assembly.\n  if (platforms.includes('web')) {\n    fileExtensions.push('wasm');\n  }\n  return fileExtensions;\n}\n"],"mappings":";;;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;;;AAQO,SAASA,aAAT,CACLC,SADK,EAELC,UAFK,EAGLC,SAHK,EAIK;EACV;EACA,IAAAC,iBAAA,EAAOC,KAAK,CAACC,OAAN,CAAcL,SAAd,CAAP,EAAiC,iCAAjC;EACA,IAAAG,iBAAA,EAAOC,KAAK,CAACC,OAAN,CAAcJ,UAAd,CAAP,EAAkC,kCAAlC;EACA,IAAAE,iBAAA,EAAOC,KAAK,CAACC,OAAN,CAAcH,SAAd,CAAP,EAAiC,iCAAjC;EAEA,MAAMI,cAAc,GAAG,EAAvB,CANU,CAOV;;EACA,KAAK,MAAMC,QAAX,IAAuB,CAAC,GAAGL,SAAJ,EAAe,EAAf,CAAvB,EAA2C;IACzC;IACA,KAAK,MAAMM,QAAX,IAAuB,CAAC,GAAGR,SAAJ,EAAe,EAAf,CAAvB,EAA2C;MACzC;MACA,KAAK,MAAMS,SAAX,IAAwBR,UAAxB,EAAoC;QAClCK,cAAc,CAACI,IAAf,CAAoB,CAACF,QAAD,EAAWD,QAAX,EAAqBE,SAArB,EAAgCE,MAAhC,CAAuCC,OAAvC,EAAgDC,IAAhD,CAAqD,GAArD,CAApB;MACD;IACF;EACF;;EACD,OAAOP,cAAP;AACD;;AAEM,SAASQ,4BAAT,CAAsC;EAC3CC,IAD2C;EAE3CC,QAF2C;EAG3CC;AAH2C,CAAtC,EAIuB;EAC5B;EACA,MAAMC,WAAW,GAAIC,IAAD,IAA4B,CAACA,IAAD,EAAOF,OAAO,IAAK,GAAEE,IAAK,GAA1B,EAA8BR,MAA9B,CAAqCC,OAArC,CAAhD,CAF4B,CAI5B;;;EACA,IAAIX,UAAU,GAAGiB,WAAW,CAAC,IAAD,CAA5B;;EAEA,IAAIF,QAAJ,EAAc;IACZf,UAAU,CAACmB,OAAX,CAAmB,KAAnB;EACD;;EACD,IAAIL,IAAJ,EAAU;IACRd,UAAU,GAAG,CAAC,GAAGiB,WAAW,CAAC,IAAD,CAAf,EAAuB,GAAGjB,UAA1B,CAAb;EACD;;EAED,OAAOA,UAAP;AACD;;AAEM,SAASoB,oBAAT,CACLrB,SADK,EAELsB,eAAgC,GAAG;EAAEP,IAAI,EAAE,IAAR;EAAcC,QAAQ,EAAE,IAAxB;EAA8BC,OAAO,EAAE;AAAvC,CAF9B,EAGK;EACV,MAAMX,cAAc,GAAGP,aAAa,CAACC,SAAD,EAAYc,4BAA4B,CAACQ,eAAD,CAAxC,EAA2D,CAC7F,MAD6F,CAA3D,CAApC,CADU,CAIV;;EACAC,2BAA2B,CAACvB,SAAD,EAAYM,cAAZ,CAA3B;;EACA,OAAOA,cAAP;AACD;;AAEM,SAASkB,iBAAT,CACLxB,SADK,EAELsB,eAAgC,GAAG;EAAEP,IAAI,EAAE,IAAR;EAAcC,QAAQ,EAAE,IAAxB;EAA8BC,OAAO,EAAE;AAAvC,CAF9B,EAGK;EACV,MAAMX,cAAc,GAAGP,aAAa,CAClCC,SADkC,EAElCc,4BAA4B,CAACQ,eAAD,CAFM,EAGlC,EAHkC,CAApC,CADU,CAMV;;EACAC,2BAA2B,CAACvB,SAAD,EAAYM,cAAZ,CAA3B;;EACA,OAAOA,cAAP;AACD;;AAED,SAASiB,2BAAT,CAAqCvB,SAArC,EAA0DM,cAA1D,EAA8F;EAC5F;EACA;EACAA,cAAc,CAACI,IAAf,CAAoB,MAApB,EAH4F,CAI5F;;EACA,IAAIV,SAAS,CAACyB,QAAV,CAAmB,KAAnB,CAAJ,EAA+B;IAC7BnB,cAAc,CAACI,IAAf,CAAoB,MAApB;EACD;;EACD,OAAOJ,cAAP;AACD"}