diff --git a/code/lib/core-common/package.json b/code/lib/core-common/package.json index c692797811f7..59daf94c42a4 100644 --- a/code/lib/core-common/package.json +++ b/code/lib/core-common/package.json @@ -104,6 +104,7 @@ "@types/mock-fs": "^4.13.0", "@types/picomatch": "^2.3.0", "mock-fs": "^4.13.0", + "type-fest": "^2.17.0", "typescript": "~4.6.3" }, "peerDependencies": { diff --git a/code/lib/core-common/src/types.ts b/code/lib/core-common/src/types.ts index 7f8bbed06afe..7ecd61cb3d97 100644 --- a/code/lib/core-common/src/types.ts +++ b/code/lib/core-common/src/types.ts @@ -3,6 +3,7 @@ import type { TransformOptions } from '@babel/core'; import { Router } from 'express'; import { Server } from 'http'; import type { Parameters } from '@storybook/csf'; +import type { PackageJson } from 'type-fest'; import type { FileSystemCache } from './utils/file-cache'; /** @@ -109,18 +110,7 @@ export interface BuilderResult { stats?: Stats; } -// TODO: this is a generic interface that we can share across multiple SB packages (like @storybook/cli) -export interface PackageJson { - name: string; - version: string; - dependencies?: Record; - devDependencies?: Record; - peerDependencies?: Record; - scripts?: Record; - eslintConfig?: Record; - type?: 'module'; - [key: string]: any; -} +export { PackageJson }; // TODO: This could be exported to the outside world and used in `options.ts` file of each `@storybook/APP` // like it's described in docs/api/new-frameworks.md diff --git a/code/lib/core-common/src/utils/get-storybook-info.ts b/code/lib/core-common/src/utils/get-storybook-info.ts index e44e75f08a02..c9e8369542bb 100644 --- a/code/lib/core-common/src/utils/get-storybook-info.ts +++ b/code/lib/core-common/src/utils/get-storybook-info.ts @@ -35,7 +35,7 @@ const logger = console; const findDependency = ( { dependencies, devDependencies, peerDependencies }: PackageJson, - predicate: (entry: [string, string]) => string + predicate: (entry: [string, string | undefined]) => string ) => [ Object.entries(dependencies || {}).find(predicate), Object.entries(devDependencies || {}).find(predicate), diff --git a/code/lib/telemetry/src/storybook-metadata.ts b/code/lib/telemetry/src/storybook-metadata.ts index 6e8647e3fcd0..99755f79a18c 100644 --- a/code/lib/telemetry/src/storybook-metadata.ts +++ b/code/lib/telemetry/src/storybook-metadata.ts @@ -195,7 +195,7 @@ export const getStorybookMetadata = async (_configDir?: string) => { return cachedMetadata; } - const { packageJson = {} as PackageJson } = readPkgUp.sync({ cwd: process.cwd() }) || {}; + const { packageJson = {} } = readPkgUp.sync({ cwd: process.cwd(), normalize: false }) || {}; const configDir = (_configDir || (getStorybookConfiguration( diff --git a/code/yarn.lock b/code/yarn.lock index e860326033e1..ae9d26708384 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -7927,6 +7927,7 @@ __metadata: slash: ^3.0.0 telejson: ^6.0.8 ts-dedent: ^2.0.0 + type-fest: ^2.17.0 typescript: ~4.6.3 util-deprecate: ^1.0.2 peerDependencies: @@ -43037,6 +43038,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^2.17.0": + version: 2.17.0 + resolution: "type-fest@npm:2.17.0" + checksum: e7707e5c27213919483011d127f333432d82d06b697ca0577cc828b53d384372b4308d3294e849b0111a34fdc7adf5bdef58c5ffa80aa36d19e9851b2a8d9970 + languageName: node + linkType: hard + "type-is@npm:~1.6.17, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18"