UNPKG

@redocly/cli

Version:

[@Redocly](https://redocly.com) CLI is your all-in-one API documentation utility. It builds, manages, improves, and quality-checks your API descriptions, all of which comes in handy for various phases of the API Lifecycle. Create your own rulesets to make

54 lines 2.23 kB
import path from 'node:path'; import { existsSync, readFileSync } from 'node:fs'; import { spawn } from 'node:child_process'; import { logger } from '@redocly/openapi-core'; import { PRODUCT_NAMES, PRODUCT_PACKAGES } from './constants.js'; import { getPlatformSpawnArgs } from '../../utils/platform.js'; export const previewProject = async ({ argv }) => { const { plan, port } = argv; const projectDir = argv['project-dir']; const product = argv.product || tryGetProductFromPackageJson(projectDir); if (!isValidProduct(product)) { logger.info(`Invalid product ${product}.`); throw new Error(`Project preview launch failed.`); } const productName = PRODUCT_NAMES[product]; const packageName = PRODUCT_PACKAGES[product]; logger.info(`\nLaunching preview of ${productName} ${plan} using NPX.\n\n`); const { npxExecutableName, shell } = getPlatformSpawnArgs(); const child = spawn(npxExecutableName, ['-y', packageName, 'preview', `--plan=${plan}`, `--port=${port || 4000}`], { stdio: 'inherit', cwd: projectDir, shell, }); child.on('error', (error) => { logger.info(`Project preview launch failed: ${error.message}`); throw new Error(`Project preview launch failed.`); }); }; const isValidProduct = (product) => { if (!product) { return false; } return !!PRODUCT_NAMES[product]; }; const tryGetProductFromPackageJson = (projectDir) => { const packageJsonPath = path.join(process.cwd(), projectDir, 'package.json'); if (existsSync(packageJsonPath)) { try { const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')); const packageJsonDeps = packageJson.dependencies || {}; for (const [product, packageName] of Object.entries(PRODUCT_PACKAGES)) { if (packageJsonDeps[packageName]) { logger.info(`\n${packageName} detected in project's 'package.json'`); return product; } } } catch (error) { logger.info(`Invalid 'package.json': ${packageJsonPath}. Using Realm.`); } } return 'realm'; }; //# sourceMappingURL=index.js.map