diff --git a/plugins/alignments/src/CramAdapter/CramAdapter.test.ts b/plugins/alignments/src/CramAdapter/CramAdapter.test.ts index 512e0d92b9..ae53dcff01 100644 --- a/plugins/alignments/src/CramAdapter/CramAdapter.test.ts +++ b/plugins/alignments/src/CramAdapter/CramAdapter.test.ts @@ -20,15 +20,15 @@ const getVolvoxSequenceSubAdapter: getSubAdapterType = async () => { } } -test('adapter can fetch features from volvox-sorted.cram', async () => { - const adapter = new Adapter( +function makeAdapter(arg: string) { + return new Adapter( configSchema.create({ cramLocation: { - localPath: require.resolve('../../test_data/volvox-sorted.cram'), + localPath: require.resolve(arg), locationType: 'LocalPathLocation', }, craiLocation: { - localPath: require.resolve('../../test_data/volvox-sorted.cram.crai'), + localPath: require.resolve(arg + '.crai'), locationType: 'LocalPathLocation', }, sequenceAdapter: {}, @@ -36,6 +36,10 @@ test('adapter can fetch features from volvox-sorted.cram', async () => { getVolvoxSequenceSubAdapter, pluginManager, ) +} + +test('adapter can fetch features from volvox-sorted.cram', async () => { + const adapter = makeAdapter('../../test_data/volvox-sorted.cram') const features = adapter.getFeatures({ assemblyName: 'volvox', @@ -57,22 +61,7 @@ test('adapter can fetch features from volvox-sorted.cram', async () => { }) test('test usage of cramSlightlyLazyFeature toJSON (used in the widget)', async () => { - const adapter = new Adapter( - configSchema.create({ - cramLocation: { - localPath: require.resolve('../../test_data/volvox-sorted.cram'), - locationType: 'LocalPathLocation', - }, - craiLocation: { - localPath: require.resolve('../../test_data/volvox-sorted.cram.crai'), - locationType: 'LocalPathLocation', - }, - sequenceAdapter: {}, - }), - getVolvoxSequenceSubAdapter, - pluginManager, - ) - + const adapter = makeAdapter('../../test_data/volvox-sorted.cram') const features = adapter.getFeatures({ assemblyName: 'volvox', refName: 'ctgA', diff --git a/plugins/bed/src/BedGraphAdapter/BedGraphAdapter.test.ts b/plugins/bed/src/BedGraphAdapter/BedGraphAdapter.test.ts new file mode 100644 index 0000000000..e90447057e --- /dev/null +++ b/plugins/bed/src/BedGraphAdapter/BedGraphAdapter.test.ts @@ -0,0 +1,32 @@ +import { firstValueFrom } from 'rxjs' +import { toArray } from 'rxjs/operators' + +import BedGraphAdapter from './BedGraphAdapter' +import configSchema from './configSchema' + +function makeAdapter() { + return new BedGraphAdapter( + configSchema.create({ + bedGraphLocation: { + localPath: require.resolve('./test_data/test.bg'), + locationType: 'LocalPathLocation', + }, + }), + ) +} +test('basic', async () => { + const adapter = makeAdapter() + + const features = await firstValueFrom( + adapter + .getFeatures({ + assemblyName: 'volvox', + refName: 'chr1', + start: 0, + end: 10000, + }) + .pipe(toArray()), + ) + + expect(features).toMatchSnapshot() +}) diff --git a/plugins/bed/src/BedGraphAdapter/__snapshots__/BedGraphAdapter.test.ts.snap b/plugins/bed/src/BedGraphAdapter/__snapshots__/BedGraphAdapter.test.ts.snap new file mode 100644 index 0000000000..17582b455f --- /dev/null +++ b/plugins/bed/src/BedGraphAdapter/__snapshots__/BedGraphAdapter.test.ts.snap @@ -0,0 +1,30 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`basic 1`] = ` +[ + { + "end": 200, + "refName": "chr1", + "score": 4, + "source": "col0", + "start": 100, + "uniqueId": "test-chr1-0-0", + }, + { + "end": 300, + "refName": "chr1", + "score": 5, + "source": "col0", + "start": 200, + "uniqueId": "test-chr1-1-0", + }, + { + "end": 400, + "refName": "chr1", + "score": 6, + "source": "col0", + "start": 300, + "uniqueId": "test-chr1-2-0", + }, +] +`; diff --git a/plugins/bed/src/BedGraphAdapter/test_data/test.bg b/plugins/bed/src/BedGraphAdapter/test_data/test.bg new file mode 100644 index 0000000000..6a2a0cfd48 --- /dev/null +++ b/plugins/bed/src/BedGraphAdapter/test_data/test.bg @@ -0,0 +1,3 @@ +chr1 100 200 4 +chr1 200 300 5 +chr1 300 400 6 diff --git a/plugins/bed/src/BedGraphTabixAdapter/BedGraphTabixAdapter.test.ts b/plugins/bed/src/BedGraphTabixAdapter/BedGraphTabixAdapter.test.ts new file mode 100644 index 0000000000..b41c56530c --- /dev/null +++ b/plugins/bed/src/BedGraphTabixAdapter/BedGraphTabixAdapter.test.ts @@ -0,0 +1,38 @@ +import { firstValueFrom } from 'rxjs' +import { toArray } from 'rxjs/operators' + +import BedGraphTabixAdapter from './BedGraphTabixAdapter' +import configSchema from './configSchema' + +function makeAdapter() { + return new BedGraphTabixAdapter( + configSchema.create({ + bedGraphGzLocation: { + localPath: require.resolve('./test_data/test.bg.gz'), + locationType: 'LocalPathLocation', + }, + index: { + location: { + localPath: require.resolve('./test_data/test.bg.gz.tbi'), + locationType: 'LocalPathLocation', + }, + }, + }), + ) +} +test('basic', async () => { + const adapter = makeAdapter() + + const features = await firstValueFrom( + adapter + .getFeatures({ + assemblyName: 'volvox', + refName: 'chr1', + start: 0, + end: 10000, + }) + .pipe(toArray()), + ) + + expect(features).toMatchSnapshot() +}) diff --git a/plugins/bed/src/BedGraphTabixAdapter/BedGraphTabixAdapter.ts b/plugins/bed/src/BedGraphTabixAdapter/BedGraphTabixAdapter.ts index 20ab411f94..426bded589 100644 --- a/plugins/bed/src/BedGraphTabixAdapter/BedGraphTabixAdapter.ts +++ b/plugins/bed/src/BedGraphTabixAdapter/BedGraphTabixAdapter.ts @@ -95,6 +95,12 @@ export default class BedGraphAdapter extends BaseFeatureDataAdapter { const start = +cols[colStart]! const end = +(same ? start + 1 : cols[colEnd]!) const rest = cols.slice(colEnd + 1) + if (Number.isNaN(start) || Number.isNaN(end)) { + throw new Error( + `start/end NaN on line "${line}", with colStart:${colStart} and colEnd:${colEnd}. run "tabix -p bed" to ensure bed preset`, + ) + } + for (let j = 0; j < rest.length; j++) { const uniqueId = `${this.id}-${fileOffset}-${j}` const score = Math.abs(+rest[j]!) diff --git a/plugins/bed/src/BedGraphTabixAdapter/__snapshots__/BedGraphTabixAdapter.test.ts.snap b/plugins/bed/src/BedGraphTabixAdapter/__snapshots__/BedGraphTabixAdapter.test.ts.snap new file mode 100644 index 0000000000..dede1d111c --- /dev/null +++ b/plugins/bed/src/BedGraphTabixAdapter/__snapshots__/BedGraphTabixAdapter.test.ts.snap @@ -0,0 +1,30 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`basic 1`] = ` +[ + { + "end": 200, + "refName": "chr1", + "score": 4, + "source": "col0", + "start": 100, + "uniqueId": "test-14548-0", + }, + { + "end": 300, + "refName": "chr1", + "score": 5, + "source": "col0", + "start": 200, + "uniqueId": "test-14563-0", + }, + { + "end": 400, + "refName": "chr1", + "score": 6, + "source": "col0", + "start": 300, + "uniqueId": "test-14578-0", + }, +] +`; diff --git a/plugins/bed/src/BedGraphTabixAdapter/test_data/test.bg.gz b/plugins/bed/src/BedGraphTabixAdapter/test_data/test.bg.gz new file mode 100644 index 0000000000..565473ecb9 Binary files /dev/null and b/plugins/bed/src/BedGraphTabixAdapter/test_data/test.bg.gz differ diff --git a/plugins/bed/src/BedGraphTabixAdapter/test_data/test.bg.gz.tbi b/plugins/bed/src/BedGraphTabixAdapter/test_data/test.bg.gz.tbi new file mode 100644 index 0000000000..fff7f3733b Binary files /dev/null and b/plugins/bed/src/BedGraphTabixAdapter/test_data/test.bg.gz.tbi differ diff --git a/plugins/bed/src/BedTabixAdapter/BedTabixAdapter.test.ts b/plugins/bed/src/BedTabixAdapter/BedTabixAdapter.test.ts index b98ad01637..eb175ab543 100644 --- a/plugins/bed/src/BedTabixAdapter/BedTabixAdapter.test.ts +++ b/plugins/bed/src/BedTabixAdapter/BedTabixAdapter.test.ts @@ -4,22 +4,26 @@ import { toArray } from 'rxjs/operators' import BedTabixAdapter from './BedTabixAdapter' import MyConfigSchema from './configSchema' -test('adapter can fetch features from volvox-bed12.bed.gz', async () => { - const adapter = new BedTabixAdapter( +function makeAdapter(f: string, extra?: Record) { + return new BedTabixAdapter( MyConfigSchema.create({ bedGzLocation: { - localPath: require.resolve('./test_data/volvox-bed12.bed.gz'), + localPath: require.resolve(f), locationType: 'LocalPathLocation', }, index: { location: { - localPath: require.resolve('./test_data/volvox-bed12.bed.gz.tbi'), + localPath: require.resolve(`${f}.tbi`), locationType: 'LocalPathLocation', }, }, + ...extra, }), ) +} +test('adapter can fetch features from volvox-bed12.bed.gz', async () => { + const adapter = makeAdapter('./test_data/volvox-bed12.bed.gz') const features = adapter.getFeatures({ refName: 'ctgA', start: 0, @@ -35,21 +39,7 @@ test('adapter can fetch features from volvox-bed12.bed.gz', async () => { }) test('adapter can fetch features from volvox.sort.bed.gz simple bed3', async () => { - const adapter = new BedTabixAdapter( - MyConfigSchema.create({ - bedGzLocation: { - localPath: require.resolve('./test_data/volvox.sort.bed.gz'), - locationType: 'LocalPathLocation', - }, - index: { - location: { - localPath: require.resolve('./test_data/volvox.sort.bed.gz.tbi'), - locationType: 'LocalPathLocation', - }, - }, - }), - ) - + const adapter = makeAdapter('./test_data/volvox.sort.bed.gz') const features = adapter.getFeatures({ refName: 'contigA', start: 0, @@ -65,19 +55,8 @@ test('adapter can fetch features from volvox.sort.bed.gz simple bed3', async () }) test('adapter can fetch features bed with autosql', async () => { - const adapter = new BedTabixAdapter( - MyConfigSchema.create({ - bedGzLocation: { - localPath: require.resolve('./test_data/volvox-autosql.bed.gz'), - locationType: 'LocalPathLocation', - }, - index: { - location: { - localPath: require.resolve('./test_data/volvox-autosql.bed.gz.tbi'), - locationType: 'LocalPathLocation', - }, - }, - autoSql: `table gdcCancer + const adapter = makeAdapter('./test_data/volvox-autosql.bed.gz', { + autoSql: `table gdcCancer "somatic variants converted from MAF files obtained through the NCI GDC" ( string chrom; "Chromosome (or contig, scaffold, etc.)" @@ -118,8 +97,7 @@ test('adapter can fetch features bed with autosql', async () => { lstring Matched_Norm_Sample_Barcode; "Matcheds normal sample barcode" lstring case_id; "Case ID number" )`, - }), - ) + }) const features = adapter.getFeatures({ refName: 'ctgA', start: 0, @@ -135,25 +113,7 @@ test('adapter can fetch features bed with autosql', async () => { }) test('adapter can fetch bed with header', async () => { - const adapter = new BedTabixAdapter( - MyConfigSchema.create({ - bedGzLocation: { - localPath: require.resolve( - './test_data/volvox.sort.with.header.bed.gz', - ), - locationType: 'LocalPathLocation', - }, - index: { - location: { - localPath: require.resolve( - './test_data/volvox.sort.with.header.bed.gz.tbi', - ), - locationType: 'LocalPathLocation', - }, - }, - }), - ) - + const adapter = makeAdapter('./test_data/volvox.sort.with.header.bed.gz') const features = adapter.getFeatures({ refName: 'contigA', start: 0, @@ -169,21 +129,7 @@ test('adapter can fetch bed with header', async () => { }) test('adapter can use gwas header', async () => { - const adapter = new BedTabixAdapter( - MyConfigSchema.create({ - bedGzLocation: { - localPath: require.resolve('./test_data/gwas.bed.gz'), - locationType: 'LocalPathLocation', - }, - index: { - location: { - localPath: require.resolve('./test_data/gwas.bed.gz.tbi'), - locationType: 'LocalPathLocation', - }, - }, - }), - ) - + const adapter = makeAdapter('./test_data/gwas.bed.gz') const features = adapter.getFeatures({ refName: '1', start: 0, diff --git a/plugins/bed/src/BedpeAdapter/BedpeAdapter.test.ts b/plugins/bed/src/BedpeAdapter/BedpeAdapter.test.ts new file mode 100644 index 0000000000..426855b6a7 --- /dev/null +++ b/plugins/bed/src/BedpeAdapter/BedpeAdapter.test.ts @@ -0,0 +1,107 @@ +import { firstValueFrom } from 'rxjs' +import { toArray } from 'rxjs/operators' + +import BedpeAdapter from './BedpeAdapter' +import configSchema from './configSchema' + +function makeAdapter() { + return new BedpeAdapter( + configSchema.create({ + bedpeLocation: { + localPath: require.resolve('./test_data/test.bedpe'), + locationType: 'LocalPathLocation', + }, + }), + ) +} +test('basic', async () => { + const adapter = makeAdapter() + + const features = await firstValueFrom( + adapter + .getFeatures({ + assemblyName: 'volvox', + refName: 'chr1', + start: 0, + end: 10000, + }) + .pipe(toArray()), + ) + + expect(features).toHaveLength(3) // 2 primary features + 1 mate on chr1 + + const firstFeature = features[0]! + expect(firstFeature.get('refName')).toBe('chr1') + expect(firstFeature.get('start')).toBe(1000) + expect(firstFeature.get('end')).toBe(2000) + expect(firstFeature.get('mate')).toEqual({ + refName: 'chr2', + start: 3000, + end: 4000, + strand: -1, + }) + expect(firstFeature.get('ALT')).toEqual(['']) +}) + +test('gets correct reference sequence names', async () => { + const adapter = makeAdapter() + const refNames = await adapter.getRefNames() + expect(refNames).toEqual(['chr1', 'chr2', 'chr3']) +}) + +test('parses header correctly', async () => { + const adapter = makeAdapter() + const header = await adapter.getHeader() + expect(header).toBe('#header line 1\n#header line 2') +}) + +test('handles features with different strands correctly', async () => { + const adapter = makeAdapter() + const features = await firstValueFrom( + adapter + .getFeatures({ + assemblyName: 'volvox', + refName: 'chr1', + start: 4000, + end: 7000, + }) + .pipe(toArray()), + ) + + const feature = features.find(f => f.get('name') === 'SV2') + expect(feature?.get('strand')).toBe(1) // + + expect(feature?.get('mate').strand).toBe(1) // + +}) + +test('handles different SV types correctly', async () => { + const adapter = makeAdapter() + const features = await firstValueFrom( + adapter + .getFeatures({ + assemblyName: 'volvox', + refName: 'chr2', + start: 0, + end: 3000, + }) + .pipe(toArray()), + ) + + const feature = features.find(f => f.get('name') === 'SV3') + expect(feature?.get('ALT')).toEqual(['']) + expect(feature?.get('score')).toBe(70) +}) + +test('returns empty array for non-existent reference', async () => { + const adapter = makeAdapter() + const features = await firstValueFrom( + adapter + .getFeatures({ + assemblyName: 'volvox', + refName: 'chrX', + start: 0, + end: 1000, + }) + .pipe(toArray()), + ) + expect(features).toHaveLength(0) +}) diff --git a/plugins/bed/src/BedpeAdapter/BedpeAdapter.ts b/plugins/bed/src/BedpeAdapter/BedpeAdapter.ts index 2d69339869..42ffd71c89 100644 --- a/plugins/bed/src/BedpeAdapter/BedpeAdapter.ts +++ b/plugins/bed/src/BedpeAdapter/BedpeAdapter.ts @@ -55,14 +55,13 @@ export function featureData( function parseStrand(strand: string) { if (strand === '+') { return 1 - } - if (strand === '-') { + } else if (strand === '-') { return -1 - } - if (strand === '.') { + } else if (strand === '.') { return 0 + } else { + return undefined } - return undefined } export default class BedpeAdapter extends BaseFeatureDataAdapter { diff --git a/plugins/bed/src/BedpeAdapter/test_data/test.bedpe b/plugins/bed/src/BedpeAdapter/test_data/test.bedpe new file mode 100644 index 0000000000..158f366c6f --- /dev/null +++ b/plugins/bed/src/BedpeAdapter/test_data/test.bedpe @@ -0,0 +1,5 @@ +#header line 1 +#header line 2 +chr1 1000 2000 chr2 3000 4000 SV1 60 + - DUP +chr1 5000 6000 chr1 8000 9000 SV2 80 + + INV +chr2 1500 2500 chr3 3500 4500 SV3 70 - + TRA diff --git a/plugins/bed/src/index.ts b/plugins/bed/src/index.ts index cb5781d1e7..87223afe4b 100644 --- a/plugins/bed/src/index.ts +++ b/plugins/bed/src/index.ts @@ -113,16 +113,38 @@ export default class BedPlugin extends Plugin { index?: FileLocation, adapterHint?: string, ) => { - const regexGuess = /\.bed$/i - const adapterName = 'BedAdapter' const fileName = getFileName(file) - if (regexGuess.test(fileName) || adapterHint === adapterName) { + const indexFileName = index ? getFileName(index) : undefined + if (/\.bed$/i.test(fileName) || adapterHint === 'BedAdapter') { return { - type: adapterName, + type: 'BedAdapter', bedLocation: file, } + } else if ( + /\.bg$/i.test(fileName) || + /\.bedgraph$/i.test(fileName) || + adapterHint === 'BedGraphAdapter' + ) { + return { + type: 'BedGraphAdapter', + bedGraphLocation: file, + } + } else if ( + /\.bg.gz$/i.test(fileName) || + /\.bedgraph.gz$/i.test(fileName) || + adapterHint === 'BedGraphTabixAdapter' + ) { + return { + type: 'BedGraphTabixAdapter', + bedGraphGzLocation: file, + index: { + location: index, + indexType: indexFileName?.endsWith('.csi') ? 'CSI' : 'TBI', + }, + } + } else { + return adapterGuesser(file, index, adapterHint) } - return adapterGuesser(file, index, adapterHint) } }, ) diff --git a/yarn.lock b/yarn.lock index 5126ed21b3..91b31d63c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -148,9 +148,9 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.722.0": - version "3.732.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.732.0.tgz#936e8f0ce66cde332195cc77542c0ea01cae25a9" - integrity sha512-ITPcG40qdiLXZRvNQ8V3u4yB16afcdIabdRBN6Blba31rk0MfeBGWwah0+lLSTFo1ZIrIQvBl6PAQ7mO0mkKLg== + version "3.733.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.733.0.tgz#aec3c5b461c9bab1e9f8ee8c660785c3bb56ce1e" + integrity sha512-LmAbtNxrgbtB+YVt/HPPyKBgJWrvHOv5yNn98Ndlwm1mBgvI1N7+HQlI5ZWIKBCkwJtLtdS8ZVHzPtqnyWO+YA== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" @@ -164,11 +164,11 @@ "@aws-sdk/middleware-location-constraint" "3.731.0" "@aws-sdk/middleware-logger" "3.731.0" "@aws-sdk/middleware-recursion-detection" "3.731.0" - "@aws-sdk/middleware-sdk-s3" "3.731.0" + "@aws-sdk/middleware-sdk-s3" "3.733.0" "@aws-sdk/middleware-ssec" "3.731.0" "@aws-sdk/middleware-user-agent" "3.731.0" "@aws-sdk/region-config-resolver" "3.731.0" - "@aws-sdk/signature-v4-multi-region" "3.731.0" + "@aws-sdk/signature-v4-multi-region" "3.733.0" "@aws-sdk/types" "3.731.0" "@aws-sdk/util-endpoints" "3.731.0" "@aws-sdk/util-user-agent-browser" "3.731.0" @@ -452,10 +452,10 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.731.0": - version "3.731.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.731.0.tgz#b8830d6362602f0225cf8759359beabfa8d8e89c" - integrity sha512-J9aKyQaVoec5eWTSDfO4h2sKHNP0wTzN15LFcHnkD+e/d0rdmOi7BTkkbJrIaynma9WShIasmrtM3HNi9GiiTA== +"@aws-sdk/middleware-sdk-s3@3.733.0": + version "3.733.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.733.0.tgz#6f92ecc75205b0b487ef451cdaacf7ba86b81270" + integrity sha512-XX/sP61LugQZck6W8WQJpYQEeW/h7t0qgxfZEv9Qk9fWBxxdcR1j4zkmSD3Da5vgnBl8dJ3wdmI2k96qw6ONkQ== dependencies: "@aws-sdk/core" "3.731.0" "@aws-sdk/types" "3.731.0" @@ -550,12 +550,12 @@ "@smithy/util-middleware" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.731.0": - version "3.731.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.731.0.tgz#a6b347ce682cf0812caa2fd50cf58b2f3c02c286" - integrity sha512-1r/b4Os15dR+BCVRRLVQJMF7Krq6xX6IKHxN43kuvODYWz8Nv3XDlaSpeRpAzyJuzW/fTp4JgE+z0+gmJfdEeA== +"@aws-sdk/signature-v4-multi-region@3.733.0": + version "3.733.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.733.0.tgz#c9dd0187d2d52d420e5f8c40b7fdc7fbaf960845" + integrity sha512-gdN59yEDHSoEZqUJF4vnTl1OoiTfa8fyBWTbu4Ri1cYE20cFvoePHdz+eG6ipe7VZNwKf8j/ZQeOgO40jNbZKQ== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.731.0" + "@aws-sdk/middleware-sdk-s3" "3.733.0" "@aws-sdk/types" "3.731.0" "@smithy/protocol-http" "^5.0.0" "@smithy/signature-v4" "^5.0.0" @@ -3086,9 +3086,9 @@ "@tybys/wasm-util" "^0.9.0" "@node-oauth/express-oauth-server@^4.0.0": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@node-oauth/express-oauth-server/-/express-oauth-server-4.1.1.tgz#99a2cda2328c081af604cb9de961d03703fec433" - integrity sha512-Ps6UFV7XAfggYvRpveoT3t3h4dluy9wViEgkSU1kBcTOhllpBNIKrlsHTC+hBd1PT/+SC7vzpIXd2uFrmwF8Vg== + version "4.1.2" + resolved "https://registry.yarnpkg.com/@node-oauth/express-oauth-server/-/express-oauth-server-4.1.2.tgz#7c2ba23c35af64236fe59b399cd468072985f7ad" + integrity sha512-/CWMOLx270X6Im5/a3toGUqt4JmPFiSQiMZpCD7CVjimaL3omZUZUQtzUgjIsPYqV+KF4it8tuzi8Xnjl094iA== dependencies: "@node-oauth/oauth2-server" "^5.2.0" @@ -4377,9 +4377,9 @@ integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== "@storybook/icons@^1.2.12": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.3.0.tgz#a5c1460fb15a7260e0b638ab86163f7347a0061e" - integrity sha512-Nz/UzeYQdUZUhacrPyfkiiysSjydyjgg/p0P9HxB4p/WaJUUjMAcaoaLgy3EXx61zZJ3iD36WPuDkZs5QYrA0A== + version "1.3.1" + resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.3.1.tgz#38824f388a3313f687ee80439cd8aa8ab9a02f41" + integrity sha512-tgiD2v9v/4sjGOliemoP/8bUe4+ZFpehcqdCVQcPiGZfV0kSBv34Ge+MafeKqM7SLwvGesrbOEOakaogSqGxiQ== "@storybook/manager-api@8.5.0": version "8.5.0"