Skip to content
This repository was archived by the owner on May 22, 2024. It is now read-only.
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: netlify/zip-it-and-ship-it
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v8.4.2
Choose a base ref
...
head repository: netlify/zip-it-and-ship-it
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v8.5.0
Choose a head ref
  • 2 commits
  • 11 files changed
  • 2 contributors

Commits on Jan 31, 2023

  1. feat: return displayName with json config from listFunction, listFunc…

    …tions and listFunctionsFiles (#1329)
    khendrikse authored Jan 31, 2023
    1
    Copy the full SHA
    7ca62fe View commit details
  2. chore(main): release 8.5.0 (#1330)

    Co-authored-by: token-generator-app[bot] <82042599+token-generator-app[bot]@users.noreply.github.com>
    token-generator-app[bot] authored Jan 31, 2023
    1
    Copy the full SHA
    19bf5d0 View commit details
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -7,6 +7,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)

Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).

## [8.5.0](https://github.com/netlify/zip-it-and-ship-it/compare/v8.4.2...v8.5.0) (2023-01-31)


### Features

* return displayName with json config from listFunction, listFunctions and listFunctionsFiles ([#1329](https://github.com/netlify/zip-it-and-ship-it/issues/1329)) ([7ca62fe](https://github.com/netlify/zip-it-and-ship-it/commit/7ca62fe991487085bf8f3792c44cf506354188ae))

## [8.4.2](https://github.com/netlify/zip-it-and-ship-it/compare/v8.4.1...v8.4.2) (2023-01-30)


4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -315,6 +315,10 @@ Each object has the following properties:
Function's name. This is the one used in the Function URL. For example, if a Function is a `myFunc.js` regular file,
the `name` is `myFunc` and the URL is `https://{hostname}/.netlify/functions/myFunc`.

- `displayName` `string`

If there was a user-defined configuration object applied to the function, and it had a `name` defined. This will be returned here.

- `mainFile`: `string`

Absolute path to the Function's main file. If the Function is a Node.js directory, this is its `index.js` or
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@netlify/zip-it-and-ship-it",
"version": "8.4.2",
"version": "8.5.0",
"description": "Zip it and ship it",
"main": "./dist/main.js",
"type": "module",
34 changes: 26 additions & 8 deletions src/main.ts
Original file line number Diff line number Diff line change
@@ -21,6 +21,7 @@ export interface ListedFunction {
runtime: RuntimeType
extension: string
schedule?: string
displayName?: string
}

type ListedFunctionFile = ListedFunction & {
@@ -30,6 +31,7 @@ type ListedFunctionFile = ListedFunction & {
interface ListFunctionsOptions {
basePath?: string
config?: Config
configFileDirectories?: string[]
featureFlags?: FeatureFlags
parseISC?: boolean
}
@@ -39,7 +41,8 @@ interface AugmentedFunctionSource extends FunctionSource {
}

const augmentWithISC = async (func: FunctionSource): Promise<AugmentedFunctionSource> => {
// ISC is currently only supported in JavaScript and TypeScript functions.
// ISC is currently only supported in JavaScript and TypeScript functions
// and only supports scheduled functions.
if (func.runtime.name !== RuntimeType.JAVASCRIPT) {
return func
}
@@ -55,14 +58,15 @@ export const listFunctions = async function (
{
featureFlags: inputFeatureFlags,
config,
configFileDirectories,
parseISC = false,
}: { featureFlags?: FeatureFlags; config?: Config; parseISC?: boolean } = {},
}: { featureFlags?: FeatureFlags; config?: Config; configFileDirectories?: string[]; parseISC?: boolean } = {},
) {
const featureFlags = getFlags(inputFeatureFlags)
const srcFolders = resolveFunctionsDirectories(relativeSrcFolders)
const paths = await listFunctionsDirectories(srcFolders)
const cache = new RuntimeCache()
const functionsMap = await getFunctionsFromPaths(paths, { cache, config, featureFlags })
const functionsMap = await getFunctionsFromPaths(paths, { cache, config, configFileDirectories, featureFlags })
const functions = [...functionsMap.values()]
const augmentedFunctions = parseISC ? await Promise.all(functions.map(augmentWithISC)) : functions

@@ -75,12 +79,13 @@ export const listFunction = async function (
{
featureFlags: inputFeatureFlags,
config,
configFileDirectories,
parseISC = false,
}: { featureFlags?: FeatureFlags; config?: Config; parseISC?: boolean } = {},
}: { featureFlags?: FeatureFlags; config?: Config; configFileDirectories?: string[]; parseISC?: boolean } = {},
) {
const featureFlags = getFlags(inputFeatureFlags)
const cache = new RuntimeCache()
const func = await getFunctionFromPath(path, { cache, config, featureFlags })
const func = await getFunctionFromPath(path, { cache, config, configFileDirectories, featureFlags })

if (!func) {
return
@@ -94,13 +99,19 @@ export const listFunction = async function (
// List all Netlify Functions files for a specific directory
export const listFunctionsFiles = async function (
relativeSrcFolders: string | string[],
{ basePath, config, featureFlags: inputFeatureFlags, parseISC = false }: ListFunctionsOptions = {},
{
basePath,
config,
configFileDirectories,
featureFlags: inputFeatureFlags,
parseISC = false,
}: ListFunctionsOptions = {},
) {
const featureFlags = getFlags(inputFeatureFlags)
const srcFolders = resolveFunctionsDirectories(relativeSrcFolders)
const paths = await listFunctionsDirectories(srcFolders)
const cache = new RuntimeCache()
const functionsMap = await getFunctionsFromPaths(paths, { cache, config, featureFlags })
const functionsMap = await getFunctionsFromPaths(paths, { cache, config, configFileDirectories, featureFlags })
const functions = [...functionsMap.values()]
const augmentedFunctions = parseISC ? await Promise.all(functions.map(augmentWithISC)) : functions
const listedFunctionsFiles = await Promise.all(
@@ -118,7 +129,14 @@ const getListedFunction = function ({
config,
inSourceConfig,
}: AugmentedFunctionSource): ListedFunction {
return { name, mainFile, runtime: runtime.name, extension, schedule: inSourceConfig?.schedule ?? config.schedule }
return {
name,
displayName: config.name,
mainFile,
runtime: runtime.name,
extension,
schedule: inSourceConfig?.schedule ?? config.schedule,
}
}

const getListedFunctionFiles = async function (
14 changes: 12 additions & 2 deletions src/runtimes/index.ts
Original file line number Diff line number Diff line change
@@ -121,13 +121,23 @@ export const getFunctionsFromPaths = async (
*/
export const getFunctionFromPath = async (
path: string,
{ cache, config, featureFlags = defaultFlags }: { cache: RuntimeCache; config?: Config; featureFlags?: FeatureFlags },
{
cache,
config,
configFileDirectories,
featureFlags = defaultFlags,
}: { cache: RuntimeCache; config?: Config; configFileDirectories?: string[]; featureFlags?: FeatureFlags },
): Promise<FunctionSource | undefined> => {
for (const runtime of RUNTIMES) {
const func = await runtime.findFunctionInPath({ path, cache, featureFlags })

if (func) {
const functionConfig = await getConfigForFunction({ config, func: { ...func, runtime }, featureFlags })
const functionConfig = await getConfigForFunction({
config,
configFileDirectories,
func: { ...func, runtime },
featureFlags,
})

return {
...func,
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const handler = async () => ({
body: `Hello world! A whole new one!`,
})

export { handler };
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"config": { "name": "A Display Name" },
"version": 1
}
18 changes: 18 additions & 0 deletions tests/list_function.test.ts
Original file line number Diff line number Diff line change
@@ -20,4 +20,22 @@ describe('listFunction', () => {
schedule: '@daily',
})
})

test('listFunction includes json configured functions with a name and returns it as a displayName', async () => {
const dir = join(FIXTURES_DIR, 'json-config/.netlify/functions-internal/')
const mainFile = join(dir, 'simple.js')
const func = await listFunction(mainFile, {
configFileDirectories: [dir],
featureFlags: {
project_deploy_configuration_api_use_per_function_configuration_files: true,
},
})
expect(func).toEqual({
displayName: 'A Display Name',
extension: '.js',
mainFile,
name: 'simple',
runtime: 'js',
})
})
})
12 changes: 12 additions & 0 deletions tests/list_functions.test.ts
Original file line number Diff line number Diff line change
@@ -86,4 +86,16 @@ describe('listFunctions', () => {
expect(func.schedule).toBe('@daily')
})
})

test('listFunctions includes json configured functions with a name and returns it as a displayName', async () => {
const dir = join(FIXTURES_DIR, 'json-config/.netlify/functions-internal/')
const [func] = await listFunctions([dir], {
configFileDirectories: [dir],
featureFlags: {
project_deploy_configuration_api_use_per_function_configuration_files: true,
},
})

expect(func.displayName).toBe('A Display Name')
})
})
12 changes: 12 additions & 0 deletions tests/list_functions_files.test.ts
Original file line number Diff line number Diff line change
@@ -251,4 +251,16 @@ describe('listFunctionsFiles', () => {
expect(warn).toHaveBeenCalledWith(expect.stringContaining('Darwin/Arm64'))
warn.mockRestore()
})

test('listFunctionsFiles includes json configured functions with a name and returns it as a displayName', async () => {
const dir = join(FIXTURES_DIR, 'json-config/.netlify/functions-internal/')
const [func] = await listFunctionsFiles([dir], {
configFileDirectories: [dir],
featureFlags: {
project_deploy_configuration_api_use_per_function_configuration_files: true,
},
})

expect(func.displayName).toBe('A Display Name')
})
})