From 4c129f23990fcdbeb99130669c8d3cecf502a9a5 Mon Sep 17 00:00:00 2001 From: andresgutgon Date: Wed, 19 Jun 2024 10:02:13 +0200 Subject: [PATCH] Some adjustments for Storage Driver and SourceManager to run on a nodejs server We want to use some methods from these 2 packages in our Latitude cloud and we have to make it work --- .changeset/wet-bikes-check.md | 6 ++ apps/server/scripts.rollup.config.mjs | 11 ++- .../scripts/materialize_queries/index.ts | 4 +- apps/server/src/lib/server/storageDriver.ts | 15 ++-- apps/server/vite.config.ts | 9 ++- packages/cli/display_table/rollup.config.mjs | 1 + packages/source_manager/rollup.config.mjs | 1 + packages/source_manager/src/index.ts | 1 + packages/source_manager/src/manager/index.ts | 5 +- .../source_manager/src/source/readConfig.ts | 16 ++--- packages/source_manager/src/types.ts | 2 +- .../source_manager/src/utils/index.test.ts | 54 ++++++++++++++ packages/source_manager/src/utils/index.ts | 31 ++++++++ packages/storage_driver/rollup.config.mjs | 3 + packages/storage_driver/src/drivers/base.ts | 8 ++- .../storage_driver/src/drivers/disk/index.ts | 3 +- .../storage_driver/src/drivers/s3/index.ts | 3 +- pnpm-lock.yaml | 71 ++++++++++++------- 18 files changed, 189 insertions(+), 55 deletions(-) create mode 100644 .changeset/wet-bikes-check.md create mode 100644 packages/source_manager/src/utils/index.test.ts create mode 100644 packages/source_manager/src/utils/index.ts diff --git a/.changeset/wet-bikes-check.md b/.changeset/wet-bikes-check.md new file mode 100644 index 000000000..c90e1ad04 --- /dev/null +++ b/.changeset/wet-bikes-check.md @@ -0,0 +1,6 @@ +--- +"@latitude-data/source-manager": patch +"@latitude-data/storage-driver": patch +--- + +Dry resolve secrets helper function diff --git a/apps/server/scripts.rollup.config.mjs b/apps/server/scripts.rollup.config.mjs index ee6c5199c..1e9ed406b 100644 --- a/apps/server/scripts.rollup.config.mjs +++ b/apps/server/scripts.rollup.config.mjs @@ -13,7 +13,13 @@ const materializeScript = { format: 'esm', sourcemap: true, }, - external: ['fs', 'ora', '@latitude-data/source-manager', 'node:util'], + external: [ + 'fs', + 'ora', + '@latitude-data/storage-driver', + '@latitude-data/source-manager', + 'node:util', + ], ...common, } @@ -25,11 +31,12 @@ const runScript = { sourcemap: true, }, external: [ - '@latitude-data/display_table', 'node:util', 'path', '@latitude-data/source-manager', + '@latitude-data/storage-driver', '@latitude-data/custom_types', + '@latitude-data/display_table', 'fs', ], ...common, diff --git a/apps/server/scripts/materialize_queries/index.ts b/apps/server/scripts/materialize_queries/index.ts index 38e48959d..122073de2 100644 --- a/apps/server/scripts/materialize_queries/index.ts +++ b/apps/server/scripts/materialize_queries/index.ts @@ -1,4 +1,5 @@ import { + FailedMaterializationInfo, findAndMaterializeQueries, MaterializationInfo, } from '@latitude-data/source-manager' @@ -113,7 +114,8 @@ function successMaterializationToTable( function failedMaterializationToTable(materializations: MaterializationInfo[]) { const table = materializations .filter((info) => info.cached === false && info.success === false) - .map((info) => { + .map((i) => { + const info = i as FailedMaterializationInfo return { queryPath: info.queryPath, error: info.error.message, diff --git a/apps/server/src/lib/server/storageDriver.ts b/apps/server/src/lib/server/storageDriver.ts index 4144f04fa..468d9ec25 100644 --- a/apps/server/src/lib/server/storageDriver.ts +++ b/apps/server/src/lib/server/storageDriver.ts @@ -5,6 +5,7 @@ import { StorageType, getStorageDriver, } from '@latitude-data/storage-driver' +import { resolveSecrets } from '@latitude-data/source-manager' const DEFAULT_STORAGE_CONFIG = { type: StorageType.disk, @@ -17,14 +18,12 @@ function readStorageConfig(): StorageDriverConfig { } const file = fs.readFileSync(APP_CONFIG_PATH, 'utf8') - try { - const latitudeJson = JSON.parse(file) - const storageConfig = latitudeJson?.storage ?? {} - if (!storageConfig.type) return DEFAULT_STORAGE_CONFIG - return storageConfig - } catch (e) { - return DEFAULT_STORAGE_CONFIG - } + const latitudeJson = resolveSecrets({ unresolvedSecrets: JSON.parse(file) }) + const storageConfig = latitudeJson?.storage + + if (!storageConfig) return DEFAULT_STORAGE_CONFIG + + return storageConfig } const storageDriver = getStorageDriver(readStorageConfig()) diff --git a/apps/server/vite.config.ts b/apps/server/vite.config.ts index 05c0aabc5..2491b0ce7 100644 --- a/apps/server/vite.config.ts +++ b/apps/server/vite.config.ts @@ -47,7 +47,14 @@ export default defineConfig({ }, build: { rollupOptions: { - external: ['@latitude-data/source-manager', 'path', 'child_process'], + external: [ + 'path', + 'child_process', + '@latitude-data/source-manager', + '@latitude-data/storage-driver', + '@latitude-data/display_table', + '@latitude-data/custome_types', + ], }, }, }) diff --git a/packages/cli/display_table/rollup.config.mjs b/packages/cli/display_table/rollup.config.mjs index a27997fb9..8ad994a90 100644 --- a/packages/cli/display_table/rollup.config.mjs +++ b/packages/cli/display_table/rollup.config.mjs @@ -17,6 +17,7 @@ export default { external: [ 'react', 'ink', + 'v8', 'ink-spinner', 'chokidar', '@latitude-data/source-manager', diff --git a/packages/source_manager/rollup.config.mjs b/packages/source_manager/rollup.config.mjs index 2deb0542e..bd1066746 100644 --- a/packages/source_manager/rollup.config.mjs +++ b/packages/source_manager/rollup.config.mjs @@ -26,6 +26,7 @@ export default [ 'fs', 'path', 'crypto', + 'stream', 'uuid', 'dotenv/config', '@latitude-data/sql-compiler', diff --git a/packages/source_manager/src/index.ts b/packages/source_manager/src/index.ts index 4cdb78aa9..22f44e0c3 100644 --- a/packages/source_manager/src/index.ts +++ b/packages/source_manager/src/index.ts @@ -2,6 +2,7 @@ export * from './types' export { default as SourceManager } from './manager' export * from './source' export * from './baseConnector' +export * from './utils' export { CONNECTOR_PACKAGES } from './baseConnector/connectorFactory' export { default as TestConnectorInternal } from './testConnector' export { diff --git a/packages/source_manager/src/manager/index.ts b/packages/source_manager/src/manager/index.ts index 4aca9d89d..355a14690 100644 --- a/packages/source_manager/src/manager/index.ts +++ b/packages/source_manager/src/manager/index.ts @@ -19,6 +19,7 @@ import { createHash } from 'crypto' import { ParquetWriter } from '@dsnp/parquetjs' import { WriteStreamMinimal } from '@dsnp/parquetjs/dist/lib/util' import { buildParquetSchema } from './parquetUtils' +import { Writable } from 'stream' const MATERIALIZED_DIR_IN_STORAGE = 'materialized' @@ -201,7 +202,9 @@ export default class SourceManager { const startTime = performance.now() const compiled = await source.compileQuery({ queryPath, params: {} }) - const stream = await this.materializedStorage.createWriteStream(filename) + const stream = (await this.materializedStorage.createWriteStream( + filename, + )) as Writable let writer: ParquetWriter const ROW_GROUP_SIZE = 4096 // How many rows are in the ParquetWriter file buffer at a time diff --git a/packages/source_manager/src/source/readConfig.ts b/packages/source_manager/src/source/readConfig.ts index 07c6e43fd..ba22a48bc 100644 --- a/packages/source_manager/src/source/readConfig.ts +++ b/packages/source_manager/src/source/readConfig.ts @@ -1,6 +1,7 @@ import fs from 'fs' import yaml from 'yaml' import { SourceSchema, SourceFileNotFoundError } from '@/types' +import { resolveSecrets } from '@/utils' export class InvalidSourceConfigError extends Error { constructor(message: string) { @@ -15,18 +16,9 @@ export default function readSourceConfig(sourcePath: string): SourceSchema { } const file = fs.readFileSync(sourcePath, 'utf8') - const config = yaml.parse(file, (_, value) => { - // if key starts with 'LATITUDE__', replace it with the environment variable - if (typeof value === 'string' && value.startsWith('LATITUDE__')) { - if (process.env[value]) return process.env[value] - - throw new Error(` - Invalid configuration. Environment variable ${value} was not found in the environment. You can review how to set up secret source credentials in the documentation: https://docs.latitude.so/sources/credentials - `) - } else { - return value - } - }) + const config = resolveSecrets({ + unresolvedSecrets: yaml.parse(file), + }) as unknown as SourceSchema // Validation requirements if (!config?.type) { diff --git a/packages/source_manager/src/types.ts b/packages/source_manager/src/types.ts index 46e6959e6..68ebff4e6 100644 --- a/packages/source_manager/src/types.ts +++ b/packages/source_manager/src/types.ts @@ -112,7 +112,7 @@ interface SuccessMaterializationInfo extends IMissMaterializationInfo { time: number } -interface FailedMaterializationInfo extends IMissMaterializationInfo { +export interface FailedMaterializationInfo extends IMissMaterializationInfo { cached: false success: false error: Error diff --git a/packages/source_manager/src/utils/index.test.ts b/packages/source_manager/src/utils/index.test.ts new file mode 100644 index 000000000..4bf3208e6 --- /dev/null +++ b/packages/source_manager/src/utils/index.test.ts @@ -0,0 +1,54 @@ +import { describe, expect, it } from 'vitest' +import { resolveSecrets } from './index' + +describe('resolveSecrets', () => { + it('should resolve secrets', () => { + const config = { + secret1: 'LATITUDE__SECRET1', + secret2: 'LATITUDE__SECRET2', + } + + // eslint-disable-next-line turbo/no-undeclared-env-vars + process.env['LATITUDE__SECRET1'] = 'supersecret1' + // eslint-disable-next-line turbo/no-undeclared-env-vars + process.env['LATITUDE__SECRET2'] = 'supersecret2' + + const resolvedSecrets = resolveSecrets({ unresolvedSecrets: config }) + + expect(resolvedSecrets.secret1).toBe('supersecret1') + expect(resolvedSecrets.secret2).toBe('supersecret2') + }) + + it('should resolve nested secrets', () => { + const config = { + secret: { + secret: 'LATITUDE__SECRET1', + notASecret: 33, + }, + } + // eslint-disable-next-line turbo/no-undeclared-env-vars + process.env['LATITUDE__SECRET1'] = 'supersecret1' + const resolvedSecrets = resolveSecrets({ unresolvedSecrets: config }) + const firstLevel = resolvedSecrets.secret as { + secret: string + notASecret: number + } + + expect(firstLevel.secret).toBe('supersecret1') + expect(firstLevel.notASecret).toBe(33) + }) + + it('should throw error when environment variable is not found', () => { + const config = { + secret3: 'LATITUDE__SECRET3', + } + + expect(() => { + resolveSecrets({ unresolvedSecrets: config }) + }).toThrowError( + new Error( + `Invalid configuration. Environment variable LATITUDE__SECRET3 was not found in the environment.`, + ), + ) + }) +}) diff --git a/packages/source_manager/src/utils/index.ts b/packages/source_manager/src/utils/index.ts new file mode 100644 index 000000000..76c22e74c --- /dev/null +++ b/packages/source_manager/src/utils/index.ts @@ -0,0 +1,31 @@ +export function resolveSecrets({ + unresolvedSecrets, +}: { + unresolvedSecrets: Record +}) { + return Object.entries(unresolvedSecrets).reduce( + (acc, [key, value]) => { + if (typeof value === 'object') { + acc[key] = resolveSecrets({ + unresolvedSecrets: value as Record, + }) + return acc + } + + if (typeof value === 'string' && value.startsWith('LATITUDE__')) { + if (process.env[value]) { + acc[key] = process.env[value] + return acc + } + + throw new Error( + `Invalid configuration. Environment variable ${value} was not found in the environment.`, + ) + } + + acc[key] = value + return acc + }, + {} as Record, + ) +} diff --git a/packages/storage_driver/rollup.config.mjs b/packages/storage_driver/rollup.config.mjs index 531bda708..d0fb946c8 100644 --- a/packages/storage_driver/rollup.config.mjs +++ b/packages/storage_driver/rollup.config.mjs @@ -15,6 +15,9 @@ export default { ], external: [ 'fs', + '@aws-sdk/client-s3', + '@aws-sdk/lib-storage', + 'stream', 'path', ], } diff --git a/packages/storage_driver/src/drivers/base.ts b/packages/storage_driver/src/drivers/base.ts index 3e8dac84f..22f9492e2 100644 --- a/packages/storage_driver/src/drivers/base.ts +++ b/packages/storage_driver/src/drivers/base.ts @@ -1,9 +1,15 @@ -import { FileStat } from '$/types' +import { FileStat, StorageType } from '$/types' import { Writable } from 'stream' export abstract class StorageDriver { constructor() {} + public abstract type: StorageType + + get isS3Driver(): boolean { + return this.type === StorageType.s3 + } + abstract resolveUrl(path: string): Promise abstract listFiles(path: string, recursive: boolean): Promise diff --git a/packages/storage_driver/src/drivers/disk/index.ts b/packages/storage_driver/src/drivers/disk/index.ts index d91a56e66..6c93e1ad7 100644 --- a/packages/storage_driver/src/drivers/disk/index.ts +++ b/packages/storage_driver/src/drivers/disk/index.ts @@ -1,4 +1,4 @@ -import { FileStat } from '$/types' +import { FileStat, StorageType } from '$/types' import { StorageDriver } from '$/drivers/base' import fs from 'fs' import path from 'path' @@ -9,6 +9,7 @@ export type DiskDriverConfig = { } export class DiskDriver extends StorageDriver { + public type = StorageType.disk private root: string constructor(config: DiskDriverConfig) { diff --git a/packages/storage_driver/src/drivers/s3/index.ts b/packages/storage_driver/src/drivers/s3/index.ts index d8a9c817a..87c18ebbe 100644 --- a/packages/storage_driver/src/drivers/s3/index.ts +++ b/packages/storage_driver/src/drivers/s3/index.ts @@ -1,4 +1,4 @@ -import { FileStat } from '$/types' +import { FileStat, StorageType } from '$/types' import { StorageDriver } from '$/drivers/base' import { Writable, Readable } from 'stream' import { @@ -20,6 +20,7 @@ export type S3DriverConfig = { } export class S3Driver extends StorageDriver { + public type = StorageType.s3 private client: S3Client private bucket: string diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b896f200..87273d901 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -422,7 +422,7 @@ importers: version: link:../../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 @@ -449,7 +449,7 @@ importers: version: 3.5.0 rollup-plugin-dts: specifier: ^6.1.0 - version: 6.1.0(rollup@4.10.0)(typescript@5.4.3) + version: 6.1.0(rollup@4.10.0)(typescript@5.4.5) rollup-plugin-postcss: specifier: ^4.0.2 version: 4.0.2(postcss@8.4.35) @@ -531,7 +531,7 @@ importers: version: link:../../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(typescript@5.4.3) '@testing-library/react': specifier: ^14.2.2 version: 14.2.2(react-dom@18.2.0)(react@18.2.0) @@ -794,7 +794,7 @@ importers: version: 25.0.7(rollup@4.10.0) '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) '@types/node': specifier: ^20.10.6 version: 20.10.6 @@ -828,7 +828,7 @@ importers: version: 25.0.7(rollup@4.10.0) '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) rollup: specifier: ^4.10.0 version: 4.10.0 @@ -856,7 +856,7 @@ importers: version: 25.0.7(rollup@4.14.0) '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.14.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.14.0)(tslib@2.6.2)(typescript@5.4.5) '@types/node': specifier: ^20.10.6 version: 20.12.4 @@ -865,7 +865,7 @@ importers: version: 4.14.0 vite-tsconfig-paths: specifier: ^4.3.1 - version: 4.3.1(typescript@5.4.3) + version: 4.3.1(typescript@5.4.5) vitest: specifier: ^1.4.0 version: 1.4.0(@types/node@20.12.4) @@ -970,7 +970,7 @@ importers: version: link:../../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) '@types/json2csv': specifier: ^5.0.7 version: 5.0.7 @@ -991,7 +991,7 @@ importers: version: 4.10.0 vite-tsconfig-paths: specifier: ^4.3.1 - version: 4.3.1(typescript@5.4.3) + version: 4.3.1(typescript@5.4.5) vitest: specifier: ^1.6.0 version: 1.6.0(@types/node@20.10.6) @@ -1016,7 +1016,7 @@ importers: version: link:../../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) '@types/mssql': specifier: ^9.1.5 version: 9.1.5 @@ -1050,7 +1050,7 @@ importers: version: 25.0.7(rollup@4.10.0) '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) '@types/mysql': specifier: ^2.15.25 version: 2.15.25 @@ -1062,7 +1062,7 @@ importers: version: 4.10.0 vite-tsconfig-paths: specifier: ^4.3.1 - version: 4.3.1(typescript@5.4.3) + version: 4.3.1(typescript@5.4.5) vitest: specifier: ^1.4.0 version: 1.4.0(@types/node@20.10.6) @@ -1151,7 +1151,7 @@ importers: version: 25.0.7(rollup@4.10.0) '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) rollup: specifier: ^4.10.0 version: 4.10.0 @@ -1176,7 +1176,7 @@ importers: version: link:../../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) '@types/node': specifier: ^20.10.6 version: 20.10.6 @@ -1201,7 +1201,7 @@ importers: version: link:../../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.14.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.14.0)(tslib@2.6.2)(typescript@5.4.5) '@types/node': specifier: ^20.10.6 version: 20.12.4 @@ -1260,7 +1260,7 @@ importers: version: link:../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) prettier: specifier: ^3.1.1 version: 3.1.1 @@ -1309,7 +1309,7 @@ importers: version: link:../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(typescript@5.4.3) '@types/eslint': specifier: ^8.56.1 version: 8.56.1 @@ -1340,7 +1340,7 @@ importers: version: link:../../tools/typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5) prettier: specifier: ^3.1.1 version: 3.1.1 @@ -1389,7 +1389,7 @@ importers: version: 25.0.7(rollup@4.14.0) '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.14.0)(tslib@2.6.2)(typescript@5.4.3) + version: 11.1.6(rollup@4.14.0)(tslib@2.6.2)(typescript@5.4.5) '@types/mock-fs': specifier: ^4.13.4 version: 4.13.4 @@ -1407,13 +1407,13 @@ importers: version: 4.14.0 rollup-plugin-dts: specifier: ^6.1.0 - version: 6.1.0(rollup@4.14.0)(typescript@5.4.3) + version: 6.1.0(rollup@4.14.0)(typescript@5.4.5) uuid: specifier: ^9.0.1 version: 9.0.1 vite-tsconfig-paths: specifier: ^4.3.1 - version: 4.3.1(typescript@5.4.3) + version: 4.3.1(typescript@5.4.5) vitest: specifier: ^1.2.2 version: 1.4.0(@types/node@20.12.4) @@ -8544,7 +8544,7 @@ packages: typescript: 5.3.3 dev: true - /@rollup/plugin-typescript@11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.3): + /@rollup/plugin-typescript@11.1.6(rollup@4.10.0)(tslib@2.6.2)(typescript@5.4.5): resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -8561,6 +8561,25 @@ packages: resolve: 1.22.8 rollup: 4.10.0 tslib: 2.6.2 + typescript: 5.4.5 + dev: true + + /@rollup/plugin-typescript@11.1.6(rollup@4.10.0)(typescript@5.4.3): + resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: '*' + typescript: '>=3.7.0' + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.10.0) + resolve: 1.22.8 + rollup: 4.10.0 typescript: 5.4.3 dev: true @@ -22321,7 +22340,7 @@ packages: is-plain-object: 3.0.1 dev: true - /rollup-plugin-dts@6.1.0(rollup@4.10.0)(typescript@5.4.3): + /rollup-plugin-dts@6.1.0(rollup@4.10.0)(typescript@5.4.5): resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} engines: {node: '>=16'} peerDependencies: @@ -22330,12 +22349,12 @@ packages: dependencies: magic-string: 0.30.6 rollup: 4.10.0 - typescript: 5.4.3 + typescript: 5.4.5 optionalDependencies: '@babel/code-frame': 7.24.7 dev: true - /rollup-plugin-dts@6.1.0(rollup@4.14.0)(typescript@5.4.3): + /rollup-plugin-dts@6.1.0(rollup@4.14.0)(typescript@5.4.5): resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} engines: {node: '>=16'} peerDependencies: @@ -22344,7 +22363,7 @@ packages: dependencies: magic-string: 0.30.6 rollup: 4.14.0 - typescript: 5.4.3 + typescript: 5.4.5 optionalDependencies: '@babel/code-frame': 7.24.7 dev: true