1 |
|
2 | import type {EnvironmentOpts} from '@parcel/types';
|
3 | import type {Environment} from './types';
|
4 | import {md5FromObject} from '@parcel/utils';
|
5 |
|
6 | const DEFAULT_ENGINES = {
|
7 | browsers: ['> 0.25%'],
|
8 | node: '>= 8.0.0',
|
9 | };
|
10 |
|
11 | export function createEnvironment({
|
12 | context,
|
13 | engines,
|
14 | includeNodeModules,
|
15 | outputFormat,
|
16 | isLibrary = false,
|
17 | }: EnvironmentOpts = {}): Environment {
|
18 | if (context == null) {
|
19 | if (engines?.node) {
|
20 | context = 'node';
|
21 | } else if (engines?.browsers) {
|
22 | context = 'browser';
|
23 | } else {
|
24 | context = 'browser';
|
25 | }
|
26 | }
|
27 |
|
28 | if (engines == null) {
|
29 | switch (context) {
|
30 | case 'node':
|
31 | case 'electron-main':
|
32 | engines = {
|
33 | node: DEFAULT_ENGINES.node,
|
34 | };
|
35 | break;
|
36 | case 'browser':
|
37 | case 'web-worker':
|
38 | case 'service-worker':
|
39 | case 'electron-renderer':
|
40 | engines = {
|
41 | browsers: DEFAULT_ENGINES.browsers,
|
42 | };
|
43 | break;
|
44 | default:
|
45 | engines = {};
|
46 | }
|
47 | }
|
48 |
|
49 | if (includeNodeModules == null) {
|
50 | switch (context) {
|
51 | case 'node':
|
52 | case 'electron-main':
|
53 | case 'electron-renderer':
|
54 | includeNodeModules = false;
|
55 | break;
|
56 | case 'browser':
|
57 | case 'web-worker':
|
58 | case 'service-worker':
|
59 | default:
|
60 | includeNodeModules = true;
|
61 | break;
|
62 | }
|
63 | }
|
64 |
|
65 | if (outputFormat == null) {
|
66 | switch (context) {
|
67 | case 'node':
|
68 | case 'electron-main':
|
69 | case 'electron-renderer':
|
70 | outputFormat = 'commonjs';
|
71 | break;
|
72 | default:
|
73 | outputFormat = 'global';
|
74 | break;
|
75 | }
|
76 | }
|
77 |
|
78 | return {
|
79 | context,
|
80 | engines,
|
81 | includeNodeModules,
|
82 | outputFormat,
|
83 | isLibrary,
|
84 | };
|
85 | }
|
86 |
|
87 | export function mergeEnvironments(
|
88 | a: Environment,
|
89 | b: ?EnvironmentOpts,
|
90 | ): Environment {
|
91 |
|
92 | if (a === b) {
|
93 | return a;
|
94 | }
|
95 |
|
96 | return createEnvironment({
|
97 | ...a,
|
98 | ...b,
|
99 | });
|
100 | }
|
101 |
|
102 | export function getEnvironmentHash(env: Environment) {
|
103 |
|
104 |
|
105 | return md5FromObject({
|
106 | engines: env.engines,
|
107 | includeNodeModules: env.includeNodeModules,
|
108 | outputFormat: env.outputFormat,
|
109 | isLibrary: env.isLibrary,
|
110 | });
|
111 | }
|