diff --git a/.eslintrc.js b/.eslintrc.js
index ade4266..994f3f3 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,9 +1,16 @@
module.exports = {
+ root: true,
env: {
es6: true,
node: true
},
- extends: "eslint:recommended",
+ extends: [
+ "eslint:recommended",
+ "plugin:@typescript-eslint/eslint-recommended",
+ "plugin:@typescript-eslint/recommended"
+ ],
+ parser: "@typescript-eslint/parser",
+ plugins: ["@typescript-eslint"],
globals: {
Atomics: "readonly",
SharedArrayBuffer: "readonly"
@@ -12,7 +19,10 @@ module.exports = {
ecmaVersion: 2018,
sourceType: "module"
},
- rules: {},
+ rules: {
+ "@typescript-eslint/explicit-function-return-type": [0],
+ "@typescript-eslint/no-explicit-any": [0]
+ },
overrides: [
{
files: ["**/__tests__/*.js"],
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..0314819
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "files.exclude": {
+ "compiler/**/*.js": true
+ }
+}
\ No newline at end of file
diff --git a/__tests__/integration.js b/__tests__/integration.js
index fcc883b..5d9c174 100644
--- a/__tests__/integration.js
+++ b/__tests__/integration.js
@@ -54,12 +54,12 @@ it("Works with plugin-transform-modules-commonjs", function () {
filename: __filename,
plugins: [
require.resolve("../babel-plugin"),
- "@babel/plugin-transform-modules-commonjs"
+ "@babel/plugin-transform-modules-commonjs",
],
babelrc: false
}).code;
code = babel.transform(code).code; // Reformat
- expect(code).toMatchInlineSnapshot("\n \"\\\"use strict\\\";\n\n var _react = _interopRequireDefault(require(\\\"react\\\"));\n\n var _useCustomProperties = _interopRequireDefault(require(\\\"cssta/runtime/useCustomProperties\\\"));\n\n var _useCustomPropertyStyles = _interopRequireDefault(require(\\\"cssta/runtime/useCustomPropertyStyles\\\"));\n\n var _VariablesContext = _interopRequireDefault(require(\\\"cssta/runtime/VariablesContext\\\"));\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n const exportedCustomProperties = {\n \\\"color\\\": \\\"red\\\"\n };\n const unresolvedStyleTuples0 = [[\\\"color\\\", \\\"var(--color)\\\"]];\n\n const Test1 = _react.default.forwardRef((props, ref) => {\n const customProperties = (0, _useCustomProperties.default)(exportedCustomProperties);\n const styles = (0, _useCustomPropertyStyles.default)(unresolvedStyleTuples0, customProperties);\n const style = props.style != null ? [styles, props.style] : styles;\n return _react.default.createElement(_VariablesContext.default.Provider, {\n value: customProperties\n }, _react.default.createElement(Button, { ...props,\n ref: ref,\n style: style\n }));\n });\n\n const styles0 = {\n color: \\\"red\\\"\n };\n\n const Test2 = _react.default.forwardRef((props, ref) => {\n const style = props.style != null ? [styles0, props.style] : styles0;\n return _react.default.createElement(Button, { ...props,\n ref: ref,\n style: style\n });\n });\"\n ");
+ expect(code).toMatchInlineSnapshot("\n \"\\\"use strict\\\";\n\n var _react = _interopRequireDefault(require(\\\"react\\\"));\n\n var _useCustomProperties = _interopRequireDefault(require(\\\"cssta/runtime/useCustomProperties\\\"));\n\n var _useCustomPropertyStyle = _interopRequireDefault(require(\\\"cssta/runtime/useCustomPropertyStyle\\\"));\n\n var _VariablesContext = _interopRequireDefault(require(\\\"cssta/runtime/VariablesContext\\\"));\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n const exportedCustomProperties = {\n \\\"color\\\": \\\"red\\\"\n };\n const unresolvedStyleTuples0 = [[\\\"color\\\", \\\"var(--color)\\\"]];\n\n const Test1 = _react.default.forwardRef((props, ref) => {\n const customProperties = (0, _useCustomProperties.default)(exportedCustomProperties);\n const styles = (0, _useCustomPropertyStyle.default)(unresolvedStyleTuples0, customProperties);\n const style = props.style != null ? [styles, props.style] : styles;\n return _react.default.createElement(_VariablesContext.default.Provider, {\n value: customProperties\n }, _react.default.createElement(Button, { ...props,\n ref: ref,\n style: style\n }));\n });\n\n const styles0 = {\n color: \\\"red\\\"\n };\n\n const Test2 = _react.default.forwardRef((props, ref) => {\n const style = props.style != null ? [styles0, props.style] : styles0;\n return _react.default.createElement(Button, { ...props,\n ref: ref,\n style: style\n });\n });\"\n ");
});
it("Works with options", function () {
var code = babel.transform("import styled from 'cssta/native';" +
@@ -68,7 +68,7 @@ it("Works with options", function () {
"`;", {
filename: __filename,
plugins: [
- [require.resolve("../babel-plugin"), { globals: { color: "red" } }]
+ [require.resolve("../babel-plugin"), { globals: { color: "red" } }],
],
babelrc: false
}).code;
diff --git a/__tests__/integration.ts b/__tests__/integration.ts
index 47dbb64..c0087cf 100644
--- a/__tests__/integration.ts
+++ b/__tests__/integration.ts
@@ -15,7 +15,7 @@ it("Works with babel-plugin-cssta", () => {
{
filename: __filename,
plugins: [require.resolve("../babel-plugin")],
- babelrc: false
+ babelrc: false,
}
);
expect(code).toMatchInlineSnapshot(`
@@ -66,7 +66,7 @@ it("Works with babel-plugin-macros", () => {
{
filename: __filename,
plugins: ["babel-plugin-macros"],
- babelrc: false
+ babelrc: false,
}
);
expect(code).toMatchInlineSnapshot(`
@@ -116,9 +116,9 @@ it("Works with plugin-transform-modules-commonjs", () => {
filename: __filename,
plugins: [
require.resolve("../babel-plugin"),
- "@babel/plugin-transform-modules-commonjs"
+ "@babel/plugin-transform-modules-commonjs",
],
- babelrc: false
+ babelrc: false,
}
);
code = babel.transform(code).code; // Reformat
@@ -129,7 +129,7 @@ it("Works with plugin-transform-modules-commonjs", () => {
var _useCustomProperties = _interopRequireDefault(require(\\"cssta/runtime/useCustomProperties\\"));
- var _useCustomPropertyStyles = _interopRequireDefault(require(\\"cssta/runtime/useCustomPropertyStyles\\"));
+ var _useCustomPropertyStyle = _interopRequireDefault(require(\\"cssta/runtime/useCustomPropertyStyle\\"));
var _VariablesContext = _interopRequireDefault(require(\\"cssta/runtime/VariablesContext\\"));
@@ -146,7 +146,7 @@ it("Works with plugin-transform-modules-commonjs", () => {
const Test1 = _react.default.forwardRef((props, ref) => {
const customProperties = (0, _useCustomProperties.default)(exportedCustomProperties);
- const styles = (0, _useCustomPropertyStyles.default)(unresolvedStyleTuples0, customProperties);
+ const styles = (0, _useCustomPropertyStyle.default)(unresolvedStyleTuples0, customProperties);
const style = props.style != null ? [styles, props.style] : styles;
return _react.default.createElement(_VariablesContext.default.Provider, {
value: customProperties
@@ -179,9 +179,9 @@ it("Works with options", () => {
{
filename: __filename,
plugins: [
- [require.resolve("../babel-plugin"), { globals: { color: "red" } }]
+ [require.resolve("../babel-plugin"), { globals: { color: "red" } }],
],
- babelrc: false
+ babelrc: false,
}
);
expect(code).toMatchInlineSnapshot(`
diff --git a/benchmark/mocks/react-native.js b/benchmark/mocks/react-native.js
index ce7362b..971f564 100644
--- a/benchmark/mocks/react-native.js
+++ b/benchmark/mocks/react-native.js
@@ -1,8 +1,7 @@
-// @flow
-import { createElement } from 'react';
+import { createElement } from "react";
export const StyleSheet = {
- create: () => ({}),
+ create: () => ({})
};
-export const View = props => createElement('view', props);
+export const View = props => createElement("view", props);
diff --git a/benchmark/yarn.lock b/benchmark/yarn.lock
index ba63217..8bc6b66 100644
--- a/benchmark/yarn.lock
+++ b/benchmark/yarn.lock
@@ -295,9 +295,9 @@ acorn-jsx@^5.0.2:
integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
acorn@^6.2.1:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
- integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
+ integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
acorn@^7.0.0:
version "7.0.0"
diff --git a/compiler/babel/__testUtil__/index.ts b/compiler/babel/__testUtil__/index.ts
index 4df1992..bd52e59 100644
--- a/compiler/babel/__testUtil__/index.ts
+++ b/compiler/babel/__testUtil__/index.ts
@@ -1,12 +1,12 @@
import * as babel from "@babel/core";
import generate from "@babel/generator";
import buildElement from "../buildElement";
-import { Options } from "../options";
+import { Options } from "../../options";
const { types: t } = babel;
export const styled: { test: (x: TemplateStringsArray) => string } = {
- test: String.raw
+ test: String.raw,
} as any;
export const build = (css: string, options: Options = {}) => {
@@ -22,7 +22,7 @@ export const build = (css: string, options: Options = {}) => {
{ jsx: true, ...options }
);
}
- }
+ },
});
const { code } = generate(ast);
return code.replace(/"/g, "'");
diff --git a/compiler/babel/__tests__/buildCondition.ts b/compiler/babel/__tests__/buildCondition.ts
index eeae5e3..b65498e 100644
--- a/compiler/babel/__tests__/buildCondition.ts
+++ b/compiler/babel/__tests__/buildCondition.ts
@@ -14,7 +14,7 @@ const run = (inputSelector: string, mediaQuery?: string | undefined) => {
const environment = createEnvironment(babel, body);
const node = buildCondition(babel, { selector, mediaQuery }, environment);
body.pushContainer("body", t.returnStatement(node));
- }
+ },
});
const { code } = generate(ast);
return code.replace(/"/g, "'");
diff --git a/compiler/babel/__tests__/interpolation.ts b/compiler/babel/__tests__/interpolation.ts
index 3608443..19bb81a 100644
--- a/compiler/babel/__tests__/interpolation.ts
+++ b/compiler/babel/__tests__/interpolation.ts
@@ -16,7 +16,7 @@ it("Works with substititions", () => {
const { tag, quasi: body } = path.node;
const element = tag.arguments[0];
buildElement(babel, path, element, body, { jsx: true });
- }
+ },
});
const { code } = generate(ast);
expect(code).toMatchInlineSnapshot(`
@@ -49,7 +49,7 @@ it("Works with substititions and simple viewport units", () => {
const { tag, quasi: body } = path.node;
const element = tag.arguments[0];
buildElement(babel, path, element, body, { jsx: true });
- }
+ },
});
const { code } = generate(ast);
expect(code).toMatchInlineSnapshot(`
diff --git a/compiler/babel/__tests__/mixed.ts b/compiler/babel/__tests__/mixed.ts
index 65df3cf..855093d 100644
--- a/compiler/babel/__tests__/mixed.ts
+++ b/compiler/babel/__tests__/mixed.ts
@@ -304,12 +304,12 @@ it("Supports viewport units in shorthands with custom properties", () => {
"import React from 'react';
import useCustomProperties from 'cssta/runtime/useCustomProperties';
import useViewportStyleTuples from 'cssta/runtime/useViewportStyleTuples';
- import useCustomPropertyStyles from 'cssta/runtime/useCustomPropertyStyles';
+ import useCustomPropertyStyle from 'cssta/runtime/useCustomPropertyStyle';
const unresolvedStyleTuples0 = [['margin', '10vw var(--whyDoIDoThisToMyself)']];
const Example = React.forwardRef((props, ref) => {
const customProperties = useCustomProperties(null);
const unresolvedStyleTuples1 = useViewportStyleTuples(unresolvedStyleTuples0);
- const styles = useCustomPropertyStyles(unresolvedStyleTuples1, customProperties);
+ const styles = useCustomPropertyStyle(unresolvedStyleTuples1, customProperties);
const style = props.style != null ? [styles, props.style] : styles;
return ;
});"
diff --git a/compiler/babel/__tests__/mixin-include.ts b/compiler/babel/__tests__/mixin-include.ts
index b5462bc..dffb045 100644
--- a/compiler/babel/__tests__/mixin-include.ts
+++ b/compiler/babel/__tests__/mixin-include.ts
@@ -13,7 +13,7 @@ it("Works with mixins", () => {
const { tag, quasi: body } = path.node;
const element = tag.arguments[0];
buildElement(babel, path, element, body, { jsx: true });
- }
+ },
});
const { code } = generate(ast);
expect(code).toMatchInlineSnapshot(`
@@ -39,7 +39,7 @@ it("Works with conditional mixins", () => {
const { tag, quasi: body } = path.node;
const element = tag.arguments[0];
buildElement(babel, path, element, body, { jsx: true });
- }
+ },
});
const { code } = generate(ast);
expect(code).toMatchInlineSnapshot(`
@@ -71,7 +71,7 @@ it("Works with multiple mixins", () => {
const { tag, quasi: body } = path.node;
const element = tag.arguments[0];
buildElement(babel, path, element, body, { jsx: true });
- }
+ },
});
const { code } = generate(ast);
expect(code).toMatchInlineSnapshot(`
@@ -100,7 +100,7 @@ it("Gives sensible error message when using mixins incorrectly", () => {
const { tag, quasi: body } = path.node;
const element = tag.arguments[0];
buildElement(babel, path, element, body, { jsx: true });
- }
+ },
});
}).toThrow("Mixins should use interpolation (e.g. @include ${useStyles})");
});
diff --git a/compiler/babel/__tests__/mixin.ts b/compiler/babel/__tests__/mixin.ts
index 5e4bc05..c360be7 100644
--- a/compiler/babel/__tests__/mixin.ts
+++ b/compiler/babel/__tests__/mixin.ts
@@ -17,7 +17,7 @@ const build = (css: string, options = {}) => {
options
);
}
- }
+ },
});
const { code } = generate(ast);
return code.replace(/"/g, "'");
@@ -49,12 +49,12 @@ it("Supports mixins with custom properties", () => {
const code = build(css);
expect(code).toMatchInlineSnapshot(`
"import useCustomProperties from 'cssta/runtime/useCustomProperties';
- import useCustomPropertyStyles from 'cssta/runtime/useCustomPropertyStyles';
+ import useCustomPropertyStyle from 'cssta/runtime/useCustomPropertyStyle';
const unresolvedStyleTuples0 = [['color', 'var(--red)']];
const Example = () => {
const customProperties = useCustomProperties(null);
- const styles = useCustomPropertyStyles(unresolvedStyleTuples0, customProperties);
+ const styles = useCustomPropertyStyle(unresolvedStyleTuples0, customProperties);
const style = styles;
return style;
};"
diff --git a/compiler/babel/__tests__/transform.ts b/compiler/babel/__tests__/transform.ts
index db314b6..45e457a 100644
--- a/compiler/babel/__tests__/transform.ts
+++ b/compiler/babel/__tests__/transform.ts
@@ -14,7 +14,7 @@ it("Works with existing React", () => {
const { tag, quasi: body } = path.node;
const element = tag.arguments[0];
buildElement(babel, path, element, body, { jsx: true });
- }
+ },
});
const { code } = generate(ast);
expect(code).toMatchInlineSnapshot(`
@@ -52,7 +52,7 @@ it("Works with multiple component definitions", () => {
const { tag, quasi: body } = path.node;
const element = tag.arguments[0];
buildElement(babel, path, element, body, { jsx: true });
- }
+ },
});
const { code } = generate(ast);
expect(code).toMatchInlineSnapshot(`
diff --git a/compiler/babel/__tests__/variables.ts b/compiler/babel/__tests__/variables.ts
index 55b03c6..6b76b31 100644
--- a/compiler/babel/__tests__/variables.ts
+++ b/compiler/babel/__tests__/variables.ts
@@ -9,11 +9,11 @@ it("Supports imported variables", () => {
expect(code).toMatchInlineSnapshot(`
"import React from 'react';
import useCustomProperties from 'cssta/runtime/useCustomProperties';
- import useCustomPropertyStyles from 'cssta/runtime/useCustomPropertyStyles';
+ import useCustomPropertyStyle from 'cssta/runtime/useCustomPropertyStyle';
const unresolvedStyleTuples0 = [['width', 'var(--width)']];
const Example = React.forwardRef((props, ref) => {
const customProperties = useCustomProperties(null);
- const styles = useCustomPropertyStyles(unresolvedStyleTuples0, customProperties);
+ const styles = useCustomPropertyStyle(unresolvedStyleTuples0, customProperties);
const style = props.style != null ? [styles, props.style] : styles;
return ;
});"
@@ -147,7 +147,7 @@ it("Supports rules where only some import variables", () => {
expect(code).toMatchInlineSnapshot(`
"import React from 'react';
import useCustomProperties from 'cssta/runtime/useCustomProperties';
- import useCustomPropertyStyles from 'cssta/runtime/useCustomPropertyStyles';
+ import useCustomPropertyStyle from 'cssta/runtime/useCustomPropertyStyle';
const styles0 = {
width: 100
};
@@ -162,8 +162,8 @@ it("Supports rules where only some import variables", () => {
...props
}, ref) => {
const customProperties = useCustomProperties(null);
- const styles = useCustomPropertyStyles(unresolvedStyleTuples0, customProperties);
- const styles2 = useCustomPropertyStyles(unresolvedStyleTuples1, customProperties);
+ const styles = useCustomPropertyStyle(unresolvedStyleTuples0, customProperties);
+ const styles2 = useCustomPropertyStyle(unresolvedStyleTuples1, customProperties);
const baseStyle = cond1 === true ? styles2 : cond2 === true ? styles1 : cond1 === true ? styles : styles0;
const style = props.style != null ? [baseStyle, props.style] : baseStyle;
return ;
@@ -178,8 +178,8 @@ it("Supports global variables in config", () => {
const code = build(css, {
globals: {
- primary: "red"
- }
+ primary: "red",
+ },
});
expect(code).toMatchInlineSnapshot(`
"import React from 'react';
@@ -201,17 +201,17 @@ it("Omits missing globals", () => {
const code = build(css, {
globals: {
- primary: "red"
- }
+ primary: "red",
+ },
});
expect(code).toMatchInlineSnapshot(`
"import React from 'react';
import useCustomProperties from 'cssta/runtime/useCustomProperties';
- import useCustomPropertyStyles from 'cssta/runtime/useCustomPropertyStyles';
+ import useCustomPropertyStyle from 'cssta/runtime/useCustomPropertyStyle';
const unresolvedStyleTuples0 = [['color', 'red'], ['background', 'var(--secondary)']];
const Example = React.forwardRef((props, ref) => {
const customProperties = useCustomProperties(null);
- const styles = useCustomPropertyStyles(unresolvedStyleTuples0, customProperties);
+ const styles = useCustomPropertyStyle(unresolvedStyleTuples0, customProperties);
const style = props.style != null ? [styles, props.style] : styles;
return ;
});"
@@ -226,8 +226,8 @@ it("Does not allow overwriting global variables", () => {
expect(() => {
build(css, {
globals: {
- primary: "red"
- }
+ primary: "red",
+ },
});
}).toThrow(
'Attempted to overwrite global variable "primary". Either change this variable, or remove it from the globals. See line `--primary: blue`'
@@ -243,9 +243,9 @@ it("Supports failing build on missing global", () => {
expect(() => {
build(css, {
globals: {
- primary: "red"
+ primary: "red",
},
- globalVarsOnly: true
+ globalVarsOnly: true,
});
}).toThrow(
'Found variable "secondary". This was not defined in the globals, and `globalVarsOnly` is enabled. See line with `var(--secondary)`'
@@ -260,9 +260,9 @@ it("Does not fail failing build on missing global with globalVarsOnly if there i
const code = build(css, {
globals: {
- primary: "red"
+ primary: "red",
},
- globalVarsOnly: true
+ globalVarsOnly: true,
});
expect(code).toMatchInlineSnapshot(`
"import React from 'react';
@@ -276,3 +276,35 @@ it("Does not fail failing build on missing global with globalVarsOnly if there i
});"
`);
});
+
+it("Supports global variables with media queries", () => {
+ const css = styled.test`
+ color: var(--primary);
+ `;
+
+ const code = build(css, {
+ globals: `
+ --primary: red;
+
+ @media (prefers-color-scheme: dark) {
+ --primary: pink;
+ }
+ `,
+ });
+ expect(code).toMatchInlineSnapshot(`
+ "import React from 'react';
+ import { useColorScheme } from 'react-native';
+ const styles0 = {
+ color: 'red'
+ };
+ const styles1 = {
+ color: 'pink'
+ };
+ const Example = React.forwardRef((props, ref) => {
+ const colorScheme = useColorScheme();
+ const baseStyle = colorScheme === 'dark' ? styles1 : styles0;
+ const style = props.style != null ? [baseStyle, props.style] : baseStyle;
+ return ;
+ });"
+ `);
+});
diff --git a/compiler/babel/__tests__/viewport.ts b/compiler/babel/__tests__/viewport.ts
index c4c746b..4cb43b4 100644
--- a/compiler/babel/__tests__/viewport.ts
+++ b/compiler/babel/__tests__/viewport.ts
@@ -144,3 +144,21 @@ it("Supports viewport units in shorthands", () => {
});"
`);
});
+
+it("Supports simple viewport units with calc", () => {
+ const css = styled.test`
+ width: calc(10vw - 100px);
+ `;
+
+ const code = build(css);
+ expect(code).toMatchInlineSnapshot(`
+ "import React from 'react';
+ import useViewportStyle from 'cssta/runtime/useViewportStyle';
+ const unresolvedStyleTuples0 = [['width', 'calc(10vw - 100px)']];
+ const Example = React.forwardRef((props, ref) => {
+ const styles0 = useViewportStyle(unresolvedStyleTuples0);
+ const style = props.style != null ? [styles0, props.style] : styles0;
+ return ;
+ });"
+ `);
+});
diff --git a/compiler/babel/buildCondition.ts b/compiler/babel/buildCondition.ts
index 57afe3d..c539670 100644
--- a/compiler/babel/buildCondition.ts
+++ b/compiler/babel/buildCondition.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-use-before-define */
import selectorParser, { Node } from "postcss-selector-parser";
import { Condition } from "../css/types";
import { Environment } from "./environment";
@@ -13,7 +14,7 @@ const combineLogicalValidators = (
if (validators.length === 0) {
throw new Error("Cannot construct logical validaton");
}
- const nodeValidators: string[] = validators.filter(v => v != null);
+ const nodeValidators: string[] = validators.filter((v) => v != null);
if (nodeValidators.length === 0) return null;
return nodeValidators
.slice(1)
@@ -27,7 +28,7 @@ const createLogicalValidator = (babel: any, operator: string, nodes: Node[]) =>
combineLogicalValidators(
babel,
operator,
- nodes.map(node => createValidator(babel, node))
+ nodes.map((node) => createValidator(babel, node))
); // eslint-disable-line
const createValidator = (babel: any, node: Node): Validator => {
@@ -77,7 +78,7 @@ const createValidator = (babel: any, node: Node): Validator => {
const aspectRatioWH = ({ types: t }, str: string) => {
const [w, h] = str
.split("/")
- .map(x => x.trim())
+ .map((x) => x.trim())
.map(Number);
return t.binaryExpression("/", t.numericLiteral(w), t.numericLiteral(h));
};
@@ -194,7 +195,7 @@ const createMediaQueryValidator = (
combineLogicalValidators(
babel,
"&&",
- (queryPart.match(/\([^()]+\)/g) || []).map(query =>
+ (queryPart.match(/\([^()]+\)/g) || []).map((query) =>
createMediaFeatureValidator(babel, query, environment)
)
);
@@ -216,14 +217,14 @@ export default (
environment: Environment
) => {
let selectorNode: Node;
- selectorParser(node => {
+ selectorParser((node) => {
selectorNode = node;
}).processSync(selector);
if (!selectorNode) throw new Error("Expected to parse selector");
const validatorNode = combineLogicalValidators(babel, "&&", [
createValidator(babel, selectorNode),
- createMediaQueryValidator(babel, mediaQuery, environment)
+ createMediaQueryValidator(babel, mediaQuery, environment),
]);
return validatorNode;
diff --git a/compiler/babel/buildElement.ts b/compiler/babel/buildElement.ts
index 40a4bac..ad816f1 100644
--- a/compiler/babel/buildElement.ts
+++ b/compiler/babel/buildElement.ts
@@ -1,6 +1,6 @@
import extractRules from "../css/extractRules";
import { StyleType } from "../css/types";
-import extractCss from "./extractCss";
+import extractSubstitutionMap from "./extractSubstitutionMap";
import createEnvironment from "./environment";
import styleSheet from "./styleSheet";
import style from "./style";
@@ -10,7 +10,7 @@ import useKeyframes from "./useKeyframes";
import useAnimation from "./useAnimation";
import returnElement from "./returnElement";
import forwardRefComponent from "./forwardRefComponent";
-import { Options } from "./options";
+import { Options } from "../options";
export default (
babel: any,
@@ -19,15 +19,15 @@ export default (
cssNode: any,
options?: Options
) => {
- const { cssText, substitutionMap } = extractCss(cssNode, options);
- const cssOutput = extractRules(cssText);
+ const { cssText, substitutionMap } = extractSubstitutionMap(cssNode);
+ const cssOutput = extractRules(cssText, options);
const {
propTypes,
styles,
transitions,
animations,
keyframes,
- exportedVariables
+ exportedVariables,
} = cssOutput;
const { path, propsVariable, refVariable } = forwardRefComponent(
@@ -40,12 +40,12 @@ export default (
const hasImportedVariables =
styles.some(
- x => x.type === StyleType.Tuples && x.importedVariables.length !== 0
+ (x) => x.type === StyleType.Tuples && x.importedVariables.length !== 0
) ||
- transitions.some(x => x.importedVariables.length !== 0) ||
- animations.some(x => x.importedVariables.length !== 0) ||
- keyframes.some(x => x.importedVariables.length !== 0) ||
- exportedVariables.some(x => x.importedVariables.length !== 0);
+ transitions.some((x) => x.importedVariables.length !== 0) ||
+ animations.some((x) => x.importedVariables.length !== 0) ||
+ keyframes.some((x) => x.importedVariables.length !== 0) ||
+ exportedVariables.some((x) => x.importedVariables.length !== 0);
const hasExportedVariables = exportedVariables.length !== 0;
if (hasExportedVariables && options != null && options.globals != null) {
@@ -81,13 +81,13 @@ export default (
const styleVariable = style(babel, path, environment, {
propsVariable,
styleSheetRuleExpressions,
- willModifyStyle
+ willModifyStyle,
});
if (transitions.length !== 0) {
useTransition(babel, path, cssOutput, environment, {
styleVariable,
- customPropertiesVariable
+ customPropertiesVariable,
});
}
@@ -100,7 +100,7 @@ export default (
useAnimation(babel, path, cssOutput, environment, {
styleVariable,
keyframesVariable,
- customPropertiesVariable
+ customPropertiesVariable,
});
}
@@ -109,7 +109,7 @@ export default (
refVariable,
styleVariable,
hasExportedVariables,
- customPropertiesVariable
+ customPropertiesVariable,
});
path.scope.crawl();
diff --git a/compiler/babel/buildMixin.ts b/compiler/babel/buildMixin.ts
index d85c18d..971a102 100644
--- a/compiler/babel/buildMixin.ts
+++ b/compiler/babel/buildMixin.ts
@@ -1,21 +1,21 @@
import extractRules from "../css/extractRules";
import { StyleType } from "../css/types";
-import extractCss from "./extractCss";
+import extractSubstitutionMap from "./extractSubstitutionMap";
import createEnvironment from "./environment";
import styleSheet from "./styleSheet";
import style from "./style";
import useCustomProperties from "./useCustomProperties";
-import { Options } from "./options";
+import { Options } from "../options";
export default (babel: any, nodePath: any, cssNode: any, options?: Options) => {
- const { cssText, substitutionMap } = extractCss(cssNode, options);
- const cssOutput = extractRules(cssText);
+ const { cssText, substitutionMap } = extractSubstitutionMap(cssNode);
+ const cssOutput = extractRules(cssText, options);
const {
styles,
transitions,
animations,
keyframes,
- exportedVariables
+ exportedVariables,
} = cssOutput;
if (transitions.length !== 0) {
@@ -35,7 +35,7 @@ export default (babel: any, nodePath: any, cssNode: any, options?: Options) => {
const environment = createEnvironment(babel, path);
const hasImportedVariables = styles.some(
- rule =>
+ (rule) =>
rule.type === StyleType.Tuples && rule.importedVariables.length !== 0
);
@@ -59,7 +59,7 @@ export default (babel: any, nodePath: any, cssNode: any, options?: Options) => {
);
const styleVariable = style(babel, path, environment, {
- styleSheetRuleExpressions
+ styleSheetRuleExpressions,
});
path.pushContainer("body", t.returnStatement(styleVariable));
diff --git a/compiler/babel/environment/index.ts b/compiler/babel/environment/index.ts
index ba11ff8..8961157 100644
--- a/compiler/babel/environment/index.ts
+++ b/compiler/babel/environment/index.ts
@@ -46,6 +46,6 @@ export default (babel: any, path: any) => {
}
return t.cloneDeep(windowVariables.height);
- }
+ },
};
};
diff --git a/compiler/babel/environment/useMediaQuery.ts b/compiler/babel/environment/useMediaQuery.ts
index 4334252..858ed5e 100644
--- a/compiler/babel/environment/useMediaQuery.ts
+++ b/compiler/babel/environment/useMediaQuery.ts
@@ -5,7 +5,7 @@ export default (babel: any, path: any) => {
const windowVariables = {
width: generateNiceId(babel, path, "windowWidth"),
- height: generateNiceId(babel, path, "windowHeight")
+ height: generateNiceId(babel, path, "windowHeight"),
};
const useWindowDimensionsImport = getOrCreateImport(
@@ -17,10 +17,10 @@ export default (babel: any, path: any) => {
t.variableDeclarator(
t.objectPattern([
t.objectProperty(t.identifier("width"), windowVariables.width),
- t.objectProperty(t.identifier("height"), windowVariables.height)
+ t.objectProperty(t.identifier("height"), windowVariables.height),
]),
t.callExpression(useWindowDimensionsImport, [])
- )
+ ),
]);
path.pushContainer("body", windowDeclarator);
diff --git a/compiler/babel/extractCss.ts b/compiler/babel/extractCss.ts
deleted file mode 100644
index 01a3de6..0000000
--- a/compiler/babel/extractCss.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { varRegExp } from "../../runtime/cssRegExp";
-import { Options } from "./options";
-
-export type SubstitutionMap = Record;
-
-export default (
- { quasis, expressions }: { quasis: any[]; expressions: any[] },
- options?: Options
-) => {
- const substitutionNames = expressions.map(
- (_, index) => `__substitution-${index}__`
- );
-
- const quasiValue = (quasi: any) => {
- let value = quasi.value.cooked as string;
-
- if (options != null && options.globals != null) {
- value = value.replace(varRegExp, (fullMatch, variable, fallback) => {
- if (options.globals[variable] != null) {
- return options.globals[variable];
- } else if (fallback) {
- return fallback;
- } else if (!options.globalVarsOnly) {
- return fullMatch;
- } else {
- throw new Error(
- `Found variable "${variable}". This was not defined in the globals, and \`globalVarsOnly\` is enabled. See line with \`var(--${variable})\``
- );
- }
- });
- }
-
- return value;
- };
-
- const cssText =
- quasiValue(quasis[0]) +
- substitutionNames
- .map((name, index) => name + quasiValue(quasis[index + 1]))
- .join("");
-
- const substitutionMap = {} as SubstitutionMap;
- substitutionNames.forEach((substitution, index) => {
- substitutionMap[substitution] = expressions[index];
- });
-
- return { cssText, substitutionMap };
-};
diff --git a/compiler/babel/extractSubstitutionMap.ts b/compiler/babel/extractSubstitutionMap.ts
new file mode 100644
index 0000000..5467b0e
--- /dev/null
+++ b/compiler/babel/extractSubstitutionMap.ts
@@ -0,0 +1,28 @@
+export type SubstitutionMap = Record;
+
+const quasiValue = (quasi: any) => quasi.value.cooked as string;
+
+export default ({
+ quasis,
+ expressions,
+}: {
+ quasis: any[];
+ expressions: any[];
+}) => {
+ const substitutionNames = expressions.map(
+ (_, index) => `__substitution-${index}__`
+ );
+
+ const cssText =
+ quasiValue(quasis[0]) +
+ substitutionNames
+ .map((name, index) => name + quasiValue(quasis[index + 1]))
+ .join("");
+
+ const substitutionMap = {} as SubstitutionMap;
+ substitutionNames.forEach((substitution, index) => {
+ substitutionMap[substitution] = expressions[index];
+ });
+
+ return { cssText, substitutionMap };
+};
diff --git a/compiler/babel/forwardRefComponent.ts b/compiler/babel/forwardRefComponent.ts
index a59cbd6..0ed2f45 100644
--- a/compiler/babel/forwardRefComponent.ts
+++ b/compiler/babel/forwardRefComponent.ts
@@ -17,7 +17,7 @@ export default (babel: any, nodePath: any, { propTypes }) => {
const { types: t } = babel;
const propKeys = Object.keys(propTypes);
- const propsSpread = propKeys.map(key =>
+ const propsSpread = propKeys.map((key) =>
t.objectProperty(
t.identifier(key),
t.identifier(key),
@@ -35,7 +35,7 @@ export default (babel: any, nodePath: any, { propTypes }) => {
: t.objectPattern([...propsSpread, t.restElement(propsVariable)]);
const reactImport = getOrCreateImport(babel, nodePath, "react", undefined, {
- preferredName: "React"
+ preferredName: "React",
});
const componentDefinition = t.callExpression(
t.memberExpression(reactImport, t.identifier("forwardRef")),
@@ -43,7 +43,7 @@ export default (babel: any, nodePath: any, { propTypes }) => {
t.arrowFunctionExpression(
[propsObject, refVariable],
t.blockStatement([])
- )
+ ),
]
);
diff --git a/compiler/babel/returnElement.ts b/compiler/babel/returnElement.ts
index 9a6c347..aa32a3f 100644
--- a/compiler/babel/returnElement.ts
+++ b/compiler/babel/returnElement.ts
@@ -1,5 +1,5 @@
import { getOrCreateImport } from "./util";
-import { Options } from "./options";
+import { Options } from "../options";
const createBaseElement = (
babel: any,
@@ -20,9 +20,9 @@ const createBaseElement = (
t.objectProperty(t.identifier("ref"), refVariable),
styleVariable != null
? t.objectProperty(t.identifier("style"), styleVariable)
- : null
+ : null,
].filter(Boolean)
- )
+ ),
]
);
} else {
@@ -40,7 +40,7 @@ const createBaseElement = (
t.jsxIdentifier("style"),
t.jsxExpressionContainer(styleVariable)
)
- : null
+ : null,
].filter(Boolean),
true
),
@@ -70,9 +70,9 @@ const createVariablesExporter = (
[
t.memberExpression(variablesContextImport, t.identifier("Provider")),
t.objectExpression([
- t.objectProperty(t.identifier("value"), customPropertiesVariable)
+ t.objectProperty(t.identifier("value"), customPropertiesVariable),
]),
- baseElement
+ baseElement,
]
);
} else {
@@ -86,7 +86,7 @@ const createVariablesExporter = (
t.jsxAttribute(
t.jsxIdentifier("value"),
t.jsxExpressionContainer(customPropertiesVariable)
- )
+ ),
],
false
),
@@ -106,7 +106,7 @@ export default (
refVariable,
styleVariable,
hasExportedVariables,
- customPropertiesVariable
+ customPropertiesVariable,
}
) => {
const { types: t } = babel;
@@ -115,12 +115,12 @@ export default (
jsx,
propsVariable,
refVariable,
- styleVariable
+ styleVariable,
});
const returned = hasExportedVariables
? createVariablesExporter(babel, path, baseElement, {
jsx,
- customPropertiesVariable
+ customPropertiesVariable,
})
: baseElement;
diff --git a/compiler/babel/style.ts b/compiler/babel/style.ts
index 0b26da4..be9b074 100644
--- a/compiler/babel/style.ts
+++ b/compiler/babel/style.ts
@@ -10,7 +10,7 @@ export default (
{
propsVariable,
styleSheetRuleExpressions,
- willModifyStyle = false
+ willModifyStyle = false,
}: {
propsVariable?: any;
styleSheetRuleExpressions: StyleSheetExpression[];
@@ -37,7 +37,7 @@ export default (
styleGroup.push(expression);
return accum;
}, [])
- .map(expressionGroup => {
+ .map((expressionGroup) => {
const ruleExpression = expressionGroup.reduce(
(accum, { condition, expression }) => {
if (condition == null) return expression;
@@ -84,7 +84,7 @@ export default (
let styleVariable: any;
if (styleExpression != null) {
styleVariable = createVariable(babel, path, "style", styleExpression, {
- kind: willModifyStyle ? "let" : "const"
+ kind: willModifyStyle ? "let" : "const",
});
}
diff --git a/compiler/babel/styleSheet/__tests__/styleBody.ts b/compiler/babel/styleSheet/__tests__/styleBody.ts
index ae2c65f..7ef7242 100644
--- a/compiler/babel/styleSheet/__tests__/styleBody.ts
+++ b/compiler/babel/styleSheet/__tests__/styleBody.ts
@@ -2,7 +2,7 @@ import * as babel from "@babel/core";
import generate from "@babel/generator";
import styleBody from "../styleBody";
import { StyleTuple } from "../../../../runtime/cssUtil";
-import { SubstitutionMap } from "../../extractCss";
+import { SubstitutionMap } from "../../extractSubstitutionMap";
const { types: t } = babel;
@@ -17,7 +17,7 @@ const run = (substitutionMap: SubstitutionMap, styleTuples: StyleTuple[]) => {
styleTuples
);
path.get("body").pushContainer("body", t.returnStatement(node));
- }
+ },
});
const { code } = generate(ast);
return code.replace(/"/g, "'");
@@ -83,7 +83,10 @@ it("Transforms shorthand values", () => {
it("Combines a simple value before a shorthand value", () => {
const code = run(
{ int1: t.identifier("opacity"), int2: t.identifier("margin") },
- [["opacity", "int1"], ["margin", "int2"]]
+ [
+ ["opacity", "int1"],
+ ["margin", "int2"],
+ ]
);
expect(code).toMatchInlineSnapshot(`
"import { transformStyleTuples } from 'cssta/runtime/cssUtil';
@@ -99,7 +102,10 @@ it("Combines a simple value before a shorthand value", () => {
it("Combines a simple value after a shorthand value", () => {
const code = run(
{ int1: t.identifier("margin"), int2: t.identifier("opacity") },
- [["margin", "int2"], ["opacity", "int1"]]
+ [
+ ["margin", "int2"],
+ ["opacity", "int1"],
+ ]
);
expect(code).toMatchInlineSnapshot(`
"import { transformStyleTuples } from 'cssta/runtime/cssUtil';
@@ -121,7 +127,7 @@ it("Combines multiple simple values with a shorthand value", () => {
int4: t.identifier("color"),
int5: t.identifier("left"),
int6: t.identifier("border"),
- int7: t.identifier("opacity")
+ int7: t.identifier("opacity"),
},
[
["top", "int1"],
@@ -130,7 +136,7 @@ it("Combines multiple simple values with a shorthand value", () => {
["color", "int4"],
["left", "int5"],
["border", "int6"],
- ["opacity", "int7"]
+ ["opacity", "int7"],
]
);
expect(code).toMatchInlineSnapshot(`
@@ -156,7 +162,7 @@ it("Does not allow multiple values for simple properties", () => {
run(
{
int1: t.identifier("color1"),
- int2: t.identifier("color2")
+ int2: t.identifier("color2"),
},
[["color", "int1 int2"]]
);
@@ -167,7 +173,7 @@ it("Allows multiple values for shorthand properties", () => {
const code = run(
{
int1: t.identifier("margin1"),
- int2: t.identifier("margin2")
+ int2: t.identifier("margin2"),
},
[["margin", "int1 int2"]]
);
diff --git a/compiler/babel/styleSheet/index.ts b/compiler/babel/styleSheet/index.ts
index a6b485d..267260d 100644
--- a/compiler/babel/styleSheet/index.ts
+++ b/compiler/babel/styleSheet/index.ts
@@ -5,26 +5,26 @@ import {
Condition,
StyleType,
StyleTuplesDeclaration,
- StyleMixinDeclaration
+ StyleMixinDeclaration,
} from "../../css/types";
import { Environment } from "../environment";
-import { SubstitutionMap } from "../extractCss";
+import { SubstitutionMap } from "../extractSubstitutionMap";
import {
createTopLevelVariable,
createVariable,
- getOrCreateImport
+ getOrCreateImport,
} from "../util";
import styleBody from "./styleBody";
import { createTopLevelStyleTuplesVariable } from "./styleTuples";
import {
ViewportMode,
getViewportMode,
- interpolateViewportUnits
+ interpolateViewportUnits,
} from "./viewport";
export enum OptimizationFlag {
None,
- SupersetsPrevious
+ SupersetsPrevious,
}
const createVariablesStyleExpression = (
@@ -38,6 +38,7 @@ const createVariablesStyleExpression = (
const baseUnresolvedStyleTuplesVariable = createTopLevelStyleTuplesVariable(
babel,
path,
+ substitutionMap,
styleTuples
);
@@ -61,7 +62,7 @@ const createVariablesStyleExpression = (
path,
"unresolvedStyleTuples",
t.callExpression(useViewportStyleTuplesImport, [
- baseUnresolvedStyleTuplesVariable
+ baseUnresolvedStyleTuplesVariable,
]),
{ prefix0: true }
);
@@ -70,7 +71,7 @@ const createVariablesStyleExpression = (
const useCustomPropertyStylesImport = getOrCreateImport(
babel,
path,
- "cssta/runtime/useCustomPropertyStyles"
+ "cssta/runtime/useCustomPropertyStyle"
);
const styleExpression = createVariable(
babel,
@@ -78,7 +79,7 @@ const createVariablesStyleExpression = (
"styles",
t.callExpression(useCustomPropertyStylesImport, [
unresolvedStyleTuplesVariable,
- customPropertiesVariable
+ customPropertiesVariable,
])
);
return styleExpression;
@@ -111,6 +112,7 @@ const createStyleExpression = (
const unresolvedStyleTuplesVariable = createTopLevelStyleTuplesVariable(
babel,
path,
+ substitutionMap,
styleTuples
);
const cssToReactNativeImport = getOrCreateImport(
@@ -128,7 +130,7 @@ const createStyleExpression = (
} else if (viewportMode === ViewportMode.SimpleLengthUnits) {
const [
nextSubstitutionMap,
- styleTuplesWithViewportSubstitutions
+ styleTuplesWithViewportSubstitutions,
] = interpolateViewportUnits(
babel,
substitutionMap,
@@ -149,7 +151,7 @@ const createStyleExpression = (
}
styleExpression = createTopLevelVariable(babel, path, "styles", style, {
- prefix0: true
+ prefix0: true,
});
}
@@ -175,21 +177,21 @@ const createMixinExpression = (
babel,
path,
"mixinInclude",
- t.callExpression(substitution, []),
+ t.callExpression(t.cloneDeep(substitution), []),
{ prefix0: true }
);
};
const mergeFirstStyleIntoAllRules = (styles: StyleTuplesDeclaration[]) => {
const mergeeRule = styles[0];
- const stylesMerged = styles.map(rule => {
+ const stylesMerged = styles.map((rule) => {
if (rule === mergeeRule) return rule;
const ownStyleKeys = new Set(
- rule.styleTuples.map(styleTuple => styleTuple[0])
+ rule.styleTuples.map((styleTuple) => styleTuple[0])
);
const stylesToMerge = mergeeRule.styleTuples.filter(
- styleTuple => !ownStyleKeys.has(styleTuple[0])
+ (styleTuple) => !ownStyleKeys.has(styleTuple[0])
);
if (stylesToMerge.length === 0) return rule;
@@ -202,17 +204,17 @@ const mergeFirstStyleIntoAllRules = (styles: StyleTuplesDeclaration[]) => {
const getOptimizationFlag = (styles: StyleDeclaration[]) => {
let lastStyleKeys: string[] | null = null;
- return styles.map(rule => {
+ return styles.map((rule) => {
if (rule.type === StyleType.Mixin) {
lastStyleKeys = null;
return OptimizationFlag.None;
}
- const ownStyleKeys = rule.styleTuples.map(styleTuple => styleTuple[0]);
+ const ownStyleKeys = rule.styleTuples.map((styleTuple) => styleTuple[0]);
const supersets =
lastStyleKeys != null &&
- lastStyleKeys.every(key => ownStyleKeys.includes(key));
+ lastStyleKeys.every((key) => ownStyleKeys.includes(key));
lastStyleKeys = ownStyleKeys;
@@ -240,7 +242,7 @@ export default (
if (
styles.length === 2 &&
styles[0].condition == null &&
- styles.every(style => style.type === StyleType.Tuples)
+ styles.every((style) => style.type === StyleType.Tuples)
) {
const mergedStyleTuples = mergeFirstStyleIntoAllRules(
styles as StyleTuplesDeclaration[]
@@ -266,7 +268,7 @@ export default (
});
} else {
const stylesheetOptimizationFlags = getOptimizationFlag(styles);
- const styleSheetExpressions = styles.map(rule =>
+ const styleSheetExpressions = styles.map((rule) =>
rule.type === StyleType.Tuples
? createStyleExpression(
babel,
@@ -281,7 +283,7 @@ export default (
styleSheetRuleExpressions = styles.map((style, i) => ({
condition: style.condition,
expression: styleSheetExpressions[i],
- optimizationFlag: stylesheetOptimizationFlags[i]
+ optimizationFlag: stylesheetOptimizationFlags[i],
}));
}
diff --git a/compiler/babel/styleSheet/simpleUnitTypes.ts b/compiler/babel/styleSheet/simpleUnitTypes.ts
index f4503b8..e144d1f 100644
--- a/compiler/babel/styleSheet/simpleUnitTypes.ts
+++ b/compiler/babel/styleSheet/simpleUnitTypes.ts
@@ -1,7 +1,7 @@
export enum UnitType {
Length,
Number,
- String
+ String,
}
/*
@@ -44,19 +44,19 @@ export default {
height: UnitType.Length,
justifyContent: UnitType.String,
left: UnitType.Length,
- marginBottomWidth: UnitType.Length,
- marginLeftWidth: UnitType.Length,
- marginRightWidth: UnitType.Length,
- marginTopWidth: UnitType.Length,
+ marginBottom: UnitType.Length,
+ marginLeft: UnitType.Length,
+ marginRight: UnitType.Length,
+ marginTop: UnitType.Length,
maxHeight: UnitType.Length,
maxWidth: UnitType.Length,
minHeight: UnitType.Length,
minWidth: UnitType.Length,
overflow: UnitType.String,
- paddingBottomWidth: UnitType.Length,
- paddingLeftWidth: UnitType.Length,
- paddingRightWidth: UnitType.Length,
- paddingTopWidth: UnitType.Length,
+ paddingBottom: UnitType.Length,
+ paddingLeft: UnitType.Length,
+ paddingRight: UnitType.Length,
+ paddingTop: UnitType.Length,
position: UnitType.String,
right: UnitType.Length,
top: UnitType.Length,
@@ -76,5 +76,5 @@ export default {
letterSpacing: UnitType.Length,
textDecorationColor: UnitType.String,
textDecorationStyle: UnitType.String,
- writingDirection: UnitType.String
+ writingDirection: UnitType.String,
};
diff --git a/compiler/babel/styleSheet/styleBody.ts b/compiler/babel/styleSheet/styleBody.ts
index 1a7ebc8..4b96d44 100644
--- a/compiler/babel/styleSheet/styleBody.ts
+++ b/compiler/babel/styleSheet/styleBody.ts
@@ -1,18 +1,19 @@
import { getPropertyName } from "css-to-react-native";
import { transformStyleTuples, StyleTuple } from "../../../runtime/cssUtil";
+import { SubstitutionMap } from "../extractSubstitutionMap";
import { jsonToNode, getOrCreateImport } from "../util";
import {
getSubstitutionRegExp,
containsSubstitution,
- getStringWithSubstitutedValues
+ getStringWithSubstitutedValues,
} from "./substitutionUtil";
import unitTypes from "./simpleUnitTypes";
import substituteSimpleUnit from "./substituteSimpleUnit";
-import { SubstitutionMap } from "../extractCss";
+import { calcRe } from "./util";
enum InterpolationType {
NoOrSimple,
- Template
+ Template,
}
type StyleTupleGroup = {
@@ -26,7 +27,7 @@ const getInterpolationType = (
) => {
if (!containsSubstitution(substitutionMap, value)) {
return InterpolationType.NoOrSimple;
- } else if (getPropertyName(prop) in unitTypes) {
+ } else if (getPropertyName(prop) in unitTypes && !calcRe.test(value)) {
return InterpolationType.NoOrSimple;
}
return InterpolationType.Template;
@@ -37,7 +38,7 @@ const createStyleTupleGroups = (
styleTuples: StyleTuple[]
) => {
const groups = [] as StyleTupleGroup[];
- styleTuples.forEach(styleTuple => {
+ styleTuples.forEach((styleTuple) => {
const interpolationType = getInterpolationType(substitutionMap, styleTuple);
const lastGroup = groups[groups.length - 1];
@@ -59,6 +60,8 @@ const createSimpleNoInterpolationStyleMap = (
substitutionMap: SubstitutionMap,
styleTuplesGroup: StyleTuple[]
) => {
+ const { types: t } = babel;
+
const substitutionRegExp =
Object.keys(substitutionMap).length !== 0
? getSubstitutionRegExp(substitutionMap)
@@ -81,7 +84,7 @@ const createSimpleNoInterpolationStyleMap = (
} else if (substitutionMatches.length === 1) {
const substitution =
substitutionMatches[0] === value.trim()
- ? substitutionMap[value]
+ ? t.cloneDeep(substitutionMap[value])
: getStringWithSubstitutedValues(babel, substitutionMap, value);
styleMap[propertyName] = substituteSimpleUnit(
@@ -132,7 +135,7 @@ const transformStyleTupleGroup = (
styleTuplesGroup.map(([prop, value]) =>
t.arrayExpression([
t.stringLiteral(getPropertyName(prop)),
- getStringWithSubstitutedValues(babel, substitutionMap, value)
+ getStringWithSubstitutedValues(babel, substitutionMap, value),
])
)
);
@@ -150,7 +153,7 @@ export default (
) => {
const { types: t } = babel;
const tupleGroups = createStyleTupleGroups(substitutionMap, styleTuples);
- const transformedGroups = tupleGroups.map(tupleGroup =>
+ const transformedGroups = tupleGroups.map((tupleGroup) =>
transformStyleTupleGroup(babel, path, substitutionMap, tupleGroup)
);
diff --git a/compiler/babel/styleSheet/styleTuples.ts b/compiler/babel/styleSheet/styleTuples.ts
index 8b47ea6..d7a5ab0 100644
--- a/compiler/babel/styleSheet/styleTuples.ts
+++ b/compiler/babel/styleSheet/styleTuples.ts
@@ -1,16 +1,28 @@
import { StyleTuple } from "../../../runtime/cssUtil";
-import { createTopLevelVariable, jsonToNode } from "../util";
+import { SubstitutionMap } from "../extractSubstitutionMap";
+import { createTopLevelVariable } from "../util";
+import { getStringWithSubstitutedValues } from "./substitutionUtil";
export const createTopLevelStyleTuplesVariable = (
babel: any,
path: any,
+ substitutionMap: SubstitutionMap,
styleTuples: StyleTuple[]
) => {
+ const { types: t } = babel;
+ const styleTuplesNode = t.arrayExpression(
+ styleTuples.map(([key, value]) =>
+ t.arrayExpression([
+ t.stringLiteral(key),
+ getStringWithSubstitutedValues(babel, substitutionMap, value),
+ ])
+ )
+ );
const unresolvedStyleTuplesVariable = createTopLevelVariable(
babel,
path,
"unresolvedStyleTuples",
- jsonToNode(babel, styleTuples),
+ styleTuplesNode,
{ prefix0: true }
);
return unresolvedStyleTuplesVariable;
diff --git a/compiler/babel/styleSheet/substitutionUtil.ts b/compiler/babel/styleSheet/substitutionUtil.ts
index 61c74ad..e5e1e6d 100644
--- a/compiler/babel/styleSheet/substitutionUtil.ts
+++ b/compiler/babel/styleSheet/substitutionUtil.ts
@@ -1,4 +1,4 @@
-import { SubstitutionMap } from "../extractCss";
+import { SubstitutionMap } from "../extractSubstitutionMap";
export const getSubstitutionRegExp = (substitutionMap: SubstitutionMap) => {
const substititionNames = Object.keys(substitutionMap);
@@ -18,7 +18,7 @@ export const containsSubstitution = (
const getTemplateValues = (cooked: string) => ({
cooked,
- raw: JSON.stringify(cooked).slice(1, -1)
+ raw: JSON.stringify(cooked).slice(1, -1),
});
export const getStringWithSubstitutedValues = (
@@ -43,7 +43,7 @@ export const getStringWithSubstitutedValues = (
? t.templateElement(templateValue)
: t.templateElement(templateValue, true);
});
- const expressions = expressionValues.map(value =>
+ const expressions = expressionValues.map((value) =>
t.cloneDeep(substitutionMap[value])
);
diff --git a/compiler/babel/styleSheet/util.ts b/compiler/babel/styleSheet/util.ts
new file mode 100644
index 0000000..d89f9f6
--- /dev/null
+++ b/compiler/babel/styleSheet/util.ts
@@ -0,0 +1 @@
+export const calcRe = /calc/g;
diff --git a/compiler/babel/styleSheet/viewport.ts b/compiler/babel/styleSheet/viewport.ts
index baae98e..bf68396 100644
--- a/compiler/babel/styleSheet/viewport.ts
+++ b/compiler/babel/styleSheet/viewport.ts
@@ -2,14 +2,15 @@ import { getPropertyName } from "css-to-react-native";
import { viewportUnitRegExp } from "../../../runtime/cssRegExp";
import { StyleTuple } from "../../../runtime/cssUtil";
import { StyleTuplesDeclaration } from "../../css/types";
-import { SubstitutionMap } from "../extractCss";
+import { SubstitutionMap } from "../extractSubstitutionMap";
import { Environment } from "../environment";
import unitTypes, { UnitType } from "./simpleUnitTypes";
+import { calcRe } from "./util";
export enum ViewportMode {
None = 0,
SimpleLengthUnits = 1,
- ComplexUnits = 2
+ ComplexUnits = 2,
}
export const getViewportMode = (rule: StyleTuplesDeclaration): ViewportMode =>
@@ -18,7 +19,10 @@ export const getViewportMode = (rule: StyleTuplesDeclaration): ViewportMode =>
([prop, value]): ViewportMode => {
if (!viewportUnitRegExp.test(value)) {
return ViewportMode.None;
- } else if (unitTypes[getPropertyName(prop)] === UnitType.Length) {
+ } else if (
+ unitTypes[getPropertyName(prop)] === UnitType.Length &&
+ !calcRe.test(value)
+ ) {
return ViewportMode.SimpleLengthUnits;
} else {
return ViewportMode.ComplexUnits;
diff --git a/compiler/babel/useAnimation.ts b/compiler/babel/useAnimation.ts
index 13ccb75..40fdaec 100644
--- a/compiler/babel/useAnimation.ts
+++ b/compiler/babel/useAnimation.ts
@@ -6,7 +6,7 @@ import {
createTopLevelVariable,
createVariable,
jsonToNode,
- getOrCreateImport
+ getOrCreateImport,
} from "./util";
export default (
@@ -21,7 +21,7 @@ export default (
// FIXME: We could be more granular than useCustomPropertyShorthandParts whenever one part has a variable in
const animationImportsVariables = animations.some(
- animation => animation.importedVariables.length > 0
+ (animation) => animation.importedVariables.length > 0
);
let animationExpression: any;
@@ -108,7 +108,7 @@ export default (
t.callExpression(useAnimationImport, [
keyframesVariable,
animationExpression,
- styleVariable
+ styleVariable,
])
)
)
diff --git a/compiler/babel/useCustomProperties.ts b/compiler/babel/useCustomProperties.ts
index 0d0e3ea..5dedd3e 100644
--- a/compiler/babel/useCustomProperties.ts
+++ b/compiler/babel/useCustomProperties.ts
@@ -2,14 +2,14 @@
import {
ComponentDefinition,
Condition,
- VariableExportDeclaration
+ VariableExportDeclaration,
} from "../css/types";
import { Environment } from "./environment";
import buildCondition from "./buildCondition";
import {
createTopLevelVariable,
createVariable,
- getOrCreateImport
+ getOrCreateImport,
} from "./util";
const conditionsEqual = (a: Condition | null, b: Condition | null) => {
@@ -37,7 +37,7 @@ export default (
const { exportedVariables } = cssOutput;
const groups: ExportedVariablesGroup[] = [];
- exportedVariables.forEach(exportedVariables => {
+ exportedVariables.forEach((exportedVariables) => {
const { condition } = exportedVariables;
const lastGroup = groups[groups.length - 1];
diff --git a/compiler/babel/useKeyframes.ts b/compiler/babel/useKeyframes.ts
index 0f15d3d..8b4a478 100644
--- a/compiler/babel/useKeyframes.ts
+++ b/compiler/babel/useKeyframes.ts
@@ -1,6 +1,6 @@
import { ComponentDefinition, KeyframeOfStyleTuples } from "../css/types";
import styleBody from "./styleSheet/styleBody";
-import { SubstitutionMap } from "./extractCss";
+import { SubstitutionMap } from "./extractSubstitutionMap";
import { createTopLevelVariable } from "./util";
const createKeyframeStatic = (
@@ -15,7 +15,7 @@ const createKeyframeStatic = (
t.objectProperty(
t.stringLiteral("style"),
styleBody(babel, path, substitutionMap, keyframe.styleTuples)
- )
+ ),
]);
};
@@ -27,7 +27,7 @@ const createKeyframesStatic = (
) => {
const { types: t } = babel;
return t.arrayExpression(
- sequence.map(keyframe =>
+ sequence.map((keyframe) =>
createKeyframeStatic(babel, path, substitutionMap, keyframe)
)
);
@@ -38,7 +38,7 @@ export default (babel: any, path: any, cssOutput: ComponentDefinition) => {
const { keyframes } = cssOutput;
const keyframesImportVariables = keyframes.some(
- keyframe => keyframe.importedVariables.length !== 0
+ (keyframe) => keyframe.importedVariables.length !== 0
);
let keyframesVariable: any;
diff --git a/compiler/babel/useTransition.ts b/compiler/babel/useTransition.ts
index 0b5fde3..ebd85eb 100644
--- a/compiler/babel/useTransition.ts
+++ b/compiler/babel/useTransition.ts
@@ -6,7 +6,7 @@ import {
createTopLevelVariable,
createVariable,
jsonToNode,
- getOrCreateImport
+ getOrCreateImport,
} from "./util";
export default (
@@ -21,7 +21,7 @@ export default (
// FIXME: We could be more granular than useCustomPropertyShorthandParts whenever one part has a variable in
const transitionImportsVariables = transitions.some(
- transition => transition.importedVariables.length > 0
+ (transition) => transition.importedVariables.length > 0
);
let transitionVariable: any;
@@ -105,7 +105,7 @@ export default (
styleVariable,
t.callExpression(useTransitionImport, [
transitionVariable,
- styleVariable
+ styleVariable,
])
)
)
diff --git a/compiler/babel/util.ts b/compiler/babel/util.ts
index 27c366a..81c5bf9 100644
--- a/compiler/babel/util.ts
+++ b/compiler/babel/util.ts
@@ -29,7 +29,7 @@ export const createVariable = (
const { types: t } = babel;
const id = generateNiceId(babel, path, name, { prefix0 });
const declaration = t.variableDeclaration(kind, [
- t.variableDeclarator(id, init)
+ t.variableDeclarator(id, init),
]);
const [declarationPath] = path.pushContainer("body", declaration);
path.scope.registerDeclaration(declarationPath);
@@ -46,7 +46,7 @@ export const createTopLevelVariable = (
const { types: t } = babel;
const id = generateNiceId(babel, path, name, idOpts);
const declaration = t.variableDeclaration("const", [
- t.variableDeclarator(id, init)
+ t.variableDeclarator(id, init),
]);
const statementPath = path.getStatementParent();
const [declarationPath] = statementPath.insertBefore(declaration);
@@ -61,12 +61,14 @@ export const jsonToNode = (babel: any, object: any) => {
} else if (typeof object === "number") {
return t.numericLiteral(object);
} else if (Array.isArray(object)) {
- return t.arrayExpression(object.map(element => jsonToNode(babel, element)));
+ return t.arrayExpression(
+ object.map((element) => jsonToNode(babel, element))
+ );
} else if (object === null) {
return t.nullLiteral();
}
return t.objectExpression(
- Object.keys(object).map(key =>
+ Object.keys(object).map((key) =>
t.objectProperty(t.stringLiteral(key), jsonToNode(babel, object[key]))
)
);
@@ -83,15 +85,15 @@ export const getImportBindings = (
);
const allImportBindings =
importedName === "default"
- ? allBindings.filter(reference =>
+ ? allBindings.filter((reference) =>
t.isImportDefaultSpecifier(reference.path.node)
)
: allBindings.filter(
- reference =>
+ (reference) =>
t.isImportSpecifier(reference.path.node) &&
reference.path.node.imported.name === importedName
);
- const importBindingsForModule = allImportBindings.filter(reference => {
+ const importBindingsForModule = allImportBindings.filter((reference) => {
const importDeclaration = reference.path.findParent(t.isImportDeclaration);
const importModuleName = importDeclaration.node.source.value;
return importModuleName === moduleName;
diff --git a/compiler/css/__tests__/applyGlobals.ts b/compiler/css/__tests__/applyGlobals.ts
new file mode 100644
index 0000000..f159bc2
--- /dev/null
+++ b/compiler/css/__tests__/applyGlobals.ts
@@ -0,0 +1,376 @@
+import postcss from "postcss";
+import { parseGlobals, applyGlobals } from "../applyGlobals";
+
+test("Handles null/undefined", () => {
+ expect(parseGlobals(null)).toEqual({
+ vars: new Map(),
+ conditions: [],
+ globalVarsOnly: false,
+ });
+ expect(parseGlobals(undefined)).toEqual({
+ vars: new Map(),
+ conditions: [],
+ globalVarsOnly: false,
+ });
+});
+
+test("Handles objects", () => {
+ expect(parseGlobals({ color: "red" })).toEqual({
+ vars: new Map([["color", new Set([0])]]),
+ conditions: [{ query: undefined, values: new Map([["color", "red"]]) }],
+ globalVarsOnly: false,
+ });
+ expect(parseGlobals({ color: "red", other: "green" })).toEqual({
+ vars: new Map([
+ ["color", new Set([0])],
+ ["other", new Set([0])],
+ ]),
+ conditions: [
+ {
+ query: undefined,
+ values: new Map([
+ ["color", "red"],
+ ["other", "green"],
+ ]),
+ },
+ ],
+ globalVarsOnly: false,
+ });
+});
+
+test("Handles basic strings", () => {
+ expect(
+ parseGlobals(`
+ --color: red;
+ `)
+ ).toEqual({
+ vars: new Map([["color", new Set([0])]]),
+ conditions: [{ query: undefined, values: new Map([["color", "red"]]) }],
+ globalVarsOnly: false,
+ });
+ expect(
+ parseGlobals(`
+ --color: red;
+ --other: green;
+ `)
+ ).toEqual({
+ vars: new Map([
+ ["color", new Set([0])],
+ ["other", new Set([0])],
+ ]),
+ conditions: [
+ {
+ query: undefined,
+ values: new Map([
+ ["color", "red"],
+ ["other", "green"],
+ ]),
+ },
+ ],
+ globalVarsOnly: false,
+ });
+});
+
+test("Handles strings with media queries", () => {
+ expect(
+ parseGlobals(`
+ --color: red;
+
+ @media (prefers-color-scheme: dark) {
+ --color: green;
+ }
+ `)
+ ).toEqual({
+ vars: new Map([["color", new Set([0, 1])]]),
+ conditions: [
+ { query: undefined, values: new Map([["color", "red"]]) },
+ {
+ query: "(prefers-color-scheme: dark)",
+ values: new Map([["color", "green"]]),
+ },
+ ],
+ globalVarsOnly: false,
+ });
+
+ expect(
+ parseGlobals(`
+ --color: red;
+ --other: green;
+
+ @media (prefers-color-scheme: dark) {
+ --color: green;
+ --other: red;
+ }
+ `)
+ ).toEqual({
+ vars: new Map([
+ ["color", new Set([0, 1])],
+ ["other", new Set([0, 1])],
+ ]),
+ conditions: [
+ {
+ query: undefined,
+ values: new Map([
+ ["color", "red"],
+ ["other", "green"],
+ ]),
+ },
+ {
+ query: "(prefers-color-scheme: dark)",
+ values: new Map([
+ ["color", "green"],
+ ["other", "red"],
+ ]),
+ },
+ ],
+ globalVarsOnly: false,
+ });
+
+ expect(
+ parseGlobals(`
+ --color: red;
+ --other: green;
+
+ @media (prefers-color-scheme: dark) {
+ --color: green;
+ }
+ `)
+ ).toEqual({
+ vars: new Map([
+ ["color", new Set([0, 1])],
+ ["other", new Set([0])],
+ ]),
+ conditions: [
+ {
+ query: undefined,
+ values: new Map([
+ ["color", "red"],
+ ["other", "green"],
+ ]),
+ },
+ {
+ query: "(prefers-color-scheme: dark)",
+ values: new Map([["color", "green"]]),
+ },
+ ],
+ globalVarsOnly: false,
+ });
+});
+
+test("Applying non-conditional globals", () => {
+ const globals = {
+ vars: new Map([["color", new Set([0])]]),
+ conditions: [{ query: undefined, values: new Map([["color", "red"]]) }],
+ globalVarsOnly: false,
+ };
+
+ const root = postcss.parse(`
+ .someRule {
+ color: var(--color);
+ }
+ `);
+ applyGlobals(root, globals);
+ expect(root.toString()).toMatchInlineSnapshot(`
+ "
+ .someRule {
+ color: red;
+ }
+ "
+ `);
+});
+
+test("Applying non-conditional globals with other values", () => {
+ const globals = {
+ vars: new Map([["color", new Set([0])]]),
+ conditions: [{ query: undefined, values: new Map([["color", "red"]]) }],
+ globalVarsOnly: false,
+ };
+
+ const root = postcss.parse(`
+ .someRule {
+ background: url(some-url) var(--color);
+ }
+ `);
+ applyGlobals(root, globals);
+ expect(root.toString()).toMatchInlineSnapshot(`
+ "
+ .someRule {
+ background: url(some-url) red;
+ }
+ "
+ `);
+});
+
+test("Applying non-conditional globals with multiple rules", () => {
+ const globals = {
+ vars: new Map([["color", new Set([0])]]),
+ conditions: [{ query: undefined, values: new Map([["color", "red"]]) }],
+ globalVarsOnly: false,
+ };
+
+ const root = postcss.parse(`
+ .someRule {
+ background: url(some-url) var(--color);
+ }
+
+ .someOtherRule {
+ background: url(some-url) var(--color);
+ }
+ `);
+ applyGlobals(root, globals);
+ expect(root.toString()).toMatchInlineSnapshot(`
+ "
+ .someRule {
+ background: url(some-url) red;
+ }
+
+ .someOtherRule {
+ background: url(some-url) red;
+ }
+ "
+ `);
+});
+
+test("Applying conditional globals", () => {
+ const globals = {
+ vars: new Map([["color", new Set([0, 1])]]),
+ conditions: [
+ { query: undefined, values: new Map([["color", "red"]]) },
+ {
+ query: "(prefers-color-scheme: dark)",
+ values: new Map([["color", "green"]]),
+ },
+ ],
+ globalVarsOnly: false,
+ };
+
+ const root = postcss.parse(`
+ .someRule {
+ color: var(--color);
+ }
+ `);
+ applyGlobals(root, globals);
+ expect(root.toString()).toMatchInlineSnapshot(`
+ "
+ .someRule {
+ color: red;
+ }
+ @media (prefers-color-scheme: dark) {
+ .someRule {
+ color: green;
+ }
+ }
+ "
+ `);
+});
+
+test("Applying conditional globals with other non-var decls", () => {
+ const globals = {
+ vars: new Map([["color", new Set([0, 1])]]),
+ conditions: [
+ { query: undefined, values: new Map([["color", "red"]]) },
+ {
+ query: "(prefers-color-scheme: dark)",
+ values: new Map([["color", "green"]]),
+ },
+ ],
+ globalVarsOnly: false,
+ };
+
+ const root = postcss.parse(`
+ .someRule {
+ notVar: something;
+ color: var(--color);
+ alsoNotVar: something else;
+ }
+ `);
+ applyGlobals(root, globals);
+ expect(root.toString()).toMatchInlineSnapshot(`
+ "
+ .someRule {
+ notVar: something;
+ color: red;
+ alsoNotVar: something else;
+ }
+ @media (prefers-color-scheme: dark) {
+ .someRule {
+ notVar: something;
+ color: green;
+ alsoNotVar: something else;
+ }
+ }
+ "
+ `);
+});
+
+test("Applying conditional globals inside media queries", () => {
+ const globals = {
+ vars: new Map([["color", new Set([0, 1])]]),
+ conditions: [
+ { query: undefined, values: new Map([["color", "red"]]) },
+ {
+ query: "(prefers-color-scheme: dark)",
+ values: new Map([["color", "green"]]),
+ },
+ ],
+ globalVarsOnly: false,
+ };
+
+ const root = postcss.parse(`
+ .someRule {
+ color: var(--color);
+ }
+
+ @media (platform: ios) {
+ .someRule {
+ background: var(--color);
+ color: orange;
+ }
+ }
+
+ @media (platform: ios), (platform: android) {
+ .someRule {
+ border-color: var(--color);
+ }
+ }
+ `);
+ applyGlobals(root, globals);
+ expect(root.toString()).toMatchInlineSnapshot(`
+ "
+ .someRule {
+ color: red;
+ }
+ @media (prefers-color-scheme: dark) {
+ .someRule {
+ color: green;
+ }
+ }
+
+ @media (platform: ios) {
+ .someRule {
+ background: red;
+ color: orange;
+ }
+ }
+
+ @media (platform: ios) and (prefers-color-scheme: dark) {
+ .someRule {
+ background: green;
+ color: orange;
+ }
+ }
+
+ @media (platform: ios), (platform: android) {
+ .someRule {
+ border-color: red;
+ }
+ }
+
+ @media (platform: ios) and (prefers-color-scheme: dark), (platform: android) and (prefers-color-scheme: dark) {
+ .someRule {
+ border-color: green;
+ }
+ }
+ "
+ `);
+});
diff --git a/compiler/css/__tests__/extractRules.ts b/compiler/css/__tests__/extractRules.ts
index 914e84f..819d839 100644
--- a/compiler/css/__tests__/extractRules.ts
+++ b/compiler/css/__tests__/extractRules.ts
@@ -14,8 +14,8 @@ it("Scopes top-level declarations", () => {
type: StyleType.Tuples,
condition: null,
styleTuples: [["color", "red"]],
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -34,9 +34,12 @@ it("Scopes multiple top-level declarations into one class", () => {
{
type: StyleType.Tuples,
condition: null,
- styleTuples: [["color", "red"], ["border-left-color", "green"]],
- importedVariables: []
- }
+ styleTuples: [
+ ["color", "red"],
+ ["border-left-color", "green"],
+ ],
+ importedVariables: [],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -57,8 +60,8 @@ it("Scopes boolean attribute selectors", () => {
type: StyleType.Tuples,
condition: { selector: "&[cssta|attribute]", mediaQuery: null },
styleTuples: [["color", "red"]],
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -74,18 +77,18 @@ it("Scopes string attribute selectors", () => {
`;
const rules = extractRules(css);
expect(rules.propTypes).toEqual({
- stringAttribute: { type: "oneOf", values: ["red"] }
+ stringAttribute: { type: "oneOf", values: ["red"] },
});
expect(rules.styles).toEqual([
{
type: StyleType.Tuples,
condition: {
selector: '&[cssta|stringAttribute="red"]',
- mediaQuery: null
+ mediaQuery: null,
},
styleTuples: [["color", "red"]],
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -120,7 +123,7 @@ it("Scopes attribute selectors", () => {
booleanValue1: { type: "bool" },
booleanValue2: { type: "bool" },
stringValue1: { type: "oneOf", values: ["a", "b"] },
- stringValue2: { type: "oneOf", values: ["c"] }
+ stringValue2: { type: "oneOf", values: ["c"] },
});
expect(rules.styles).toMatchInlineSnapshot(`
Array [
@@ -213,7 +216,7 @@ it("Recognises variable declarations", () => {
expect(rules.animations).toEqual([]);
expect(rules.keyframes).toEqual([]);
expect(rules.exportedVariables).toEqual([
- { condition: null, name: "color", value: "red", importedVariables: [] }
+ { condition: null, name: "color", value: "red", importedVariables: [] },
]);
});
@@ -228,8 +231,8 @@ it("Recognises variable imports", () => {
type: StyleType.Tuples,
condition: null,
styleTuples: [["color", "var(--color)"]],
- importedVariables: ["color"]
- }
+ importedVariables: ["color"],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -252,7 +255,7 @@ it("Recognises multiple variable declarations", () => {
expect(rules.exportedVariables).toEqual([
{ condition: null, name: "color", value: "red", importedVariables: [] },
{ condition: null, name: "color", value: "blue", importedVariables: [] },
- { condition: null, name: "other", value: "green", importedVariables: [] }
+ { condition: null, name: "other", value: "green", importedVariables: [] },
]);
});
@@ -267,8 +270,8 @@ it("Recognises multiple variable imports", () => {
type: StyleType.Tuples,
condition: null,
styleTuples: [["margin", "var(--large) var(--small)"]],
- importedVariables: ["large", "small"]
- }
+ importedVariables: ["large", "small"],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -288,14 +291,14 @@ it("Mixes variable and style declarations", () => {
type: StyleType.Tuples,
condition: null,
styleTuples: [["color", "var(--color)"]],
- importedVariables: ["color"]
- }
+ importedVariables: ["color"],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
expect(rules.keyframes).toEqual([]);
expect(rules.exportedVariables).toEqual([
- { condition: null, name: "color", value: "red", importedVariables: [] }
+ { condition: null, name: "color", value: "red", importedVariables: [] },
]);
});
@@ -307,7 +310,7 @@ it("Recognises transitions", () => {
expect(rules.propTypes).toEqual({});
expect(rules.styles).toEqual([]);
expect(rules.transitions).toEqual([
- { condition: null, part: { _: "color 1s linear" }, importedVariables: [] }
+ { condition: null, part: { _: "color 1s linear" }, importedVariables: [] },
]);
expect(rules.animations).toEqual([]);
expect(rules.keyframes).toEqual([]);
@@ -331,10 +334,10 @@ it("Recognises transitions using long hand", () => {
property: "color",
delay: "1s",
duration: "2s",
- timingFunction: "linear"
+ timingFunction: "linear",
},
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.animations).toEqual([]);
expect(rules.keyframes).toEqual([]);
@@ -352,8 +355,8 @@ it("Recognises multiple separate transitions", () => {
{
condition: null,
part: { _: "color 1s linear, transform 2s ease-in-out" },
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.animations).toEqual([]);
expect(rules.keyframes).toEqual([]);
@@ -372,8 +375,8 @@ it("Recognises multiple property transitions", () => {
{
condition: null,
part: { _: "1s linear", property: "color, transform" },
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.animations).toEqual([]);
expect(rules.keyframes).toEqual([]);
@@ -393,8 +396,8 @@ it("Overrides previous transition declarations when using shorthand", () => {
{
condition: null,
part: { _: "1s linear" },
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.animations).toEqual([]);
expect(rules.keyframes).toEqual([]);
@@ -412,8 +415,8 @@ it("Recognises multiple allows variables in transitions", () => {
{
condition: null,
part: { _: "color var(--time) var(--easing)" },
- importedVariables: ["time", "easing"]
- }
+ importedVariables: ["time", "easing"],
+ },
]);
expect(rules.animations).toEqual([]);
expect(rules.keyframes).toEqual([]);
@@ -432,8 +435,8 @@ it("Recognises animations", () => {
{
condition: null,
part: { _: "test 1s linear" },
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.keyframes).toEqual([]);
expect(rules.exportedVariables).toEqual([]);
@@ -459,10 +462,10 @@ it("Recognises animation long hands", () => {
duration: "1s",
delay: "2s",
iterations: "3",
- timingFunction: "linear"
+ timingFunction: "linear",
},
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.keyframes).toEqual([]);
expect(rules.exportedVariables).toEqual([]);
@@ -483,8 +486,8 @@ it("Overrides previous animation declarations when using shorthand", () => {
{
condition: null,
part: { _: "test 1s" },
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.keyframes).toEqual([]);
expect(rules.exportedVariables).toEqual([]);
@@ -503,10 +506,10 @@ it("Recognises keyframes", () => {
name: "test",
sequence: [
{ time: 0, styleTuples: [["opacity", "0"]] },
- { time: 1, styleTuples: [["opacity", "1"]] }
+ { time: 1, styleTuples: [["opacity", "1"]] },
],
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
});
@@ -529,19 +532,19 @@ it("Recognises multiple keyframes", () => {
name: "test1",
sequence: [
{ time: 0, styleTuples: [["opacity", "0"]] },
- { time: 1, styleTuples: [["opacity", "1"]] }
+ { time: 1, styleTuples: [["opacity", "1"]] },
],
- importedVariables: []
+ importedVariables: [],
},
{
name: "test2",
sequence: [
{ time: 0, styleTuples: [["opacity", "0"]] },
{ time: 0.5, styleTuples: [["opacity", "0.5"]] },
- { time: 1, styleTuples: [["opacity", "1"]] }
+ { time: 1, styleTuples: [["opacity", "1"]] },
],
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
});
@@ -555,8 +558,8 @@ it("Imports variables from keyframes", () => {
expect(keyframes[0].sequence).toEqual([
{
time: 0,
- styleTuples: [["color", "var(--primary)"]]
- }
+ styleTuples: [["color", "var(--primary)"]],
+ },
]);
expect(keyframes[0].importedVariables).toEqual(["primary"]);
});
@@ -574,8 +577,8 @@ it("Recognises media queries for top-level declarations", () => {
type: StyleType.Tuples,
condition: { selector: "&", mediaQuery: "(min-width: 500px)" },
styleTuples: [["color", "red"]],
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -598,11 +601,11 @@ it("Recognises media queries for nested rules", () => {
type: StyleType.Tuples,
condition: {
selector: "&[cssta|prop]",
- mediaQuery: "(min-width: 500px)"
+ mediaQuery: "(min-width: 500px)",
},
styleTuples: [["color", "red"]],
- importedVariables: []
- }
+ importedVariables: [],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -750,8 +753,8 @@ it("Handles mixins", () => {
{
type: StyleType.Mixin,
condition: null,
- substitution: "someMixin"
- }
+ substitution: "someMixin",
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -771,8 +774,8 @@ it("Handles conditional mixins", () => {
{
type: StyleType.Mixin,
condition: { selector: "&[cssta|cond]", mediaQuery: null },
- substitution: "someMixin"
- }
+ substitution: "someMixin",
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -792,8 +795,8 @@ it("Handles mixins in media queries", () => {
{
type: StyleType.Mixin,
condition: { selector: "&", mediaQuery: "(min-width: 500px)" },
- substitution: "someMixin"
- }
+ substitution: "someMixin",
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -816,10 +819,10 @@ it("Handles conditional mixins in media queries", () => {
type: StyleType.Mixin,
condition: {
selector: "&[cssta|cond]",
- mediaQuery: "(min-width: 500px)"
+ mediaQuery: "(min-width: 500px)",
},
- substitution: "someMixin"
- }
+ substitution: "someMixin",
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
@@ -841,20 +844,26 @@ it("Handles mixins within style tuples", () => {
{
type: StyleType.Tuples,
condition: null,
- styleTuples: [["top", "10px"], ["right", "10px"]],
- importedVariables: []
+ styleTuples: [
+ ["top", "10px"],
+ ["right", "10px"],
+ ],
+ importedVariables: [],
},
{
type: StyleType.Mixin,
condition: null,
- substitution: "someMixin"
+ substitution: "someMixin",
},
{
type: StyleType.Tuples,
condition: null,
- styleTuples: [["bottom", "10px"], ["left", "var(--left)"]],
- importedVariables: ["left"]
- }
+ styleTuples: [
+ ["bottom", "10px"],
+ ["left", "var(--left)"],
+ ],
+ importedVariables: ["left"],
+ },
]);
expect(rules.transitions).toEqual([]);
expect(rules.animations).toEqual([]);
diff --git a/compiler/css/__tests__/getRoot.ts b/compiler/css/__tests__/getRoot.ts
index 90578a7..92c7839 100644
--- a/compiler/css/__tests__/getRoot.ts
+++ b/compiler/css/__tests__/getRoot.ts
@@ -148,7 +148,7 @@ it("Generates multile prop types for multiple attributes", () => {
undefined,
{
boolAttribute: { type: "bool" },
- stringAttribute: { type: "oneOf", values: ["1", "2"] }
+ stringAttribute: { type: "oneOf", values: ["1", "2"] },
}
);
});
diff --git a/compiler/css/applyGlobals.ts b/compiler/css/applyGlobals.ts
new file mode 100644
index 0000000..3d92bb9
--- /dev/null
+++ b/compiler/css/applyGlobals.ts
@@ -0,0 +1,143 @@
+import postcss, { AtRule, Root } from "postcss";
+import { varRegExp } from "../../runtime/cssRegExp";
+import { Options } from "../options";
+
+export type Globals = {
+ vars: Map>;
+ conditions: {
+ query: string | undefined;
+ values: Map;
+ }[];
+ globalVarsOnly: boolean;
+};
+
+export const parseGlobals = (
+ input: Record | string,
+ { globalVarsOnly = false } = {}
+): Globals => {
+ if (input == null) {
+ return { vars: new Map(), conditions: [], globalVarsOnly };
+ } else if (typeof input === "object") {
+ return {
+ vars: new Map(Object.keys(input).map((v) => [v, new Set([0])])),
+ conditions: [
+ { query: undefined, values: new Map(Object.entries(input)) },
+ ],
+ globalVarsOnly,
+ };
+ }
+
+ const root = postcss.parse(input);
+
+ const atRules: AtRule[] = [];
+ root.walkAtRules("media", (atRule) => atRules.push(atRule));
+
+ const vars = new Map>();
+ const conditions = [
+ { query: undefined, values: new Map() },
+ ...atRules.map((atRule) => ({
+ query: atRule.params,
+ values: new Map(),
+ })),
+ ];
+
+ root.walkDecls((decl) => {
+ const prop = decl.prop.slice("--".length);
+
+ let conditionIndex = 0;
+ if (decl.parent.type === "atrule" && decl.parent.name === "media") {
+ conditionIndex = atRules.indexOf(decl.parent) + 1;
+ }
+
+ conditions[conditionIndex].values.set(prop, decl.value);
+
+ if (!vars.has(prop)) vars.set(prop, new Set());
+ vars.get(prop).add(conditionIndex);
+ });
+
+ return { vars, conditions, globalVarsOnly };
+};
+
+export const applyGlobals = (root: Root, globals: Globals) => {
+ root.walkRules((rule) => {
+ const conditionProps = new Map();
+
+ rule.walkDecls((decl) => {
+ Array.from((decl.value as any).matchAll(varRegExp)).forEach(
+ (match: string[]) => {
+ const conditions = globals.vars.get(match[1]);
+ if (conditions == null) return;
+ conditions.forEach((cond) => {
+ conditionProps.set(cond, decl.prop);
+ });
+ }
+ );
+ });
+
+ // Sorted backwards
+ // We add the at rules directly after the rule, so the last needs to be added first
+ const conditionIndicies = Array.from(conditionProps.keys()).sort(
+ (a, b) => b - a
+ );
+
+ conditionIndicies.forEach((index) => {
+ const { query, values } = globals.conditions[index];
+
+ const ruleCopy = rule.clone();
+ let didEdit = false;
+
+ const replaceVars = (value: string) =>
+ value.replace(varRegExp, (fullMatch, variable, fallback) => {
+ didEdit = true;
+ if (values.has(variable)) {
+ return values.get(variable);
+ } else if (fallback) {
+ return fallback;
+ } else if (!globals.globalVarsOnly) {
+ return fullMatch;
+ } else {
+ throw new Error(
+ `Found variable "${variable}". This was not defined in the globals, and \`globalVarsOnly\` is enabled. See line with \`var(--${variable})\``
+ );
+ }
+ });
+
+ ruleCopy.walkDecls((decl) => {
+ decl.value = replaceVars(decl.value);
+ });
+
+ if (!didEdit) return;
+
+ if (query === undefined) {
+ rule.replaceWith(ruleCopy);
+ } else if (rule.parent.type === "atrule") {
+ const params = rule.parent.params
+ .split(",")
+ .map((rule) => `${rule} and ${query}`)
+ .join(",");
+ const atRule = postcss.atRule({ name: "media", params });
+ atRule.append(ruleCopy);
+ rule.parent.parent.insertAfter(rule.parent, atRule);
+ } else {
+ /*
+ We do actually have to clone the whole rule for cases like
+
+ border: 0px solid var(--color);
+ border-top: 1px;
+ border-bottom: 1px;
+
+ Otherwise we'd reset the top and bottom width
+
+ It's also more performant to copy the whole style, as a later stage
+ optimises for this exact case
+ */
+ const atRule = postcss.atRule({ name: "media", params: query });
+ atRule.append(ruleCopy);
+ rule.parent.insertAfter(rule, atRule);
+ }
+ });
+ });
+};
+
+export default (root: Root, options: Options) =>
+ applyGlobals(root, parseGlobals(options.globals, options));
diff --git a/compiler/css/extractRules.ts b/compiler/css/extractRules.ts
index eef3a04..55ca3cf 100644
--- a/compiler/css/extractRules.ts
+++ b/compiler/css/extractRules.ts
@@ -4,6 +4,7 @@ import { TransitionPart, AnimationPart } from "../../runtime/animationTypes";
import { StyleTuple } from "../../runtime/cssUtil";
import { varRegExp, varRegExpNonGlobal } from "../../runtime/cssRegExp";
import getRoot from "./getRoot";
+import applyGlobals from "./applyGlobals";
import { isDirectChildOfKeyframes } from "./util";
import {
Condition,
@@ -14,20 +15,20 @@ import {
KeyframeOfStyleTuples,
KeyframesDeclaration,
ComponentDefinition,
- StyleType
+ StyleType,
} from "./types";
const walkToArray = (
walker: (callback: (node: Node) => void) => void
): T[] => {
const nodes = [];
- walker(node => nodes.push(node));
+ walker((node) => nodes.push(node));
return nodes;
};
const getStyleTuples = (nodes: Node[]): StyleTuple[] =>
nodes
- .filter(node => node.type === "decl")
+ .filter((node) => node.type === "decl")
.map((node: Declaration) => [node.prop, node.value]);
const getStyleTuplesImportedVariables = (
@@ -35,11 +36,11 @@ const getStyleTuplesImportedVariables = (
): string[] => {
const importedVariablesSet = new Set();
- styleTuples.forEach(tuple => {
+ styleTuples.forEach((tuple) => {
const referencedVariableMatches = tuple[1].match(varRegExp);
if (referencedVariableMatches == null) return;
- referencedVariableMatches.forEach(match => {
+ referencedVariableMatches.forEach((match) => {
importedVariablesSet.add(match.match(varRegExpNonGlobal)[1]);
});
});
@@ -54,7 +55,7 @@ const transitionAttributes: Record = {
"transition-delay": "delay",
"transition-duration": "duration",
"transition-property": "property",
- "transition-timing-function": "timingFunction"
+ "transition-timing-function": "timingFunction",
};
const animationAttributes: Record = {
@@ -63,7 +64,7 @@ const animationAttributes: Record = {
"animation-duration": "duration",
"animation-name": "name",
"animation-timing-function": "timingFunction",
- "animation-iteration-count": "iterations"
+ "animation-iteration-count": "iterations",
};
const getTransitionAnimationParts = (
@@ -109,13 +110,13 @@ const filteredStyleTuples = (
styleTuples: StyleTuple[];
}> => {
return declarationRules
- .map(rule => {
- const styleTuples = getStyleTuples(rule.nodes).filter(styleTuple =>
+ .map((rule) => {
+ const styleTuples = getStyleTuples(rule.nodes).filter((styleTuple) =>
fn(styleTuple[0])
);
return { condition: getCondition(rule), styleTuples };
})
- .filter(style => style.styleTuples.length > 0);
+ .filter((style) => style.styleTuples.length > 0);
};
const getStyleTuplesMixinsForRule = (rule: Rule): StyleDeclaration[] => {
@@ -123,7 +124,7 @@ const getStyleTuplesMixinsForRule = (rule: Rule): StyleDeclaration[] => {
const groups: StyleDeclaration[] = [];
let currentStyleTuples = null;
- rule.nodes.forEach(node => {
+ rule.nodes.forEach((node) => {
switch (node.type) {
case "decl": {
const { prop, value } = node;
@@ -142,11 +143,12 @@ const getStyleTuplesMixinsForRule = (rule: Rule): StyleDeclaration[] => {
condition,
styleTuples: [],
// Set imported variables after
- importedVariables: null as any
+ importedVariables: null as any,
};
groups.push(currentStyleTuples);
}
currentStyleTuples.styleTuples.push([prop, value]);
+ break;
}
case "atrule": {
if ((node as AtRule).name !== "include") {
@@ -157,13 +159,13 @@ const getStyleTuplesMixinsForRule = (rule: Rule): StyleDeclaration[] => {
groups.push({
type: StyleType.Mixin,
condition,
- substitution: (node as AtRule).params
+ substitution: (node as AtRule).params,
});
}
}
});
- groups.forEach(group => {
+ groups.forEach((group) => {
if (group.type === StyleType.Tuples) {
group.importedVariables = getStyleTuplesImportedVariables(
group.styleTuples
@@ -175,12 +177,12 @@ const getStyleTuplesMixinsForRule = (rule: Rule): StyleDeclaration[] => {
};
const getKeyframes = (atRule: AtRule): KeyframesDeclaration => {
- const sequence = walkToArray(cb => atRule.walkRules(cb))
+ const sequence = walkToArray((cb) => atRule.walkRules(cb))
.reduce((accum: KeyframeOfStyleTuples[], rule) => {
const timeSelectors = rule.selector
.split(",")
- .map(selector => selector.trim())
- .map(selector => {
+ .map((selector) => selector.trim())
+ .map((selector) => {
if (/[\d.]%/.test(selector)) return parseFloat(selector) / 100;
if (/from/i.test(selector)) return 0;
if (/to/i.test(selector)) return 1;
@@ -188,13 +190,13 @@ const getKeyframes = (atRule: AtRule): KeyframesDeclaration => {
});
const styleTuples = getStyleTuples(
- walkToArray(cb => rule.walkDecls(cb))
+ walkToArray((cb) => rule.walkDecls(cb))
);
const newKeyframeBlocks: KeyframeOfStyleTuples[] = timeSelectors.map(
- time => ({
+ (time) => ({
time,
- styleTuples
+ styleTuples,
})
);
return accum.concat(newKeyframeBlocks);
@@ -211,11 +213,12 @@ const getKeyframes = (atRule: AtRule): KeyframesDeclaration => {
return { name, sequence, importedVariables };
};
-export default (inputCss: string): ComponentDefinition => {
+export default (inputCss: string, globals?: any): ComponentDefinition => {
const { root, propTypes } = getRoot(inputCss);
+ if (globals != null) applyGlobals(root, globals);
- const declarationRules = walkToArray(cb => root.walkRules(cb)).filter(
- rule => !isDirectChildOfKeyframes(rule)
+ const declarationRules = walkToArray((cb) => root.walkRules(cb)).filter(
+ (rule) => !isDirectChildOfKeyframes(rule)
);
const styles: StyleDeclaration[] = declarationRules
@@ -224,38 +227,39 @@ export default (inputCss: string): ComponentDefinition => {
[]
)
.filter(
- style => style.type === StyleType.Mixin || style.styleTuples.length !== 0
+ (style) =>
+ style.type === StyleType.Mixin || style.styleTuples.length !== 0
);
const transitions: TransitionDeclaration[] = filteredStyleTuples(
declarationRules,
- property => property in transitionAttributes
+ (property) => property in transitionAttributes
).map(({ condition, styleTuples }) => ({
condition,
part: getTransitionAnimationParts(styleTuples, transitionAttributes),
- importedVariables: getStyleTuplesImportedVariables(styleTuples)
+ importedVariables: getStyleTuplesImportedVariables(styleTuples),
}));
const animations: AnimationDeclaration[] = filteredStyleTuples(
declarationRules,
- property => property in animationAttributes
+ (property) => property in animationAttributes
).map(({ condition, styleTuples }) => ({
condition,
part: getTransitionAnimationParts(styleTuples, animationAttributes),
- importedVariables: getStyleTuplesImportedVariables(styleTuples)
+ importedVariables: getStyleTuplesImportedVariables(styleTuples),
}));
- const keyframes: KeyframesDeclaration[] = walkToArray(cb =>
+ const keyframes: KeyframesDeclaration[] = walkToArray((cb) =>
root.walkAtRules(cb)
)
- .filter(atRule => atRule.name === "keyframes")
+ .filter((atRule) => atRule.name === "keyframes")
.map(getKeyframes);
const exportedVariables: VariableExportDeclaration[] = filteredStyleTuples(
declarationRules,
- property => property.startsWith("--")
+ (property) => property.startsWith("--")
).reduce((accum, { condition, styleTuples }) => {
- const declarations = styleTuples.map(styleTuple => {
+ const declarations = styleTuples.map((styleTuple) => {
const importedVariables = getStyleTuplesImportedVariables([styleTuple]);
const name = styleTuple[0].substring("--".length);
const value = styleTuple[1];
@@ -270,6 +274,6 @@ export default (inputCss: string): ComponentDefinition => {
transitions,
animations,
keyframes,
- exportedVariables
+ exportedVariables,
};
};
diff --git a/compiler/css/getRoot.ts b/compiler/css/getRoot.ts
index 8cf0077..fdb81f9 100644
--- a/compiler/css/getRoot.ts
+++ b/compiler/css/getRoot.ts
@@ -1,4 +1,3 @@
-// @flow
/* eslint-disable no-param-reassign */
import postcss, { Root, AtRule, Node } from "postcss";
import selectorParser from "postcss-selector-parser";
@@ -52,7 +51,7 @@ const nestNode = (node: Node) => {
export default (
inputCss: string,
- allowCombinators: boolean = false
+ allowCombinators = false
): { root: Root; propTypes: PropTypes } => {
const transformedInput = inputCss.replace(/(\[\s*)@(\w)/g, `$1cssta|$2`);
const root = postcss.parse(transformedInput);
@@ -60,15 +59,15 @@ export default (
iterateChildren(root, nestNode);
const propTypes = {};
- const validateAndTransformSelectors = selectorParser(container => {
- container.each(selector => {
+ const validateAndTransformSelectors = selectorParser((container) => {
+ container.each((selector) => {
if (selector.type !== "selector") {
throw new Error("Expected selector");
}
let didScopeNode = false;
- selector.walk(node => {
+ selector.walk((node) => {
if (node.type === "combinator" && !allowCombinators) {
throw new Error("Invalid use of combinator in selector");
} else if (node.type === "nesting") {
@@ -81,7 +80,7 @@ export default (
? node.parent.parent.parent
: node.parent;
const isTiedToNesting = nodeThatMustBeTiedToNesting.nodes.some(
- child => child.type === "nesting"
+ (child) => child.type === "nesting"
);
if (!isTiedToNesting) {
@@ -128,7 +127,7 @@ export default (
});
});
- root.walkRules(rule => {
+ root.walkRules((rule) => {
if (!isDirectChildOfKeyframes(rule)) {
rule.selector = validateAndTransformSelectors.processSync(rule.selector);
}
diff --git a/compiler/css/types.ts b/compiler/css/types.ts
index 8b9dc1a..f762f09 100644
--- a/compiler/css/types.ts
+++ b/compiler/css/types.ts
@@ -39,7 +39,7 @@ export type VariableExportDeclaration = {
export enum StyleType {
Tuples,
- Mixin
+ Mixin,
}
export type StyleTuplesDeclaration = {
diff --git a/compiler/babel/options.ts b/compiler/options.ts
similarity index 61%
rename from compiler/babel/options.ts
rename to compiler/options.ts
index ff6e073..f224698 100644
--- a/compiler/babel/options.ts
+++ b/compiler/options.ts
@@ -1,5 +1,5 @@
export type Options = {
jsx?: boolean;
- globals?: Record;
+ globals?: Record | string;
globalVarsOnly?: boolean;
};
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
index aa6a699..dfeb388 100644
--- a/docs/Gemfile.lock
+++ b/docs/Gemfile.lock
@@ -205,7 +205,7 @@ GEM
jekyll-seo-tag (~> 2.1)
minitest (5.11.3)
multipart-post (2.1.1)
- nokogiri (1.10.4)
+ nokogiri (1.10.8)
mini_portile2 (~> 2.4.0)
octokit (4.14.0)
sawyer (~> 0.8.0, >= 0.5.3)
@@ -219,7 +219,7 @@ GEM
ruby-enum (0.7.2)
i18n
ruby_dep (1.5.0)
- rubyzip (1.2.3)
+ rubyzip (2.0.0)
safe_yaml (1.0.5)
sass (3.7.4)
sass-listen (~> 4.0.0)
diff --git a/docs/media-queries.md b/docs/media-queries.md
index c41ab3d..052acfa 100644
--- a/docs/media-queries.md
+++ b/docs/media-queries.md
@@ -25,7 +25,7 @@ const Title = cssta(Text)`
@media (platform: ios) {
font-family: "San Francisco";
}
-};
+`;
```
Just like in CSS, rules can be nested in media queries.
@@ -55,7 +55,7 @@ const Title = cssta(Text)`
@media (platform: ios) and (min-width: 600px) {
font-family: "San Francisco Display";
}
-};
+`;
```
We also support viewport units.
diff --git a/native.d.ts b/native.d.ts
new file mode 100644
index 0000000..d7044ac
--- /dev/null
+++ b/native.d.ts
@@ -0,0 +1,17 @@
+declare module 'cssta/native' {
+ type CssConstructor = (
+ css: TemplateStringsArray,
+ ...values: (string | number | (() => any))[]
+ ) => T;
+
+ type ComponentConstructor = (
+ component: React.ElementType,
+ ) => CssConstructor>>;
+
+ type Mixin = {
+ mixin: CssConstructor;
+ };
+
+ const styled: ComponentConstructor & Mixin;
+ export default styled;
+}
diff --git a/package.json b/package.json
index 3414668..eca44ff 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,11 @@
{
"name": "cssta",
- "version": "0.9.3",
+ "version": "0.10.1",
"main": "index.js",
"license": "MIT",
"scripts": {
"test": "jest",
+ "build": "tsc",
"prepack": "tsc",
"clean": "git clean -xf compiler runtime",
"readme": "cp ./docs/index.md ./README.md; sed -i -e 's%{{ site.baseurl }}%https://jacobp100.github.io/cssta%g' ./README.md; sed -i -e 's/{% raw %}//g' ./README.md; sed -i -e 's/{% endraw %}//g' ./README.md; sed -i -e '1,5d' ./README.md; rm ./README.md-e"
@@ -26,37 +27,48 @@
"url": "https://github.com/jacobp100/cssta"
},
"files": [
- "compiler",
- "runtime",
+ "compiler/**/*.js",
+ "runtime/**/*.js",
"native.macro.js",
- "babel-plugin.js"
+ "babel-plugin.js",
+ "native.d.ts"
],
"devDependencies": {
- "@babel/core": "^7.6.2",
- "@babel/generator": "^7.5.5",
- "@babel/plugin-transform-modules-commonjs": "^7.5.0",
- "@babel/preset-env": "^7.6.2",
- "@babel/preset-typescript": "^7.6.0",
- "@types/jest": "^24.0.18",
- "@types/node": "^12.7.11",
- "@types/react": "^16.9.5",
- "@types/react-native": "^0.60.18",
- "@types/react-test-renderer": "^16.9.0",
- "babel-plugin-macros": "^2.6.1",
- "eslint": "^6.3.0",
+ "@babel/core": "^7.7.5",
+ "@babel/generator": "^7.7.4",
+ "@babel/plugin-transform-modules-commonjs": "^7.7.5",
+ "@babel/preset-env": "^7.7.6",
+ "@babel/preset-typescript": "^7.7.4",
+ "@types/jest": "^24.0.23",
+ "@types/node": "^12.12.17",
+ "@types/react-test-renderer": "^16.9.1",
+ "@typescript-eslint/eslint-plugin": "^2.11.0",
+ "@typescript-eslint/parser": "^2.11.0",
+ "babel-plugin-macros": "^2.8.0",
+ "eslint": "^6.7.2",
"jest": "^24.9.0",
- "prettier": "^1.18.2",
- "react": "^16.10.2",
- "react-test-renderer": "^16.10.2",
- "typescript": "^3.6.3"
+ "prettier": "^2.2.1",
+ "react": "^16.12.0",
+ "react-test-renderer": "^16.12.0",
+ "typescript": "^3.7.3"
},
"dependencies": {
+ "@types/react": "16.9.5",
+ "@types/react-native": "^0.60.25",
"css-color-function": "^1.3.3",
- "css-to-react-native": "^2.3.2",
- "postcss": "^7.0.17",
+ "css-to-react-native": "^3.0.0",
+ "postcss": "^7.0.24",
"postcss-selector-parser": "^6.0.2"
},
"jest": {
- "testRegex": "/__tests__/.*\\.ts?$"
+ "testRegex": "/__tests__/.*\\.ts?$",
+ "moduleFileExtensions": [
+ "ts",
+ "tsx",
+ "js",
+ "jsx",
+ "json",
+ "node"
+ ]
}
}
diff --git a/runtime/__mocks__/react-native.ts b/runtime/__mocks__/react-native.ts
index 97dc74a..ed9fd97 100644
--- a/runtime/__mocks__/react-native.ts
+++ b/runtime/__mocks__/react-native.ts
@@ -2,7 +2,7 @@ export const Easing = {
linear: "linear",
ease: "ease",
bezier: (a: number, b: number, c: number, d: number) =>
- `bezier(${a}, ${b}, ${c}, ${d})`
+ `bezier(${a}, ${b}, ${c}, ${d})`,
};
export class AnimatedNode {
@@ -33,7 +33,7 @@ export class AnimatedNode {
}
export const Animated = {
- Value: function(value: number) {
+ Value: function (value: number) {
return new AnimatedNode("value", value);
},
timing: (value: AnimatedNode, options: any) =>
@@ -43,7 +43,7 @@ export const Animated = {
parallel: (value: AnimatedNode, options: any) =>
new AnimatedNode("parallel", value, options),
sequence: (value: AnimatedNode, options: any) =>
- new AnimatedNode("sequence", value, options)
+ new AnimatedNode("sequence", value, options),
};
export const StyleSheet = {
@@ -52,5 +52,5 @@ export const StyleSheet = {
? Object.assign({}, ...values.map(StyleSheet.flatten))
: values != null
? values
- : {}
+ : {},
};
diff --git a/runtime/__tests__/animationUtil.ts b/runtime/__tests__/animationUtil.ts
index fe6107a..6843cfb 100644
--- a/runtime/__tests__/animationUtil.ts
+++ b/runtime/__tests__/animationUtil.ts
@@ -12,7 +12,7 @@ it("Inteprolates string values", () => {
expect(interpolated).toEqual({
type: "interpolate",
value: 0,
- options: { inputRange: [0, 1], outputRange: ["red", "green"] }
+ options: { inputRange: [0, 1], outputRange: ["red", "green"] },
});
});
@@ -22,7 +22,7 @@ it("Inteprolates number values with interpolate numbers = false", () => {
expect(interpolated).toEqual({
type: "interpolate",
value: 0,
- options: { inputRange: [0, 1], outputRange: [5, 10] }
+ options: { inputRange: [0, 1], outputRange: [5, 10] },
});
});
@@ -38,7 +38,7 @@ it("Inteprolates transforms", () => {
[0, 1],
[
[{ translateY: 5 }, { rotate: "30deg" }],
- [{ translateY: 10 }, { rotate: "45deg" }]
+ [{ translateY: 10 }, { rotate: "45deg" }],
],
animation,
false
@@ -48,16 +48,16 @@ it("Inteprolates transforms", () => {
translateY: {
type: "interpolate",
value: 0,
- options: { inputRange: [0, 1], outputRange: [5, 10] }
- }
+ options: { inputRange: [0, 1], outputRange: [5, 10] },
+ },
},
{
rotate: {
type: "interpolate",
value: 0,
- options: { inputRange: [0, 1], outputRange: ["30deg", "45deg"] }
- }
- }
+ options: { inputRange: [0, 1], outputRange: ["30deg", "45deg"] },
+ },
+ },
]);
});
@@ -68,7 +68,7 @@ it("Logs console error when animated transform nodes don't match", () => {
[0, 1],
[
[{ translateY: 5 }, { rotate: "30deg" }],
- [{ translateY: 10 }, { rotate: "45deg" }, { scale: 3 }]
+ [{ translateY: 10 }, { rotate: "45deg" }, { scale: 3 }],
],
animation,
false
@@ -87,7 +87,7 @@ it("Doesn't crash when transform nodes don't match", () => {
[0, 1],
[
[{ translateY: 10 }, { rotate: "45deg" }, { scale: 3 }],
- [{ translateY: 5 }, { rotate: "30deg" }]
+ [{ translateY: 5 }, { rotate: "30deg" }],
],
animation,
false
diff --git a/runtime/__tests__/useAnimation.ts b/runtime/__tests__/useAnimation.ts
index c125cfa..b593a34 100644
--- a/runtime/__tests__/useAnimation.ts
+++ b/runtime/__tests__/useAnimation.ts
@@ -8,15 +8,15 @@ it("Fires animation on creation", () => {
const keyframes = {
test: [
{ time: 0, style: { color: "red" } },
- { time: 1, style: { color: "blue" } }
- ]
+ { time: 1, style: { color: "blue" } },
+ ],
};
const animation: Animation = {
delay: 0,
duration: 1000,
iterations: 1,
name: "test",
- timingFunction: "linear"
+ timingFunction: "linear",
};
const startSpy = jest.spyOn(AnimatedNode.prototype, "start");
@@ -37,7 +37,7 @@ it("Fires animation on creation", () => {
expect(animationStyle.color).toEqual({
type: "interpolate",
value: 0,
- options: { inputRange: [0, 1], outputRange: ["red", "blue"] }
+ options: { inputRange: [0, 1], outputRange: ["red", "blue"] },
});
expect(startSpy).toHaveReturnedWith({
type: "parallel",
@@ -45,9 +45,9 @@ it("Fires animation on creation", () => {
{
type: "timing",
value: { type: "value", value: 0 },
- options: { delay: 0, duration: 1000, easing: "linear", toValue: 1 }
- }
- ]
+ options: { delay: 0, duration: 1000, easing: "linear", toValue: 1 },
+ },
+ ],
});
expect(setValueSpy).toHaveBeenCalledWith(0);
expect(setValueSpy).toHaveReturnedWith({ type: "value", value: 0 });
@@ -61,8 +61,8 @@ it("Handles no animation", () => {
const keyframes = {
test: [
{ time: 0, style: { color: "red" } },
- { time: 1, style: { color: "blue" } }
- ]
+ { time: 1, style: { color: "blue" } },
+ ],
};
const startSpy = jest.spyOn(AnimatedNode.prototype, "start");
@@ -89,15 +89,15 @@ it("Handles going from no animation to an animation", () => {
const keyframes = {
test: [
{ time: 0, style: { color: "red" } },
- { time: 1, style: { color: "blue" } }
- ]
+ { time: 1, style: { color: "blue" } },
+ ],
};
const animation: Animation = {
delay: 0,
duration: 1000,
iterations: 1,
name: "test",
- timingFunction: "linear"
+ timingFunction: "linear",
};
const startSpy = jest.spyOn(AnimatedNode.prototype, "start");
@@ -120,7 +120,7 @@ it("Handles going from no animation to an animation", () => {
expect(style[1].color).toEqual({
type: "interpolate",
value: 0,
- options: { inputRange: [0, 1], outputRange: ["red", "blue"] }
+ options: { inputRange: [0, 1], outputRange: ["red", "blue"] },
});
expect(startSpy).toHaveReturnedWith({
type: "parallel",
@@ -128,9 +128,9 @@ it("Handles going from no animation to an animation", () => {
{
type: "timing",
value: { type: "value", value: 0 },
- options: { delay: 0, duration: 1000, easing: "linear", toValue: 1 }
- }
- ]
+ options: { delay: 0, duration: 1000, easing: "linear", toValue: 1 },
+ },
+ ],
});
expect(setValueSpy).toHaveBeenCalledWith(0);
expect(setValueSpy).toHaveReturnedWith({ type: "value", value: 0 });
@@ -144,26 +144,26 @@ it("Handles changing animation to an animation", () => {
const keyframes = {
test: [
{ time: 0, style: { color: "red" } },
- { time: 1, style: { color: "blue" } }
+ { time: 1, style: { color: "blue" } },
],
other: [
{ time: 0, style: { color: "orange" } },
- { time: 1, style: { color: "purple" } }
- ]
+ { time: 1, style: { color: "purple" } },
+ ],
};
const animation1: Animation = {
delay: 0,
duration: 1000,
iterations: 1,
name: "test",
- timingFunction: "linear"
+ timingFunction: "linear",
};
const animation2: Animation = {
delay: 0,
duration: 2000,
iterations: 1,
name: "other",
- timingFunction: "linear"
+ timingFunction: "linear",
};
const startSpy = jest.spyOn(AnimatedNode.prototype, "start");
@@ -185,7 +185,7 @@ it("Handles changing animation to an animation", () => {
expect(animationStyle.color).toEqual({
type: "interpolate",
value: 0,
- options: { inputRange: [0, 1], outputRange: ["red", "blue"] }
+ options: { inputRange: [0, 1], outputRange: ["red", "blue"] },
});
expect(startSpy).toHaveLastReturnedWith({
type: "parallel",
@@ -193,9 +193,9 @@ it("Handles changing animation to an animation", () => {
{
type: "timing",
value: { type: "value", value: 0 },
- options: { delay: 0, duration: 1000, easing: "linear", toValue: 1 }
- }
- ]
+ options: { delay: 0, duration: 1000, easing: "linear", toValue: 1 },
+ },
+ ],
});
expect(setValueSpy).toHaveBeenLastCalledWith(0);
expect(setValueSpy).toHaveLastReturnedWith({ type: "value", value: 0 });
@@ -206,7 +206,7 @@ it("Handles changing animation to an animation", () => {
expect(animationStyle.color).toEqual({
type: "interpolate",
value: 0,
- options: { inputRange: [0, 1], outputRange: ["orange", "purple"] }
+ options: { inputRange: [0, 1], outputRange: ["orange", "purple"] },
});
expect(startSpy).toHaveLastReturnedWith({
type: "parallel",
@@ -214,9 +214,9 @@ it("Handles changing animation to an animation", () => {
{
type: "timing",
value: { type: "value", value: 0 },
- options: { delay: 0, duration: 2000, easing: "linear", toValue: 1 }
- }
- ]
+ options: { delay: 0, duration: 2000, easing: "linear", toValue: 1 },
+ },
+ ],
});
expect(setValueSpy).toHaveBeenLastCalledWith(0);
expect(setValueSpy).toHaveLastReturnedWith({ type: "value", value: 0 });
@@ -230,15 +230,15 @@ it("Fires animation on creation", () => {
const keyframes = {
test: [
{ time: 0, style: { color: "red", opacity: 0 } },
- { time: 1, style: { color: "blue", opacity: 1 } }
- ]
+ { time: 1, style: { color: "blue", opacity: 1 } },
+ ],
};
const animation: Animation = {
delay: 0,
duration: 1000,
iterations: 1,
name: "test",
- timingFunction: "linear"
+ timingFunction: "linear",
};
let animationStyle: any;
@@ -262,15 +262,15 @@ it("Handles looping", () => {
const keyframes = {
test: [
{ time: 0, style: { color: "red" } },
- { time: 1, style: { color: "blue" } }
- ]
+ { time: 1, style: { color: "blue" } },
+ ],
};
const animation: Animation = {
delay: 0,
duration: 1000,
iterations: 3,
name: "test",
- timingFunction: "linear"
+ timingFunction: "linear",
};
const startSpy = jest.spyOn(AnimatedNode.prototype, "start");
@@ -297,19 +297,19 @@ it("Handles looping", () => {
delay: 0,
duration: 1000,
easing: "linear",
- toValue: 1
- }
+ toValue: 1,
+ },
},
{
type: "timing",
value: { type: "value", value: 0 },
- options: { duration: 0, toValue: 0 }
- }
- ]
+ options: { duration: 0, toValue: 0 },
+ },
+ ],
},
- options: { iterations: 3 }
- }
- ]
+ options: { iterations: 3 },
+ },
+ ],
});
instance.unmount();
@@ -323,7 +323,7 @@ it("Handles no animation", () => {
duration: 1000,
iterations: 3,
name: null,
- timingFunction: "linear"
+ timingFunction: "linear",
};
const startSpy = jest.spyOn(AnimatedNode.prototype, "start");
@@ -343,20 +343,20 @@ it("Handles no animation", () => {
it("Handles missing start frame", () => {
const keyframes = {
- test: [{ time: 1, style: { color: "blue" } }]
+ test: [{ time: 1, style: { color: "blue" } }],
};
const animation: Animation = {
delay: 0,
duration: 1000,
iterations: 3,
name: "test",
- timingFunction: "linear"
+ timingFunction: "linear",
};
let animationStyle: any;
const Test = () => {
[, /* inputStyle */ animationStyle] = useAnimation(keyframes, animation, {
- color: "red"
+ color: "red",
});
return null;
};
@@ -369,9 +369,9 @@ it("Handles missing start frame", () => {
value: 0,
options: {
inputRange: [0, 1],
- outputRange: ["red", "blue"]
- }
- }
+ outputRange: ["red", "blue"],
+ },
+ },
});
instance.unmount();
@@ -379,20 +379,20 @@ it("Handles missing start frame", () => {
it("Handles missing end frame", () => {
const keyframes = {
- test: [{ time: 0, style: { color: "blue" } }]
+ test: [{ time: 0, style: { color: "blue" } }],
};
const animation: Animation = {
delay: 0,
duration: 1000,
iterations: 3,
name: "test",
- timingFunction: "linear"
+ timingFunction: "linear",
};
let animationStyle: any;
const Test = () => {
[, /* inputStyle */ animationStyle] = useAnimation(keyframes, animation, {
- color: "red"
+ color: "red",
});
return null;
};
@@ -405,9 +405,9 @@ it("Handles missing end frame", () => {
value: 0,
options: {
inputRange: [0, 1],
- outputRange: ["blue", "red"]
- }
- }
+ outputRange: ["blue", "red"],
+ },
+ },
});
instance.unmount();
diff --git a/runtime/__tests__/useCustomPropertyStyle.ts b/runtime/__tests__/useCustomPropertyStyle.ts
index ad44771..de2233d 100644
--- a/runtime/__tests__/useCustomPropertyStyle.ts
+++ b/runtime/__tests__/useCustomPropertyStyle.ts
@@ -7,7 +7,7 @@ import VariablesContext from "../VariablesContext";
it("Converts style tuples and variables into a style object", () => {
const styleTuples: [string, string][] = [
["color", "red"],
- ["margin", "var(--small)"]
+ ["margin", "var(--small)"],
];
let style: any;
@@ -30,7 +30,7 @@ it("Converts style tuples and variables into a style object", () => {
marginTop: 10,
marginRight: 10,
marginBottom: 10,
- marginLeft: 10
+ marginLeft: 10,
});
instance.unmount();
diff --git a/runtime/__tests__/useTransition.ts b/runtime/__tests__/useTransition.ts
index f29a272..7020ff1 100644
--- a/runtime/__tests__/useTransition.ts
+++ b/runtime/__tests__/useTransition.ts
@@ -9,8 +9,8 @@ it("Transitions when changing styles", () => {
property: "color",
delay: 0,
duration: 1000,
- timingFunction: "linear"
- }
+ timingFunction: "linear",
+ },
];
let transitionStyle: any;
@@ -27,8 +27,8 @@ it("Transitions when changing styles", () => {
color: {
options: { inputRange: [0, 1], outputRange: ["red", "red"] },
type: "interpolate",
- value: 0
- }
+ value: 0,
+ },
});
instance.update(React.createElement(Test, { styles: { color: "blue" } }));
@@ -37,8 +37,8 @@ it("Transitions when changing styles", () => {
color: {
options: { inputRange: [0, 1], outputRange: ["red", "blue"] },
type: "interpolate",
- value: 0
- }
+ value: 0,
+ },
});
instance.unmount();
@@ -50,8 +50,8 @@ it("Does not transition when style has no value", () => {
property: "color",
delay: 0,
duration: 1000,
- timingFunction: "linear"
- }
+ timingFunction: "linear",
+ },
];
let transitionStyle: any;
@@ -73,8 +73,8 @@ it("Handles going from no value to a new value", () => {
property: "color",
delay: 0,
duration: 1000,
- timingFunction: "linear"
- }
+ timingFunction: "linear",
+ },
];
let transitionStyle: any;
@@ -97,8 +97,8 @@ it("Handles going from no value to a new value", () => {
color: {
options: { inputRange: [0, 1], outputRange: ["red", "blue"] },
type: "interpolate",
- value: 0
- }
+ value: 0,
+ },
});
instance.unmount();
@@ -110,8 +110,8 @@ it("Handles adding more transitioned values", () => {
property: "color",
delay: 0,
duration: 1000,
- timingFunction: "linear"
- }
+ timingFunction: "linear",
+ },
];
const transition2: Transition = [
...transition1,
@@ -119,8 +119,8 @@ it("Handles adding more transitioned values", () => {
property: "opacity",
delay: 0,
duration: 1000,
- timingFunction: "linear"
- }
+ timingFunction: "linear",
+ },
];
let transitionStyle: any;
@@ -132,7 +132,7 @@ it("Handles adding more transitioned values", () => {
const instance = create(
React.createElement(Test, {
styles: { color: "red", opacity: 0 },
- transition: transition1
+ transition: transition1,
})
);
@@ -140,14 +140,14 @@ it("Handles adding more transitioned values", () => {
color: {
options: { inputRange: [0, 1], outputRange: ["red", "red"] },
type: "interpolate",
- value: 0
- }
+ value: 0,
+ },
});
instance.update(
React.createElement(Test, {
styles: { color: "blue", opacity: 0.5 },
- transition: transition1
+ transition: transition1,
})
);
@@ -155,14 +155,14 @@ it("Handles adding more transitioned values", () => {
color: {
options: { inputRange: [0, 1], outputRange: ["red", "blue"] },
type: "interpolate",
- value: 0
- }
+ value: 0,
+ },
});
instance.update(
React.createElement(Test, {
styles: { color: "green", opacity: 1 },
- transition: transition2
+ transition: transition2,
})
);
@@ -170,9 +170,9 @@ it("Handles adding more transitioned values", () => {
color: {
options: { inputRange: [0, 1], outputRange: ["blue", "green"] },
type: "interpolate",
- value: 0
+ value: 0,
},
- opacity: { type: "value", value: 0.5 }
+ opacity: { type: "value", value: 0.5 },
});
instance.unmount();
diff --git a/runtime/animationUtil.ts b/runtime/animationUtil.ts
index ed081c4..6aeaf01 100644
--- a/runtime/animationUtil.ts
+++ b/runtime/animationUtil.ts
@@ -23,7 +23,7 @@ export const interpolateValue = (
if (process.env.NODE_ENV !== "production") {
const currentProperties = String(firstValue.map(Object.keys));
// Not the *best* practise here...
- const transformsAreConsistent = outputRange.every(range => {
+ const transformsAreConsistent = outputRange.every((range) => {
const rangeProperties = String(
(range as TransformInterpolation).map(Object.keys)
);
@@ -40,7 +40,7 @@ export const interpolateValue = (
return firstValue.map((transform, index) => {
const transformProperty = Object.keys(transform)[0];
- const innerOutputRange = outputRange.map(range => {
+ const innerOutputRange = outputRange.map((range) => {
const rangeValue = range[index];
return rangeValue != null ? rangeValue[transformProperty] : null;
});
@@ -48,7 +48,7 @@ export const interpolateValue = (
// We *have* to interpolate even numeric values, as we will always animate between 0--1
const interpolation = animation.interpolate({
inputRange,
- outputRange: innerOutputRange
+ outputRange: innerOutputRange,
});
return { [transformProperty]: interpolation };
@@ -60,5 +60,5 @@ export const easingFunctions: Record = {
ease: Easing.ease,
"ease-in": Easing.bezier(0.42, 0, 1.0, 1.0),
"ease-out": Easing.bezier(0, 0, 0.58, 1.0),
- "ease-in-out": Easing.bezier(0.42, 0, 0.58, 1.0)
+ "ease-in-out": Easing.bezier(0.42, 0, 0.58, 1.0),
};
diff --git a/runtime/css-transforms/calc.ts b/runtime/css-transforms/calc.ts
new file mode 100644
index 0000000..989f4ae
--- /dev/null
+++ b/runtime/css-transforms/calc.ts
@@ -0,0 +1,79 @@
+// Two levels of nesting
+const calcFnRe = /calc\(((?:[^(]|\((?:[^(]|\([^(]+\))+\))+)\)/g;
+const bracketsRe = /\(([^)]+)\)/g;
+const addSubtractRe = /([^+-]+)([+-])(.*)/;
+const multiplyDivideRe = /([^*/]+)([*/])(.*)/;
+const unitRe = /([\d.]+)(px|)/;
+
+type Node = { value: number; unit: "" | "px" };
+
+const resolveValue = (value: string): Node | null => {
+ const match = value.match(unitRe);
+ if (match === null) return null;
+ return { value: Number(match[1]), unit: match[2] as any };
+};
+
+const resolveMultiplyDivide = (value: string): Node | null => {
+ const match = value.match(multiplyDivideRe);
+ if (match === null) return resolveValue(value);
+
+ const lhs = resolveValue(match[1]);
+ if (lhs === null) return null;
+ const rhs = resolveMultiplyDivide(match[3]);
+ if (rhs === null) return null;
+
+ if (match[2] === "*") {
+ if (lhs.unit.length === 0) {
+ return { value: lhs.value * rhs.value, unit: rhs.unit };
+ } else if (rhs.unit.length === 0) {
+ return { value: lhs.value * rhs.value, unit: lhs.unit };
+ }
+ } else if (match[2] === "/") {
+ if (rhs.unit.length === 0) {
+ return { value: lhs.value / rhs.value, unit: lhs.unit };
+ }
+ }
+
+ return null;
+};
+
+const resolveAddSubtract = (value: string): Node | null => {
+ const match = value.match(addSubtractRe);
+ if (match === null) return resolveMultiplyDivide(value);
+
+ const lhs = resolveMultiplyDivide(match[1]);
+ if (lhs === null) return null;
+ const rhs = resolveAddSubtract(match[3]);
+ if (rhs === null) return null;
+
+ if (lhs.unit !== rhs.unit) return null;
+
+ return {
+ value: match[2] === "+" ? lhs.value + rhs.value : lhs.value - rhs.value,
+ unit: lhs.unit,
+ };
+};
+
+const resolveBrackets = (value: string): string => {
+ const out = value.replace(bracketsRe, (_, inner) => resolveBrackets(inner));
+ const node = resolveAddSubtract(out);
+
+ if (node !== null) {
+ return `${node.value}${node.unit}`;
+ } else {
+ throw new Error("Failed to parse calc");
+ }
+};
+
+export default (inputValue: string): string => {
+ let value = inputValue;
+ let didReplace: boolean;
+ do {
+ didReplace = false;
+ value = value.replace(calcFnRe, (_, rest) => {
+ didReplace = true;
+ return resolveBrackets(rest);
+ });
+ } while (didReplace);
+ return value;
+};
diff --git a/runtime/cssUtil.ts b/runtime/cssUtil.ts
index eb2009d..9d905e0 100644
--- a/runtime/cssUtil.ts
+++ b/runtime/cssUtil.ts
@@ -1,6 +1,7 @@
import cssToReactNative, { transformRawValue } from "css-to-react-native";
import transformVariables from "./css-transforms/variables";
import transformColors from "./css-transforms/colors";
+import transformCalc from "./css-transforms/calc";
import { Variables } from "./VariablesContext";
// Viewport (hopefully) already transformed
@@ -19,6 +20,7 @@ export const transformStyleTuples = (
transformedValue = transformVariables(transformedValue, appliedVariables);
}
transformedValue = transformColors(transformedValue);
+ transformedValue = transformCalc(transformedValue);
return [property, transformedValue];
});
return cssToReactNative(transformedStyleTuples);
diff --git a/runtime/flattenAnimation.ts b/runtime/flattenAnimation.ts
index b6e2366..ed1b9a1 100644
--- a/runtime/flattenAnimation.ts
+++ b/runtime/flattenAnimation.ts
@@ -1,7 +1,7 @@
import {
getDurationInMs,
durationRegExp,
- easingRegExp
+ easingRegExp,
} from "./animationShorthandUtil";
import { Animation, AnimationPart } from "./animationTypes";
@@ -15,7 +15,7 @@ const defaultValue = (): Animation => ({
duration: 0,
iterations: 1,
name: null,
- timingFunction: "ease"
+ timingFunction: "ease",
});
const TIMING_FUNCTION = 1 << 0;
@@ -28,7 +28,7 @@ const getAnimationShorthand = (shorthandParts: string[]) => {
const accum = defaultValue();
let set = 0;
- shorthandParts.forEach(part => {
+ shorthandParts.forEach((part) => {
if (!(set & TIMING_FUNCTION) && easingRegExp.test(part)) {
accum.timingFunction = part as any;
set &= TIMING_FUNCTION;
@@ -54,7 +54,7 @@ const getAnimationShorthand = (shorthandParts: string[]) => {
export default (styles: AnimationPart[]): Animation => {
let accum = defaultValue();
- styles.forEach(style => {
+ styles.forEach((style) => {
if (style == null) return;
if (style._ != null) {
diff --git a/runtime/flattenTransition.ts b/runtime/flattenTransition.ts
index 626f84a..5875eec 100644
--- a/runtime/flattenTransition.ts
+++ b/runtime/flattenTransition.ts
@@ -2,7 +2,7 @@ import { getPropertyName } from "css-to-react-native";
import {
getDurationInMs,
durationRegExp,
- easingRegExp
+ easingRegExp,
} from "./animationShorthandUtil";
import { Transition, TimingFunction, TransitionPart } from "./animationTypes";
@@ -25,11 +25,11 @@ const getTransitionShorthand = (
delay: 0,
duration: 0,
timingFunction: "ease",
- property: null
+ property: null,
};
let set = 0;
- shorthandParts.forEach(part => {
+ shorthandParts.forEach((part) => {
if (!(set & TIMING_FUNCTION) && easingRegExp.test(part)) {
accum.timingFunction = part as any;
set &= TIMING_FUNCTION;
@@ -58,7 +58,7 @@ export default (styles: TransitionPart[]): Transition => {
let timingFunctions = [];
let properties: string[] = [];
- styles.forEach(style => {
+ styles.forEach((style) => {
if (style == null) return;
if (style._ != null) {
@@ -67,7 +67,7 @@ export default (styles: TransitionPart[]): Transition => {
timingFunctions = [];
properties = [];
- split(style._).forEach(shorthand => {
+ split(style._).forEach((shorthand) => {
const resolved = getTransitionShorthand(shorthand.trim().split(/\s+/));
const property = resolved.property;
diff --git a/runtime/useAnimation.ts b/runtime/useAnimation.ts
index e76e023..006ad19 100644
--- a/runtime/useAnimation.ts
+++ b/runtime/useAnimation.ts
@@ -5,7 +5,7 @@ import {
interpolateValue,
easingFunctions,
OutputRange,
- InterpolatedValue
+ InterpolatedValue,
} from "./animationUtil";
import { Style } from "./cssUtil";
@@ -26,7 +26,7 @@ const noAnimations: AnimationState = {
duration: 0,
iterations: 1,
name: null,
- timingFunction: "ease"
+ timingFunction: "ease",
};
const getAnimationState = (
@@ -43,18 +43,18 @@ const getAnimationState = (
if (animationSequence == null) return noAnimations;
const animatedProperties = Object.keys(
- Object.assign({}, ...animationSequence.map(frame => frame.style))
+ Object.assign({}, ...animationSequence.map((frame) => frame.style))
);
const animationValues = {};
const animations = {};
- animatedProperties.forEach(animationProperty => {
+ animatedProperties.forEach((animationProperty) => {
animationValues[animationProperty] = new Animated.Value(0);
const currentValue = currentStyles[animationProperty];
let keyframes = animationSequence
- .filter(frame => animationProperty in frame.style)
+ .filter((frame) => animationProperty in frame.style)
.map(({ time, style }) => ({ time, value: style[animationProperty] }));
// Fixes missing start/end values
keyframes = [].concat(
@@ -65,8 +65,8 @@ const getAnimationState = (
: []
);
- const inputRange = keyframes.map(frame => frame.time);
- const outputRange: OutputRange = keyframes.map(frame => frame.value);
+ const inputRange = keyframes.map((frame) => frame.time);
+ const outputRange: OutputRange = keyframes.map((frame) => frame.value);
const animation = animationValues[animationProperty];
animations[animationProperty] = interpolateValue(
inputRange,
@@ -82,7 +82,7 @@ const getAnimationState = (
duration,
iterations,
name,
- timingFunction
+ timingFunction,
};
};
@@ -91,7 +91,7 @@ const animate = ({
duration,
iterations,
timingFunction,
- animationValues: animationValuesObject
+ animationValues: animationValuesObject,
}) => {
if (animationValuesObject == null) return;
@@ -99,9 +99,9 @@ const animate = ({
animationValuesObject
);
- animationValues.forEach(animation => animation.setValue(0));
+ animationValues.forEach((animation) => animation.setValue(0));
- const timings = animationValues.map(animation => {
+ const timings = animationValues.map((animation) => {
const config = {
toValue: 1,
duration,
@@ -109,7 +109,7 @@ const animate = ({
easing:
typeof timingFunction === "string"
? easingFunctions[timingFunction]
- : timingFunction
+ : timingFunction,
};
let res = Animated.timing(animation, config);
@@ -117,7 +117,7 @@ const animate = ({
res = Animated.sequence([
res,
// Reset animation
- Animated.timing(animation, { toValue: 0, duration: 0 })
+ Animated.timing(animation, { toValue: 0, duration: 0 }),
]);
res = Animated.loop(res, { iterations });
}
diff --git a/runtime/useCustomPropertyShorthandParts.ts b/runtime/useCustomPropertyShorthandParts.ts
index 90f6783..22a6616 100644
--- a/runtime/useCustomPropertyShorthandParts.ts
+++ b/runtime/useCustomPropertyShorthandParts.ts
@@ -7,9 +7,9 @@ export default (
customProperties: Variables
): Record[] => {
return useMemo(() => {
- return unresolvedShorthandParts.map(part => {
+ return unresolvedShorthandParts.map((part) => {
const accum = {};
- Object.keys(part).forEach(key => {
+ Object.keys(part).forEach((key) => {
accum[key] = variables(part[key], customProperties);
});
return accum;
diff --git a/runtime/useTransition.ts b/runtime/useTransition.ts
index 258fffa..8f6cd33 100644
--- a/runtime/useTransition.ts
+++ b/runtime/useTransition.ts
@@ -11,7 +11,7 @@ const useStyleGroup = (transition: Style, inputStyleUnflattened: any) => {
const inputStyle = StyleSheet.flatten(inputStyleUnflattened);
const [{ style, previousStyle }, setStyleGroup] = useState(() => ({
style: inputStyle,
- previousStyle: inputStyle
+ previousStyle: inputStyle,
}));
const styleChanged = transition.some(
@@ -84,7 +84,8 @@ const animate = (
toValue,
duration,
delay,
- easing: easingFunctions[timingFunction]
+ easing: easingFunctions[timingFunction],
+ useNativeDriver: false,
});
}
);
@@ -110,7 +111,7 @@ export default (transition: Transition, inputStyleUnflattened: any) => {
const transitionStyle = {};
- animationNames.forEach(animationName => {
+ animationNames.forEach((animationName) => {
const previousValue = previousStyle[animationName];
const nextValue = style[animationName];
diff --git a/runtime/useViewportStyleTuples.ts b/runtime/useViewportStyleTuples.ts
index ab7abae..e6d00bd 100644
--- a/runtime/useViewportStyleTuples.ts
+++ b/runtime/useViewportStyleTuples.ts
@@ -9,7 +9,7 @@ export default (unresolvedStyleTuples: StyleTuple[]): StyleTuple[] => {
return useMemo(() => {
return unresolvedStyleTuples.map(([prop, value]) => [
prop,
- transformViewport(value, windowDimensions)
+ transformViewport(value, windowDimensions),
]);
}, [unresolvedStyleTuples, windowDimensions]);
};
diff --git a/runtime/useWindowDimensions.ts b/runtime/useWindowDimensions.ts
index 5cc0cee..916c2b1 100644
--- a/runtime/useWindowDimensions.ts
+++ b/runtime/useWindowDimensions.ts
@@ -13,7 +13,7 @@ export default (): { width: number; height: number } => {
Dimensions.addEventListener("change", listener);
return () => Dimensions.removeEventListener("change", listener);
- }, [setDimensions]);
+ }, []);
return dimensions;
};
diff --git a/tsconfig.json b/tsconfig.json
index 8daadd2..d33e066 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,6 +1,6 @@
{
"compilerOptions": {
- "lib": ["es2018"],
+ "lib": ["es2019"],
"esModuleInterop": true,
"jsx": "react-native"
}
diff --git a/yarn.lock b/yarn.lock
index d3be614..52d3693 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -29,19 +29,19 @@
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/core@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91"
- integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ==
+"@babel/core@^7.7.5":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.5.tgz#ae1323cd035b5160293307f50647e83f8ba62f7e"
+ integrity sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==
dependencies:
"@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.6.2"
- "@babel/helpers" "^7.6.2"
- "@babel/parser" "^7.6.2"
- "@babel/template" "^7.6.0"
- "@babel/traverse" "^7.6.2"
- "@babel/types" "^7.6.0"
- convert-source-map "^1.1.0"
+ "@babel/generator" "^7.7.4"
+ "@babel/helpers" "^7.7.4"
+ "@babel/parser" "^7.7.5"
+ "@babel/template" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
+ convert-source-map "^1.7.0"
debug "^4.1.0"
json5 "^2.1.0"
lodash "^4.17.13"
@@ -60,68 +60,76 @@
source-map "^0.5.0"
trim-right "^1.0.1"
-"@babel/generator@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03"
- integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==
+"@babel/generator@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369"
+ integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==
dependencies:
- "@babel/types" "^7.6.0"
+ "@babel/types" "^7.7.4"
jsesc "^2.5.1"
lodash "^4.17.13"
source-map "^0.5.0"
-"@babel/helper-annotate-as-pure@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
- integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+"@babel/helper-annotate-as-pure@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce"
+ integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.7.4"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
- integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f"
+ integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==
dependencies:
- "@babel/helper-explode-assignable-expression" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/helper-explode-assignable-expression" "^7.7.4"
+ "@babel/types" "^7.7.4"
-"@babel/helper-call-delegate@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
- integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==
+"@babel/helper-call-delegate@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801"
+ integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==
dependencies:
- "@babel/helper-hoist-variables" "^7.4.4"
- "@babel/traverse" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/helper-hoist-variables" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
-"@babel/helper-create-class-features-plugin@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f"
- integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng==
+"@babel/helper-create-class-features-plugin@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d"
+ integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-member-expression-to-functions" "^7.5.5"
- "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/helper-member-expression-to-functions" "^7.7.4"
+ "@babel/helper-optimise-call-expression" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.5.5"
- "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/helper-replace-supers" "^7.7.4"
+ "@babel/helper-split-export-declaration" "^7.7.4"
-"@babel/helper-define-map@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
- integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==
+"@babel/helper-create-regexp-features-plugin@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59"
+ integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/types" "^7.5.5"
+ "@babel/helper-regex" "^7.4.4"
+ regexpu-core "^4.6.0"
+
+"@babel/helper-define-map@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176"
+ integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==
+ dependencies:
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/types" "^7.7.4"
lodash "^4.17.13"
-"@babel/helper-explode-assignable-expression@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
- integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+"@babel/helper-explode-assignable-expression@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84"
+ integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==
dependencies:
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
"@babel/helper-function-name@^7.1.0":
version "7.1.0"
@@ -132,6 +140,15 @@
"@babel/template" "^7.1.0"
"@babel/types" "^7.0.0"
+"@babel/helper-function-name@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e"
+ integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.7.4"
+ "@babel/template" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
"@babel/helper-get-function-arity@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
@@ -139,45 +156,52 @@
dependencies:
"@babel/types" "^7.0.0"
-"@babel/helper-hoist-variables@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
- integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==
+"@babel/helper-get-function-arity@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0"
+ integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==
dependencies:
- "@babel/types" "^7.4.4"
+ "@babel/types" "^7.7.4"
-"@babel/helper-member-expression-to-functions@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
- integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==
+"@babel/helper-hoist-variables@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12"
+ integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==
dependencies:
- "@babel/types" "^7.5.5"
+ "@babel/types" "^7.7.4"
-"@babel/helper-module-imports@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
- integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+"@babel/helper-member-expression-to-functions@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74"
+ integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.7.4"
-"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
- integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
+"@babel/helper-module-imports@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91"
+ integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==
dependencies:
- "@babel/helper-module-imports" "^7.0.0"
- "@babel/helper-simple-access" "^7.1.0"
- "@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/template" "^7.4.4"
- "@babel/types" "^7.5.5"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835"
+ integrity sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.7.4"
+ "@babel/helper-simple-access" "^7.7.4"
+ "@babel/helper-split-export-declaration" "^7.7.4"
+ "@babel/template" "^7.7.4"
+ "@babel/types" "^7.7.4"
lodash "^4.17.13"
-"@babel/helper-optimise-call-expression@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
- integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+"@babel/helper-optimise-call-expression@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2"
+ integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.7.4"
"@babel/helper-plugin-utils@^7.0.0":
version "7.0.0"
@@ -191,34 +215,34 @@
dependencies:
lodash "^4.17.13"
-"@babel/helper-remap-async-to-generator@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
- integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
+"@babel/helper-remap-async-to-generator@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234"
+ integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-wrap-function" "^7.1.0"
- "@babel/template" "^7.1.0"
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/helper-annotate-as-pure" "^7.7.4"
+ "@babel/helper-wrap-function" "^7.7.4"
+ "@babel/template" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
-"@babel/helper-replace-supers@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2"
- integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==
+"@babel/helper-replace-supers@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2"
+ integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==
dependencies:
- "@babel/helper-member-expression-to-functions" "^7.5.5"
- "@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/traverse" "^7.5.5"
- "@babel/types" "^7.5.5"
+ "@babel/helper-member-expression-to-functions" "^7.7.4"
+ "@babel/helper-optimise-call-expression" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
-"@babel/helper-simple-access@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
- integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+"@babel/helper-simple-access@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294"
+ integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==
dependencies:
- "@babel/template" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/template" "^7.7.4"
+ "@babel/types" "^7.7.4"
"@babel/helper-split-export-declaration@^7.4.4":
version "7.4.4"
@@ -227,15 +251,22 @@
dependencies:
"@babel/types" "^7.4.4"
-"@babel/helper-wrap-function@^7.1.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
- integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
+"@babel/helper-split-export-declaration@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8"
+ integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/template" "^7.1.0"
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.2.0"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-wrap-function@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace"
+ integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==
+ dependencies:
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/template" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
"@babel/helpers@^7.5.5":
version "7.5.5"
@@ -246,14 +277,14 @@
"@babel/traverse" "^7.5.5"
"@babel/types" "^7.5.5"
-"@babel/helpers@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153"
- integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==
+"@babel/helpers@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302"
+ integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==
dependencies:
- "@babel/template" "^7.6.0"
- "@babel/traverse" "^7.6.2"
- "@babel/types" "^7.6.0"
+ "@babel/template" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
"@babel/highlight@^7.0.0":
version "7.5.0"
@@ -269,436 +300,438 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
-"@babel/parser@^7.6.0", "@babel/parser@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1"
- integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==
+"@babel/parser@^7.7.4", "@babel/parser@^7.7.5":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71"
+ integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==
-"@babel/plugin-proposal-async-generator-functions@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
- integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
+"@babel/plugin-proposal-async-generator-functions@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d"
+ integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-remap-async-to-generator" "^7.1.0"
- "@babel/plugin-syntax-async-generators" "^7.2.0"
+ "@babel/helper-remap-async-to-generator" "^7.7.4"
+ "@babel/plugin-syntax-async-generators" "^7.7.4"
-"@babel/plugin-proposal-dynamic-import@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506"
- integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==
+"@babel/plugin-proposal-dynamic-import@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d"
+ integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.7.4"
-"@babel/plugin-proposal-json-strings@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
- integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==
+"@babel/plugin-proposal-json-strings@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d"
+ integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-json-strings" "^7.2.0"
+ "@babel/plugin-syntax-json-strings" "^7.7.4"
-"@babel/plugin-proposal-object-rest-spread@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096"
- integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==
+"@babel/plugin-proposal-object-rest-spread@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71"
+ integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.7.4"
-"@babel/plugin-proposal-optional-catch-binding@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
- integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
+"@babel/plugin-proposal-optional-catch-binding@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379"
+ integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.7.4"
-"@babel/plugin-proposal-unicode-property-regex@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802"
- integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==
+"@babel/plugin-proposal-unicode-property-regex@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb"
+ integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==
dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.6.0"
-"@babel/plugin-syntax-async-generators@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f"
- integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==
+"@babel/plugin-syntax-async-generators@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889"
+ integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-syntax-dynamic-import@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
- integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
+"@babel/plugin-syntax-dynamic-import@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec"
+ integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-syntax-json-strings@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470"
- integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==
+"@babel/plugin-syntax-json-strings@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc"
+ integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0":
+"@babel/plugin-syntax-object-rest-spread@^7.0.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-syntax-optional-catch-binding@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
- integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
+"@babel/plugin-syntax-object-rest-spread@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46"
+ integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-syntax-typescript@^7.2.0":
- version "7.3.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991"
- integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==
+"@babel/plugin-syntax-optional-catch-binding@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6"
+ integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-arrow-functions@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
- integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+"@babel/plugin-syntax-top-level-await@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da"
+ integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-async-to-generator@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e"
- integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==
+"@babel/plugin-syntax-typescript@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b"
+ integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ==
dependencies:
- "@babel/helper-module-imports" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-remap-async-to-generator" "^7.1.0"
-"@babel/plugin-transform-block-scoped-functions@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"
- integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
+"@babel/plugin-transform-arrow-functions@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12"
+ integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-block-scoping@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79"
- integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ==
+"@babel/plugin-transform-async-to-generator@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba"
+ integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==
dependencies:
+ "@babel/helper-module-imports" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
- lodash "^4.17.13"
+ "@babel/helper-remap-async-to-generator" "^7.7.4"
-"@babel/plugin-transform-classes@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9"
- integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==
+"@babel/plugin-transform-block-scoped-functions@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b"
+ integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-define-map" "^7.5.5"
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-optimise-call-expression" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.5.5"
- "@babel/helper-split-export-declaration" "^7.4.4"
- globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
- integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
+"@babel/plugin-transform-block-scoping@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224"
+ integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+ lodash "^4.17.13"
-"@babel/plugin-transform-destructuring@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6"
- integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==
+"@babel/plugin-transform-classes@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec"
+ integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==
dependencies:
+ "@babel/helper-annotate-as-pure" "^7.7.4"
+ "@babel/helper-define-map" "^7.7.4"
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/helper-optimise-call-expression" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.7.4"
+ "@babel/helper-split-export-declaration" "^7.7.4"
+ globals "^11.1.0"
-"@babel/plugin-transform-dotall-regex@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9"
- integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==
+"@babel/plugin-transform-computed-properties@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d"
+ integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.6.0"
-"@babel/plugin-transform-duplicate-keys@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853"
- integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==
+"@babel/plugin-transform-destructuring@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267"
+ integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-exponentiation-operator@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
- integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
+"@babel/plugin-transform-dotall-regex@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96"
+ integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
+ "@babel/helper-create-regexp-features-plugin" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-for-of@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556"
- integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==
+"@babel/plugin-transform-duplicate-keys@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91"
+ integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-function-name@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad"
- integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==
+"@babel/plugin-transform-exponentiation-operator@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9"
+ integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-literals@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
- integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
+"@babel/plugin-transform-for-of@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc"
+ integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-member-expression-literals@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d"
- integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==
+"@babel/plugin-transform-function-name@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1"
+ integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==
dependencies:
+ "@babel/helper-function-name" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-modules-amd@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91"
- integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==
+"@babel/plugin-transform-literals@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e"
+ integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==
dependencies:
- "@babel/helper-module-transforms" "^7.1.0"
"@babel/helper-plugin-utils" "^7.0.0"
- babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-commonjs@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74"
- integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==
+"@babel/plugin-transform-member-expression-literals@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a"
+ integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-amd@^7.7.5":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c"
+ integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==
dependencies:
- "@babel/helper-module-transforms" "^7.4.4"
+ "@babel/helper-module-transforms" "^7.7.5"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-simple-access" "^7.1.0"
babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-commonjs@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486"
- integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==
+"@babel/plugin-transform-modules-commonjs@^7.7.5":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345"
+ integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==
dependencies:
- "@babel/helper-module-transforms" "^7.4.4"
+ "@babel/helper-module-transforms" "^7.7.5"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-simple-access" "^7.1.0"
+ "@babel/helper-simple-access" "^7.7.4"
babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-systemjs@^7.5.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249"
- integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==
+"@babel/plugin-transform-modules-systemjs@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30"
+ integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==
dependencies:
- "@babel/helper-hoist-variables" "^7.4.4"
+ "@babel/helper-hoist-variables" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-umd@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae"
- integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
+"@babel/plugin-transform-modules-umd@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f"
+ integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==
dependencies:
- "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-module-transforms" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b"
- integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220"
+ integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==
dependencies:
- regexpu-core "^4.6.0"
+ "@babel/helper-create-regexp-features-plugin" "^7.7.4"
-"@babel/plugin-transform-new-target@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5"
- integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==
+"@babel/plugin-transform-new-target@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167"
+ integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-object-super@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9"
- integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==
+"@babel/plugin-transform-object-super@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262"
+ integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.5.5"
+ "@babel/helper-replace-supers" "^7.7.4"
-"@babel/plugin-transform-parameters@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16"
- integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==
+"@babel/plugin-transform-parameters@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce"
+ integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==
dependencies:
- "@babel/helper-call-delegate" "^7.4.4"
- "@babel/helper-get-function-arity" "^7.0.0"
+ "@babel/helper-call-delegate" "^7.7.4"
+ "@babel/helper-get-function-arity" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-property-literals@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905"
- integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==
+"@babel/plugin-transform-property-literals@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2"
+ integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-regenerator@^7.4.5":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
- integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==
+"@babel/plugin-transform-regenerator@^7.7.5":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9"
+ integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==
dependencies:
regenerator-transform "^0.14.0"
-"@babel/plugin-transform-reserved-words@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634"
- integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==
+"@babel/plugin-transform-reserved-words@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb"
+ integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-shorthand-properties@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
- integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
+"@babel/plugin-transform-shorthand-properties@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e"
+ integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-spread@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd"
- integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==
+"@babel/plugin-transform-spread@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578"
+ integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-sticky-regex@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
- integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
+"@babel/plugin-transform-sticky-regex@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c"
+ integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/helper-regex" "^7.0.0"
-"@babel/plugin-transform-template-literals@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0"
- integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==
+"@babel/plugin-transform-template-literals@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604"
+ integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-annotate-as-pure" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-typeof-symbol@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2"
- integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==
+"@babel/plugin-transform-typeof-symbol@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e"
+ integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-typescript@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.6.0.tgz#48d78405f1aa856ebeea7288a48a19ed8da377a6"
- integrity sha512-yzw7EopOOr6saONZ3KA3lpizKnWRTe+rfBqg4AmQbSow7ik7fqmzrfIqt053osLwLE2AaTqGinLM2tl6+M/uog==
+"@babel/plugin-transform-typescript@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636"
+ integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.6.0"
+ "@babel/helper-create-class-features-plugin" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-typescript" "^7.2.0"
+ "@babel/plugin-syntax-typescript" "^7.7.4"
-"@babel/plugin-transform-unicode-regex@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698"
- integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==
+"@babel/plugin-transform-unicode-regex@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae"
+ integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==
dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.6.0"
-"@babel/preset-env@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3"
- integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q==
+"@babel/preset-env@^7.7.6":
+ version "7.7.6"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.6.tgz#39ac600427bbb94eec6b27953f1dfa1d64d457b2"
+ integrity sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ==
dependencies:
- "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-module-imports" "^7.7.4"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-proposal-async-generator-functions" "^7.2.0"
- "@babel/plugin-proposal-dynamic-import" "^7.5.0"
- "@babel/plugin-proposal-json-strings" "^7.2.0"
- "@babel/plugin-proposal-object-rest-spread" "^7.6.2"
- "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
- "@babel/plugin-proposal-unicode-property-regex" "^7.6.2"
- "@babel/plugin-syntax-async-generators" "^7.2.0"
- "@babel/plugin-syntax-dynamic-import" "^7.2.0"
- "@babel/plugin-syntax-json-strings" "^7.2.0"
- "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
- "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
- "@babel/plugin-transform-arrow-functions" "^7.2.0"
- "@babel/plugin-transform-async-to-generator" "^7.5.0"
- "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
- "@babel/plugin-transform-block-scoping" "^7.6.2"
- "@babel/plugin-transform-classes" "^7.5.5"
- "@babel/plugin-transform-computed-properties" "^7.2.0"
- "@babel/plugin-transform-destructuring" "^7.6.0"
- "@babel/plugin-transform-dotall-regex" "^7.6.2"
- "@babel/plugin-transform-duplicate-keys" "^7.5.0"
- "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
- "@babel/plugin-transform-for-of" "^7.4.4"
- "@babel/plugin-transform-function-name" "^7.4.4"
- "@babel/plugin-transform-literals" "^7.2.0"
- "@babel/plugin-transform-member-expression-literals" "^7.2.0"
- "@babel/plugin-transform-modules-amd" "^7.5.0"
- "@babel/plugin-transform-modules-commonjs" "^7.6.0"
- "@babel/plugin-transform-modules-systemjs" "^7.5.0"
- "@babel/plugin-transform-modules-umd" "^7.2.0"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.2"
- "@babel/plugin-transform-new-target" "^7.4.4"
- "@babel/plugin-transform-object-super" "^7.5.5"
- "@babel/plugin-transform-parameters" "^7.4.4"
- "@babel/plugin-transform-property-literals" "^7.2.0"
- "@babel/plugin-transform-regenerator" "^7.4.5"
- "@babel/plugin-transform-reserved-words" "^7.2.0"
- "@babel/plugin-transform-shorthand-properties" "^7.2.0"
- "@babel/plugin-transform-spread" "^7.6.2"
- "@babel/plugin-transform-sticky-regex" "^7.2.0"
- "@babel/plugin-transform-template-literals" "^7.4.4"
- "@babel/plugin-transform-typeof-symbol" "^7.2.0"
- "@babel/plugin-transform-unicode-regex" "^7.6.2"
- "@babel/types" "^7.6.0"
+ "@babel/plugin-proposal-async-generator-functions" "^7.7.4"
+ "@babel/plugin-proposal-dynamic-import" "^7.7.4"
+ "@babel/plugin-proposal-json-strings" "^7.7.4"
+ "@babel/plugin-proposal-object-rest-spread" "^7.7.4"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.7.4"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.7.4"
+ "@babel/plugin-syntax-async-generators" "^7.7.4"
+ "@babel/plugin-syntax-dynamic-import" "^7.7.4"
+ "@babel/plugin-syntax-json-strings" "^7.7.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.7.4"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.7.4"
+ "@babel/plugin-syntax-top-level-await" "^7.7.4"
+ "@babel/plugin-transform-arrow-functions" "^7.7.4"
+ "@babel/plugin-transform-async-to-generator" "^7.7.4"
+ "@babel/plugin-transform-block-scoped-functions" "^7.7.4"
+ "@babel/plugin-transform-block-scoping" "^7.7.4"
+ "@babel/plugin-transform-classes" "^7.7.4"
+ "@babel/plugin-transform-computed-properties" "^7.7.4"
+ "@babel/plugin-transform-destructuring" "^7.7.4"
+ "@babel/plugin-transform-dotall-regex" "^7.7.4"
+ "@babel/plugin-transform-duplicate-keys" "^7.7.4"
+ "@babel/plugin-transform-exponentiation-operator" "^7.7.4"
+ "@babel/plugin-transform-for-of" "^7.7.4"
+ "@babel/plugin-transform-function-name" "^7.7.4"
+ "@babel/plugin-transform-literals" "^7.7.4"
+ "@babel/plugin-transform-member-expression-literals" "^7.7.4"
+ "@babel/plugin-transform-modules-amd" "^7.7.5"
+ "@babel/plugin-transform-modules-commonjs" "^7.7.5"
+ "@babel/plugin-transform-modules-systemjs" "^7.7.4"
+ "@babel/plugin-transform-modules-umd" "^7.7.4"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4"
+ "@babel/plugin-transform-new-target" "^7.7.4"
+ "@babel/plugin-transform-object-super" "^7.7.4"
+ "@babel/plugin-transform-parameters" "^7.7.4"
+ "@babel/plugin-transform-property-literals" "^7.7.4"
+ "@babel/plugin-transform-regenerator" "^7.7.5"
+ "@babel/plugin-transform-reserved-words" "^7.7.4"
+ "@babel/plugin-transform-shorthand-properties" "^7.7.4"
+ "@babel/plugin-transform-spread" "^7.7.4"
+ "@babel/plugin-transform-sticky-regex" "^7.7.4"
+ "@babel/plugin-transform-template-literals" "^7.7.4"
+ "@babel/plugin-transform-typeof-symbol" "^7.7.4"
+ "@babel/plugin-transform-unicode-regex" "^7.7.4"
+ "@babel/types" "^7.7.4"
browserslist "^4.6.0"
- core-js-compat "^3.1.1"
+ core-js-compat "^3.4.7"
invariant "^2.2.2"
js-levenshtein "^1.1.3"
semver "^5.5.0"
-"@babel/preset-typescript@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz#25768cb8830280baf47c45ab1a519a9977498c98"
- integrity sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww==
+"@babel/preset-typescript@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.4.tgz#780059a78e6fa7f7a4c87f027292a86b31ce080a"
+ integrity sha512-rqrjxfdiHPsnuPur0jKrIIGQCIgoTWMTjlbWE69G4QJ6TIOVnnRnIJhUxNTL/VwDmEAVX08Tq3B1nirer5341w==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-transform-typescript" "^7.6.0"
+ "@babel/plugin-transform-typescript" "^7.7.4"
-"@babel/runtime@^7.4.2":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132"
- integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==
+"@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2":
+ version "7.7.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f"
+ integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==
dependencies:
regenerator-runtime "^0.13.2"
@@ -711,14 +744,14 @@
"@babel/parser" "^7.4.4"
"@babel/types" "^7.4.4"
-"@babel/template@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"
- integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==
+"@babel/template@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b"
+ integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==
dependencies:
"@babel/code-frame" "^7.0.0"
- "@babel/parser" "^7.6.0"
- "@babel/types" "^7.6.0"
+ "@babel/parser" "^7.7.4"
+ "@babel/types" "^7.7.4"
"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.5.5":
version "7.5.5"
@@ -735,17 +768,17 @@
globals "^11.1.0"
lodash "^4.17.13"
-"@babel/traverse@^7.4.4", "@babel/traverse@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c"
- integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==
+"@babel/traverse@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558"
+ integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==
dependencies:
"@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.6.2"
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/parser" "^7.6.2"
- "@babel/types" "^7.6.0"
+ "@babel/generator" "^7.7.4"
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/helper-split-export-declaration" "^7.7.4"
+ "@babel/parser" "^7.7.4"
+ "@babel/types" "^7.7.4"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.13"
@@ -759,10 +792,10 @@
lodash "^4.17.13"
to-fast-properties "^2.0.0"
-"@babel/types@^7.2.0", "@babel/types@^7.6.0":
- version "7.6.1"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648"
- integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==
+"@babel/types@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
+ integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==
dependencies:
esutils "^2.0.2"
lodash "^4.17.13"
@@ -975,6 +1008,11 @@
dependencies:
"@babel/types" "^7.3.0"
+"@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"
+ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
@@ -995,44 +1033,49 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
-"@types/jest-diff@*":
- version "20.0.1"
- resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89"
- integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==
-
-"@types/jest@^24.0.18":
- version "24.0.18"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498"
- integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ==
+"@types/jest@^24.0.23":
+ version "24.0.23"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.23.tgz#046f8e2ade026fe831623e361a36b6fb9a4463e4"
+ integrity sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg==
dependencies:
- "@types/jest-diff" "*"
+ jest-diff "^24.3.0"
+
+"@types/json-schema@^7.0.3":
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
+ integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==
+
+"@types/node@^12.12.17":
+ version "12.12.17"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.17.tgz#191b71e7f4c325ee0fb23bc4a996477d92b8c39b"
+ integrity sha512-Is+l3mcHvs47sKy+afn2O1rV4ldZFU7W8101cNlOd+MRbjM4Onida8jSZnJdTe/0Pcf25g9BNIUsuugmE6puHA==
-"@types/node@^12.7.11":
- version "12.7.11"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.11.tgz#be879b52031cfb5d295b047f5462d8ef1a716446"
- integrity sha512-Otxmr2rrZLKRYIybtdG/sgeO+tHY20GxeDjcGmUnmmlCWyEnv2a2x1ZXBo3BTec4OiTXMQCiazB8NMBf0iRlFw==
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
"@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.60.18":
- version "0.60.18"
- resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.18.tgz#00cee391af17f2f1c0936c2143ffbd97c65fddfb"
- integrity sha512-l/mZQ6r1Y3Owokp00wGZDTiSSkCbGGNscAsuc2ZFa86p1nBmYGot/a5tYvWrw1mRSbUqYb0/J/NqQZwoGoB+3A==
+"@types/react-native@^0.60.25":
+ version "0.60.25"
+ resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.25.tgz#65cb0bf5dd0631079215b63525458e4123c1c90e"
+ integrity sha512-827dIVvSTxSH5uTpsJJH7O4wpRuw0rm3yIzRL3a2yKawA0nyhgC1GPKTXHFIn2GfSdXn1Gty2dJ+k6uDZF3MWQ==
dependencies:
"@types/prop-types" "*"
"@types/react" "*"
-"@types/react-test-renderer@^16.9.0":
- version "16.9.0"
- resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.0.tgz#d60f530ecf4c906721511603cca711b4fa830d41"
- integrity sha512-bN5EyjtuTY35xX7N5j0KP1vg5MpUXHpFTX6tGsqkNOthjNvet4VQOYRxFh+NT5cDSJrATmAFK9NLeYZ4mp/o0Q==
+"@types/react-test-renderer@^16.9.1":
+ version "16.9.1"
+ resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.1.tgz#9d432c46c515ebe50c45fa92c6fb5acdc22e39c4"
+ integrity sha512-nCXQokZN1jp+QkoDNmDZwoWpKY8HDczqevIDO4Uv9/s9rbGPbSpy8Uaxa5ixHKkcm/Wt0Y9C3wCxZivh4Al+rQ==
dependencies:
"@types/react" "*"
-"@types/react@*", "@types/react@^16.9.5":
+"@types/react@*", "@types/react@16.9.5":
version "16.9.5"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.5.tgz#079dabd918b19b32118c25fd00a786bb6d0d5e51"
integrity sha512-jQ12VMiFOWYlp+j66dghOWcmDDwhca0bnlcTxS4Qz/fh5gi6wpaZDthPEu/Gc/YlAuO87vbiUXL8qKstFvuOaA==
@@ -1057,6 +1100,49 @@
dependencies:
"@types/yargs-parser" "*"
+"@typescript-eslint/eslint-plugin@^2.11.0":
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.11.0.tgz#4477c33491ccf0a9a3f4a30ef84978fa0ea0cad2"
+ integrity sha512-G2HHA1vpMN0EEbUuWubiCCfd0R3a30BB+UdvnFkxwZIxYEGOrWEXDv8tBFO9f44CWc47Xv9lLM3VSn4ORLI2bA==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "2.11.0"
+ eslint-utils "^1.4.3"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.0.0"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/experimental-utils@2.11.0":
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.11.0.tgz#cef18e6b122706c65248a5d8984a9779ed1e52ac"
+ integrity sha512-YxcA/y0ZJaCc/fB/MClhcDxHI0nOBB7v2/WxBju2cOTanX7jO9ttQq6Fy4yW9UaY5bPd9xL3cun3lDVqk67sPQ==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "2.11.0"
+ eslint-scope "^5.0.0"
+
+"@typescript-eslint/parser@^2.11.0":
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.11.0.tgz#cdcc3be73ee31cbef089af5ff97ccaa380ef6e8b"
+ integrity sha512-DyGXeqhb3moMioEFZIHIp7oXBBh7dEfPTzGrlyP0Mi9ScCra4SWEGs3kPd18mG7Sy9Wy8z88zmrw5tSGL6r/6A==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "2.11.0"
+ "@typescript-eslint/typescript-estree" "2.11.0"
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/typescript-estree@2.11.0":
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.11.0.tgz#21ada6504274cd1644855926312c798fc697e9fb"
+ integrity sha512-HGY4+d4MagO6cKMcKfIKaTMxcAv7dEVnji2Zi+vi5VV8uWAM631KjAB5GxFcexMYrwKT0EekRiiGK1/Sd7VFGA==
+ dependencies:
+ debug "^4.1.1"
+ eslint-visitor-keys "^1.1.0"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash.unescape "4.0.1"
+ semver "^6.3.0"
+ tsutils "^3.17.1"
+
abab@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
@@ -1075,10 +1161,10 @@ acorn-globals@^4.1.0:
acorn "^6.0.1"
acorn-walk "^6.0.1"
-acorn-jsx@^5.0.2:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f"
- integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
+acorn-jsx@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384"
+ integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==
acorn-walk@^6.0.1:
version "6.2.0"
@@ -1086,19 +1172,19 @@ acorn-walk@^6.0.1:
integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
acorn@^5.5.3:
- version "5.7.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
- integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+ version "5.7.4"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
+ integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
acorn@^6.0.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51"
integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==
-acorn@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a"
- integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==
+acorn@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c"
+ integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==
ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
version "6.10.2"
@@ -1110,11 +1196,18 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+ansi-escapes@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+ansi-escapes@^4.2.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d"
+ integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==
+ dependencies:
+ type-fest "^0.8.1"
+
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
@@ -1130,6 +1223,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -1274,14 +1372,14 @@ babel-plugin-jest-hoist@^24.9.0:
dependencies:
"@types/babel__traverse" "^7.0.6"
-babel-plugin-macros@^2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz#41f7ead616fc36f6a93180e89697f69f51671181"
- integrity sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==
+babel-plugin-macros@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+ integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
dependencies:
- "@babel/runtime" "^7.4.2"
- cosmiconfig "^5.2.0"
- resolve "^1.10.0"
+ "@babel/runtime" "^7.7.2"
+ cosmiconfig "^6.0.0"
+ resolve "^1.12.0"
babel-preset-jest@^24.9.0:
version "24.9.0"
@@ -1357,7 +1455,7 @@ browser-resolve@^1.11.3:
dependencies:
resolve "1.1.7"
-browserslist@^4.6.0, browserslist@^4.6.6:
+browserslist@^4.6.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17"
integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==
@@ -1366,6 +1464,15 @@ browserslist@^4.6.0, browserslist@^4.6.6:
electron-to-chromium "^1.3.247"
node-releases "^1.1.29"
+browserslist@^4.8.2:
+ version "4.8.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289"
+ integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==
+ dependencies:
+ caniuse-lite "^1.0.30001015"
+ electron-to-chromium "^1.3.322"
+ node-releases "^1.1.42"
+
bser@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5"
@@ -1393,25 +1500,6 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
-caller-callsite@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
- integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
- dependencies:
- callsites "^2.0.0"
-
-caller-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
- integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
- dependencies:
- caller-callsite "^2.0.0"
-
-callsites@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
- integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
-
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@@ -1432,6 +1520,11 @@ caniuse-lite@^1.0.30000989:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000998.tgz#7227a8046841e7d01e156ae7227a504d065f6744"
integrity sha512-8Tj5sPZR9kMHeDD9SZXIVr5m9ofufLLCG2Y4QwQrH18GIwG+kCc+zYdlR036ZRkuKjVVetyxeAgGA1xF7XdmzQ==
+caniuse-lite@^1.0.30001015:
+ version "1.0.30001015"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0"
+ integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ==
+
capture-exit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
@@ -1478,12 +1571,12 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
-cli-cursor@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
- integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
dependencies:
- restore-cursor "^2.0.0"
+ restore-cursor "^3.1.0"
cli-width@^2.0.0:
version "2.2.0"
@@ -1589,17 +1682,24 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0:
dependencies:
safe-buffer "~5.1.1"
+convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
copy-descriptor@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-core-js-compat@^3.1.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150"
- integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==
+core-js-compat@^3.4.7:
+ version "3.4.8"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.8.tgz#f72e6a4ed76437ea710928f44615f926a81607d5"
+ integrity sha512-l3WTmnXHV2Sfu5VuD7EHE2w7y+K68+kULKt5RJg8ZJk3YhHF1qLD4O8v8AmNq+8vbOwnPFFDvds25/AoEvMqlQ==
dependencies:
- browserslist "^4.6.6"
+ browserslist "^4.8.2"
semver "^6.3.0"
core-util-is@1.0.2, core-util-is@~1.0.0:
@@ -1607,15 +1707,16 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-cosmiconfig@^5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
- integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+cosmiconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
dependencies:
- import-fresh "^2.0.0"
- is-directory "^0.3.1"
- js-yaml "^3.13.1"
- parse-json "^4.0.0"
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.1.0"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.7.2"
cross-spawn@^6.0.0, cross-spawn@^6.0.5:
version "6.0.5"
@@ -1643,14 +1744,14 @@ css-color-keywords@^1.0.0:
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=
-css-to-react-native@^2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d"
- integrity sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==
+css-to-react-native@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756"
+ integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==
dependencies:
camelize "^1.0.0"
css-color-keywords "^1.0.0"
- postcss-value-parser "^3.3.0"
+ postcss-value-parser "^4.0.2"
cssesc@^3.0.0:
version "3.0.0"
@@ -1812,11 +1913,21 @@ electron-to-chromium@^1.3.247:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.273.tgz#94872d6823219f2812f2e35a2ce2a7d03c1eaa3f"
integrity sha512-0kUppiHQvHEENHh+nTtvTt4eXMwcPyWmMaj73GPrSEm3ldKhmmHuOH6IjrmuW6YmyS/fpXcLvMQLNVpqRhpNWw==
+electron-to-chromium@^1.3.322:
+ version "1.3.322"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8"
+ integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==
+
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
end-of-stream@^1.1.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
@@ -1877,27 +1988,22 @@ eslint-scope@^5.0.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
-eslint-utils@^1.4.2:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab"
- integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==
+eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
dependencies:
- eslint-visitor-keys "^1.0.0"
-
-eslint-visitor-keys@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
- integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
+ eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
-eslint@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.3.0.tgz#1f1a902f67bfd4c354e7288b81e40654d927eb6a"
- integrity sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==
+eslint@^6.7.2:
+ version "6.7.2"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1"
+ integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.10.0"
@@ -1906,19 +2012,19 @@ eslint@^6.3.0:
debug "^4.0.1"
doctrine "^3.0.0"
eslint-scope "^5.0.0"
- eslint-utils "^1.4.2"
+ eslint-utils "^1.4.3"
eslint-visitor-keys "^1.1.0"
- espree "^6.1.1"
+ espree "^6.1.2"
esquery "^1.0.1"
esutils "^2.0.2"
file-entry-cache "^5.0.1"
functional-red-black-tree "^1.0.1"
glob-parent "^5.0.0"
- globals "^11.7.0"
+ globals "^12.1.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
- inquirer "^6.4.1"
+ inquirer "^7.0.0"
is-glob "^4.0.0"
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
@@ -1927,7 +2033,7 @@ eslint@^6.3.0:
minimatch "^3.0.4"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
- optionator "^0.8.2"
+ optionator "^0.8.3"
progress "^2.0.0"
regexpp "^2.0.1"
semver "^6.1.2"
@@ -1937,13 +2043,13 @@ eslint@^6.3.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
-espree@^6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de"
- integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==
+espree@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d"
+ integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==
dependencies:
- acorn "^7.0.0"
- acorn-jsx "^5.0.2"
+ acorn "^7.1.0"
+ acorn-jsx "^5.1.0"
eslint-visitor-keys "^1.1.0"
esprima@^3.1.3:
@@ -2091,7 +2197,7 @@ fast-json-stable-stringify@^2.0.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
-fast-levenshtein@~2.0.4:
+fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
@@ -2103,10 +2209,10 @@ fb-watchman@^2.0.0:
dependencies:
bser "^2.0.0"
-figures@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
- integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+figures@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec"
+ integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==
dependencies:
escape-string-regexp "^1.0.5"
@@ -2261,11 +2367,30 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
-globals@^11.1.0, globals@^11.7.0:
+glob@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+globals@^12.1.0:
+ version "12.3.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13"
+ integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==
+ dependencies:
+ type-fest "^0.8.1"
+
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
version "4.2.1"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d"
@@ -2395,14 +2520,6 @@ ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-import-fresh@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
- integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
- dependencies:
- caller-path "^2.0.0"
- resolve-from "^3.0.0"
-
import-fresh@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
@@ -2411,6 +2528,14 @@ import-fresh@^3.0.0:
parent-module "^1.0.0"
resolve-from "^4.0.0"
+import-fresh@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
import-local@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
@@ -2447,22 +2572,22 @@ ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-inquirer@^6.4.1:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42"
- integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==
+inquirer@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a"
+ integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==
dependencies:
- ansi-escapes "^3.2.0"
+ ansi-escapes "^4.2.1"
chalk "^2.4.2"
- cli-cursor "^2.1.0"
+ cli-cursor "^3.1.0"
cli-width "^2.0.0"
external-editor "^3.0.3"
- figures "^2.0.0"
- lodash "^4.17.12"
- mute-stream "0.0.7"
+ figures "^3.0.0"
+ lodash "^4.17.15"
+ mute-stream "0.0.8"
run-async "^2.2.0"
rxjs "^6.4.0"
- string-width "^2.1.0"
+ string-width "^4.1.0"
strip-ansi "^5.1.0"
through "^2.3.6"
@@ -2546,11 +2671,6 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-data-descriptor "^1.0.0"
kind-of "^6.0.2"
-is-directory@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
- integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
-
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -2580,6 +2700,11 @@ is-fullwidth-code-point@^2.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
is-generator-fn@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
@@ -2768,7 +2893,7 @@ jest-config@^24.9.0:
pretty-format "^24.9.0"
realpath-native "^1.1.0"
-jest-diff@^24.9.0:
+jest-diff@^24.3.0, jest-diff@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
@@ -3238,6 +3363,11 @@ levn@^0.3.0, levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
load-json-file@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
@@ -3261,7 +3391,12 @@ lodash.sortby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14:
+lodash.unescape@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+ integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
+lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@@ -3350,10 +3485,10 @@ mime-types@^2.1.12, mime-types@~2.1.19:
dependencies:
mime-db "1.40.0"
-mimic-fn@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
- integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
minimatch@^3.0.4:
version "3.0.4"
@@ -3417,10 +3552,10 @@ ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-mute-stream@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
- integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
nan@^2.12.1:
version "2.14.0"
@@ -3512,6 +3647,13 @@ node-releases@^1.1.29:
dependencies:
semver "^6.3.0"
+node-releases@^1.1.42:
+ version "1.1.42"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.42.tgz#a999f6a62f8746981f6da90627a8d2fc090bbad7"
+ integrity sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA==
+ dependencies:
+ semver "^6.3.0"
+
nopt@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
@@ -3640,12 +3782,12 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
-onetime@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
- integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+onetime@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
dependencies:
- mimic-fn "^1.0.0"
+ mimic-fn "^2.1.0"
optimist@^0.6.1:
version "0.6.1"
@@ -3655,7 +3797,7 @@ optimist@^0.6.1:
minimist "~0.0.1"
wordwrap "~0.0.2"
-optionator@^0.8.1, optionator@^0.8.2:
+optionator@^0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
@@ -3667,6 +3809,18 @@ optionator@^0.8.1, optionator@^0.8.2:
type-check "~0.3.2"
wordwrap "~1.0.0"
+optionator@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
@@ -3736,6 +3890,16 @@ parse-json@^4.0.0:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
+parse-json@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
+ integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+ lines-and-columns "^1.1.6"
+
parse5@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
@@ -3773,6 +3937,11 @@ path-type@^3.0.0:
dependencies:
pify "^3.0.0"
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -3821,15 +3990,15 @@ postcss-selector-parser@^6.0.2:
indexes-of "^1.0.1"
uniq "^1.0.1"
-postcss-value-parser@^3.3.0:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
- integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+postcss-value-parser@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9"
+ integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==
-postcss@^7.0.17:
- version "7.0.17"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f"
- integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==
+postcss@^7.0.24:
+ version "7.0.24"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.24.tgz#972c3c5be431b32e40caefe6c81b5a19117704c2"
+ integrity sha512-Xl0XvdNWg+CblAXzNvbSOUvgJXwSjmbAKORqyw9V2AlHrm1js2gFw9y3jibBAhpKZi8b5JzJCVh/FyzPsTtgTA==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
@@ -3840,10 +4009,10 @@ prelude-ls@~1.1.2:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-prettier@^1.18.2:
- version "1.18.2"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
- integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
+prettier@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
+ integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
pretty-format@^24.9.0:
version "24.9.0"
@@ -3935,20 +4104,20 @@ react-is@^16.8.4:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
-react-test-renderer@^16.10.2:
- version "16.10.2"
- resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.10.2.tgz#4d8492f8678c9b43b721a7d79ed0840fdae7c518"
- integrity sha512-k9Qzyev6cTIcIfrhgrFlYQAFxh5EEDO6ALNqYqmKsWVA7Q/rUMTay5nD3nthi6COmYsd4ghVYyi8U86aoeMqYQ==
+react-test-renderer@^16.12.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.12.0.tgz#11417ffda579306d4e841a794d32140f3da1b43f"
+ integrity sha512-Vj/teSqt2oayaWxkbhQ6gKis+t5JrknXfPVo+aIJ8QwYAqMPH77uptOdrlphyxl8eQI/rtkOYg86i/UWkpFu0w==
dependencies:
object-assign "^4.1.1"
prop-types "^15.6.2"
react-is "^16.8.6"
- scheduler "^0.16.2"
+ scheduler "^0.18.0"
-react@^16.10.2:
- version "16.10.2"
- resolved "https://registry.yarnpkg.com/react/-/react-16.10.2.tgz#a5ede5cdd5c536f745173c8da47bda64797a4cf0"
- integrity sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw==
+react@^16.12.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83"
+ integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
@@ -4028,6 +4197,11 @@ regexpp@^2.0.1:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+regexpp@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e"
+ integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==
+
regexpu-core@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6"
@@ -4153,12 +4327,19 @@ resolve@^1.10.0, resolve@^1.3.2:
dependencies:
path-parse "^1.0.6"
-restore-cursor@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
- integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+resolve@^1.12.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16"
+ integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==
dependencies:
- onetime "^2.0.0"
+ path-parse "^1.0.6"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
signal-exit "^3.0.2"
ret@~0.1.10:
@@ -4239,10 +4420,10 @@ sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-scheduler@^0.16.2:
- version "0.16.2"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.16.2.tgz#f74cd9d33eff6fc554edfb79864868e4819132c1"
- integrity sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg==
+scheduler@^0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4"
+ integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
@@ -4465,7 +4646,7 @@ string-width@^1.0.1:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
-"string-width@^1.0.2 || 2", string-width@^2.1.0:
+"string-width@^1.0.2 || 2":
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -4482,6 +4663,15 @@ string-width@^3.0.0, string-width@^3.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
+string-width@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@@ -4510,6 +4700,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
@@ -4667,11 +4864,18 @@ trim-right@^1.0.1:
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
-tslib@^1.9.0:
+tslib@^1.8.1, tslib@^1.9.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+tsutils@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
+ integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+ dependencies:
+ tslib "^1.8.1"
+
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
@@ -4691,10 +4895,15 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
-typescript@^3.6.3:
- version "3.6.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da"
- integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+typescript@^3.7.3:
+ version "3.7.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.3.tgz#b36840668a16458a7025b9eabfad11b66ab85c69"
+ integrity sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==
uglify-js@^3.1.4:
version "3.6.0"
@@ -4875,6 +5084,11 @@ wide-align@^1.1.0:
dependencies:
string-width "^1.0.2 || 2"
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
@@ -4937,6 +5151,13 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+yaml@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2"
+ integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==
+ dependencies:
+ "@babel/runtime" "^7.6.3"
+
yargs-parser@^13.1.1:
version "13.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"