Skip to content

Latest commit

 

History

History
488 lines (349 loc) · 25.1 KB

changelog.md

File metadata and controls

488 lines (349 loc) · 25.1 KB

graphql-upload changelog

Next

Major

  • Updated Node.js support to ^10.13.0 || ^12.0.0 || >= 13.7.0.
  • Updated dev dependencies, some of which require newer Node.js versions than previously supported.

Patch

  • Updated the graphql peer dependency to 0.13.1 - 15, fixing #200 via #201.
  • Updated Prettier related package scripts.
  • Configured Prettier option semi to the default, true.
  • Ensure GitHub Actions run on pull request.
  • Minor JSDoc wording tweak for consistency.

10.0.0

Major

  • Updated Node.js support from v8.10+ to v10+, as earlier versions have reached end-of-life.
  • Updated the fs-capacitor dependency to v6, which now requires Node.js v10+, via #179.
  • Updated dev dependencies, some of which now require Node.js v10+.
  • Replaced the tap dev dependency with test-director, coverage-node, and hard-rejection to improve the dev experience and reduce the dev install size by ~75.7 MB. These new dev dependencies require Node.js v10+.
  • Reorganized files. This is only a breaking change for projects using undocumented deep imports.
  • Removed now redundant Node.js version compatibility logic in the processRequest function.
  • The processRequest function now places references to instances of the now exported and documented Upload class in the GraphQL operation for the GraphQLUpload scalar to derive its value, and the GraphQLUpload scalar now throws a GraphQLError when it parses an invalid value, fixing #175 via #181.
  • The GraphQLUpload scalar parseLiteral and serialize methods now throw GraphQLError (instead of Error) instances, with tweaked messages.

Minor

  • The createReadStream function in resolved file uploads now accepts options to configure the encoding and high water mark, fixing #177 via #179.

Patch

  • Removed the now redundant eslint-plugin-import-order-alphabetical and express-async-handler dev dependencies.
  • Stop using husky and lint-staged.
  • Use isobject for checking if values are enumerable, non-array objects.
  • Tests have been massively reorganized, refactored, and improved.
  • Test the GraphQLUpload scalar.
  • Test the ignoreStream function.
  • Moved the Upload class to its own file.
  • Added JSDoc for the Upload class instance property file.
  • Test the Upload class.
  • Improved JSDoc FileUpload typedef description.
  • Removed now redundant eslint-disable-next-line comments.
  • Use strict mode for scripts.

9.0.0

Major

  • Updated Node.js support from v8.5+ to v8.10+, to match what the eslint dev dependency now supports. This is unlikely to be a breaking change for the published package.
  • Removed the Upload scalar promise resolved stream property that has been deprecated since v7, along with associated tests.
  • ESM is no longer published, due to CJS/ESM compatibility issues across recent Node.js versions, via #169.
  • The file structure and non-index file exports have changed. This should only affect projects using undocumented deep imports.

Minor

  • Updated the fs-capacitor dependency to v4 to support Node.js v13, making required changes to the source and tests, via #166.
  • JSDoc comments are now included in the published code.
  • Several anonymous functions have been named, for better error stack traces.
  • Setup GitHub Sponsors funding:
    • 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.
  • Removed the .nycrc.json file:
    • tap now ignores test files by default.
    • The lib/test-helpers directory is now ignored using tap CLI arguments due to tapjs/node-tap#612.
  • Removed the esm and mjs package tags; they will be added back once native ESM is properly supported.
  • Updated JSDoc code examples to use CJS instead of ESM, as native ESM is not yet properly supported.
  • No longer test fs-capacitor implementation details such as temp file creation and cleanup.
  • Commented the reasons for several istanbul ignore next comments.

8.1.0

Minor

  • processRequest now throws an appropriate error when a multipart field value exceeds the configured size limit, fixing #159.
  • When the file size limit is exceeded, mention how many bytes the limit is in the stream error message.
  • Added a new processRequest option to the graphqlUploadExpress and graphqlUploadKoa middleware, for improved testing without mocks or spies which are difficult to achieve with ESM.

Patch

  • Updated dependencies.
  • Due to updated dependencies: Lint fixes, removed redundant eslint-disable-next-line comments, and regenerated the readme.
  • Documented koa-graphql as known to be compatible, via #156.
  • Fixed a readme typo, via #161.
  • Use GitHub Actions instead of Travis for CI.
  • Removed package-lock.json from .gitignore and .prettierignore, as it’s disabled in .npmrc anyway.
  • New file structure.
  • Explicitly defined main exports (instead of using export * from) to prevent accidental public exposure of internal APIs.
  • Moved JSDoc typedefs into the index main entry file, alphabetically sorted.
  • Nicer Browserslist query syntax.
  • Replaced the isObject helper with a smarter and tested isEnumerableObject.
  • Removed the isString helper.
  • Enforced 100% code coverage for tests, and improved processRequest internals and tests (including a new test using vanilla Node.js HTTP), fixing #130 via #162.
  • Removed a workaround from the startServer test helper.
  • Added a new ProcessRequestFunction JSDoc type, and applied it to processRequest.
  • Renamed the UploadOptions JSDoc type to ProcessRequestOptions.
  • Misc. documentation improvements.

8.0.7

Patch

  • Updated dependencies.
  • Handle invalid object paths in map multipart field entries, fixing #154.
  • Import WriteStream from fs-capacitor as a named rather than default import.

8.0.6

Patch

  • Updated dependencies.
  • Allow batched operations again, fixing #142.
  • Simplify tests by writing JSON as strings instead of using JSON.stringify.
  • Use async middleware with express-async-handler for Express tests.
  • Removed unintended maxFiles config in certain tests.
  • Added the Open Graph image design to the logo Sketch file.

8.0.5

Patch

  • Updated dependencies.
  • Handle invalid types in multipart fields and respond with meaningful HTTP 400 errors, via #139:
    • Invalid operations type.
    • Invalid map type.
    • Invalid map entry type.
    • Invalid map entry array item type.
  • Additionally test current Node.js v8 and v10 versions with Travis.
  • Reduced the size of the published package.json by moving dev tool config to files. This also prevents editor extensions such as Prettier and ESLint from detecting config and attempting to operate when opening package files installed in node_modules.
  • Removed the watch dev dependency and watch script.
  • Simplified the prepublishOnly script.
  • Change to the classic TAP reporter for tests.
  • Add apollo-server-koa and apollo-server-express back to the compatible environments list in the readme, now that they use the current version of this package.

8.0.4

Patch

8.0.3

Patch

8.0.2

Patch

  • Updated dev dependencies.
  • Fixed hanging when a request with a large payload has an “immediate” error, such as a malformed request, fixing #123 via #124.
  • Moved JSDoc type definitions to the end of files to make it easier to open to the code.

8.0.1

Patch

  • Updated dev dependencies.
  • 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.
  • Updated package scripts and config for the new husky version.
  • Added a package browserslist field with the target Node.js version for @babel/preset-env and removed related config from babel.config.js.
  • Tests now log if the environment is CJS or ESM (--experimental-modules) and the NODE_ENV.
  • Fixed broken readme API documentation links.

8.0.0

Major

  • New naming that drops “apollo” to reflect the independent and universal nature of the project, fixing #68:

    To migrate you project from apollo-upload-server@7.1.0 to graphql-upload@8.0.0:

    1. Run npm uninstall apollo-upload-server.
    2. Run npm install graphql-upload.
    3. Find and replace:
      • apolloUploadKoagraphqlUploadKoa.
      • apolloUploadExpressgraphqlUploadExpress.

Patch

  • Updated dependencies.
  • New project logo.

7.1.0

Minor

Patch

  • Updated dev dependencies.

7.0.0

Major

  • The processRequest function now requires a http.ServerResponse instance as its second argument.
  • Replaced the previously exported error classes with http-errors and snapshot tested error details, via #105.
  • No longer exporting the SPEC_URL constant.

Minor

  • Upload scalar promises now resolve with a createReadStream method instead of a stream property, via #92.
  • Accessing an Upload scalar promise resolved stream property results in a deprecation warning that recommends using createReadStream instead. It will be removed in a future release. Via #107.
  • An Upload scalar variable can now be used by multiple resolvers, via #92.
  • Multiple Upload scalar variables can now use the same multipart data, via #92.
  • Malformed requests containing invalid JSON for operations or map multipart fields cause an appropriate error with a 400 status instead of crashing the process, relating to #81 and #95.
  • Malformed requests missing operations, map and files, or just map and files, cause an appropriate error with a 400 status instead of hanging, fixing #96.
  • Tweaked GraphQLUpload scalar description to remove details about how it resolves on the server as they are irrelevant to API users.
  • Tweaked GraphQLUpload scalar error messages.

Patch

  • Updated dev dependencies.
  • Removed the npm-run-all dev dependency and made scripts and tests sync for easier debugging, at the cost of slightly longer build times.
  • Explicitly set processRequest default options instead of relying on busboy defaults.
  • Better organized project file structure.
  • Configured Prettier to lint .yml files.
  • Ensure the readme Travis build status badge only tracks master branch.

6.0.0-alpha.1

Big thanks to new collaborator @mike-marcacci for his help solving tricky bugs and edge-cases!

Major

Minor

  • Refactored package scripts to use prepare to support installation via Git (e.g. npm install jaydenseric/apollo-upload-server).

Patch

  • Updated dependencies.
  • Use single instead of double typographic quotes in error messages.
  • Use babel.config.js instead of .babelrc.js.
  • Enabled shippedProposals in @babel/preset-env config.
  • Improved testing:
    • Use tap instead of 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 native ESM (--experimental-modules) and CJS environments.
    • Removed get-port dev dependency.
    • Added Express tests.
    • Test middleware error response status codes.
    • Test behavior of aborted HTTP requests.
    • Test that the app can respond if an upload is not handled.
    • Test files to upload are created in context, rather than using arbitrary project files, via #89.
  • Improved package.json scripts:
    • Leveraged npm-run-all more for parallelism and reduced noise.
    • Removed the clean script rimraf dev dependency in favour of native rm -rf. Leaner and faster; we only support *nix now for contributing anyway.
    • No longer use cross-env; contributors with Windows may setup and use a Bash shell.
    • Renamed the ESM environment variable to BABEL_ESM to be more specific.
    • Removed linting fix scripts.
    • Linting included in the test script; Travis CI will fail PR's with lint errors.
    • Custom watch script.
  • Improved ESLint config:
    • Simplified ESLint config with eslint-config-env.
    • Removed redundant eslint-plugin-ava dev dependency and config.
    • Undo overriding ESLint ignoring dotfiles by default as there are none now.
  • Use .prettierignore to leave package.json formatting to npm.
  • Tweaked package description and keywords.
  • Compact package repository field.
  • Improved documentation.
  • Readme badge changes to deal with shields.io unreliability:
    • Use the official Travis build status badge.
    • Use Badgen for the npm version badge.
    • Removed the licence badge. The licence can be found in package.json and rarely changes.
    • Removed the Github issues and stars badges. The readme is most viewed on Github anyway.
  • Changelog version entries now have “Major”, “Minor” and “Patch” subheadings.

5.0.0

Major

  • graphql peer dependency range updated to ^0.13.1 for native ESM support via .mjs. It’s a breaking change despite being a semver patch.

Patch

  • Updated dependencies.
  • More robust npm scripts, with the ability to watch builds and tests together.
  • Fixed missing dev dependency for fetching in tests.
  • Use eslint-plugin-ava.
  • HTTPS package.json author URL.
  • New readme logo URL that doesn’t need to be updated every version.

4.0.2

Patch

  • Temporary solution for importing CommonJS in .mjs, fixing reopened #40.

4.0.1

Patch

  • Correct imports for vanilla Node.js --experimental-modules and .mjs support, fixing #40.

4.0.0

Patch

  • Updated dependencies.
  • Simplified npm scripts.
  • Readme updates:
    • Documented Blob types, via #39.
    • Explained how to use processRequest for custom middleware.
    • Improved usage instructions.
    • Display oldest supported Node.js version.
    • Misc. tweaks including a simpler heading structure.

4.0.0-alpha.3

Minor

  • Updated peer dependencies to support graphql@0.12, via #36.

Patch

  • Updated dependencies.

4.0.0-alpha.2

Minor

  • Transpile and polyfill for Node.js v6.10+ (down from v7.6+) to support AWS Lambda, fixing #33.
  • Modular project structure that works better for native ESM.
  • Added tests.
  • Set up 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.
  • Improved error handling, fixing #26:
    • Custom errors are thrown or emitted with meaningful messages that are exported so consumers can use instanceof with them.
    • Where it makes sense, errors cause relevant HTTP status codes to be set in middleware.
    • Misordered multipart fields cause processRequest to throw MapBeforeOperationsUploadError and FilesBeforeMapUploadError errors in middleware.
    • The map field provided by the client is used to naively check the maxFiles option is not exceeded for a speedy MaxFilesUploadError error in middleware. The real number of files parsed is checked too, incase the request is malformed.
    • If files are missing from the request the scalar Upload promises reject with a FileMissingUploadError error.
    • Already if a file exceeds the maxFileSize option the file is truncated, the stream emits a limit event and stream.truncated === true. Now an error event is also emitted with a MaxFileSizeUploadError.
    • Aborting requests from the client causes scalar Upload promises to reject with a UploadPromiseDisconnectUploadError error for file upload streams that have not yet been parsed. For streams being parsed an error event is emitted with an FileStreamDisconnectUploadError error and stream.truncated === true. It is up to consumers to cleanup aborted streams in their resolvers.

Patch

  • Updated dependencies.
  • Smarter Babel config with .babelrc.js.
  • Refactor to use fewer Busboy event listeners.

4.0.0-alpha.1

Major

  • New API to support the GraphQL multipart request spec v2.0.0-alpha.2. Files no longer upload to the filesystem; readable streams are used in resolvers instead. Fixes #13 via #22.
  • Export a new Upload scalar type to use in place of the old Upload input type. It represents a file upload promise that resolves an object containing stream, filename, mimetype and encoding.
  • Deprecated the uploadDir middleware option.
  • graphql is now a peer dependency.

Minor

  • Added new maxFieldSize, maxFileSize and maxFiles middleware options.

Patch

  • Middleware are now arrow functions.

3.0.0

Major

  • Updated Node.js support from v6.4+ to v7.6+.
  • Express middleware now passes on errors instead of blocking, via #20.

Patch

  • Using Babel directly, dropping Rollup.
  • New directory structure for compiled files.
  • Module files now have .mjs extension.
  • No longer publish the src directory.
  • No more sourcemaps.
  • Use an arrow function for the Koa middleware, to match the Express middleware.
  • Compiled code is now prettier.
  • Prettier markdown files.
  • Updated package keywords.
  • Updated an Apollo documentation link in the changelog.
  • Readme improvements:
    • Added links to badges.
    • Removed the inspiration links; they are less relevant to the evolved codebase.
    • Fixed an Apollo link.
    • Replaced example resolver code with a link to the Apollo upload examples.

2.0.4

Patch

  • Updated dependencies.
  • Readme tweaks including a new license badge.

2.0.3

Patch

  • Updated dependencies.
  • Removed package-lock.json. Lockfiles are not recommended for packages.
  • Moved Babel config out of package.json to prevent issues when consumers run Babel over node_modules.
  • Readme tweaks and fixes:
    • Renamed the File input type Upload for clarity.
    • Wording and formatting improvements.
    • Covered React Native.
    • Documented custom middleware.

2.0.2

Patch

  • Updated dependencies.
  • Added a changelog.
  • Dropped Yarn in favor of npm@5. Removed yarn.lock and updated install instructions.
  • Set targeted Node version as a string for babel-preset-env.
  • New ESLint config. Dropped Standard Style and began using Prettier.
  • Using lint-staged to ensure contributors don't commit lint errors.
  • Removed build:watch script. Use npm run build -- --watch directly.

2.0.1

Patch

  • Updated dependencies.
  • Support regular requests from clients other than apollo-upload-client again, fixing #4.
  • Removed incorrect commas from example GraphQL input type.

2.0.0

Major

Patch

  • Clearer package description.
  • Use Standard Style instead of ESLint directly.

1.1.0

Minor

  • Exporting a new helper function for processing requests. It can be used to create custom middleware, or middleware for unsupported routers.
  • Exporting new Koa middleware.
  • Upload directory is ensured on every request now. While slightly less efficient, it prevents major errors when if it is deleted while the server is running.

Patch

  • Updated dependencies.
  • Documented npm install as well as Yarn.
  • Typo fix in the readme.

1.0.2

Patch

  • Fixed broken Github deep links in the readme.
  • Readme rewording.
  • Simplified package.json description.

1.0.1

Patch

  • Added missing metadata to package.json.
  • Added a link to apollographql/graphql-server in the readme.

1.0.0

Initial release.