diff --git a/.circleci/config.yml b/.circleci/config.yml index dafcbea5f..558486406 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,6 +36,7 @@ jobs: GOOPTS: "-p 2" GOMAXPROCS: "2" GO111MODULE: "on" + - run: go test ./tsdb/ -test.tsdb-isolation=false - prometheus/check_proto: version: "3.15.8" - prometheus/store_artifact: @@ -93,6 +94,7 @@ jobs: steps: - checkout - run: go test ./tsdb/... + - run: go test ./tsdb/ -test.tsdb-isolation=false test_mixins: executor: golang diff --git a/documentation/prometheus-mixin/dashboards.libsonnet b/documentation/prometheus-mixin/dashboards.libsonnet index 0581007b4..b95f13e0a 100644 --- a/documentation/prometheus-mixin/dashboards.libsonnet +++ b/documentation/prometheus-mixin/dashboards.libsonnet @@ -312,9 +312,9 @@ local template = grafana.template; ) .addTemplate( template.new( - 'instance', + 'cluster', '$datasource', - 'label_values(prometheus_build_info, instance)' % $._config, + 'label_values(kube_pod_container_info{image=~".*prometheus.*"}, cluster)' % $._config, refresh='time', current={ selected: true, @@ -326,9 +326,9 @@ local template = grafana.template; ) .addTemplate( template.new( - 'cluster', + 'instance', '$datasource', - 'label_values(kube_pod_container_info{image=~".*prometheus.*"}, cluster)' % $._config, + 'label_values(prometheus_build_info{cluster=~"$cluster"}, instance)' % $._config, refresh='time', current={ selected: true, diff --git a/tsdb/db.go b/tsdb/db.go index c7150c79b..9ce62d640 100644 --- a/tsdb/db.go +++ b/tsdb/db.go @@ -81,6 +81,7 @@ func DefaultOptions() *Options { WALCompression: false, StripeSize: DefaultStripeSize, HeadChunksWriteBufferSize: chunks.DefaultWriteBufferSize, + IsolationDisabled: defaultIsolationDisabled, HeadChunksEndTimeVariance: 0, } } @@ -150,7 +151,7 @@ type Options struct { // mainly meant for external users who import TSDB. BlocksToDelete BlocksToDeleteFunc - // Enables the in memory exemplar storage,. + // Enables the in memory exemplar storage. EnableExemplarStorage bool // Enables the snapshot of in-memory chunks on shutdown. This makes restarts faster. @@ -160,6 +161,9 @@ type Options struct { // See tsdb/exemplar.go, specifically the CircularExemplarStorage struct and it's constructor NewCircularExemplarStorage. MaxExemplars int64 + // Disables isolation between reads and in-flight appends. + IsolationDisabled bool + // SeriesHashCache specifies the series hash cache used when querying shards via Querier.Select(). // If nil, the cache won't be used. SeriesHashCache *hashcache.SeriesHashCache @@ -720,6 +724,10 @@ func open(dir string, l log.Logger, r prometheus.Registerer, opts *Options, rngs headOpts.EnableExemplarStorage = opts.EnableExemplarStorage headOpts.MaxExemplars.Store(opts.MaxExemplars) headOpts.EnableMemorySnapshotOnShutdown = opts.EnableMemorySnapshotOnShutdown + if opts.IsolationDisabled { + // We only override this flag if isolation is disabled at DB level. We use the default otherwise. + headOpts.IsolationDisabled = opts.IsolationDisabled + } db.head, err = NewHead(r, l, wlog, headOpts, stats.Head) if err != nil { return nil, err diff --git a/tsdb/db_test.go b/tsdb/db_test.go index 4448c6523..a6e85f90c 100644 --- a/tsdb/db_test.go +++ b/tsdb/db_test.go @@ -17,6 +17,7 @@ import ( "bufio" "context" "encoding/binary" + "flag" "fmt" "hash/crc32" "io/ioutil" @@ -54,6 +55,11 @@ import ( ) func TestMain(m *testing.M) { + var isolationEnabled bool + flag.BoolVar(&isolationEnabled, "test.tsdb-isolation", true, "enable isolation") + flag.Parse() + defaultIsolationDisabled = !isolationEnabled + goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("github.com/prometheus/prometheus/tsdb.(*SegmentWAL).cut.func1"), goleak.IgnoreTopFunction("github.com/prometheus/prometheus/tsdb.(*SegmentWAL).cut.func2")) } @@ -2407,6 +2413,10 @@ func TestDBReadOnly_FlushWAL(t *testing.T) { } func TestDBCannotSeePartialCommits(t *testing.T) { + if defaultIsolationDisabled { + t.Skip("skipping test since tsdb isolation is disabled") + } + tmpdir, _ := ioutil.TempDir("", "test") defer func() { require.NoError(t, os.RemoveAll(tmpdir)) @@ -2477,6 +2487,10 @@ func TestDBCannotSeePartialCommits(t *testing.T) { } func TestDBQueryDoesntSeeAppendsAfterCreation(t *testing.T) { + if defaultIsolationDisabled { + t.Skip("skipping test since tsdb isolation is disabled") + } + tmpdir, _ := ioutil.TempDir("", "test") defer func() { require.NoError(t, os.RemoveAll(tmpdir)) diff --git a/tsdb/head.go b/tsdb/head.go index 5d6ef1779..b17c8f7e7 100644 --- a/tsdb/head.go +++ b/tsdb/head.go @@ -52,6 +52,9 @@ var ( // ErrAppenderClosed is returned if an appender has already be successfully // rolled back or committed. ErrAppenderClosed = errors.New("appender closed") + + // defaultIsolationDisabled is true if isolation is disabled by default. + defaultIsolationDisabled = false ) // Head handles reads and writes of time series data within a time window. @@ -134,6 +137,8 @@ type HeadOptions struct { SeriesCallback SeriesLifecycleCallback EnableExemplarStorage bool EnableMemorySnapshotOnShutdown bool + + IsolationDisabled bool } func DefaultHeadOptions() *HeadOptions { @@ -145,6 +150,7 @@ func DefaultHeadOptions() *HeadOptions { ChunkEndTimeVariance: 0, StripeSize: DefaultStripeSize, SeriesCallback: &noopSeriesLifecycleCallback{}, + IsolationDisabled: defaultIsolationDisabled, } } @@ -236,12 +242,13 @@ func (h *Head) resetInMemoryState() error { return err } + h.iso = newIsolation(h.opts.IsolationDisabled) + h.exemplarMetrics = em h.exemplars = es h.series = newStripeSeries(h.opts.StripeSize, h.opts.SeriesCallback) h.postings = index.NewUnorderedMemPostings() h.tombstones = tombstones.NewMemTombstones() - h.iso = newIsolation() h.deleted = map[chunks.HeadSeriesRef]int{} h.chunkRange.Store(h.opts.ChunkRange) h.minTime.Store(math.MaxInt64) @@ -1232,7 +1239,7 @@ func (h *Head) getOrCreate(hash uint64, lset labels.Labels) (*memSeries, bool, e func (h *Head) getOrCreateWithID(id chunks.HeadSeriesRef, hash uint64, lset labels.Labels) (*memSeries, bool, error) { s, created, err := h.series.getOrSet(hash, lset, func() *memSeries { - return newMemSeries(lset, id, hash, h.chunkRange.Load(), h.opts.ChunkEndTimeVariance, &h.memChunkPool) + return newMemSeries(lset, id, hash, h.chunkRange.Load(), h.opts.ChunkEndTimeVariance, &h.memChunkPool, h.opts.IsolationDisabled) }) if err != nil { return nil, false, err @@ -1513,10 +1520,11 @@ type memSeries struct { memChunkPool *sync.Pool + // txs is nil if isolation is disabled. txs *txRing } -func newMemSeries(lset labels.Labels, id chunks.HeadSeriesRef, hash uint64, chunkRange int64, chunkEndTimeVariance float64, memChunkPool *sync.Pool) *memSeries { +func newMemSeries(lset labels.Labels, id chunks.HeadSeriesRef, hash uint64, chunkRange int64, chunkEndTimeVariance float64, memChunkPool *sync.Pool, isolationDisabled bool) *memSeries { s := &memSeries{ lset: lset, hash: hash, @@ -1524,9 +1532,11 @@ func newMemSeries(lset labels.Labels, id chunks.HeadSeriesRef, hash uint64, chun chunkRange: chunkRange, chunkEndTimeVariance: chunkEndTimeVariance, nextAt: math.MinInt64, - txs: newTxRing(4), memChunkPool: memChunkPool, } + if !isolationDisabled { + s.txs = newTxRing(4) + } return s } @@ -1579,7 +1589,9 @@ func (s *memSeries) truncateChunksBefore(mint int64) (removed int) { // cleanupAppendIDsBelow cleans up older appendIDs. Has to be called after // acquiring lock. func (s *memSeries) cleanupAppendIDsBelow(bound uint64) { - s.txs.cleanupAppendIDsBelow(bound) + if s.txs != nil { + s.txs.cleanupAppendIDsBelow(bound) + } } func (s *memSeries) head() *memChunk { diff --git a/tsdb/head_append.go b/tsdb/head_append.go index f5a1ccaac..4616e55b1 100644 --- a/tsdb/head_append.go +++ b/tsdb/head_append.go @@ -534,7 +534,7 @@ func (s *memSeries) append(t int64, v float64, appendID uint64, chunkDiskMapper s.sampleBuf[2] = s.sampleBuf[3] s.sampleBuf[3] = sample{t: t, v: v} - if appendID > 0 { + if appendID > 0 && s.txs != nil { s.txs.add(appendID) } diff --git a/tsdb/head_read.go b/tsdb/head_read.go index f0ef8ce07..3455229c8 100644 --- a/tsdb/head_read.go +++ b/tsdb/head_read.go @@ -391,7 +391,7 @@ func (s *memSeries) iterator(id chunks.HeadChunkID, isoState *isolationState, ch numSamples := c.chunk.NumSamples() stopAfter := numSamples - if isoState != nil { + if isoState != nil && !isoState.IsolationDisabled() { totalSamples := 0 // Total samples in this series. previousSamples := 0 // Samples before this chunk. diff --git a/tsdb/head_test.go b/tsdb/head_test.go index 057ce9477..043b5ce6e 100644 --- a/tsdb/head_test.go +++ b/tsdb/head_test.go @@ -60,6 +60,7 @@ func newTestHead(t testing.TB, chunkRange int64, compressWAL bool) (*Head, *wal. opts.ChunkDirRoot = dir opts.EnableExemplarStorage = true opts.MaxExemplars.Store(config.DefaultExemplarsConfig.MaxExemplars) + h, err := NewHead(nil, nil, wlog, opts, nil) require.NoError(t, err) @@ -228,7 +229,7 @@ func BenchmarkLoadWAL(b *testing.B) { for k := 0; k < c.batches*c.seriesPerBatch; k++ { // Create one mmapped chunk per series, with one sample at the given time. lbls := labels.Labels{} - s := newMemSeries(lbls, chunks.HeadSeriesRef(k)*101, lbls.Hash(), c.mmappedChunkT, 0, nil) + s := newMemSeries(lbls, chunks.HeadSeriesRef(k)*101, lbls.Hash(), c.mmappedChunkT, 0, nil, defaultIsolationDisabled) s.append(c.mmappedChunkT, 42, 0, chunkDiskMapper) s.mmapCurrentHeadChunk(chunkDiskMapper) } @@ -553,7 +554,7 @@ func TestMemSeries_truncateChunks(t *testing.T) { } lbls := labels.FromStrings("a", "b") - s := newMemSeries(lbls, 1, lbls.Hash(), 2000, 0, &memChunkPool) + s := newMemSeries(lbls, 1, lbls.Hash(), 2000, 0, &memChunkPool, defaultIsolationDisabled) for i := 0; i < 4000; i += 5 { ok, _ := s.append(int64(i), float64(i), 0, chunkDiskMapper) @@ -1092,7 +1093,7 @@ func TestMemSeries_append(t *testing.T) { }() lbls := labels.Labels{} - s := newMemSeries(lbls, 1, lbls.Hash(), 500, 0, nil) + s := newMemSeries(lbls, 1, lbls.Hash(), 500, 0, nil, defaultIsolationDisabled) // Add first two samples at the very end of a chunk range and the next two // on and after it. @@ -1550,6 +1551,10 @@ func TestAddDuplicateLabelName(t *testing.T) { } func TestMemSeriesIsolation(t *testing.T) { + if defaultIsolationDisabled { + t.Skip("skipping test since tsdb isolation is disabled") + } + // Put a series, select it. GC it and then access it. lastValue := func(h *Head, maxAppendID uint64) int { idx, err := h.Index() @@ -1721,6 +1726,10 @@ func TestMemSeriesIsolation(t *testing.T) { } func TestIsolationRollback(t *testing.T) { + if defaultIsolationDisabled { + t.Skip("skipping test since tsdb isolation is disabled") + } + // Rollback after a failed append and test if the low watermark has progressed anyway. hb, _ := newTestHead(t, 1000, false) defer func() { @@ -1749,6 +1758,10 @@ func TestIsolationRollback(t *testing.T) { } func TestIsolationLowWatermarkMonotonous(t *testing.T) { + if defaultIsolationDisabled { + t.Skip("skipping test since tsdb isolation is disabled") + } + hb, _ := newTestHead(t, 1000, false) defer func() { require.NoError(t, hb.Close()) @@ -1782,6 +1795,10 @@ func TestIsolationLowWatermarkMonotonous(t *testing.T) { } func TestIsolationAppendIDZeroIsNoop(t *testing.T) { + if defaultIsolationDisabled { + t.Skip("skipping test since tsdb isolation is disabled") + } + h, _ := newTestHead(t, 1000, false) defer func() { require.NoError(t, h.Close()) @@ -1803,6 +1820,10 @@ func TestHeadSeriesChunkRace(t *testing.T) { } func TestIsolationWithoutAdd(t *testing.T) { + if defaultIsolationDisabled { + t.Skip("skipping test since tsdb isolation is disabled") + } + hb, _ := newTestHead(t, 1000, false) defer func() { require.NoError(t, hb.Close()) @@ -2323,7 +2344,7 @@ func TestMemSafeIteratorSeekIntoBuffer(t *testing.T) { }() lbls := labels.Labels{} - s := newMemSeries(lbls, 1, lbls.Hash(), 500, 0, nil) + s := newMemSeries(lbls, 1, lbls.Hash(), 500, 0, nil, defaultIsolationDisabled) for i := 0; i < 7; i++ { ok, _ := s.append(int64(i), float64(i), 0, chunkDiskMapper) diff --git a/tsdb/isolation.go b/tsdb/isolation.go index ca6ce1980..4919bfe91 100644 --- a/tsdb/isolation.go +++ b/tsdb/isolation.go @@ -39,6 +39,10 @@ func (i *isolationState) Close() { i.prev.next = i.next } +func (i *isolationState) IsolationDisabled() bool { + return i.isolation.disabled +} + type isolationAppender struct { appendID uint64 prev *isolationAppender @@ -63,9 +67,11 @@ type isolation struct { readMtx sync.RWMutex // All current in use isolationStates. This is a doubly-linked list. readsOpen *isolationState + // If true, writes are not tracked while reads are still tracked. + disabled bool } -func newIsolation() *isolation { +func newIsolation(disabled bool) *isolation { isoState := &isolationState{} isoState.next = isoState isoState.prev = isoState @@ -78,6 +84,7 @@ func newIsolation() *isolation { appendsOpen: map[uint64]*isolationAppender{}, appendsOpenList: appender, readsOpen: isoState, + disabled: disabled, appendersPool: sync.Pool{New: func() interface{} { return &isolationAppender{} }}, } } @@ -85,12 +92,20 @@ func newIsolation() *isolation { // lowWatermark returns the appendID below which we no longer need to track // which appends were from which appendID. func (i *isolation) lowWatermark() uint64 { + if i.disabled { + return 0 + } + i.appendMtx.RLock() // Take appendMtx first. defer i.appendMtx.RUnlock() return i.lowWatermarkLocked() } func (i *isolation) lowWatermarkLocked() uint64 { + if i.disabled { + return 0 + } + i.readMtx.RLock() defer i.readMtx.RUnlock() if i.readsOpen.prev != i.readsOpen { @@ -106,6 +121,8 @@ func (i *isolation) lowWatermarkLocked() uint64 { func (i *isolation) State(mint, maxt int64) *isolationState { i.appendMtx.RLock() // Take append mutex before read mutex. defer i.appendMtx.RUnlock() + + // We need to track the reads even when isolation is disabled. isoState := &isolationState{ maxAppendID: i.appendsOpenList.appendID, lowWatermark: i.appendsOpenList.next.appendID, // Lowest appendID from appenders, or lastAppendId. @@ -124,6 +141,7 @@ func (i *isolation) State(mint, maxt int64) *isolationState { isoState.next = i.readsOpen.next i.readsOpen.next.prev = isoState i.readsOpen.next = isoState + return isoState } @@ -146,6 +164,10 @@ func (i *isolation) TraverseOpenReads(f func(s *isolationState) bool) { // ID. The first ID returned is 1. // Also returns the low watermark, to keep lock/unlock operations down. func (i *isolation) newAppendID() (uint64, uint64) { + if i.disabled { + return 0, 0 + } + i.appendMtx.Lock() defer i.appendMtx.Unlock() @@ -165,6 +187,10 @@ func (i *isolation) newAppendID() (uint64, uint64) { } func (i *isolation) lastAppendID() uint64 { + if i.disabled { + return 0 + } + i.appendMtx.RLock() defer i.appendMtx.RUnlock() @@ -172,6 +198,10 @@ func (i *isolation) lastAppendID() uint64 { } func (i *isolation) closeAppend(appendID uint64) { + if i.disabled { + return + } + i.appendMtx.Lock() defer i.appendMtx.Unlock() diff --git a/tsdb/isolation_test.go b/tsdb/isolation_test.go index e41e3f5a2..6e27e06fc 100644 --- a/tsdb/isolation_test.go +++ b/tsdb/isolation_test.go @@ -23,7 +23,7 @@ import ( func BenchmarkIsolation(b *testing.B) { for _, goroutines := range []int{10, 100, 1000, 10000} { b.Run(strconv.Itoa(goroutines), func(b *testing.B) { - iso := newIsolation() + iso := newIsolation(false) wg := sync.WaitGroup{} start := make(chan struct{}) @@ -53,7 +53,7 @@ func BenchmarkIsolation(b *testing.B) { func BenchmarkIsolationWithState(b *testing.B) { for _, goroutines := range []int{10, 100, 1000, 10000} { b.Run(strconv.Itoa(goroutines), func(b *testing.B) { - iso := newIsolation() + iso := newIsolation(false) wg := sync.WaitGroup{} start := make(chan struct{}) diff --git a/web/ui/module/codemirror-promql/package.json b/web/ui/module/codemirror-promql/package.json index 2a5b79f08..ee6ee543c 100644 --- a/web/ui/module/codemirror-promql/package.json +++ b/web/ui/module/codemirror-promql/package.json @@ -63,7 +63,7 @@ "prettier": "^2.4.1", "ts-loader": "^7.0.4", "ts-mocha": "^8.0.0", - "ts-node": "^9.0.0", + "ts-node": "^10.4.0", "typescript": "^4.5.2" }, "peerDependencies": { diff --git a/web/ui/package-lock.json b/web/ui/package-lock.json index ed86c6526..8905a70ba 100644 --- a/web/ui/package-lock.json +++ b/web/ui/package-lock.json @@ -49,7 +49,7 @@ "prettier": "^2.4.1", "ts-loader": "^7.0.4", "ts-mocha": "^8.0.0", - "ts-node": "^9.0.0", + "ts-node": "^10.4.0", "typescript": "^4.5.2" }, "engines": { @@ -1288,8 +1288,9 @@ } }, "node_modules/@codemirror/matchbrackets": { - "version": "0.19.1", - "license": "MIT", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@codemirror/matchbrackets/-/matchbrackets-0.19.3.tgz", + "integrity": "sha512-ljkrBxaLgh8jesroUiBa57pdEwqJamxkukXrJpL9LdyFZVJaF+9TldhztRaMsMZO1XnCSSHQ9sg32iuHo7Sc2g==", "dependencies": { "@codemirror/language": "^0.19.0", "@codemirror/state": "^0.19.0", @@ -1365,6 +1366,27 @@ "w3c-keyname": "^2.2.4" } }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "dev": true, @@ -1497,6 +1519,22 @@ "node": ">=8" } }, + "node_modules/@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/@lezer/common": { "version": "0.15.8", "license": "MIT" @@ -1576,6 +1614,30 @@ "node": ">= 6" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@types/chai": { "version": "4.2.22", "dev": true, @@ -1611,6 +1673,40 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "dev": true, + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, "node_modules/@types/jquery": { "version": "3.5.8", "dev": true, @@ -1732,6 +1828,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "4.33.0", "dev": true, @@ -2065,6 +2176,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "dev": true, @@ -2561,6 +2681,7 @@ }, "node_modules/colorette": { "version": "1.4.0", + "dev": true, "license": "MIT" }, "node_modules/commander": { @@ -2691,6 +2812,14 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-require-extensions": { "version": "3.0.0", "dev": true, @@ -2720,6 +2849,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "dev": true, @@ -2996,7 +3134,6 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4149,6 +4286,14 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-regex": { "version": "1.1.4", "license": "MIT", @@ -4374,6 +4519,30 @@ "node": ">=8" } }, + "node_modules/jest-diff": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "license": "MIT" @@ -5343,6 +5512,11 @@ "node": ">=6" } }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" + }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -5409,6 +5583,11 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "node_modules/picomatch": { "version": "2.3.0", "license": "MIT", @@ -5430,6 +5609,34 @@ "node": ">=4" } }, + "node_modules/postcss": { + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "dev": true, @@ -5460,6 +5667,33 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "dev": true, @@ -5804,6 +6038,19 @@ "dev": true, "license": "MIT" }, + "node_modules/sanitize-html": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.5.3.tgz", + "integrity": "sha512-DGATXd1fs/Rm287/i5FBKVYSBBUL0iAaztOA1/RFhEs4yqo39/X52i/q/CwsfCUG5cilmXSBmnQmyWfnKhBlOg==", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^6.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, "node_modules/sass": { "version": "1.43.4", "license": "MIT", @@ -5921,6 +6168,14 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.20", "dev": true, @@ -6363,28 +6618,56 @@ } }, "node_modules/ts-node": { - "version": "9.1.1", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, - "license": "MIT", "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": ">=10.0.0" - }, "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/ts-node/node_modules/diff": { @@ -6797,7 +7080,7 @@ "@codemirror/history": "^0.19.0", "@codemirror/language": "^0.19.5", "@codemirror/lint": "^0.19.3", - "@codemirror/matchbrackets": "^0.19.1", + "@codemirror/matchbrackets": "^0.19.3", "@codemirror/search": "^0.19.2", "@codemirror/state": "^0.19.5", "@codemirror/view": "^0.19.19", @@ -6823,7 +7106,7 @@ "react-router-dom": "^5.2.1", "react-test-renderer": "^17.0.2", "reactstrap": "^8.9.0", - "sanitize-html": "^2.3.3", + "sanitize-html": "^2.5.3", "sass": "1.43.4", "tempusdominus-bootstrap-4": "^5.1.2", "tempusdominus-core": "^5.0.3" @@ -6832,7 +7115,7 @@ "@testing-library/react-hooks": "^7.0.1", "@types/enzyme": "^3.10.10", "@types/flot": "0.0.32", - "@types/jest": "^27.0.1", + "@types/jest": "^27.0.2", "@types/jquery": "^3.5.8", "@types/node": "^16.11.7", "@types/react": "^17.0.35", @@ -9517,85 +9800,6 @@ "node": ">=8" } }, - "react-app/node_modules/@jest/types": { - "version": "27.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "react-app/node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "react-app/node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "react-app/node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "react-app/node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "react-app/node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "react-app/node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "react-app/node_modules/@nexucis/fuzzy": { "version": "0.3.0", "license": "MIT" @@ -10069,36 +10273,6 @@ "dev": true, "license": "MIT" }, - "react-app/node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "react-app/node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "react-app/node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "react-app/node_modules/@types/jest": { - "version": "27.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, "react-app/node_modules/@types/minimatch": { "version": "3.0.5", "dev": true, @@ -10210,19 +10384,6 @@ "node": ">=0.10.0" } }, - "react-app/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "react-app/node_modules/@types/yargs-parser": { - "version": "20.2.1", - "dev": true, - "license": "MIT" - }, "react-app/node_modules/@webassemblyjs/ast": { "version": "1.9.0", "dev": true, @@ -12844,13 +13005,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "react-app/node_modules/deepmerge": { - "version": "4.2.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "react-app/node_modules/default-gateway": { "version": "4.2.0", "dev": true, @@ -13125,14 +13279,6 @@ "dev": true, "license": "MIT" }, - "react-app/node_modules/diff-sequences": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "react-app/node_modules/diffie-hellman": { "version": "5.0.3", "dev": true, @@ -15687,13 +15833,6 @@ "node": ">=0.10.0" } }, - "react-app/node_modules/is-plain-object": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "react-app/node_modules/is-potential-custom-element-name": { "version": "1.0.1", "dev": true, @@ -16386,84 +16525,6 @@ "node": ">=8" } }, - "react-app/node_modules/jest-diff": { - "version": "27.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "react-app/node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "react-app/node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "react-app/node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "react-app/node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "react-app/node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "react-app/node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "react-app/node_modules/jest-docblock": { "version": "26.0.0", "dev": true, @@ -16815,14 +16876,6 @@ "promise-polyfill": "^8.1.3" } }, - "react-app/node_modules/jest-get-type": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "react-app/node_modules/jest-haste-map": { "version": "26.6.2", "dev": true, @@ -19259,6 +19312,7 @@ }, "react-app/node_modules/klona": { "version": "2.0.4", + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -19771,6 +19825,7 @@ }, "react-app/node_modules/nanoid": { "version": "3.1.25", + "dev": true, "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" @@ -20283,10 +20338,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "react-app/node_modules/parse-srcset": { - "version": "1.0.2", - "license": "MIT" - }, "react-app/node_modules/parseurl": { "version": "1.3.3", "dev": true, @@ -21664,31 +21715,6 @@ "renderkid": "^2.0.4" } }, - "react-app/node_modules/pretty-format": { - "version": "27.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.1.1", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "react-app/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "react-app/node_modules/process": { "version": "0.11.10", "dev": true, @@ -23149,45 +23175,6 @@ "which": "bin/which" } }, - "react-app/node_modules/sanitize-html": { - "version": "2.5.0", - "license": "MIT", - "dependencies": { - "deepmerge": "^4.2.2", - "escape-string-regexp": "^4.0.0", - "htmlparser2": "^6.0.0", - "is-plain-object": "^5.0.0", - "klona": "^2.0.3", - "parse-srcset": "^1.0.2", - "postcss": "^8.0.2" - } - }, - "react-app/node_modules/sanitize-html/node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "react-app/node_modules/sanitize-html/node_modules/postcss": { - "version": "8.3.6", - "license": "MIT", - "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, "react-app/node_modules/sanitize.css": { "version": "10.0.0", "dev": true, @@ -23706,13 +23693,6 @@ "dev": true, "license": "MIT" }, - "react-app/node_modules/source-map-js": { - "version": "0.6.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "react-app/node_modules/source-map-resolve": { "version": "0.5.3", "dev": true, @@ -27443,7 +27423,9 @@ } }, "@codemirror/matchbrackets": { - "version": "0.19.1", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@codemirror/matchbrackets/-/matchbrackets-0.19.3.tgz", + "integrity": "sha512-ljkrBxaLgh8jesroUiBa57pdEwqJamxkukXrJpL9LdyFZVJaF+9TldhztRaMsMZO1XnCSSHQ9sg32iuHo7Sc2g==", "requires": { "@codemirror/language": "^0.19.0", "@codemirror/state": "^0.19.0", @@ -27512,6 +27494,21 @@ "w3c-keyname": "^2.2.4" } }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@eslint/eslintrc": { "version": "0.4.3", "dev": true, @@ -27598,6 +27595,19 @@ "version": "0.1.3", "dev": true }, + "@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, "@lezer/common": { "version": "0.15.8" }, @@ -27653,6 +27663,30 @@ "version": "1.1.2", "dev": true }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@types/chai": { "version": "4.2.22", "dev": true @@ -27683,6 +27717,40 @@ "version": "4.7.9", "dev": true }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, "@types/jquery": { "version": "3.5.8", "dev": true, @@ -27786,6 +27854,21 @@ "version": "2.3.3", "dev": true }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, "@typescript-eslint/eslint-plugin": { "version": "4.33.0", "dev": true, @@ -27958,6 +28041,12 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "agent-base": { "version": "6.0.2", "dev": true, @@ -28299,7 +28388,7 @@ "prettier": "^2.4.1", "ts-loader": "^7.0.4", "ts-mocha": "^8.0.0", - "ts-node": "^9.0.0", + "ts-node": "^10.4.0", "typescript": "^4.5.2" }, "dependencies": { @@ -28675,7 +28764,8 @@ "dev": true }, "colorette": { - "version": "1.4.0" + "version": "1.4.0", + "dev": true }, "commander": { "version": "2.20.3", @@ -28766,6 +28856,11 @@ "version": "0.1.4", "dev": true }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, "default-require-extensions": { "version": "3.0.0", "dev": true, @@ -28783,6 +28878,12 @@ "version": "5.0.0", "dev": true }, + "diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "dev": true, @@ -28978,8 +29079,7 @@ "dev": true }, "escape-string-regexp": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" }, "eslint": { "version": "7.32.0", @@ -29490,7 +29590,7 @@ "@codemirror/history": "^0.19.0", "@codemirror/language": "^0.19.5", "@codemirror/lint": "^0.19.3", - "@codemirror/matchbrackets": "^0.19.1", + "@codemirror/matchbrackets": "^0.19.3", "@codemirror/search": "^0.19.2", "@codemirror/state": "^0.19.5", "@codemirror/view": "^0.19.19", @@ -29502,7 +29602,7 @@ "@testing-library/react-hooks": "^7.0.1", "@types/enzyme": "^3.10.10", "@types/flot": "0.0.32", - "@types/jest": "^27.0.1", + "@types/jest": "^27.0.2", "@types/jquery": "^3.5.8", "@types/node": "^16.11.7", "@types/react": "^17.0.35", @@ -29541,7 +29641,7 @@ "react-scripts": "4.0.3", "react-test-renderer": "^17.0.2", "reactstrap": "^8.9.0", - "sanitize-html": "^2.3.3", + "sanitize-html": "^2.5.3", "sass": "1.43.4", "sinon": "^11.1.2", "tempusdominus-bootstrap-4": "^5.1.2", @@ -31228,56 +31328,6 @@ } } }, - "@jest/types": { - "version": "27.1.1", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "@nexucis/fuzzy": { "version": "0.3.0" }, @@ -31546,32 +31596,6 @@ "version": "5.1.2", "dev": true }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.0.1", - "dev": true, - "requires": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, "@types/minimatch": { "version": "3.0.5", "dev": true @@ -31664,17 +31688,6 @@ } } }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "dev": true - }, "@webassemblyjs/ast": { "version": "1.9.0", "dev": true, @@ -33566,9 +33579,6 @@ "regexp.prototype.flags": "^1.2.0" } }, - "deepmerge": { - "version": "4.2.2" - }, "default-gateway": { "version": "4.2.0", "dev": true, @@ -33754,10 +33764,6 @@ } } }, - "diff-sequences": { - "version": "27.0.6", - "dev": true - }, "diffie-hellman": { "version": "5.0.3", "dev": true, @@ -35477,9 +35483,6 @@ "version": "1.1.0", "dev": true }, - "is-plain-object": { - "version": "5.0.0" - }, "is-potential-custom-element-name": { "version": "1.0.1", "dev": true @@ -35938,55 +35941,6 @@ } } }, - "jest-diff": { - "version": "27.2.0", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "jest-docblock": { "version": "26.0.0", "dev": true, @@ -36223,10 +36177,6 @@ "promise-polyfill": "^8.1.3" } }, - "jest-get-type": { - "version": "27.0.6", - "dev": true - }, "jest-haste-map": { "version": "26.6.2", "dev": true, @@ -37838,7 +37788,8 @@ "dev": true }, "klona": { - "version": "2.0.4" + "version": "2.0.4", + "dev": true }, "language-subtag-registry": { "version": "0.3.21", @@ -38198,7 +38149,8 @@ "dev": true }, "nanoid": { - "version": "3.1.25" + "version": "3.1.25", + "dev": true }, "nanomatch": { "version": "1.2.13", @@ -38555,9 +38507,6 @@ "lines-and-columns": "^1.1.6" } }, - "parse-srcset": { - "version": "1.0.2" - }, "parseurl": { "version": "1.3.3", "dev": true @@ -39554,22 +39503,6 @@ "renderkid": "^2.0.4" } }, - "pretty-format": { - "version": "27.2.0", - "dev": true, - "requires": { - "@jest/types": "^27.1.1", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, "process": { "version": "0.11.10", "dev": true @@ -40592,31 +40525,6 @@ } } }, - "sanitize-html": { - "version": "2.5.0", - "requires": { - "deepmerge": "^4.2.2", - "escape-string-regexp": "^4.0.0", - "htmlparser2": "^6.0.0", - "is-plain-object": "^5.0.0", - "klona": "^2.0.3", - "parse-srcset": "^1.0.2", - "postcss": "^8.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0" - }, - "postcss": { - "version": "8.3.6", - "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" - } - } - } - }, "sanitize.css": { "version": "10.0.0", "dev": true @@ -41012,9 +40920,6 @@ "version": "2.0.1", "dev": true }, - "source-map-js": { - "version": "0.6.2" - }, "source-map-resolve": { "version": "0.5.3", "dev": true, @@ -43525,6 +43430,11 @@ "version": "2.1.0", "dev": true }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, "is-regex": { "version": "1.1.4", "requires": { @@ -43667,6 +43577,24 @@ "istanbul-lib-report": "^3.0.0" } }, + "jest-diff": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + } + }, + "jest-get-type": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", + "dev": true + }, "js-tokens": { "version": "4.0.0" }, @@ -44317,6 +44245,11 @@ "callsites": "^3.0.0" } }, + "parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" + }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -44362,6 +44295,11 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "picomatch": { "version": "2.3.0" }, @@ -44372,6 +44310,23 @@ "find-up": "^2.1.0" } }, + "postcss": { + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^0.6.2" + }, + "dependencies": { + "nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==" + } + } + }, "prelude-ls": { "version": "1.2.1", "dev": true @@ -44387,6 +44342,26 @@ "fast-diff": "^1.1.2" } }, + "pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", + "dev": true, + "requires": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "process-nextick-args": { "version": "2.0.1", "dev": true @@ -44608,6 +44583,19 @@ "version": "5.1.2", "dev": true }, + "sanitize-html": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.5.3.tgz", + "integrity": "sha512-DGATXd1fs/Rm287/i5FBKVYSBBUL0iAaztOA1/RFhEs4yqo39/X52i/q/CwsfCUG5cilmXSBmnQmyWfnKhBlOg==", + "requires": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^6.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, "sass": { "version": "1.43.4", "requires": { @@ -44680,6 +44668,11 @@ "version": "0.5.7", "dev": true }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + }, "source-map-support": { "version": "0.5.20", "dev": true, @@ -44981,17 +44974,31 @@ } }, "ts-node": { - "version": "9.1.1", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", "yn": "3.1.1" }, "dependencies": { + "acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true + }, "diff": { "version": "4.0.2", "dev": true diff --git a/web/ui/react-app/package.json b/web/ui/react-app/package.json index fd4f85a6a..794e340b2 100644 --- a/web/ui/react-app/package.json +++ b/web/ui/react-app/package.json @@ -11,7 +11,7 @@ "@codemirror/history": "^0.19.0", "@codemirror/language": "^0.19.5", "@codemirror/lint": "^0.19.3", - "@codemirror/matchbrackets": "^0.19.1", + "@codemirror/matchbrackets": "^0.19.3", "@codemirror/search": "^0.19.2", "@codemirror/state": "^0.19.5", "@codemirror/view": "^0.19.19", @@ -37,7 +37,7 @@ "react-router-dom": "^5.2.1", "react-test-renderer": "^17.0.2", "reactstrap": "^8.9.0", - "sanitize-html": "^2.3.3", + "sanitize-html": "^2.5.3", "sass": "1.43.4", "tempusdominus-bootstrap-4": "^5.1.2", "tempusdominus-core": "^5.0.3" @@ -67,7 +67,7 @@ "@testing-library/react-hooks": "^7.0.1", "@types/enzyme": "^3.10.10", "@types/flot": "0.0.32", - "@types/jest": "^27.0.1", + "@types/jest": "^27.0.2", "@types/jquery": "^3.5.8", "@types/node": "^16.11.7", "@types/react": "^17.0.35",