UNPKG

storybook

Version:

Storybook: Develop, document, and test UI components in isolation

119 lines (113 loc) 5.41 kB
import CJS_COMPAT_NODE_URL_3za304dh1il from 'node:url'; import CJS_COMPAT_NODE_PATH_3za304dh1il from 'node:path'; import CJS_COMPAT_NODE_MODULE_3za304dh1il from "node:module"; var __filename = CJS_COMPAT_NODE_URL_3za304dh1il.fileURLToPath(import.meta.url); var __dirname = CJS_COMPAT_NODE_PATH_3za304dh1il.dirname(__filename); var require = CJS_COMPAT_NODE_MODULE_3za304dh1il.createRequire(import.meta.url); // ------------------------------------------------------------ // end of CJS compatibility banner, injected by Storybook's esbuild configuration // ------------------------------------------------------------ // src/cli/detectLanguage.ts import { existsSync } from "node:fs"; import { join } from "node:path"; import { SupportedLanguage } from "storybook/internal/types"; import semver from "semver"; async function detectLanguage(packageManager, workingDir = process.cwd()) { let language = SupportedLanguage.JAVASCRIPT; return existsSync(join(workingDir, "jsconfig.json")) || (!!packageManager.getAllDependencies().typescript ? (await detectIncompatiblePackageVersions(packageManager)).length === 0 && (language = SupportedLanguage.TYPESCRIPT) : existsSync(join(workingDir, "tsconfig.json")) && (language = SupportedLanguage.TYPESCRIPT)), language; } async function detectIncompatiblePackageVersions(packageManager) { let getModulePackageJSONVersion = async (pkg) => (await packageManager.getModulePackageJSON(pkg))?.version ?? null, [ typescriptVersion, prettierVersion, babelPluginTransformTypescriptVersion, typescriptEslintParserVersion, eslintPluginStorybookVersion ] = await Promise.all([ getModulePackageJSONVersion("typescript"), getModulePackageJSONVersion("prettier"), getModulePackageJSONVersion("@babel/plugin-transform-typescript"), getModulePackageJSONVersion("@typescript-eslint/parser"), getModulePackageJSONVersion("eslint-plugin-storybook") ]), satisfies = (version, range) => version ? semver.satisfies(version, range, { includePrerelease: !0 }) : !1, incompatibleReasons = []; return typescriptVersion && !satisfies(typescriptVersion, ">=4.9.0") && incompatibleReasons.push(`typescript ${typescriptVersion} is below 4.9.0`), prettierVersion && !semver.gte(prettierVersion, "2.8.0") && incompatibleReasons.push(`prettier ${prettierVersion} is below 2.8.0`), babelPluginTransformTypescriptVersion && !satisfies(babelPluginTransformTypescriptVersion, ">=7.20.0") && incompatibleReasons.push( `@babel/plugin-transform-typescript ${babelPluginTransformTypescriptVersion} is below 7.20.0` ), typescriptEslintParserVersion && !satisfies(typescriptEslintParserVersion, ">=5.44.0") && incompatibleReasons.push( `@typescript-eslint/parser ${typescriptEslintParserVersion} is below 5.44.0` ), eslintPluginStorybookVersion && !eslintPluginStorybookVersion.startsWith("0.0.0-") && !satisfies(eslintPluginStorybookVersion, ">=0.6.8") && incompatibleReasons.push( `eslint-plugin-storybook ${eslintPluginStorybookVersion} is below 0.6.8` ), incompatibleReasons; } // src/cli/getStorybookData.ts import { dirname, isAbsolute, resolve } from "node:path"; import { JsPackageManagerFactory, getStorybookInfo } from "storybook/internal/common"; import { getStoriesPathsFromConfig } from "storybook/internal/core-server"; import { isCsfFactoryPreview, readConfig } from "storybook/internal/csf-tools"; import { logger } from "storybook/internal/node-logger"; function getWorkingDir(configDir) { return isAbsolute(configDir) ? dirname(configDir) : resolve(process.cwd(), dirname(configDir)); } var getStorybookData = async ({ configDir: userDefinedConfigDir, packageManagerName, skipCache }) => { logger.debug("Getting Storybook info..."); let { mainConfig, mainConfigPath, configDir: configDirFromScript, previewConfigPath, versionSpecifier, frameworkPackage, rendererPackage, renderer, builderPackage, addons } = await getStorybookInfo( userDefinedConfigDir, userDefinedConfigDir ? dirname(userDefinedConfigDir) : void 0, { skipCache } ), configDir = userDefinedConfigDir || configDirFromScript || ".storybook", workingDir = getWorkingDir(configDir); logger.debug("Getting stories paths..."); let storiesPaths = await getStoriesPathsFromConfig({ stories: mainConfig.stories, configDir, workingDir }); logger.debug("Getting package manager..."); let packageManager = JsPackageManagerFactory.getPackageManager({ force: packageManagerName, configDir, storiesPaths }); logger.debug("Getting Storybook version..."); let versionInstalled = (await packageManager.getModulePackageJSON("storybook"))?.version; logger.debug("Detecting CSF factory usage..."); let hasCsfFactoryPreview = previewConfigPath ? isCsfFactoryPreview(await readConfig(previewConfigPath)) : !1; return { configDir, workingDir, mainConfig, /** The version specifier of Storybook from the user's package.json */ versionSpecifier, /** The version of Storybook installed in the user's project */ versionInstalled, mainConfigPath, previewConfigPath, packageManager, storiesPaths, hasCsfFactoryPreview, frameworkPackage, rendererPackage, renderer, builderPackage, addons }; }; export { detectLanguage, detectIncompatiblePackageVersions, getWorkingDir, getStorybookData };