1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4  value: true
5});
6exports.getBareExtensions = getBareExtensions;
7exports.getExtensions = getExtensions;
8exports.getLanguageExtensionsInOrder = getLanguageExtensionsInOrder;
9exports.getManagedExtensions = getManagedExtensions;
10
11function _assert() {
12  const data = _interopRequireDefault(require("assert"));
13
14  _assert = function () {
15    return data;
16  };
17
18  return data;
19}
20
21function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
23function getExtensions(platforms, extensions, workflows) {
24  // In the past we used spread operators to collect the values so now we enforce type safety on them.
25  (0, _assert().default)(Array.isArray(platforms), 'Expected: `platforms: string[]`');
26  (0, _assert().default)(Array.isArray(extensions), 'Expected: `extensions: string[]`');
27  (0, _assert().default)(Array.isArray(workflows), 'Expected: `workflows: string[]`');
28  const fileExtensions = []; // support .expo files
29
30  for (const workflow of [...workflows, '']) {
31    // Ensure order is correct: [platformA.js, platformB.js, js]
32    for (const platform of [...platforms, '']) {
33      // Support both TypeScript and JavaScript
34      for (const extension of extensions) {
35        fileExtensions.push([platform, workflow, extension].filter(Boolean).join('.'));
36      }
37    }
38  }
39
40  return fileExtensions;
41}
42
43function getLanguageExtensionsInOrder({
44  isTS,
45  isModern,
46  isReact
47}) {
48  // @ts-ignore: filter removes false type
49  const addLanguage = lang => [lang, isReact && `${lang}x`].filter(Boolean); // Support JavaScript
50
51
52  let extensions = addLanguage('js');
53
54  if (isModern) {
55    extensions.unshift('mjs');
56  }
57
58  if (isTS) {
59    extensions = [...addLanguage('ts'), ...extensions];
60  }
61
62  return extensions;
63}
64
65function getManagedExtensions(platforms, languageOptions = {
66  isTS: true,
67  isModern: true,
68  isReact: true
69}) {
70  const fileExtensions = getExtensions(platforms, getLanguageExtensionsInOrder(languageOptions), ['expo']); // Always add these last
71
72  _addMiscellaneousExtensions(platforms, fileExtensions);
73
74  return fileExtensions;
75}
76
77function getBareExtensions(platforms, languageOptions = {
78  isTS: true,
79  isModern: true,
80  isReact: true
81}) {
82  const fileExtensions = getExtensions(platforms, getLanguageExtensionsInOrder(languageOptions), []); // Always add these last
83
84  _addMiscellaneousExtensions(platforms, fileExtensions);
85
86  return fileExtensions;
87}
88
89function _addMiscellaneousExtensions(platforms, fileExtensions) {
90  // Always add these with no platform extension
91  // In the future we may want to add platform and workspace extensions to json.
92  fileExtensions.push('json'); // Native doesn't currently support web assembly.
93
94  if (platforms.includes('web')) {
95    fileExtensions.push('wasm');
96  }
97
98  return fileExtensions;
99}
100//# sourceMappingURL=extensions.js.map