diff --git a/pkg/sql/lease_test.go b/pkg/sql/lease_test.go index 479b9a4ce1de..0ff17e1787ea 100644 --- a/pkg/sql/lease_test.go +++ b/pkg/sql/lease_test.go @@ -760,6 +760,91 @@ SELECT EXISTS(SELECT * FROM t.foo); } } +// TestDescriptorRefreshOnRetry tests that all descriptors acquired by +// a query are properly released before the query is retried. +func TestDescriptorRefreshOnRetry(t *testing.T) { + defer leaktest.AfterTest(t)() + params, _ := tests.CreateTestServerParams() + + fooAcquiredCount := int32(0) + fooReleaseCount := int32(0) + + params.Knobs = base.TestingKnobs{ + SQLLeaseManager: &sql.LeaseManagerTestingKnobs{ + LeaseStoreTestingKnobs: sql.LeaseStoreTestingKnobs{ + // Set this so we observe a release event from the cache + // when the API releases the descriptor. + RemoveOnceDereferenced: true, + LeaseAcquiredEvent: func(table sqlbase.TableDescriptor, _ error) { + if table.Name == "foo" { + atomic.AddInt32(&fooAcquiredCount, 1) + } + }, + LeaseReleasedEvent: func(table sqlbase.TableDescriptor, _ error) { + if table.Name == "foo" { + atomic.AddInt32(&fooReleaseCount, 1) + } + }, + }, + }, + } + s, sqlDB, _ := serverutils.StartServer(t, params) + defer s.Stopper().Stop(context.TODO()) + + if _, err := sqlDB.Exec(` +CREATE DATABASE t; +CREATE TABLE t.foo (v INT); +`); err != nil { + t.Fatal(err) + } + + if atomic.LoadInt32(&fooAcquiredCount) > 0 { + t.Fatalf("CREATE TABLE has acquired a descriptor") + } + + tx, err := sqlDB.Begin() + if err != nil { + t.Fatal(err) + } + + if _, err := tx.Exec(` + SELECT * FROM t.foo; + `); err != nil { + t.Fatal(err) + } + + // Descriptor has been acquired. + if atomic.LoadInt32(&fooAcquiredCount) != 1 { + t.Fatal("descriptor not acquired") + } + + // Descriptor has not been released. + if atomic.LoadInt32(&fooReleaseCount) > 0 { + t.Fatal("released descriptor") + } + + if _, err := tx.Exec( + "SELECT CRDB_INTERNAL.FORCE_RETRY('1s':::INTERVAL)"); !testutils.IsError( + err, `forced by crdb_internal\.force_retry\(\)`) { + t.Fatal(err) + } + + if atomic.LoadInt32(&fooAcquiredCount) > 1 { + t.Fatal("descriptor reacquired") + } + + testutils.SucceedsSoon(t, func() error { + if atomic.LoadInt32(&fooReleaseCount) == 0 { + return errors.Errorf("didnt release descriptor") + } + return nil + }) + + if err := tx.Rollback(); err != nil { + t.Fatal(err) + } +} + // Test that a transaction created way in the past will use the correct // table descriptor and will thus obey the modififcation time of the // table descriptor. diff --git a/pkg/sql/logictest/testdata/logic_test/prepare b/pkg/sql/logictest/testdata/logic_test/prepare index 887385430a30..ecc0a43e736e 100644 --- a/pkg/sql/logictest/testdata/logic_test/prepare +++ b/pkg/sql/logictest/testdata/logic_test/prepare @@ -416,3 +416,19 @@ PREPARE x21701c AS SELECT * FROM kv WHERE k IS NOT DISTINCT FROM $1 query II EXECUTE x21701c(NULL) ---- + +# Test that a PREPARE statement after a CREATE TABLE in the same TRANSACTION +# doesn't hang. +subtest 24578 + +statement ok +BEGIN TRANSACTION + +statement ok +create table bar (id integer) + +statement ok +PREPARE forbar AS insert into bar (id) VALUES (1) + +statement ok +COMMIT TRANSACTION \ No newline at end of file diff --git a/pkg/sql/table.go b/pkg/sql/table.go index ddeea02a6cd8..0c7b9534f350 100644 --- a/pkg/sql/table.go +++ b/pkg/sql/table.go @@ -27,7 +27,6 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sqlbase" - "github.com/cockroachdb/cockroach/pkg/util/hlc" "github.com/cockroachdb/cockroach/pkg/util/log" ) @@ -135,10 +134,6 @@ type uncommittedDatabase struct { // end of each transaction on the session, or on hitting conditions such // as errors, or retries that result in transaction timestamp changes. type TableCollection struct { - // The timestamp used to pick tables. The timestamp falls within the - // validity window of every table in leasedTables. - timestamp hlc.Timestamp - // leaseMgr manages acquiring and releasing per-table leases. leaseMgr *LeaseManager // A collection of table descriptor valid for the timestamp. @@ -186,17 +181,6 @@ type dbCacheSubscriber interface { waitForCacheState(cond func(*databaseCache) (bool, error)) error } -// Check if the timestamp used so far to pick tables has changed because -// of a transaction retry. -func (tc *TableCollection) resetForTxnRetry(ctx context.Context, txn *client.Txn) { - if tc.timestamp != (hlc.Timestamp{}) && - tc.timestamp != txn.OrigTimestamp() { - if err := tc.releaseTables(ctx, dontBlockForDBCacheUpdate); err != nil { - log.Warningf(ctx, "error releasing tables") - } - } -} - // getTableVersion returns a table descriptor with a version suitable for // the transaction: table.ModificationTime <= txn.Timestamp < expirationTime. // The table must be released by calling tc.releaseTables(). @@ -259,10 +243,6 @@ func (tc *TableCollection) getTableVersion( } } - // If the txn has been pushed the table collection is released and - // txn deadline is reset. - tc.resetForTxnRetry(ctx, flags.txn) - if refuseFurtherLookup, table, err := tc.getUncommittedTable( dbID, tn, flags.required); refuseFurtherLookup || err != nil { return nil, nil, err @@ -299,7 +279,7 @@ func (tc *TableCollection) getTableVersion( // know how to deal with, so propagate the error. return nil, nil, err } - tc.timestamp = origTimestamp + tc.leasedTables = append(tc.leasedTables, table) log.VEventf(ctx, 2, "added table '%s' to table collection", tn) @@ -328,10 +308,6 @@ func (tc *TableCollection) getTableVersionByID( return table, nil } - // If the txn has been pushed the table collection is released and - // txn deadline is reset. - tc.resetForTxnRetry(ctx, txn) - for _, table := range tc.uncommittedTables { if table.ID == tableID { log.VEventf(ctx, 2, "found uncommitted table %d", tableID) @@ -364,7 +340,7 @@ func (tc *TableCollection) getTableVersionByID( } return nil, err } - tc.timestamp = origTimestamp + tc.leasedTables = append(tc.leasedTables, table) log.VEventf(ctx, 2, "added table '%s' to table collection", table.Name) @@ -403,7 +379,6 @@ func (tc *TableCollection) releaseLeases(ctx context.Context) { // releaseTables releases all tables currently held by the TableCollection. func (tc *TableCollection) releaseTables(ctx context.Context, opt releaseOpt) error { - tc.timestamp = hlc.Timestamp{} if len(tc.leasedTables) > 0 { log.VEventf(ctx, 2, "releasing %d tables", len(tc.leasedTables)) for _, table := range tc.leasedTables { @@ -550,16 +525,11 @@ func (tc *TableCollection) getUncommittedTable( func (tc *TableCollection) getAllDescriptors( ctx context.Context, txn *client.Txn, ) ([]sqlbase.DescriptorProto, error) { - // If the txn has been pushed the table collection is released and txn - // deadline is reset. - tc.resetForTxnRetry(ctx, txn) - if tc.allDescriptors == nil { descs, err := GetAllDescriptors(ctx, txn) if err != nil { return nil, err } - tc.timestamp = txn.OrigTimestamp() tc.allDescriptors = descs } return tc.allDescriptors, nil diff --git a/pkg/ui/package.json b/pkg/ui/package.json index 5ed89129f107..1971b584cbcb 100644 --- a/pkg/ui/package.json +++ b/pkg/ui/package.json @@ -7,7 +7,6 @@ "dependencies": { "analytics-node": "^3.0.0", "classnames": "^2.2.5", - "codemirror": "^5.25.2", "combokeys": "^2.4.6", "highlight.js": "^9.10.0", "lodash": "^4.17.4", @@ -15,19 +14,17 @@ "nvd3": "^1.8.5", "raw-loader": "^0.5.1", "rc-progress": "^2.2.1", - "react": "^15.4.2", + "react": "^16.3.1", "react-addons-create-fragment": "^15.4.2", - "react-codemirror": "^1.0.0", "react-copy-to-clipboard": "^5.0.1", - "react-dom": "^15.4.2", - "react-helmet": "^5.2.0", "react-motion": "^0.5.2", + "react-dom": "^16.3.1", + "react-helmet": "^5.2.0", "react-paginate": "^4.4.3", "react-redux": "^5.0.3", - "react-router": "<4.0.0", + "react-router": "^3.2.1", "react-router-redux": "<5.0.0", - "react-select": "^1.0.0-rc.4", - "react-sticky": "^5.0.5", + "react-select": "^1.2.1", "redux": "^3.6.0", "redux-saga": "^0.15.6", "redux-thunk": "^2.2.0", @@ -46,25 +43,23 @@ "@types/d3-drag": "^1.1.0", "@types/d3-timer": "^1.0.5", "@types/dagre-layout": "^0.8.0", - "@types/enzyme": "^2.8.12", + "@types/enzyme": "^3.1.9", + "@types/enzyme-adapter-react-16": "^1.0.2", "@types/fetch-mock": "^5.8.1", "@types/highlight.js": "^9.1.9", "@types/lodash": "^4.14.56", "@types/mocha": "^2.2.40", "@types/nvd3": "^1.8.36", "@types/prop-types": "^15.5.1", - "@types/react": "^15.0.39", - "@types/react-codemirror": "^0.2.6", + "@types/react": "^16.3.6", "@types/react-copy-to-clipboard": "^4.2.5", - "@types/react-dom": "^0.14.23", + "@types/react-dom": "^16.0.5", "@types/react-helmet": "^5.0.5", - "@types/react-motion": "^0.0.23", "@types/react-paginate": "^4.3.1", "@types/react-redux": "^4.4.38", "@types/react-router": "<4.0.0", "@types/react-router-redux": "<5.0.0", - "@types/react-select": "^1.0.45", - "@types/react-sticky": "^5.0.1", + "@types/react-select": "^1.2.6", "@types/redux-thunk": "^2.1.0", "@types/sinon": "2.1.0", "babel-core": "^6.24.0", @@ -77,7 +72,8 @@ "css-loader": "^0.28.0", "d3": "<4.0.0", "dagre-layout": "^0.8.0", - "enzyme": "^2.9.1", + "enzyme": "^3.3.0", + "enzyme-adapter-react-16": "^1.1.1", "express": "^4.15.2", "fetch-mock": "^5.9.4", "file-loader": "^0.11.1", @@ -99,8 +95,6 @@ "nib": "^1.1.2", "prop-types": "^15.5.10", "protobufjs": "^6.7.3", - "react-addons-test-utils": "^15.4.2", - "react-test-renderer": "^15.5.4", "rimraf": "^2.6.1", "sinon": "2.1.0", "source-map-loader": "^0.2.0", @@ -119,8 +113,5 @@ "engines": { "node": ">=6", "yarn": ">=1.0.0" - }, - "resolutions": { - "@types/react": "~15.0.39" } } diff --git a/pkg/ui/src/enzymeInit.ts b/pkg/ui/src/enzymeInit.ts new file mode 100644 index 000000000000..bf965b5dcce5 --- /dev/null +++ b/pkg/ui/src/enzymeInit.ts @@ -0,0 +1,6 @@ +import Enzyme from "enzyme"; +import Adapter from "enzyme-adapter-react-16"; + +// As of v3, Enzyme requires an "adapter" to be initialized. +// See https://github.com/airbnb/enzyme/blob/master/docs/guides/migration-from-2-to-3.md +Enzyme.configure({ adapter: new Adapter() }); diff --git a/pkg/ui/src/index.tsx b/pkg/ui/src/index.tsx index eb34d1e3f67a..99382bd71297 100644 --- a/pkg/ui/src/index.tsx +++ b/pkg/ui/src/index.tsx @@ -1,7 +1,5 @@ /// -import "codemirror/lib/codemirror.css"; -import "codemirror/theme/neat.css"; import "nvd3/build/nv.d3.min.css"; import "react-select/dist/react-select.css"; import "styl/app.styl"; diff --git a/pkg/ui/src/views/app/containers/layout/index.tsx b/pkg/ui/src/views/app/containers/layout/index.tsx index 801083a4cc83..90367930d723 100644 --- a/pkg/ui/src/views/app/containers/layout/index.tsx +++ b/pkg/ui/src/views/app/containers/layout/index.tsx @@ -1,7 +1,6 @@ import React from "react"; import { Helmet } from "react-helmet"; import { RouterState } from "react-router"; -import { StickyContainer } from "react-sticky"; import NavigationBar from "src/views/app/components/layoutSidebar"; import TimeWindowManager from "src/views/app/containers/timewindow"; @@ -15,14 +14,16 @@ import AlertBanner from "src/views/app/containers/alertBanner"; */ export default class extends React.Component { render() { - return
- - - - - - { this.props.children } - -
; + return ( +
+ + + + +
+ { this.props.children } +
+
+ ); } } diff --git a/pkg/ui/src/views/app/containers/timewindow/timewindow.spec.tsx b/pkg/ui/src/views/app/containers/timewindow/timewindow.spec.tsx index 9cfea655d7b1..154efe55f00e 100644 --- a/pkg/ui/src/views/app/containers/timewindow/timewindow.spec.tsx +++ b/pkg/ui/src/views/app/containers/timewindow/timewindow.spec.tsx @@ -5,6 +5,7 @@ import * as sinon from "sinon"; import moment from "moment"; import _ from "lodash"; +import "src/enzymeInit"; import { TimeWindowManagerUnconnected as TimeWindowManager } from "./"; import * as timewindow from "src/redux/timewindow"; diff --git a/pkg/ui/src/views/cluster/containers/clusterOverview/cluster.styl b/pkg/ui/src/views/cluster/containers/clusterOverview/cluster.styl index 3497b56384e3..6a732d79b687 100644 --- a/pkg/ui/src/views/cluster/containers/clusterOverview/cluster.styl +++ b/pkg/ui/src/views/cluster/containers/clusterOverview/cluster.styl @@ -13,10 +13,6 @@ .database-summary-title h2 padding-top 0 -.page-config - padding-top 0 - padding-bottom 0 - .cluster-overview .cluster-summary background-color white diff --git a/pkg/ui/src/views/cluster/containers/events/events.spec.tsx b/pkg/ui/src/views/cluster/containers/events/events.spec.tsx index 17e47777662a..cccf08afb5e3 100644 --- a/pkg/ui/src/views/cluster/containers/events/events.spec.tsx +++ b/pkg/ui/src/views/cluster/containers/events/events.spec.tsx @@ -5,6 +5,7 @@ import _ from "lodash"; import Long from "long"; import * as sinon from "sinon"; +import "src/enzymeInit"; import * as protos from "src/js/protos"; import { EventBoxUnconnected as EventBox, EventRow, getEventInfo } from "src/views/cluster/containers/events"; import { refreshEvents } from "src/redux/apiReducers"; diff --git a/pkg/ui/src/views/cluster/containers/events/index.tsx b/pkg/ui/src/views/cluster/containers/events/index.tsx index e3af2f6fd544..73a15be4e8db 100644 --- a/pkg/ui/src/views/cluster/containers/events/index.tsx +++ b/pkg/ui/src/views/cluster/containers/events/index.tsx @@ -34,13 +34,7 @@ export interface SimplifiedEvent { content: React.ReactNode; } -// Specialization of generic SortedTable component: -// https://github.com/Microsoft/TypeScript/issues/3960 -// -// The variable name must start with a capital letter or JSX will not recognize -// it as a component. -// tslint:disable-next-line:variable-name -const EventSortedTable = SortedTable as new () => SortedTable; +class EventSortedTable extends SortedTable {} export interface EventRowProps { event: Event$Properties; diff --git a/pkg/ui/src/views/cluster/containers/nodesOverview/index.tsx b/pkg/ui/src/views/cluster/containers/nodesOverview/index.tsx index c1229e2d7cf1..635ef13667ca 100644 --- a/pkg/ui/src/views/cluster/containers/nodesOverview/index.tsx +++ b/pkg/ui/src/views/cluster/containers/nodesOverview/index.tsx @@ -29,13 +29,7 @@ const decommissionedNodesSortSetting = new LocalSetting s.localSettings, ); -// Specialization of generic SortedTable component: -// https://github.com/Microsoft/TypeScript/issues/3960 -// -// The variable name must start with a capital letter or JSX will not recognize -// it as a component. -// tslint:disable-next-line:variable-name -const NodeSortedTable = SortedTable as new () => SortedTable; +class NodeSortedTable extends SortedTable {} /** * NodeCategoryListProps are the properties shared by both LiveNodeList and diff --git a/pkg/ui/src/views/databases/containers/databaseGrants/index.tsx b/pkg/ui/src/views/databases/containers/databaseGrants/index.tsx index 4c1fc54393fb..db0953c69730 100644 --- a/pkg/ui/src/views/databases/containers/databaseGrants/index.tsx +++ b/pkg/ui/src/views/databases/containers/databaseGrants/index.tsx @@ -17,13 +17,7 @@ import { DatabaseSummaryBase, DatabaseSummaryExplicitData, databaseDetails, tableInfos, grants, } from "src/views/databases/containers/databaseSummary"; -// Specialization of generic SortedTable component: -// https://github.com/Microsoft/TypeScript/issues/3960 -// -// The variable name must start with a capital letter or JSX will not recognize -// it as a component. -// tslint:disable-next-line:variable-name -export const DatabaseGrantsSortedTable = SortedTable as new () => SortedTable; +class DatabaseGrantsSortedTable extends SortedTable {} const grantsSortSetting = new LocalSetting( "databases/sort_setting/grants", (s) => s.localSettings, diff --git a/pkg/ui/src/views/databases/containers/databaseTables/index.tsx b/pkg/ui/src/views/databases/containers/databaseTables/index.tsx index 83133d634b48..d276ca3af63a 100644 --- a/pkg/ui/src/views/databases/containers/databaseTables/index.tsx +++ b/pkg/ui/src/views/databases/containers/databaseTables/index.tsx @@ -25,13 +25,7 @@ const databaseTablesSortSetting = new LocalSetting( "databases/sort_setting/tables", (s) => s.localSettings, ); -// Specialization of generic SortedTable component: -// https://github.com/Microsoft/TypeScript/issues/3960 -// -// The variable name must start with a capital letter or TSX will not recognize -// it as a component. -// tslint:disable-next-line:variable-name -const DatabaseTableListSortedTable = SortedTable as new () => SortedTable; +class DatabaseTableListSortedTable extends SortedTable {} // DatabaseSummaryTables displays a summary section describing the tables // contained in a single database. diff --git a/pkg/ui/src/views/databases/containers/tableDetails/index.tsx b/pkg/ui/src/views/databases/containers/tableDetails/index.tsx index 12a54cb98881..52d2289d7823 100644 --- a/pkg/ui/src/views/databases/containers/tableDetails/index.tsx +++ b/pkg/ui/src/views/databases/containers/tableDetails/index.tsx @@ -18,13 +18,7 @@ import { SortSetting } from "src/views/shared/components/sortabletable"; import { SortedTable } from "src/views/shared/components/sortedtable"; import * as hljs from "highlight.js"; -// Specialization of generic SortedTable component: -// https://github.com/Microsoft/TypeScript/issues/3960 -// -// The variable name must start with a capital letter or JSX will not recognize -// it as a component. -// tslint:disable-next-line:variable-name -export const GrantsSortedTable = SortedTable as new () => SortedTable; +class GrantsSortedTable extends SortedTable {} const databaseTableGrantsSortSetting = new LocalSetting( "tableDetails/sort_setting/grants", (s) => s.localSettings, diff --git a/pkg/ui/src/views/jobs/index.tsx b/pkg/ui/src/views/jobs/index.tsx index ee17277f79ad..91793a012845 100644 --- a/pkg/ui/src/views/jobs/index.tsx +++ b/pkg/ui/src/views/jobs/index.tsx @@ -111,13 +111,7 @@ class JobStatusCell extends React.Component<{ job: Job }, {}> { } } -// Specialization of generic SortedTable component: -// https://github.com/Microsoft/TypeScript/issues/3960 -// -// The variable name must start with a capital letter or JSX will not recognize -// it as a component. -// tslint:disable-next-line:variable-name -const JobsSortedTable = SortedTable as new () => SortedTable; +class JobsSortedTable extends SortedTable {} const jobsTableColumns: ColumnDescriptor[] = [ { diff --git a/pkg/ui/src/views/reports/containers/commandQueue/commandQueueViz.tsx b/pkg/ui/src/views/reports/containers/commandQueue/commandQueueViz.tsx index d5c628ce08cf..1ed8566cb040 100644 --- a/pkg/ui/src/views/reports/containers/commandQueue/commandQueueViz.tsx +++ b/pkg/ui/src/views/reports/containers/commandQueue/commandQueueViz.tsx @@ -22,8 +22,8 @@ const COMMAND_DIAMETER = COMMAND_RADIUS * 2; export default class CommandQueueViz extends React.Component { - constructor() { - super(); + constructor(props: QueueVizProps) { + super(props); this.state = { selectedNodeID: null, }; diff --git a/pkg/ui/src/views/shared/components/pageconfig/index.tsx b/pkg/ui/src/views/shared/components/pageconfig/index.tsx index 9d6cd84e91fd..7dad0d216c85 100644 --- a/pkg/ui/src/views/shared/components/pageconfig/index.tsx +++ b/pkg/ui/src/views/shared/components/pageconfig/index.tsx @@ -1,16 +1,19 @@ import React from "react"; -import { Sticky } from "react-sticky"; export function PageConfig(props: {children?: React.ReactNode}) { - return + return ( +
    { props.children }
- ; +
+ ); } export function PageConfigItem(props: {children?: React.ReactNode}) { - return
  • - { props.children } -
  • ; + return ( +
  • + { props.children } +
  • + ); } diff --git a/pkg/ui/src/views/shared/components/sortabletable/sortabletable.spec.tsx b/pkg/ui/src/views/shared/components/sortabletable/sortabletable.spec.tsx index bcf5099d5624..6e55787c625e 100644 --- a/pkg/ui/src/views/shared/components/sortabletable/sortabletable.spec.tsx +++ b/pkg/ui/src/views/shared/components/sortabletable/sortabletable.spec.tsx @@ -4,6 +4,7 @@ import { assert } from "chai"; import { shallow } from "enzyme"; import * as sinon from "sinon"; +import "src/enzymeInit"; import { SortableTable, SortableColumn, SortSetting } from "src/views/shared/components/sortabletable"; const columns: SortableColumn[] = [ diff --git a/pkg/ui/src/views/shared/components/sortedtable/sortedtable.spec.tsx b/pkg/ui/src/views/shared/components/sortedtable/sortedtable.spec.tsx index e013f62ab397..a6ab7e052cd1 100644 --- a/pkg/ui/src/views/shared/components/sortedtable/sortedtable.spec.tsx +++ b/pkg/ui/src/views/shared/components/sortedtable/sortedtable.spec.tsx @@ -4,6 +4,7 @@ import { assert } from "chai"; import { mount } from "enzyme"; import * as sinon from "sinon"; +import "src/enzymeInit"; import { SortedTable, ColumnDescriptor } from "src/views/shared/components/sortedtable"; import { SortSetting } from "src/views/shared/components/sortabletable"; @@ -25,13 +26,7 @@ const columns: ColumnDescriptor[] = [ }, ]; -// Specialization of generic SortedTable component: -// https://github.com/Microsoft/TypeScript/issues/3960 -// -// The variable name must start with a capital letter or JSX will not recognize -// it as a component. -// tslint:disable-next-line:variable-name -const TestSortedTable = SortedTable as new () => SortedTable; +class TestSortedTable extends SortedTable {} function makeTable( data: TestRow[], sortSetting?: SortSetting, onChangeSortSetting?: (ss: SortSetting) => void, diff --git a/pkg/ui/src/views/shared/containers/metricDataProvider/metricDataProvider.spec.tsx b/pkg/ui/src/views/shared/containers/metricDataProvider/metricDataProvider.spec.tsx index 1de592fe2da7..d5a230f3775b 100644 --- a/pkg/ui/src/views/shared/containers/metricDataProvider/metricDataProvider.spec.tsx +++ b/pkg/ui/src/views/shared/containers/metricDataProvider/metricDataProvider.spec.tsx @@ -5,6 +5,7 @@ import _ from "lodash"; import Long from "long"; import * as sinon from "sinon"; +import "src/enzymeInit"; import * as protos from "src/js/protos"; import { Metric, Axis, MetricsDataComponentProps, QueryTimeInfo, diff --git a/pkg/ui/styl/layout/layout.styl b/pkg/ui/styl/layout/layout.styl index 27cfd413ba18..81d4be7bca91 100644 --- a/pkg/ui/styl/layout/layout.styl +++ b/pkg/ui/styl/layout/layout.styl @@ -25,6 +25,7 @@ $page-padding-top = 20px min-width 100% padding-left $nav-width padding-top $page-padding-top + padding-bottom 5px &:after content "" @@ -32,15 +33,22 @@ $page-padding-top = 20px clear both .page-config - padding-top 12px - padding-bottom 12px padding-left 24px - z-index $z-index-page-config - position relative + // Stick to the top. + position sticky + position -webkit-sticky + top 0 + // We want 10px of spacing above and below this div when + // it's fixed during scrolling, but not when the page + // is scrolled to the top. This combination of padding + // and negative margins achieves that. + padding-bottom 10px + padding-top 10px + margin-bottom -10px + margin-top -10px - &--fixed - background-color $background-color - border-bottom 1px solid $table-border-color + z-index $z-index-page-config + background-color $background-color &__list clearfix() diff --git a/pkg/ui/yarn.lock b/pkg/ui/yarn.lock index e961dd8cde14..95b53c8eaee8 100644 --- a/pkg/ui/yarn.lock +++ b/pkg/ui/yarn.lock @@ -67,17 +67,13 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.0.tgz#d9008fa4c06f6801f93396d121f0227cd4244ac6" "@types/cheerio@*": - version "0.22.1" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.1.tgz#740c4cd8c4d3f3074f83b9ab62e711eac2c764ce" + version "0.22.7" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.7.tgz#4a92eafedfb2b9f4437d3a4410006d81114c66ce" "@types/classnames@^0.0.32": version "0.0.32" resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-0.0.32.tgz#449abcd9a826807811ef101e58df9f83cfc61713" -"@types/codemirror@*": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.39.tgz#4312ba2bdbd9b202891c350efe9cbadd9d01da71" - "@types/combokeys@^2.4.5": version "2.4.5" resolved "https://registry.yarnpkg.com/@types/combokeys/-/combokeys-2.4.5.tgz#98f794f4baf72a6219cf255516386252c95ac53d" @@ -112,9 +108,15 @@ version "0.8.0" resolved "https://registry.yarnpkg.com/@types/dagre-layout/-/dagre-layout-0.8.0.tgz#79fb118253b84ee908f7666b41f1e4d342c4db91" -"@types/enzyme@^2.8.12": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-2.8.12.tgz#a669d79ce1760d7241bc4b6fb7535d68669d78ad" +"@types/enzyme-adapter-react-16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.2.tgz#15ae37c64d6221a6f4b3a4aacc357cf773859de4" + dependencies: + "@types/enzyme" "*" + +"@types/enzyme@*", "@types/enzyme@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.1.9.tgz#fbd97f3beb7cad76fc9c6f04c97d77f4834522ef" dependencies: "@types/cheerio" "*" "@types/react" "*" @@ -143,6 +145,10 @@ version "2.2.44" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.44.tgz#1d4a798e53f35212fd5ad4d04050620171cd5b5e" +"@types/node@*": + version "9.6.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.2.tgz#e49ac1adb458835e95ca6487bc20f916b37aff23" + "@types/node@7.0.12": version "7.0.12" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.12.tgz#ae5f67a19c15f752148004db07cbbb372e69efc9" @@ -157,23 +163,17 @@ version "15.5.2" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.2.tgz#3c6b8dceb2906cc87fe4358e809f9d20c8d59be1" -"@types/react-codemirror@^0.2.6": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@types/react-codemirror/-/react-codemirror-0.2.7.tgz#4fb8c9a4aa6c300f062a0571ab5959fb46e3b15b" - dependencies: - "@types/codemirror" "*" - "@types/react" "*" - "@types/react-copy-to-clipboard@^4.2.5": version "4.2.5" resolved "https://registry.yarnpkg.com/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-4.2.5.tgz#bda288b4256288676019b75ca86f1714bbd206d4" dependencies: "@types/react" "*" -"@types/react-dom@^0.14.23": - version "0.14.23" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e" +"@types/react-dom@^16.0.5": + version "16.0.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.5.tgz#a757457662e3819409229e8f86795ff37b371f96" dependencies: + "@types/node" "*" "@types/react" "*" "@types/react-helmet@^5.0.5": @@ -182,15 +182,9 @@ dependencies: "@types/react" "*" -"@types/react-motion@^0.0.23": - version "0.0.23" - resolved "https://registry.yarnpkg.com/@types/react-motion/-/react-motion-0.0.23.tgz#8d433a875228d8e343d383cdc66e16c68e73a89f" - dependencies: - "@types/react" "*" - "@types/react-paginate@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/react-paginate/-/react-paginate-4.3.1.tgz#04c558a67751c38c24160df8f812f6b57600081a" + version "4.3.2" + resolved "https://registry.yarnpkg.com/@types/react-paginate/-/react-paginate-4.3.2.tgz#a79b150e179655ea27fce8ab9c49948b924918b0" dependencies: "@types/react" "*" @@ -209,33 +203,29 @@ redux "^3.6.0" "@types/react-router@<4.0.0": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-3.0.13.tgz#493c2f0794313a37e4698deed9b816b2ad239716" + version "3.0.15" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-3.0.15.tgz#b55b0dc5ad8f6fa66b609f0efc390b191381d082" dependencies: "@types/history" "^3" "@types/react" "*" -"@types/react-select@^1.0.45": - version "1.0.59" - resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-1.0.59.tgz#791022e5b2c7cd5c86301949ea5e4cc94a55bc66" +"@types/react-select@^1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-1.2.6.tgz#8a9579705e04b2c15ce529379402980d80e9d243" dependencies: "@types/react" "*" -"@types/react-sticky@^5.0.1": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@types/react-sticky/-/react-sticky-5.0.5.tgz#b921119af1b8056c14e5e83a231a02a397b7ee33" +"@types/react@*", "@types/react@^16.3.6": + version "16.3.7" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.3.7.tgz#3b90fc4c8382fc55f4d18a8d487dbd314eb6ec4c" dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^15.0.39", "@types/react@~15.0.39": - version "15.0.39" - resolved "https://registry.yarnpkg.com/@types/react/-/react-15.0.39.tgz#5a820c75cabf4cbfa177a3ab5a9a0634c46b14d1" + csstype "^2.0.0" "@types/redux-thunk@^2.1.0": - version "2.1.32" - resolved "https://registry.yarnpkg.com/@types/redux-thunk/-/redux-thunk-2.1.32.tgz#27fac368ced9ea170bf15e5fa4a21d9201f73102" + version "2.1.0" + resolved "http://registry.npmjs.org/@types/redux-thunk/-/redux-thunk-2.1.0.tgz#bc2b6e972961831afb82a9bf4f06726e351f9416" dependencies: - redux "^3.6.0" + redux-thunk "*" "@types/sinon@2.1.0": version "2.1.0" @@ -1373,26 +1363,16 @@ check-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" dependencies: css-select "~1.2.0" dom-serializer "~0.1.0" entities "~1.1.1" htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" + lodash "^4.15.0" + parse5 "^3.0.1" chokidar@1.5.2: version "1.5.2" @@ -1480,10 +1460,6 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -codemirror@^5.18.2, codemirror@^5.25.2: - version "5.25.2" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.25.2.tgz#8c77677ca9c9248d757d3a07ed1e89a8404850b7" - color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" @@ -1516,6 +1492,10 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + colors@^1.1.0, colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1691,7 +1671,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2: create-hash "^1.1.0" inherits "^2.0.1" -create-react-class@^15.5.1, create-react-class@^15.5.2: +create-react-class@^15.5.1: version "15.5.2" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.2.tgz#6a8758348df660b88326a0e764d569f274aad681" dependencies: @@ -1843,6 +1823,10 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": dependencies: cssom "0.3.x" +csstype@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.1.1.tgz#37b01a7a9958ef0b88167ff6678deccd732e0ae2" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -2023,6 +2007,10 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -2204,20 +2192,46 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -enzyme@^2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6" +enzyme-adapter-react-16@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4" dependencies: - cheerio "^0.22.0" - function.prototype.name "^1.0.0" + enzyme-adapter-utils "^1.3.0" + lodash "^4.17.4" + object.assign "^4.0.4" + object.values "^1.0.4" + prop-types "^15.6.0" + react-reconciler "^0.7.0" + react-test-renderer "^16.0.0-0" + +enzyme-adapter-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7" + dependencies: + lodash "^4.17.4" + object.assign "^4.0.4" + prop-types "^15.6.0" + +enzyme@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479" + dependencies: + cheerio "^1.0.0-rc.2" + function.prototype.name "^1.0.3" + has "^1.0.1" + is-boolean-object "^1.0.0" + is-callable "^1.1.3" + is-number-object "^1.0.3" + is-string "^1.0.4" is-subset "^0.1.1" lodash "^4.17.4" + object-inspect "^1.5.0" object-is "^1.0.1" - object.assign "^4.0.4" + object.assign "^4.1.0" object.entries "^1.0.4" object.values "^1.0.4" - prop-types "^15.5.10" - uuid "^3.0.1" + raf "^3.4.0" + rst-selector-parser "^2.2.3" errno@^0.1.3: version "0.1.4" @@ -2496,6 +2510,18 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" +fbjs@^0.8.16: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" @@ -2685,13 +2711,17 @@ function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" -function.prototype.name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +function.prototype.name@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" dependencies: define-properties "^1.1.2" - function-bind "^1.1.0" - is-callable "^1.1.2" + function-bind "^1.1.1" + is-callable "^1.1.3" gauge@~2.7.1: version "2.7.3" @@ -2859,6 +2889,10 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -2913,10 +2947,14 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0: +hoist-non-react-statics@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" +hoist-non-react-statics@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -3151,6 +3189,10 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-boolean-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" + is-buffer@^1.0.2: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -3161,7 +3203,7 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-callable@^1.1.1, is-callable@^1.1.2, is-callable@^1.1.3: +is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" @@ -3219,6 +3261,10 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" +is-number-object@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" + is-number@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" @@ -3267,6 +3313,10 @@ is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-string@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -3610,18 +3660,10 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - lodash.assigninwith@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assigninwith/-/lodash.assigninwith-4.2.0.tgz#af02c98432ac86d93da695b4be801401971736af" -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -3638,11 +3680,7 @@ lodash.create@3.1.1: lodash._basecreate "^3.0.0" lodash._isiterateecall "^3.0.0" -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.defaults@4.0.1, lodash.defaults@^4.0.1: +lodash.defaults@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.0.1.tgz#05678e612a9716c64b5bf2cecf045131ca3d3402" dependencies: @@ -3653,17 +3691,9 @@ lodash.endswith@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09" -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - -lodash.flatten@^4.2.0: +lodash.flattendeep@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" lodash.isarguments@^3.0.0: version "3.1.0" @@ -3673,10 +3703,6 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - lodash.isfunction@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz#4db709fc81bc4a8fd7127a458a5346c5cdce2c6b" @@ -3693,38 +3719,14 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" -lodash.merge@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - lodash.rest@^4.0.0: version "4.0.5" resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa" -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - lodash.startswith@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.startswith/-/lodash.startswith-4.2.1.tgz#c598c4adce188a27e53145731cdc6c0e7177600c" @@ -3741,6 +3743,10 @@ lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^4.15.0: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + log4js@^0.6.31: version "0.6.38" resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" @@ -3996,6 +4002,15 @@ ncname@1.0.x: dependencies: xml-char-classes "^1.0.0" +nearley@^2.7.10: + version "2.13.0" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.13.0.tgz#6e7b0f4e68bfc3e74c99eaef2eda39e513143439" + dependencies: + nomnom "~1.6.2" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + semver "^5.4.1" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -4065,6 +4080,13 @@ node-pre-gyp@^0.6.29: tar "^2.2.1" tar-pack "^3.4.0" +nomnom@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" + dependencies: + colors "0.5.x" + underscore "~1.4.4" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -4157,21 +4179,26 @@ object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" +object-inspect@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3" + object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" -object-keys@^1.0.10, object-keys@^1.0.8: +object-keys@^1.0.11, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" -object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" +object.assign@^4.0.4, object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" dependencies: define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" object.entries@^1.0.4: version "1.0.4" @@ -4342,6 +4369,12 @@ parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + dependencies: + "@types/node" "*" + parsejson@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" @@ -4760,13 +4793,21 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.2, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@~15.5.0: +prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.2, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" +prop-types@^15.5.4, prop-types@^15.6.0: + version "15.6.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + protobufjs@^6.7.3: version "6.7.3" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.7.3.tgz#9270aa5d75dfe4d37df1dec87c444a72140d0e1c" @@ -4853,12 +4894,23 @@ querystringify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" -raf@^3.1.0: +raf@^3.1.0, raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" dependencies: performance-now "^2.1.0" +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -4909,24 +4961,6 @@ react-addons-create-fragment@^15.0.0, react-addons-create-fragment@^15.4.2: fbjs "^0.8.4" object-assign "^4.1.0" -react-addons-test-utils@^15.4.2: - version "15.5.1" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.5.1.tgz#e0d258cda2a122ad0dff69f838260d0c3958f5f7" - dependencies: - fbjs "^0.8.4" - object-assign "^4.1.0" - -react-codemirror@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/react-codemirror/-/react-codemirror-1.0.0.tgz#91467b53b1f5d80d916a2fd0b4c7adb85a9001ba" - dependencies: - classnames "^2.2.5" - codemirror "^5.18.2" - create-react-class "^15.5.1" - lodash.debounce "^4.0.8" - lodash.isequal "^4.5.0" - prop-types "^15.5.4" - react-copy-to-clipboard@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz#8eae107bb400be73132ed3b6a7b4fb156090208e" @@ -4934,14 +4968,14 @@ react-copy-to-clipboard@^5.0.1: copy-to-clipboard "^3" prop-types "^15.5.8" -react-dom@^15.4.2: - version "15.5.3" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.3.tgz#2ee127ce942df55da53111ae303316e68072b5c5" +react-dom@^16.3.1: + version "16.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.3.1.tgz#6a3c90a4fb62f915bdbcf6204422d93a7d4ca573" dependencies: - fbjs "^0.8.9" + fbjs "^0.8.16" loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "~15.5.0" + object-assign "^4.1.1" + prop-types "^15.6.0" react-helmet@^5.2.0: version "5.2.0" @@ -4952,13 +4986,16 @@ react-helmet@^5.2.0: prop-types "^15.5.4" react-side-effect "^1.1.0" -react-input-autosize@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-1.1.4.tgz#cbc45072d4084ddc57806db8e3b34e644b8366ac" +react-input-autosize@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8" dependencies: - create-react-class "^15.5.2" prop-types "^15.5.8" +react-is@^16.3.1: + version "16.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.3.1.tgz#ee66e6d8283224a83b3030e110056798488359ba" + react-motion@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" @@ -4976,6 +5013,15 @@ react-paginate@^4.4.3: react "^15.0.0" react-addons-create-fragment "^15.0.0" +react-reconciler@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + react-redux@^5.0.3: version "5.0.4" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.4.tgz#1563babadcfb2672f57f9ceaa439fb16bf85d55b" @@ -4992,26 +5038,25 @@ react-router-redux@<5.0.0: version "4.0.8" resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-4.0.8.tgz#227403596b5151e182377dab835b5d45f0f8054e" -react-router@<4.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.5.tgz#c3b7873758045a8bbc9562aef4ff4bc8cce7c136" +react-router@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.2.1.tgz#b9a3279962bdfbe684c8bd0482b81ef288f0f244" dependencies: create-react-class "^15.5.1" history "^3.0.0" - hoist-non-react-statics "^1.2.0" + hoist-non-react-statics "^2.3.1" invariant "^2.2.1" loose-envify "^1.2.0" prop-types "^15.5.6" warning "^3.0.0" -react-select@^1.0.0-rc.4: - version "1.0.0-rc.4" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.0.0-rc.4.tgz#f28f3bab18196ff8f32337bb52ed015773c90663" +react-select@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.2.1.tgz#a2fe58a569eb14dcaa6543816260b97e538120d1" dependencies: classnames "^2.2.4" - create-react-class "^15.5.2" prop-types "^15.5.8" - react-input-autosize "^1.1.3" + react-input-autosize "^2.1.2" react-side-effect@^1.1.0: version "1.1.5" @@ -5020,20 +5065,16 @@ react-side-effect@^1.1.0: exenv "^1.2.1" shallowequal "^1.0.1" -react-sticky@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/react-sticky/-/react-sticky-5.0.8.tgz#d5f85f96977f410081d792ab81886c622c5d8b14" +react-test-renderer@^16.0.0-0: + version "16.3.1" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.3.1.tgz#d9257936d8535bd40f57f3d5a84e7b0452fb17f2" dependencies: - prop-types "^15.5.8" - -react-test-renderer@^15.5.4: - version "15.5.4" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.5.4.tgz#d4ebb23f613d685ea8f5390109c2d20fbf7c83bc" - dependencies: - fbjs "^0.8.9" - object-assign "^4.1.0" + fbjs "^0.8.16" + object-assign "^4.1.1" + prop-types "^15.6.0" + react-is "^16.3.1" -react@^15.0.0, react@^15.4.2: +react@^15.0.0: version "15.5.3" resolved "https://registry.yarnpkg.com/react/-/react-15.5.3.tgz#84055382c025dec4e3b902bb61a8697cc79c1258" dependencies: @@ -5042,6 +5083,15 @@ react@^15.0.0, react@^15.4.2: object-assign "^4.1.0" prop-types "^15.5.2" +react@^16.3.1: + version "16.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.3.1.tgz#4a2da433d471251c69b6033ada30e2ed1202cfd8" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -5127,7 +5177,7 @@ redux-saga@^0.15.6: version "0.15.6" resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-0.15.6.tgz#8638dc522de6c6c0a496fe8b2b5466287ac2dc4d" -redux-thunk@^2.2.0: +redux-thunk@*, redux-thunk@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" @@ -5292,6 +5342,10 @@ resolve@^1.3.2: dependencies: path-parse "^1.0.5" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -5308,6 +5362,13 @@ ripemd160@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -5342,6 +5403,10 @@ selfsigned@^1.9.1: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + semver@~4.3.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" @@ -6011,6 +6076,10 @@ ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" +underscore@~1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" @@ -6104,10 +6173,6 @@ uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" -uuid@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" - validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"