# extract-files changelog ## 9.0.0 ### Major - Updated Node.js support to `^10.17.0 || ^12.0.0 || >= 13.7.0`. - Updated dev dependencies, some of which require newer Node.js versions than previously supported. - Renamed the `lib` directory to `public`; existing deep import or require paths must be updated. - Removed the package `module` field. ### Patch - Removed Node.js v13 and added v14 to the versions tested in GitHub Actions. - Simplified the GitHub Actions CI config with the [`npm install-test`](https://docs.npmjs.com/cli/install-test.html) command. - Improved JSDoc code examples. - Updated EditorConfig. - No longer transpile tests with Babel, or test ESM. - Simplified the Babel config and scripts, ensuring `.js` files are parsed as scripts. - Removed unnecessary `.js` file extensions from `require` paths. - Documented all the ways to `import` and `require` the public API. - Tweaked the readme setup instructions. ## 8.1.0 ### Minor - Updated the package `exports` field: - Deep imports to specific files are now allowed, e.g. ```js import extractFiles from 'extract-files/lib/extractFiles.js'; ``` ```js const extractFiles = require('extract-files/lib/extractFiles'); ``` - The `package.json` can now be required, e.g. ```js const pkg = require('extract-files/package.json'); ``` ```js // With Node.js --experimental-json-modules flag. import pkg from 'extract-files/package.json'; ``` ### Patch - Updated dev dependencies. - Updated the package `engines.node` field to `10 - 12 || >= 13.7` to reflect the package `exports` related breaking changes in `extract-files@8.0.0`. - Improved the package `prepare:prettier` and `test:prettier` scripts. - Reordered the package `test:eslint` script args for consistency with `test:prettier`. - Configured Prettier option `semi` to the default, `true`. - Restructured the `src` directory so `lib` and `test` files are separate with their own `.babelrc.js` files. ## 8.0.0 ### Major - Added a [package `exports` field](https://nodejs.org/api/esm.html#esm_package_exports) to support native ESM in Node.js. - Some source and published files are now `.js` (CJS) instead of `.mjs` (ESM), so undocumented deep imports may no longer work. [This approach avoids the dual package hazard](https://nodejs.org/api/esm.html#esm_approach_1_use_an_es_module_wrapper). ### Patch - Updated dependencies. - Removed [`@babel/plugin-proposal-class-properties`](https://npm.im/@babel/plugin-proposal-class-properties) from dev dependencies and the Babel config. - Lint fixes for [`prettier`](https://npm.im/prettier) v2. - Ensure GitHub Actions run on pull request. - Improved the `ExtractableFileMatcher` JSDoc typedef. - Size limit test the published CJS files as well as the ESM. ## 7.0.0 ### Major - Updated Node.js support from v8.10+ to v10+. - Replaced [`tap`](https://npm.im/tap) and [`nyc`](https://npm.im/nyc) with [`test-director`](https://npm.im/test-director), [`coverage-node`](https://npm.im/coverage-node) and [`hard-rejection`](https://npm.im/hard-rejection) to improve the dev experience, test ESM natively with Node.js, and reduce the dev install size by ~78.8 MB. These new dev dependencies require Node.js v10+. ### Patch - Updated dev dependencies. - Removed the now redundant [`eslint-plugin-import-order-alphabetical`](https://npm.im/eslint-plugin-import-order-alphabetical) dev dependency. - Stop using [`husky`](https://npm.im/husky) and [`lint-staged`](https://npm.im/lint-staged). - More thorough tests. - Use strict mode for scripts. - Renamed some package scripts. ## 6.0.0 ### Major - Updated Node.js support from v6+ to v8.10+. ### Minor - Added the ability to customize what are extractable files, fixing [#10](https://github.com/jaydenseric/extract-files/issues/10) via [#11](https://github.com/jaydenseric/extract-files/pull/11): - Added a new third parameter to the `extractFiles` function, for specifying a custom extractable file matcher. - Export a new `isExtractableFile` function that is used as the default extractable file matcher for the `extractFiles` function. This can be used in a custom extractable file matcher implementation to match the default extractable files, along with additional custom files. - Setup [GitHub Sponsors funding](https://github.com/sponsors/jaydenseric): - Added `.github/funding.yml` to display a sponsor button in GitHub. - Added a `package.json` `funding` field to enable npm CLI funding features. ### Patch - Updated dev dependencies. - Replaced the [`size-limit`](https://npm.im/size-limit) dev dependency with [`@size-limit/preset-small-lib`](https://npm.im/@size-limit/preset-small-lib). - Added a new [`babel-plugin-transform-require-extensions`](https://npm.im/babel-plugin-transform-require-extensions) dev dependency and ensured ESM import specifiers in both source and published `.mjs` files contain file names with extensions, which [are mandatory in the final Node.js ESM implementation](https://nodejs.org/api/esm.html#esm_mandatory_file_extensions). Published CJS `.js` files now also have file extensions in `require` paths. - Added a package `module` field. - Removed now redundant ESLint disable `require-jsdoc` comments. - Use GitHub Actions instead of Travis for CI. - Redid the test scripts and enforced 100% code coverage. - Run size limit tests last in the package `test` script as they are the slowest. - Only size limit test the ESM build. - Updated the package `test:tap` script to workaround a [`tap` bug](https://github.com/tapjs/node-tap/issues/624). - Simplified the `prepublishOnly` script. - Ordered `plugins` before `presets` in Babel config as they run first. - Reduced the size of the published `package.json` by moving dev tool config to files. - Only target the root `lib` directory in `.gitignore` and `.eslintignore`. - Removed `package-lock.json` from `.gitignore` and `.prettierignore` as it’s disabled in `.npmrc` anyway. - Prevented ESLint from ignoring dotfiles. - Clarified that Opera Mini isn’t supported in the Browserslist queries and readme “Support” section. ## 5.0.1 ### Patch - Updated dev dependencies. - Instance (e.g. [`new Date()`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date)) references are copied to the clone instead of recursed as objects; fixing [jaydenseric/apollo-upload-client#138](https://github.com/jaydenseric/apollo-upload-client/issues/138) via [#9](https://github.com/jaydenseric/extract-files/pull/9). - Test more types of input. ## 5.0.0 ### Major - `extractFiles` has a new return signature and no longer mutates the original input, fixing [#8](https://github.com/jaydenseric/extract-files/issues/8). It returns an object with `clone`, a clone of the original input value with files recursively replaced with `null`, and `files`, a `Map` instance keying each extracted file to an array of object paths. ### Minor - Files can now be used as the root value passed to `extractFiles`. ### Patch - Updated dev dependencies. - Updated package description. - Moved JSDoc type definitions into the index file. - Manually composed package exports instead of relying on `*`. - Improved tests. - Added a paragraph explaining the GraphQL use case to the readme. ## 4.1.0 ### Minor - Support more browsers by changing the [Browserslist](https://github.com/browserslist/browserslist) query from [`> 1%`](https://browserl.ist/?q=%3E+1%25) to [`> 0.5%, not dead`](https://browserl.ist/?q=%3E+0.5%25%2C+not+dead). ### Patch - Updated dev dependencies. - Ensure Babel reads from the package `browserslist` field due to [a sneaky `@babel/preset-env` breaking change](https://github.com/babel/babel/pull/8509). - Updated package scripts and config for the new [`husky`](https://npm.im/husky) version. - Removed the package `module` field. Webpack by default resolves extensionless paths the same way Node.js in `--experimental-modules` mode does; `.mjs` files are preferred. Tools misconfigured or unable to resolve `.mjs` can get confused when `module` points to an `.mjs` ESM file and they attempt to resolve named imports from `.js` CJS files. - Added a `ReactNativeFileSubstitute` type example. - Move JSDoc typedefs to the end of files to make it quicker to find the code. - Regenerated the readme API docs using the latest [`jsdoc-md`](https://npm.im/jsdoc-md) version. - Tests now log if the environment is CJS or ESM (`--experimental-modules`) and the `NODE_ENV`. ## 4.0.0 ### Major - `extractFiles` is a named export again, and there is no longer a default export; mixed named and default exports causes native ESM and CJS interoperability issues. - `isObject` is no longer exported. It was not a documented API anyway. - Removed the `ReactNativeFile` static function `list`. It added surface area to the API and bundles and is simple to do manually. ### Minor - Updated Babel, removing the `@babel/runtime` dependency. - Refactored package scripts to use `prepare` to support installation via Git (e.g. `npm install jaydenseric/extract-files`). - Package [marked side-effect free](https://webpack.js.org/guides/tree-shaking#mark-the-file-as-side-effect-free) for bundlers and tree-shaking. ### Patch - Use [`jsdoc-md`](https://npm.im/jsdoc-md) to generate readme API docs from source JSDoc, which has been much improved. - Use [`tap`](https://npm.im/tap) instead of [`ava`](https://npm.im/ava). Tests no longer transpile on the fly, are faster and AVA no longer dictates the Babel version. - Tests run against the actual dist `.mjs` and `.js` files in both native ESM (`--experimental-modules`) and CJS environments. - Added a package `test:size` script, using [`size-limit`](https://npm.im/size-limit) to guarantee < 500 byte ESM and CJS bundle sizes. - Removed the package clean script `rimraf` dev dependency in favour of native `rm -rf`. - Removed the package `fix` script. - Renamed the `MODULE` environment variable to `BABEL_ESM` to be more specific for the package `prepare:mjs` script. - Lint `.json`, `.yml` and `.md` files. - Use `.prettierignore` to leave `package.json` formatting to npm. - Use [`eslint-config-env`](https://npm.im/eslint-config-env). - Compact package `repository` field. - Updated package description. - HTTPS package author URL. - Added package keywords. - Replaced [shields.io](https://shields.io) readme badges with: - A [Badgen](https://badgen.net) npm version badge. - An official Travis badge that only tracks `master` branch. - Changelog version entries now have “Major”, “Minor” and “Patch” subheadings. ## 3.1.0 ### Minor - Added support for [`Blob`](https://developer.mozilla.org/en/docs/Web/API/Blob) types, via [#5](https://github.com/jaydenseric/extract-files/pull/5). ### Patch - Updated dependencies. ## 3.0.0 ### Major - The `extractFiles` function is now the default export. - Replace extracted files with `null` instead of deletion, fixing [#4](https://github.com/jaydenseric/extract-files/issues/4). ### Patch - Updated dev dependencies. - Simplified npm scripts. ## 2.1.1 ### Patch - Setup Travis to test using the latest stable Node.js version and the oldest supported in `package.json` `engines` (v6.10). - Added a Travis readme badge. ## 2.1.0 ### Minor - Support [browsers with >1% global usage](http://browserl.ist/?q=%3E1%25) (was >2%). - Target Node.js v6.10+ for transpilation and polyfills via `package.json` `engines`. - Support Node.js native ESM via `--experimental-modules`: - Module files now have `.mjs` extension. - Modular project structure that works better for native ESM. - Reduced bundle size, fixing [#3](https://github.com/jaydenseric/extract-files/issues/3): - Using `babel-preset-env` to handle polyfills so only required ones are included for supported environments. - Using `Array.prototype.slice.call` to convert `FileList` instances to arrays instead of `Array.from` which requires a lot of polyfills. ### Patch - Updated dependencies. - Updated Prettier and ESLint config. - Prettier formats distribution code as well as source code, along with the readme and changelog. - No more source maps; Prettier does not support them. - Added a clean step to builds. - Renamed `dist` directory to `lib`. - Using Babel directly instead of Rollup. - Smarter Babel config with `.babelrc.js`. - Added links to readme badges. - Updated the readme support section. ## 2.0.1 ### Patch - Updated dependencies. - Fixed incorrect usage example code for `ReactNativeFile.list`, via [#1](https://github.com/jaydenseric/extract-files/pull/1). ## 2.0.0 ### Major - Extracted file paths no longer begin with `.` when no tree path is passed to `extractFiles`. ### Patch - Updated dev dependencies. ## 1.1.0 ### Minor - Added tests. ### Patch - Updated dev dependencies. - Removed `lint-staged`, linting and tests now run on commit. - Fixed `extractFiles` bugs by using logic that worked in [`apollo-upload-client@5`](https://github.com/jaydenseric/apollo-upload-client/tree/v5.0.0). ## 1.0.0 Initial release.