Best JavaScript code snippet using storybook-root
projinfo.js
Source:projinfo.js
1#!/usr/bin/env node2// Displays some basic information about the project in this directory.3//4// Example output:5//6// msikma-lib-projects (1.0.0) <https://github.com/msikma/msikma-lib-projects>7// Monorepo container for msikma-lib-projects, containing a number of client libraries8// Last commit: 2018-10-14 22:29:35 +0200 (63 minutes ago)9//10// lerna | bootstrap (20 packages) |11// yarn â run compile â bin buyee-cli â doc readme.md12// â dev â marktplaats-cli â license.md13// â â mlib â todo.md14//15// See the readme.md file for setting up a trigger so this runs automatically on dir change.16const chalk = require('chalk')17const { getPkgData, getMonorepoData, getZeitData } = require('./lib/readcfg')18const { getDocs, getBins, getCommit } = require('./lib/files')19const { strLimit } = require('./lib/str')20// Vertical line: U+2502 BOX DRAWINGS LIGHT VERTICAL21const LINE = ' \u2502 '22// Pretty names for the type slugs.23const TYPES = {24 python: 'Python',25 php: 'PHP',26 node: 'Node'27}28/**29 * Main script entry point. Reads data from the current directory and prints project info.30 * Currently only Node packages are supported.31 */32const main = () => {33 // Load basic project info from JSON files.34 const cwd = process.cwd()35 const pkgData = getPkgData(cwd)36 //console.log(pkgData)37 // Exit if we couldn't find any project info to print.38 if (!pkgData.isValid) return39 // If this is a valid project, read the rest of the data and print the project overview.40 const projectData = {41 ...pkgData,42 details: {43 ...getZeitData(cwd)44 },45 ...getMonorepoData(cwd, pkgData),46 ...getDocs(cwd),47 ...getBins(cwd, pkgData),48 ...getCommit()49 }50 return reportProject(projectData, LINE)51}52/** Prints project overview. */53const reportProject = (projectData, separator) => {54 const { commitDateISO, commitDateRel, commitBranch, commitCommits, commitIsInitial, commitExistsButIsEmpty, type, otherFiles, allPackages, docs, bins, packageManager, isMonorepo, monorepoType, details } = projectData55 const { name, version, pythonVersion, description, homepage, scripts } = projectData.configData56 // Fall back to the Lerna version if the package doesn't have one.57 const lernaVersion = projectData.lernaData ? projectData.lernaData.version : null58 // Print the header and last commit info if available.59 printHeader(name, version || lernaVersion, type, pythonVersion, description, homepage, commitDateISO, commitDateRel, commitBranch, commitCommits, commitIsInitial, commitExistsButIsEmpty, details)60 // Now print the package scripts, binaries and doc files.61 const rows = getColumns(allPackages || [], scripts ? Object.keys(scripts) : [], bins || [], docs, type, packageManager, otherFiles, pythonVersion, isMonorepo, monorepoType, details)62 if (rows.length) {63 printTable(rows, separator)64 // Finally, end with one extra blank line.65 console.log('')66 }67}68/** Returns a list of what items to print in the three columns. */69const getColumns = (packages, scripts, bins, docs, type, packageManager, otherFiles, pythonVersion, isMonorepo, monorepoType, details) => {70 const rows = []71 // In cases where more details about the package manager are needed,72 // for example in a monorepo, the package manager name will not73 // be printed on the first command row.74 let addPackageManager = true75 if (packageManager === 'python') {76 if (otherFiles['requirements.txt']) {77 rows.push([78 chalk.blue,79 'head',80 `pip${pythonVersion === 3 ? '3' : ''}`,81 `install -r requirements.txt`82 ])83 addPackageManager = false84 }85 else if (otherFiles['setup.py']) {86 rows.push([87 chalk.blue,88 'head',89 `python${pythonVersion === 3 ? '3' : ''}`,90 `setup.py install`91 ])92 addPackageManager = false93 }94 else if (otherFiles['setup.cfg']) {95 rows.push([96 chalk.blue,97 'head',98 `pip${pythonVersion === 3 ? '3' : ''}`,99 `install -e .`100 ])101 addPackageManager = false102 }103 }104 if (packageManager === 'php') {105 if (otherFiles['composer.json']) {106 rows.push([107 chalk.blue,108 'head',109 `composer`,110 `install`111 ])112 addPackageManager = false113 }114 }115 if (type === 'node') {116 if (isMonorepo) {117 rows.push([118 chalk.blue,119 'head',120 monorepoType,121 `${monorepoType === 'yarn' ? 'install' : 'bootstrap'} (${packages.length} packages)`122 ])123 addPackageManager = false124 }125 if (details.isNow) {126 rows.push([127 chalk.blue,128 'head',129 'now',130 'deploy'131 ])132 rows.push([133 chalk.blue,134 'head',135 '',136 'dev'137 ])138 addPackageManager = true139 }140 }141 // Determine the longest list out of run, bin, doc.142 const longest = [scripts, bins, docs].reduce((max, curr) => Math.max(max, curr.length), 0)143 // Create the column lists. Missing items are set to null.144 for (let a = 0; a < longest; ++a) {145 const run = scripts[a]146 const bin = bins[a]147 const doc = docs[a]148 rows.push([chalk.yellow, 'cmd', addPackageManager && a === 0 ? packageManager : '', run ? run : null, bin ? bin : null, doc ? doc : null])149 }150 return rows151}152/** Returns the prefix to use for a long column. */153const _colPrefix = (n, first, header) => {154 if (header) return ''155 if (!first) return ' '156 if (n === 0) return 'run '157 if (n === 1) return 'bin '158 if (n === 2) return 'doc '159}160/** Returns the color function to use for a long column. */161const _colColor = (n) => {162 if (n === 0) return chalk.blue163 if (n === 1) return chalk.magenta164 if (n === 2) return chalk.red165}166/** Prints a single row. */167const printRow = (smallCol, smallColLength, largeCols, largeColLength, first, header, color, separator) => {168 const small = color(strLimit(smallCol ? smallCol : '', smallColLength, 'right'))169 const large = largeCols.map((c, n) => `${color(_colPrefix(n, first, header))}${_colColor(n)(strLimit(c ? c : (first ? '-' : ''), header ? largeColLength : largeColLength - 4, 'left'))}`)170 // Add an extra separator if this is a header with one column.171 const extraSeparator = header && largeCols.length === 1172 const separatorColor = color(`${separator}`)173 const cols = [small, ...large]174 const str = cols.join(separatorColor) + `${extraSeparator ? separatorColor : ''}`175 console.log(`${str}`)176}177/**178 * Prints the main project info table, consisting of project packages, scripts, bin and doc files.179 *180 * The table is printed using a table specification, which is produced by getColumns().181 * It has header rows and command rows. It should look like the following:182 *183 * [184 * [chalk.blue, 'head', 'yarn', 'install (20 packages)']185 * [chalk.yellow, 'cmd', '', 'compile', 'buyee-cli', 'readme.md'],186 * [chalk.yellow, 'cmd', '', 'dev', 'marktplaats-cli', 'license.md'],187 * [chalk.yellow, 'cmd', '', null, 'mlib', 'todo.md']188 * ]189 *190 * Null values are a dash if they appear on the first line, an empty string otherwise.191 * The column prefixes (run, bin, doc) are added automatically.192 */193const printTable = (rows, separator) => {194 const smallMin = 3195 const largeMin = 23196 // Calculate the lengths of the columns. Defaults are 3 and 23 (not counting padding).197 const smallColLength = rows.reduce((l, curr) => Math.max((curr[2] || '').length, l), smallMin)198 const largeColLength = rows.reduce((l, curr) => Math.max((curr[3] || '').length, (curr[4] || '').length, (curr[5] || '').length, l), largeMin)199 let firstCmd = true200 for (let a = 0; a < rows.length; ++a) {201 const row = rows[a]202 const color = row[0]203 const isHead = row[1] === 'head'204 const small = row[2]205 const large = row.slice(3)206 printRow(small, smallColLength, large, largeColLength, firstCmd, isHead, color, separator)207 if (!isHead && firstCmd) firstCmd = false208 }209}210/**211 * Prints a project header with basic package info and commit date. E.g.:212 *213 * project-name (1.0.0, Python) <https://github.com/foo/bar>214 * Project description goes here215 * 2018-12-13 18:19:38 +0100 (4 months ago)216 * Deployment alias: nextjs-mysql.now.sh217 *218 * Includes leading and trailing linebreaks. Sections that are not relevant for219 * a specific project are not included.220 */221const printHeader = (name, version, type, typeVersion, description, homepage, dateISO, dateRel, branch, commits, isInitial, isEmpty, details) => {222 const typeString = [223 ...(version ? [version] : []),224 ...(type ? [`${TYPES[type]}${typeVersion ? ` ${typeVersion}` : ''}`] : [])225 ].join(', ')226 const commitString = [227 ...(branch ? [`Branch: ${branch}-${commits}${isInitial ? chalk.yellowBright(' (initial commit)') : ''}`] : []),228 `${branch ? 'l' : 'L'}ast commit: ${dateISO} (${dateRel})`229 ].join('; ')230 console.log([231 `\n`,232 name ? chalk.red(name) : 'Unknown project',233 version || type ? chalk.magenta(` (${typeString})`) : ``,234 homepage ? chalk.blue(` <${chalk.underline(homepage)}>`) : ``,235 description ? `\n${chalk.green(description)}` : ``,236 isEmpty && !dateISO ? `\n${chalk.yellowBright('Git repo exists but has no commits')}` : ``,237 dateISO ? `\n${chalk.yellow(commitString)}` : ``,238 details.isNow && details.nowAlias ? `\n${chalk.blue(`Deployment alias: ${details.nowAlias}`)}` : ``,239 '\n'240 ].join(''))241}242// Run main entry point....
get-monorepo-type.ts
Source:get-monorepo-type.ts
1import fs from 'fs-extra';2import path from 'path';3import type { PackageJson } from '@storybook/core-common';4import { getProjectRoot } from '@storybook/core-common';5export const monorepoConfigs = {6 Nx: 'nx.json',7 Turborepo: 'turbo.json',8 Lerna: 'lerna.json',9 Rush: 'rush.json',10 Lage: 'lage.config.json',11} as const;12export type MonorepoType = keyof typeof monorepoConfigs | 'Workspaces' | undefined;13export const getMonorepoType = (): MonorepoType => {14 const projectRootPath = getProjectRoot();15 if (!projectRootPath) return undefined;16 const keys = Object.keys(monorepoConfigs) as (keyof typeof monorepoConfigs)[];17 const monorepoType: MonorepoType = keys.find((monorepo) => {18 const configFile = path.join(projectRootPath, monorepoConfigs[monorepo]);19 return fs.existsSync(configFile);20 }) as MonorepoType;21 if (monorepoType) {22 return monorepoType;23 }24 if (!fs.existsSync(path.join(projectRootPath, 'package.json'))) {25 return undefined;26 }27 const packageJson = fs.readJsonSync(path.join(projectRootPath, 'package.json')) as PackageJson;28 if (packageJson?.workspaces) {29 return 'Workspaces';30 }31 return undefined;...
repoInfoTypes.ts
Source:repoInfoTypes.ts
1import { PackageJsonLoader, RushJsonLoader, LernaJsonLoader } from './configTypes';2/**3 * callback function for walking to the root. Returning true will cancel the walk at4 * that point, a false or no return result will keep walking.5 */6export type FindRootCallback = (cwd: string) => boolean | void;7/**8 * types of supported monorepos9 */10export type MonorepoType = 'lerna' | 'rush';11/**12 * Info for the repository13 */14export interface RepoInfo {15 /** root of the enlistment */16 rootPath: string;17 /** loader for package JSON */18 getPackageJson: PackageJsonLoader;19 /** if it is a monorepo denotes whether it is rush or lerna based */20 monorepo?: MonorepoType;21 /** loader function to get the parsed rush json */22 getRushJson?: RushJsonLoader;23 /** loader function to get the parsed lerna json */24 getLernaJson?: LernaJsonLoader;25}26/**27 * Options for querying repository info28 */29export interface RepoInfoOptions {30 /** current working directory to start from */31 cwd?: string;...
Using AI Code Generation
1const storybookRoot = require('storybook-root');2console.log(storybookRoot.monorepoType());3const storybookRoot = require('storybook-root/lib');4console.log(storybookRoot.monorepoType());5const monorepoType = require('storybook-root/lib/monorepoType');6console.log(monorepoType());7const monorepoType = require('storybook-root/lib/monorepoType');8console.log(monorepoType());9const monorepoType = require('storybook-root/lib/monorepoType');10console.log(monorepoType());11const monorepoType = require('storybook-root/lib/monorepoType');12console.log(monorepoType());13const monorepoType = require('storybook-root/lib/monorepoType');14console.log(monorepoType());15const monorepoType = require('storybook-root/lib/monorepoType');16console.log(monorepoType());17const monorepoType = require('storybook-root/lib/monorepoType');18console.log(monorepoType());19const monorepoType = require('storybook-root/lib/monorepoType');20console.log(monorepoType());21const monorepoType = require('storybook-root/lib/monorepoType');22console.log(monorepoType());23const monorepoType = require('storybook-root/lib/monorepoType');24console.log(monorepoType());
Using AI Code Generation
1import { monorepoType } from 'storybook-root';2console.log(monorepoType());3import { monorepoType } from 'storybook-root';4console.log(monorepoType());5import { monorepoType } from 'storybook-root';6console.log(monorepoType());7import { monorepoType } from 'storybook-root';8console.log(monorepoType());9import { monorepoType } from 'storybook-root';10console.log(monorepoType());11import { monorepoType } from 'storybook-root';12console.log(monorepoType());13import { monorepoType } from 'storybook-root';14console.log(monorepoType());15import { monorepoType } from 'storybook-root';16console.log(monorepoType());17import { monorepoType } from 'storybook-root';18console.log(monorepoType());19import { monorepoType } from 'storybook-root';20console.log(monorepoType());21import { monorepoType } from 'storybook-root';22console.log(monorepoType());23import { monorepoType } from 'storybook-root';24console.log(monorepoType());25import { monorepoType } from 'storybook-root';26console.log(monorepoType());
Using AI Code Generation
1import { monorepoType } from 'storybook-root';2import { monorepoType } from 'storybook-root/lib/utils';3import { monorepoType } from 'storybook-root/lib/utils/index';4import { monorepoType } from 'storybook-root/utils';5import { monorepoType } from 'storybook-root/utils/index';6import { monorepoType } from 'storybook-root/utils/index.js';7import { monorepoType } from 'storybook-root/utils/index.ts';8import { monorepoType } from 'storybook-root/utils/index.tsx';9import { monorepoType } from 'storybook-root/utils/index.jsx';10import { monorepoType } from 'storybook-root/utils/index.mjs';11import { monorepoType } from 'storybook-root/utils/index.cjs';12import { monorepoType } from 'storybook-root/utils/index.json';13import { monorepoType } from 'storybook-root/utils/index.css';14import { monorepoType } from 'storybook-root/utils/index.scss';15import { monorepoType } from 'storybook-root/utils/index.less';
Using AI Code Generation
1import { monorepoType } from 'storybook-root';2import { monorepoType } from '../../../../storybook-root';3import { monorepoType } from 'storybook-root';4import { monorepoType } from '../../../../storybook-root';5import { monorepoType } from 'storybook-root';6import { monorepoType } from '../../../../storybook-root';7import { monorepoType } from 'storybook-root';8import { monorepoType } from '../../../../storybook-root';9import { monorepoType } from 'storybook-root';10import { monorepoType } from '../../../../storybook-root';11import { monorepoType } from 'storybook-root';12import { monorepoType } from '../../../../storybook-root';13import { monorepoType } from 'storybook-root';14import { monorepoType } from '../../../../storybook-root';15import { monorepoType } from 'storybook-root';16import { monorepoType } from '../../../../storybook-root';17import { monorepoType } from 'storybook-root';18import { monorepoType } from '../../../../
Using AI Code Generation
1import { monorepoType } from 'storybook-root'2const type = monorepoType()3console.log(type)4const { monorepoType } = require('storybook-root')5const type = monorepoType()6console.log(type)7import { monorepoType } from 'storybook-root'8const type = monorepoType()9console.log(type)10const { monorepoType } = require('storybook-root')11const type = monorepoType()12console.log(type)13import { monorepoType } from 'storybook-root'14const type = monorepoType()15console.log(type)16import { monorepoType } from 'storybook-root'17const type = monorepoType()18console.log(type)19import { monorepoType } from 'storybook-root'20const type = monorepoType()21console.log(type)22import { monorepoType } from 'storybook-root'23const type = monorepoType()24console.log(type)25import { monorepoType } from 'storybook-root'26const type = monorepoType()27console.log(type)28import { monorepoType } from 'storybook-root'29const type = monorepoType()30console.log(type)31import { monorepoType } from 'storybook-root'32const type = monorepoType()33console.log(type)
Using AI Code Generation
1import { monorepoType } from "storybook-root";2const monorepoType = monorepoType();3import { monorepoType } from "storybook-root";4const monorepoType = monorepoType();5import { monorepoType } from "storybook-root";6const monorepoType = monorepoType();7import { monorepoType } from "storybook-root";8const monorepoType = monorepoType();9import { monorepoType } from "storybook-root";10const monorepoType = monorepoType();11import { monorepoType } from "storybook-root";12const monorepoType = monorepoType();13import { monorepoType } from "storybook-root";14const monorepoType = monorepoType();15import { monorepoType } from "storybook-root";16const monorepoType = monorepoType();
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!