Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add support for config export #133

Merged
merged 11 commits into from
Sep 30, 2022
Merged

feat: add support for config export #133

merged 11 commits into from
Sep 30, 2022

Conversation

eduardoboucas
Copy link
Member

@eduardoboucas eduardoboucas commented Sep 21, 2022

Adds support for in-source configuration in edge functions. Rather than forcing people to have a netlify.toml where they declare the paths for each edge function as well as other configuration parameters, we allow them to declare the same parameters from within a config export in the function's entry point file.

It works by looking for a config export, which should be a function. When one is found, Edge Bundler will invoke that function at build time and use its output (which must be serialisable to JSON) as the input for the configuration object.

Here's an example:

netlify/edge-functions/hello.ts

import { Config, Context } from "https://edge.netlify.com"

export default async (req: Request, context: Context) => {
  return new Response(`Hello, ${context.geo.country.name}`)
}

export const config: Config = () => ({
  path: "/hello"
})

NOTE: Edge functions declared using this format will run after any edge functions declared in the TOML, and they will run in alphabetical order (within the group of functions defined using this method). So if you're chaining multiple edge functions and you want to control the order in which they run, the TOML declaration method is preferred.

@eduardoboucas eduardoboucas added the type: feature code contributing to the implementation of a feature and/or user facing functionality label Sep 21, 2022
@eduardoboucas eduardoboucas marked this pull request as ready for review September 28, 2022 16:51
@eduardoboucas eduardoboucas requested a review from a team September 28, 2022 16:51
@@ -124,8 +117,7 @@ const bundle = async (
// if any.
const importMap = new ImportMap(importMaps)
const functions = await findFunctions(sourceDirectories)

const bundleOps = createBundleOps({
const functionBundle = await createBundle({
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're no longer creating multiple bundles, so I've simplified this a bit.

Copy link
Contributor

@jackiewmacharia jackiewmacharia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

@eduardoboucas eduardoboucas merged commit adb4f82 into main Sep 30, 2022
@eduardoboucas eduardoboucas deleted the feat/config branch September 30, 2022 12:42
Skn0tt pushed a commit to netlify/build that referenced this pull request Apr 23, 2024
* feat: add support for `config` export

* refactor: add collector file

* refactor: use file URL

* feat: add exit codes

* fix: pass logger

* chore: setup Deno in integration workflow

* refactor: move config extractor to separate file

* feat: print stdout

* refactor: run config after bundling

* chore: add comments

* chore: improve tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: feature code contributing to the implementation of a feature and/or user facing functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants