Skip to content

Commit

Permalink
feat(dx): add a npm option for build process
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisbbreuer committed Sep 9, 2022
1 parent cca92e9 commit 98b2275
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 29 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
run: pnpm install

- name: Build the release
run: pnpm run build
run: pnpm run build --npm

- name: Publish to npm
run: pnpm --filter './.stacks' --filter './.stacks/components' --filter './.stacks/functions' --filter './.stacks/elements' publish --access public --no-git-checks
Expand Down
1 change: 1 addition & 0 deletions .stacks/src/cli/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ async function main() {
.option('-e, --elements', 'An alias to the -w flag')
.option('-f, --functions', 'Build your function library')
.option('-d, --docs', 'Build your documentation site')
.option('-n, --npm', 'Build all npm publishable code')
// .option('-p, --pages', 'Build your pages')
// .option('-d, --docs', 'Build your documentation')
.action(async (options) => {
Expand Down
136 changes: 108 additions & 28 deletions .stacks/src/scripts/build.ts
Original file line number Diff line number Diff line change
@@ -1,44 +1,124 @@
import { resolve } from 'node:path'
import Prompts from 'prompts'
import consola from 'consola'
import { ExitCode } from '../cli/exit-code'
import { NpmScript } from '../types/cli'
import { hasFiles } from '../core/fs'
import { runNpmScript } from './run-npm-script'

const { prompts } = Prompts

export async function buildComponentLibraries() {
await buildVueComponentLibrary()
await buildWebComponentLibrary()
}

export async function buildVueComponentLibrary() {
consola.info('Building your component library for production use & npm/CDN distribution...')

if (hasFiles(resolve(process.cwd(), './components'))) {
try {
await runNpmScript(NpmScript.BuildComponents)
consola.success('Your component library was built successfully.')
}
catch (error) {
consola.error('There was an error building your component library.')
consola.error(error)
}
}
else {
consola.info('No components found.')
}
}

export async function buildWebComponentLibrary() {
consola.info('Building your component library for production use & npm/CDN distribution...')

if (hasFiles(resolve(process.cwd(), './components'))) {
try {
await runNpmScript(NpmScript.BuildElements)
consola.success('Your web component library was built successfully.')
}
catch (error) {
consola.error('There was an error building your web component library.')
consola.error(error)
}
}
else {
consola.info('No components found.')
}
}

export async function buildArtisanCli() {
consola.info('Building the Artisan CLI...')

try {
await runNpmScript(NpmScript.BuildArtisanCli)
consola.success('Artisan CLI was built successfully.')
}
catch (error) {
consola.error('There was an error building the Artisan CLI.')
consola.error(error)
}
}

export async function buildDocs() {
consola.info('Building the Artisan CLI...')

try {
await runNpmScript(NpmScript.BuildArtisanCli)
consola.success('Artisan CLI was built successfully.')
}
catch (error) {
consola.error('There was an error building the Artisan CLI.')
consola.error(error)
}
}

export async function buildFunctionLibrary() {
consola.info('Building your functions library for production use & npm/CDN distribution...')

if (hasFiles(resolve(process.cwd(), './functions'))) {
try {
await runNpmScript(NpmScript.BuildFunctions)
consola.success('Your functions library was built successfully.')
}
catch (error) {
consola.error('There was an error building your functions library.')
consola.error(error)
}
}
else {
consola.info('No functions found.')
}
}

export async function startBuildProcess(options: any) {
if (options.components || options === 'components') {
consola.info('Building your component library for production use & npm/CDN distribution...')
await runNpmScript(NpmScript.BuildComponents)
consola.success('Your component library was built successfully.')

consola.info('Building your web component library for production use & npm/CDN distribution...')
await runNpmScript(NpmScript.BuildElements)
consola.success('Your web components library was built successfully.')
await buildComponentLibraries()
}

else if (options.webComponents || options.elements || options === 'web-components' || options === 'elements') {
consola.info('Building your web component library for production use & npm/CDN distribution...')
await runNpmScript(NpmScript.BuildElements)
consola.success('Your web components library was built successfully.')
await buildWebComponentLibrary()
}

else if (options.functions || options === 'functions') {
consola.info('Building your functions library for production use & npm/CDN distribution...')
await runNpmScript(NpmScript.BuildFunctions)
consola.success('Your functions library was built successfully.')
await buildFunctionLibrary()
}

else if (options.artisanCli || options === 'artisan-cli') {
consola.info('Building the Artisan CLI...')
await runNpmScript(NpmScript.BuildArtisanCli)
consola.success('Artisan CLI was built successfully.')
await buildArtisanCli()
}

else if (options.docs || options === 'docs') {
consola.info('Building the Documentation...')
await runNpmScript(NpmScript.BuildDocs)
consola.success('Documentation was built successfully.')
await buildDocs()
}

else if (options.npm || options === 'npm') {
await buildComponentLibraries()
await buildFunctionLibrary()

consola.success('All your libraries were built successfully to be distributed on npm.')
}

else {
Expand All @@ -56,17 +136,17 @@ export async function startBuildProcess(options: any) {
})

// @ts-expect-error the answer object type expects to return a void type but it returns a string
if (answer === 'components') {
consola.info('Building your Stacks component library for production use...')
await runNpmScript(NpmScript.BuildComponents)
}
if (answer === 'components')
await buildComponentLibraries()

// @ts-expect-error the answer object type expects to return a void type but it returns a string
else if (answer === 'docs') {
consola.info('Building your documentation site to be deployed...')
await runNpmScript(NpmScript.BuildDocs)
}
if (answer === 'functions')
await buildFunctionLibrary()

// @ts-expect-error the answer object type expects to return a void type but it returns a string
else if (answer === 'docs')
await buildDocs()

else { process.exit(ExitCode.InvalidArgument) }
else process.exit(ExitCode.InvalidArgument)
}
}

0 comments on commit 98b2275

Please sign in to comment.