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

Repo: Validate Options #154

Closed
shellscape opened this issue Jan 9, 2020 · 14 comments
Closed

Repo: Validate Options #154

shellscape opened this issue Jan 9, 2020 · 14 comments

Comments

@shellscape
Copy link
Collaborator

  • Rollup Plugin Name: all
  • Rollup Plugin Version: current

Feature Use Case

We have a lot of code in different plugins - and then none at all in many - which attempts to validate plugin options in various different ways. Unifying how plugin options are validated, asserting that they'r validated in each plugin, and unifying messaging around invalid options would be a benefit to users and maintenance alike.

Feature Proposal

I'd like to propose @hapi/joi for this purpose. I have some experience using that and working with their community and it was pretty smooth. Of course, open to suggestions. Using pluginutils, we can create a common API to facilitate this.

@NotWoods
Copy link
Member

I'm happy to add runtime validation, but I don't want to use joi since its big and can't be tree-shaken.

I like superstruct, which has a super simple API and lets you add additional validator that just return a boolean. Then pluginutils can just export functions that return true or false, making it easy to reuse with other validation systems if desired.

I'd also be happy with yup, which has a similar API to joi but uses ESM.

@shellscape
Copy link
Collaborator Author

but I don't want to use joi since its big and can't be tree-shaken.

Curious, why does tree shakeable matter if we're not tree shaking?

@NotWoods
Copy link
Member

I think we might want to, since we only use a subset of the validators. If we ship Joi in the plugins separately instead of any plugin using pluginutils then it's less important.

@shellscape
Copy link
Collaborator Author

This may be a philosophical thing. I know that Rollup is big on shipping a small package. But these are, at the end of the day, devDeps that are never included in the final bundle from the consumer. I just can't see the importance of size of pluginutils. Besides, that can be shipped as an external / normal dependency, and there will (in theory) only ever be one instance of @hapi/joi on disk.

@hapi/joi is 560kb
yup is 2.37mb
superstruct is 538kb

Now, what I am interested in is speed. Because a build being fast is vastly more important than the size of pluginutils. I'll probably have to redo the benchmarks from a while back, but when I measured, joi was significantly faster than yup. joi is used across most of the hapi ecosystem, so it kind of has to be fast, as well as well-supported.

For superstruct, I have the same issues with that which I had with ajv. I much prefer the functional declarations for validation than I do the schema-based declarations.

@NotWoods
Copy link
Member

I was using bundlephobia to check, so I wasn't aware that superstruct is a similar size to joi (it looked much smaller). I'm convinced, let's use Joi.

Andarist pushed a commit that referenced this issue Apr 12, 2020
shellscape added a commit that referenced this issue Apr 26, 2020
* initial commit

* allow include/exclude

* admin and README

* -> 1.0.0

* fix prepublish script

* Update README.md

* make compatible with babel 6

* -> 2.0.0

* Merge pull request #6 from Victorystick/patch-1

Add repository

* Merge pull request #8 from TrySound/tidy-up

Tidy up

* -> 2.0.1

* remove unnecessary logging

* bump up timeout, to try and fix tests on 0.12

* generate sourcemaps by default

* -> 2.1.0

* test for #16

* run preflight check per file – fixes #16

* -> 2.2.0

* Merge branch 'master' of https://github.com/rollup/rollup-plugin-babel

* debug travis test failure

* add missing devDep

* add appveyor config

* es6ify source code

* fix tests on windows?

* install babel-register

* Merge pull request #19 from rollup/gh-17

Better handling of helpers

* -> 2.3.0

* -> 2.3.2

* fix incomprehensible travis test failure

* fix helper renaming (#22)

* -> 2.3.3

* fix failing preflight check in absence of class transformer (closes #23)

* -> 2.3.4

* Merge branch 'master' of https://github.com/rollup/rollup-plugin-babel

* use class transformer local to plugin

* -> 2.3.5

* typo

* verify warnings are correct

* prevent unnecessary `var babelHelpers = {}`

* update rollup

* Merge pull request #29 from rollup/fix-preflight-check-caching

Ensure caching works properly for repeated calls with the same `dir`.

* -> 2.3.6

* remove some debugging code

* Merge pull request #31 from ericf/fix-babel-helper-bindings

Fix Babel helper binding renaming

* -> 2.3.7

* -> 2.3.8

* external-helpers-2 -> external-helpers

* Merge remote-tracking branch 'ericf/remove-babel-helper-renaming'

* -> 2.3.9

* Update README.md

* Merge pull request #41 from joeldenning/external-helpers

Adding support for referencing external, global helpers

* -> 2.4.0

* import helpers, so that transform function is pure

* update test

* update deps, switch from babel to buble

* -> v2.5.0

* install buble

* Merge pull request #57 from rollup/mocha-opts

Extract mocha options into their own file.

* Merge pull request #56 from rollup/gh-55

typeof

* -> v2.5.1

* Update dependencies.

* dont export _typeof, _extends etc

* use NUL convention for helper name

* -> v2.6.0

* -> v2.6.1

* typo

* Merge pull request #73 from zeitiger/updateDocumentationForBabel63

update README for new Babel 6.13

* update dependencies

* Merge branch 'issue/81-generates-sourcemap-by-default-spec-failing' of https://github.com/snuggs/rollup-plugin-babel into snuggs-issue/81-generates-sourcemap-by-default-spec-failing

* update build matrix

* update appveyor matrix

* update babel-preset-es2015-rollup for tests

* test with babel-preset-es2015-rollup@3

* Merge pull request #90 from DrewML/update-babel-warning

Remove recommendation to change Babel preset from lib

* Merge pull request #85 from rollup/use-onwarn-if-available

Use options.onwarn if available

* Merge pull request #94 from rtsao/patch-1

Updated external-helpers package name in README

* Merge pull request #99 from AMcBain/master

Ignore Babel 'only' options property for preflight checks.

* Merge pull request #92 from sorgloomer/master

Added externalHelpersWhitelist option

* -> v2.7.0

* Merge pull request #108 from rollup/gh-102

remove ignore from preflight options

* Merge pull request #107 from rollup/gh-105

fix duplicated helper warnings with runtime helpers

* Merge pull request #109 from rollup/gh-95

Allow custom runtime-helpers moduleName

* -> v2.7.1

* -> v2.7.1

* fix prepublish script

* Merge pull request #117 from vinkla/patch-1

Simplify repository config

* make use of object-assign (#118)

Delete assign from utils.js

* Breaking: Babel 7 alpha update (#139)

Breaking: Babel 7 alpha update

* 3.0.0-alpha.12

* update to babel 7 alpha.15

* 3.0.0-alpha.15

* use alpha.17 (#151)

* 3.0.0-alpha.17

* Peer dep (#153)

* make an inline plugin for the preflight check, make babel-core a peerDep

* turn babel-core dep into a peerDep

* fix reference to old class plugin

* update lock file, ignore log files

* 3.0.0

* 3.0.0 changelog [skip ci]

* fix transform (#154)

* 3.0.1

* changelog [skip ci]

* Fix regression with Babel 6 (#158)

* Fix regression with Babel 6

Since in Babel 6 it is not supported to replace the argument
of a default export declaration with an expression, use a
custom "replaceWith" function which handles also that case.

Fixes #155, fixes #156.

* Run tests using both Babel 7 and Babel 6

* 3.0.2

* Fixed support for babel 7 (#170)

* Fixed support for babel 7

* feat(babel): Use scoped babel packages

BREAKING CHANGE: This now requires scoped babel packages to be used.

* Updated to @babel/plugin-proposal-decorators

* Replace es2015 preset with env (#174)

* Merge pull request #150 from wmhilton/patch-1

Use "module" in addition to "jsnext:main"

* 4.0.0-beta.0

* Merge pull request #175 from rollup/existentialism-patch-1

Fix small grammar nit in external-helpers warning

* Update README.md (#163)

Added a missing word and fixed few tiny errors

* Update rollup dependencies and fix tests and build

* merge master -> update-deps

* Merge pull request #147 from kopax/master

clarify README.md showing an example excluding helpers with a variable set to true

* Refactored async tests to bare promises to fix them on older nodes (#194)

* Fixed issue with reading .code from null (untranspiled file due to ignore/only options) (#193)

* 4.0.0-beta.2

* Restore NUL convention for helper name (#198)

The null character `\0` seems to have first been introduced by d169da1.

Fixes #197

* 4.0.0-beta.3

* bumped babel deps

* 4.0.0-beta.4

* Fix npm beta label in README (#207)

Previously, the instructions for usage with Babel 7 was to install the plugin with the label "next" which doesn't exist. The correct label is "beta".

* Bumped version of babel deps

* Tweaked preflight check (fixes #211)

* 4.0.0-beta.5

* Drop node@4 support

* Bumped all dependencies. (#219)

* Update pinned version of babel.
* Update all development dependencies so this plugin is tested against
  current software.
* Make changes to test needed by updated rollup.
* Add node.js 10 to testing.

* Delegate warnings and errors reporting to rollup (#223)

* Delegate warnings and errors reporting to rollup

* Fixed mocha deprecation warn

* Merge branch 'option-cleanup'

* Cache preflight check results per plugin's instance (#224)

* Merge remote-tracking branch 'miketrexler/modules-false-docs'

* Tweaked babelrc: false workaround recommendation

* Throw when used with module transform BEFORE throwing about unexpected situation (#225)

* Updated deps: eslint, rollup, pluginutils - tests still green

* Fix for issue #220: Check ESM first before checking inheritance helper + Expect imported package instead of variable name which feels safer for checking runtime usage.

* Fine-tuned runtime check to allow custom helper name. Issue #220.

* Added new previously failing test for issue #220.

* Made hints related to babel modules:false more explicit and helpful.

* Extracted error messages into variables, splitted by lines for better code readability. Template literals are not allowed right now by linting.

* Removed irrelevant babel plugin from a test case

* 4.0.0-beta.6

* Fixed runtime helpers detection with useESModules & useBuiltIns options (#226)

* Add support for esm and builtin runtime helpers

This diff adds support for `useESModules` and `useBuiltIns` options
in transform-runtime plugin which injects paths with `es6` and `builtin`
suffixes.

* Fix lint

* 4.0.0-beta.7

* Improve distributed dist directory (#234)

* Improve dist

- rename .es.js to .esm.js
- removed jsnext:main
- simplified rollup config

* Tweak files and revert external

* Upgrade babel deps and tweak preflight check according to latest changes (#233)

* Upgrade babel and tweak according changes

- simplified preflight check for runtime helpers
- removed moduleName test
- tweaked removed options

* Fix lint

* Regenerate lockfile

* 4.0.0-beta.8

* Transpile only default babel extensions, allow for custom extensions option (fixes #111)

* Pass appropriate caller config to babel.transform (#238)

* 4.0.0

* Update docs regarding babel versions and matching plugin versions

* Bumped babel deps

* 4.0.1

* Fix `rollup` peer dependency (#240)

Semver range `^0.60.0` doesn't include `0.65.0`, etc., as if major version is 0, minor version updates indicate breaking changes. `>1` is added for future-proof.

* 4.0.2

* Tweaked README, added 4.0 CHANGELOG notes

* Fixed fallbackClassTransform

* 4.0.3-0

* 4.0.3

* Fix preflightChecks for ignored files

* Setup prettier

* Run prettier over the repo files

* Tweak eslint rules to stop conflicting with prettier output

* 4.1.0-0

* Add options.extensions to README (#256)

* Upgraded husky

* Remove babel 6 test from AppVeyor (#263)

* Remove babel 6 test from appveyor

* Remove reduntant echo

* Fix indentation in examples of configuration in readme (#266)

* Return null from the transform hook when it doesn't transform anything

* 4.1.0-1

* 4.1.0

* Reword 'except' as 'plus' (#280)

* Allow rollup@1 as peer dep

* 4.2.0

* Update devDep to rollup@1

* Fail build when trying plugin tries to add non-existent helper (#290)

* Merge branch 'custom-builder'

* 4.3.0

* Fix reference to the plugin in the README

* Update CHANGELOG

* Add js extention to helper file (#296)

* 4.3.1

* Add note to CHANGELOG about v4.3.1

* Fix usage with externalHelpers flag

* 4.3.2

* Update CHANGELOG with note about 4.3.2

* chore: audit fixes

* chore: npm audit fix

* Update rollup-pluginutils@2.8.1 (#311)

* Update rollup-pluginutils@2.8.1

Update `rollup-pluginutils` to a version which contains a fix for the `braces` package vulnerability.

https://nodesecurity.io/advisories/786

* Regenerate package-lock

* 4.3.3

* Add possibility to run babel per output (#333)

* Update dependencies

* First draft for using the plugin to transform output options

* Deduplicate code

* Pass correct context to transformCode

* Update documentation and add chunking test

* Fix Windows tests

* Address review comments

* No longer respect "file" and "dir" options and adjust docs

* Use plugin.generated for output plugin

* Add warning for formats other than ESM or CJS, update docs

* Throw for not recommended formats but add an override option.

* Address review comments

* Fixed issue with incorrect caller data being passed to Babel by generated output plugins

* Reduce information about external helpers as those are not recommended

* Add `sourceType` when transforming the output.

* Update test and readme for runtime helpers

* Add note about babelrc files

* Do not load config files by default

* Update dependencies

* Note minimal Rollup version for output plugins

* Merge branch 'tla'

# Conflicts:
#	src/index.js

* Use babel.transformAsync (#331)

* Use rimraf in prebuild script (#335)

* use rimraf

* move to dev dep

* Drop node 6 support, use untranspiled async/await syntax

* Recommend explicit babelHelpers option to be used (#339)

* Refactored babelHelpers settings - require user declaring which kind of helpers they want to use

* Adjust tests to new babelHelpers logic

* Keep UNRESOLVED_IMPORT warnings out of the console when running tests

* 5.0.0-alpha.0

* Rename skipBabelHelpersCheck to skipPreflightCheck

* Make missing babelHelpers a warning

* 5.0.0-alpha.1

* Use transformAsync in preflight check

* Tweak implementation of the preflight helpers check

* Add example to the README how to use the plugin with the Rollup CLI (#327)

* explain how to configure the rollup cli

* Tweak README

* Dont crash on minified code when performing preflight check

* Rename rollup-plugin-babel directory to babel

* Remove tooling configs not needed in monorepo

* Drop transpilation of rollup-plugin-babel, set engines to node@>=10

* Reformat babel plugin with monorepo prettier & ESLint rules

* Use exports: named for babel plugin CJS bundle

* Migrate babel plugin tests to use ava

* Use pnpm to run npm scripts in babel plugin

* Use scoped @rollup/plugin-json in babel plugin

* Remove unnecessary eslint-disable comment

* Update babel plugin metadata to point to monorepo

* Remove LICENSE file from babel plugin, pnpm will use the root one when publishing

* Move .eslints with turned off rules to fixtures directory

* Move loop counter declaration

* use getCode helper where possible

* Use more proper throwsAsync & notThrowsAsync assertions

* Transpile @rollup/plugin-babel using itself

* Migrate to use @rollup/pluginutils in babel plugin

* Set peer dep range for rollup to ^1.20.0 to align with the rest of plugins

* Fix homepage in babel plugin package.json

* Include repository reference in test descriptionbs refering to issue numbers

* Change URLs in the source files to point to a plugins repo

* Change rollup-plugin-babel to @rollup/plugin-babel in source files

* cleanup README a little bit

* Tweak "Modules" section, remove mentions of Babel 6 from there

* Fix some more references to rollup-plugin-babel

* Add badges to the top of the README

* Adhere to the README template used by other plugins

* Tweak CHANGELOG

* Mention Babel plugin in the root README

* Add publishConfig to package.json of the Babel plugin

* Update packages/babel/README.md

Co-Authored-By: Tiger Oakes <toakes@mozilla.com>

* Update packages/babel/README.md

Co-Authored-By: Tiger Oakes <toakes@mozilla.com>

* Fixed how @rollup/pluginutils are used

* Allow Rollup 2 in peer dependency range

* Refactor babel plugin exports shape

* tweak usage example in the babel plugin README

* Align package.json of Babel plugin to existing package.json files in the monorepo

* Update @rollup/pluginutils in the Babel plugin

* Add new changelog entries to the Babel plugin

* Move babelHelpers recommendation text to the README

* Fix typo in the README

* chore: remove prepare script, build in prepublishOnly

This avoids fresh `pnpm install` problems where the build runs
before babel plugins are installed.

* Upgrade @babel/preset-env in babel plugin

Co-authored-by: Rich-Harris <richard.a.harris@gmail.com>
Co-authored-by: Oskar Segersvärd <victorystick@gmail.com>
Co-authored-by: Brian Donovan <me@brian-donovan.com>
Co-authored-by: Yuta Hiroto <git@about-hiroppy.com>
Co-authored-by: Henry Zhu <hi@henryzoo.com>
Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
Co-authored-by: Denis <carriere.denis@gmail.com>
Co-authored-by: Daniel Tschinder <daniel.tschinder@researchgate.net>
Co-authored-by: Brian Ng <bng412@gmail.com>
Co-authored-by: Roy Revelt <roy@codsen.com>
Co-authored-by: Minh Nguyen <minhnguyenxx@gmail.com>
Co-authored-by: Can Göktas <cangoektas@users.noreply.github.com>
Co-authored-by: Corey Farrell <git@cfware.com>
Co-authored-by: Sebastian Werner <s.werner@sebastian-software.de>
Co-authored-by: Bogdan Chadkin <trysound@yandex.ru>
Co-authored-by: ylemkimon <mail@ylem.kim>
Co-authored-by: Kristoffer <denkristoffer@users.noreply.github.com>
Co-authored-by: Shadab Khan <shadab.2005@gmail.com>
Co-authored-by: Adam Gołąb <adam@brainhub.pl>
Co-authored-by: Kinrany <kinrany@yandex.com>
Co-authored-by: Mike Heddes <mikeheddes@gmail.com>
Co-authored-by: shellscape <andrew@shellscape.org>
Co-authored-by: Ryan Walters <shout@ryanwalters.co>
Co-authored-by: Lukas Taegert-Atkinson <lukastaegert@users.noreply.github.com>
Co-authored-by: Troy Rhinehart <troy.rhinehart@gmail.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
Co-authored-by: Tiger Oakes <toakes@mozilla.com>
@shellscape
Copy link
Collaborator Author

Since the last time the issue was active I've kept an eye on development of yup vs joi and I'm not a big fan of the direction that joi has been heading in. I like the verbose output of errors for superstruct so I think it's work a look. It's a damn shame that nothing exists which could transform a TS interface into a validator function with all the same goodies as the others.

@NotWoods
Copy link
Member

NotWoods commented May 3, 2020

The only way to use TypeScript types after compilation is with decorators. If we want to go down that path, we could put together something like this:

import { validate } from '@rollup/validate';

@validate
export function nodeResolve(options: RollupNodeResolveOptions) {
  ...
}
// tsconfig.json
{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

@shellscape
Copy link
Collaborator Author

shellscape commented May 4, 2020

So TS doesn't allow decorators on interfaces unfortunately. The best I've been able to come up with is a transform plugin, and having to ignore the "Decorators cannot go here" error in the source:

// source

// @ts-ignore
@Superstruct()
interface Batman {
  batcave: string;
}
// plugin

import ts from 'typescript';

export default function() {
  function visit(ctx: ts.TransformationContext) {
    const visitor: ts.Visitor = (node: ts.Node): ts.VisitResult<typeof node> => {
      if (ts.isInterfaceDeclaration(node) && node.decorators.length) {
        const [decorator] = node.decorators;
        const identifier = decorator.expression.getFirstToken() as ts.Identifier;

        if (identifier.escapedText === 'Superstruct') {
          console.log('found');
        }
      }
      return ts.visitEachChild(node, visitor, ctx);
    };

    return visitor;
  }
  return (ctx: ts.TransformationContext): ts.Transformer<ts.SourceFile> => (sf: ts.SourceFile) =>
    ts.visitNode(sf, visit(ctx));
}

This only gets us so far though. If we render a schema object based on this, we still have to be able to reference it in code before compilation. And I haven't figured out how to do that.

@vladshcherbin
Copy link

Don't forget not everyone is using TS in plugins, such validation would be nice for js plugins as well.

Here is related issue I've opened in rollup for same kind of checks - rollup/rollup#3159

@Andarist
Copy link
Member

Andarist commented May 4, 2020

@vladshcherbin this issue is about adding runtime validation as well.

@shellscape
Copy link
Collaborator Author

@vladshcherbin this discussion is scoped to plugins in this repo, and since we want to get all plugins on TS here, we're safe. The wider discussion on how third party plugins should validate options is still relevant, but out of scope right here.

Another idea I had:

I think we're going to need a transform plugin to make this happen, but we could export a custom validate method(s) that pipe to superstruct so that the generated source could include a schema as an injected optional argument. It would require a peerDep on superstruct but that's probably a given.

// plugin source

export interface ValidateSchema {}

export validate = (obj: any) => {
  // check `args` here because we'll inject the schema as the second argument in any
  // calls to this method in the compiled code.
  const [,schema] = args;
  ...
}
// code

import { validate } from 'plugin';

interface Batman extends ValidateSchema {
  batcave: string;
}

const obj = { ... };

validate<Batman>(obj):

The transform plugin would

  • look for the validate function signature
  • examine the type argument
  • assert it's an interface and extends ValidateSchema as an extra check
  • generate a superstruct schema from the interface (TBD)
  • modify the call so it would look like:
validate(obj, { ... schema ... });

Another option would be to use a decorator on the method, but because TS does't allow decorators outside of classes, we'd have to use a // @ts-ignore again:

// @ts-ignore
@Superstruct<Batman>
validate(obj)

Not really desirable because that removes all compiler checks from the decorator, and TS doesn't yet allow us to ignore individual errors.

@NotWoods
Copy link
Member

NotWoods commented May 4, 2020

I think the best option right now is to use superstruct and just have a little bit of duplication. We can have tests to ensure the validation matches the Typescript interface.

@shellscape
Copy link
Collaborator Author

Well that's no fun :)

@stale stale bot added the x⁷ ⋅ stale label Jul 10, 2020
@stale
Copy link

stale bot commented Jul 20, 2020

Hey folks. This issue hasn't received any traction for 60 days, so we're going to close this for housekeeping. If this is still an ongoing issue, please do consider contributing a Pull Request to resolve it. Further discussion is always welcome even with the issue closed. If anything actionable is posted in the comments, we'll consider reopening it.# Comment to post when closing a stale issue.

@stale stale bot closed this as completed Jul 20, 2020
LarsDenBakker pushed a commit to LarsDenBakker/plugins that referenced this issue Sep 12, 2020
* initial commit

* allow include/exclude

* admin and README

* -> 1.0.0

* fix prepublish script

* Update README.md

* make compatible with babel 6

* -> 2.0.0

* Merge pull request rollup#6 from Victorystick/patch-1

Add repository

* Merge pull request rollup#8 from TrySound/tidy-up

Tidy up

* -> 2.0.1

* remove unnecessary logging

* bump up timeout, to try and fix tests on 0.12

* generate sourcemaps by default

* -> 2.1.0

* test for rollup#16

* run preflight check per file – fixes rollup#16

* -> 2.2.0

* Merge branch 'master' of https://github.com/rollup/rollup-plugin-babel

* debug travis test failure

* add missing devDep

* add appveyor config

* es6ify source code

* fix tests on windows?

* install babel-register

* Merge pull request rollup#19 from rollup/rollupgh-17

Better handling of helpers

* -> 2.3.0

* -> 2.3.2

* fix incomprehensible travis test failure

* fix helper renaming (rollup#22)

* -> 2.3.3

* fix failing preflight check in absence of class transformer (closes rollup#23)

* -> 2.3.4

* Merge branch 'master' of https://github.com/rollup/rollup-plugin-babel

* use class transformer local to plugin

* -> 2.3.5

* typo

* verify warnings are correct

* prevent unnecessary `var babelHelpers = {}`

* update rollup

* Merge pull request rollup#29 from rollup/fix-preflight-check-caching

Ensure caching works properly for repeated calls with the same `dir`.

* -> 2.3.6

* remove some debugging code

* Merge pull request rollup#31 from ericf/fix-babel-helper-bindings

Fix Babel helper binding renaming

* -> 2.3.7

* -> 2.3.8

* external-helpers-2 -> external-helpers

* Merge remote-tracking branch 'ericf/remove-babel-helper-renaming'

* -> 2.3.9

* Update README.md

* Merge pull request rollup#41 from joeldenning/external-helpers

Adding support for referencing external, global helpers

* -> 2.4.0

* import helpers, so that transform function is pure

* update test

* update deps, switch from babel to buble

* -> v2.5.0

* install buble

* Merge pull request rollup#57 from rollup/mocha-opts

Extract mocha options into their own file.

* Merge pull request rollup#56 from rollup/rollupgh-55

typeof

* -> v2.5.1

* Update dependencies.

* dont export _typeof, _extends etc

* use NUL convention for helper name

* -> v2.6.0

* -> v2.6.1

* typo

* Merge pull request rollup#73 from zeitiger/updateDocumentationForBabel63

update README for new Babel 6.13

* update dependencies

* Merge branch 'issue/81-generates-sourcemap-by-default-spec-failing' of https://github.com/snuggs/rollup-plugin-babel into snuggs-issue/81-generates-sourcemap-by-default-spec-failing

* update build matrix

* update appveyor matrix

* update babel-preset-es2015-rollup for tests

* test with babel-preset-es2015-rollup@3

* Merge pull request rollup#90 from DrewML/update-babel-warning

Remove recommendation to change Babel preset from lib

* Merge pull request rollup#85 from rollup/use-onwarn-if-available

Use options.onwarn if available

* Merge pull request rollup#94 from rtsao/patch-1

Updated external-helpers package name in README

* Merge pull request rollup#99 from AMcBain/master

Ignore Babel 'only' options property for preflight checks.

* Merge pull request rollup#92 from sorgloomer/master

Added externalHelpersWhitelist option

* -> v2.7.0

* Merge pull request rollup#108 from rollup/rollupgh-102

remove ignore from preflight options

* Merge pull request rollup#107 from rollup/rollupgh-105

fix duplicated helper warnings with runtime helpers

* Merge pull request rollup#109 from rollup/rollupgh-95

Allow custom runtime-helpers moduleName

* -> v2.7.1

* -> v2.7.1

* fix prepublish script

* Merge pull request rollup#117 from vinkla/patch-1

Simplify repository config

* make use of object-assign (rollup#118)

Delete assign from utils.js

* Breaking: Babel 7 alpha update (rollup#139)

Breaking: Babel 7 alpha update

* 3.0.0-alpha.12

* update to babel 7 alpha.15

* 3.0.0-alpha.15

* use alpha.17 (rollup#151)

* 3.0.0-alpha.17

* Peer dep (rollup#153)

* make an inline plugin for the preflight check, make babel-core a peerDep

* turn babel-core dep into a peerDep

* fix reference to old class plugin

* update lock file, ignore log files

* 3.0.0

* 3.0.0 changelog [skip ci]

* fix transform (rollup#154)

* 3.0.1

* changelog [skip ci]

* Fix regression with Babel 6 (rollup#158)

* Fix regression with Babel 6

Since in Babel 6 it is not supported to replace the argument
of a default export declaration with an expression, use a
custom "replaceWith" function which handles also that case.

Fixes rollup#155, fixes rollup#156.

* Run tests using both Babel 7 and Babel 6

* 3.0.2

* Fixed support for babel 7 (rollup#170)

* Fixed support for babel 7

* feat(babel): Use scoped babel packages

BREAKING CHANGE: This now requires scoped babel packages to be used.

* Updated to @babel/plugin-proposal-decorators

* Replace es2015 preset with env (rollup#174)

* Merge pull request rollup#150 from wmhilton/patch-1

Use "module" in addition to "jsnext:main"

* 4.0.0-beta.0

* Merge pull request rollup#175 from rollup/existentialism-patch-1

Fix small grammar nit in external-helpers warning

* Update README.md (rollup#163)

Added a missing word and fixed few tiny errors

* Update rollup dependencies and fix tests and build

* merge master -> update-deps

* Merge pull request rollup#147 from kopax/master

clarify README.md showing an example excluding helpers with a variable set to true

* Refactored async tests to bare promises to fix them on older nodes (rollup#194)

* Fixed issue with reading .code from null (untranspiled file due to ignore/only options) (rollup#193)

* 4.0.0-beta.2

* Restore NUL convention for helper name (rollup#198)

The null character `\0` seems to have first been introduced by d169da1.

Fixes rollup#197

* 4.0.0-beta.3

* bumped babel deps

* 4.0.0-beta.4

* Fix npm beta label in README (rollup#207)

Previously, the instructions for usage with Babel 7 was to install the plugin with the label "next" which doesn't exist. The correct label is "beta".

* Bumped version of babel deps

* Tweaked preflight check (fixes rollup#211)

* 4.0.0-beta.5

* Drop node@4 support

* Bumped all dependencies. (rollup#219)

* Update pinned version of babel.
* Update all development dependencies so this plugin is tested against
  current software.
* Make changes to test needed by updated rollup.
* Add node.js 10 to testing.

* Delegate warnings and errors reporting to rollup (rollup#223)

* Delegate warnings and errors reporting to rollup

* Fixed mocha deprecation warn

* Merge branch 'option-cleanup'

* Cache preflight check results per plugin's instance (rollup#224)

* Merge remote-tracking branch 'miketrexler/modules-false-docs'

* Tweaked babelrc: false workaround recommendation

* Throw when used with module transform BEFORE throwing about unexpected situation (rollup#225)

* Updated deps: eslint, rollup, pluginutils - tests still green

* Fix for issue rollup#220: Check ESM first before checking inheritance helper + Expect imported package instead of variable name which feels safer for checking runtime usage.

* Fine-tuned runtime check to allow custom helper name. Issue rollup#220.

* Added new previously failing test for issue rollup#220.

* Made hints related to babel modules:false more explicit and helpful.

* Extracted error messages into variables, splitted by lines for better code readability. Template literals are not allowed right now by linting.

* Removed irrelevant babel plugin from a test case

* 4.0.0-beta.6

* Fixed runtime helpers detection with useESModules & useBuiltIns options (rollup#226)

* Add support for esm and builtin runtime helpers

This diff adds support for `useESModules` and `useBuiltIns` options
in transform-runtime plugin which injects paths with `es6` and `builtin`
suffixes.

* Fix lint

* 4.0.0-beta.7

* Improve distributed dist directory (rollup#234)

* Improve dist

- rename .es.js to .esm.js
- removed jsnext:main
- simplified rollup config

* Tweak files and revert external

* Upgrade babel deps and tweak preflight check according to latest changes (rollup#233)

* Upgrade babel and tweak according changes

- simplified preflight check for runtime helpers
- removed moduleName test
- tweaked removed options

* Fix lint

* Regenerate lockfile

* 4.0.0-beta.8

* Transpile only default babel extensions, allow for custom extensions option (fixes rollup#111)

* Pass appropriate caller config to babel.transform (rollup#238)

* 4.0.0

* Update docs regarding babel versions and matching plugin versions

* Bumped babel deps

* 4.0.1

* Fix `rollup` peer dependency (rollup#240)

Semver range `^0.60.0` doesn't include `0.65.0`, etc., as if major version is 0, minor version updates indicate breaking changes. `>1` is added for future-proof.

* 4.0.2

* Tweaked README, added 4.0 CHANGELOG notes

* Fixed fallbackClassTransform

* 4.0.3-0

* 4.0.3

* Fix preflightChecks for ignored files

* Setup prettier

* Run prettier over the repo files

* Tweak eslint rules to stop conflicting with prettier output

* 4.1.0-0

* Add options.extensions to README (rollup#256)

* Upgraded husky

* Remove babel 6 test from AppVeyor (rollup#263)

* Remove babel 6 test from appveyor

* Remove reduntant echo

* Fix indentation in examples of configuration in readme (rollup#266)

* Return null from the transform hook when it doesn't transform anything

* 4.1.0-1

* 4.1.0

* Reword 'except' as 'plus' (rollup#280)

* Allow rollup@1 as peer dep

* 4.2.0

* Update devDep to rollup@1

* Fail build when trying plugin tries to add non-existent helper (rollup#290)

* Merge branch 'custom-builder'

* 4.3.0

* Fix reference to the plugin in the README

* Update CHANGELOG

* Add js extention to helper file (rollup#296)

* 4.3.1

* Add note to CHANGELOG about v4.3.1

* Fix usage with externalHelpers flag

* 4.3.2

* Update CHANGELOG with note about 4.3.2

* chore: audit fixes

* chore: npm audit fix

* Update rollup-pluginutils@2.8.1 (rollup#311)

* Update rollup-pluginutils@2.8.1

Update `rollup-pluginutils` to a version which contains a fix for the `braces` package vulnerability.

https://nodesecurity.io/advisories/786

* Regenerate package-lock

* 4.3.3

* Add possibility to run babel per output (rollup#333)

* Update dependencies

* First draft for using the plugin to transform output options

* Deduplicate code

* Pass correct context to transformCode

* Update documentation and add chunking test

* Fix Windows tests

* Address review comments

* No longer respect "file" and "dir" options and adjust docs

* Use plugin.generated for output plugin

* Add warning for formats other than ESM or CJS, update docs

* Throw for not recommended formats but add an override option.

* Address review comments

* Fixed issue with incorrect caller data being passed to Babel by generated output plugins

* Reduce information about external helpers as those are not recommended

* Add `sourceType` when transforming the output.

* Update test and readme for runtime helpers

* Add note about babelrc files

* Do not load config files by default

* Update dependencies

* Note minimal Rollup version for output plugins

* Merge branch 'tla'

# Conflicts:
#	src/index.js

* Use babel.transformAsync (rollup#331)

* Use rimraf in prebuild script (rollup#335)

* use rimraf

* move to dev dep

* Drop node 6 support, use untranspiled async/await syntax

* Recommend explicit babelHelpers option to be used (rollup#339)

* Refactored babelHelpers settings - require user declaring which kind of helpers they want to use

* Adjust tests to new babelHelpers logic

* Keep UNRESOLVED_IMPORT warnings out of the console when running tests

* 5.0.0-alpha.0

* Rename skipBabelHelpersCheck to skipPreflightCheck

* Make missing babelHelpers a warning

* 5.0.0-alpha.1

* Use transformAsync in preflight check

* Tweak implementation of the preflight helpers check

* Add example to the README how to use the plugin with the Rollup CLI (rollup#327)

* explain how to configure the rollup cli

* Tweak README

* Dont crash on minified code when performing preflight check

* Rename rollup-plugin-babel directory to babel

* Remove tooling configs not needed in monorepo

* Drop transpilation of rollup-plugin-babel, set engines to node@>=10

* Reformat babel plugin with monorepo prettier & ESLint rules

* Use exports: named for babel plugin CJS bundle

* Migrate babel plugin tests to use ava

* Use pnpm to run npm scripts in babel plugin

* Use scoped @rollup/plugin-json in babel plugin

* Remove unnecessary eslint-disable comment

* Update babel plugin metadata to point to monorepo

* Remove LICENSE file from babel plugin, pnpm will use the root one when publishing

* Move .eslints with turned off rules to fixtures directory

* Move loop counter declaration

* use getCode helper where possible

* Use more proper throwsAsync & notThrowsAsync assertions

* Transpile @rollup/plugin-babel using itself

* Migrate to use @rollup/pluginutils in babel plugin

* Set peer dep range for rollup to ^1.20.0 to align with the rest of plugins

* Fix homepage in babel plugin package.json

* Include repository reference in test descriptionbs refering to issue numbers

* Change URLs in the source files to point to a plugins repo

* Change rollup-plugin-babel to @rollup/plugin-babel in source files

* cleanup README a little bit

* Tweak "Modules" section, remove mentions of Babel 6 from there

* Fix some more references to rollup-plugin-babel

* Add badges to the top of the README

* Adhere to the README template used by other plugins

* Tweak CHANGELOG

* Mention Babel plugin in the root README

* Add publishConfig to package.json of the Babel plugin

* Update packages/babel/README.md

Co-Authored-By: Tiger Oakes <toakes@mozilla.com>

* Update packages/babel/README.md

Co-Authored-By: Tiger Oakes <toakes@mozilla.com>

* Fixed how @rollup/pluginutils are used

* Allow Rollup 2 in peer dependency range

* Refactor babel plugin exports shape

* tweak usage example in the babel plugin README

* Align package.json of Babel plugin to existing package.json files in the monorepo

* Update @rollup/pluginutils in the Babel plugin

* Add new changelog entries to the Babel plugin

* Move babelHelpers recommendation text to the README

* Fix typo in the README

* chore: remove prepare script, build in prepublishOnly

This avoids fresh `pnpm install` problems where the build runs
before babel plugins are installed.

* Upgrade @babel/preset-env in babel plugin

Co-authored-by: Rich-Harris <richard.a.harris@gmail.com>
Co-authored-by: Oskar Segersvärd <victorystick@gmail.com>
Co-authored-by: Brian Donovan <me@brian-donovan.com>
Co-authored-by: Yuta Hiroto <git@about-hiroppy.com>
Co-authored-by: Henry Zhu <hi@henryzoo.com>
Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
Co-authored-by: Denis <carriere.denis@gmail.com>
Co-authored-by: Daniel Tschinder <daniel.tschinder@researchgate.net>
Co-authored-by: Brian Ng <bng412@gmail.com>
Co-authored-by: Roy Revelt <roy@codsen.com>
Co-authored-by: Minh Nguyen <minhnguyenxx@gmail.com>
Co-authored-by: Can Göktas <cangoektas@users.noreply.github.com>
Co-authored-by: Corey Farrell <git@cfware.com>
Co-authored-by: Sebastian Werner <s.werner@sebastian-software.de>
Co-authored-by: Bogdan Chadkin <trysound@yandex.ru>
Co-authored-by: ylemkimon <mail@ylem.kim>
Co-authored-by: Kristoffer <denkristoffer@users.noreply.github.com>
Co-authored-by: Shadab Khan <shadab.2005@gmail.com>
Co-authored-by: Adam Gołąb <adam@brainhub.pl>
Co-authored-by: Kinrany <kinrany@yandex.com>
Co-authored-by: Mike Heddes <mikeheddes@gmail.com>
Co-authored-by: shellscape <andrew@shellscape.org>
Co-authored-by: Ryan Walters <shout@ryanwalters.co>
Co-authored-by: Lukas Taegert-Atkinson <lukastaegert@users.noreply.github.com>
Co-authored-by: Troy Rhinehart <troy.rhinehart@gmail.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
Co-authored-by: Tiger Oakes <toakes@mozilla.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants