diff --git a/.eleventy.js b/.eleventy.js index 951eb4a..83461dc 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -1,6 +1,12 @@ +const { EleventyServerlessBundlerPlugin } = require("@11ty/eleventy"); const eleventySass = require("@11tyrocks/eleventy-plugin-sass-lightningcss") module.exports = function (eleventyConfig) { + eleventyConfig.addPlugin(EleventyServerlessBundlerPlugin, { + name: "serverless", + functionsDir: "./netlify/functions/", + }); + eleventyConfig.addPlugin(eleventySass) eleventyConfig.setServerPassthroughCopyBehavior("passthrough") diff --git a/.gitignore b/.gitignore index 6ebc847..d6ac4ed 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,8 @@ public # macOS related files .DS_Store + +netlify/functions/serverless/* +!netlify/functions/serverless/index.js +netlify/functions/dynamic/* +!netlify/functions/dynamic/index.js diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000..dabc05a --- /dev/null +++ b/netlify.toml @@ -0,0 +1,3 @@ +[build] +publish = "public" +command = "npm run build" diff --git a/netlify/functions/serverless/index.js b/netlify/functions/serverless/index.js new file mode 100644 index 0000000..11a1f9b --- /dev/null +++ b/netlify/functions/serverless/index.js @@ -0,0 +1,58 @@ +const { EleventyServerless } = require("@11ty/eleventy"); + +// Explicit dependencies for the bundler from config file and global data. +// The file is generated by the Eleventy Serverless Bundler Plugin. +require("./eleventy-bundler-modules.js"); + +async function handler(event) { + let elev = new EleventyServerless("serverless", { + path: new URL(event.rawUrl).pathname, + singleTemplateScope: false, + query: event.multiValueQueryStringParameters || event.queryStringParameters, + functionsDir: "./netlify/functions/", + }); + + try { + let [page] = await elev.getOutput(); + + // If you want some of the data cascade available in `page.data`, use `eleventyConfig.dataFilterSelectors`. + // Read more: https://www.11ty.dev/docs/config/#data-filter-selectors + + return { + statusCode: 200, + headers: { + "Content-Type": "text/html; charset=UTF-8", + }, + body: page.content, + }; + } catch (error) { + // Only console log for matching serverless paths + // (otherwise you’ll see a bunch of BrowserSync 404s for non-dynamic URLs during --serve) + if (elev.isServerlessUrl(event.path)) { + console.log("Serverless Error:", error); + } + + return { + statusCode: error.httpStatusCode || 500, + body: JSON.stringify( + { + error: error.message, + }, + null, + 2 + ), + }; + } +} + +// Choose one: +// * Runs on each request: AWS Lambda, Netlify Function +// * Runs on first request only: Netlify On-demand Builder +// 1. Don’t forget to `npm install @netlify/functions` +// 2. Also use `redirects: "netlify-toml-builders"` in your config file’s serverless bundler options: +// https://www.11ty.dev/docs/plugins/serverless/#bundler-options + +// exports.handler = handler; + +const { builder } = require("@netlify/functions"); +exports.handler = builder(handler); diff --git a/package-lock.json b/package-lock.json index cdc708b..dc348fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@11ty/eleventy": "^2.0.0", "@11tyrocks/eleventy-plugin-sass-lightningcss": "^1.0.0", + "@netlify/functions": "^1.4.0", "alpinejs": "^3.11.1" }, "devDependencies": { @@ -293,6 +294,22 @@ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" }, + "node_modules/@netlify/functions": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-1.4.0.tgz", + "integrity": "sha512-gy7ULTIRroc2/jyFVGx1djCmmBMVisIwrvkqggq5B6iDcInRSy2Tpkm+V5C63hKJVkNRskKWtLQKm9ecCaQTjA==", + "dependencies": { + "is-promise": "^4.0.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/@netlify/functions/node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", diff --git a/package.json b/package.json index 09cfac3..33767ff 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "dependencies": { "@11ty/eleventy": "^2.0.0", "@11tyrocks/eleventy-plugin-sass-lightningcss": "^1.0.0", + "@netlify/functions": "^1.4.0", "alpinejs": "^3.11.1" }, "devDependencies": { diff --git a/src/index.11tydata.js b/src/index.11tydata.js new file mode 100644 index 0000000..0e610f2 --- /dev/null +++ b/src/index.11tydata.js @@ -0,0 +1,3 @@ +module.exports = function() { + return Promise.resolve({count: 69420}) +} diff --git a/src/index.html b/src/index.njk similarity index 91% rename from src/index.html rename to src/index.njk index d720ac3..9add355 100644 --- a/src/index.html +++ b/src/index.njk @@ -1,8 +1,10 @@ --- layout: base.njk title: Compteur de grève +permalink: + serverless: / --- -