@storybook/cli 7.1.0-alpha.3 → 7.1.0-alpha.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__mocks__/@aw-web-design/x-default-browser.js +2 -0
- package/dist/chunk-TUOGMXOX.mjs +48 -0
- package/dist/generate.js +174 -174
- package/dist/generate.mjs +202 -180
- package/dist/index.d.ts +75 -20
- package/dist/index.js +17 -5
- package/dist/index.mjs +1 -1
- package/package.json +19 -19
- package/rendererAssets/common/header.css +5 -5
- package/rendererAssets/common/page.css +10 -10
- package/scripts/generate-sb-packages-versions.js +73 -0
- package/src/typings.d.ts +2 -0
- package/src/window.d.ts +8 -0
- package/test/default/cli.test.js +12 -0
- package/test/helpers.js +15 -0
- package/dist/chunk-Y2KXA66D.mjs +0 -17
package/src/window.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const run = require('../helpers');
|
|
2
|
+
|
|
3
|
+
describe('Default behavior', () => {
|
|
4
|
+
it('suggests the closest match to an unknown command', () => {
|
|
5
|
+
const { status, stderr, stdout } = run(['upgraed']);
|
|
6
|
+
|
|
7
|
+
// Assertions
|
|
8
|
+
expect(status).toBe(1);
|
|
9
|
+
expect(stderr.toString()).toContain('Invalid command: upgraed.');
|
|
10
|
+
expect(stdout.toString()).toContain('Did you mean upgrade?');
|
|
11
|
+
});
|
|
12
|
+
});
|
package/test/helpers.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const { sync: spawnSync } = require('cross-spawn');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const CLI_PATH = path.join(__dirname, '..', 'bin');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Execute command
|
|
8
|
+
* @param {String[]} args - args to be passed in
|
|
9
|
+
* @param {Object} options - customize the behavior
|
|
10
|
+
*
|
|
11
|
+
* @returns {Object}
|
|
12
|
+
*/
|
|
13
|
+
const run = (args, options = {}) => spawnSync('node', [CLI_PATH].concat(args), options);
|
|
14
|
+
|
|
15
|
+
module.exports = run;
|
package/dist/chunk-Y2KXA66D.mjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+x+'" is not supported')});var versions_default={"@storybook/addon-a11y":"7.1.0-alpha.3","@storybook/addon-actions":"7.1.0-alpha.3","@storybook/addon-backgrounds":"7.1.0-alpha.3","@storybook/addon-controls":"7.1.0-alpha.3","@storybook/addon-docs":"7.1.0-alpha.3","@storybook/addon-essentials":"7.1.0-alpha.3","@storybook/addon-highlight":"7.1.0-alpha.3","@storybook/addon-interactions":"7.1.0-alpha.3","@storybook/addon-jest":"7.1.0-alpha.3","@storybook/addon-links":"7.1.0-alpha.3","@storybook/addon-mdx-gfm":"7.1.0-alpha.3","@storybook/addon-measure":"7.1.0-alpha.3","@storybook/addon-outline":"7.1.0-alpha.3","@storybook/addon-storyshots":"7.1.0-alpha.3","@storybook/addon-storyshots-puppeteer":"7.1.0-alpha.3","@storybook/addon-storysource":"7.1.0-alpha.3","@storybook/addon-toolbars":"7.1.0-alpha.3","@storybook/addon-viewport":"7.1.0-alpha.3","@storybook/addons":"7.1.0-alpha.3","@storybook/angular":"7.1.0-alpha.3","@storybook/api":"7.1.0-alpha.3","@storybook/blocks":"7.1.0-alpha.3","@storybook/builder-manager":"7.1.0-alpha.3","@storybook/builder-vite":"7.1.0-alpha.3","@storybook/builder-webpack5":"7.1.0-alpha.3","@storybook/channel-postmessage":"7.1.0-alpha.3","@storybook/channel-websocket":"7.1.0-alpha.3","@storybook/channels":"7.1.0-alpha.3","@storybook/cli":"7.1.0-alpha.3","@storybook/client-api":"7.1.0-alpha.3","@storybook/client-logger":"7.1.0-alpha.3","@storybook/codemod":"7.1.0-alpha.3","@storybook/components":"7.1.0-alpha.3","@storybook/core-client":"7.1.0-alpha.3","@storybook/core-common":"7.1.0-alpha.3","@storybook/core-events":"7.1.0-alpha.3","@storybook/core-server":"7.1.0-alpha.3","@storybook/core-webpack":"7.1.0-alpha.3","@storybook/csf-plugin":"7.1.0-alpha.3","@storybook/csf-tools":"7.1.0-alpha.3","@storybook/docs-tools":"7.1.0-alpha.3","@storybook/ember":"7.1.0-alpha.3","@storybook/html":"7.1.0-alpha.3","@storybook/html-vite":"7.1.0-alpha.3","@storybook/html-webpack5":"7.1.0-alpha.3","@storybook/instrumenter":"7.1.0-alpha.3","@storybook/manager":"7.1.0-alpha.3","@storybook/manager-api":"7.1.0-alpha.3","@storybook/nextjs":"7.1.0-alpha.3","@storybook/node-logger":"7.1.0-alpha.3","@storybook/postinstall":"7.1.0-alpha.3","@storybook/preact":"7.1.0-alpha.3","@storybook/preact-vite":"7.1.0-alpha.3","@storybook/preact-webpack5":"7.1.0-alpha.3","@storybook/preset-create-react-app":"7.1.0-alpha.3","@storybook/preset-html-webpack":"7.1.0-alpha.3","@storybook/preset-preact-webpack":"7.1.0-alpha.3","@storybook/preset-react-webpack":"7.1.0-alpha.3","@storybook/preset-server-webpack":"7.1.0-alpha.3","@storybook/preset-svelte-webpack":"7.1.0-alpha.3","@storybook/preset-vue-webpack":"7.1.0-alpha.3","@storybook/preset-vue3-webpack":"7.1.0-alpha.3","@storybook/preset-web-components-webpack":"7.1.0-alpha.3","@storybook/preview":"7.1.0-alpha.3","@storybook/preview-api":"7.1.0-alpha.3","@storybook/preview-web":"7.1.0-alpha.3","@storybook/react":"7.1.0-alpha.3","@storybook/react-dom-shim":"7.1.0-alpha.3","@storybook/react-vite":"7.1.0-alpha.3","@storybook/react-webpack5":"7.1.0-alpha.3","@storybook/router":"7.1.0-alpha.3","@storybook/server":"7.1.0-alpha.3","@storybook/server-webpack5":"7.1.0-alpha.3","@storybook/source-loader":"7.1.0-alpha.3","@storybook/store":"7.1.0-alpha.3","@storybook/svelte":"7.1.0-alpha.3","@storybook/svelte-vite":"7.1.0-alpha.3","@storybook/svelte-webpack5":"7.1.0-alpha.3","@storybook/sveltekit":"7.1.0-alpha.3","@storybook/telemetry":"7.1.0-alpha.3","@storybook/theming":"7.1.0-alpha.3","@storybook/types":"7.1.0-alpha.3","@storybook/vue":"7.1.0-alpha.3","@storybook/vue-vite":"7.1.0-alpha.3","@storybook/vue-webpack5":"7.1.0-alpha.3","@storybook/vue3":"7.1.0-alpha.3","@storybook/vue3-vite":"7.1.0-alpha.3","@storybook/vue3-webpack5":"7.1.0-alpha.3","@storybook/web-components":"7.1.0-alpha.3","@storybook/web-components-vite":"7.1.0-alpha.3","@storybook/web-components-webpack5":"7.1.0-alpha.3",sb:"7.1.0-alpha.3",storybook:"7.1.0-alpha.3"};import deprecate from"util-deprecate";var useNpmWarning=deprecate(()=>{},"`--use-npm` is deprecated and will be removed in Storybook 8.0. \nPlease use the `--package-manager=npm` option instead.\nRead more at https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#cli-option---use-npm-deprecated");import chalk2 from"chalk";import{gt,satisfies as satisfies2}from"semver";import{sync as spawnSync}from"cross-spawn";import path2 from"path";import fs2 from"fs";import path,{join as join2}from"path";import fs from"fs";import fse from"fs-extra";import chalk from"chalk";import{satisfies}from"semver";import stripJsonComments from"strip-json-comments";import{dirname,join}from"path";import downloadTarball from"@ndelangen/get-tarball";import getNpmTarballUrl from"get-npm-tarball-url";import*as tempy from"tempy";import{minVersion,validRange}from"semver";function ltMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major<major}function gtMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major>major}function eqMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major===major}var externalFrameworks=[{name:"qwik",packageName:"storybook-framework-qwik"},{name:"solid",frameworks:["storybook-solidjs-vite"],renderer:"storybook-solidjs"}],SUPPORTED_RENDERERS=["react","react-native","vue","vue3","angular","mithril","riot","ember","marionette","marko","preact","svelte","qwik","rax","aurelia","solid"],ProjectType=(ProjectType2=>(ProjectType2.UNDETECTED="UNDETECTED",ProjectType2.UNSUPPORTED="UNSUPPORTED",ProjectType2.REACT_SCRIPTS="REACT_SCRIPTS",ProjectType2.REACT="REACT",ProjectType2.REACT_NATIVE="REACT_NATIVE",ProjectType2.REACT_PROJECT="REACT_PROJECT",ProjectType2.WEBPACK_REACT="WEBPACK_REACT",ProjectType2.NEXTJS="NEXTJS",ProjectType2.VUE="VUE",ProjectType2.VUE3="VUE3",ProjectType2.SFC_VUE="SFC_VUE",ProjectType2.ANGULAR="ANGULAR",ProjectType2.EMBER="EMBER",ProjectType2.WEB_COMPONENTS="WEB_COMPONENTS",ProjectType2.MITHRIL="MITHRIL",ProjectType2.MARIONETTE="MARIONETTE",ProjectType2.MARKO="MARKO",ProjectType2.HTML="HTML",ProjectType2.QWIK="QWIK",ProjectType2.RIOT="RIOT",ProjectType2.PREACT="PREACT",ProjectType2.SVELTE="SVELTE",ProjectType2.SVELTEKIT="SVELTEKIT",ProjectType2.RAX="RAX",ProjectType2.AURELIA="AURELIA",ProjectType2.SERVER="SERVER",ProjectType2.NX="NX",ProjectType2.SOLID="SOLID",ProjectType2))(ProjectType||{});var supportedTemplates=[{preset:"SFC_VUE",dependencies:{"vue-loader":versionRange=>ltMajor(versionRange,16),vuetify:versionRange=>ltMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"VUE",dependencies:{vue:versionRange=>ltMajor(versionRange,3),nuxt:versionRange=>ltMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"VUE3",dependencies:{vue:versionRange=>versionRange==="next"||eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"EMBER",dependencies:["ember-cli"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"NEXTJS",dependencies:{next:versionRange=>eqMajor(versionRange,9)||gtMajor(versionRange,9)},matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"QWIK",dependencies:["@builder.io/qwik"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"REACT_PROJECT",peerDependencies:["react"],matcherFunction:({peerDependencies})=>peerDependencies.every(Boolean)},{preset:"REACT_NATIVE",dependencies:["react-native","react-native-scripts"],matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"REACT_SCRIPTS",files:["/node_modules/.bin/react-scripts"],dependencies:["react-scripts"],matcherFunction:({dependencies,files})=>dependencies.every(Boolean)||files.every(Boolean)},{preset:"ANGULAR",dependencies:["@angular/core"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"WEB_COMPONENTS",dependencies:["lit-element","lit-html","lit"],matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"MITHRIL",dependencies:["mithril"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"MARIONETTE",dependencies:["backbone.marionette"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"MARKO",dependencies:["marko"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"RIOT",dependencies:["riot"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"PREACT",dependencies:["preact"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"SVELTEKIT",dependencies:["@sveltejs/kit"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"SVELTE",dependencies:["svelte"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"RAX",dependencies:["rax"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"AURELIA",dependencies:["aurelia-bootstrapper"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"SOLID",dependencies:["solid-js"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"WEBPACK_REACT",dependencies:["react","webpack"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"REACT",dependencies:["react"],matcherFunction:({dependencies})=>dependencies.every(Boolean)}],unsupportedTemplate={preset:"UNSUPPORTED",dependencies:{nuxt:versionRange=>eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},notInstallableProjectTypes=["UNDETECTED","UNSUPPORTED"],installableProjectTypes=Object.values(ProjectType).filter(type=>!notInstallableProjectTypes.includes(type)).map(type=>type.toLowerCase());function getCliDir(){return dirname(__require.resolve("@storybook/cli/package.json"))}var resolveUsingBranchInstall=async(packageManager,request)=>{let tempDirectory=tempy.directory(),version=versions_default[request]||await packageManager.latestVersion(request),url=getNpmTarballUrl(request,version,{registry:packageManager.getRegistryURL()});return await downloadTarball({url,dir:tempDirectory}),join(tempDirectory,"package")};async function getRendererDir(packageManager,renderer){let externalFramework=externalFrameworks.find(framework=>framework.name===renderer),frameworkPackageName=externalFramework?.renderer||externalFramework?.packageName||`@storybook/${renderer}`,packageJsonPath=`${frameworkPackageName}/package.json`,errors=[];try{return dirname(__require.resolve(packageJsonPath,{paths:[process.cwd()]}))}catch(e){errors.push(e)}try{return await resolveUsingBranchInstall(packageManager,frameworkPackageName)}catch(e){errors.push(e)}throw new Error(`Cannot find ${packageJsonPath}, ${errors.map(e=>e.stack).join(`
|
|
2
|
-
|
|
3
|
-
`)}`)}var logger=console;function getBowerJson(){let bowerJsonPath=path.resolve("bower.json");if(!fs.existsSync(bowerJsonPath))return!1;let jsonContent=fs.readFileSync(bowerJsonPath,"utf8");return JSON.parse(jsonContent)}function readFileAsJson(jsonPath,allowComments){let filePath=path.resolve(jsonPath);if(!fs.existsSync(filePath))return!1;let fileContent=fs.readFileSync(filePath,"utf8"),jsonContent=allowComments?stripJsonComments(fileContent):fileContent;try{return JSON.parse(jsonContent)}catch(e){throw logger.error(chalk.red(`Invalid json in file: ${filePath}`)),e}}var writeFileAsJson=(jsonPath,content)=>{let filePath=path.resolve(jsonPath);return fs.existsSync(filePath)?(fs.writeFileSync(filePath,`${JSON.stringify(content,null,2)}
|
|
4
|
-
`),!0):!1},commandLog=message=>(process.stdout.write(chalk.cyan(" \u2022 ")+message),(errorMessage,errorInfo)=>{if(errorMessage){if(process.stdout.write(`. ${chalk.red("\u2716")}
|
|
5
|
-
`),logger.error(`
|
|
6
|
-
${chalk.red(errorMessage)}`),!errorInfo)return;let newErrorInfo=errorInfo.split(`
|
|
7
|
-
`).map(line=>` ${chalk.dim(line)}`).join(`
|
|
8
|
-
`);logger.error(`${newErrorInfo}
|
|
9
|
-
`);return}process.stdout.write(`. ${chalk.green("\u2713")}
|
|
10
|
-
`)});function paddedLog(message){let newMessage=message.split(`
|
|
11
|
-
`).map(line=>` ${line}`).join(`
|
|
12
|
-
`);logger.log(newMessage)}function getChars(char,amount){let line="";for(let lc=0;lc<amount;lc+=1)line+=char;return line}function codeLog(codeLines,leftPadAmount){let maxLength=0,finalResult=codeLines.map(line=>(maxLength=line.length>maxLength?line.length:maxLength,line)).map(line=>{let rightPadAmount=maxLength-line.length,newLine=line+getChars(" ",rightPadAmount);return newLine=getChars(" ",leftPadAmount||2)+chalk.inverse(` ${newLine} `),newLine}).join(`
|
|
13
|
-
`);logger.log(finalResult)}async function getBabelDependencies(packageManager,packageJson){let dependenciesToAdd=[],babelLoaderVersion="^8.0.0-0",babelCoreVersion=packageJson.dependencies["babel-core"]||packageJson.devDependencies["babel-core"];if(babelCoreVersion){let latestCompatibleBabelVersion=await packageManager.latestVersion("babel-core",babelCoreVersion);satisfies(latestCompatibleBabelVersion,"^6.0.0")&&(babelLoaderVersion="^7.0.0")}else if(!packageJson.dependencies["@babel/core"]&&!packageJson.devDependencies["@babel/core"]){let babelCoreInstallVersion=await packageManager.getVersion("@babel/core");dependenciesToAdd.push(`@babel/core@${babelCoreInstallVersion}`)}if(!packageJson.dependencies["babel-loader"]&&!packageJson.devDependencies["babel-loader"]){let babelLoaderInstallVersion=await packageManager.getVersion("babel-loader",babelLoaderVersion);dependenciesToAdd.push(`babel-loader@${babelLoaderInstallVersion}`)}return dependenciesToAdd}function copyTemplate(templateRoot,destination="."){let templateDir=path.resolve(templateRoot,"template-csf/");if(!fs.existsSync(templateDir))throw new Error("Couldn't find template dir");fse.copySync(templateDir,destination,{overwrite:!0})}async function copyTemplateFiles({packageManager,renderer,language,destination,includeCommonAssets=!0}){let languageFolderMapping={typescript:"ts",["javascript"]:"js",["typescript-3-8"]:"ts-3-8",["typescript-4-9"]:"ts-4-9"},templatePath=async()=>{let baseDir=await getRendererDir(packageManager,renderer),assetsDir=join2(baseDir,"template/cli"),assetsLanguage=join2(assetsDir,languageFolderMapping[language]),assetsJS=join2(assetsDir,languageFolderMapping["javascript"]),assetsTS=join2(assetsDir,languageFolderMapping.typescript),assetsTS38=join2(assetsDir,languageFolderMapping["typescript-3-8"]);if(await fse.pathExists(assetsLanguage))return assetsLanguage;if(language==="typescript-4-9"&&await fse.pathExists(assetsTS38))return assetsTS38;if(await fse.pathExists(assetsTS))return assetsTS;if(await fse.pathExists(assetsJS))return assetsJS;if(await fse.pathExists(assetsDir))return assetsDir;throw new Error(`Unsupported renderer: ${renderer} (${baseDir})`)},destinationPath=destination??await(async()=>await fse.pathExists("./src")?"./src/stories":"./stories")();includeCommonAssets&&await fse.copy(join2(getCliDir(),"rendererAssets/common"),destinationPath,{overwrite:!0}),await fse.copy(await templatePath(),destinationPath,{overwrite:!0})}function getStorybookVersionSpecifier(packageJson){let allDeps={...packageJson.dependencies,...packageJson.devDependencies},storybookPackage=Object.keys(allDeps).find(name=>versions_default[name]);if(!storybookPackage)throw new Error("Couldn't find any official storybook packages in package.json");return allDeps[storybookPackage]}function isNxProject(packageJSON){return!!packageJSON.devDependencies?.nx||fs.existsSync("nx.json")}var HandledError=class extends Error{constructor(messageOrError){super(typeof messageOrError=="string"?messageOrError:messageOrError.message);this.handled=!0;typeof messageOrError!="string"&&(this.cause=messageOrError)}};var logger2=console;function getPackageDetails(pkg){let idx=pkg.lastIndexOf("@");if(idx<=0)return[pkg,void 0];let packageName=pkg.slice(0,idx),packageVersion=pkg.slice(idx+1);return[packageName,packageVersion]}var JsPackageManager=class{setRegistryURL(url){url?this.executeCommand("npm",["config","set","registry",url]):this.executeCommand("npm",["config","delete","registry"])}getRegistryURL(){let url=this.executeCommand("npm",["config","get","registry"]).trim();return url==="undefined"?void 0:url}constructor(options){this.cwd=options?.cwd}installDependencies(){let done=commandLog("Preparing to install dependencies");done(),logger2.log(),logger2.log(),done=commandLog("Installing dependencies");try{this.runInstall()}catch(e){throw done("An error occurred while installing dependencies."),new HandledError(e)}done()}packageJsonPath(){return this.cwd?path2.resolve(this.cwd,"package.json"):path2.resolve("package.json")}readPackageJson(){let packageJsonPath=this.packageJsonPath();if(!fs2.existsSync(packageJsonPath))throw new Error(`Could not read package.json file at ${packageJsonPath}`);let jsonContent=fs2.readFileSync(packageJsonPath,"utf8");return JSON.parse(jsonContent)}writePackageJson(packageJson){let packageJsonToWrite={...packageJson};packageJsonToWrite.dependencies&&Object.keys(packageJsonToWrite.dependencies).length===0&&delete packageJsonToWrite.dependencies,packageJsonToWrite.devDependencies&&Object.keys(packageJsonToWrite.devDependencies).length===0&&delete packageJsonToWrite.devDependencies,packageJsonToWrite.peerDependencies&&Object.keys(packageJsonToWrite.peerDependencies).length===0&&delete packageJsonToWrite.peerDependencies;let content=`${JSON.stringify(packageJsonToWrite,null,2)}
|
|
14
|
-
`;fs2.writeFileSync(this.packageJsonPath(),content,"utf8")}retrievePackageJson(){let packageJson;try{packageJson=this.readPackageJson()}catch{this.initPackageJson(),packageJson=this.readPackageJson()}return{...packageJson,dependencies:{...packageJson.dependencies},devDependencies:{...packageJson.devDependencies},peerDependencies:{...packageJson.peerDependencies}}}getAllDependencies(){let{dependencies,devDependencies,peerDependencies}=this.retrievePackageJson();return{...dependencies,...devDependencies,...peerDependencies}}addDependencies(options,dependencies){let{skipInstall}=options;if(skipInstall){let{packageJson}=options,dependenciesMap=dependencies.reduce((acc,dep)=>{let[packageName,packageVersion]=getPackageDetails(dep);return{...acc,[packageName]:packageVersion}},{});options.installAsDevDependencies?packageJson.devDependencies={...packageJson.devDependencies,...dependenciesMap}:packageJson.dependencies={...packageJson.dependencies,...dependenciesMap},this.writePackageJson(packageJson)}else try{this.runAddDeps(dependencies,options.installAsDevDependencies)}catch(e){throw logger2.error("An error occurred while installing dependencies."),logger2.log(e.message),new HandledError(e)}}removeDependencies(options,dependencies){let{skipInstall}=options;if(skipInstall){let{packageJson}=options;dependencies.forEach(dep=>{packageJson.devDependencies&&delete packageJson.devDependencies[dep],packageJson.dependencies&&delete packageJson.dependencies[dep]}),this.writePackageJson(packageJson)}else try{this.runRemoveDeps(dependencies)}catch(e){throw logger2.error("An error occurred while removing dependencies."),logger2.log(e.message),new HandledError(e)}}getVersionedPackages(packages){return Promise.all(packages.map(async pkg=>{let[packageName,packageVersion]=getPackageDetails(pkg);return`${packageName}@${await this.getVersion(packageName,packageVersion)}`}))}getVersions(...packageNames){return Promise.all(packageNames.map(packageName=>this.getVersion(packageName)))}async getVersion(packageName,constraint){let current;/(@storybook|^sb$|^storybook$)/.test(packageName)&&(current=versions_default[packageName]);let latest;try{latest=await this.latestVersion(packageName,constraint)}catch(e){if(current)return logger2.warn(`
|
|
15
|
-
${chalk2.yellow(e.message)}`),current;throw logger2.error(`
|
|
16
|
-
${chalk2.red(e.message)}`),new HandledError(e)}return`^${current&&(!constraint||satisfies2(current,constraint))&>(current,latest)?current:latest}`}async latestVersion(packageName,constraint){return constraint?(await this.runGetVersions(packageName,!0)).reverse().find(version=>satisfies2(version,constraint)):this.runGetVersions(packageName,!1)}addStorybookCommandInScripts(options){let storybookCmd=`storybook dev -p ${options?.port??6006}`,buildStorybookCmd="storybook build",preCommand=options?.preCommand?this.getRunCommand(options.preCommand):void 0;this.addScripts({storybook:[preCommand,storybookCmd].filter(Boolean).join(" && "),"build-storybook":[preCommand,buildStorybookCmd].filter(Boolean).join(" && ")})}addESLintConfig(){let packageJson=this.retrievePackageJson();this.writePackageJson({...packageJson,eslintConfig:{...packageJson.eslintConfig,overrides:[...packageJson.eslintConfig?.overrides||[],{files:["**/*.stories.*"],rules:{"import/no-anonymous-default-export":"off"}}]}})}addScripts(scripts){let packageJson=this.retrievePackageJson();this.writePackageJson({...packageJson,scripts:{...packageJson.scripts,...scripts}})}addPackageResolutions(versions){let packageJson=this.retrievePackageJson(),resolutions=this.getResolutions(packageJson,versions);this.writePackageJson({...packageJson,...resolutions})}executeCommand(command,args,stdio,cwd,ignoreError){let commandResult=spawnSync(command,args,{cwd:cwd??this.cwd,stdio:stdio??"pipe",encoding:"utf-8",shell:!0});if(commandResult.status!==0&&ignoreError!==!0)throw new Error(commandResult.stderr??"");return commandResult.stdout??""}};import path3 from"path";import{sync as spawnSync2}from"cross-spawn";import{sync as findUpSync}from"find-up";import sort from"semver/functions/sort";import{platform}from"os";var NPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="npm"}initPackageJson(){return this.executeCommand("npm",["init","-y"])}getRunStorybookCommand(){return"npm run storybook"}getRunCommand(command){return`npm run ${command}`}getNpmVersion(){return this.executeCommand("npm",["--version"])}getInstallArgs(){return this.installArgs||(this.installArgs=[]),this.installArgs}runPackageCommand(command,args,cwd){return this.executeCommand("npm",["exec","--",command,...args],void 0,cwd)}findInstallations(){let pipeToNull=platform()==="win32"?"2>NUL":"2>/dev/null",commandResult=this.executeCommand("npm",["ls","--json","--depth=99",pipeToNull],void 0,void 0,!0);try{let parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{return}}getResolutions(packageJson,versions){return{overrides:{...packageJson.overrides,...versions}}}runInstall(){this.executeCommand("npm",["install",...this.getInstallArgs()],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("npm",["install",...this.getInstallArgs(),...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("npm",["uninstall",...this.getInstallArgs(),...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("npm",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using npm`)}}mapDependencies(input){let acc={},existingVersions={},duplicatedDependencies={},recurse=([name,packageInfo])=>{if(!name||!name.includes("storybook"))return;let value={version:packageInfo.version,location:""};existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=sort([...existingVersions[name]||[],value.version]),existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),packageInfo.dependencies&&Object.entries(packageInfo.dependencies).forEach(recurse)};return Object.entries(input.dependencies).forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"npm ls --depth=1"}}};import{pathExistsSync}from"fs-extra";var PNPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="pnpm"}detectWorkspaceRoot(){let pnpmWorkspaceYaml=`${process.cwd()}/pnpm-workspace.yaml`;return pathExistsSync(pnpmWorkspaceYaml)}initPackageJson(){return this.executeCommand("pnpm",["init","-y"])}getRunStorybookCommand(){return"pnpm run storybook"}getRunCommand(command){return`pnpm run ${command}`}getPnpmVersion(){return this.executeCommand("pnpm",["--version"])}getInstallArgs(){return this.installArgs||(this.installArgs=[],this.detectWorkspaceRoot()&&this.installArgs.push("-w")),this.installArgs}runPackageCommand(command,args,cwd){return this.executeCommand("pnpm",["exec",command,...args],void 0,cwd)}findInstallations(pattern){let commandResult=this.executeCommand("pnpm",["list",pattern.map(p=>`"${p}"`).join(" "),"--json","--depth=99"]);try{let parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{return}}getResolutions(packageJson,versions){return{overrides:{...packageJson.overrides,...versions}}}runInstall(){this.executeCommand("pnpm",["install",...this.getInstallArgs()],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("pnpm",["add",...args,...this.getInstallArgs()],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("pnpm",["remove",...args,...this.getInstallArgs()],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("pnpm",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using pnpm`)}}mapDependencies(input){let acc={},existingVersions={},duplicatedDependencies={},items=input.reduce((curr,item)=>{let{devDependencies,dependencies,peerDependencies}=item,allDependencies={...devDependencies,...dependencies,...peerDependencies};return Object.assign(curr,allDependencies)},{}),recurse=([name,packageInfo])=>{if(!name||!name.includes("storybook"))return;let value={version:packageInfo.version,location:""};existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),packageInfo.dependencies&&Object.entries(packageInfo.dependencies).forEach(recurse)};return Object.entries(items).forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"pnpm list --depth=1"}}};var parsePackageData=(packageName="")=>{let[first,second,third]=packageName.trim().split("@"),version=(third||second).replace("npm:","");return{name:third?`@${second}`:first,value:{version,location:""}}};var Yarn2Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn2"}getInstallArgs(){return this.installArgs||(this.installArgs=[]),this.installArgs}initPackageJson(){return this.executeCommand("yarn",["init"])}getRunStorybookCommand(){return"yarn storybook"}getRunCommand(command){return`yarn ${command}`}runPackageCommand(command,args,cwd){return this.executeCommand("yarn",[command,...args],void 0,cwd)}findInstallations(pattern){let commandResult=this.executeCommand("yarn",["info","--name-only","--recursive",pattern.map(p=>`"${p}"`).join(" "),`"${pattern}"`]);try{return this.mapDependencies(commandResult)}catch{return}}getResolutions(packageJson,versions){return{resolutions:{...packageJson.resolutions,...versions}}}runInstall(){this.executeCommand("yarn",["install",...this.getInstallArgs()],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("yarn",["add",...this.getInstallArgs(),...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("yarn",["remove",...this.getInstallArgs(),...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let field=fetchAllVersions?"versions":"version",args=["--fields",field,"--json"],commandResult=this.executeCommand("yarn",["npm","info",packageName,...args]);try{return JSON.parse(commandResult)[field]}catch{throw new Error(`Unable to find versions of ${packageName} using yarn 2`)}}mapDependencies(input){let lines=input.split(`
|
|
17
|
-
`),acc={},existingVersions={},duplicatedDependencies={};return lines.forEach(packageName=>{if(!packageName||!packageName.includes("storybook"))return;let{name,value}=parsePackageData(packageName.replaceAll('"',""));existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name]))}),{dependencies:acc,duplicatedDependencies,infoCommand:"yarn why"}}};var Yarn1Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn1"}getInstallArgs(){return this.installArgs||(this.installArgs=["--ignore-workspace-root-check"]),this.installArgs}initPackageJson(){return this.executeCommand("yarn",["init","-y"])}getRunStorybookCommand(){return"yarn storybook"}getRunCommand(command){return`yarn ${command}`}runPackageCommand(command,args,cwd){return this.executeCommand("yarn",[command,...args],void 0,cwd)}findInstallations(pattern){let commandResult=this.executeCommand("yarn",["list","--pattern",pattern.map(p=>`"${p}"`).join(" "),"--recursive","--json"]);try{let parsedOutput=JSON.parse(commandResult);return this.mapDependencies(parsedOutput)}catch{return}}getResolutions(packageJson,versions){return{resolutions:{...packageJson.resolutions,...versions}}}runInstall(){this.executeCommand("yarn",["install",...this.getInstallArgs()],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("yarn",["add",...this.getInstallArgs(),...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("yarn",["remove",...this.getInstallArgs(),...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("yarn",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.type==="inspect")return parsedOutput.data;throw new Error(`Unable to find versions of ${packageName} using yarn`)}catch{throw new Error(`Unable to find versions of ${packageName} using yarn`)}}mapDependencies(input){if(input.type==="tree"){let{trees}=input.data,acc={},existingVersions={},duplicatedDependencies={},recurse=tree=>{let{children}=tree,{name,value}=parsePackageData(tree.name);!name||!name.includes("storybook")||(existingVersions[name]?.includes(value.version)||(acc[name]?acc[name].push(value):acc[name]=[value],existingVersions[name]=[...existingVersions[name]||[],value.version],existingVersions[name].length>1&&(duplicatedDependencies[name]=existingVersions[name])),children.forEach(recurse))};return trees.forEach(recurse),{dependencies:acc,duplicatedDependencies,infoCommand:"yarn why"}}throw new Error("Something went wrong while parsing yarn output")}};var NPM_LOCKFILE="package-lock.json",PNPM_LOCKFILE="pnpm-lock.yaml",YARN_LOCKFILE="yarn.lock",JsPackageManagerFactory=class{static getPackageManager({force}={},cwd){if(force==="npm")return new NPMProxy({cwd});if(force==="pnpm")return new PNPMProxy({cwd});if(force==="yarn1")return new Yarn1Proxy({cwd});if(force==="yarn2")return new Yarn2Proxy({cwd});let yarnVersion=getYarnVersion(cwd),closestLockfilePath=findUpSync([YARN_LOCKFILE,PNPM_LOCKFILE,NPM_LOCKFILE],{cwd}),closestLockfile=closestLockfilePath&&path3.basename(closestLockfilePath),hasNPMCommand=hasNPM(cwd),hasPNPMCommand=hasPNPM(cwd);if(yarnVersion&&(closestLockfile===YARN_LOCKFILE||!hasNPMCommand&&!hasPNPMCommand))return yarnVersion===1?new Yarn1Proxy({cwd}):new Yarn2Proxy({cwd});if(hasPNPMCommand&&closestLockfile===PNPM_LOCKFILE)return new PNPMProxy({cwd});if(hasNPMCommand)return new NPMProxy({cwd});throw new Error("Unable to find a usable package manager within NPM, PNPM, Yarn and Yarn 2")}};function hasNPM(cwd){return spawnSync2("npm",["--version"],{cwd,shell:!0}).status===0}function hasPNPM(cwd){return spawnSync2("pnpm",["--version"],{cwd,shell:!0}).status===0}function getYarnVersion(cwd){let yarnVersionCommand=spawnSync2("yarn",["--version"],{cwd,shell:!0});if(yarnVersionCommand.status!==0)return;let yarnVersion=yarnVersionCommand.output.toString().replace(/,/g,"").replace(/"/g,"");return/^1\.+/.test(yarnVersion)?1:2}function parseList(str){return str.split(",").map(item=>item.trim()).filter(item=>item.length>0)}function getEnvConfig(program,configEnv){Object.keys(configEnv).forEach(fieldName=>{let envVarName=configEnv[fieldName],envVarValue=process.env[envVarName];envVarValue&&(program[fieldName]=envVarValue)})}export{__require,externalFrameworks,SUPPORTED_RENDERERS,supportedTemplates,unsupportedTemplate,installableProjectTypes,versions_default,getCliDir,getBowerJson,readFileAsJson,writeFileAsJson,commandLog,paddedLog,codeLog,getBabelDependencies,copyTemplate,copyTemplateFiles,getStorybookVersionSpecifier,isNxProject,useNpmWarning,HandledError,getPackageDetails,JsPackageManager,JsPackageManagerFactory,parseList,getEnvConfig};
|