From c0d67dad57988cc013a685b9a4237ac9b614078f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Thu, 11 Apr 2019 10:01:44 +0200 Subject: [PATCH 1/7] chore: move shared types to root; moar link styles; bye promiseWaterfall --- packages/cli/src/cliEntry.js | 2 +- .../cli/src/commands/bundle/buildBundle.js | 2 +- packages/cli/src/commands/config/config.js | 2 +- packages/cli/src/commands/index.js | 2 +- packages/cli/src/commands/info/info.js | 2 +- packages/cli/src/commands/init/init.js | 2 +- packages/cli/src/commands/install/install.js | 2 +- .../cli/src/commands/install/uninstall.js | 2 +- .../link/__tests__/promiseWaterfall-test.js | 46 -------- packages/cli/src/commands/link/commandStub.js | 10 -- packages/cli/src/commands/link/link.js | 38 +++---- packages/cli/src/commands/link/linkAll.js | 40 ++++--- packages/cli/src/commands/link/linkAssets.js | 2 +- .../cli/src/commands/link/linkDependency.js | 6 +- packages/cli/src/commands/link/pollParams.js | 5 +- .../cli/src/commands/link/promiseWaterfall.js | 23 ---- packages/cli/src/commands/link/promisify.js | 13 --- packages/cli/src/commands/link/unlink.js | 103 +++++++++--------- packages/cli/src/commands/server/runServer.js | 2 +- .../cli/src/commands/upgrade/legacyUpgrade.js | 2 +- packages/cli/src/commands/upgrade/upgrade.js | 2 +- packages/cli/src/tools/config/index.js | 2 +- .../src/tools/config/readConfigFromDisk.js | 2 +- packages/cli/src/tools/loadMetroConfig.js | 2 +- .../src/commands/runAndroid/index.js | 2 +- .../platform-ios/src/commands/runIOS/index.js | 2 +- .../src/config/findPodfilePath.js | 3 +- .../src/config/findPodspecName.js | 3 +- .../platform-ios/src/config/findProject.js | 3 +- packages/platform-ios/src/config/index.js | 12 +- packages/platform-ios/src/index.js | 4 +- .../platform-ios/src/link/addFileToProject.js | 3 +- .../config/types.flow.js => types/config.js | 56 ++++++++-- 33 files changed, 182 insertions(+), 220 deletions(-) delete mode 100644 packages/cli/src/commands/link/__tests__/promiseWaterfall-test.js delete mode 100644 packages/cli/src/commands/link/commandStub.js delete mode 100644 packages/cli/src/commands/link/promiseWaterfall.js delete mode 100644 packages/cli/src/commands/link/promisify.js rename packages/cli/src/tools/config/types.flow.js => types/config.js (83%) diff --git a/packages/cli/src/cliEntry.js b/packages/cli/src/cliEntry.js index 81036907d..6e37b0092 100644 --- a/packages/cli/src/cliEntry.js +++ b/packages/cli/src/cliEntry.js @@ -12,7 +12,7 @@ import childProcess from 'child_process'; import commander from 'commander'; import path from 'path'; -import type {CommandT, ConfigT} from './tools/config/types.flow'; +import type {CommandT, ConfigT} from '../../../types/config'; import commands from './commands'; import init from './commands/init/initCompat'; diff --git a/packages/cli/src/commands/bundle/buildBundle.js b/packages/cli/src/commands/bundle/buildBundle.js index a966b241e..240997b7d 100644 --- a/packages/cli/src/commands/bundle/buildBundle.js +++ b/packages/cli/src/commands/bundle/buildBundle.js @@ -13,7 +13,7 @@ import outputBundle from 'metro/src/shared/output/bundle'; import path from 'path'; import chalk from 'chalk'; import type {CommandLineArgs} from './bundleCommandLineArgs'; -import type {ConfigT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import saveAssets from './saveAssets'; import loadMetroConfig from '../../tools/loadMetroConfig'; import {logger} from '@react-native-community/cli-tools'; diff --git a/packages/cli/src/commands/config/config.js b/packages/cli/src/commands/config/config.js index 83fa8bffb..c6416b9f7 100644 --- a/packages/cli/src/commands/config/config.js +++ b/packages/cli/src/commands/config/config.js @@ -1,7 +1,7 @@ /** * @flow */ -import {type ConfigT} from '../../tools/config/types.flow'; +import {type ConfigT} from '../../../../../types/config'; export default { name: 'config', description: 'Print CLI configuration', diff --git a/packages/cli/src/commands/index.js b/packages/cli/src/commands/index.js index 61e182705..4c6c3f562 100644 --- a/packages/cli/src/commands/index.js +++ b/packages/cli/src/commands/index.js @@ -1,7 +1,7 @@ /** * @flow */ -import {type CommandT} from '../tools/config/types.flow'; +import {type CommandT} from '../../../../types/config'; import server from './server/server'; import library from './library/library'; diff --git a/packages/cli/src/commands/info/info.js b/packages/cli/src/commands/info/info.js index f404c5d92..6b4252c98 100644 --- a/packages/cli/src/commands/info/info.js +++ b/packages/cli/src/commands/info/info.js @@ -9,7 +9,7 @@ import envinfo from 'envinfo'; import {logger} from '@react-native-community/cli-tools'; -import type {ConfigT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; const info = async function getInfo( argv: Array, diff --git a/packages/cli/src/commands/init/init.js b/packages/cli/src/commands/init/init.js index 35e2811a5..bf01da551 100644 --- a/packages/cli/src/commands/init/init.js +++ b/packages/cli/src/commands/init/init.js @@ -2,7 +2,7 @@ import fs from 'fs-extra'; import minimist from 'minimist'; import semver from 'semver'; -import type {ConfigT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import {validateProjectName} from './validate'; import DirectoryAlreadyExistsError from './errors/DirectoryAlreadyExistsError'; import printRunInstructions from './printRunInstructions'; diff --git a/packages/cli/src/commands/install/install.js b/packages/cli/src/commands/install/install.js index 7b6e5d6f5..ad80cfb2e 100644 --- a/packages/cli/src/commands/install/install.js +++ b/packages/cli/src/commands/install/install.js @@ -7,7 +7,7 @@ * @flow */ -import type {ConfigT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; import link from '../link/link'; diff --git a/packages/cli/src/commands/install/uninstall.js b/packages/cli/src/commands/install/uninstall.js index 85f4f4563..791b3128d 100644 --- a/packages/cli/src/commands/install/uninstall.js +++ b/packages/cli/src/commands/install/uninstall.js @@ -7,7 +7,7 @@ * @flow */ -import type {ConfigT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; import link from '../link/unlink'; diff --git a/packages/cli/src/commands/link/__tests__/promiseWaterfall-test.js b/packages/cli/src/commands/link/__tests__/promiseWaterfall-test.js deleted file mode 100644 index 917977355..000000000 --- a/packages/cli/src/commands/link/__tests__/promiseWaterfall-test.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - * @emails oncall+javascript_foundation - */ - -import promiseWaterfall from '../promiseWaterfall'; - -describe('promiseWaterfall', () => { - it('should run promises in a sequence', async () => { - const tasks = [jest.fn(), jest.fn()]; - - await promiseWaterfall(tasks); - - // Check that tasks[0] is executed before tasks[1]. - expect(tasks[0].mock.invocationCallOrder[0]).toBeLessThan( - tasks[1].mock.invocationCallOrder[0], - ); - }); - - it('should resolve with last promise value', async () => { - const tasks = [jest.fn().mockReturnValue(1), jest.fn().mockReturnValue(2)]; - - expect(await promiseWaterfall(tasks)).toEqual(2); - }); - - it('should stop the sequence when one of promises is rejected', done => { - const error = new Error(); - const tasks = [ - jest.fn().mockImplementation(() => { - throw error; - }), - jest.fn().mockReturnValue(2), - ]; - - promiseWaterfall(tasks).catch(err => { - expect(err).toEqual(error); - expect(tasks[1].mock.calls).toHaveLength(0); - done(); - }); - }); -}); diff --git a/packages/cli/src/commands/link/commandStub.js b/packages/cli/src/commands/link/commandStub.js deleted file mode 100644 index 4b4cfda06..000000000 --- a/packages/cli/src/commands/link/commandStub.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - */ - -export default cb => cb(); diff --git a/packages/cli/src/commands/link/link.js b/packages/cli/src/commands/link/link.js index aef18442d..ff21e28a8 100644 --- a/packages/cli/src/commands/link/link.js +++ b/packages/cli/src/commands/link/link.js @@ -8,15 +8,9 @@ */ import {pick} from 'lodash'; - -import {type ConfigT} from '../../tools/config/types.flow'; - -import promiseWaterfall from './promiseWaterfall'; import {logger, CLIError} from '@react-native-community/cli-tools'; -import commandStub from './commandStub'; -import promisify from './promisify'; +import {type ConfigT} from '../../../../../types/config'; import getPlatformName from './getPlatformName'; - import linkDependency from './linkDependency'; import linkAssets from './linkAssets'; import linkAll from './linkAll'; @@ -31,7 +25,11 @@ type FlagsType = { * @param args If optional argument [packageName] is provided, * only that package is processed. */ -function link([rawPackageName]: Array, ctx: ConfigT, opts: FlagsType) { +async function link( + [rawPackageName]: Array, + ctx: ConfigT, + opts: FlagsType, +) { let platforms = ctx.platforms; let project = ctx.project; @@ -68,19 +66,21 @@ function link([rawPackageName]: Array, ctx: ConfigT, opts: FlagsType) { logger.debug(`Package to link: ${rawPackageName}`); - const tasks = [ - () => promisify(dependency.hooks.prelink || commandStub), - () => linkDependency(platforms, project, dependency), - () => promisify(dependency.hooks.postlink || commandStub), - () => linkAssets(platforms, project, dependency.assets), - ]; - - return promiseWaterfall(tasks).catch(err => { + try { + if (dependency.hooks.prelink) { + await dependency.hooks.prelink(); + } + await linkDependency(platforms, project, dependency); + if (dependency.hooks.postlink) { + await dependency.hooks.postlink(); + } + await linkAssets(platforms, project, dependency.assets); + } catch (error) { throw new CLIError( - `Something went wrong while linking. Reason: ${err.message}`, - err, + `Something went wrong while linking. Reason: ${error.message}`, + error, ); - }); + } } export const func = link; diff --git a/packages/cli/src/commands/link/linkAll.js b/packages/cli/src/commands/link/linkAll.js index 576a98531..6c8c1b8d9 100644 --- a/packages/cli/src/commands/link/linkAll.js +++ b/packages/cli/src/commands/link/linkAll.js @@ -2,14 +2,10 @@ * @flow */ -import {uniqBy, flatMap} from 'lodash'; +import {uniqBy} from 'lodash'; import path from 'path'; -import type {ConfigT} from '../../tools/config/types.flow'; - -import promiseWaterfall from './promiseWaterfall'; -import commandStub from './commandStub'; -import promisify from './promisify'; +import type {ConfigT} from '../../../../../types/config'; import linkAssets from './linkAssets'; import linkDependency from './linkDependency'; @@ -19,7 +15,7 @@ import {CLIError} from '@react-native-community/cli-tools'; const dedupeAssets = (assets: Array): Array => uniqBy(assets, asset => path.basename(asset)); -function linkAll(config: ConfigT) { +async function linkAll(config: ConfigT) { const projectAssets = config.assets; const assets = dedupeAssets( @@ -29,22 +25,24 @@ function linkAll(config: ConfigT) { ), ); - const tasks = flatMap( - config.dependencies, - dependency => [ - () => promisify(dependency.hooks.prelink || commandStub), - () => linkDependency(config.platforms, config.project, dependency), - () => promisify(dependency.hooks.postlink || commandStub), - ], - () => linkAssets(config.platforms, config.project, assets), - ); - - return promiseWaterfall(tasks).catch(err => { + try { + Object.keys(config.dependencies).forEach(async key => { + const dependency = config.dependencies[key]; + if (dependency.hooks.prelink) { + await dependency.hooks.prelink(); + } + await linkDependency(config.platforms, config.project, dependency); + if (dependency.hooks.postlink) { + await dependency.hooks.postlink(); + } + }); + await linkAssets(config.platforms, config.project, assets); + } catch (error) { throw new CLIError( - `Something went wrong while linking. Reason: ${err.message}`, - err, + `Something went wrong while linking. Reason: ${error.message}`, + error, ); - }); + } } export default linkAll; diff --git a/packages/cli/src/commands/link/linkAssets.js b/packages/cli/src/commands/link/linkAssets.js index f5a5d6404..f6583fe13 100644 --- a/packages/cli/src/commands/link/linkAssets.js +++ b/packages/cli/src/commands/link/linkAssets.js @@ -1,7 +1,7 @@ // @flow import {isEmpty} from 'lodash'; -import type {PlatformsT, ProjectConfigT} from '../../tools/config/types.flow'; +import type {PlatformsT, ProjectConfigT} from '../../../../../types/config'; import {logger} from '@react-native-community/cli-tools'; diff --git a/packages/cli/src/commands/link/linkDependency.js b/packages/cli/src/commands/link/linkDependency.js index c4081cf5e..a77d4c2e5 100644 --- a/packages/cli/src/commands/link/linkDependency.js +++ b/packages/cli/src/commands/link/linkDependency.js @@ -4,7 +4,7 @@ import type { DependencyConfigT, ProjectConfigT, PlatformsT, -} from '../../tools/config/types.flow'; +} from '../../../../../types/config'; import {logger} from '@react-native-community/cli-tools'; import pollParams from './pollParams'; import getPlatformName from './getPlatformName'; @@ -34,8 +34,10 @@ const linkDependency = async ( } const isInstalled = linkConfig.isInstalled( + // $FlowFixMe projectConfig, name, + // $FlowFixMe dependencyConfig, ); @@ -47,7 +49,7 @@ const linkDependency = async ( } logger.info(`Linking "${name}" ${getPlatformName(platform)} dependency`); - + // $FlowFixMe linkConfig.register(name, dependencyConfig, params, projectConfig); logger.info( diff --git a/packages/cli/src/commands/link/pollParams.js b/packages/cli/src/commands/link/pollParams.js index 3ee296195..eaf36b0a7 100644 --- a/packages/cli/src/commands/link/pollParams.js +++ b/packages/cli/src/commands/link/pollParams.js @@ -5,12 +5,13 @@ * LICENSE file in the root directory of this source tree. * * @format + * @flow */ import inquirer from 'inquirer'; -export default questions => - new Promise((resolve, reject) => { +export default (questions: any) => + new Promise((resolve, reject) => { if (!questions) { resolve({}); return; diff --git a/packages/cli/src/commands/link/promiseWaterfall.js b/packages/cli/src/commands/link/promiseWaterfall.js deleted file mode 100644 index bc6f2c5a8..000000000 --- a/packages/cli/src/commands/link/promiseWaterfall.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - */ - -/** - * Given an array of promise creators, executes them in a sequence. - * - * If any of the promises in the chain fails, all subsequent promises - * will be skipped - * - * Returns the value last promise from a sequence resolved - */ -export default function promiseWaterfall(tasks) { - return tasks.reduce( - (prevTaskPromise, task) => prevTaskPromise.then(task), - Promise.resolve(), - ); -} diff --git a/packages/cli/src/commands/link/promisify.js b/packages/cli/src/commands/link/promisify.js deleted file mode 100644 index e4c2a97a2..000000000 --- a/packages/cli/src/commands/link/promisify.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - */ - -export default func => - new Promise((resolve, reject) => - func((err, res) => (err ? reject(err) : resolve(res))), - ); diff --git a/packages/cli/src/commands/link/unlink.js b/packages/cli/src/commands/link/unlink.js index e7991ac72..ac4d24737 100644 --- a/packages/cli/src/commands/link/unlink.js +++ b/packages/cli/src/commands/link/unlink.js @@ -8,11 +8,8 @@ */ import {flatMap, values, difference} from 'lodash'; -import type {ConfigT} from '../../tools/config/types.flow'; import {logger, CLIError} from '@react-native-community/cli-tools'; -import promiseWaterfall from './promiseWaterfall'; -import commandStub from './commandStub'; -import promisify from './promisify'; +import type {ConfigT} from '../../../../../types/config'; import getPlatformName from './getPlatformName'; const unlinkDependency = ( @@ -39,8 +36,10 @@ const unlinkDependency = ( } const isInstalled = linkConfig.isInstalled( + // $FlowFixMe projectConfig, packageName, + // $FlowFixMe dependencyConfig, ); @@ -57,7 +56,9 @@ const unlinkDependency = ( linkConfig.unregister( packageName, + // $FlowFixMe dependencyConfig, + // $FlowFixMe projectConfig, otherDependencies, ); @@ -76,7 +77,7 @@ const unlinkDependency = ( * If optional argument [packageName] is provided, it's the only one * that's checked */ -function unlink(args: Array, ctx: ConfigT) { +async function unlink(args: Array, ctx: ConfigT) { const packageName = args[0]; const {[packageName]: dependency, ...otherDependencies} = ctx.dependencies; @@ -88,58 +89,56 @@ function unlink(args: Array, ctx: ConfigT) { } const dependencies = values(otherDependencies); + try { + if (dependency.hooks.preulink) { + await dependency.hooks.preulink(); + } + unlinkDependency( + ctx.platforms, + ctx.project, + dependency, + packageName, + dependencies, + ); + if (dependency.hooks.postunlink) { + await dependency.hooks.postunlink(); + } + } catch (error) { + throw new CLIError( + `Something went wrong while unlinking. Reason ${error.message}`, + error, + ); + } - const tasks = [ - () => promisify(dependency.hooks.preulink || commandStub), - () => - unlinkDependency( - ctx.platforms, - ctx.project, - dependency, - packageName, - dependencies, - ), - () => promisify(dependency.hooks.postunlink || commandStub), - ]; - - return promiseWaterfall(tasks) - .then(() => { - // @todo move all these to `tasks` array - // @todo it is possible we could be unlinking some project assets in case of duplicate - const assets = difference( - dependency.assets, - flatMap(dependencies, d => d.assets), - ); - - if (assets.length === 0) { - return; - } + // @todo move all these to above try/catch + // @todo it is possible we could be unlinking some project assets in case of duplicate + const assets = difference( + dependency.assets, + flatMap(dependencies, d => d.assets), + ); - Object.keys(ctx.platforms || {}).forEach(platform => { - const projectConfig = ctx.project[platform]; - const linkConfig = - ctx.platforms[platform] && - ctx.platforms[platform].linkConfig && - ctx.platforms[platform].linkConfig(); - if (!linkConfig || !linkConfig.unlinkAssets || !projectConfig) { - return; - } + if (assets.length === 0) { + return; + } - logger.info(`Unlinking assets from ${platform} project`); + Object.keys(ctx.platforms || {}).forEach(platform => { + const projectConfig = ctx.project[platform]; + const linkConfig = + ctx.platforms[platform] && + ctx.platforms[platform].linkConfig && + ctx.platforms[platform].linkConfig(); + if (!linkConfig || !linkConfig.unlinkAssets || !projectConfig) { + return; + } - linkConfig.unlinkAssets(assets, projectConfig); - }); + logger.info(`Unlinking assets from ${platform} project`); + // $FlowFixMe + linkConfig.unlinkAssets(assets, projectConfig); + }); - logger.info( - `${packageName} assets has been successfully unlinked from your project`, - ); - }) - .catch(err => { - throw new CLIError( - `Something went wrong while unlinking. Reason ${err.message}`, - err, - ); - }); + logger.info( + `${packageName} assets has been successfully unlinked from your project`, + ); } export default { diff --git a/packages/cli/src/commands/server/runServer.js b/packages/cli/src/commands/server/runServer.js index 181d8fd34..c8a47e28f 100644 --- a/packages/cli/src/commands/server/runServer.js +++ b/packages/cli/src/commands/server/runServer.js @@ -12,7 +12,7 @@ import {Terminal} from 'metro-core'; import morgan from 'morgan'; import path from 'path'; import {logger} from '@react-native-community/cli-tools'; -import type {ConfigT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import messageSocket from './messageSocket'; import webSocketProxy from './webSocketProxy'; import MiddlewareManager from './middleware/MiddlewareManager'; diff --git a/packages/cli/src/commands/upgrade/legacyUpgrade.js b/packages/cli/src/commands/upgrade/legacyUpgrade.js index a416d5098..0415b8782 100644 --- a/packages/cli/src/commands/upgrade/legacyUpgrade.js +++ b/packages/cli/src/commands/upgrade/legacyUpgrade.js @@ -11,7 +11,7 @@ import fs from 'fs'; import path from 'path'; import semver from 'semver'; -import type {ConfigT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import {logger} from '@react-native-community/cli-tools'; import copyProjectTemplateAndReplace from '../../tools/generator/copyProjectTemplateAndReplace'; diff --git a/packages/cli/src/commands/upgrade/upgrade.js b/packages/cli/src/commands/upgrade/upgrade.js index 00e9f0f12..d78888e16 100644 --- a/packages/cli/src/commands/upgrade/upgrade.js +++ b/packages/cli/src/commands/upgrade/upgrade.js @@ -4,7 +4,7 @@ import fs from 'fs'; import chalk from 'chalk'; import semver from 'semver'; import execa from 'execa'; -import type {ConfigT} from '../../tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; import {fetch} from '../../tools/fetch'; diff --git a/packages/cli/src/tools/config/index.js b/packages/cli/src/tools/config/index.js index 640d4d13b..4f356077f 100644 --- a/packages/cli/src/tools/config/index.js +++ b/packages/cli/src/tools/config/index.js @@ -15,7 +15,7 @@ import { readLegacyDependencyConfigFromDisk, } from './readConfigFromDisk'; -import {type ConfigT} from './types.flow'; +import {type ConfigT} from '../../../../../types/config'; import assign from '../assign'; import merge from '../merge'; diff --git a/packages/cli/src/tools/config/readConfigFromDisk.js b/packages/cli/src/tools/config/readConfigFromDisk.js index 121937e2b..f7d7de0b7 100644 --- a/packages/cli/src/tools/config/readConfigFromDisk.js +++ b/packages/cli/src/tools/config/readConfigFromDisk.js @@ -12,7 +12,7 @@ import { type UserDependencyConfigT, type UserConfigT, type CommandT, -} from './types.flow'; +} from '../../../../../types/config'; import {JoiError} from './errors'; diff --git a/packages/cli/src/tools/loadMetroConfig.js b/packages/cli/src/tools/loadMetroConfig.js index 14c4c5b18..6222d887b 100644 --- a/packages/cli/src/tools/loadMetroConfig.js +++ b/packages/cli/src/tools/loadMetroConfig.js @@ -5,7 +5,7 @@ import path from 'path'; import {createBlacklist} from 'metro'; import {loadConfig} from 'metro-config'; -import {type ConfigT} from './config/types.flow'; +import {type ConfigT} from '../../../../types/config'; import findSymlinkedModules from './findSymlinkedModules'; const resolveSymlinksForRoots = roots => diff --git a/packages/platform-android/src/commands/runAndroid/index.js b/packages/platform-android/src/commands/runAndroid/index.js index 7a338060b..4de34675a 100644 --- a/packages/platform-android/src/commands/runAndroid/index.js +++ b/packages/platform-android/src/commands/runAndroid/index.js @@ -11,7 +11,7 @@ import path from 'path'; import {spawnSync, spawn, execFileSync} from 'child_process'; import fs from 'fs'; -import type {ConfigT} from '../../../../cli/src/tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import adb from './adb'; import runOnAllDevices from './runOnAllDevices'; diff --git a/packages/platform-ios/src/commands/runIOS/index.js b/packages/platform-ios/src/commands/runIOS/index.js index d5c8f2a5e..95f7ac092 100644 --- a/packages/platform-ios/src/commands/runIOS/index.js +++ b/packages/platform-ios/src/commands/runIOS/index.js @@ -12,7 +12,7 @@ import child_process from 'child_process'; import fs from 'fs'; import path from 'path'; -import type {ConfigT} from '../../../../cli/src/tools/config/types.flow'; +import type {ConfigT} from '../../../../../types/config'; import findXcodeProject from './findXcodeProject'; import parseIOSDevicesList from './parseIOSDevicesList'; diff --git a/packages/platform-ios/src/config/findPodfilePath.js b/packages/platform-ios/src/config/findPodfilePath.js index bf30d67de..ab5e47fc7 100644 --- a/packages/platform-ios/src/config/findPodfilePath.js +++ b/packages/platform-ios/src/config/findPodfilePath.js @@ -5,12 +5,13 @@ * LICENSE file in the root directory of this source tree. * * @format + * @flow */ import fs from 'fs'; import path from 'path'; -export default function findPodfilePath(projectFolder) { +export default function findPodfilePath(projectFolder: string) { const podFilePath = path.join(projectFolder, '..', 'Podfile'); const podFileExists = fs.existsSync(podFilePath); diff --git a/packages/platform-ios/src/config/findPodspecName.js b/packages/platform-ios/src/config/findPodspecName.js index 08b8ec83c..eb14ba8b5 100644 --- a/packages/platform-ios/src/config/findPodspecName.js +++ b/packages/platform-ios/src/config/findPodspecName.js @@ -5,12 +5,13 @@ * LICENSE file in the root directory of this source tree. * * @format + * @flow */ import glob from 'glob'; import path from 'path'; -export default function findPodspecName(folder) { +export default function findPodspecName(folder: string): string | null { const podspecs = glob.sync('*.podspec', {cwd: folder}); let podspecFile = null; if (podspecs.length === 0) { diff --git a/packages/platform-ios/src/config/findProject.js b/packages/platform-ios/src/config/findProject.js index 3b1862f88..d798fea24 100644 --- a/packages/platform-ios/src/config/findProject.js +++ b/packages/platform-ios/src/config/findProject.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @format + * @flow */ import glob from 'glob'; @@ -38,7 +39,7 @@ const GLOB_EXCLUDE_PATTERN = ['**/@(Pods|node_modules)/**']; * * Note: `./ios/*.xcodeproj` are returned regardless of the name */ -export default function findProject(folder) { +export default function findProject(folder: string): string | null { const projects = glob .sync(GLOB_PATTERN, { cwd: folder, diff --git a/packages/platform-ios/src/config/index.js b/packages/platform-ios/src/config/index.js index bd33aa754..ed2c4e1ad 100644 --- a/packages/platform-ios/src/config/index.js +++ b/packages/platform-ios/src/config/index.js @@ -5,19 +5,21 @@ * LICENSE file in the root directory of this source tree. * * @format + * @flow */ import path from 'path'; import findProject from './findProject'; import findPodfilePath from './findPodfilePath'; import findPodspecName from './findPodspecName'; +import type {UserConfigT} from '../../../../types/config'; /** * For libraries specified without an extension, add '.tbd' for those that * start with 'lib' and '.framework' to the rest. */ const mapSharedLibaries = libraries => - libraries.map(name => { + libraries.map(name => { if (path.extname(name)) { return name; } @@ -28,7 +30,13 @@ const mapSharedLibaries = libraries => * Returns project config by analyzing given folder and applying some user defaults * when constructing final object */ -export function projectConfig(folder, userConfig) { +export function projectConfig( + folder: string, + userConfig: $PropertyType<$PropertyType, 'ios'>, +) { + if (!userConfig) { + return; + } const project = userConfig.project || findProject(folder); /** diff --git a/packages/platform-ios/src/index.js b/packages/platform-ios/src/index.js index 40e87c381..ced0990f6 100644 --- a/packages/platform-ios/src/index.js +++ b/packages/platform-ios/src/index.js @@ -1,7 +1,7 @@ /** - * @flow - * * iOS platform files + * + * @flow */ export {default as linkConfig} from './link'; diff --git a/packages/platform-ios/src/link/addFileToProject.js b/packages/platform-ios/src/link/addFileToProject.js index e5c617491..abcbc948b 100644 --- a/packages/platform-ios/src/link/addFileToProject.js +++ b/packages/platform-ios/src/link/addFileToProject.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @format + * @flow */ import PbxFile from 'xcode/lib/pbxFile'; @@ -14,7 +15,7 @@ import PbxFile from 'xcode/lib/pbxFile'; * from path provided, adds it to the project * and returns newly created instance of a file */ -export default function addFileToProject(project, filePath) { +export default function addFileToProject(project: any, filePath: string) { const file = new PbxFile(filePath); file.uuid = project.generateUuid(); file.fileRef = project.generateUuid(); diff --git a/packages/cli/src/tools/config/types.flow.js b/types/config.js similarity index 83% rename from packages/cli/src/tools/config/types.flow.js rename to types/config.js index ec59790c5..5f2f75df6 100644 --- a/packages/cli/src/tools/config/types.flow.js +++ b/types/config.js @@ -65,6 +65,7 @@ type ProjectParamsIOST = { project?: string, sharedLibraries?: string[], libraryFolder?: string, + plist: any[], }; type PlatformConfig = { @@ -96,7 +97,7 @@ export type ConfigT = {| // Object that contains configuration for a project (null, when platform not available) project: { - android?: ?ProjectConfigAndroidT, + android?: ProjectConfigAndroidT, ios?: ?ProjectConfigIOST, [key: string]: ?Object, }, @@ -115,9 +116,9 @@ export type ConfigT = {| }, assets: string[], hooks: { - [key: string]: string, - prelink?: string, - postlink?: string, + [key: string]: () => void, + prelink?: () => void, + postlink?: () => void, }, params: InquirerPromptT[], }, @@ -205,7 +206,48 @@ export type UserConfigT = { // The following types are used in untyped-parts of the codebase, so I am leaving them // until we actually need them. -type ProjectConfigIOST = {}; +type ProjectConfigIOST = { + sourceDir: string, + folder: string, + pbxprojPath: string, + podfile: null, + podspec: null, + projectPath: string, + projectName: string, + libraryFolder: string, + sharedLibraries: Array, + plist: Array, +}; type DependencyConfigIOST = ProjectConfigIOST; -type ProjectConfigAndroidT = {}; -type DependencyConfigAndroidT = {}; +type ProjectConfigAndroidT = { + sourceDir: string, + isFlat: boolean, + folder: string, + stringsPath: string, + manifestPath: string, + buildGradlePath: string, + settingsGradlePath: string, + assetsPath: string, + mainFilePath: string, + packageName: string, +}; +type DependencyConfigAndroidT = { + sourceDir: string, + folder: string, + manifest: Manifest, + packageImportPath: string, + packageInstance: string, +}; + +type Manifest = { + name: string, + attr: { + [key: string]: string, + package: string, + }, + val: string, + isValCdata: boolean, + children: Array, + firstChild: Manifest, + lastChild: Manifest, +}; From a365164b3120077d1b65745992fa03ae3c96cf33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Thu, 11 Apr 2019 19:30:20 +0200 Subject: [PATCH 2/7] fix test --- packages/cli/src/commands/link/__tests__/link-test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/link/__tests__/link-test.js b/packages/cli/src/commands/link/__tests__/link-test.js index c409283f3..6f93f1180 100644 --- a/packages/cli/src/commands/link/__tests__/link-test.js +++ b/packages/cli/src/commands/link/__tests__/link-test.js @@ -55,8 +55,8 @@ describe('link', () => { }); it('should register native module when android/ios projects are present', done => { - const prelink = jest.fn().mockImplementation(cb => cb()); - const postlink = jest.fn().mockImplementation(cb => cb()); + const prelink = jest.fn(); + const postlink = jest.fn(); const registerNativeModule = jest.fn(); const config = { From a1dfec844aa50874e79a1aa7b4f661e9991c35bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Sat, 13 Apr 2019 11:46:01 +0200 Subject: [PATCH 3/7] add alias for global types --- .eslintrc.js | 16 +++- .flowconfig | 1 + babel.config.js | 8 ++ package.json | 3 + packages/cli/src/cliEntry.js | 2 +- .../cli/src/commands/bundle/buildBundle.js | 2 +- packages/cli/src/commands/config/config.js | 2 +- packages/cli/src/commands/index.js | 2 +- packages/cli/src/commands/info/info.js | 2 +- .../errors/DirectoryAlreadyExistsError.js | 2 - packages/cli/src/commands/init/init.js | 2 +- packages/cli/src/commands/install/install.js | 2 +- .../cli/src/commands/install/uninstall.js | 2 +- packages/cli/src/commands/link/link.js | 2 +- packages/cli/src/commands/link/linkAll.js | 2 +- packages/cli/src/commands/link/linkAssets.js | 2 +- .../cli/src/commands/link/linkDependency.js | 6 +- packages/cli/src/commands/link/unlink.js | 2 +- packages/cli/src/commands/server/runServer.js | 2 +- .../cli/src/commands/upgrade/legacyUpgrade.js | 2 +- packages/cli/src/commands/upgrade/upgrade.js | 2 +- packages/cli/src/tools/config/index.js | 2 +- .../src/tools/config/readConfigFromDisk.js | 2 +- packages/cli/src/tools/loadMetroConfig.js | 2 +- .../src/commands/runAndroid/index.js | 2 +- .../platform-ios/src/commands/runIOS/index.js | 2 +- packages/platform-ios/src/config/index.js | 2 +- types/{config.js => index.js} | 0 yarn.lock | 90 ++++++++++++++++++- 29 files changed, 134 insertions(+), 34 deletions(-) rename types/{config.js => index.js} (100%) diff --git a/.eslintrc.js b/.eslintrc.js index 291813410..602287973 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,19 +1,31 @@ module.exports = { - extends: '@react-native-community', + extends: ['@react-native-community', 'plugin:import/errors'], env: { node: true, }, rules: { 'prettier/prettier': [2, 'fb'], }, + // @todo: remove once we cover whole codebase with types + plugins: ['eslint-plugin-import'], settings: { react: { version: 'latest', }, + 'import/resolver': { + alias: { + map: [['types', './types/index.js']], + }, + }, }, overrides: [ { - files: ['**/__mocks__/**', '**/__fixtures__/**', '**/__e2e__/**', 'jest/**'], + files: [ + '**/__mocks__/**', + '**/__fixtures__/**', + '**/__e2e__/**', + 'jest/**', + ], env: { jest: true, }, diff --git a/.flowconfig b/.flowconfig index 90bdd9049..0563c1419 100644 --- a/.flowconfig +++ b/.flowconfig @@ -27,6 +27,7 @@ esproposal.export_star_as=enable esproposal.optional_chaining=enable esproposal.nullish_coalescing=enable module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' +module.name_mapper='types' -> '/types/index.js' suppress_type=$FlowIssue suppress_type=$FlowFixMe diff --git a/babel.config.js b/babel.config.js index fd9551e17..78e8b6ee7 100644 --- a/babel.config.js +++ b/babel.config.js @@ -13,5 +13,13 @@ module.exports = { plugins: [ require.resolve('@babel/plugin-transform-strict-mode'), [require.resolve('@babel/plugin-transform-modules-commonjs'), {lazy: true}], + // [ + // require.resolve('babel-plugin-module-resolver', { + // root: ['.'], + // alias: { + // types: './types', + // }, + // }), + // ], ], }; diff --git a/package.json b/package.json index 9d1cb7ac7..4d20e9728 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,11 @@ "@babel/preset-flow": "^7.0.0", "@react-native-community/eslint-config": "^0.0.3", "babel-jest": "^24.6.0", + "babel-plugin-module-resolver": "^3.2.0", "chalk": "^2.4.2", "eslint": "^5.10.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-plugin-import": "^2.17.0", "execa": "^1.0.0", "flow-bin": "^0.96.0", "flow-typed": "^2.5.1", diff --git a/packages/cli/src/cliEntry.js b/packages/cli/src/cliEntry.js index 6e37b0092..015dcf616 100644 --- a/packages/cli/src/cliEntry.js +++ b/packages/cli/src/cliEntry.js @@ -12,7 +12,7 @@ import childProcess from 'child_process'; import commander from 'commander'; import path from 'path'; -import type {CommandT, ConfigT} from '../../../types/config'; +import type {CommandT, ConfigT} from 'types'; import commands from './commands'; import init from './commands/init/initCompat'; diff --git a/packages/cli/src/commands/bundle/buildBundle.js b/packages/cli/src/commands/bundle/buildBundle.js index 240997b7d..97557b129 100644 --- a/packages/cli/src/commands/bundle/buildBundle.js +++ b/packages/cli/src/commands/bundle/buildBundle.js @@ -13,7 +13,7 @@ import outputBundle from 'metro/src/shared/output/bundle'; import path from 'path'; import chalk from 'chalk'; import type {CommandLineArgs} from './bundleCommandLineArgs'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import saveAssets from './saveAssets'; import loadMetroConfig from '../../tools/loadMetroConfig'; import {logger} from '@react-native-community/cli-tools'; diff --git a/packages/cli/src/commands/config/config.js b/packages/cli/src/commands/config/config.js index c6416b9f7..36b0c7130 100644 --- a/packages/cli/src/commands/config/config.js +++ b/packages/cli/src/commands/config/config.js @@ -1,7 +1,7 @@ /** * @flow */ -import {type ConfigT} from '../../../../../types/config'; +import {type ConfigT} from 'types'; export default { name: 'config', description: 'Print CLI configuration', diff --git a/packages/cli/src/commands/index.js b/packages/cli/src/commands/index.js index 4c6c3f562..c76f1f2c9 100644 --- a/packages/cli/src/commands/index.js +++ b/packages/cli/src/commands/index.js @@ -1,7 +1,7 @@ /** * @flow */ -import {type CommandT} from '../../../../types/config'; +import {type CommandT} from 'types'; import server from './server/server'; import library from './library/library'; diff --git a/packages/cli/src/commands/info/info.js b/packages/cli/src/commands/info/info.js index 6b4252c98..4c5492763 100644 --- a/packages/cli/src/commands/info/info.js +++ b/packages/cli/src/commands/info/info.js @@ -9,7 +9,7 @@ import envinfo from 'envinfo'; import {logger} from '@react-native-community/cli-tools'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; const info = async function getInfo( argv: Array, diff --git a/packages/cli/src/commands/init/errors/DirectoryAlreadyExistsError.js b/packages/cli/src/commands/init/errors/DirectoryAlreadyExistsError.js index 4c7c7aabe..c24352d17 100644 --- a/packages/cli/src/commands/init/errors/DirectoryAlreadyExistsError.js +++ b/packages/cli/src/commands/init/errors/DirectoryAlreadyExistsError.js @@ -1,6 +1,4 @@ // @flow -import path from 'path'; - export default class DirectoryAlreadyExistsError extends Error { constructor(directory: string) { super( diff --git a/packages/cli/src/commands/init/init.js b/packages/cli/src/commands/init/init.js index bf01da551..ddf9381be 100644 --- a/packages/cli/src/commands/init/init.js +++ b/packages/cli/src/commands/init/init.js @@ -2,7 +2,7 @@ import fs from 'fs-extra'; import minimist from 'minimist'; import semver from 'semver'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import {validateProjectName} from './validate'; import DirectoryAlreadyExistsError from './errors/DirectoryAlreadyExistsError'; import printRunInstructions from './printRunInstructions'; diff --git a/packages/cli/src/commands/install/install.js b/packages/cli/src/commands/install/install.js index ad80cfb2e..a15072ed1 100644 --- a/packages/cli/src/commands/install/install.js +++ b/packages/cli/src/commands/install/install.js @@ -7,7 +7,7 @@ * @flow */ -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; import link from '../link/link'; diff --git a/packages/cli/src/commands/install/uninstall.js b/packages/cli/src/commands/install/uninstall.js index 791b3128d..7c51a0a41 100644 --- a/packages/cli/src/commands/install/uninstall.js +++ b/packages/cli/src/commands/install/uninstall.js @@ -7,7 +7,7 @@ * @flow */ -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; import link from '../link/unlink'; diff --git a/packages/cli/src/commands/link/link.js b/packages/cli/src/commands/link/link.js index ff21e28a8..fbde1782c 100644 --- a/packages/cli/src/commands/link/link.js +++ b/packages/cli/src/commands/link/link.js @@ -9,7 +9,7 @@ import {pick} from 'lodash'; import {logger, CLIError} from '@react-native-community/cli-tools'; -import {type ConfigT} from '../../../../../types/config'; +import {type ConfigT} from 'types'; import getPlatformName from './getPlatformName'; import linkDependency from './linkDependency'; import linkAssets from './linkAssets'; diff --git a/packages/cli/src/commands/link/linkAll.js b/packages/cli/src/commands/link/linkAll.js index 6c8c1b8d9..478346b36 100644 --- a/packages/cli/src/commands/link/linkAll.js +++ b/packages/cli/src/commands/link/linkAll.js @@ -5,7 +5,7 @@ import {uniqBy} from 'lodash'; import path from 'path'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import linkAssets from './linkAssets'; import linkDependency from './linkDependency'; diff --git a/packages/cli/src/commands/link/linkAssets.js b/packages/cli/src/commands/link/linkAssets.js index f6583fe13..c74148333 100644 --- a/packages/cli/src/commands/link/linkAssets.js +++ b/packages/cli/src/commands/link/linkAssets.js @@ -1,7 +1,7 @@ // @flow import {isEmpty} from 'lodash'; -import type {PlatformsT, ProjectConfigT} from '../../../../../types/config'; +import type {PlatformsT, ProjectConfigT} from 'types'; import {logger} from '@react-native-community/cli-tools'; diff --git a/packages/cli/src/commands/link/linkDependency.js b/packages/cli/src/commands/link/linkDependency.js index a77d4c2e5..80187b94a 100644 --- a/packages/cli/src/commands/link/linkDependency.js +++ b/packages/cli/src/commands/link/linkDependency.js @@ -1,10 +1,6 @@ // @flow -import type { - DependencyConfigT, - ProjectConfigT, - PlatformsT, -} from '../../../../../types/config'; +import type {DependencyConfigT, ProjectConfigT, PlatformsT} from 'types'; import {logger} from '@react-native-community/cli-tools'; import pollParams from './pollParams'; import getPlatformName from './getPlatformName'; diff --git a/packages/cli/src/commands/link/unlink.js b/packages/cli/src/commands/link/unlink.js index ac4d24737..411b6d70b 100644 --- a/packages/cli/src/commands/link/unlink.js +++ b/packages/cli/src/commands/link/unlink.js @@ -9,7 +9,7 @@ import {flatMap, values, difference} from 'lodash'; import {logger, CLIError} from '@react-native-community/cli-tools'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import getPlatformName from './getPlatformName'; const unlinkDependency = ( diff --git a/packages/cli/src/commands/server/runServer.js b/packages/cli/src/commands/server/runServer.js index c8a47e28f..4fdb07a8d 100644 --- a/packages/cli/src/commands/server/runServer.js +++ b/packages/cli/src/commands/server/runServer.js @@ -12,7 +12,7 @@ import {Terminal} from 'metro-core'; import morgan from 'morgan'; import path from 'path'; import {logger} from '@react-native-community/cli-tools'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import messageSocket from './messageSocket'; import webSocketProxy from './webSocketProxy'; import MiddlewareManager from './middleware/MiddlewareManager'; diff --git a/packages/cli/src/commands/upgrade/legacyUpgrade.js b/packages/cli/src/commands/upgrade/legacyUpgrade.js index 0415b8782..679e7a44b 100644 --- a/packages/cli/src/commands/upgrade/legacyUpgrade.js +++ b/packages/cli/src/commands/upgrade/legacyUpgrade.js @@ -11,7 +11,7 @@ import fs from 'fs'; import path from 'path'; import semver from 'semver'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import {logger} from '@react-native-community/cli-tools'; import copyProjectTemplateAndReplace from '../../tools/generator/copyProjectTemplateAndReplace'; diff --git a/packages/cli/src/commands/upgrade/upgrade.js b/packages/cli/src/commands/upgrade/upgrade.js index d78888e16..95682c320 100644 --- a/packages/cli/src/commands/upgrade/upgrade.js +++ b/packages/cli/src/commands/upgrade/upgrade.js @@ -4,7 +4,7 @@ import fs from 'fs'; import chalk from 'chalk'; import semver from 'semver'; import execa from 'execa'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import {logger} from '@react-native-community/cli-tools'; import * as PackageManager from '../../tools/packageManager'; import {fetch} from '../../tools/fetch'; diff --git a/packages/cli/src/tools/config/index.js b/packages/cli/src/tools/config/index.js index 4f356077f..5e7e2e5ef 100644 --- a/packages/cli/src/tools/config/index.js +++ b/packages/cli/src/tools/config/index.js @@ -15,7 +15,7 @@ import { readLegacyDependencyConfigFromDisk, } from './readConfigFromDisk'; -import {type ConfigT} from '../../../../../types/config'; +import {type ConfigT} from 'types'; import assign from '../assign'; import merge from '../merge'; diff --git a/packages/cli/src/tools/config/readConfigFromDisk.js b/packages/cli/src/tools/config/readConfigFromDisk.js index f7d7de0b7..b55833510 100644 --- a/packages/cli/src/tools/config/readConfigFromDisk.js +++ b/packages/cli/src/tools/config/readConfigFromDisk.js @@ -12,7 +12,7 @@ import { type UserDependencyConfigT, type UserConfigT, type CommandT, -} from '../../../../../types/config'; +} from 'types'; import {JoiError} from './errors'; diff --git a/packages/cli/src/tools/loadMetroConfig.js b/packages/cli/src/tools/loadMetroConfig.js index 6222d887b..da713adfc 100644 --- a/packages/cli/src/tools/loadMetroConfig.js +++ b/packages/cli/src/tools/loadMetroConfig.js @@ -5,7 +5,7 @@ import path from 'path'; import {createBlacklist} from 'metro'; import {loadConfig} from 'metro-config'; -import {type ConfigT} from '../../../../types/config'; +import {type ConfigT} from 'types'; import findSymlinkedModules from './findSymlinkedModules'; const resolveSymlinksForRoots = roots => diff --git a/packages/platform-android/src/commands/runAndroid/index.js b/packages/platform-android/src/commands/runAndroid/index.js index 4de34675a..08d587e31 100644 --- a/packages/platform-android/src/commands/runAndroid/index.js +++ b/packages/platform-android/src/commands/runAndroid/index.js @@ -11,7 +11,7 @@ import path from 'path'; import {spawnSync, spawn, execFileSync} from 'child_process'; import fs from 'fs'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import adb from './adb'; import runOnAllDevices from './runOnAllDevices'; diff --git a/packages/platform-ios/src/commands/runIOS/index.js b/packages/platform-ios/src/commands/runIOS/index.js index 95f7ac092..3e716ba12 100644 --- a/packages/platform-ios/src/commands/runIOS/index.js +++ b/packages/platform-ios/src/commands/runIOS/index.js @@ -12,7 +12,7 @@ import child_process from 'child_process'; import fs from 'fs'; import path from 'path'; -import type {ConfigT} from '../../../../../types/config'; +import type {ConfigT} from 'types'; import findXcodeProject from './findXcodeProject'; import parseIOSDevicesList from './parseIOSDevicesList'; diff --git a/packages/platform-ios/src/config/index.js b/packages/platform-ios/src/config/index.js index ed2c4e1ad..fd3e3a6b3 100644 --- a/packages/platform-ios/src/config/index.js +++ b/packages/platform-ios/src/config/index.js @@ -12,7 +12,7 @@ import path from 'path'; import findProject from './findProject'; import findPodfilePath from './findPodfilePath'; import findPodspecName from './findPodspecName'; -import type {UserConfigT} from '../../../../types/config'; +import type {UserConfigT} from 'types'; /** * For libraries specified without an extension, add '.tbd' for those that diff --git a/types/config.js b/types/index.js similarity index 100% rename from types/config.js rename to types/index.js diff --git a/yarn.lock b/yarn.lock index 2c3426197..1ca5532a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2212,6 +2212,17 @@ babel-plugin-jest-hoist@^24.6.0: dependencies: "@types/babel__traverse" "^7.0.6" +babel-plugin-module-resolver@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" + integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== + dependencies: + find-babel-config "^1.1.0" + glob "^7.1.2" + pkg-up "^2.0.0" + reselect "^3.0.1" + resolve "^1.4.0" + babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" @@ -2862,6 +2873,11 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + conventional-changelog-angular@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" @@ -3080,7 +3096,7 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -3281,6 +3297,14 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -3458,6 +3482,27 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-import-resolver-alias@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97" + integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== + +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49" + integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + eslint-plugin-eslint-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.1.tgz#32ff0afba8a48e17073817e6d03fbc5622f735b7" @@ -3473,6 +3518,23 @@ eslint-plugin-flowtype@2.50.3: dependencies: lodash "^4.17.10" +eslint-plugin-import@^2.17.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.0.tgz#bdf6598aded839a27454d824b0758fd46f80eb72" + integrity sha512-JCsOtNwPYUoeZPlSr8t0+uCU5OVlHh+dIBn8Rw7FiOPjCECG+QzDIKDqshbyJE6CYoj9wpcstEl8vUY7rXkqVA== + dependencies: + array-includes "^3.0.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.3.0" + has "^1.0.3" + lodash "^4.17.11" + minimatch "^3.0.4" + read-pkg-up "^2.0.0" + resolve "^1.10.0" + eslint-plugin-jest@22.4.1: version "22.4.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz#a5fd6f7a2a41388d16f527073b778013c5189a9c" @@ -3875,6 +3937,14 @@ finalhandler@1.1.0: statuses "~1.3.1" unpipe "~1.0.0" +find-babel-config@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -4877,7 +4947,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -5501,7 +5571,7 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json5@^0.5.0: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -7138,6 +7208,13 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + pkginfo@0.3.x: version "0.3.1" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" @@ -7682,6 +7759,11 @@ require-uncached@^1.0.3: caller-path "^0.1.0" resolve-from "^1.0.0" +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -7713,7 +7795,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.10.0, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== From ba31430d02fbd429d7735114a27c83c429d6c66c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Sat, 13 Apr 2019 11:46:53 +0200 Subject: [PATCH 4/7] bump Flow to 0.97 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4d20e9728..8501ffca0 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-import": "^2.17.0", "execa": "^1.0.0", - "flow-bin": "^0.96.0", + "flow-bin": "^0.97.0", "flow-typed": "^2.5.1", "glob": "^7.1.3", "jest": "^24.6.0", diff --git a/yarn.lock b/yarn.lock index 1ca5532a0..c3750962c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3983,10 +3983,10 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -flow-bin@^0.96.0: - version "0.96.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.96.0.tgz#3b0379d97304dc1879ae6db627cd2d6819998661" - integrity sha512-OSxERs0EdhVxEVCst/HmlT/RcnXsQQIRqcfK9J9wC8/93JQj+xQz4RtlsmYe1PSRYaozuDLyPS5pIA81Zwzaww== +flow-bin@^0.97.0: + version "0.97.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.97.0.tgz#036ffcfc27503367a9d906ec9d843a0aa6f6bb83" + integrity sha512-jXjD05gkatLuC4+e28frH1hZoRwr1iASP6oJr61Q64+kR4kmzaS+AdFBhYgoYS5kpoe4UzwDebWK8ETQFNh00w== flow-typed@^2.5.1: version "2.5.1" From 2b6a693b9d70ab4d6b5fc2e1f76bdb1a63af70b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Sat, 13 Apr 2019 11:49:16 +0200 Subject: [PATCH 5/7] add lint annotation to bin --- packages/cli/src/bin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/cli/src/bin.js b/packages/cli/src/bin.js index 78b528f7f..d8f99f54a 100755 --- a/packages/cli/src/bin.js +++ b/packages/cli/src/bin.js @@ -9,6 +9,7 @@ * @flow */ +// eslint-disable-next-line import/default import cliEntry from '.'; cliEntry.run(); From 176785bc820c1538a223cb76cb72aa5af10a7316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Sat, 13 Apr 2019 11:54:08 +0200 Subject: [PATCH 6/7] enable babel module resolver plugin --- babel.config.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/babel.config.js b/babel.config.js index 78e8b6ee7..bf19c198a 100644 --- a/babel.config.js +++ b/babel.config.js @@ -13,13 +13,13 @@ module.exports = { plugins: [ require.resolve('@babel/plugin-transform-strict-mode'), [require.resolve('@babel/plugin-transform-modules-commonjs'), {lazy: true}], - // [ - // require.resolve('babel-plugin-module-resolver', { - // root: ['.'], - // alias: { - // types: './types', - // }, - // }), - // ], + [ + require.resolve('babel-plugin-module-resolver', { + root: ['.'], + alias: { + types: './types', + }, + }), + ], ], }; From 93066bf76c05e22f240927e3215b2fbd622fa120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Sat, 13 Apr 2019 11:58:04 +0200 Subject: [PATCH 7/7] import inquirer prompt type --- packages/cli/src/commands/link/pollParams.js | 3 ++- types/index.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/link/pollParams.js b/packages/cli/src/commands/link/pollParams.js index eaf36b0a7..ed93ac813 100644 --- a/packages/cli/src/commands/link/pollParams.js +++ b/packages/cli/src/commands/link/pollParams.js @@ -9,8 +9,9 @@ */ import inquirer from 'inquirer'; +import type {InquirerPromptT} from 'types'; -export default (questions: any) => +export default (questions: InquirerPromptT) => new Promise((resolve, reject) => { if (!questions) { resolve({}); diff --git a/types/index.js b/types/index.js index 5f2f75df6..14dba0ff7 100644 --- a/types/index.js +++ b/types/index.js @@ -22,7 +22,7 @@ export type CommandT = { * Opaque type that describes the Inquirer question format. Not typed, since we just * pass it directly to Inquirer. Validation is done with Joi in `schema.js` */ -type InquirerPromptT = any; +export type InquirerPromptT = any; /** * Settings that a library author can define in the configuration bundled with