{"id":13672891,"url":"https://github.com/kentcdodds/babel-plugin-preval","last_synced_at":"2025-04-11T03:28:57.281Z","repository":{"id":37664951,"uuid":"96282751","full_name":"kentcdodds/babel-plugin-preval","owner":"kentcdodds","description":"🐣 Pre-evaluate code at build-time","archived":false,"fork":false,"pushed_at":"2022-02-02T22:07:10.000Z","size":241,"stargazers_count":1359,"open_issues_count":10,"forks_count":71,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-09T23:38:25.032Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://npm.im/babel-plugin-preval","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kentcdodds.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-07-05T06:07:37.000Z","updated_at":"2025-04-01T23:18:10.000Z","dependencies_parsed_at":"2022-07-12T16:42:41.017Z","dependency_job_id":null,"html_url":"https://github.com/kentcdodds/babel-plugin-preval","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kentcdodds%2Fbabel-plugin-preval","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kentcdodds%2Fbabel-plugin-preval/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kentcdodds%2Fbabel-plugin-preval/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kentcdodds%2Fbabel-plugin-preval/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kentcdodds","download_url":"https://codeload.github.com/kentcdodds/babel-plugin-preval/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248322604,"owners_count":21084336,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-08-02T09:01:55.290Z","updated_at":"2025-04-11T03:28:57.262Z","avatar_url":"https://github.com/kentcdodds.png","language":"TypeScript","readme":"\u003cdiv align=\"center\"\u003e\n\u003ch1\u003ebabel-plugin-preval\u003c/h1\u003e\n\n\u003cp\u003ePre-evaluate code at build-time\u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n\u003c!-- prettier-ignore-start --\u003e\n[![Build Status][build-badge]][build]\n[![Code Coverage][coverage-badge]][coverage]\n[![version][version-badge]][package]\n[![downloads][downloads-badge]][npmtrends]\n[![MIT License][license-badge]][license]\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-24-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n[![PRs Welcome][prs-badge]][prs]\n[![Code of Conduct][coc-badge]][coc]\n[![Babel Macro][macros-badge]][babel-plugin-macros]\n[![Examples][examples-badge]][examples]\n\u003c!-- prettier-ignore-end --\u003e\n\n## The problem\n\nYou need to do some dynamic stuff, but don't want to do it at runtime. Or maybe\nyou want to do stuff like read the filesystem to get a list of files and you\ncan't do that in the browser.\n\n## This solution\n\nThis allows you to specify some code that runs in Node and whatever you\n`module.exports` in there will be swapped. For example:\n\n```js\nconst x = preval`module.exports = 1`\n\n//      ↓ ↓ ↓ ↓ ↓ ↓\n\nconst x = 1\n```\n\nOr, more interestingly:\n\n```javascript\nconst x = preval`\n  const fs = require('fs')\n  const val = fs.readFileSync(__dirname + '/fixture1.md', 'utf8')\n  module.exports = {\n    val,\n    getSplit: function(splitDelimiter) {\n      return x.val.split(splitDelimiter)\n    }\n  }\n`\n\n//      ↓ ↓ ↓ ↓ ↓ ↓\n\nconst x = {\n  val: '# fixture\\n\\nThis is some file thing...\\n',\n  getSplit: function getSplit(splitDelimiter) {\n    return x.val.split(splitDelimiter)\n  },\n}\n```\n\nThere's also `preval.require('./something')` and\n`import x from /* preval */ './something'` (which can both take some arguments)\nor add `// @preval` comment at the top of a file.\n\nSee more below.\n\n## Table of Contents\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Template Tag](#template-tag)\n  - [import comment](#import-comment)\n  - [preval.require](#prevalrequire)\n  - [preval file comment (`// @preval`)](#preval-file-comment--preval)\n- [Exporting a function](#exporting-a-function)\n- [Configure with Babel](#configure-with-babel)\n  - [Via `.babelrc` (Recommended)](#via-babelrc-recommended)\n  - [Via CLI](#via-cli)\n  - [Via Node API](#via-node-api)\n- [Use with `babel-plugin-macros`](#use-with-babel-plugin-macros)\n- [Examples](#examples)\n- [Notes](#notes)\n- [FAQ](#faq)\n  - [How is this different from prepack?](#how-is-this-different-from-prepack)\n  - [How is this different from webpack loaders?](#how-is-this-different-from-webpack-loaders)\n- [Inspiration](#inspiration)\n- [Related Projects](#related-projects)\n- [Other Solutions](#other-solutions)\n- [Issues](#issues)\n  - [🐛 Bugs](#-bugs)\n  - [💡 Feature Requests](#-feature-requests)\n- [Contributors ✨](#contributors-)\n- [LICENSE](#license)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Installation\n\nThis module is distributed via [npm][npm] which is bundled with [node][node] and\nshould be installed as one of your project's `devDependencies`:\n\n```\nnpm install --save-dev babel-plugin-preval\n```\n\n## Usage\n\nImportant notes:\n\n1.  All code run by `preval` is _not_ run in a sandboxed environment\n2.  All code _must_ run synchronously.\n3.  Code that is run by preval is not transpiled so it must run natively in the\n    version of node you're running. (cannot use es modules).\n\n\u003e You may like to watch\n\u003e [this YouTube video](https://www.youtube.com/watch?v=1queadQ0048\u0026list=PLV5CVI1eNcJgCrPH_e6d57KRUTiDZgs0u)\n\u003e to get an idea of what preval is and how it can be used.\n\n### Template Tag\n\n**Before**:\n\n```javascript\nconst greeting = preval`\n  const fs = require('fs')\n  module.exports = fs.readFileSync(require.resolve('./greeting.txt'), 'utf8')\n`\n```\n\n**After** (assuming `greeting.txt` contains the text: `\"Hello world!\"`):\n\n```javascript\nconst greeting = 'Hello world!'\n```\n\n`preval` can also handle _some_ simple dynamic values as well:\n\n**Before**:\n\n```javascript\nconst name = 'Bob Hope'\nconst person = preval`\n  const [first, last] = require('./name-splitter')(${name})\n  module.exports = {first, last}\n`\n```\n\n**After** (assuming `./name-splitter` is a function that splits a name into\nfirst/last):\n\n```javascript\nconst name = 'Bob Hope'\nconst person = {first: 'Bob', last: 'Hope'}\n```\n\n### import comment\n\n**Before**:\n\n```javascript\nimport fileList from /* preval */ './get-list-of-files'\n```\n\n**After** (depending on what `./get-list-of-files does`, it might be something\nlike):\n\n```javascript\nconst fileList = ['file1.md', 'file2.md', 'file3.md', 'file4.md']\n```\n\nYou can also provide arguments which themselves are prevaled!\n\n**Before**:\n\n```javascript\nimport fileList from /* preval(3) */ './get-list-of-files'\n```\n\n**After** (assuming `./get-list-of-files` accepts an argument limiting how many\nfiles are retrieved:\n\n```javascript\nconst fileList = ['file1.md', 'file2.md', 'file3.md']\n```\n\n### preval.require\n\n**Before**:\n\n```javascript\nconst fileLastModifiedDate = preval.require('./get-last-modified-date')\n```\n\n**After**:\n\n```javascript\nconst fileLastModifiedDate = '2017-07-05'\n```\n\nAnd you can provide _some_ simple dynamic arguments as well:\n\n**Before**:\n\n```javascript\nconst fileLastModifiedDate = preval.require(\n  './get-last-modified-date',\n  '../../some-other-file.js',\n)\n```\n\n**After**:\n\n```javascript\nconst fileLastModifiedDate = '2017-07-04'\n```\n\n### preval file comment (`// @preval`)\n\nUsing the preval file comment will update a whole file to be evaluated down to\nan export.\n\nWhereas the above usages (assignment/import/require) will only preval the scope\nof the assignment or file being imported.\n\n**Before**:\n\n```javascript\n// @preval\n\nconst id = require('./path/identity')\nconst one = require('./path/one')\n\nconst compose = (...fns) =\u003e fns.reduce((f, g) =\u003e a =\u003e f(g(a)))\nconst double = a =\u003e a * 2\nconst square = a =\u003e a * a\n\nmodule.exports = compose(square, id, double)(one)\n```\n\n**After**:\n\n```javascript\nmodule.exports = 4\n```\n\n## Exporting a function\n\nIf you export a function from a module that you're prevaling (whether using\n`preval.require` or the import comment), then that function will be called and\nwhatever is returned will be the prevaled value.\n\nIt's important to know this if you want to have the prevaled value itself be a\nfunction:\n\n**Example**:\n\n```js\n// example-module.js\nconst fn = message =\u003e `The message is: ${message}`\nmodule.exports = () =\u003e fn\n```\n\n**Usage of preval**:\n\n```js\nconst theFn = preval.require('./example-module.js')\n```\n\n**Generated code**:\n\n```js\nconst theFn = message =\u003e `The message is: ${message}`\n```\n\n## Configure with Babel\n\n### Via `.babelrc` (Recommended)\n\n**.babelrc**\n\n```json\n{\n  \"plugins\": [\"preval\"]\n}\n```\n\n### Via CLI\n\n```sh\nbabel --plugins preval script.js\n```\n\n### Via Node API\n\n```javascript\nrequire('babel-core').transform('code', {\n  plugins: ['preval'],\n})\n```\n\n## Use with `babel-plugin-macros`\n\nOnce you've\n[configured `babel-plugin-macros`](https://github.com/kentcdodds/babel-plugin-macros/blob/main/other/docs/user.md)\nyou can import/require the preval macro at `babel-plugin-preval/macro`. For\nexample:\n\n```javascript\nimport preval from 'babel-plugin-preval/macro'\n\nconst one = preval`module.exports = 1 + 2 - 1 - 1`\n```\n\n\u003e You could also use [`preval.macro`][preval.macro] if you'd prefer to type less\n\u003e 😀\n\n## Examples\n\n- [Mastodon](https://github.com/tootsuite/mastodon/pull/4202) saved 40kb\n  (gzipped) using `babel-plugin-preval`\n- [glamorous-website](https://github.com/kentcdodds/glamorous-website/pull/235)\n  uses [`preval.macro`][preval.macro] to determine Algolia options based on\n  `process.env.LOCALE`. It also uses [`preval.macro`][preval.macro] to load an\n  `svg` file as a string, `base64` encode it, and use it as a `background-url`\n  for an input element.\n- [Generate documentation for React components](https://gist.github.com/souporserious/575609dc5a5d52e167dd2236079eccc0)\n- [Serverless with webpack](https://github.com/geovanisouza92/serverless-preval)\n  build serverless functions using webpack and Babel for development and\n  production with preval to replace (possible sensible) content in code.\n- [Read files at build time (video)](https://www.youtube.com/watch?v=NhmrbpVKgdQ\u0026feature=youtu.be)\n\n## Notes\n\nIf you use `babel-plugin-transform-decorators-legacy`, there is a conflict\nbecause both plugins must be placed at the top\n\nWrong:\n\n```json\n{\n  \"plugins\": [\"preval\", \"transform-decorators-legacy\"]\n}\n```\n\nOk:\n\n```json\n{\n  \"plugins\": [\"preval\", [\"transform-decorators-legacy\"]]\n}\n```\n\n## FAQ\n\n### How is this different from prepack?\n\n[`prepack`][prepack] is intended to be run on your final bundle after you've run\nyour webpack/etc magic on it. It does a TON of stuff, but the idea is that your\ncode should work with or without prepack.\n\n`babel-plugin-preval` is intended to let you write code that would _not_ work\notherwise. Doing things like reading something from the file system are not\npossible in the browser (or with prepack), but `preval` enables you to do this.\n\n### How is this different from webpack loaders?\n\nThis plugin was inspired by webpack's [val-loader][val-loader]. The benefit of\nusing this over that loader (or any other loader) is that it integrates with\nyour existing babel pipeline. This is especially useful for the server where\nyou're probably not bundling your code with [`webpack`][webpack], but you may be\nusing babel. (If you're not using either, configuring babel for this would be\neasier than configuring webpack for `val-loader`).\n\nIn addition, you can implement pretty much any webpack loader using\n`babel-plugin-preval`.\n\nIf you want to learn more, check `webpack` documentations about\n[`loaders`][webpack-loaders].\n\n## Inspiration\n\nI needed something like this for the\n[glamorous website](https://github.com/kentcdodds/glamorous-website). I\nlive-streamed developing the whole thing. If you're interested you can find\n[the recording on my youtube channel](https://www.youtube.com/watch?v=3vxov5xUai8\u0026index=19\u0026list=PLV5CVI1eNcJh5CTgArGVwANebCrAh2OUE)\n(note, screen only recording, no audio).\n\nI was inspired by the [val-loader][val-loader] from webpack.\n\n## Related Projects\n\n- [`preval.macro`][preval.macro] - nicer integration with `babel-plugin-macros`\n- [`define_macro-loader`](https://github.com/MrcSnm/define_macro-loader) -\n  Integrate preval with C-Like macros, thus, increasing preval use cases.\n\n## Other Solutions\n\nI'm not aware of any, if you are please [make a pull request][prs] and add it\nhere!\n\n## Issues\n\n_Looking to contribute? Look for the [Good First Issue][good-first-issue]\nlabel._\n\n### 🐛 Bugs\n\nPlease file an issue for bugs, missing documentation, or unexpected behavior.\n\n[**See Bugs**][bugs]\n\n### 💡 Feature Requests\n\nPlease file an issue to suggest new features. Vote on feature requests by adding\na 👍. This helps maintainers prioritize what to work on.\n\n[**See Feature Requests**][requests]\n\n## Contributors ✨\n\nThanks goes to these people ([emoji key][emojis]):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://kentcdodds.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1500684?v=3?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKent C. Dodds\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=kentcdodds\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=kentcdodds\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#infra-kentcdodds\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=kentcdodds\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://mattphillips.io\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/5610087?v=3?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMatt Phillips\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=mattphillips\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=mattphillips\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=mattphillips\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://twitter.com/philipodev\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/28024000?v=3?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePhilip Oliver\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/issues?q=author%3Aphilipodev\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://toot.cafe/@sorin\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/2109702?v=3?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSorin Davidoi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/issues?q=author%3Asorin-davidoi\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=sorin-davidoi\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=sorin-davidoi\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/infiniteluke\"\u003e\u003cimg src=\"https://avatars4.githubusercontent.com/u/1127238?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLuke Herrington\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#example-infiniteluke\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://instagram.com/luftywiranda13\"\u003e\u003cimg src=\"https://avatars4.githubusercontent.com/u/22868432?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLufty Wiranda\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=luftywiranda13\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://obartra.github.io\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/3877773?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eOscar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=obartra\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=obartra\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/pro-nasa\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/14310216?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003epro-nasa\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=pro-nasa\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://bekrin.me\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/9248479?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSergey Bekrin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://maurobringolf.ch\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/18613301?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMauro Bringolf\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=maurobringolf\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=maurobringolf\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://joelim.me\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/10875678?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJoe Lim\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=xjlim\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/marzelin\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/13483453?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarcin Zielinski\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=marzelin\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.tommyleunen.com\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/1972567?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTommy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=tleunen\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/PlayMa256\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/831308?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMatheus Gonçalves da Silva\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=PlayMa256\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://stackshare.io/jdorfman/decisions\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/398230?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJustin Dorfman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#fundingFinding-jdorfman\" title=\"Funding Finding\"\u003e🔍\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/AndrewRot\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/12818861?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndrew Rottier\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=AndrewRot\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://michaeldeboey.be\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/6643991?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichaël De Boey\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=MichaelDeBoey\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/nobrayner\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/40751395?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBraydon Hall\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=nobrayner\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://dev.to/jacobmgevans\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/27247160?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJacob M-G Evans\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=JacobMGEvans\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://juhanajauhiainen.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/544386?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJuhana Jauhiainen\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=juhanakristian\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://peter.hozak.info/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1087670?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePeter Hozák\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=Aprillion\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/mpeyper\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/23029903?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichael Peyper\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=mpeyper\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://hipreme.itch.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10136262?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarcelo Silva Nascimento Mancini\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=MrcSnm\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#plugin-MrcSnm\" title=\"Plugin/utility libraries\"\u003e🔌\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/NMinhNguyen\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2852660?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMinh Nguyen\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=NMinhNguyen\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/babel-plugin-preval/commits?author=NMinhNguyen\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"#infra-NMinhNguyen\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors][all-contributors] specification.\nContributions of any kind welcome!\n\n## LICENSE\n\nMIT\n\n\u003c!-- prettier-ignore-start --\u003e\n[npm]: https://www.npmjs.com\n[node]: https://nodejs.org\n[build-badge]: https://img.shields.io/github/workflow/status/kentcdodds/babel-plugin-preval/validate?logo=github\u0026style=flat-square\n[build]: https://github.com/kentcdodds/babel-plugin-preval/actions?query=workflow%3Avalidate\n[coverage-badge]: https://img.shields.io/codecov/c/github/kentcdodds/babel-plugin-preval.svg?style=flat-square\n[coverage]: https://codecov.io/github/kentcdodds/babel-plugin-preval\n[version-badge]: https://img.shields.io/npm/v/babel-plugin-preval.svg?style=flat-square\n[package]: https://www.npmjs.com/package/babel-plugin-preval\n[downloads-badge]: https://img.shields.io/npm/dm/babel-plugin-preval.svg?style=flat-square\n[npmtrends]: http://www.npmtrends.com/babel-plugin-preval\n[license-badge]: https://img.shields.io/npm/l/babel-plugin-preval.svg?style=flat-square\n[license]: https://github.com/kentcdodds/babel-plugin-preval/blob/main/LICENSE\n[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square\n[prs]: http://makeapullrequest.com\n[coc-badge]: https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square\n[coc]: https://github.com/kentcdodds/babel-plugin-preval/blob/main/other/CODE_OF_CONDUCT.md\n[macros-badge]: https://img.shields.io/badge/babel--macro-%F0%9F%8E%A3-f5da55.svg?style=flat-square\n[babel-plugin-macros]: https://github.com/kentcdodds/babel-plugin-macros\n[examples-badge]: https://img.shields.io/badge/%F0%9F%92%A1-examples-8C8E93.svg?style=flat-square\n[examples]: https://github.com/kentcdodds/babel-plugin-preval/blob/main/other/EXAMPLES.md\n[emojis]: https://github.com/all-contributors/all-contributors#emoji-key\n[all-contributors]: https://github.com/all-contributors/all-contributors\n[bugs]: https://github.com/kentcdodds/babel-plugin-preval/issues?utf8=%E2%9C%93\u0026q=is%3Aissue+is%3Aopen+sort%3Acreated-desc+label%3Abug\n[requests]: https://github.com/kentcdodds/babel-plugin-preval/issues?utf8=%E2%9C%93\u0026q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3Aenhancement\n[good-first-issue]: https://github.com/kentcdodds/babel-plugin-preval/issues?utf8=%E2%9C%93\u0026q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3Aenhancement+label%3A%22good+first+issue%22\n\n[prepack]: https://github.com/facebook/prepack\n[preval.macro]: https://github.com/kentcdodds/preval.macro\n[webpack]: https://webpack.js.org\n[webpack-loaders]: https://webpack.js.org/concepts/loaders\n[val-loader]: https://github.com/webpack-contrib/val-loader\n\u003c!-- prettier-ignore-end --\u003e\n","funding_links":[],"categories":["TypeScript","Plugins"],"sub_categories":["Optimization"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkentcdodds%2Fbabel-plugin-preval","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkentcdodds%2Fbabel-plugin-preval","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkentcdodds%2Fbabel-plugin-preval/lists"}