-
Notifications
You must be signed in to change notification settings - Fork 25.2k
Expand file tree
/
Copy pathconfig.js
More file actions
133 lines (118 loc) · 3.32 KB
/
Copy pathconfig.js
File metadata and controls
133 lines (118 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
*/
import type {BabelCoreOptions} from '@babel/core';
const {ModuleResolutionKind} = require('typescript');
export type BuildOptions = Readonly<{
// The target runtime to compile for.
target:
| 'node'
// A special compile target aligning with the "react-native-noflow" exports
// condition. This entry point allows compatible native parsers (e.g. Bun
// and SWC) to consume React Native without Flow types. Output will be stored
// in `dist_noflow/`.
| 'noflow',
// Whether to emit Flow definition files (.js.flow) (default: true).
emitFlowDefs?: boolean,
// Whether to emit TypeScript definition files (.d.ts) (default: false).
emitTypeScriptDefs?: boolean,
// Source dir glob override (default: 'src/**/*'). This is intended to provide
// compatibility for the react-native package only. This setting is ignored
// unless using the 'noflow' compile target.
srcOverride?: string | null,
}>;
export type BuildConfig = Readonly<{
// The packages to include for build and their build options.
packages: Readonly<{[packageName: string]: BuildOptions}>,
}>;
/**
* - BUILD CONFIG -
*
* Add packages here to configure them as part of the monorepo `yarn build`
* setup. These must use a consistent package structure and (today) target
* Node.js packages only.
*/
const buildConfig: BuildConfig = {
/* eslint sort-keys: "error" */
packages: {
'community-cli-plugin': {
target: 'node',
},
'core-cli-utils': {
emitTypeScriptDefs: true,
target: 'node',
},
'debugger-shell': {
emitTypeScriptDefs: true,
target: 'node',
},
'dev-middleware': {
emitTypeScriptDefs: true,
target: 'node',
},
'metro-config': {
emitTypeScriptDefs: true,
target: 'node',
},
'react-native': {
srcOverride: 'Libraries/**/*.js,src/**/*.js,index.js',
target: 'noflow',
},
'react-native-compatibility-check': {
emitTypeScriptDefs: true,
target: 'node',
},
'virtualized-lists': {
srcOverride: 'Lists/**/*.js,Utilities/**/*.js,index.js',
target: 'noflow',
},
},
};
const defaultBuildOptions = {
emitFlowDefs: true,
emitTypeScriptDefs: false,
srcOverride: null,
};
function getBuildOptions(
packageName: keyof BuildConfig['packages'],
): Required<BuildOptions> {
return {
...defaultBuildOptions,
...buildConfig.packages[packageName],
};
}
function getBabelConfig(
packageName: keyof BuildConfig['packages'],
): BabelCoreOptions {
const {target} = getBuildOptions(packageName);
switch (target) {
case 'node':
return require('./babel/node.config.js');
case 'noflow':
return require('./babel/noflow.config.js');
}
}
function getTypeScriptCompilerOptions(
packageName: keyof BuildConfig['packages'],
): Object {
const {target} = getBuildOptions(packageName);
switch (target) {
case 'node':
return {
...require('@tsconfig/node22/tsconfig.json').compilerOptions,
moduleResolution: ModuleResolutionKind.Node16,
};
}
}
module.exports = {
buildConfig,
getBabelConfig,
getBuildOptions,
getTypeScriptCompilerOptions,
};