@patternfly/create-element
Advanced tools
Comparing version 1.0.0 to 1.0.1
import type { GenerateElementOptions } from '../main'; | ||
export declare class PackageJSONError extends Error { | ||
} | ||
/** | ||
@@ -3,0 +5,0 @@ * Generate an Element |
import Case from 'case'; | ||
import Chalk from 'chalk'; | ||
import prompts from 'prompts'; | ||
import { execa } from 'execa'; | ||
import { fileURLToPath } from 'url'; | ||
import { dirname, join, relative } from 'path'; | ||
import { $ } from 'execa'; | ||
import { fileURLToPath } from 'node:url'; | ||
import { dirname, join, relative } from 'node:path'; | ||
import * as path from 'node:path'; | ||
import { exists, mkdirp, processTemplate, readFile, writeFile } from './files.js'; | ||
import { memoize } from './fp.js'; | ||
const { green, greenBright } = Chalk; | ||
const { blue, green, greenBright, red, yellow } = Chalk; | ||
const __dirname = dirname(fileURLToPath(import.meta.url)); | ||
const $$ = $({ stderr: 'inherit' }); | ||
/** | ||
@@ -115,36 +117,22 @@ * Available filenames. | ||
if (!options.silent) { | ||
console.log(`✏️ Wrote ${green(relative(options.directory, PATH))}`); | ||
console.log(` ✏️ ${green(relative(options.directory, PATH))}`); | ||
} | ||
} | ||
async function writeElementFiles(options) { | ||
if (!await shouldWriteToDir(options)) { | ||
return; | ||
async function getElementPackageJsonPath(options) { | ||
const abspath = getComponentAbsPath(options); | ||
const { root } = path.parse(abspath); | ||
let packageJsonPath; | ||
let currentdir = abspath; | ||
while (currentdir !== root && !packageJsonPath) { | ||
const possible = join(currentdir, 'package.json'); | ||
if (await exists(possible)) { | ||
packageJsonPath = possible; | ||
} | ||
else { | ||
currentdir = dirname(currentdir); | ||
} | ||
} | ||
if (!options.silent) { | ||
console.log(`\nCreating ${green(options.tagName)} in ${getComponentPathFromDirectoryOption(options)}\n`); | ||
} | ||
// $ mkdir -p /Users/alj/jazz-elements/elements/pf-jazz-hands | ||
await mkdirp(getComponentAbsPath(options)); | ||
for (const key of Object.keys(FileKey).sort()) { | ||
await writeComponentFile(key, options); | ||
} | ||
if (!options.silent) { | ||
console.log(`\n${greenBright('Done!')}`); | ||
} | ||
return packageJsonPath; | ||
} | ||
async function analyzeElement(options) { | ||
if (!options.silent) { | ||
console.log(`\nAnalyzing ${greenBright(options.tagName)}`); | ||
} | ||
const { stderr, stdout } = await execa('npm', ['run', 'analyze',], { | ||
all: true, | ||
cwd: options.directory, | ||
}); | ||
if (stderr) { | ||
console.log(stderr); | ||
throw new Error(`Could not analyze ${options.tagName}`); | ||
} | ||
else if (!options.silent) { | ||
console.log(stdout); | ||
} | ||
export class PackageJSONError extends Error { | ||
} | ||
@@ -155,15 +143,36 @@ /** | ||
export async function generateElement(options) { | ||
// ctrl-c | ||
const log = (...args) => void (!options?.silent && console.log(...args)); | ||
const start = performance.now(); | ||
if (!options || !options.tagName) { | ||
// ctrl-c | ||
return; | ||
} | ||
// Quit if trying to scaffold an element in an uninitialized non-monorepo | ||
if (!await exists(join(options.directory, 'package.json'))) { | ||
return console.log('‼️ No package.json found.', '� Scaffold a repository first'); | ||
else if (!await exists(join(options.directory, 'package.json'))) { | ||
// Quit if trying to scaffold an element in an uninitialized non-monorepo | ||
throw new PackageJSONError('‼️ No package.json found. � Scaffold a repository first'); | ||
} | ||
else if (!await shouldWriteToDir(options)) { | ||
return log(red `Skipping`, 'file write!'); | ||
} | ||
else { | ||
await writeElementFiles(options); | ||
analyzeElement; // skip this for now, come back to fix later | ||
const packageJsonPath = await getElementPackageJsonPath(options) ?? './**/package.json ./package.json'; | ||
if (!await exists(packageJsonPath)) { | ||
throw new PackageJSONError(`Could not find package at ${packageJsonPath}`); | ||
} | ||
log(`\nCreating ${green(options.tagName)} in ${getComponentPathFromDirectoryOption(options)}\n`); | ||
log(blue `Writing`, 'files...'); | ||
// $ mkdir -p /Users/alj/jazz-elements/elements/pf-jazz-hands | ||
await mkdirp(getComponentAbsPath(options)); | ||
for (const key of Object.keys(FileKey).sort()) { | ||
await writeComponentFile(key, options); | ||
} | ||
log(blue `Linting`, `${relative(options.directory, packageJsonPath)} for package exports...`); | ||
await $$ `npx eslint ${packageJsonPath} --fix`; | ||
log(blue `Analyzing`, 'elements...'); | ||
await $$ `npm run analyze`; | ||
const end = performance.now(); | ||
const seconds = (end - start) / 1000; | ||
log(`\n${greenBright `Done`} in ${yellow(seconds.toFixed(2))} seconds`); | ||
} | ||
} | ||
//# sourceMappingURL=element.js.map |
65
main.js
@@ -1,2 +0,2 @@ | ||
import { generateElement } from './generator/element.js'; | ||
import { generateElement, PackageJSONError } from './generator/element.js'; | ||
import Chalk from 'chalk'; | ||
@@ -9,28 +9,32 @@ import Yargs from 'yargs'; | ||
const b = Chalk.cyanBright; | ||
/** generated at https://dom111.github.io/image-to-ansi/ */ | ||
function banner() { | ||
console.log(`${Chalk.cyan(` | ||
${b('`qQQQQQQg.')} | ||
'${b('N@@@@@@@;')} | ||
7${b('g@@@@@@@S')} | ||
^QD${b('Q@@@@@@@|')} | ||
+QQQ${b('K@@@@@@@@i')} | ||
'jQQQQD${b('d@@@@@@@@X,')} | ||
,mQQQQQQQb${b('k@@@@@@@@@b+')} | ||
.;7qQQQQQQQQQD~;${b('8@@@@@@@@@8}^\'')} | ||
=77JyU%NQQQQQQQQQNi\` ${b('`cQ@@@@@@@@@@@BKauz|')} | ||
${b('%@@@@@@QQ#')}gDR&QDL. ${b('`iN@@@@@@@@@@@@@@Q')} | ||
${b('%@@@@@@@@@@@QK')}= ${b('+RQ@@@@@@@@@@@Q')} | ||
${b('%@@@@@@@@@@@@@@B7.')} \`?bQBRd%${b('NQQ@@@@@@Q')} | ||
${b('=7uaq#@@@@@@@@@@@Qz`')} \`|WQQQQQQQQQN%UyJ77? | ||
${b('.!Ig@@@@@@@@@B!')},qQQQQQQQQQbz;. | ||
${b('~A@@@@@@@@@X')}qQQQQQQQk^ | ||
${b(';D@@@@@@@@K')}DQQQQK; | ||
${b('*@@@@@@@@b')}NQQ* | ||
${b('=@@@@@@@Q')}dQ< | ||
${b('j@@@@@@@Wx')} | ||
${b('_@@@@@@@Q,')} | ||
${b('`bQQQQQQ%``')} | ||
console.log(`\x1b[49m \x1b[38;5;87;49m▄\x1b[38;5;87;48;5;87m▄\x1b[38;5;87;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;81;49m▄\x1b[38;5;81;48;5;87m▄▄\x1b[49m \x1b[38;5;81;48;5;87m▄\x1b[38;5;87;48;5;87m▄\x1b[38;5;81;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;81;49m▄\x1b[38;5;81;48;5;81m▄\x1b[49;38;5;81m▀\x1b[38;5;81;48;5;81m▄▄\x1b[49m \x1b[38;5;81;48;5;81m▄▄\x1b[49;38;5;81m▀\x1b[38;5;81;48;5;81m▄\x1b[38;5;81;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;81;49m▄\x1b[38;5;81;48;5;81m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;48;5;81m▄\x1b[38;5;81;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[38;5;81;48;5;81m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;81;49m▄\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;48;5;81m▄\x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[49;38;5;81m▀\x1b[49m \x1b[49;38;5;81m▀\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;81;49m▄\x1b[49m \x1b[38;5;81;49m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;80;49m▄\x1b[38;5;81;48;5;81m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;81;49m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;49m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;48;5;81m▄\x1b[38;5;81;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;81;49m▄\x1b[38;5;81;48;5;80m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;80;49m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;81;48;5;81m▄\x1b[49m \x1b[38;5;80;48;5;81m▄\x1b[49m \x1b[38;5;80;48;5;81m▄\x1b[49m \x1b[38;5;80;48;5;81m▄\x1b[49m \x1b[49;38;5;80m▀\x1b[38;5;80;49m▄\x1b[49m \x1b[49;38;5;81m▀\x1b[38;5;81;48;5;80m▄\x1b[38;5;80;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;80;49m▄\x1b[38;5;80;48;5;80m▄\x1b[49;38;5;81m▀\x1b[49m \x1b[38;5;74;49m▄\x1b[38;5;74;48;5;81m▄\x1b[49m \x1b[38;5;80;48;5;80m▄\x1b[49m \x1b[38;5;80;48;5;80m▄\x1b[49m \x1b[38;5;80;48;5;80m▄\x1b[49m \x1b[38;5;80;48;5;80m▄\x1b[49m \x1b[38;5;80;48;5;80m▄\x1b[38;5;75;49m▄\x1b[49m \x1b[49;38;5;80m▀\x1b[38;5;80;48;5;81m▄\x1b[38;5;80;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;74;49m▄\x1b[38;5;74;48;5;80m▄\x1b[49;38;5;80m▀\x1b[49m \x1b[38;5;74;49m▄\x1b[49;38;5;74m▀\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;74;49m▄\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;74;48;5;80m▄\x1b[38;5;74;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;74;49m▄\x1b[49;38;5;74m▀▀\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49;38;5;75m▀\x1b[49m \x1b[49;38;5;74m▀▀\x1b[38;5;74;49m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;74;49m▄\x1b[49;38;5;74m▀▀\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49;38;5;74m▀\x1b[49m \x1b[49;38;5;81m▀\x1b[49;38;5;74m▀\x1b[38;5;74;49m▄\x1b[49m \x1b[m | ||
\x1b[38;5;74;48;5;74m▄\x1b[49;38;5;74m▀\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;74;49m▄▄\x1b[49;38;5;74m▀\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;74;49m▄▄\x1b[49;38;5;74m▀\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[m | ||
\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49;38;5;74m▀\x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;48;5;74m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49;38;5;74m▀\x1b[38;5;74;49m▄\x1b[49m \x1b[38;5;74;49m▄\x1b[49;38;5;74m▀\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;38m▀\x1b[38;5;38;49m▄\x1b[49m \x1b[38;5;38;49m▄\x1b[49;38;5;74m▀\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;38;49m▄\x1b[49m \x1b[49;38;5;74m▀\x1b[49m \x1b[49;38;5;74m▀\x1b[49m \x1b[38;5;38;49m▄\x1b[49;38;5;74m▀\x1b[49m \x1b[49;38;5;74m▀\x1b[38;5;38;49m▄\x1b[49m \x1b[38;5;38;49m▄\x1b[49;38;5;74m▀\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[49m \x1b[49;38;5;38m▀\x1b[38;5;38;49m▄\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[38;5;38;49m▄\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[49;38;5;38m▀\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;38m▀\x1b[38;5;38;49m▄\x1b[49m \x1b[49;38;5;38m▀\x1b[38;5;38;49m▄\x1b[49m \x1b[49;38;5;38m▀\x1b[38;5;38;49m▄\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[49m \x1b[38;5;38;48;5;38m▄\x1b[49m \x1b[38;5;38;49m▄\x1b[49;38;5;38m▀\x1b[49m \x1b[38;5;38;49m▄\x1b[49;38;5;38m▀\x1b[49m \x1b[38;5;38;49m▄\x1b[49;38;5;38m▀\x1b[49m \x1b[m | ||
\x1b[49m \x1b[38;5;32;48;5;38m▄\x1b[49m \x1b[49;38;5;38m▀\x1b[38;5;32;49m▄\x1b[49m \x1b[38;5;32;48;5;38m▄\x1b[49m \x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[38;5;32;49m▄\x1b[49;38;5;38m▀\x1b[49m \x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;32m▀\x1b[38;5;32;49m▄\x1b[49m \x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[38;5;32;49m▄▄\x1b[38;5;32;48;5;32m▄▄\x1b[49m \x1b[38;5;32;48;5;32m▄▄\x1b[38;5;32;49m▄▄\x1b[49m \x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[38;5;32;49m▄\x1b[49;38;5;32m▀\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;32m▀\x1b[38;5;32;49m▄\x1b[49m \x1b[38;5;32;49m▄▄▄\x1b[49m \x1b[49;38;5;32m▀▀▀▀\x1b[38;5;32;49m▄\x1b[49m \x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[38;5;32;49m▄\x1b[49m \x1b[38;5;32;49m▄\x1b[49;38;5;32m▀▀▀▀\x1b[49m \x1b[38;5;32;49m▄▄▄\x1b[49m \x1b[38;5;32;49m▄\x1b[49;38;5;32m▀\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;32m▀\x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[49;38;5;32m▀\x1b[38;5;32;49m▄\x1b[49m \x1b[38;5;32;49m▄\x1b[49;38;5;32m▀\x1b[49m \x1b[38;5;32;48;5;32m▄\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;32m▀\x1b[38;5;32;49m▄\x1b[49m \x1b[49;38;5;32m▀\x1b[38;5;32;49m▄\x1b[49;38;5;32m▀\x1b[49m \x1b[38;5;32;49m▄\x1b[49;38;5;32m▀\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;32m▀\x1b[38;5;31;49m▄\x1b[49m \x1b[38;5;31;49m▄\x1b[49;38;5;32m▀\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;31m▀\x1b[49m \x1b[49;38;5;31m▀\x1b[49m \x1b[m | ||
\x1b[49m \x1b[49;38;5;31m▀\x1b[38;5;31;49m▄\x1b[49;38;5;31m▀\x1b[49m \x1b[m | ||
${Chalk.bold(Chalk.blue('PatternFly Elements'))} | ||
`)}`); | ||
${Chalk.bold(Chalk.blue('PatternFly Elements'))}`); | ||
} | ||
@@ -102,4 +106,13 @@ export async function promptForElementGeneratorOptions(options) { | ||
.then(promptForElementGeneratorOptions) | ||
.then(generateElement); | ||
.then(generateElement) | ||
.catch(e => { | ||
if (e instanceof PackageJSONError) { | ||
console.log(e.message); | ||
process.exit(1); | ||
} | ||
else { | ||
throw e; | ||
} | ||
}); | ||
} | ||
//# sourceMappingURL=main.js.map |
{ | ||
"name": "@patternfly/create-element", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "Scaffold web components monorepos based on PatternFly Elements", | ||
@@ -48,7 +48,7 @@ "author": "Benny Powers <bennyp@redhat.com>", | ||
"chalk": "5.0.1", | ||
"execa": "^6.1.0", | ||
"execa": "^7.1.0", | ||
"ncp": "2.0.0", | ||
"prompts": "2.4.2", | ||
"tslib": "2.5.0", | ||
"yargs": "17.5.1" | ||
"yargs": "17.7.1" | ||
}, | ||
@@ -55,0 +55,0 @@ "directories": { |
import { LitElement, html } from 'lit'; | ||
import { customElement } from 'lit/decorators.js'; | ||
import { customElement } from 'lit/decorators/custom-element.js'; | ||
@@ -4,0 +4,0 @@ import styles from '<%= cssRelativePath %>'; |
@@ -5,15 +5,14 @@ import { expect, html } from '@open-wc/testing'; | ||
const element = html` | ||
<<%= tagName %>></<%= tagName %>> | ||
`; | ||
describe('<<%= tagName %>>', function() { | ||
it('should upgrade', async function() { | ||
const el = await createFixture <<%= className %>> (element); | ||
const klass = customElements.get('<%= tagName %>'); | ||
expect(el) | ||
.to.be.an.instanceOf(klass) | ||
.and | ||
.to.be.an.instanceOf(<%= className %>); | ||
}); | ||
describe('simply instantiating', function() { | ||
let element: <%= className %>; | ||
it('should upgrade', async function() { | ||
element = await createFixture<<%= className %>>(html`<<%= tagName %>></<%= tagName %>>`); | ||
const klass = customElements.get('<%= tagName %>'); | ||
expect(element) | ||
.to.be.an.instanceOf(klass) | ||
.and | ||
.to.be.an.instanceOf(<%= className %>); | ||
}); | ||
}) | ||
}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
25366
458
+ Addedcliui@8.0.1(transitive)
+ Addedexeca@7.2.0(transitive)
+ Addedhuman-signals@4.3.1(transitive)
+ Addedyargs@17.7.1(transitive)
- Removedcliui@7.0.4(transitive)
- Removedexeca@6.1.0(transitive)
- Removedhuman-signals@3.0.1(transitive)
- Removedyargs@17.5.1(transitive)
Updatedexeca@^7.1.0
Updatedyargs@17.7.1