Add starter package

Summary:
Adds a new package with typescript set up, to be published to npm.

Followed this as a guideline: https://itnext.io/step-by-step-building-and-publishing-an-npm-typescript-package-44fe7164964c

Reviewed By: passy

Differential Revision: D18244495

fbshipit-source-id: c684f0bb33e61699f605c637186c7a81136a920f
This commit is contained in:
John Knox
2019-11-06 09:38:24 -08:00
committed by Facebook Github Bot
parent 9670d6bde5
commit 2ae2352972
13 changed files with 4225 additions and 1 deletions

View File

@@ -55,7 +55,7 @@ module.exports = {
}, },
overrides: [ overrides: [
{ {
files: ['*.tsx'], files: ['*.tsx', '*.ts'],
parser: '@typescript-eslint/parser', parser: '@typescript-eslint/parser',
rules: { rules: {
'prettier/prettier': [2, {...prettierConfig, parser: 'typescript'}], 'prettier/prettier': [2, {...prettierConfig, parser: 'typescript'}],

View File

@@ -9,6 +9,7 @@
<PROJECT_ROOT>/src/plugins/sections/d3/d3.js$ <PROJECT_ROOT>/src/plugins/sections/d3/d3.js$
.*\.tsx .*\.tsx
.*/node_modules/.* .*/node_modules/.*
<PROJECT_ROOT>/doctor/.*
[libs] [libs]
flow-typed flow-typed

1
doctor/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/lib

8
doctor/README.md Normal file
View File

@@ -0,0 +1,8 @@
# Flipper Doctor
This package exists for running checks to diagnose and potentially fix issues affecting the operation of Flipper.
It's designed to be primarily used programmatically but may also expose a CLI interface.
## Usage
`cd doctor`
`yarn run run`

7
doctor/jestconfig.json Normal file
View File

@@ -0,0 +1,7 @@
{
"transform": {
"^.+\\.(t|j)sx?$": "ts-jest"
},
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
"moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"]
}

38
doctor/package.json Normal file
View File

@@ -0,0 +1,38 @@
{
"name": "flipper-doctor",
"version": "0.1.0",
"description": "Utility for checking for issues with a flipper installation",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"license": "MIT",
"devDependencies": {
"@types/jest": "^24.0.21",
"eslint": "^6.6.0",
"jest": "^24.9.0",
"prettier": "^1.18.2",
"ts-jest": "^24.1.0",
"tslint-config-prettier": "^1.18.0",
"typescript": "^3.7.2"
},
"scripts": {
"build": "tsc",
"prepare": "npm run build",
"prepublishOnly": "npm test && npm run lint",
"preversion": "npm run lint",
"test": "jest --config jestconfig.json",
"lint": "eslint -c ../.eslintrc.js src/**/* --ext .js,.ts && tsc --noemit",
"fix": "eslint -c ../.eslintrc.js src/**/* --fix --ext .js,.ts",
"run": "npm run build && node lib/cli.js"
},
"files": [
"lib/**/*"
],
"keywords": [
"Flipper",
"Doctor"
],
"author": "Facebook, Inc",
"dependencies": {
"envinfo": "^7.4.0"
}
}

30
doctor/src/cli.ts Normal file
View File

@@ -0,0 +1,30 @@
/**
* 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
*/
import {getEnvInfo} from './environmentInfo';
import {getHealthchecks} from './index';
(async () => {
const environmentInfo = await getEnvInfo();
const healthchecks = getHealthchecks();
const results = Object.entries(healthchecks).map(([key, category]) => [
key,
category
? {
label: category.label,
results: category.healthchecks.map(({label, run}) => ({
label,
result: run(environmentInfo),
})),
}
: {},
]);
console.log(JSON.stringify(results, null, 2));
})();

View File

@@ -0,0 +1,37 @@
/**
* 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
*/
import {run} from 'envinfo';
export type EnvironmentInfo = {
SDKs: {
'iOS SDK': {
Platforms: string[];
};
'Android SDK':
| {
'API Levels': string[] | 'Not Found';
'Build Tools': string[] | 'Not Found';
'System Images': string[] | 'Not Found';
'Android NDK': string | 'Not Found';
}
| 'Not Found';
};
};
export async function getEnvInfo(): Promise<EnvironmentInfo> {
return JSON.parse(
await run(
{
SDKs: ['iOS SDK', 'Android SDK'],
},
{json: true, showNotFound: true},
),
);
}

10
doctor/src/globals.d.ts vendored Normal file
View File

@@ -0,0 +1,10 @@
/**
* 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
*/
declare module 'envinfo';

63
doctor/src/index.ts Normal file
View File

@@ -0,0 +1,63 @@
/**
* 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
*/
import {EnvironmentInfo} from './environmentInfo';
type HealthcheckCategory = {
label: string;
healthchecks: Healthcheck[];
};
type Healthchecks = {
android: HealthcheckCategory;
ios?: HealthcheckCategory;
};
type Healthcheck = {
label: string;
run: (
env: EnvironmentInfo,
) => {
hasProblem: boolean;
isRequired?: boolean;
};
};
export function getHealthchecks(): Healthchecks {
return {
android: {
label: 'Android',
healthchecks: [
{
label: 'SDK Installed',
run: (e: EnvironmentInfo) => ({
hasProblem: e.SDKs['Android SDK'] != 'Not Found',
isRequired: false,
}),
},
],
},
...(process.platform === 'darwin'
? {
ios: {
label: 'iOS',
healthchecks: [
{
label: 'SDK Installed',
run: (e: EnvironmentInfo) => ({
hasProblem: e.SDKs['iOS SDK'].Platforms.length === 0,
isRequired: false,
}),
},
],
},
}
: {}),
};
}

11
doctor/tsconfig.json Normal file
View File

@@ -0,0 +1,11 @@
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"outDir": "./lib",
"strict": true
},
"include": ["src"],
"exclude": ["node_modules", "**/__tests__/*"]
}

3
doctor/tslint.json Normal file
View File

@@ -0,0 +1,3 @@
{
"extends": ["tslint:recommended", "tslint-config-prettier"]
}

4015
doctor/yarn.lock Normal file

File diff suppressed because it is too large Load Diff