-
Notifications
You must be signed in to change notification settings - Fork 340
/
get-functions.js
47 lines (35 loc) · 1.68 KB
/
get-functions.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
const { fileExistsAsync } = require('../lib/fs')
const getUrlPath = (functionName) => `/.netlify/functions/${functionName}`
const BACKGROUND = '-background'
const addFunctionProps = ({ mainFile, name, runtime }) => {
const urlPath = getUrlPath(name)
const isBackground = name.endsWith(BACKGROUND)
return { mainFile, name, runtime, urlPath, isBackground }
}
const JS = 'js'
const getFunctions = async (functionsSrcDir) => {
if (!(await fileExistsAsync(functionsSrcDir))) {
return []
}
// performance optimization, load '@netlify/zip-it-and-ship-it' on demand
// eslint-disable-next-line node/global-require
const { listFunctions } = require('@netlify/zip-it-and-ship-it')
const functions = await listFunctions(functionsSrcDir)
const functionsWithProps = functions.filter(({ runtime }) => runtime === JS).map((func) => addFunctionProps(func))
return functionsWithProps
}
const getFunctionsAndWatchDirs = async (functionsSrcDir) => {
if (!(await fileExistsAsync(functionsSrcDir))) {
return { functions: [], watchDirs: [functionsSrcDir] }
}
// performance optimization, load '@netlify/zip-it-and-ship-it' on demand
// eslint-disable-next-line node/global-require
const { listFunctions } = require('@netlify/zip-it-and-ship-it')
// get all functions files so we know which directories to watch
const functions = await listFunctions(functionsSrcDir)
const watchDirs = [functionsSrcDir]
// filter for only main files to serve
const functionsWithProps = functions.filter(({ runtime }) => runtime === JS).map((func) => addFunctionProps(func))
return { functions: functionsWithProps, watchDirs }
}
module.exports = { getFunctions, getFunctionsAndWatchDirs, BACKGROUND }