@netlify/functions-utils
Version:
Utility for adding Functions files in Netlify Build
54 lines (53 loc) • 1.99 kB
JavaScript
import { promises as fs } from 'fs';
import { basename, dirname, join } from 'path';
import { listFunctions, listFunctionsFiles } from '@netlify/zip-it-and-ship-it';
import cpy from 'cpy';
import { pathExists } from 'path-exists';
// Add a Netlify Function file to the `functions` directory, so it is processed
// by `@netlify/plugin-functions-core`
export const add = async function (src, dist, { fail = defaultFail } = {}) {
if (src === undefined) {
return fail('No function source directory was specified');
}
if (!(await pathExists(src))) {
return fail(`No function file or directory found at "${src}"`);
}
if (dist === undefined) {
return fail('No function directory was specified');
}
const srcBasename = basename(src);
const [srcGlob, dest] = await getSrcAndDest(src, srcBasename, dist);
await cpy(srcGlob, dest, { cwd: dirname(src), overwrite: true });
};
const getSrcAndDest = async function (src, srcBasename, dist) {
const srcStat = await fs.stat(src);
if (srcStat.isDirectory()) {
return [`${srcBasename}/**`, join(dist, srcBasename)];
}
return [srcBasename, dist];
};
export const list = async function (functionsSrc, { fail = defaultFail } = {}) {
if (functionsSrc === undefined || functionsSrc.length === 0) {
return fail('No function directory was specified');
}
try {
return await listFunctions(functionsSrc);
}
catch (error) {
fail('Could not list Netlify Functions', { error });
}
};
export const listAll = async function (functionsSrc, { fail = defaultFail } = {}) {
if (functionsSrc === undefined || functionsSrc.length === 0) {
return fail('No function directory was specified');
}
try {
return await listFunctionsFiles(functionsSrc);
}
catch (error) {
fail('Could not list Netlify Functions files', { error });
}
};
const defaultFail = function (message) {
throw new Error(message);
};