diff --git a/packages/cli-types/src/index.ts b/packages/cli-types/src/index.ts index 39b5c5518..7738f22ec 100644 --- a/packages/cli-types/src/index.ts +++ b/packages/cli-types/src/index.ts @@ -94,6 +94,12 @@ export interface Dependency { params: InquirerPrompt[]; } +export type ProjectConfig = { + android?: AndroidProjectConfig; + ios?: IOSProjectConfig; + [key: string]: any; +}; + /** * @property root - Root where the configuration has been resolved from * @property reactNativePath - Path to React Native source @@ -104,14 +110,10 @@ export interface Dependency { * @property commands - An array of commands that are present in 3rd party packages * @property haste - Haste configuration resolved based on available plugins */ -export interface Config { +export type Config = { root: string; reactNativePath: string; - project: { - android?: AndroidProjectConfig; - ios?: IOSProjectConfig; - [key: string]: any; - }; + project: ProjectConfig; assets: string[]; dependencies: {[key: string]: Dependency}; platforms: { @@ -134,17 +136,15 @@ export interface Config { platforms: Array; providesModuleNodeModules: Array; }; -} - -type Diff = T extends U ? never : T; +}; /** - * Shares some structure with ConfigT, except that haste and root + * Shares some structure with Config, except that haste and root * are calculated and can't be defined */ -export type UserConfig = Diff & { - reactNativePath: string | void; +export type UserConfig = Omit & { + reactNativePath: string | void; // Additional project settings project: { android?: AndroidProjectParams; @@ -153,6 +153,20 @@ export type UserConfig = Diff & { }; }; +export type UserDependencyConfig = { + // Additional dependency settings + dependency: Omit; + // An array of commands that ship with the dependency + commands: Command[]; + // An array of extra platforms to load + platforms: Config['platforms']; + // Haste config defined by legacy `rnpm` + haste?: { + platforms: string[]; + providesModuleNodeModules: string[]; + }; +}; + export { IOSProjectConfig, IOSProjectParams, diff --git a/packages/cli-types/src/ios.ts b/packages/cli-types/src/ios.ts index 173f2116d..7129dffd3 100644 --- a/packages/cli-types/src/ios.ts +++ b/packages/cli-types/src/ios.ts @@ -10,7 +10,7 @@ export interface IOSProjectParams { sharedLibraries?: string[]; libraryFolder?: string; plist: Array; - scriptPhases: Array; + scriptPhases?: Array; } export interface IOSDependencyParams extends IOSProjectParams {} diff --git a/packages/cli/package.json b/packages/cli/package.json index 4eafca169..8ca6c698a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -70,6 +70,8 @@ "devDependencies": { "@types/command-exists": "^1.2.0", "@types/graceful-fs": "^4.1.3", + "@types/cosmiconfig": "^5.0.3", + "@types/hapi__joi": "^15.0.4", "@types/minimist": "^1.2.0", "@types/mkdirp": "^0.5.2", "@types/semver": "^6.0.2", diff --git a/packages/cli/src/cliEntry.js b/packages/cli/src/cliEntry.js index 062960709..f65fc8558 100644 --- a/packages/cli/src/cliEntry.js +++ b/packages/cli/src/cliEntry.js @@ -23,6 +23,7 @@ import {logger} from '@react-native-community/cli-tools'; // $FlowFixMe - converted to TS import {setProjectDir} from './tools/packageManager'; import pkgJson from '../package.json'; +// $FlowFixMe - converted to TS import loadConfig from './tools/config'; commander diff --git a/packages/cli/src/commands/info/__tests__/info.test.ts b/packages/cli/src/commands/info/__tests__/info.test.ts index 6635182e7..a888126d1 100644 --- a/packages/cli/src/commands/info/__tests__/info.test.ts +++ b/packages/cli/src/commands/info/__tests__/info.test.ts @@ -1,7 +1,6 @@ // @flow import info from '../info'; import {logger} from '@react-native-community/cli-tools'; -// eslint-disable-next-line import/namespace, import/default import loadConfig from '../../../tools/config'; jest.mock('../../../tools/config'); diff --git a/packages/cli/src/commands/install/install.ts b/packages/cli/src/commands/install/install.ts index fcf95ab69..6f3a8fbce 100644 --- a/packages/cli/src/commands/install/install.ts +++ b/packages/cli/src/commands/install/install.ts @@ -8,8 +8,7 @@ import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; import link from '../link/link'; -// @ts-ignore FIXME after converting tools/config -import loadConfig from '../../tools/config'; // eslint-disable-line import/namespace, import/default +import loadConfig from '../../tools/config'; async function install(args: Array): Promise { const name = args[0]; diff --git a/packages/cli/src/commands/link/__tests__/link-test.ts b/packages/cli/src/commands/link/__tests__/link-test.ts index fd4974f69..bcb7021cc 100644 --- a/packages/cli/src/commands/link/__tests__/link-test.ts +++ b/packages/cli/src/commands/link/__tests__/link-test.ts @@ -1,5 +1,5 @@ import {func as link} from '../link'; -import loadConfig from '../../../tools/config'; // eslint-disable-line import/namespace, import/default +import loadConfig from '../../../tools/config'; import makeHook from '../makeHook'; jest.mock('chalk', () => ({grey: str => str, bold: str => str})); jest.mock('../../../tools/config'); diff --git a/packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts b/packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts index ec9a01af8..4a090e5d1 100644 --- a/packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts +++ b/packages/cli/src/commands/upgrade/__tests__/upgrade.test.ts @@ -5,7 +5,7 @@ import snapshotDiff from 'snapshot-diff'; import stripAnsi from 'strip-ansi'; import upgrade from '../upgrade'; import {fetch, logger} from '@react-native-community/cli-tools'; -import loadConfig from '../../../tools/config'; // eslint-disable-line import/namespace, import/default +import loadConfig from '../../../tools/config'; import merge from '../../../tools/merge'; jest.mock('https'); diff --git a/packages/cli/src/tools/config/__mocks__/index.js b/packages/cli/src/tools/config/__mocks__/index.ts similarity index 96% rename from packages/cli/src/tools/config/__mocks__/index.js rename to packages/cli/src/tools/config/__mocks__/index.ts index 78f27628a..08a213a9a 100644 --- a/packages/cli/src/tools/config/__mocks__/index.js +++ b/packages/cli/src/tools/config/__mocks__/index.ts @@ -1,7 +1,3 @@ -/** - * @flow - */ - export default function mockedLoadConfig() { return { root: '/project/root', diff --git a/packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.js b/packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.ts similarity index 91% rename from packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.js rename to packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.ts index d85dee2ae..6b739df3d 100644 --- a/packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.js +++ b/packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.ts @@ -1,7 +1,3 @@ -/** - * @flow - */ - const path = require('path'); export default function resolveNodeModuleDir( diff --git a/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap b/packages/cli/src/tools/config/__tests__/__snapshots__/index-test.ts.snap similarity index 100% rename from packages/cli/src/tools/config/__tests__/__snapshots__/index-test.js.snap rename to packages/cli/src/tools/config/__tests__/__snapshots__/index-test.ts.snap diff --git a/packages/cli/src/tools/config/__tests__/findAssets-test.js b/packages/cli/src/tools/config/__tests__/findAssets-test.ts similarity index 100% rename from packages/cli/src/tools/config/__tests__/findAssets-test.js rename to packages/cli/src/tools/config/__tests__/findAssets-test.ts diff --git a/packages/cli/src/tools/config/__tests__/findDependencies-test.js b/packages/cli/src/tools/config/__tests__/findDependencies-test.ts similarity index 100% rename from packages/cli/src/tools/config/__tests__/findDependencies-test.js rename to packages/cli/src/tools/config/__tests__/findDependencies-test.ts diff --git a/packages/cli/src/tools/config/__tests__/index-test.js b/packages/cli/src/tools/config/__tests__/index-test.ts similarity index 100% rename from packages/cli/src/tools/config/__tests__/index-test.js rename to packages/cli/src/tools/config/__tests__/index-test.ts diff --git a/packages/cli/src/tools/config/errors.js b/packages/cli/src/tools/config/errors.ts similarity index 64% rename from packages/cli/src/tools/config/errors.js rename to packages/cli/src/tools/config/errors.ts index 3b1fbbc55..d3409befb 100644 --- a/packages/cli/src/tools/config/errors.js +++ b/packages/cli/src/tools/config/errors.ts @@ -1,37 +1,17 @@ -/** - * @flow - */ import {CLIError} from '@react-native-community/cli-tools'; - -type JoiErrorDetails = { - message: string, - path: string[], - type: K, - context: T, -}; - -type JoiErrorT = { - details: Array< - JoiErrorDetails< - 'object.allowUnknown' | 'object.base' | 'string.base', - { - key: string, - label: string, - value: Object, - }, - >, - >, -}; +import {ValidationError} from '@hapi/joi'; export class JoiError extends CLIError { - constructor(joiError: JoiErrorT) { + constructor(joiError: ValidationError) { super( joiError.details .map(error => { const name = error.path.join('.'); switch (error.type) { case 'object.allowUnknown': { - const value = JSON.stringify(error.context.value); + const value = JSON.stringify( + error.context && error.context.value, + ); return ` Unknown option ${name} with value "${value}" was found. This is either a typing error or a user mistake. Fixing it will remove this message. @@ -40,7 +20,7 @@ export class JoiError extends CLIError { case 'object.base': case 'string.base': { const expectedType = error.type.replace('.base', ''); - const actualType = typeof error.context.value; + const actualType = typeof (error.context && error.context.value); return ` Option ${name} must be a ${expectedType}, instead got ${actualType} `; diff --git a/packages/cli/src/tools/config/findAssets.js b/packages/cli/src/tools/config/findAssets.ts similarity index 67% rename from packages/cli/src/tools/config/findAssets.js rename to packages/cli/src/tools/config/findAssets.ts index 416581db8..54394ddf2 100644 --- a/packages/cli/src/tools/config/findAssets.js +++ b/packages/cli/src/tools/config/findAssets.ts @@ -1,11 +1,7 @@ -/** - * @flow - */ - import glob from 'glob'; import path from 'path'; -const findAssetsInFolder = folder => { +const findAssetsInFolder = (folder: string): string[] => { const assets = glob.sync(path.join(folder, '**'), {nodir: true}); if (process.platform === 'win32') { return assets.map(asset => asset.split('/').join('\\')); @@ -19,12 +15,14 @@ const findAssetsInFolder = folder => { * * It returns an array of absolute paths to files found. */ -export default function findAssets(folder: string, assets: string[]) { +export default function findAssets( + folder: string, + assets: Array, +): Array { return (assets || []) .map(asset => path.join(folder, asset)) .reduce( - (acc, assetPath) => - (acc.concat(findAssetsInFolder(assetPath)): Array), - [], + (acc, assetPath) => acc.concat(findAssetsInFolder(assetPath)), + [] as string[], ); } diff --git a/packages/cli/src/tools/config/findDependencies.js b/packages/cli/src/tools/config/findDependencies.ts similarity index 96% rename from packages/cli/src/tools/config/findDependencies.js rename to packages/cli/src/tools/config/findDependencies.ts index c5f392964..4d5eb39f1 100644 --- a/packages/cli/src/tools/config/findDependencies.js +++ b/packages/cli/src/tools/config/findDependencies.ts @@ -1,7 +1,3 @@ -/** - * @flow - */ - import path from 'path'; import fs from 'fs'; diff --git a/packages/cli/src/tools/config/index.js b/packages/cli/src/tools/config/index.ts similarity index 85% rename from packages/cli/src/tools/config/index.js rename to packages/cli/src/tools/config/index.ts index 1037c0a70..f5b1f1ca2 100644 --- a/packages/cli/src/tools/config/index.js +++ b/packages/cli/src/tools/config/index.ts @@ -1,8 +1,12 @@ -/** - * @flow - */ import path from 'path'; import chalk from 'chalk'; +import { + UserDependencyConfig, + ProjectConfig, + Dependency, + UserConfig, + Config, +} from '@react-native-community/cli-types'; import {logger, inlineString} from '@react-native-community/cli-tools'; import * as ios from '@react-native-community/cli-platform-ios'; import * as android from '@react-native-community/cli-platform-android'; @@ -13,26 +17,18 @@ import { readConfigFromDisk, readDependencyConfigFromDisk, } from './readConfigFromDisk'; -import type { - ConfigT, - UserDependencyConfigT, - UserConfigT, - DependencyConfigT, -} from 'types'; -// $FlowFixMe - converted to TS import assign from '../assign'; -// $FlowFixMe - converted to TS import merge from '../merge'; import resolveNodeModuleDir from './resolveNodeModuleDir'; function getDependencyConfig( root: string, dependencyName: string, - finalConfig: ConfigT, - config: UserDependencyConfigT, - userConfig: UserConfigT, + finalConfig: Config, + config: UserDependencyConfig, + userConfig: UserConfig, isPlatform: boolean, -): DependencyConfigT { +): Dependency { return merge( { root, @@ -52,24 +48,24 @@ function getDependencyConfig( ); return dependency; }, - {}, + {} as Config['platforms'], ), assets: findAssets(root, config.dependency.assets), hooks: config.dependency.hooks, params: config.dependency.params, }, userConfig.dependencies[dependencyName] || {}, - ); + ) as Dependency; } /** * Loads CLI configuration */ -function loadConfig(projectRoot: string = process.cwd()): ConfigT { - let lazyProject; +function loadConfig(projectRoot: string = process.cwd()): Config { + let lazyProject: ProjectConfig; const userConfig = readConfigFromDisk(projectRoot); - const initialConfig: ConfigT = { + const initialConfig: Config = { root: projectRoot, get reactNativePath() { return userConfig.reactNativePath @@ -93,29 +89,32 @@ function loadConfig(projectRoot: string = process.cwd()): ConfigT { lazyProject = {}; for (const platform in finalConfig.platforms) { - lazyProject[platform] = finalConfig.platforms[platform].projectConfig( - projectRoot, - userConfig.project[platform] || {}, - ); + const platformConfig = finalConfig.platforms[platform]; + if (platformConfig) { + lazyProject[platform] = platformConfig.projectConfig( + projectRoot, + userConfig.project[platform] || {}, + ); + } } return lazyProject; }, }; - let depsWithWarnings = []; + let depsWithWarnings: Array<[string, string]> = []; const finalConfig = Array.from( new Set([ ...Object.keys(userConfig.dependencies), ...findDependencies(projectRoot), ]), - ).reduce((acc: ConfigT, dependencyName) => { + ).reduce((acc: Config, dependencyName) => { const localDependencyRoot = userConfig.dependencies[dependencyName] && userConfig.dependencies[dependencyName].root; - let root; - let config; + let root: string; + let config: UserDependencyConfig; try { root = localDependencyRoot || @@ -147,9 +146,11 @@ function loadConfig(projectRoot: string = process.cwd()): ConfigT { */ if (dependencyName === 'react-native') { if (Object.keys(config.platforms).length === 0) { + // @ts-ignore - this code is soon going to be removed config.platforms = {ios, android}; } if (config.commands.length === 0) { + // @ts-ignore - this code is soon going to be removed config.commands = [...ios.commands, ...android.commands]; } } @@ -167,10 +168,9 @@ function loadConfig(projectRoot: string = process.cwd()): ConfigT { platforms: Object.keys(config.platforms), }; - return (assign({}, acc, { + return assign({}, acc, { dependencies: assign({}, acc.dependencies, { - // $FlowExpectedError: Dynamic getters are not supported - get [dependencyName]() { + get [dependencyName](): Dependency { return getDependencyConfig( root, dependencyName, @@ -193,7 +193,7 @@ function loadConfig(projectRoot: string = process.cwd()): ConfigT { ], platforms: [...acc.haste.platforms, ...haste.platforms], }, - }): ConfigT); + }) as Config; }, initialConfig); if (depsWithWarnings.length) { diff --git a/packages/cli/src/tools/config/readConfigFromDisk.js b/packages/cli/src/tools/config/readConfigFromDisk.ts similarity index 70% rename from packages/cli/src/tools/config/readConfigFromDisk.js rename to packages/cli/src/tools/config/readConfigFromDisk.ts index 197ed237b..069d354a5 100644 --- a/packages/cli/src/tools/config/readConfigFromDisk.js +++ b/packages/cli/src/tools/config/readConfigFromDisk.ts @@ -1,33 +1,52 @@ -/** - * @flow - * - * Loads and validates a project configuration - */ import Joi from '@hapi/joi'; import cosmiconfig from 'cosmiconfig'; import path from 'path'; import chalk from 'chalk'; -import { - type UserDependencyConfigT, - type UserConfigT, - type CommandT, -} from 'types'; import {JoiError} from './errors'; import * as schema from './schema'; import {logger} from '@react-native-community/cli-tools'; import resolveReactNativePath from './resolveReactNativePath'; - +import { + UserConfig, + AndroidProjectConfig, + AndroidDependencyConfig, + IOSProjectConfig, + IOSDependencyConfig, + Command, + InquirerPrompt, + UserDependencyConfig, +} from '@react-native-community/cli-types'; const MIGRATION_GUIDE = `Migration guide: ${chalk.dim.underline( 'https://github.com/react-native-community/cli/blob/master/docs/configuration.md', )}`; +type LegacyConfig = { + ios: IOSProjectConfig; + android: AndroidProjectConfig; + assets: string[]; + reactNativePath: string; + hooks?: { + [key: string]: string; + }; +}; + +type LegacyDependencyConfig = { + platform: any; + ios: IOSDependencyConfig; + android: AndroidDependencyConfig; + assets: string[]; + plugin: Array; + params: InquirerPrompt[]; + haste: any; +}; + /** * Places to look for the new configuration */ const searchPlaces = ['react-native.config.js']; -function readLegacyConfigFromDisk(rootFolder: string): UserConfigT | void { - let config; +function readLegacyConfigFromDisk(rootFolder: string): UserConfig | void { + let config: LegacyConfig; try { config = require(path.join(rootFolder, 'package.json')).rnpm; @@ -40,7 +59,7 @@ function readLegacyConfigFromDisk(rootFolder: string): UserConfigT | void { return undefined; } - const transformedConfig = { + const transformedConfig: UserConfig = { project: { ios: config.ios, android: config.android, @@ -48,6 +67,7 @@ function readLegacyConfigFromDisk(rootFolder: string): UserConfigT | void { assets: config.assets, commands: [], dependencies: {}, + // @ts-ignore - TODO: platforms can be empty, adjust types platforms: {}, get reactNativePath() { return config.reactNativePath @@ -71,7 +91,7 @@ function readLegacyConfigFromDisk(rootFolder: string): UserConfigT | void { * Reads a project configuration as defined by the user in the current * workspace. */ -export function readConfigFromDisk(rootFolder: string): UserConfigT { +export function readConfigFromDisk(rootFolder: string): UserConfig { const explorer = cosmiconfig('react-native', {searchPlaces}); const {config} = explorer.searchSync(rootFolder) || { @@ -84,7 +104,7 @@ export function readConfigFromDisk(rootFolder: string): UserConfigT { throw new JoiError(result.error); } - return result.value; + return result.value as UserConfig; } /** @@ -93,16 +113,17 @@ export function readConfigFromDisk(rootFolder: string): UserConfigT { */ export function readDependencyConfigFromDisk( rootFolder: string, -): {config: UserDependencyConfigT, legacy?: boolean} { +): {config: UserDependencyConfig; legacy?: boolean} { const explorer = cosmiconfig('react-native', { stopDir: rootFolder, searchPlaces, }); - const {config, legacy} = explorer.searchSync(rootFolder) || { - config: readLegacyDependencyConfigFromDisk(rootFolder), - legacy: true, - }; + const searchResult = explorer.searchSync(rootFolder); + const legacy = !searchResult; + let config = searchResult + ? (searchResult.config as UserDependencyConfig) + : (readLegacyDependencyConfigFromDisk(rootFolder) as UserDependencyConfig); const result = Joi.validate(config, schema.dependencyConfig); @@ -120,16 +141,13 @@ export function readDependencyConfigFromDisk( * Each of the files can export a commands (object) or an array of commands */ const loadProjectCommands = ( - root, - commands: ?(Array | string), -): Array => { - return [] + root: string, + commands: Array | string | undefined, +): Array => { + return ([] as string[]) .concat(commands || []) - .reduce((acc: Array, cmdPath: string) => { - const cmds: Array | CommandT = require(path.join( - root, - cmdPath, - )); + .reduce((acc: Array, cmdPath: string) => { + const cmds: Array | Command = require(path.join(root, cmdPath)); return acc.concat(cmds); }, []); }; @@ -139,14 +157,15 @@ const loadProjectCommands = ( */ function readLegacyDependencyConfigFromDisk( rootFolder: string, -): ?UserDependencyConfigT { - let config = {}; +): UserDependencyConfig | undefined { + let config = {} as LegacyDependencyConfig; try { config = require(path.join(rootFolder, 'package.json')).rnpm; } catch (error) { // package.json is usually missing in local libraries that are not in // project "dependencies", so we just return a bare config + // @ts-ignore - TODO: platforms can be empty, adjust types return { dependency: { platforms: {}, @@ -163,13 +182,14 @@ function readLegacyDependencyConfigFromDisk( return undefined; } - const transformedConfig = { + const transformedConfig: UserDependencyConfig = { dependency: { platforms: { ios: config.ios, android: config.android, }, assets: config.assets, + // @ts-ignore – likely a bug, but we don't care because legacy config is soon to be removed hooks: config.commands, params: config.params, }, diff --git a/packages/cli/src/tools/config/resolveNodeModuleDir.js b/packages/cli/src/tools/config/resolveNodeModuleDir.ts similarity index 79% rename from packages/cli/src/tools/config/resolveNodeModuleDir.js rename to packages/cli/src/tools/config/resolveNodeModuleDir.ts index 09a0e4917..7a03950cd 100644 --- a/packages/cli/src/tools/config/resolveNodeModuleDir.js +++ b/packages/cli/src/tools/config/resolveNodeModuleDir.ts @@ -1,6 +1,3 @@ -/** - * @flow - */ import path from 'path'; /** @@ -11,7 +8,6 @@ export default function resolveNodeModuleDir( packageName: string, ): string { return path.dirname( - // $FlowIssue: Wrong `require.resolve` type definition require.resolve(path.join(packageName, 'package.json'), { paths: [root], }), diff --git a/packages/cli/src/tools/config/resolveReactNativePath.js b/packages/cli/src/tools/config/resolveReactNativePath.ts similarity index 97% rename from packages/cli/src/tools/config/resolveReactNativePath.js rename to packages/cli/src/tools/config/resolveReactNativePath.ts index dbce4e5c8..db5150fff 100644 --- a/packages/cli/src/tools/config/resolveReactNativePath.js +++ b/packages/cli/src/tools/config/resolveReactNativePath.ts @@ -1,6 +1,3 @@ -/** - * @flow - */ import {CLIError} from '@react-native-community/cli-tools'; import resolveNodeModuleDir from './resolveNodeModuleDir'; diff --git a/packages/cli/src/tools/config/schema.js b/packages/cli/src/tools/config/schema.ts similarity index 97% rename from packages/cli/src/tools/config/schema.js rename to packages/cli/src/tools/config/schema.ts index 7850227bd..79f53f36b 100644 --- a/packages/cli/src/tools/config/schema.js +++ b/packages/cli/src/tools/config/schema.ts @@ -1,9 +1,7 @@ -/** - * @flow - */ -import t from '@hapi/joi'; +import * as t from '@hapi/joi'; +import {SchemaLike} from '@hapi/joi'; -const map = (key, value) => +const map = (key: RegExp | SchemaLike, value: SchemaLike) => t .object() .unknown(true) diff --git a/packages/cli/src/tools/merge.ts b/packages/cli/src/tools/merge.ts index cf4817ba2..e4305529c 100644 --- a/packages/cli/src/tools/merge.ts +++ b/packages/cli/src/tools/merge.ts @@ -4,10 +4,7 @@ import deepmerge from 'deepmerge'; * `deepmerge` concatenates arrays by default instead of overwriting them. * We define custom merging function for arrays to change that behaviour */ -export default function merge( - x: Array<{[key: string]: any}>, - y: Array<{[key: string]: any}>, -) { +export default function merge(x: X, y: Y) { return deepmerge(x, y, { arrayMerge: (_destinationArray: any[], sourceArray: any[]): any[] => sourceArray, diff --git a/packages/platform-ios/src/link/common/registerNativeModule.ts b/packages/platform-ios/src/link/common/registerNativeModule.ts index e5b26f1ad..8b2d21b94 100644 --- a/packages/platform-ios/src/link/common/registerNativeModule.ts +++ b/packages/platform-ios/src/link/common/registerNativeModule.ts @@ -17,8 +17,7 @@ export default function registerNativeModule( name: string, dependencyConfig: IOSDependencyConfig, // FIXME: Params is never used - _params?: any, - // @ts-ignore + _params: any | undefined, projectConfig: IOSProjectConfig, ) { if (projectConfig.podfile && dependencyConfig.podspecPath) { diff --git a/yarn.lock b/yarn.lock index 962931f1a..48086f37b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2032,6 +2032,13 @@ resolved "https://registry.yarnpkg.com/@types/command-exists/-/command-exists-1.2.0.tgz#d97e0ed10097090e4ab0367ed425b0312fad86f3" integrity sha512-ugsxEJfsCuqMLSuCD4PIJkp5Uk2z6TCMRCgYVuhRo5cYQY3+1xXTQkSlPtkpGHuvWMjS2KTeVQXxkXRACMbM6A== +"@types/cosmiconfig@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/cosmiconfig/-/cosmiconfig-5.0.3.tgz#880644bb155d4038d3b752159684b777b0a159dd" + integrity sha512-HgTGG7X5y9pLl3pixeo2XtDEFD8rq2EuH+S4mK6teCnAwWMucQl6v1D43hI4Uw1VJh6nu59lxLkqXHRl4uwThA== + dependencies: + "@types/node" "*" + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -2067,6 +2074,13 @@ dependencies: "@types/node" "*" +"@types/hapi__joi@*", "@types/hapi__joi@^15.0.4": + version "15.0.4" + resolved "https://registry.yarnpkg.com/@types/hapi__joi/-/hapi__joi-15.0.4.tgz#49e2e1e6da15ade0fdd6db4daf94aecb07bb391b" + integrity sha512-VSS6zc7AIOdHVXmqKaGNPYl8eGrMvWi0R5pt3evJL3UdxO8XS28/XAkBXNyLQoymHxhMd4bF3o1U9mZkWDeN8w== + dependencies: + "@types/hapi__joi" "*" + "@types/istanbul-lib-coverage@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz#1eb8c033e98cf4e1a4cedcaf8bcafe8cb7591e85"