{"id":15016614,"url":"https://github.com/jackdbd/undici","last_synced_at":"2026-02-11T06:03:38.931Z","repository":{"id":43664165,"uuid":"510322460","full_name":"jackdbd/undici","owner":"jackdbd","description":"monorepo for my 11ty plugins","archived":false,"fork":false,"pushed_at":"2024-09-19T15:23:52.000Z","size":3352,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-30T23:53:04.104Z","etag":null,"topics":["11ty","11ty-plugin"],"latest_commit_sha":null,"homepage":"https://jackdbd.github.io/undici/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jackdbd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-07-04T10:58:54.000Z","updated_at":"2024-11-10T19:59:50.000Z","dependencies_parsed_at":"2025-08-24T11:45:34.745Z","dependency_job_id":"269ef102-4e5a-4d79-ada3-4278d6feebb8","html_url":"https://github.com/jackdbd/undici","commit_stats":{"total_commits":85,"total_committers":2,"mean_commits":42.5,"dds":0.3647058823529412,"last_synced_commit":"1bcbced2c387af9a9f07b338d35e88febd6c14b8"},"previous_names":[],"tags_count":82,"template":false,"template_full_name":null,"purl":"pkg:github/jackdbd/undici","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackdbd%2Fundici","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackdbd%2Fundici/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackdbd%2Fundici/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackdbd%2Fundici/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jackdbd","download_url":"https://codeload.github.com/jackdbd/undici/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackdbd%2Fundici/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29327877,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T03:52:29.695Z","status":"ssl_error","status_checked_at":"2026-02-11T03:52:23.094Z","response_time":97,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["11ty","11ty-plugin"],"created_at":"2024-09-24T19:49:08.766Z","updated_at":"2026-02-11T06:03:38.917Z","avatar_url":"https://github.com/jackdbd.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# undici 🕚\n\n![CI workflow](https://github.com/jackdbd/undici/actions/workflows/ci.yaml/badge.svg)\n![Release to npmjs.com workflow](https://github.com/jackdbd/undici/actions/workflows/release-to-npmjs.yaml/badge.svg)\n[![codecov](https://codecov.io/gh/jackdbd/undici/graph/badge.svg?token=BpFF8tmBYS)](https://codecov.io/gh/jackdbd/undici)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits\u0026logoColor=white)](https://conventionalcommits.org)\n\nMonorepo for my [Eleventy](https://www.11ty.dev/) plugins.\n\n\u003e 📌 **Note to self**\n\u003e\n\u003e When Eleventy 3 becomes available as a regular release and is no longer in [alpha](https://www.zachleat.com/web/eleventy-v3-alpha/), update the `peerDependencies` of all packages from:\n\u003e\n\u003e ```txt\n\u003e \"@11ty/eleventy\": \"\u003e=2.0.0 || 3.0.0-alpha.6\"\n\u003e ```\n\u003e\n\u003e to:\n\u003e\n\u003e ```txt\n\u003e \"@11ty/eleventy\": \"\u003e=3.0.0\"\n\u003e ```\n\u003e\n\u003e Also, don't forget to update the GitHub workflows.\n\u003e\n\u003e **Note:** Eleventy supports **both** CJS and ESM [from version 3 onwards](https://github.com/11ty/eleventy/pull/3074). However, I plan to publish **only** ESM packages for my Eleventy plugins. This means that each one of my plugins should declare `\u003e=3.0.0` in its `peerDependencies`.\n\n- [Installation](#installation)\n  - [Git hooks](#git-hooks)\n- [Development](#development)\n- [Demo site](#demo-site)\n- [Monorepo management](#monorepo-management)\n  - [Environment variables and secrets](#environment-variables-and-secrets)\n  - [Scripts](#scripts)\n\n| Package | Version | Install size | Coverage | Docs |\n|---|---|---|---|---|\n| [@jackdbd/eleventy-plugin-content-security-policy](https://github.com/jackdbd/undici/tree/main/packages/eleventy-plugin-content-security-policy) | [![npm version](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-content-security-policy.svg)](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-content-security-policy) | [![install size](https://packagephobia.com/badge?p=@jackdbd/eleventy-plugin-content-security-policy)](https://packagephobia.com/result?p=@jackdbd/eleventy-plugin-content-security-policy) | [Coverage](https://app.codecov.io/gh/jackdbd/undici?flags%5B0%5D=eleventy-plugin-content-security-policy) | [Docs](https://jackdbd.github.io/undici/eleventy-plugin-content-security-policy/index.html) |\n| [@jackdbd/eleventy-plugin-ensure-env-vars](https://github.com/jackdbd/undici/tree/main/packages/eleventy-plugin-ensure-env-vars) | [![npm version](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-ensure-env-vars.svg)](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-ensure-env-vars) | [![install size](https://packagephobia.com/badge?p=@jackdbd/eleventy-plugin-ensure-env-vars)](https://packagephobia.com/result?p=@jackdbd/eleventy-plugin-ensure-env-vars) | [Coverage](https://app.codecov.io/gh/jackdbd/undici?flags%5B0%5D=eleventy-plugin-ensure-env-vars) | [Docs](https://jackdbd.github.io/undici/eleventy-plugin-ensure-env-vars/index.html) |\n| [@jackdbd/eleventy-plugin-plausible](https://github.com/jackdbd/undici/tree/main/packages/eleventy-plugin-plausible) | [![npm version](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-plausible.svg)](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-plausible) | [![install size](https://packagephobia.com/badge?p=@jackdbd/eleventy-plugin-plausible)](https://packagephobia.com/result?p=@jackdbd/eleventy-plugin-plausible) | [Coverage](https://app.codecov.io/gh/jackdbd/undici?flags%5B0%5D=eleventy-plugin-plausible) | [Docs](https://jackdbd.github.io/undici/eleventy-plugin-plausible/index.html) |\n| [@jackdbd/eleventy-plugin-telegram](https://github.com/jackdbd/undici/tree/main/packages/eleventy-plugin-telegram) | [![npm version](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-telegram.svg)](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-telegram) | [![install size](https://packagephobia.com/badge?p=@jackdbd/eleventy-plugin-telegram)](https://packagephobia.com/result?p=@jackdbd/eleventy-plugin-telegram) | [Coverage](https://app.codecov.io/gh/jackdbd/undici?flags%5B0%5D=eleventy-plugin-telegram) | [Docs](https://jackdbd.github.io/undici/eleventy-plugin-telegram/index.html) |\n| [@jackdbd/eleventy-plugin-text-to-speech](https://github.com/jackdbd/undici/tree/main/packages/eleventy-plugin-text-to-speech) | [![npm version](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-text-to-speech.svg)](https://badge.fury.io/js/@jackdbd%2Feleventy-plugin-text-to-speech) | [![install size](https://packagephobia.com/badge?p=@jackdbd/eleventy-plugin-text-to-speech)](https://packagephobia.com/result?p=@jackdbd/eleventy-plugin-text-to-speech) | [Coverage](https://app.codecov.io/gh/jackdbd/undici?flags%5B0%5D=eleventy-plugin-text-to-speech) | [Docs](https://jackdbd.github.io/undici/eleventy-plugin-text-to-speech/index.html) |\n| [@jackdbd/hosting-utils](https://github.com/jackdbd/undici/tree/main/packages/hosting-utils) | [![npm version](https://badge.fury.io/js/@jackdbd%2Fhosting-utils.svg)](https://badge.fury.io/js/@jackdbd%2Fhosting-utils) | [![install size](https://packagephobia.com/badge?p=@jackdbd/hosting-utils)](https://packagephobia.com/result?p=@jackdbd/hosting-utils) | [Coverage](https://app.codecov.io/gh/jackdbd/undici?flags%5B0%5D=hosting-utils) | [Docs](https://jackdbd.github.io/undici/hosting-utils/index.html) |\n\n\u003e 📦 **ESM only:**\n\u003e\n\u003e All libraries of this monorepo are published to npmjs as ECMAScript modules.\n\u003e\n\u003e See also:\n\u003e\n\u003e - [Eleventy issue #836](https://github.com/11ty/eleventy/issues/836)\n\u003e - [ELEVENTY V3 WITH ESM SUPPORT NOW ON THE CANARY CHANNEL](https://www.zachleat.com/web/eleventy-v3-alpha/)\n\u003e - [CALLING ALL COURAGEOUS CANARY TESTERS FOR ELEVENTY V3.0](https://www.11ty.dev/blog/canary-eleventy-v3/)\n\n## Installation\n\nClone the repo:\n\n```sh\ngit clone git@github.com:jackdbd/undici.git\n\ncd undici\n```\n\n\u003e :warning: **Overrides**\n\u003e\n\u003e This project defines 2 overrides for these packages:\n\u003e\n\u003e - @typescript-eslint/eslint-plugin\n- eleventy-plugin-helmet\n\u003e\n\u003e Refer to the [npm documentation](https://docs.npmjs.com/cli/v10/configuring-npm/package-json#overrides) to know more about overrides.\n\nThis project is tested on Node.js \u003e=18.0.0.\n\nYou can use a Node.js version manager like [nvm](https://github.com/nvm-sh/nvm), [asdf](https://github.com/asdf-vm/asdf) or [volta](https://github.com/volta-cli/volta) to manage your Node.js versions.\n\nInstall all dependencies from npm.js:\n\n```sh\nnpm install --include dev\n```\n\n\u003e :information_source: by passing `--include dev` we can be sure that we are installing `devDependencies` even when `NODE_ENV` is set to `production`. This is important because [we should **always**](https://youtu.be/HMM7GJC5E2o?si=RaVgw65WMOXDpHT2) set `NODE_ENV=production`.\n\n### Git hooks\n\nThis project uses [simple-git-hooks](https://github.com/toplenboren/simple-git-hooks) to run the following git hooks:\n\n- pre-commit\n- pre-push\n\nDon't forget to run this command whenever you need to setup/update any git hook:\n\n```sh\nnpx simple-git-hooks\n```\n\n## Development\n\nThis monorepo uses [Typescript project references](https://www.typescriptlang.org/docs/handbook/project-references.html) to build all of its libraries.\n\nThis project has **49 dev dependencies**: [@11ty/eleventy](https://www.npmjs.com/package/@11ty/eleventy), [@11ty/eleventy-fetch](https://www.npmjs.com/package/@11ty/eleventy-fetch), [@aws-sdk/client-s3](https://www.npmjs.com/package/@aws-sdk/client-s3), [@aws-sdk/lib-storage](https://www.npmjs.com/package/@aws-sdk/lib-storage), [@commitlint/cli](https://www.npmjs.com/package/@commitlint/cli), [@commitlint/config-conventional](https://www.npmjs.com/package/@commitlint/config-conventional), [@google-cloud/storage](https://www.npmjs.com/package/@google-cloud/storage), [@google-cloud/text-to-speech](https://www.npmjs.com/package/@google-cloud/text-to-speech), [@jackdbd/checks](https://www.npmjs.com/package/@jackdbd/checks), [@jackdbd/content-security-policy](https://www.npmjs.com/package/@jackdbd/content-security-policy), [@jackdbd/zod-to-doc](https://www.npmjs.com/package/@jackdbd/zod-to-doc), [@microsoft/api-documenter](https://www.npmjs.com/package/@microsoft/api-documenter), [@microsoft/api-extractor](https://www.npmjs.com/package/@microsoft/api-extractor), [@qiwi/multi-semantic-release](https://www.npmjs.com/package/@qiwi/multi-semantic-release), [@reporters/github](https://www.npmjs.com/package/@reporters/github), [@semantic-release/changelog](https://www.npmjs.com/package/@semantic-release/changelog), [@semantic-release/exec](https://www.npmjs.com/package/@semantic-release/exec), [@semantic-release/git](https://www.npmjs.com/package/@semantic-release/git), [@thi.ng/transclude](https://www.npmjs.com/package/@thi.ng/transclude), [@types/debug](https://www.npmjs.com/package/@types/debug), [@types/html-to-text](https://www.npmjs.com/package/@types/html-to-text), [@types/jsdom](https://www.npmjs.com/package/@types/jsdom), [@types/yargs](https://www.npmjs.com/package/@types/yargs), [@typescript-eslint/eslint-plugin](https://www.npmjs.com/package/@typescript-eslint/eslint-plugin), [debug](https://www.npmjs.com/package/debug), [eslint](https://www.npmjs.com/package/eslint), [eslint-config-prettier](https://www.npmjs.com/package/eslint-config-prettier), [eslint-plugin-prettier](https://www.npmjs.com/package/eslint-plugin-prettier), [lint-staged](https://www.npmjs.com/package/lint-staged), [micromark](https://www.npmjs.com/package/micromark), [npm-run-all](https://www.npmjs.com/package/npm-run-all), [pkg-size](https://www.npmjs.com/package/pkg-size), [prettier](https://www.npmjs.com/package/prettier), [pretty-error](https://www.npmjs.com/package/pretty-error), [publint](https://www.npmjs.com/package/publint), [rimraf](https://www.npmjs.com/package/rimraf), [semantic-release](https://www.npmjs.com/package/semantic-release), [semantic-release-telegram](https://www.npmjs.com/package/semantic-release-telegram), [serve](https://www.npmjs.com/package/serve), [simple-git-hooks](https://www.npmjs.com/package/simple-git-hooks), [specificity](https://www.npmjs.com/package/specificity), [taze](https://www.npmjs.com/package/taze), [tsm](https://www.npmjs.com/package/tsm), [typedoc](https://www.npmjs.com/package/typedoc), [typedoc-plugin-zod](https://www.npmjs.com/package/typedoc-plugin-zod), [typescript](https://www.npmjs.com/package/typescript), [wrangler](https://www.npmjs.com/package/wrangler), [yargs](https://www.npmjs.com/package/yargs), [zx](https://www.npmjs.com/package/zx).\n\nBuild all libraries (i.e. 11ty plugins) in watch mode:\n\n```sh\nnpm run dev:libs\n```\n\nYou can also run `build` / `dev` / `test` on a single package. For example:\n\n```sh\nnpm run build -w packages/eleventy-plugin-telegram\nnpm run dev -w packages/eleventy-plugin-telegram\nnpm run test -w packages/eleventy-plugin-telegram\n```\n\n## Demo site\n\nSee these Eleventy plugins configured for the [demo site](./packages/demo-site/README.md) that you can find in this monorepo.\n\nThe website is deployed to Cloudflare Pages and available at https://undici.pages.dev/\n\n## Monorepo management\n\n### Environment variables and secrets\n\nFor local development I rely on some environment variables and secrets. They are all set using a `.envrc` file. In my case this `.envrc` file **can** be tracked in git because the environment variables I use are non-sensitive configuration, and the secrets exist only on my filesystem. See also [nix-config](https://github.com/jackdbd/nix-config/) to learn how I encrypt my secrets.\n\n### Scripts\n\nSee [scripts](./scripts/README.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackdbd%2Fundici","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjackdbd%2Fundici","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackdbd%2Fundici/lists"}