@storybook/angular
Version:
Storybook for Angular: Develop, document, and test UI components in isolation
32 lines (26 loc) • 6.99 kB
JavaScript
var common = require('storybook/internal/common');
var coreServer = require('storybook/internal/core-server');
var telemetry = require('storybook/internal/telemetry');
var architect = require('@angular-devkit/architect');
var path2 = require('path');
require('fs/promises');
var fs = require('fs');
var process = require('process');
var url = require('url');
var rxjs = require('rxjs');
var operators = require('rxjs/operators');
var nodeLogger = require('storybook/internal/node-logger');
var tsDedent = require('ts-dedent');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var path2__default = /*#__PURE__*/_interopDefault(path2);
var fs__default = /*#__PURE__*/_interopDefault(fs);
var process__default = /*#__PURE__*/_interopDefault(process);
var walkUp=function*(path3){for(path3=path2.resolve(path3);path3;){yield path3;let pp=path2.dirname(path3);if(pp===path3)break;path3=pp;}};function fileExistsSync(path3){try{return fs.statSync(path3).isFile()}catch{return !1}}function findPackagePathSync(cwd){for(let path3 of walkUp(cwd)){let packagePath=path2.resolve(path3,"package.json");if(fileExistsSync(packagePath))return packagePath}return null}function findPackageSync(cwd){let packagePath=findPackagePathSync(cwd);if(!packagePath)return null;try{let source=fs.readFileSync(packagePath,{encoding:"utf8"});return JSON.parse(source)}catch{return null}}var typeMappings={directory:"isDirectory",file:"isFile"};function checkType(type){if(!Object.hasOwnProperty.call(typeMappings,type))throw new Error(`Invalid type specified: ${type}`)}var matchType=(type,stat2)=>stat2[typeMappings[type]](),toPath=urlOrPath=>urlOrPath instanceof URL?url.fileURLToPath(urlOrPath):urlOrPath;function locatePathSync(paths,{cwd=process__default.default.cwd(),type="file",allowSymlinks=!0}={}){checkType(type),cwd=toPath(cwd);let statFunction=allowSymlinks?fs__default.default.statSync:fs__default.default.lstatSync;for(let path_ of paths)try{let stat2=statFunction(path2__default.default.resolve(cwd,path_),{throwIfNoEntry:!1});if(!stat2)continue;if(matchType(type,stat2))return path_}catch{}}function toPath2(urlOrPath){return urlOrPath instanceof URL?url.fileURLToPath(urlOrPath):urlOrPath}var findUpStop=Symbol("findUpStop");function findUpMultipleSync(name,options={}){let directory=path2__default.default.resolve(toPath2(options.cwd)??""),{root}=path2__default.default.parse(directory),stopAt=path2__default.default.resolve(directory,toPath2(options.stopAt)??root),limit=options.limit??Number.POSITIVE_INFINITY,paths=[name].flat(),runMatcher=locateOptions=>{if(typeof name!="function")return locatePathSync(paths,locateOptions);let foundPath=name(locateOptions.cwd);return typeof foundPath=="string"?locatePathSync([foundPath],locateOptions):foundPath},matches=[];for(;;){let foundPath=runMatcher({...options,cwd:directory});if(foundPath===findUpStop||(foundPath&&matches.push(path2__default.default.resolve(directory,foundPath)),directory===stopAt||matches.length>=limit))break;directory=path2__default.default.dirname(directory);}return matches}function findUpSync(name,options={}){return findUpMultipleSync(name,{...options,limit:1})[0]}var printErrorDetails=error=>{nodeLogger.instance.heading="",error instanceof Error?error.error?nodeLogger.logger.error(error.error):error.stats&&error.stats.compilation.errors?error.stats.compilation.errors.forEach(e=>nodeLogger.logger.plain(e)):nodeLogger.logger.error(error):error.compilation?.errors&&error.compilation.errors.forEach(e=>nodeLogger.logger.plain(e)),nodeLogger.logger.line();},errorSummary=error=>error.close?tsDedent.dedent`
FATAL broken build!, will close the process,
Fix the error below and restart storybook.
`:tsDedent.dedent`
Broken build, fix the error above.
You may need to refresh the browser.
`;var hasTsConfigArg=args=>args.indexOf("-p")!==-1,hasOutputArg=args=>args.indexOf("-d")!==-1||args.indexOf("--output")!==-1,toRelativePath=pathToTsConfig=>path2.isAbsolute(pathToTsConfig)?path2.relative(".",pathToTsConfig):pathToTsConfig,runCompodoc=({compodocArgs,tsconfig},context)=>new rxjs.Observable(observer=>{let tsConfigPath=toRelativePath(tsconfig),finalCompodocArgs=[...hasTsConfigArg(compodocArgs)?[]:["-p",tsConfigPath],...hasOutputArg(compodocArgs)?[]:["-d",`${context.workspaceRoot||"."}`],...compodocArgs],packageManager=common.JsPackageManagerFactory.getPackageManager();try{let stdout=packageManager.runPackageCommandSync("compodoc",finalCompodocArgs,context.workspaceRoot,"inherit");context.logger.info(stdout),observer.next(),observer.complete();}catch(e){context.logger.error(e),observer.error();}});telemetry.addToGlobalContext("cliVersion",common.versions.storybook);var commandBuilder=(options,context)=>rxjs.from(setup(options,context)).pipe(operators.switchMap(({tsConfig})=>{let docTSConfig=findUpSync("tsconfig.doc.json",{cwd:options.configDir,stopAt:common.getProjectRoot()});return (options.compodoc?runCompodoc({compodocArgs:options.compodocArgs,tsconfig:docTSConfig??tsConfig},context).pipe(operators.mapTo({tsConfig})):rxjs.of({})).pipe(operators.mapTo({tsConfig}))}),operators.map(({tsConfig})=>{common.getEnvConfig(options,{staticDir:"SBCONFIG_STATIC_DIR",outputDir:"SBCONFIG_OUTPUT_DIR",configDir:"SBCONFIG_CONFIG_DIR"});let{browserTarget,stylePreprocessorOptions,styles,configDir,docs,loglevel,test,outputDir,quiet,enableProdMode=!0,webpackStatsJson,statsJson,debugWebpack,disableTelemetry,assets,previewUrl,sourceMap=!1,preserveSymlinks=!1,experimentalZoneless=!1}=options;return {packageJson:findPackageSync(__dirname),configDir,...docs?{docs}:{},loglevel,outputDir,test,quiet,enableProdMode,disableTelemetry,angularBrowserTarget:browserTarget,angularBuilderContext:context,angularBuilderOptions:{...stylePreprocessorOptions?{stylePreprocessorOptions}:{},...styles?{styles}:{},...assets?{assets}:{},sourceMap,preserveSymlinks,experimentalZoneless},tsConfig,webpackStatsJson,statsJson,debugWebpack,previewUrl}}),operators.switchMap(standaloneOptions=>runInstance({...standaloneOptions,mode:"static"})),operators.map(()=>({success:!0}))),build_storybook_default=architect.createBuilder(commandBuilder);async function setup(options,context){let browserOptions,browserTarget;return options.browserTarget&&(browserTarget=architect.targetFromTargetString(options.browserTarget),browserOptions=await context.validateOptions(await context.getTargetOptions(browserTarget),await context.getBuilderNameForTarget(browserTarget))),{tsConfig:options.tsConfig??findUpSync("tsconfig.json",{cwd:options.configDir,stopAt:common.getProjectRoot()})??browserOptions.tsConfig}}function runInstance(options){return rxjs.from(coreServer.withTelemetry("build",{cliOptions:options,presetOptions:{...options,corePresets:[],overridePresets:[]},printError:printErrorDetails},()=>coreServer.buildStaticStandalone(options))).pipe(operators.catchError(error=>rxjs.throwError(errorSummary(error))))}
module.exports = build_storybook_default;
;