Files
react-native/scripts/build/config.js
T
Gijs Weterings d4ad19c969 Revert D49370200: Migrate codegen to shared build setup, remove package build pre-step from RNTester
Differential Revision:
D49370200

Original commit changeset: 992913155169

Original Phabricator Diff: D49370200

fbshipit-source-id: e8232c97c22065fb54ac940ee2351b2155eb51e0
2023-10-23 12:00:54 -07:00

100 lines
2.2 KiB
JavaScript

/**
* 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
* @oncall react_native
*/
/*::
import type {BabelCoreOptions} from '@babel/core';
*/
const {ModuleResolutionKind} = require('typescript');
/*::
export type BuildOptions = $ReadOnly<{
// The target runtime to compile for.
target: 'node',
// Whether to emit Flow definition files (.js.flow) (default: true).
emitFlowDefs?: boolean,
// Whether to emit TypeScript definition files (.d.ts) (default: false).
emitTypeScriptDefs?: boolean,
}>;
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 */ = {
packages: {
'community-cli-plugin': {
target: 'node',
},
'dev-middleware': {
target: 'node',
emitTypeScriptDefs: true,
},
},
};
const defaultBuildOptions = {
emitFlowDefs: true,
emitTypeScriptDefs: false,
};
function getBuildOptions(
packageName /*: $Keys<BuildConfig['packages']> */,
) /*: Required<BuildOptions> */ {
return {
...defaultBuildOptions,
...buildConfig.packages[packageName],
};
}
function getBabelConfig(
packageName /*: $Keys<BuildConfig['packages']> */,
) /*: BabelCoreOptions */ {
const {target} = getBuildOptions(packageName);
switch (target) {
case 'node':
return require('./babel/node.config.js');
}
}
function getTypeScriptCompilerOptions(
packageName /*: $Keys<BuildConfig['packages']> */,
) /*: Object */ {
const {target} = getBuildOptions(packageName);
switch (target) {
case 'node':
return {
...require('@tsconfig/node18/tsconfig.json').compilerOptions,
moduleResolution: ModuleResolutionKind.NodeJs,
};
}
}
module.exports = {
buildConfig,
getBabelConfig,
getBuildOptions,
getTypeScriptCompilerOptions,
};