UNPKG

netlify-cli

Version:

Netlify command line tool

65 lines 2.87 kB
import { readFile } from 'fs/promises'; import { resolve } from 'path'; import { Command } from 'commander'; import normalizePackageData from 'normalize-package-data'; import execa from '../../../../../utils/execa.js'; import { fileExistsAsync } from '../../../../fs.js'; import { memoizedBuild } from '../../../memoized-build.js'; export const detectNetlifyLambda = async ({ packageJson }) => { const { dependencies, devDependencies, scripts } = packageJson; if (!(dependencies?.['netlify-lambda'] || devDependencies?.['netlify-lambda'])) { return false; } const program = new Command() .option('-s, --static') .option('-c, --config [file]') .option('-p, --port [number]') .option('-b, --babelrc [file]') .option('-t, --timeout [delay]'); program.allowExcessArguments(); const matchingScripts = Object.entries(scripts ?? []).filter(([, script]) => /netlify-lambda\s+build/.exec(script)); for (const [key, script] of matchingScripts) { // E.g. ["netlify-lambda", "build", "functions/folder"] // these are all valid options for netlify-lambda program.parse(script.split(' ')); // We are not interested in 'netlify-lambda' and 'build' commands const functionDirectories = program.args.filter((arg) => !['netlify-lambda', 'build'].includes(arg)); if (functionDirectories.length === 1) { const srcFiles = [resolve(functionDirectories[0])]; const yarnExists = await fileExistsAsync('yarn.lock'); const buildCommand = async () => { await execa(yarnExists ? 'yarn' : 'npm', ['run', key]); return; }; return { build: async ({ cache = {} } = {}) => { await memoizedBuild({ cache, cacheKey: `netlify-lambda-${key}`, command: buildCommand }); return { srcFiles, }; }, builderName: 'netlify-lambda', // Currently used for tests only. npmScript: key, }; } if (functionDirectories.length === 0) { console.warn(`Command 'netlify-lambda build' was detected in script '${key}', but contained no functions folder`); } else { console.warn(`Command 'netlify-lambda build' was detected in script '${key}', but contained 2 or more function folders`); } } return false; }; export default async function detectNetlifyLambdaBuilder() { try { const packageData = JSON.parse(await readFile('package.json', 'utf-8')); normalizePackageData(packageData); return await detectNetlifyLambda({ packageJson: packageData }); } catch { return false; } } //# sourceMappingURL=netlify-lambda.js.map