create-nextjs-storybook
Version:
Install embedded Storybook route into a NextJS project
49 lines (48 loc) • 2.39 kB
JavaScript
import fs from 'fs';
import { findUpSync } from 'find-up';
import semver from 'semver';
import { resolve } from 'path';
const logger = console;
export var SupportedLanguage;
(function (SupportedLanguage) {
SupportedLanguage["JAVASCRIPT"] = "javascript";
SupportedLanguage["TYPESCRIPT_3_8"] = "typescript-3-8";
SupportedLanguage["TYPESCRIPT_4_9"] = "typescript-4-9";
})(SupportedLanguage || (SupportedLanguage = {}));
export function isStorybookInstantiated(configDir = resolve(process.cwd(), '.storybook')) {
return fs.existsSync(configDir);
}
export async function detectPnp() {
return !!findUpSync(['.pnp.js', '.pnp.cjs']);
}
export async function detectLanguage(packageManager) {
let language = SupportedLanguage.JAVASCRIPT;
if (fs.existsSync('jsconfig.json')) {
return language;
}
const isTypescriptDirectDependency = await packageManager
.getAllDependencies()
.then((deps) => Boolean(deps['typescript']));
const typescriptVersion = await packageManager.getPackageVersion('typescript');
const prettierVersion = await packageManager.getPackageVersion('prettier');
const babelPluginTransformTypescriptVersion = await packageManager.getPackageVersion('@babel/plugin-transform-typescript');
const typescriptEslintParserVersion = await packageManager.getPackageVersion('@typescript-eslint/parser');
const eslintPluginStorybookVersion = await packageManager.getPackageVersion('eslint-plugin-storybook');
if (isTypescriptDirectDependency && typescriptVersion) {
if (semver.gte(typescriptVersion, '4.9.0') &&
(!prettierVersion || semver.gte(prettierVersion, '2.8.0')) &&
(!babelPluginTransformTypescriptVersion ||
semver.gte(babelPluginTransformTypescriptVersion, '7.20.0')) &&
(!typescriptEslintParserVersion || semver.gte(typescriptEslintParserVersion, '5.44.0')) &&
(!eslintPluginStorybookVersion || semver.gte(eslintPluginStorybookVersion, '0.6.8'))) {
language = SupportedLanguage.TYPESCRIPT_4_9;
}
else if (semver.gte(typescriptVersion, '3.8.0')) {
language = SupportedLanguage.TYPESCRIPT_3_8;
}
else if (semver.lt(typescriptVersion, '3.8.0')) {
logger.warn('Detected TypeScript < 3.8, populating with JavaScript examples');
}
}
return language;
}