diff --git a/.gitignore b/.gitignore index 5310536..312780a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules coverage -yarn.lock \ No newline at end of file +yarn.lock +dist \ No newline at end of file diff --git a/index.js b/index.js index a3c9633..3d0ac1a 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ -import { Block, Card, Button, Text, Input } from "./src"; -import * as Utils from "./src/utils"; +import { Block, Button, Card, Input, Text } from "./src"; import * as theme from "./src/theme"; +import * as Utils from "./src/utils"; export { Block, Card, Button, Text, Input, Utils, theme }; diff --git a/jest.config.js b/jest.config.js index 15fff00..166301a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -7,9 +7,16 @@ module.exports = { coveragePathIgnorePatterns: ["node_modules", "src/utils"], moduleDirectories: ["node_modules"], transform: { - "^.+\\.js$": "/node_modules/react-native/jest/preprocessor.js" + "^.+\\.js$": "/node_modules/react-native/jest/preprocessor.js", + "\\.(ts|tsx)$": "ts-jest" }, setupFiles: ["/jest.setup.js"], - moduleFileExtensions: ["js", "jsx"], - transformIgnorePatterns: [] + moduleFileExtensions: ["js", "jsx", "ts", "tsx"], + transformIgnorePatterns: [], + globals: { + "ts-jest": { + tsConfig: "tsconfig.jest.json" + } + }, + testPathIgnorePatterns: ["dist/"] }; diff --git a/package.json b/package.json index 608a43c..064f2a7 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ ], "homepage": "http://expo-ui-kit.com/", "description": "Expo.io UI Kit for React-Native", - "main": "index.js", + "main": "dist/index.js", + "types": "dist/index.d.ts", "author": "React-UI-Kit (https://react-ui-kit.com)", "license": "MIT", "scripts": { @@ -17,6 +18,12 @@ "test": "jest" }, "devDependencies": { + "@types/enzyme": "^3.10.5", + "@types/enzyme-adapter-react-16": "^1.0.6", + "@types/jest": "^25.2.1", + "@types/react": "^16.9.34", + "@types/react-native": "^0.62.2", + "@types/react-test-renderer": "^16.9.2", "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.14.0", "eslint": "^6.5.0", @@ -28,9 +35,11 @@ "react-native": "https://github.com/expo/react-native/archive/sdk-37.0.1.tar.gz", "react-native-testing-library": "^1.13.0", "react-test-renderer": "^16.13.1", + "ts-jest": "^25.3.1", "typescript": "^3.8.3" }, "eslintConfig": { "extends": "universe/native" - } + }, + "dependencies": {} } diff --git a/src/Block.js b/src/Block.js index 2378b0a..d3ef6fc 100644 --- a/src/Block.js +++ b/src/Block.js @@ -115,8 +115,8 @@ import { getSpacing, mergeTheme, parseSpacing } from "./utils"; * */ -const Block = props => { - const getSpacings = type => { +const Block = (props) => { + const getSpacings = (type) => { const { margin, marginTop, @@ -203,8 +203,7 @@ const Block = props => { safe, style, children, - scroll, - ...rest + scroll } = props; const excludeProps = [ @@ -258,7 +257,7 @@ const Block = props => { shadowRadius: elevation }, space && { justifyContent: `space-${space}` }, - card && { borderRadius: SIZES.border }, + card && { borderRadius: SIZES.radius }, radius && { borderRadius: radius }, // color shortcuts primary && { backgroundColor: COLORS.primary }, diff --git a/src/Button.js b/src/Button.js index 750f5e4..5d2196c 100644 --- a/src/Button.js +++ b/src/Button.js @@ -7,7 +7,7 @@ import { TouchableWithoutFeedback } from "react-native"; import expoTheme from "./theme"; -import { getSpacing, mergeTheme, parseSpacing, rgba } from "./utils"; +import { getSpacing, mergeTheme, parseSpacing, rgba } from "./utils/index"; /** * https://facebook.github.io/react-native/docs/touchableopacity @@ -56,7 +56,13 @@ import { getSpacing, mergeTheme, parseSpacing, rgba } from "./utils"; * */ -function Button(props) { +export const ButtonInstance = ({ + Touchable = TouchableOpacity, + children, + ...props +}) => {children}; + +const Button = (props) => { const getSpacings = (type) => { const { margin, @@ -106,7 +112,6 @@ function Button(props) { ]; } }; - const { disabled, opacity, @@ -134,8 +139,7 @@ function Button(props) { withoutFeedback, theme, style, - children, - ...rest + children } = props; const excludeProps = [ @@ -205,7 +209,7 @@ function Button(props) { buttonStyles.backgroundColor = "transparent"; } - const ButtonType = highlight + const Touchable = highlight ? TouchableHighlight : nativeFeedback ? TouchableNativeFeedback @@ -214,15 +218,16 @@ function Button(props) { : TouchableOpacity; return ( - - {children} - + style={buttonStyles} + children={children} + /> ); -} +}; Button.defaultProps = { color: null, @@ -232,7 +237,6 @@ Button.defaultProps = { margin: null, padding: null, flex: 0, - height: false, transparent: false, primary: false, secondary: false, diff --git a/src/Card.js b/src/Card.js index a00ecb6..415b632 100644 --- a/src/Card.js +++ b/src/Card.js @@ -2,7 +2,7 @@ import React from "react"; import { StyleSheet } from "react-native"; import Block from "./Block"; import expoTheme from "./theme"; -import { mergeTheme, rgba } from "./utils"; +import { mergeTheme, rgba } from "./utils/index"; /** * https://facebook.github.io/react-native/docs/view @@ -48,7 +48,7 @@ import { mergeTheme, rgba } from "./utils"; * */ -const Card = props => { +const Card = (props) => { const { color, radius, diff --git a/src/Input.js b/src/Input.js index c143bd0..b7c0e11 100644 --- a/src/Input.js +++ b/src/Input.js @@ -1,8 +1,7 @@ import React, { useReducer } from "react"; import { StyleSheet, TextInput } from "react-native"; - import expoTheme from "./theme"; -import { mergeTheme, rgba } from "./utils"; +import { mergeTheme, rgba } from "./utils/index"; /** * https://facebook.github.io/react-native/docs/textinput @@ -168,7 +167,7 @@ Input.defaultProps = { pattern: null, onFocus: null, onBlur: null, - onChange: null, + onChangeText: null, onValidation: null, placeholder: null, autoCorrect: false, diff --git a/src/Text.js b/src/Text.js index c1ea8fc..d022bdf 100644 --- a/src/Text.js +++ b/src/Text.js @@ -1,7 +1,7 @@ import React from "react"; import { Animated, StyleSheet, Text } from "react-native"; import expoTheme from "./theme"; -import { getSpacing, mergeTheme, parseSpacing } from "./utils"; +import { getSpacing, mergeTheme, parseSpacing } from "./utils/index"; /** * Usage: @@ -66,8 +66,8 @@ import { getSpacing, mergeTheme, parseSpacing } from "./utils"; * - will render Animated.Text */ -const Typography = props => { - const getSpacings = type => { +const Typography = (props) => { + const getSpacings = (type) => { const { margin, marginTop, diff --git a/src/__tests__/Block.test.js b/src/__tests__/Block.test.js index 263b51b..56b6ff1 100644 --- a/src/__tests__/Block.test.js +++ b/src/__tests__/Block.test.js @@ -421,7 +421,8 @@ describe("", () => { const style = StyleSheet.flatten(component.props.style); expect(instance.props.card).toEqual(true); - expect(style.borderRadius).toEqual(SIZES.border); + + expect(style.borderRadius).toEqual(SIZES.radius); }); it("radius={4}", () => { @@ -497,7 +498,7 @@ describe("", () => { expect(instance.props.theme).toEqual(customTheme); - let style = StyleSheet.flatten(component.props.style); + const style = StyleSheet.flatten(component.props.style); expect(style.backgroundColor).toEqual("red"); }); diff --git a/src/__tests__/Button.test.js b/src/__tests__/Button.test.js index dce5f76..692539b 100644 --- a/src/__tests__/Button.test.js +++ b/src/__tests__/Button.test.js @@ -1,9 +1,13 @@ import { shallow } from "enzyme"; import React from "react"; -import { StyleSheet } from "react-native"; +import { + StyleSheet, + TouchableHighlight, + TouchableNativeFeedback, + TouchableWithoutFeedback +} from "react-native"; import renderer from "react-test-renderer"; - -import Button from "../Button"; +import Button, { RenderButton } from "../Button"; import Text from "../Text"; import { SIZES } from "../theme"; import { rgba } from "../utils"; @@ -11,6 +15,7 @@ import { rgba } from "../utils"; describe(" ); + const buttonType = shallow( + + + + ); + expect(component.props().highlight).toEqual(true); - expect(component.name()).toEqual("TouchableHighlight"); + expect(buttonType.name()).toEqual("TouchableHighlight"); }); it("ButtonType: withoutFeedback", () => { @@ -356,9 +371,14 @@ describe(" ); + const buttonType = shallow( + + + + ); expect(component.props().withoutFeedback).toEqual(true); - expect(component.name()).toEqual("TouchableWithoutFeedback"); + expect(buttonType.name()).toEqual("TouchableWithoutFeedback"); }); it("onPress", () => { diff --git a/src/__tests__/Input.test.js b/src/__tests__/Input.test.js index 29f0f8e..292a140 100644 --- a/src/__tests__/Input.test.js +++ b/src/__tests__/Input.test.js @@ -3,10 +3,9 @@ import React from "react"; import { StyleSheet } from "react-native"; import { fireEvent, render } from "react-native-testing-library"; import renderer from "react-test-renderer"; - import Input, { blur, change, focus, INITIAL_STATE, reducer } from "../Input"; import { SIZES } from "../theme"; -import { rgba } from "../utils"; +import { rgba } from "../utils/index"; describe(" - State", () => { it("returns default state", () => { @@ -62,7 +61,7 @@ describe("", () => { const component = input.toJSON(); const instance = input.root; - let style = StyleSheet.flatten(component.props.style); + const style = StyleSheet.flatten(component.props.style); expect(style.borderColor).toEqual(rgba("#DDDDDD", 0.4)); expect(instance.props.color).toEqual("#DDDDDD"); }); @@ -231,24 +230,23 @@ describe("", () => { component.setProps({ autoCapitalize: "words" }); expect(component.props().autoCapitalize).toEqual("words"); }); +}); +it("borderWidth={2}", () => { + const input = renderer.create(); + const component = input.toJSON(); + const instance = input.root; + + const style = StyleSheet.flatten(component.props.style); + expect(style.borderWidth).toEqual(2); + expect(instance.props.borderWidth).toEqual(2); +}); - it("borderWidth={2}", () => { - const input = renderer.create(); - const component = input.toJSON(); - const instance = input.root; - - const style = StyleSheet.flatten(component.props.style); - expect(style.borderWidth).toEqual(2); - expect(instance.props.borderWidth).toEqual(2); - }); - - it("borderColor='#4630EB'", () => { - const input = renderer.create(); - const component = input.toJSON(); - const instance = input.root; +it("borderColor='#4630EB'", () => { + const input = renderer.create(); + const component = input.toJSON(); + const instance = input.root; - const style = StyleSheet.flatten(component.props.style); - expect(style.borderColor).toEqual("#4630EB"); - expect(instance.props.borderColor).toEqual("#4630EB"); - }); + const style = StyleSheet.flatten(component.props.style); + expect(style.borderColor).toEqual("#4630EB"); + expect(instance.props.borderColor).toEqual("#4630EB"); }); diff --git a/src/__tests__/Text.test.js b/src/__tests__/Text.test.js index 97d9e04..3c7e34b 100644 --- a/src/__tests__/Text.test.js +++ b/src/__tests__/Text.test.js @@ -303,13 +303,13 @@ describe("", () => { it('transform="uppercase"', () => { const component = shallow(uppercase); - let style = StyleSheet.flatten(component.props().style); + const style = StyleSheet.flatten(component.props().style); expect(style.textTransform).toEqual("uppercase"); }); it("lineHeight using height={32}", () => { const component = shallow(lineHeight 32); - let style = StyleSheet.flatten(component.props().style); + const style = StyleSheet.flatten(component.props().style); expect(style.lineHeight).toEqual(32); }); diff --git a/src/__tests__/helpers.test.js b/src/__tests__/helpers.test.js index 15a3c73..cd2bee9 100644 --- a/src/__tests__/helpers.test.js +++ b/src/__tests__/helpers.test.js @@ -1,5 +1,4 @@ -import { getSpacing } from "../utils/"; -// import { SIZES } from "../theme"; +import { getSpacing } from "../utils/index"; describe("Helpers", () => { it("spacing: margin & padding", () => { diff --git a/src/index.d.ts b/src/index.d.ts new file mode 100644 index 0000000..c161660 --- /dev/null +++ b/src/index.d.ts @@ -0,0 +1,253 @@ +import React from "react"; +import { + NativeSyntheticEvent, + TextInputFocusEventData, + TouchableHighlightProps, + TouchableNativeFeedbackProps, + TouchableWithoutFeedbackProps +} from "react-native"; + +/** + * Global Component Types + */ + +interface SizingProps { + width?: number | string; + height?: number | string; + borderWidth?: number; +} + +interface ColorsProps { + color?: string; + primary?: boolean; + secondary?: boolean; + tertiary?: boolean; + black?: boolean; + white?: boolean; + gray?: boolean; + error?: boolean; + warning?: boolean; + success?: boolean; + info?: boolean; + borderColor?: string; +} + +interface PositioningProps { + flex?: number | boolean; + noflex?: boolean; + space?: string; + row?: boolean; + column?: boolean; + center?: boolean; + middle?: boolean; + top?: boolean; + right?: boolean; + bottom?: boolean; + left?: boolean; +} + +interface StylingProps { + opacity?: number; + color?: string; + shadow?: boolean; + elevation?: number; + radius?: number; + wrap?: boolean; + style?: Record; + theme?: Record; +} + +declare type StringNumberBoolean = string | number | boolean; +declare type SNB = StringNumberBoolean; + +interface ExcludedProps { + margin?: SNB | number[]; + marginTop?: SNB; + marginRight?: SNB; + marginBottom?: SNB; + marginLeft?: SNB; + marginVertical?: SNB; + marginHorizontal?: SNB; + padding?: SNB | number[]; + paddingTop?: SNB; + paddingRight?: SNB; + paddingBottom?: SNB; + paddingLeft?: SNB; + paddingVertical?: SNB; + paddingHorizontal?: SNB; +} + +export interface ThemeProps + extends SizingProps, + PositioningProps, + StylingProps, + ColorsProps, + ExcludedProps {} + +/** + * The Subtract type is a difference operator as it does T - K and return the difference. + * @param T - Minuend, base value + * @param K - Subtraend, the props you want to discard + * @returns Rest or difference of the operation + */ + +type Subtract = Pick>; +export type ExtraProps

= Subtract; +interface BlockOptions { + animated?: boolean; + safe?: boolean; + card?: boolean; + scroll?: boolean; +} + +interface ButtonOptions { + outlined?: boolean; + highlight?: boolean; + nativeFeedback?: boolean; + withoutFeedback?: boolean; +} + +interface TextOptions { + animated?: boolean; + weight?: string | boolean; + h1?: boolean; + h2?: boolean; + h3?: boolean; + title?: boolean; + subtitle?: boolean; + caption?: boolean; + small?: boolean; + size?: number; + // styling + transform?: string; + regular?: boolean; + bold?: boolean; + semibold?: boolean; + medium?: boolean; + light?: boolean; + center?: boolean; + right?: boolean; + spacing?: string; // letter-spacing +} + +interface CardOptions { + outlined?: boolean; + disabled?: boolean; +} +interface InputOptions { + pattern?: string | string[]; + autoCorrect?: any; + autoCapitalize?: any; + placeholder?: string; + internalRef?: any; + type?: string; + onChangeText?(e: InputState); + onFocus?(e: NativeSyntheticEvent); + onBlur?(e: NativeSyntheticEvent); + onValidation?(e: boolean | boolean[]); +} + +export type InputState = { + value?: any; + focused?: boolean; + blurred?: boolean; +}; +export type InputAction = { + type?: string; + payload?: InputState; +}; + +/** + * Props + */ + +export interface BlockProps extends BlockOptions, ThemeProps { + [key: string]: any; +} + +export interface ButtonProps extends ButtonOptions, ThemeProps { + [key: string]: any; +} + +export type RenderButtonProps = ButtonProps & + TouchableWithoutFeedbackProps & + TouchableHighlightProps & + TouchableNativeFeedbackProps & { + Touchable?: any; + }; +export interface TextProps extends TextOptions, ThemeProps { + [key: string]: any; +} + +export interface CardProps extends CardOptions, ThemeProps { + [key: string]: any; +} + +export interface InputProps extends InputOptions, ThemeProps {} + +export declare const Block: React.FC; +export declare const styles: { + block: { + flex: number; + }; + row: { + flexDirection: "row"; + }; + column: { + flexDirection: "column"; + }; + center: { + alignItems: "center"; + }; + middle: { + justifyContent: "center"; + }; + left: { + justifyContent: "flex-start"; + }; + right: { + justifyContent: "flex-end"; + }; + top: { + justifyContent: "flex-start"; + }; + bottom: { + justifyContent: "flex-end"; + }; + wrap: { + flexWrap: "wrap"; + }; +}; +export declare const RenderButton: ({ + Touchable, + children, + ...props +}: RenderButtonProps) => JSX.Element; +export declare const Button: React.FC< + ButtonProps & TouchableWithoutFeedbackProps & TouchableNativeFeedbackProps +>; + +export declare const Card: React.FC; + +export declare const INITIAL_STATE: InputState; +export declare const change: ( + value: any +) => { + type: string; + payload: { + value: any; + }; +}; +export declare const focus: () => { + type: string; +}; +export declare const blur: () => { + type: string; +}; +export declare const reducer: ( + state: InputState, + action: InputAction +) => InputState; +export declare const Input: React.FC; + +export declare const Typography: React.FC; diff --git a/src/index.js b/src/index.js index d817326..63c6e45 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,7 @@ import Block from "./Block"; -import Card from "./Card"; import Button from "./Button"; -import Text from "./Text"; +import Card from "./Card"; import Input from "./Input"; +import Text from "./Text"; export { Block, Card, Button, Text, Input }; diff --git a/src/theme.js b/src/theme.js index 21e1aba..d913701 100644 --- a/src/theme.js +++ b/src/theme.js @@ -1,10 +1,11 @@ import { Dimensions } from "react-native"; + const { width, height } = Dimensions.get("window"); export const COLORS = { // default font color font: "#000000", - + // base colors primary: "#4630EB", secondary: "#A3A1F7", diff --git a/src/utils/helpers.js b/src/utils/helpers.js index 681b58d..ee9236b 100644 --- a/src/utils/helpers.js +++ b/src/utils/helpers.js @@ -80,7 +80,7 @@ export const spacing = (type, value, defaultValue = 1) => { // if the value is string: 2x 4x if (typeof value === "string") { // extract decimal or integer value from value - const spacingValue = value.match(/((?=.*[1-9])\d*(?:\.\d{1,2})|(\d*))x/); + const spacingValue = value.match(/((?=.*[1-9])\d*(?:\.\d{1,2})|(\d*))x/)[0]; if (!spacingValue) return {}; return { @@ -126,7 +126,7 @@ export const parseSpacing = (type, value, defaultValue = 1) => { // if the value is string: 2x 4x if (typeof value === "string") { // extract decimal or integer value from value - const spacingValue = value.match(/((?=.*[1-9])\d*(?:\.\d{1,2})|(\d*))x/); + const spacingValue = value.match(/((?=.*[1-9])\d*(?:\.\d{1,2})|(\d*))x/)[0]; if (!spacingValue) return {}; return { @@ -180,7 +180,7 @@ export const getMargins = (value, defaultValue = 1) => { } if (typeof value === "string") { - const marginValue = value.match(/((?=.*[1-9])\d*(?:\.\d{1,2})|(\d*))x/); + const marginValue = value.match(/((?=.*[1-9])\d*(?:\.\d{1,2})|(\d*))/)[0]; return ( marginValue && { marginTop: parseFloat(marginValue) * defaultValue, @@ -237,7 +237,7 @@ export const getPaddings = (value, defaultValue = 1) => { } if (typeof value === "string") { - const paddingValue = value.match(/((?=.*[1-9])\d*(?:\.\d{1,2})|(\d*))x/); + const paddingValue = value.match(/((?=.*[1-9])\d*(?:\.\d{1,2})|(\d*))/)[0]; return ( paddingValue && { paddingTop: parseFloat(paddingValue) * defaultValue, @@ -284,7 +284,7 @@ export const getPaddings = (value, defaultValue = 1) => { * COLORS.secondary will return value "green" */ -export const mergeTheme = (theme = {}, extra = {}) => { +export const mergeTheme = (theme, extra) => { const { COLORS, SIZES, FONTS, WEIGHTS, ...REST } = extra; return { COLORS: { ...theme.COLORS, ...COLORS }, diff --git a/src/utils/rgba.js b/src/utils/rgba.js index d662639..4892e9a 100644 --- a/src/utils/rgba.js +++ b/src/utils/rgba.js @@ -2,9 +2,9 @@ // NPM: https://www.npmjs.com/package/hex-to-rgba // GitHub: https://github.com/misund/hex-to-rgba -const removeHash = hex => (hex.charAt(0) === "#" ? hex.slice(1) : hex); +const removeHash = (hex) => (hex.charAt(0) === "#" ? hex.slice(1) : hex); -const parseHex = nakedHex => { +const parseHex = (nakedHex) => { const isShort = nakedHex.length === 3 || nakedHex.length === 4; const twoDigitHexR = isShort @@ -31,7 +31,7 @@ const parseHex = nakedHex => { }; }; -const hexToDecimal = hex => parseInt(hex, 16); +const hexToDecimal = (hex) => parseInt(hex, 16); const hexesToDecimals = ({ r, g, b, a }) => ({ r: hexToDecimal(r), @@ -40,7 +40,7 @@ const hexesToDecimals = ({ r, g, b, a }) => ({ a: +(hexToDecimal(a) / 255).toFixed(2) }); -const isNumeric = n => !isNaN(parseFloat(n)) && isFinite(n); // eslint-disable-line no-restricted-globals, max-len +const isNumeric = (n) => !isNaN(parseFloat(n)) && isFinite(n); // eslint-disable-line no-restricted-globals, max-len const formatRgb = (decimalObject, parameterA) => { const { r, g, b, a: parsedA } = decimalObject; @@ -54,8 +54,8 @@ const formatRgb = (decimalObject, parameterA) => { * * If you specify an alpha value, you'll get a rgba() value instead. * - * @param The hex value to convert. ('123456'. '#123456', ''123', '#123') - * @param An alpha value to apply. (optional) ('0.5', '0.25') + * @param hex - The hex value to convert. ('123456'. '#123456', ''123', '#123') + * @param a - An alpha value to apply. (optional) ('0.5', '0.25') * @return An rgb or rgba value. ('rgb(11, 22, 33)'. 'rgba(11, 22, 33, 0.5)') */ const hexToRgba = (hex, a) => { @@ -76,4 +76,4 @@ const hexToRgba = (hex, a) => { * return new hex value with alpha 0.5 */ -module.exports = hexToRgba; +export default hexToRgba; diff --git a/tsconfig.jest.json b/tsconfig.jest.json new file mode 100644 index 0000000..ba7894c --- /dev/null +++ b/tsconfig.jest.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig", + "compilerOptions": { + "jsx": "react", + "module": "commonjs" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7e96c53 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,72 @@ +{ + "compilerOptions": { + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + "allowJs": true /* Allow javascript files to be compiled. */, + // "checkJs": true, /* Report errors in .js files. */ + "jsx": "preserve" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */, + "declaration": true /* Generates corresponding '.d.ts' file. */, + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist" /* Redirect output structure to the directory. */, + "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */, + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": false /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + "types": [ + "react", + "react-native", + "jest" + ] /* Type declaration files to be included in compilation. */, + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "include": ["src/**/*"], + "exclude": ["coverage", "dist", "node_modules"] +} diff --git a/yarn.lock b/yarn.lock index 1b469b5..8d174c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1153,11 +1153,33 @@ dependencies: "@babel/types" "^7.3.0" +"@types/cheerio@*": + version "0.22.17" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.17.tgz#e54f71c3135f71ebc16c8dc62edad533872c9e72" + integrity sha512-izlm+hbqWN9csuB9GSMfCnAyd3/57XZi3rfz1B0C4QBGVMp+9xQ7+9KYnep+ySfUrCWql4lGzkLf0XmprXcz9g== + dependencies: + "@types/node" "*" + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/enzyme-adapter-react-16@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.6.tgz#8aca7ae2fd6c7137d869b6616e696d21bb8b0cec" + integrity sha512-VonDkZ15jzqDWL8mPFIQnnLtjwebuL9YnDkqeCDYnB4IVgwUm0mwKkqhrxLL6mb05xm7qqa3IE95m8CZE9imCg== + dependencies: + "@types/enzyme" "*" + +"@types/enzyme@*", "@types/enzyme@^3.10.5": + version "3.10.5" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.5.tgz#fe7eeba3550369eed20e7fb565bfb74eec44f1f0" + integrity sha512-R+phe509UuUYy9Tk0YlSbipRpfVtIzb/9BHn5pTEtjJTF5LXvUjrIQcZvNyANNEyFrd2YGs196PniNT1fgvOQA== + dependencies: + "@types/cheerio" "*" + "@types/react" "*" + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" @@ -1183,6 +1205,14 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/jest@^25.2.1": + version "25.2.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.1.tgz#9544cd438607955381c1bdbdb97767a249297db5" + integrity sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA== + dependencies: + jest-diff "^25.2.1" + pretty-format "^25.2.1" + "@types/json-schema@^7.0.3": version "7.0.4" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" @@ -1198,6 +1228,33 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/react-native@^0.62.2": + version "0.62.2" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.62.2.tgz#f3e150f308c27089cefbcbfa3eb6cc14db279b2f" + integrity sha512-oIUIbqZNN9vRnGKWHYbTVp/GyTqdaM5mfy1s4zsi6BYvHAaFOPZ32IrhIHno/A5XOv4wuGfE7g5fliDk/H0+/Q== + dependencies: + "@types/react" "*" + +"@types/react-test-renderer@^16.9.2": + version "16.9.2" + resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.2.tgz#e1c408831e8183e5ad748fdece02214a7c2ab6c5" + integrity sha512-4eJr1JFLIAlWhzDkBCkhrOIWOvOxcCAfQh+jiKg7l/nNZcCIL2MHl2dZhogIFKyHzedVWHaVP1Yydq/Ruu4agw== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^16.9.34": + version "16.9.34" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.34.tgz#f7d5e331c468f53affed17a8a4d488cd44ea9349" + integrity sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -1831,6 +1888,13 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -1843,7 +1907,7 @@ buffer-crc32@^0.2.13: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-from@^1.0.0: +buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== @@ -2176,9 +2240,9 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-pure@^3.0.0: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" - integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== core-js@^1.0.0: version "1.2.7" @@ -2275,6 +2339,11 @@ cssstyle@^2.0.0: dependencies: cssom "~0.3.6" +csstype@^2.2.0: + version "2.6.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -3053,7 +3122,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -4006,7 +4075,7 @@ jest-config@^25.3.0: pretty-format "^25.3.0" realpath-native "^2.0.0" -jest-diff@^25.3.0: +jest-diff@^25.2.1, jest-diff@^25.3.0: version "25.3.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.3.0.tgz#0d7d6f5d6171e5dacde9e05be47b3615e147c26f" integrity sha512-vyvs6RPoVdiwARwY4kqFWd4PirPLm2dmmkNzKqo38uZOzJvLee87yzDjIZLmY1SjM3XR5DwsUH+cdQ12vgqi1w== @@ -4496,6 +4565,13 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@2.x: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + json5@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" @@ -4656,6 +4732,11 @@ lodash.isequal@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4724,6 +4805,11 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" +make-error@1.x: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -4996,6 +5082,14 @@ metro@^0.56.0, metro@^0.56.4: xpipe "^1.0.5" yargs "^9.0.0" +micromatch@4.x, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -5015,14 +5109,6 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" @@ -5084,6 +5170,11 @@ minimist@^1.1.1, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -5092,6 +5183,11 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp@1.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -5747,7 +5843,7 @@ pretty-format@^25.1.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^25.3.0: +pretty-format@^25.2.1, pretty-format@^25.3.0: version "25.3.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.3.0.tgz#d0a4f988ff4a6cd350342fdabbb809aeb4d49ad5" integrity sha512-wToHwF8bkQknIcFkBqNfKu4+UZqnrLn/Vr+wwKQwwvPzkBfDDKp/qIabFqdgtoi5PEnM8LFByVsOrHoa3SpTVA== @@ -6188,7 +6284,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.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: +resolve@1.x, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -6366,7 +6462,7 @@ scheduler@^0.19.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: +semver@6.x, semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -7019,6 +7115,23 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +ts-jest@^25.3.1: + version "25.3.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.3.1.tgz#58e2ed3506e4e4487c0b9b532846a5cade9656ba" + integrity sha512-O53FtKguoMUByalAJW+NWEv7c4tus5ckmhfa7/V0jBb2z8v5rDSLFC1Ate7wLknYPC1euuhY6eJjQq4FtOZrkg== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + micromatch "4.x" + mkdirp "1.x" + resolve "1.x" + semver "6.x" + yargs-parser "18.x" + tslib@^1.8.1, tslib@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" @@ -7456,18 +7569,18 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== +yargs-parser@18.x, yargs-parser@^18.1.1: + version "18.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" + integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.1: - version "18.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" - integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0"