diff --git a/__ts-tests__/react.test.tsx b/__ts-tests__/react.test.tsx index e310c2d5a..63c6552f6 100644 --- a/__ts-tests__/react.test.tsx +++ b/__ts-tests__/react.test.tsx @@ -26,7 +26,7 @@ const Button = styled.button` `; const ColoredButton = styled.button<{ background: string; children: string }>` - background-color: ${props => props.background}; + background-color: ${(props) => props.background}; `; const CustomButton = styled(Button)` diff --git a/package.json b/package.json index d4b1b02df..a6f4fee33 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@babel/preset-env": "^7.9.0", "@babel/preset-react": "^7.9.4", "@babel/preset-typescript": "^7.9.0", - "@callstack/eslint-config": "^9.1.0", + "@callstack/eslint-config": "^10.0.1", "@commitlint/config-conventional": "^8.3.4", "@release-it/conventional-changelog": "^1.1.0", "@types/babel__core": "^7.1.7", @@ -72,27 +72,27 @@ "@types/loader-utils": "^1.1.3", "@types/mkdirp": "^0.5.2", "@types/normalize-path": "^3.0.0", - "@types/prettier": "^1.19.1", + "@types/prettier": "^2.0.2", "@types/react": "^16.9.25", "@types/react-is": "^16.7.1", "@types/strip-ansi": "^5.2.1", - "@typescript-eslint/eslint-plugin": "^2.25.0", - "@typescript-eslint/parser": "^2.25.0", + "@typescript-eslint/eslint-plugin": "^3.9.0", + "@typescript-eslint/parser": "^3.9.0", "all-contributors-cli": "^6.1.1", "babel-jest": "^24.5.0", "codecov": "^3.2.0", "commitlint": "^8.3.5", "del-cli": "^1.1.0", "dtslint": "^0.9.8", - "eslint": "^6.8.0", - "eslint-plugin-prettier": "^3.1.2", + "eslint": "^7.6.0", + "eslint-plugin-prettier": "^3.1.4", "husky": "^1.3.1", "jest": "^24.7.1", - "prettier": "^1.16.4", + "prettier": "^2.0.5", "react": "^16.8.3", "react-test-renderer": "^16.8.3", "release-it": "^12.4.3", - "typescript": "^3.8.3" + "typescript": "^3.9.7" }, "dependencies": { "@babel/core": "^7.9.0", diff --git a/src/__tests__/babel.test.ts b/src/__tests__/babel.test.ts index a2238041c..16aba41b2 100644 --- a/src/__tests__/babel.test.ts +++ b/src/__tests__/babel.test.ts @@ -1,6 +1,6 @@ +import { join } from 'path'; import * as babel from '@babel/core'; import dedent from 'dedent'; -import { join } from 'path'; import stripAnsi from 'strip-ansi'; import serializer from '../__utils__/linaria-snapshot-serializer'; import { StrictOptions } from '../babel/types'; diff --git a/src/__tests__/detect-core-js.test.js b/src/__tests__/detect-core-js.test.js index ce2db78cf..7daa1ba26 100644 --- a/src/__tests__/detect-core-js.test.js +++ b/src/__tests__/detect-core-js.test.js @@ -1,9 +1,9 @@ import cp from 'child_process'; -const waitForProcess = async process => { - return new Promise(resolve => { +const waitForProcess = async (process) => { + return new Promise((resolve) => { let output = ''; - process.stdout.on('data', chunk => { + process.stdout.on('data', (chunk) => { output += chunk.toString(); }); process.on('close', () => { diff --git a/src/__tests__/evaluators/extractor.test.ts b/src/__tests__/evaluators/extractor.test.ts index dd15bc7ab..5d144ef37 100644 --- a/src/__tests__/evaluators/extractor.test.ts +++ b/src/__tests__/evaluators/extractor.test.ts @@ -1,6 +1,6 @@ +import path from 'path'; import dedent from 'dedent'; import * as babel from '@babel/core'; -import path from 'path'; import exctract from '../../babel/evaluators/extractor'; function getFileName() { diff --git a/src/__tests__/evaluators/preeval.test.ts b/src/__tests__/evaluators/preeval.test.ts index fd92a6e2c..5f2406ce2 100644 --- a/src/__tests__/evaluators/preeval.test.ts +++ b/src/__tests__/evaluators/preeval.test.ts @@ -1,6 +1,6 @@ +import { join } from 'path'; import * as babel from '@babel/core'; import dedent from 'dedent'; -import { join } from 'path'; import serializer from '../../__utils__/linaria-snapshot-serializer'; import { StrictOptions } from '../../babel/types'; diff --git a/src/__tests__/evaluators/shaker.test.ts b/src/__tests__/evaluators/shaker.test.ts index 98d47aac9..337d706c7 100644 --- a/src/__tests__/evaluators/shaker.test.ts +++ b/src/__tests__/evaluators/shaker.test.ts @@ -1,7 +1,7 @@ +import path from 'path'; import dedent from 'dedent'; import * as babel from '@babel/core'; import shake from '../../babel/evaluators/shaker'; -import path from 'path'; function getFileName() { return path.resolve(__dirname, `../__fixtures__/test.js`); diff --git a/src/__tests__/module.test.ts b/src/__tests__/module.test.ts index 7a7f11c71..ac5f7b454 100644 --- a/src/__tests__/module.test.ts +++ b/src/__tests__/module.test.ts @@ -291,7 +291,7 @@ it('has global objects available without referencing global', () => { it('changes resolve behaviour on overriding _resolveFilename', () => { const originalResolveFilename = Module._resolveFilename; - Module._resolveFilename = id => (id === 'foo' ? 'bar' : id); + Module._resolveFilename = (id) => (id === 'foo' ? 'bar' : id); const mod = new Module(getFileName(), options); diff --git a/src/__tests__/preval.test.ts b/src/__tests__/preval.test.ts index 62a622c9a..33536b585 100644 --- a/src/__tests__/preval.test.ts +++ b/src/__tests__/preval.test.ts @@ -1,6 +1,6 @@ +import { join, resolve } from 'path'; import * as babel from '@babel/core'; import dedent from 'dedent'; -import { join, resolve } from 'path'; import stripAnsi from 'strip-ansi'; import Module from '../babel/module'; @@ -70,7 +70,7 @@ function run( const transpile: TranspileFn = async ( input: string, - conf: (original: typeof babelrc) => typeof babelrc = i => i + conf: (original: typeof babelrc) => typeof babelrc = (i) => i ) => { const { code, metadata } = await transformAsync(input, { ...conf(babelrc), @@ -186,7 +186,7 @@ function run( color: ${'${Colors.BLUE}'}; \`; `, - config => ({ + (config) => ({ ...config, plugins: [ '@babel/plugin-transform-typescript', @@ -557,7 +557,7 @@ function run( color: blue; \`; `, - config => ({ + (config) => ({ ...config, plugins: ['@babel/plugin-syntax-jsx', ...(config.plugins || [])], }) @@ -975,7 +975,7 @@ function run( } describe('shaker', () => { - run(require('../babel/evaluators/shaker').default, transpile => { + run(require('../babel/evaluators/shaker').default, (transpile) => { it('should work with wildcard imports', async () => { const { code, metadata } = await transpile( dedent` diff --git a/src/__tests__/styled.test.js b/src/__tests__/styled.test.js index 4d501f451..551fbce2c 100644 --- a/src/__tests__/styled.test.js +++ b/src/__tests__/styled.test.js @@ -18,7 +18,7 @@ it('renders tag with display name and class name', () => { }); it('renders component with display name and class name', () => { - const Custom = props =>
; + const Custom = (props) =>
; const Test = styled(Custom)({ name: 'TestComponent', @@ -41,7 +41,7 @@ it('applies CSS variables in style prop', () => { vars: { foo: ['tomato'], bar: [20, 'px'], - baz: [props => props.size, 'px'], + baz: [(props) => props.size, 'px'], }, }); @@ -104,7 +104,7 @@ it('replaces simple component with as prop', () => { }); it('replaces custom component with as prop for primitive', () => { - const Custom = props =>
; + const Custom = (props) =>
; const Test = styled(Custom)({ name: 'TestComponent', @@ -121,7 +121,7 @@ it('replaces custom component with as prop for primitive', () => { }); it('replaces primitive with as prop for custom component', () => { - const Custom = props =>
; + const Custom = (props) =>
; const Test = styled('div')({ name: 'TestComponent', @@ -196,7 +196,7 @@ it('does not filter attributes for custom elements', () => { }); it('does not filter attributes for components', () => { - const Custom = props =>
{props.unknownAttribute}
; + const Custom = (props) =>
{props.unknownAttribute}
; const Test = styled(Custom)({ name: 'TestComponent', @@ -211,7 +211,7 @@ it('does not filter attributes for components', () => { }); it('provides linaria component className for composition as last item in props.className', () => { - const Custom = props => { + const Custom = (props) => { const classnames = props.className.split(' '); const linariaClassName = classnames[classnames.length - 1]; const newClassNames = [ diff --git a/src/__tests__/transform.test.ts b/src/__tests__/transform.test.ts index b18411e37..171a22f6d 100644 --- a/src/__tests__/transform.test.ts +++ b/src/__tests__/transform.test.ts @@ -1,7 +1,7 @@ /* eslint-disable no-template-curly-in-string */ -import dedent from 'dedent'; import path from 'path'; +import dedent from 'dedent'; import transform, { transformUrl } from '../transform'; import evaluator from '../babel/evaluators/extractor'; diff --git a/src/__utils__/linaria-snapshot-serializer.ts b/src/__utils__/linaria-snapshot-serializer.ts index 253553290..e157048a0 100644 --- a/src/__utils__/linaria-snapshot-serializer.ts +++ b/src/__utils__/linaria-snapshot-serializer.ts @@ -16,7 +16,7 @@ export default { CSS: ${Object.keys(linaria.rules) - .map(selector => `${selector} {${linaria.rules[selector].cssText}}`) + .map((selector) => `${selector} {${linaria.rules[selector].cssText}}`) .join('\n')} Dependencies: ${ diff --git a/src/babel/eval-cache.ts b/src/babel/eval-cache.ts index bc66f008b..b60fdae28 100644 --- a/src/babel/eval-cache.ts +++ b/src/babel/eval-cache.ts @@ -6,15 +6,12 @@ const fileHashes = new Map(); const evalCache = new Map(); const fileKeys = new Map(); -const hash = (text: string) => - createHash('sha1') - .update(text) - .digest('base64'); +const hash = (text: string) => createHash('sha1').update(text).digest('base64'); let lastText: string = ''; let lastHash: string = hash(lastText); -const memoizedHash: typeof hash = text => { +const memoizedHash: typeof hash = (text) => { if (lastText !== text) { lastHash = hash(text); lastText = text; diff --git a/src/babel/evaluators/buildOptions.ts b/src/babel/evaluators/buildOptions.ts index c8602f15c..2647a816f 100644 --- a/src/babel/evaluators/buildOptions.ts +++ b/src/babel/evaluators/buildOptions.ts @@ -33,7 +33,7 @@ export default function buildOptions( ], ], plugins: [ - ...plugins.map(name => require.resolve(name as string)), + ...plugins.map((name) => require.resolve(name as string)), // We don't support dynamic imports when evaluating, but don't wanna syntax error // This will replace dynamic imports with an object that does nothing require.resolve('../dynamic-import-noop'), @@ -51,7 +51,7 @@ export default function buildOptions( 'presets', 'plugins', ]; - keys.forEach(field => { + keys.forEach((field) => { babelOptions[field] = babelOptions[field] ? babelOptions[field]!.filter((item: PluginItem) => { // If item is an array it's a preset/plugin with options ([preset, options]) @@ -73,7 +73,7 @@ export default function buildOptions( } // Loop through the default presets/plugins to see if it already exists - return !defaults[field].some(it => + return !defaults[field].some((it) => // The default presets/plugins can also have nested arrays, Array.isArray(it) ? it[0] === name : it === name ); diff --git a/src/babel/evaluators/extractor/RequirementsResolver.ts b/src/babel/evaluators/extractor/RequirementsResolver.ts index 61d674734..64d7b16d3 100644 --- a/src/babel/evaluators/extractor/RequirementsResolver.ts +++ b/src/babel/evaluators/extractor/RequirementsResolver.ts @@ -19,7 +19,7 @@ export default class RequirementsResolver { ): t.Statement[] { const resolver = new RequirementsResolver(); if (Array.isArray(path)) { - path.forEach(p => this.resolve(p)); + path.forEach((p) => this.resolve(p)); } else { resolver.resolve(path); } @@ -33,7 +33,7 @@ export default class RequirementsResolver { * Checks that specified node or one of its ancestors is already added */ private isAdded(path: NodePath): boolean { - if (this.requirements.some(req => req.path === path)) { + if (this.requirements.some((req) => req.path === path)) { return true; } @@ -143,7 +143,7 @@ export default class RequirementsResolver { } path.traverse({ - Identifier: p => { + Identifier: (p) => { const binding = this.resolveIdentifier(p); if (binding !== null) { set.add(binding.path); @@ -182,11 +182,11 @@ export default class RequirementsResolver { throw new Error('Circular dependency'); } - statements.push(...zeroDeps.map(req => req.result)); + statements.push(...zeroDeps.map((req) => req.result)); // Let's remove already added statements from the requirements of the rest of the list. - requirements = rest.map(req => { + requirements = rest.map((req) => { const reqs = new Set(req.requirements); - zeroDeps.forEach(r => reqs.delete(r.path)); + zeroDeps.forEach((r) => reqs.delete(r.path)); return { ...req, requirements: reqs, diff --git a/src/babel/evaluators/preeval.ts b/src/babel/evaluators/preeval.ts index eff7ff3bc..8b92840f0 100644 --- a/src/babel/evaluators/preeval.ts +++ b/src/babel/evaluators/preeval.ts @@ -6,10 +6,10 @@ import { NodePath } from '@babel/traverse'; import { types } from '@babel/core'; import GenerateClassNames from '../visitors/GenerateClassNames'; import DetectStyledImportName from '../visitors/DetectStyledImportName'; +import { State, StrictOptions } from '../types'; import JSXElement from './visitors/JSXElement'; import ProcessStyled from './visitors/ProcessStyled'; import ProcessCSS from './visitors/ProcessCSS'; -import { State, StrictOptions } from '../types'; function preeval(_babel: any, options: StrictOptions) { return { @@ -26,8 +26,8 @@ function preeval(_babel: any, options: StrictOptions) { // We need our transforms to run before anything else // So we traverse here instead of a in a visitor path.traverse({ - ImportDeclaration: p => DetectStyledImportName(p, state), - TaggedTemplateExpression: p => + ImportDeclaration: (p) => DetectStyledImportName(p, state), + TaggedTemplateExpression: (p) => GenerateClassNames(p, state, options), JSXElement, }); diff --git a/src/babel/evaluators/shaker/DepsGraph.ts b/src/babel/evaluators/shaker/DepsGraph.ts index 7b1d19db7..9a2ed49c7 100644 --- a/src/babel/evaluators/shaker/DepsGraph.ts +++ b/src/babel/evaluators/shaker/DepsGraph.ts @@ -59,7 +59,7 @@ export default class DepsGraph { const allReferences = [ ...Array.from(this.dependencies.get(declaration) || []), ...Array.from(this.dependents.get(declaration) || []), - ].filter(i => t.isIdentifier(i) && i.name === name) as t.Identifier[]; + ].filter((i) => t.isIdentifier(i) && i.name === name) as t.Identifier[]; allReferences.push(declaration); return allReferences; } @@ -125,7 +125,7 @@ export default class DepsGraph { getLeafs(only: string[] | null): Array { this.processQueue(); return only - ? only.map(name => this.exports.get(name)) + ? only.map((name) => this.exports.get(name)) : Array.from(this.exports.values()); } } diff --git a/src/babel/evaluators/shaker/GraphBuilderState.ts b/src/babel/evaluators/shaker/GraphBuilderState.ts index 3263ef550..167b40f3e 100644 --- a/src/babel/evaluators/shaker/GraphBuilderState.ts +++ b/src/babel/evaluators/shaker/GraphBuilderState.ts @@ -27,7 +27,7 @@ export default abstract class GraphBuilderState { public onVisit(callback: OnVisitCallback) { this.callbacks.push(callback); return () => { - this.callbacks = this.callbacks.filter(c => c !== callback); + this.callbacks = this.callbacks.filter((c) => c !== callback); }; } diff --git a/src/babel/evaluators/shaker/Visitors.ts b/src/babel/evaluators/shaker/Visitors.ts index 92157dd5e..948d8d4d9 100644 --- a/src/babel/evaluators/shaker/Visitors.ts +++ b/src/babel/evaluators/shaker/Visitors.ts @@ -1,11 +1,11 @@ import { types as t } from '@babel/core'; import peek from '../../utils/peek'; +import { warn } from '../../utils/logger'; import GraphBuilderState from './GraphBuilderState'; import identifierHandlers from './identifierHandlers'; import { Visitor, Visitors } from './types'; import { visitors as core } from './langs/core'; -import { warn } from '../../utils/logger'; const visitors: Visitors = { Identifier( @@ -75,10 +75,10 @@ export function getVisitors( ): Visitor[] { const aliases: Array = t.ALIAS_KEYS[node.type] || []; const aliasVisitors = aliases - .map(type => visitors[type]) - .filter(i => i) as Visitor[]; + .map((type) => visitors[type]) + .filter((i) => i) as Visitor[]; return [...aliasVisitors, visitors[node.type] as Visitor].filter( - v => v + (v) => v ); } diff --git a/src/babel/evaluators/shaker/graphBuilder.ts b/src/babel/evaluators/shaker/graphBuilder.ts index b6a17c480..0c103912b 100644 --- a/src/babel/evaluators/shaker/graphBuilder.ts +++ b/src/babel/evaluators/shaker/graphBuilder.ts @@ -95,10 +95,10 @@ class GraphBuilder extends GraphBuilderState { } if (isExpression && !ignoreDeps) { - dependencies.forEach(dep => this.graph.addEdge(node, dep)); + dependencies.forEach((dep) => this.graph.addEdge(node, dep)); } - this.callbacks.forEach(callback => callback(node)); + this.callbacks.forEach((callback) => callback(node)); } visit( @@ -126,7 +126,7 @@ class GraphBuilder extends GraphBuilderState { // Each property of the assigned object is independent named export. // We also need to specify all dependencies and call `visit` for every value. this.visit(node.left, node, 'left'); - node.right.properties.forEach(prop => { + node.right.properties.forEach((prop) => { if (t.isObjectProperty(prop) && t.isIdentifier(prop.key)) { this.visit(prop.value, prop, 'value'); this.graph.addExport(prop.key.name, prop); diff --git a/src/babel/evaluators/shaker/identifierHandlers.ts b/src/babel/evaluators/shaker/identifierHandlers.ts index 938772b69..b69443048 100644 --- a/src/babel/evaluators/shaker/identifierHandlers.ts +++ b/src/babel/evaluators/shaker/identifierHandlers.ts @@ -1,6 +1,6 @@ import { types as t } from '@babel/core'; -import GraphBuilderState from './GraphBuilderState'; import peek from '../../utils/peek'; +import GraphBuilderState from './GraphBuilderState'; import { IdentifierHandlerType, NodeType } from './types'; import { identifierHandlers as core } from './langs/core'; import ScopeManager from './scope'; @@ -41,7 +41,7 @@ export function batchDefineHandlers( handler: IdentifierHandlerType ) { typesAndFields.forEach(([type, ...fields]) => - fields.forEach(field => defineHandler(type, field, handler)) + fields.forEach((field) => defineHandler(type, field, handler)) ); } diff --git a/src/babel/evaluators/shaker/index.ts b/src/babel/evaluators/shaker/index.ts index d55bd3e3e..07817695f 100644 --- a/src/babel/evaluators/shaker/index.ts +++ b/src/babel/evaluators/shaker/index.ts @@ -1,9 +1,9 @@ -import shake from './shaker'; -import { debug } from '../../utils/logger'; import generator from '@babel/generator'; -import { Evaluator, StrictOptions } from '../../types'; import { transformSync, types } from '@babel/core'; +import { debug } from '../../utils/logger'; +import { Evaluator, StrictOptions } from '../../types'; import buildOptions from '../buildOptions'; +import shake from './shaker'; function prepareForShake( filename: string, diff --git a/src/babel/evaluators/shaker/langs/core.ts b/src/babel/evaluators/shaker/langs/core.ts index 03401bbe3..b96bbd695 100644 --- a/src/babel/evaluators/shaker/langs/core.ts +++ b/src/babel/evaluators/shaker/langs/core.ts @@ -28,7 +28,7 @@ const sideEffects: SideEffect[] = [ [ // if the first argument of forEach is required, mark forEach as required { - callee: node => + callee: (node) => t.isMemberExpression(node) && t.isIdentifier(node.property) && node.property.name === 'forEach', @@ -123,7 +123,7 @@ export const visitors: Visitors = { * In real life, some of the parameters can be omitted, but it's not trivial to implement that type of tree shaking. */ Function(this: GraphBuilderState, node: t.Function) { - const unsubscribe = this.onVisit(descendant => + const unsubscribe = this.onVisit((descendant) => this.graph.addEdge(node, descendant) ); this.baseVisit(node, true); // ignoreDeps=true prevents default dependency resolving @@ -132,7 +132,7 @@ export const visitors: Visitors = { this.graph.addEdge(node, node.body); this.graph.addEdge(node.body, node); - node.params.forEach(param => this.graph.addEdge(node.body, param)); + node.params.forEach((param) => this.graph.addEdge(node.body, param)); if (t.isFunctionDeclaration(node) && node.id !== null) { // `id` is an identifier which depends on the function declaration this.graph.addEdge(node.id, node); @@ -166,10 +166,12 @@ export const visitors: Visitors = { if (t.isProgram(node)) { const exportsDeclaration = this.scope.getDeclaration('global:exports')!; this.graph.addEdge(node, exportsDeclaration); - node.directives.forEach(directive => this.graph.addEdge(node, directive)); + node.directives.forEach((directive) => + this.graph.addEdge(node, directive) + ); } - node.body.forEach(exp => { + node.body.forEach((exp) => { this.graph.addEdge(exp, node); }); }, @@ -187,7 +189,7 @@ export const visitors: Visitors = { */ TryStatement(this: GraphBuilderState, node: t.TryStatement) { this.baseVisit(node); - [node.handler, node.finalizer].forEach(statement => { + [node.handler, node.finalizer].forEach((statement) => { if (statement) { this.graph.addEdge(node.block, statement); this.graph.addEdge(statement, node.block); @@ -199,7 +201,7 @@ export const visitors: Visitors = { IfStatement(this: GraphBuilderState, node: t.IfStatement) { this.baseVisit(node); - [node.consequent, node.alternate].forEach(statement => { + [node.consequent, node.alternate].forEach((statement) => { if (statement) { this.graph.addEdge(statement, node); } @@ -223,7 +225,7 @@ export const visitors: Visitors = { SwitchCase(this: GraphBuilderState, node: t.SwitchCase) { this.baseVisit(node); - node.consequent.forEach(statement => this.graph.addEdge(statement, node)); + node.consequent.forEach((statement) => this.graph.addEdge(statement, node)); if (node.test) { this.graph.addEdge(node, node.test); } @@ -231,7 +233,7 @@ export const visitors: Visitors = { SwitchStatement(this: GraphBuilderState, node: t.SwitchStatement) { this.baseVisit(node); - node.cases.forEach(c => this.graph.addEdge(c, node)); + node.cases.forEach((c) => this.graph.addEdge(c, node)); this.graph.addEdge(node, node.discriminant); }, @@ -242,7 +244,7 @@ export const visitors: Visitors = { this.graph.addEdge(node.body, node); } - [node.init, node.test, node.update, node.body].forEach(child => { + [node.init, node.test, node.update, node.body].forEach((child) => { if (child) { this.graph.addEdge(node, child); } @@ -297,7 +299,7 @@ export const visitors: Visitors = { ObjectExpression(this: GraphBuilderState, node: t.ObjectExpression) { this.context.push('expression'); this.baseVisit(node); - node.properties.forEach(prop => { + node.properties.forEach((prop) => { this.graph.addEdge(node, prop); if (t.isObjectMethod(prop)) { this.graph.addEdge(prop, prop.key); @@ -413,7 +415,7 @@ export const visitors: Visitors = { VariableDeclaration(this: GraphBuilderState, node: t.VariableDeclaration) { this.meta.set('kind-of-declaration', node.kind); this.baseVisit(node); - node.declarations.forEach(declaration => + node.declarations.forEach((declaration) => this.graph.addEdge(declaration, node) ); this.meta.delete('kind-of-declaration'); @@ -510,7 +512,7 @@ export const visitors: Visitors = { return callback(node, this); }); - getAffectedNodes(node, this).forEach(affectedNode => { + getAffectedNodes(node, this).forEach((affectedNode) => { this.graph.addEdge(affectedNode, node); if (t.isIdentifier(affectedNode)) { this.graph.addEdge( diff --git a/src/babel/evaluators/shaker/scope.ts b/src/babel/evaluators/shaker/scope.ts index cc4263a6c..84bc4fde9 100644 --- a/src/babel/evaluators/shaker/scope.ts +++ b/src/babel/evaluators/shaker/scope.ts @@ -85,7 +85,7 @@ export default class ScopeManager { const idName = identifier.name; const scope = this.stack .slice(stack) - .find(s => !isHoistable || functionScopes.has(s))!; + .find((s) => !isHoistable || functionScopes.has(s))!; if (this.global.has(idName)) { // It's probably a declaration of a previous referenced identifier // Let's use naïve implementation of hoisting @@ -104,12 +104,12 @@ export default class ScopeManager { this.declarations.set(getId(scope, identifier), identifier); const handlers = this.handlers.get(scopeIds.get(scope)!)!; - handlers.forEach(handler => handler(identifier, from)); + handlers.forEach((handler) => handler(identifier, from)); } addReference(identifier: Identifier): Identifier | PromisedNode { const name = identifier.name; - const scope = this.stack.find(s => s.has(name)) || this.global; + const scope = this.stack.find((s) => s.has(name)) || this.global; const id = getId(scope, identifier); if (scope === this.global && !scope.has(name)) { scope.set(name, new Set()); @@ -123,7 +123,7 @@ export default class ScopeManager { whereIsDeclared(identifier: Identifier): ScopeId | undefined { const name = identifier.name; const scope = this.stack.find( - s => s.has(name) && s.get(name)!.has(identifier) + (s) => s.has(name) && s.get(name)!.has(identifier) ); if (scope) { return scopeIds.get(scope); @@ -158,7 +158,7 @@ export default class ScopeManager { const scopeId = scopeIds.get(this.stack[0])!; this.handlers.get(scopeId)!.push(handler); return () => { - const handlers = this.handlers.get(scopeId)!.filter(h => h !== handler); + const handlers = this.handlers.get(scopeId)!.filter((h) => h !== handler); this.handlers.set(scopeId, handlers); }; } diff --git a/src/babel/evaluators/shaker/shaker.ts b/src/babel/evaluators/shaker/shaker.ts index 027baecfe..6d403c959 100644 --- a/src/babel/evaluators/shaker/shaker.ts +++ b/src/babel/evaluators/shaker/shaker.ts @@ -1,9 +1,9 @@ import { types as t } from '@babel/core'; import generator from '@babel/generator'; -import build from './graphBuilder'; import isNode from '../../utils/isNode'; import getVisitorKeys from '../../utils/getVisitorKeys'; import { debug } from '../../utils/logger'; +import build from './graphBuilder'; import dumpNode from './dumpNode'; /* @@ -74,13 +74,13 @@ export default function shake( const depsGraph = build(rootPath); const alive = new Set(); - let deps: t.Node[] = depsGraph.getLeafs(exports).map(i => i) as t.Node[]; + let deps: t.Node[] = depsGraph.getLeafs(exports).map((i) => i) as t.Node[]; while (deps.length > 0) { // Mark all dependencies as alive - deps.forEach(d => alive.add(d)); + deps.forEach((d) => alive.add(d)); // Collect new dependencies of dependencies - deps = depsGraph.getDependencies(deps).filter(d => !alive.has(d)); + deps = depsGraph.getDependencies(deps).filter((d) => !alive.has(d)); } const shaken = shakeNode(rootPath, alive) as t.Program; @@ -95,7 +95,7 @@ export default function shake( const defaultMembers = depsGraph.importTypes.get(source) === 'wildcard' ? ['*'] : []; const aliveMembers = new Set( - members.filter(i => alive.has(i)).map(i => i.name) + members.filter((i) => alive.has(i)).map((i) => i.name) ); imports.set( diff --git a/src/babel/evaluators/templateProcessor.ts b/src/babel/evaluators/templateProcessor.ts index 5fd0efa94..af3f3069c 100644 --- a/src/babel/evaluators/templateProcessor.ts +++ b/src/babel/evaluators/templateProcessor.ts @@ -60,7 +60,7 @@ export default function getTemplateProcessor(options: StrictOptions) { const [slug, displayName, className] = getLinariaComment(path); const parent = path.findParent( - p => + (p) => types.isObjectProperty(p) || types.isJSXOpeningElement(p) || types.isVariableDeclarator(p) @@ -243,7 +243,7 @@ export default function getTemplateProcessor(options: StrictOptions) { // we don't need to use 2 custom properties for them, we can use a single one const result: { [key: string]: Interpolation } = {}; - interpolations.forEach(it => { + interpolations.forEach((it) => { const key = it.source + it.unit; if (key in result) { @@ -260,7 +260,7 @@ export default function getTemplateProcessor(options: StrictOptions) { types.objectProperty( types.identifier('vars'), types.objectExpression( - Object.keys(result).map(key => { + Object.keys(result).map((key) => { const { id, node, unit } = result[key]; const items = [node]; @@ -306,7 +306,7 @@ export default function getTemplateProcessor(options: StrictOptions) { cssText, className: className!, displayName: displayName!, - start: path.parent && path.parent.loc ? path.parent.loc.start : null, + start: path.parent?.loc?.start ?? null, }; }; } diff --git a/src/babel/evaluators/visitors/JSXElement.ts b/src/babel/evaluators/visitors/JSXElement.ts index 6364d5e6b..93c01d7f4 100644 --- a/src/babel/evaluators/visitors/JSXElement.ts +++ b/src/babel/evaluators/visitors/JSXElement.ts @@ -27,7 +27,7 @@ export default function JSXElement(path: NodePath) { // Is it not just a function, but a method `render`? if (getFunctionName(scopePath) === 'render') { - const decl = scopePath.findParent(p => p.isClassDeclaration()); + const decl = scopePath.findParent((p) => p.isClassDeclaration()); // Replace the whole component if (decl?.isClassDeclaration()) { diff --git a/src/babel/evaluators/visitors/ProcessStyled.ts b/src/babel/evaluators/visitors/ProcessStyled.ts index 1d51876ae..c93440d4e 100644 --- a/src/babel/evaluators/visitors/ProcessStyled.ts +++ b/src/babel/evaluators/visitors/ProcessStyled.ts @@ -9,8 +9,8 @@ import { NodePath } from '@babel/traverse'; import { types } from '@babel/core'; -import getLinariaComment from '../../utils/getLinariaComment'; import { expression } from '@babel/template'; +import getLinariaComment from '../../utils/getLinariaComment'; const linariaComponentTpl = expression( `{ diff --git a/src/babel/extract.ts b/src/babel/extract.ts index c974308b8..95794860d 100644 --- a/src/babel/extract.ts +++ b/src/babel/extract.ts @@ -78,7 +78,7 @@ function addLinariaPreval( expressionWrapperTpl({ wrapName }), exportsLinariaPrevalTpl({ expressions: types.arrayExpression( - lazyDeps.map(expression => expressionTpl({ expression, wrapName })) + lazyDeps.map((expression) => expressionTpl({ expression, wrapName })) ), }), ]; @@ -113,8 +113,8 @@ export default function extract(_babel: any, options: StrictOptions) { // We need our transforms to run before anything else // So we traverse here instead of a in a visitor path.traverse({ - ImportDeclaration: p => DetectStyledImportName(p, state), - TaggedTemplateExpression: p => { + ImportDeclaration: (p) => DetectStyledImportName(p, state), + TaggedTemplateExpression: (p) => { GenerateClassNames(p, state, options); CollectDependencies(p, state, options); }, @@ -128,10 +128,10 @@ export default function extract(_babel: any, options: StrictOptions) { [] as LazyValue[] ); - const expressionsToEvaluate = lazyDeps.map(v => + const expressionsToEvaluate = lazyDeps.map((v) => isNodePath(v.ex) ? v.ex.node : v.ex ); - const originalLazyExpressions = lazyDeps.map(v => + const originalLazyExpressions = lazyDeps.map((v) => isNodePath(v.originalEx) ? v.originalEx.node : v.originalEx ); @@ -142,13 +142,13 @@ export default function extract(_babel: any, options: StrictOptions) { if (expressionsToEvaluate.length > 0) { debug( 'lazy-deps:original-expressions-list', - originalLazyExpressions.map(node => + originalLazyExpressions.map((node) => typeof node !== 'string' ? generator(node).code : node ) ); debug( 'lazy-deps:expressions-to-eval-list', - expressionsToEvaluate.map(node => + expressionsToEvaluate.map((node) => typeof node !== 'string' ? generator(node).code : node ) ); @@ -182,7 +182,7 @@ export default function extract(_babel: any, options: StrictOptions) { originalLazyExpressions.forEach((key, idx) => valueCache.set(key, lazyValues[idx]) ); - state.queue.forEach(item => process(item, state, valueCache)); + state.queue.forEach((item) => process(item, state, valueCache)); }, exit(_: any, state: State) { if (Object.keys(state.rules).length) { diff --git a/src/babel/module.ts b/src/babel/module.ts index fe7555418..e3d837799 100644 --- a/src/babel/module.ts +++ b/src/babel/module.ts @@ -144,7 +144,7 @@ class Module { try { // Check for supported extensions - this.extensions.forEach(ext => { + this.extensions.forEach((ext) => { if (ext in extensions) { return; } @@ -159,7 +159,7 @@ class Module { return Module._resolveFilename(id, this); } finally { // Cleanup the extensions we added to restore previous behaviour - added.forEach(ext => delete extensions[ext]); + added.forEach((ext) => delete extensions[ext]); } }; @@ -191,11 +191,11 @@ class Module { ); } - this.dependencies && this.dependencies.push(id); + this.dependencies?.push(id); let cacheKey = filename; let only: string[] = []; - if (this.imports && this.imports.has(id)) { + if (this.imports?.has(id)) { // We know what exactly we need from this module. Let's shake it! only = this.imports.get(id)!.sort(); if (only.length === 0) { diff --git a/src/babel/utils/getLinariaComment.ts b/src/babel/utils/getLinariaComment.ts index 8f74d0186..1ed3b7c9e 100644 --- a/src/babel/utils/getLinariaComment.ts +++ b/src/babel/utils/getLinariaComment.ts @@ -12,7 +12,7 @@ export default function getLinariaComment( return [null, null, null]; } - const idx = comments.findIndex(comment => pattern.test(comment.value)); + const idx = comments.findIndex((comment) => pattern.test(comment.value)); if (idx === -1) { return [null, null, null]; } @@ -26,5 +26,5 @@ export default function getLinariaComment( path.node.leadingComments = comments.filter((_, i) => i !== idx); } - return matched[1].split(' ').map(i => (i ? i : null)); + return matched[1].split(' ').map((i) => (i ? i : null)); } diff --git a/src/babel/utils/isSerializable.ts b/src/babel/utils/isSerializable.ts index b9443a757..cb5b8a475 100644 --- a/src/babel/utils/isSerializable.ts +++ b/src/babel/utils/isSerializable.ts @@ -1,5 +1,5 @@ -import isBoxedPrimitive from './isBoxedPrimitive'; import { Serializable } from '../types'; +import isBoxedPrimitive from './isBoxedPrimitive'; export default function isSerializable(o: any): o is Serializable { return ( diff --git a/src/babel/utils/isStyledOrCss.ts b/src/babel/utils/isStyledOrCss.ts index 297711d57..2b69ce941 100644 --- a/src/babel/utils/isStyledOrCss.ts +++ b/src/babel/utils/isStyledOrCss.ts @@ -1,7 +1,7 @@ import { types as t } from '@babel/core'; import { NodePath } from '@babel/traverse'; -import hasImport from './hasImport'; import { State, TemplateExpression } from '../types'; +import hasImport from './hasImport'; type Result = NonNullable | 'css' | null; diff --git a/src/babel/utils/throwIfInvalid.ts b/src/babel/utils/throwIfInvalid.ts index 8f39df09d..0f7a3fa58 100644 --- a/src/babel/utils/throwIfInvalid.ts +++ b/src/babel/utils/throwIfInvalid.ts @@ -1,6 +1,6 @@ import generator from '@babel/generator'; -import isSerializable from './isSerializable'; import { Serializable } from '../types'; +import isSerializable from './isSerializable'; // Throw if we can't handle the interpolated value function throwIfInvalid( diff --git a/src/babel/utils/toCSS.ts b/src/babel/utils/toCSS.ts index c4d430354..4383f5f20 100644 --- a/src/babel/utils/toCSS.ts +++ b/src/babel/utils/toCSS.ts @@ -1,8 +1,8 @@ // TypeScript Version: 3.2 -import isSerializable from './isSerializable'; import { unitless } from '../units'; import { JSONValue } from '../types'; +import isSerializable from './isSerializable'; import isBoxedPrimitive from './isBoxedPrimitive'; const hyphenate = (s: string) => diff --git a/src/babel/visitors/CollectDependencies.ts b/src/babel/visitors/CollectDependencies.ts index 76fd4a033..c00583b95 100644 --- a/src/babel/visitors/CollectDependencies.ts +++ b/src/babel/visitors/CollectDependencies.ts @@ -31,7 +31,7 @@ function hoist(ex: NodePath) { hoist(initPath); initPath.hoist(scope); if (initPath.isIdentifier()) { - referencePaths.forEach(referencePath => { + referencePaths.forEach((referencePath) => { referencePath.replaceWith(t.identifier(initPath.node.name)); // referencePath.node.name = initPath.node.name; }); @@ -92,7 +92,7 @@ export default function CollectDependencies( debug( 'template-parse:evaluate-expressions', - expressionValues.map(expressionValue => + expressionValues.map((expressionValue) => expressionValue.kind === ValueType.VALUE ? expressionValue.value : 'lazy' ) ); diff --git a/src/babel/visitors/DetectStyledImportName.ts b/src/babel/visitors/DetectStyledImportName.ts index 878c0d117..3335f2405 100644 --- a/src/babel/visitors/DetectStyledImportName.ts +++ b/src/babel/visitors/DetectStyledImportName.ts @@ -15,7 +15,7 @@ export default function DetectStyledImportName( return; } - path.node.specifiers.forEach(specifier => { + path.node.specifiers.forEach((specifier) => { if (!t.isImportSpecifier(specifier)) { return; } diff --git a/src/babel/visitors/GenerateClassNames.ts b/src/babel/visitors/GenerateClassNames.ts index a430d98e1..82c7ede87 100644 --- a/src/babel/visitors/GenerateClassNames.ts +++ b/src/babel/visitors/GenerateClassNames.ts @@ -37,7 +37,7 @@ export default function GenerateClassNames( let [slug, displayName, predefinedClassName] = getLinariaComment(path); const parent = path.findParent( - p => + (p) => t.isObjectProperty(p) || t.isJSXOpeningElement(p) || t.isVariableDeclarator(p) diff --git a/src/cli.ts b/src/cli.ts index 89e68a4c4..97035622d 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -3,8 +3,8 @@ */ import path from 'path'; -import normalize from 'normalize-path'; import fs from 'fs'; +import normalize from 'normalize-path'; import mkdirp from 'mkdirp'; import glob from 'glob'; import yargs from 'yargs'; @@ -84,7 +84,7 @@ function processFiles(files: string[], options: Options) { [] as string[] ); - resolvedFiles.forEach(filename => { + resolvedFiles.forEach((filename) => { const outputFilename = resolveOutputFilename(filename, options.outDir); const { cssText, sourceMap, cssSourceMapText } = transform( diff --git a/src/loader.ts b/src/loader.ts index ac1ecf279..671b85561 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -13,11 +13,11 @@ import enhancedResolve from 'enhanced-resolve'; import findYarnWorkspaceRoot from 'find-yarn-workspace-root'; import { loader as webpackLoader } from 'webpack'; import { RawSourceMap } from 'source-map'; +import cosmiconfig from 'cosmiconfig'; import * as EvalCache from './babel/eval-cache'; import Module from './babel/module'; import { debug } from './babel/utils/logger'; import transform from './transform'; -import cosmiconfig from 'cosmiconfig'; const workspaceRoot = findYarnWorkspaceRoot(); const lernaConfig = cosmiconfig('lerna', { @@ -68,7 +68,7 @@ export default function loader( // There is this.resolve, but it's asynchronous // Another option is to read the webpack.config.js, but it won't work for programmatic usage // This API is used by many loaders/plugins, so hope we're safe for a while - this._compilation && this._compilation.options.resolve + this._compilation?.options.resolve ? { ...resolveOptions, alias: this._compilation.options.resolve.alias, @@ -107,8 +107,8 @@ export default function loader( ).toString('base64')}*/`; } - if (result.dependencies && result.dependencies.length) { - result.dependencies.forEach(dep => { + if (result.dependencies?.length) { + result.dependencies.forEach((dep) => { try { const f = resolveSync(path.dirname(this.resourcePath), dep); diff --git a/src/react/styled.ts b/src/react/styled.ts index e45e91662..5340ca405 100644 --- a/src/react/styled.ts +++ b/src/react/styled.ts @@ -26,7 +26,7 @@ const restOp = ( keysToExclude: string[] ): { [key: string]: any } => Object.keys(obj) - .filter(prop => !keysToExclude.includes(prop)) + .filter((prop) => !keysToExclude.includes(prop)) .reduce((acc, curr) => Object.assign(acc, { [curr]: obj[curr] }), {}); // rest operator workaround const warnIfInvalid = (value: any, componentName: string) => { diff --git a/src/server/collect.ts b/src/server/collect.ts index 75c2c0e68..1dc985703 100644 --- a/src/server/collect.ts +++ b/src/server/collect.ts @@ -28,7 +28,7 @@ export default function collect(html: string, css: string): CollectResult { const handleAtRule = (rule: AtRule) => { let addedToCritical = false; - rule.each(childRule => { + rule.each((childRule) => { if (isCritical(childRule) && !addedToCritical) { critical.append(rule.clone()); addedToCritical = true; @@ -46,7 +46,7 @@ export default function collect(html: string, css: string): CollectResult { } }; - stylesheet.walkAtRules('font-face', rule => { + stylesheet.walkAtRules('font-face', (rule) => { /** * @font-face rules may be defined also in CSS conditional groups (eg. @media) * we want only handle those from top-level, rest will be handled in stylesheet.walkRules @@ -58,7 +58,7 @@ export default function collect(html: string, css: string): CollectResult { const walkedAtRules = new Set(); - stylesheet.walkRules(rule => { + stylesheet.walkRules((rule) => { if ('name' in rule.parent && rule.parent.name === 'keyframes') { return; } @@ -78,11 +78,11 @@ export default function collect(html: string, css: string): CollectResult { } }); - critical.walkDecls(/animation/, decl => { + critical.walkDecls(/animation/, (decl) => { animations.add(decl.value.split(' ')[0]); }); - stylesheet.walkAtRules('keyframes', rule => { + stylesheet.walkAtRules('keyframes', (rule) => { if (animations.has(rule.params)) { critical.append(rule); } @@ -100,7 +100,7 @@ const extractClassesFromHtml = (html: string): RegExp => { let match = regex.exec(html); while (match !== null) { - match[1].split(' ').forEach(className => htmlClasses.push(className)); + match[1].split(' ').forEach((className) => htmlClasses.push(className)); match = regex.exec(html); } diff --git a/src/stylelint/preprocessor.ts b/src/stylelint/preprocessor.ts index f1d19c186..f45203828 100644 --- a/src/stylelint/preprocessor.ts +++ b/src/stylelint/preprocessor.ts @@ -68,7 +68,7 @@ function preprocessor() { // Construct a CSS-ish file from the unprocessed style rules let cssText = ''; - Object.keys(rules).forEach(selector => { + Object.keys(rules).forEach((selector) => { const rule = rules[selector]; // Append new lines until we get to the start line number @@ -116,17 +116,12 @@ function preprocessor() { if (!loc) { // If the error doesn't have location info, try to find it from the code frame - const line = message.split('\n').find(l => l.startsWith('>')); - const column = message.split('\n').find(l => l.includes('^')); + const line = message.split('\n').find((l) => l.startsWith('>')); + const column = message.split('\n').find((l) => l.includes('^')); if (line && column) { loc = { - line: Number( - line - .replace(/^> /, '') - .split('|')[0] - .trim() - ), + line: Number(line.replace(/^> /, '').split('|')[0].trim()), column: column.replace(/[^|]+\|\s/, '').length, }; } @@ -153,7 +148,7 @@ function preprocessor() { replacements.forEach(({ original, length }) => { // If the warnings contain stuff that's been replaced, // Correct the line and column numbers to what's replaced - result.warnings.forEach(w => { + result.warnings.forEach((w) => { /* eslint-disable no-param-reassign */ if (w.line === original.start.line) { diff --git a/src/transform.ts b/src/transform.ts index a171b9dc2..3564683ef 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -171,7 +171,7 @@ export default function transform(code: string, options: Options): Result { file: options.filename.replace(/\.js$/, '.css'), }); - mappings.forEach(mapping => + mappings.forEach((mapping) => generator.addMapping( Object.assign({}, mapping, { source: options.filename }) ) diff --git a/src/types.ts b/src/types.ts index 5943cd139..974e3b17c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,5 @@ -import { PluginOptions } from './babel/utils/loadOptions'; import { RawSourceMap } from 'source-map'; +import { PluginOptions } from './babel/utils/loadOptions'; export type Replacement = { original: { start: Location; end: Location }; diff --git a/types/styled.ts b/types/styled.ts index 39c412881..62f1e85d2 100644 --- a/types/styled.ts +++ b/types/styled.ts @@ -10,7 +10,8 @@ function isExtends(arg1?: C, arg2?: T): C extends T ? 'extends' : never { } // tslint:disable-next-line no-unnecessary-generics -const Fabric = (): React.FC => props => React.createElement('div', props); +const Fabric = (): React.FC => (props) => + React.createElement('div', props); const Header = (p: { children: string }) => React.createElement('h1', p); @@ -62,12 +63,12 @@ styled(Fabric<{ className: string; style: {} }>())` styled(Fabric<{ className: string; style: {} }>())` // color should be defined in props // $ExpectError - color: ${props => props.color}; + color: ${(props) => props.color}; `; styled(Fabric<{ className: string; style: {}; color: 'red' | 'blue' }>())` & > ${SimplestComponent} { - color: ${props => props.color}; + color: ${(props) => props.color}; } `; @@ -86,7 +87,7 @@ styled.a` ((/* Issue #536 */) => { const Title = styled.div<{ background: string }>` - background: ${props => props.background}; + background: ${(props) => props.background}; `; // $ExpectType "extends" @@ -102,15 +103,15 @@ styled.a` ((/* Issue #622 */) => { const Wrapper = styled.div<{ prop1: boolean }>` width: 1em; - background-color: ${props => (props.prop1 ? 'transparent' : 'green')}; + background-color: ${(props) => (props.prop1 ? 'transparent' : 'green')}; `; const styledTag = styled(Wrapper); const NewWrapper = styledTag<{ prop2: string }>` width: 2em; - background-color: ${props => (props.prop1 ? 'transparent' : 'red')}; - color: ${props => props.prop2}; + background-color: ${(props) => (props.prop1 ? 'transparent' : 'red')}; + color: ${(props) => props.prop2}; `; // $ExpectType Validator | undefined diff --git a/website/src/components/App.js b/website/src/components/App.js index c55a8d9cf..7ffd28143 100644 --- a/website/src/components/App.js +++ b/website/src/components/App.js @@ -1,7 +1,7 @@ /* @flow */ -import React from 'react'; import { styled } from 'linaria/react'; +import React from 'react'; import Header from './Header'; import Hero from './Hero'; diff --git a/website/src/components/Header.js b/website/src/components/Header.js index 9ba440764..2a1d356cb 100644 --- a/website/src/components/Header.js +++ b/website/src/components/Header.js @@ -1,10 +1,10 @@ /* @flow */ -import React from 'react'; import { styled } from 'linaria/react'; -import Container from './Container'; +import React from 'react'; import constants from '../styles/constants'; import { media } from '../styles/utils'; +import Container from './Container'; export default function Header() { return ( diff --git a/website/src/components/Hero.js b/website/src/components/Hero.js index 69e58d3d5..c81571dde 100644 --- a/website/src/components/Hero.js +++ b/website/src/components/Hero.js @@ -1,7 +1,7 @@ /* @flow */ -import React from 'react'; import { styled } from 'linaria/react'; +import React from 'react'; import { media } from '../styles/utils'; import Container from './Container'; diff --git a/website/src/server.js b/website/src/server.js index c1f464eb1..b330c8978 100644 --- a/website/src/server.js +++ b/website/src/server.js @@ -2,19 +2,19 @@ import 'ignore-styles'; +import fs from 'fs'; +import path from 'path'; +import crypto from 'crypto'; +import { collect } from 'linaria/server'; // eslint-disable-line import/no-unresolved import Koa from 'koa'; import Router from 'koa-router'; import compress from 'koa-compress'; import send from 'koa-send'; -import fs from 'fs'; -import path from 'path'; -import crypto from 'crypto'; import dedent from 'dedent'; import React from 'react'; import ReactDOMServer from 'react-dom/server'; -import { collect } from 'linaria/server'; // eslint-disable-line import/no-unresolved -import App from './components/App'; import config from '../serve.config'; +import App from './components/App'; const cache = {}; const css = fs.readFileSync(path.join(__dirname, '../dist/styles.css'), 'utf8'); @@ -23,14 +23,11 @@ const router = new Router(); app.use(compress()); -router.get('/', async ctx => { +router.get('/', async (ctx) => { const html = ReactDOMServer.renderToStaticMarkup(); const { critical, other } = collect(html, css); - const slug = crypto - .createHash('md5') - .update(other) - .digest('hex'); + const slug = crypto.createHash('md5').update(other).digest('hex'); cache[slug] = other; @@ -59,11 +56,11 @@ router.get('/', async ctx => { `; }); -router.get('/dist/:path+', async ctx => { +router.get('/dist/:path+', async (ctx) => { await send(ctx, path.join('dist', ctx.params.path)); }); -router.get('/styles/:slug', async ctx => { +router.get('/styles/:slug', async (ctx) => { ctx.type = 'text/css'; ctx.body = cache[ctx.params.slug]; }); diff --git a/website/webpack.config.js b/website/webpack.config.js index 5e12af88d..43467483f 100644 --- a/website/webpack.config.js +++ b/website/webpack.config.js @@ -1,5 +1,5 @@ -const webpack = require('webpack'); // eslint-disable-line import/no-extraneous-dependencies const path = require('path'); +const webpack = require('webpack'); // eslint-disable-line import/no-extraneous-dependencies const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // eslint-disable-line import/no-extraneous-dependencies const dev = process.env.NODE_ENV !== 'production'; diff --git a/yarn.lock b/yarn.lock index 20470e6be..89a1c08c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -884,6 +884,13 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.5": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" @@ -924,23 +931,26 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@callstack/eslint-config@^9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@callstack/eslint-config/-/eslint-config-9.1.0.tgz#098e400f0d92be8cca375b8f03bb7594179e5856" - integrity sha512-mesv2gOOkb+tf80LbCWd2A05cZ5W7U/UGTwJxxDoeU/rw9XI8qWsBWkwpuY73MxFH+zzSqqSsDn9O3UfOxhpeg== +"@callstack/eslint-config@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@callstack/eslint-config/-/eslint-config-10.0.1.tgz#aedd18706df5cea767778d6a62625c94f40426c7" + integrity sha512-CY/2HH5KpZrhZimcfR28FJDVwRTj3pgKFNBBfKwnk+zPXnl2HB7428rrhWUG8upFt+zZssBRy1rAhoMrFiI7eQ== dependencies: + "@typescript-eslint/eslint-plugin" "^2.31.0" + "@typescript-eslint/parser" "^2.31.0" babel-eslint "^10.0.3" - eslint-config-prettier "^6.7.0" + eslint-config-prettier "^6.10.1" eslint-plugin-flowtype "^4.5.2" eslint-plugin-import "^2.19.1" eslint-plugin-jest "^23.1.1" - eslint-plugin-prettier "^3.1.1" + eslint-plugin-prettier "^3.1.3" eslint-plugin-promise "^4.2.1" eslint-plugin-react "^7.17.0" - eslint-plugin-react-hooks "^2.3.0" + eslint-plugin-react-hooks "^4.0.0" eslint-plugin-react-native "^3.8.1" + eslint-plugin-react-native-a11y "^2.0.0" eslint-restricted-globals "^0.2.0" - prettier "^1.19.1" + prettier "^2.0.4" "@cnakazawa/watch@^1.0.3": version "1.0.4" @@ -1561,10 +1571,10 @@ resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.1.tgz#d46015ad91128fce06a1a688ab39a2516507f740" integrity sha512-MoF2IC9oGSgArJwlxdst4XsvWuoYfNUWtBw0kpnCi6K05kV+Ecl7siEeJ40tgCbI9uqEMGQL/NlPMRv6KVkY5Q== -"@types/prettier@^1.19.1": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== +"@types/prettier@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.2.tgz#5bb52ee68d0f8efa9cc0099920e56be6cc4e37f3" + integrity sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA== "@types/prop-types@*": version "15.7.3" @@ -1653,17 +1663,50 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^2.25.0": - version "2.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.25.0.tgz#0b60917332f20dcff54d0eb9be2a9e9f4c9fbd02" - integrity sha512-W2YyMtjmlrOjtXc+FtTelVs9OhuR6OlYc4XKIslJ8PUJOqgYYAPRJhAqkYRQo3G4sjvG8jSodsNycEn4W2gHUw== +"@typescript-eslint/eslint-plugin@^2.31.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" + integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== + dependencies: + "@typescript-eslint/experimental-utils" "2.34.0" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/eslint-plugin@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.0.tgz#0fe529b33d63c9a94f7503ca2bb12c84b9477ff3" + integrity sha512-UD6b4p0/hSe1xdTvRCENSx7iQ+KR6ourlZFfYuPC7FlXEzdHuLPrEmuxZ23b2zW96KJX9Z3w05GE/wNOiEzrVg== dependencies: - "@typescript-eslint/experimental-utils" "2.25.0" + "@typescript-eslint/experimental-utils" "3.9.0" + debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" + semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.25.0", "@typescript-eslint/experimental-utils@^2.5.0": +"@typescript-eslint/experimental-utils@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" + integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.0.tgz#3171d8ddba0bf02a8c2034188593630914fcf5ee" + integrity sha512-/vSHUDYizSOhrOJdjYxPNGfb4a3ibO8zd4nUKo/QBFOmxosT3cVUV7KIg8Dwi6TXlr667G7YPqFK9+VSZOorNA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.9.0" + "@typescript-eslint/typescript-estree" "3.9.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@^2.5.0": version "2.25.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.25.0.tgz#13691c4fe368bd377b1e5b1e4ad660b220bf7714" integrity sha512-0IZ4ZR5QkFYbaJk+8eJ2kYeA+1tzOE1sBjbwwtSV85oNWYUBep+EyhlZ7DLUCyhMUGuJpcCCFL0fDtYAP1zMZw== @@ -1673,16 +1716,32 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^2.25.0": - version "2.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.25.0.tgz#abfb3d999084824d9a756d9b9c0f36fba03adb76" - integrity sha512-mccBLaBSpNVgp191CP5W+8U1crTyXsRziWliCqzj02kpxdjKMvFHGJbK33NroquH3zB/gZ8H511HEsJBa2fNEg== +"@typescript-eslint/parser@^2.31.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" + integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.25.0" - "@typescript-eslint/typescript-estree" "2.25.0" + "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/parser@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.9.0.tgz#344978a265d9a5c7c8f13e62c78172a4374dabea" + integrity sha512-rDHOKb6uW2jZkHQniUQVZkixQrfsZGUCNWWbKWep4A5hGhN5dLHMUCNAWnC4tXRlHedXkTDptIpxs6e4Pz8UfA== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "3.9.0" + "@typescript-eslint/types" "3.9.0" + "@typescript-eslint/typescript-estree" "3.9.0" eslint-visitor-keys "^1.1.0" +"@typescript-eslint/types@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.0.tgz#be9d0aa451e1bf3ce99f2e6920659e5b2e6bfe18" + integrity sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg== + "@typescript-eslint/typescript-estree@2.25.0": version "2.25.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.25.0.tgz#b790497556734b7476fa7dd3fa539955a5c79e2c" @@ -1696,6 +1755,40 @@ semver "^6.3.0" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" + integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/typescript-estree@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.0.tgz#c6abbb50fa0d715cab46fef67ca6378bf2eaca13" + integrity sha512-N+158NKgN4rOmWVfvKOMoMFV5n8XxAliaKkArm/sOypzQ0bUL8MSnOEBW3VFIeffb/K5ce/cAV0yYhR7U4ALAA== + dependencies: + "@typescript-eslint/types" "3.9.0" + "@typescript-eslint/visitor-keys" "3.9.0" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.0.tgz#44de8e1b1df67adaf3b94d6b60b80f8faebc8dd3" + integrity sha512-O1qeoGqDbu0EZUC/MZ6F1WHTIzcBVhGqDj3LhTnj65WUA548RXVxUHbYhAW9bZWfb2rnX9QsbbP5nmeJ5Z4+ng== + dependencies: + eslint-visitor-keys "^1.1.0" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -1892,10 +1985,10 @@ acorn@^6.0.1, acorn@^6.2.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== +acorn@^7.3.1: + version "7.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" + integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== add-stream@^1.0.0: version "1.0.0" @@ -1964,6 +2057,11 @@ ansi-align@^3.0.0: dependencies: string-width "^3.0.0" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -2154,6 +2252,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -2668,7 +2771,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2696,6 +2799,14 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + changelog-filename-regex@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/changelog-filename-regex/-/changelog-filename-regex-1.1.2.tgz#19e98e38248cff0c1cf3ae3bf51bfb22c48592d6" @@ -3278,7 +3389,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3289,6 +3400,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -3422,7 +3542,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -3719,6 +3839,13 @@ enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -3781,10 +3908,10 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^6.7.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz#129ef9ec575d5ddc0e269667bf09defcd898642a" - integrity sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ== +eslint-config-prettier@^6.10.1: + version "6.11.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" + integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== dependencies: get-stdin "^6.0.0" @@ -3836,10 +3963,10 @@ eslint-plugin-jest@^23.1.1: dependencies: "@typescript-eslint/experimental-utils" "^2.5.0" -eslint-plugin-prettier@^3.1.1, eslint-plugin-prettier@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" - integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== +eslint-plugin-prettier@^3.1.3, eslint-plugin-prettier@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" + integrity sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg== dependencies: prettier-linter-helpers "^1.0.0" @@ -3848,10 +3975,19 @@ eslint-plugin-promise@^4.2.1: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== -eslint-plugin-react-hooks@^2.3.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0" - integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g== +eslint-plugin-react-hooks@^4.0.0: + version "4.0.8" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.8.tgz#a9b1e3d57475ccd18276882eff3d6cba00da7a56" + integrity sha512-6SSb5AiMCPd8FDJrzah+Z4F44P2CdOaK026cXFV+o/xSRzfOiV1FNFeLl2z6xm3yqWOQEZ5OfVgiec90qV2xrQ== + +eslint-plugin-react-native-a11y@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-a11y/-/eslint-plugin-react-native-a11y-2.0.1.tgz#68892b35e7821feea8e1ced5be0b84dbab384e34" + integrity sha512-CoqjPDq19W2j8K5AqA/hR40uEH85gU/7Bc6mZCdrPxQjRcm51OBIf4ZUA09B9ddUnraHKnnxGzQJ9reBa/VesQ== + dependencies: + "@babel/runtime" "^7.10.5" + ast-types-flow "^0.0.7" + jsx-ast-utils "^2.4.1" eslint-plugin-react-native-globals@^0.1.1: version "0.1.2" @@ -3904,12 +4040,13 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -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== +eslint-scope@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.1.0" + estraverse "^4.1.1" eslint-utils@^2.0.0: version "2.0.0" @@ -3918,27 +4055,40 @@ eslint-utils@^2.0.0: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-visitor-keys@^1.0.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.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.6.0.tgz#522d67cfaea09724d96949c70e7a0550614d64d6" + integrity sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" + chalk "^4.0.0" + cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + enquirer "^2.3.5" + eslint-scope "^5.1.0" + eslint-utils "^2.1.0" + eslint-visitor-keys "^1.3.0" + espree "^7.2.0" + esquery "^1.2.0" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" @@ -3947,45 +4097,43 @@ eslint@^6.8.0: ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" + levn "^0.4.1" + lodash "^4.17.19" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.3" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" table "^5.2.3" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69" + integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g== dependencies: - acorn "^7.1.1" + acorn "^7.3.1" acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^1.3.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" - integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^5.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -3999,10 +4147,10 @@ estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== +estraverse@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== estree-walker@^0.6.1: version "0.6.1" @@ -4168,7 +4316,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, 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= @@ -4983,7 +5131,7 @@ inquirer@7.0.4: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^7.0.0, inquirer@^7.0.4: +inquirer@^7.0.4: version "7.1.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== @@ -5941,6 +6089,14 @@ jsx-ast-utils@^2.2.3: array-includes "^3.0.3" object.assign "^4.1.0" +jsx-ast-utils@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" + integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -6015,7 +6171,15 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" -levn@^0.3.0, levn@~0.3.0: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -6151,6 +6315,11 @@ lodash@4.17.15, lodash@^4.11.2, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.1 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.19: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + log-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" @@ -6772,7 +6941,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1, optionator@^0.8.3: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -6784,6 +6953,18 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + ora@4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" @@ -7065,6 +7246,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -7210,6 +7396,11 @@ postcss@^7.0.14: source-map "^0.6.1" supports-color "^6.1.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -7239,10 +7430,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^1.16.4, prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.0.4, prettier@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== pretty-format@^24.9.0: version "24.9.0" @@ -7639,16 +7830,16 @@ regexp.prototype.flags@^1.3.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -regexpp@^2.0.1: - version "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== +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + regexpu-core@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" @@ -8047,7 +8238,7 @@ semver-diff@^3.1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.3.0, semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: +semver@6.3.0, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -8062,6 +8253,11 @@ semver@7.1.3: resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== +semver@^7.2.1, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + serialize-javascript@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" @@ -8102,11 +8298,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shelljs@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" @@ -8505,10 +8713,10 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== +strip-json-comments@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== stubs@^3.0.0: version "3.0.0" @@ -8821,6 +9029,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -8855,10 +9070,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== +typescript@^3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== typescript@next: version "3.9.0-dev.20200324" @@ -9235,6 +9450,13 @@ which@^1.2.9, which@^1.3.0: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + widest-line@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" @@ -9264,7 +9486,7 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, 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==