498 lines
16 KiB
Markdown
498 lines
16 KiB
Markdown
# "angular-in-memory-web-api" versions
|
||
>This in-memory-web-api exists primarily to support the Angular documentation.
|
||
It is not supposed to emulate every possible real world web API and is not intended for production use.
|
||
>
|
||
>Most importantly, it is ***always experimental***.
|
||
|
||
We will make breaking changes and we won't feel bad about it
|
||
because this is a development tool, not a production product.
|
||
We do try to tell you about such changes in this `CHANGELOG.md`
|
||
and we fix bugs as fast as we can.
|
||
|
||
<a id="0.11.0"></a>
|
||
## 0.11.0 (2020-05-13)
|
||
|
||
* update to support Angular v10.
|
||
* no functional changes.
|
||
|
||
<a id="0.9.0"></a>
|
||
## 0.9.0 (2019-06-20)
|
||
|
||
* update to support Angular version 8.x and forward
|
||
* no functional changes
|
||
|
||
<a id="0.8.0"></a>
|
||
## 0.8.0 (2018-12-06)
|
||
|
||
* remove `@angular/http` support
|
||
* no functional changes
|
||
|
||
**BREAKING CHANGE**
|
||
This version no longer supports any functionality for `@angular/http`. Please use
|
||
`@angular/common/http` instead.
|
||
|
||
<a id="0.7.0"></a>
|
||
## 0.7.0 (2018-10-31)
|
||
|
||
* update to support Angular v7.
|
||
* no functional changes
|
||
|
||
<a id="0.6.1"></a>
|
||
## 0.6.1 (2018-05-04)
|
||
|
||
* update to Angular and RxJS v6 releases
|
||
|
||
<a id="0.6.0"></a>
|
||
## 0.6.0 (2018-03-22)
|
||
|
||
*Migrate to Angular v6 and RxJS v6 (rc and beta)*
|
||
|
||
Note that this release is pinned to Angular "^6.0.0-rc.0" and RxJS "^6.0.0-beta.1".
|
||
Will likely update again when they are official.
|
||
|
||
**BREAKING CHANGE**
|
||
This version depends on RxJS v6 and is not backward compatible with earlier RxJS versions.
|
||
|
||
<a id="0.5.4"></a>
|
||
## 0.5.4 (2018-03-09)
|
||
|
||
Simulated HTTP error responses were not delaying the prescribed time when using RxJS `delay()`
|
||
because it was short-circuited by the ErrorResponse.
|
||
New `delayResponse` function does it right.
|
||
Should not break you unless you incorrectly expected no delay for errors.
|
||
|
||
Also, this library no longer calls RxJS `delay()` which may make testing with it easier
|
||
(Angular TestBed does not handle RxJS `delay()` well because that operator uses `interval()`).
|
||
|
||
Also fixes type error (issue #180).
|
||
|
||
<a id="0.5.3"></a>
|
||
## 0.5.3 (2018-01-06)
|
||
Can make use of `HttpParams` which yields a `request.urlWithParams`.
|
||
Added supporting `HeroService.searchHeroes(term: string)` and test.
|
||
|
||
<a id="0.5.2"></a>
|
||
## 0.5.2 (2017-12-10)
|
||
No longer modify the request data coming from client. Fixes #164
|
||
|
||
<a id="0.5.1"></a>
|
||
## 0.5.1 (2017-10-21)
|
||
Support Angular v5.
|
||
|
||
<a id="0.5.0"></a>
|
||
## 0.5.0 (2017-10-05)
|
||
**BREAKING CHANGE**: HTTP response data no longer wrapped in object w/ `data` property by default.
|
||
|
||
In this release, the `dataEncapsulation` configuration default changed from `false` to `true`. The HTTP response body holds the data values directly rather than an object that encapsulates those values, `{data: ...}`. This is a **breaking change that affects almost all existing apps!**
|
||
|
||
Changing the default to `false` is a **breaking change**. Pre-existing apps that did not set this property explicitly will be broken because they expect encapsulation and are probably mapping
|
||
the HTTP response results from the `data` property like this:
|
||
```
|
||
.map(data => data.data as Hero[])
|
||
```
|
||
**To migrate, simply remove that line everywhere.**
|
||
|
||
If you would rather keep the web api's encapsulation, `{data: ...}`, set `dataEncapsulation` to `true` during configuration as in the following example:
|
||
```
|
||
HttpClientInMemoryWebApiModule.forRoot(HeroInMemDataService, { dataEncapsulation: true })
|
||
```
|
||
|
||
We made this change because
|
||
|
||
1. Almost everyone seems to hate the encapsulation
|
||
|
||
2. Encapsulation requires mapping to get the desired data out. With old `Http` that isn't _too_ bad because you needed to map to get data anyway (`res => res.json()`). But it is really ugly for `HttpClient` because you can't use the type HTTP method type parameter (e.g., `get<entity-type>`) and you have to map out of the data property (`.map(data => data.data as Hero[]`). That extra step requires explanations that distract from learning `HttpClient` itself.
|
||
Now you just write `http.get<Hero[]>()` and you’ve got data (please add error handling).
|
||
|
||
3. While you could have turned off encapsulation with configuration as of v.0.4, to do so took yet another step that you’d have to discover and explain. A big reason for the in-mem web api is to make it easy to introduce and demonstrate HTTP operations in Angular. The _out-of-box_ experience is more important than avoiding a breaking change.
|
||
|
||
4. The [security flaw](http://stackoverflow.com/questions/3503102/what-are-top-level-json-arrays-and-why-are-they-a-security-risk)
|
||
that prompted encapsulation seems to have been mitigated by all (almost all?) the browsers that can run an Angular (v2+) app. We don’t think it’s needed anymore.
|
||
|
||
5. A most real world APIs today will not encapsulate; they’ll return the data in the body without extra ceremony.
|
||
|
||
<a id="0.4.6"></a>
|
||
## 0.4.6 (2017-09-13)
|
||
- improves README
|
||
- updates v0.4.0 entry in the CHANGELOG to describe essential additions to SystemJS configuration.
|
||
- no important functional changes.
|
||
|
||
<a id="0.4.5"></a>
|
||
## 0.4.5 (2017-09-11)
|
||
Feature - offer separate `HttpClientInMemoryWebApiModule` and `HttpInMemoryWebApiModule`.
|
||
|
||
closes #140
|
||
|
||
<a id="0.4.4"></a>
|
||
## 0.4.4 (2017-09-11)
|
||
closes #136
|
||
|
||
A **breaking change** if you expected `genId` to generate ids for a collection
|
||
with non-numeric `item.id`.
|
||
|
||
<a id="0.4.3"></a>
|
||
## 0.4.3 (2017-09-11)
|
||
Refactoring for clarity and to correctly reflect intent.
|
||
A **breaking change** only if your customizations depend directly and explicitly on `RequestInfo` or the `get`, `delete`, `post`, or `put` methods.
|
||
|
||
- replace all `switchMap` with `concatMap` because, in all previous uses of `switchMap`,
|
||
I really meant to wait for the source observable to complete _before_ beginning the inner observable whereas `switchMap` starts the inner observable right away.
|
||
|
||
- restored `collection` to the `RequestInfo` interface and set it in `handleRequest_`
|
||
- `get`, `delete`, `post`, and `put` methods get the `collection` from `requestInfo`; simplifies their signatures to one parameter.
|
||
|
||
<a id="0.4.2"></a>
|
||
## 0.4.2 (2017-09-08)
|
||
- Postpones the in-memory database initialization (via `resetDb`) until the first HTTP request.
|
||
|
||
- Your `createDb` method _can_ be asynchronous.
|
||
You may return the database object (synchronous), an observable of it, or a promise of it. Issue #113.
|
||
|
||
- fixed some rare race conditions.
|
||
|
||
<a id="0.4.1"></a>
|
||
## 0.4.1 (2017-09-08)
|
||
**Support PassThru.**
|
||
|
||
The passthru feature was broken by 0.4.0
|
||
- add passthru to both `Http` and `HttpClient`
|
||
- test passThru feature with jasmine-ajax mock-ajax plugin
|
||
to intercept Angular's attempt to call browser's XHR
|
||
- update devDependency packages
|
||
- update karma.conf with jasmine-ajax plugin
|
||
|
||
<a id="0.4.0"></a>
|
||
## 0.4.0 (2017-09-07)
|
||
**Theme: Support `HttpClient` and add tests**.
|
||
See PR #130.
|
||
|
||
The 0.4.0 release was a major overhaul of this library.
|
||
|
||
You don't have to change your existing application _code_ if your app uses this library without customizations.
|
||
|
||
But this release's **breaking changes** affect developers who used the customization features or loaded application files with SystemJS.
|
||
|
||
**BREAKING CHANGES**: Massive refactoring.
|
||
Many low-level and customization options have changed.
|
||
Apps that stuck with defaults should be (mostly) OK.
|
||
|
||
If you're loading application files with **SystemJS** (as you would in a plunker), see the [instructions below](#v-0-4-systemjs).
|
||
|
||
* added support for `HttpClient` -> renaming of backend service classes
|
||
* added tests
|
||
* refactor existing code to support tests
|
||
* correct bugs and clarify choices as result of test
|
||
* add some configuration options
|
||
- dataEncapsulation (issue #112, pr#123)
|
||
- post409
|
||
- put404b
|
||
* `POST commands/resetDb` passes the request to your `resetDb` method
|
||
so you can optionally reset the database dynamically
|
||
to arbitrary initial states (issue #128)
|
||
* when HTTP method interceptor returns null/undefined, continue with service's default processing (pr #120)
|
||
* can substitute your own id generator, `geniD`
|
||
* parseUrl -> parseRequestUrl
|
||
* utility methods exposed in `RequestInfo.utils`
|
||
* reorganize files into src/app and src/in-mem
|
||
* adjust gulp tasks accordingly
|
||
|
||
---
|
||
|
||
<a id="v-0-4-systemjs"></a>
|
||
### Plunkers and SystemJS
|
||
|
||
If you’re loading application files with **SystemJS** (as you would in a plunker), you’ll have to configure it to load Angular’s `umd.js` for `HttpModule` and the `tslib` package.
|
||
|
||
To see how, look in the `map` section of the
|
||
[`src/systemjs.config.js` for this project](https://github.com/angular/in-memory-web-api/blob/master/src/systemjs.config.js) for the following two _additional_ lines :
|
||
|
||
```
|
||
'@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',
|
||
...
|
||
'tslib': 'npm:tslib/tslib.js',
|
||
|
||
```
|
||
|
||
You've already made these changes if you are using `HttpClient` today.
|
||
|
||
If you’re sticking with the original Angular `Http` module, you _must make this change anyway!_ Your app will break as soon as you run `npm install` and it installs >=v0.4.0.
|
||
|
||
If you're using webpack (as CLI devs do), you don't have to worry about this stuff because webpack bundles the dependencies for you.
|
||
|
||
---
|
||
|
||
<a id="0.3.2"></a>
|
||
## 0.3.2 (2017-05-02)
|
||
* Bug fixes PRs #91, 95, 106
|
||
|
||
<a id="0.3.1"></a>
|
||
## 0.3.1 (2017-03-08)
|
||
* Now runs in node so can use in "universal" demos.
|
||
See PR #102.
|
||
|
||
<a id="0.3.0"></a>
|
||
## 0.3.0 (2017-02-27)
|
||
* Support Angular version 4
|
||
|
||
<a id="0.2.4"></a>
|
||
## 0.2.4 (2017-01-02)
|
||
* Remove reflect-matadata and zone.js as peerDependencies
|
||
|
||
<a id="0.2.3"></a>
|
||
## 0.2.3 (2016-12-28)
|
||
* Unpin RxJs
|
||
|
||
<a id="0.2.2"></a>
|
||
## 0.2.2 (2016-12-20)
|
||
* Update to Angular 2.4.0
|
||
|
||
<a id="0.2.1"></a>
|
||
## 0.2.1 (2016-12-14)
|
||
* Fixed regression in handling commands, introduced in 0.2.0
|
||
* Improved README
|
||
|
||
<a id="0.2.0"></a>
|
||
## 0.2.0 (2016-12-11)
|
||
|
||
* BREAKING CHANGE: The observables returned by the `handleCollections` methods that process requests against the supplied in-mem-db collections are now "cold".
|
||
That means that requests aren't processed until something subscribes to the observable ... just like real-world `Http` calls.
|
||
|
||
Previously, these request were "hot" meaning that the operation was performed immediately
|
||
(e.g., an in-memory collection was updated) and _then_ we returned an `Observable<Response>`.
|
||
That was a mistake! Fixing that mistake _might_ break your app which is why bumped the _minor_ version number from 1 to 2.
|
||
|
||
We hope _very few apps are broken by this change_. Most will have subscribed anyway.
|
||
But any app that called an `http` method with fire-and-forget ... and didn't subscribe ...
|
||
expecting the database to be updated (for example) will discover that the operation did ***not*** happen.
|
||
|
||
* BREAKING CHANGE: `createErrorResponse` now requires the `Request` object as its first parameter
|
||
so it can prepare a proper error message.
|
||
For example, a 404 `errorResponse.toString()` now shows the request URL.
|
||
|
||
* Commands remain "hot" — processed immediately — as they should be.
|
||
|
||
* The `HTTP GET` interceptor in example `hero-data.service` shows how to create your own "cold" observable.
|
||
|
||
* While you can still specify the `inMemDbService['responseInterceptor']` to morph the response options,
|
||
the previously exported `responseInterceptor` function no longer exists as it served no useful purpose.
|
||
Added the `ResponseInterceptor` _type_ to remind you of the signature to implement.
|
||
|
||
* Allows objects with `id===0` (issue #56)
|
||
|
||
* The default `parseUrl` method is more flexible, thanks in part to the new `config.apiBase` property.
|
||
See the ReadMe to learn more.
|
||
|
||
* Added `config.post204` and `config.put204` to control whether PUT and POST return the saved entity.
|
||
It is `true` by default which means they do not return the entity (`status=204`) — the same behavior as before. (issue #74)
|
||
|
||
* `response.url` is set to `request.url` when this service itself creates the response.
|
||
|
||
* A few new methods (e.g., `emitResponse`) to assist in HTTP method interceptors.
|
||
|
||
<hr>
|
||
|
||
<a id="0.1.17"></a>
|
||
## 0.1.17 (2016-12-07)
|
||
* Update to Angular 2.2.0.
|
||
|
||
<a id="0.1.16"></a>
|
||
## 0.1.16 (2016-11-20)
|
||
* Swap `"lib": [ "es2015", "dom" ]` in `tsconfig.json` for @types/core-js` in `package.json` issue #288
|
||
|
||
<a id="0.1.15"></a>
|
||
## 0.1.15 (2016-11-14)
|
||
* Update to Angular 2.2.0.
|
||
|
||
<a id="0.1.14"></a>
|
||
## 0.1.14 (2016-10-29)
|
||
* Add `responseInterceptor` for [issue #61](https://github.com/angular/in-memory-web-api/issues/61)
|
||
|
||
<a id="0.1.13"></a>
|
||
## 0.1.13 (2016-10-20)
|
||
* Update README for 0.1.11 breaking change: npm publish as `esm` and a `umd` bundle
|
||
|
||
Going to `umd` changes your `systemjs.config` and the way you import the library.
|
||
|
||
In `systemjs.config.js` you should change the mapping to:
|
||
```
|
||
'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js'
|
||
```
|
||
then delete from `packages`:
|
||
```
|
||
'angular-in-memory-web-api': {
|
||
main: './index.js',
|
||
defaultExtension: 'js'
|
||
}
|
||
```
|
||
You must ES import the in-mem module (typically in `AppModule`) like this:
|
||
```
|
||
import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
|
||
```
|
||
<a id="0.1.12"></a>
|
||
## 0.1.12 (2016-10-19)
|
||
* exclude travis.yml and rollup.config.js from npm package
|
||
|
||
<a id="0.1.11"></a>
|
||
## 0.1.11 (2016-10-19)
|
||
* BREAKING CHANGE: npm publish as `esm` and a `umd` bundle.
|
||
Does not change the API but does change the way you register and import the
|
||
in-mem module. Documented in later release, v.0.1.13
|
||
|
||
<a id="0.1.10"></a>
|
||
## 0.1.10 (2016-10-19)
|
||
* Catch a `handleRequest` error and return as a failed server response.
|
||
|
||
<a id="0.1.9"></a>
|
||
## 0.1.9 (2016-10-18)
|
||
* Restore delay option, issue #53.
|
||
|
||
<a id="0.1.7"></a>
|
||
## 0.1.7 (2016-10-12)
|
||
* Angular 2.1.x support.
|
||
|
||
<a id="0.1.6"></a>
|
||
## 0.1.6 (2016-10-09)
|
||
* Do not add delay to observable if delay value === 0 (issue #47)
|
||
* Can override `parseUrl` method in your db service class (issue #46, #35)
|
||
* README.md explains `parseUrl` override.
|
||
* Exports functions helpful for custom HTTP Method Interceptors
|
||
* `createErrorResponse`
|
||
* `createObservableResponse`
|
||
* `setStatusText`
|
||
* Added `examples/hero-data.service.ts` to show overrides (issue #44)
|
||
|
||
<a id="0.1.5"></a>
|
||
## 0.1.5 (2016-10-03)
|
||
* project.json license changed again to match angular.io package.json
|
||
|
||
<a id="0.1.4"></a>
|
||
## 0.1.4 (2016-10-03)
|
||
* project.json license is "MIT"
|
||
|
||
<a id="0.1.3"></a>
|
||
## 0.1.3 (2016-09-29)
|
||
* Fix typos
|
||
|
||
<a id="0.1.2"></a>
|
||
## 0.1.2 (2016-09-29)
|
||
* AoT support from Tor PR #36
|
||
* Update npm packages
|
||
* `parseId` fix from PR #33
|
||
|
||
<a id="0.1.1"></a>
|
||
## 0.1.1 (2016-09-26)
|
||
* Exclude src folder and its TS files from npm package
|
||
|
||
<a id="0.1.0"></a>
|
||
## 0.1.0 (2016-09-25)
|
||
* Renamed package to "angular-in-memory-web-api"
|
||
* Added "passThruUnknownUrl" options
|
||
* Simplified `forRoot` and made it acceptable to AoT
|
||
* Support case sensitive search (PR #16)
|
||
|
||
# "angular2-in-memory-web-api" versions
|
||
The last npm package named "angular2-in-memory-web-api" was v.0.0.21
|
||
|
||
<a id="0.0.21"></a>
|
||
## 0.0.21 (2016-09-25)
|
||
* Add source maps (PR #14)
|
||
|
||
<a id="0.0.20"></a>
|
||
## 0.0.20 (2016-09-15)
|
||
* Angular 2.0.0
|
||
* Typescript 2.0.2
|
||
|
||
<a id="0.0.19"></a>
|
||
## 0.0.19 (2016-09-13)
|
||
* RC7
|
||
|
||
<a id="0.0.18"></a>
|
||
## 0.0.18 (2016-08-31)
|
||
* RC6 (doesn't work with older versions)
|
||
|
||
<a id="0.0.17"></a>
|
||
## 0.0.17 (2016-08-19)
|
||
* fix `forRoot` type constraint
|
||
* clarify `forRoot` param
|
||
|
||
<a id="0.0.16"></a>
|
||
## 0.0.16 (2016-08-19)
|
||
* No longer exports `HttpModule`
|
||
* Can specify configuration options in 2nd param of `forRoot`
|
||
* jsDocs for `forRoot`
|
||
|
||
<a id="0.0.15"></a>
|
||
## 0.0.15 (2016-08-09)
|
||
* RC5
|
||
* Support for NgModules
|
||
|
||
<a id="0.0.14"></a>
|
||
## 0.0.14 (2016-06-30)
|
||
* RC4
|
||
|
||
<a id="0.0.13"></a>
|
||
## 0.0.13 (2016-06-21)
|
||
* RC3
|
||
|
||
<a id="0.0.12"></a>
|
||
## 0.0.12 (2016-06-15)
|
||
* RC2
|
||
|
||
<a id="0.0.11"></a>
|
||
## 0.0.11 (2016-05-27)
|
||
* add RegExp query support
|
||
* find-by-id is sensitive to string ids that look like numbers
|
||
|
||
<a id="0.0.10"></a>
|
||
## 0.0.10 (2016-05-21)
|
||
* added "main:index.js" to package.json
|
||
* updated to typings v.1.0.4 (a breaking release)
|
||
* dependencies -> peerDependencies|devDependencies
|
||
* no es6-shim dependency.
|
||
* use core-js as devDependency.
|
||
|
||
<a id="0.0.9"></a>
|
||
## 0.0.9 (2016-05-19)
|
||
* renamed the barrel core.js -> index.js
|
||
|
||
<a id="0.0.8"></a>
|
||
## 0.0.8 (2016-05-19)
|
||
* systemjs -> commonjs
|
||
* replace es6-shim typings w/ core-js typings
|
||
|
||
<a id="0.0.7"></a>
|
||
## 0.0.7 (2016-05-03)
|
||
* RC1
|
||
* update to 2.0.0-rc.1
|
||
|
||
<a id="0.0.6"></a>
|
||
## 0.0.6 (2016-05-03)
|
||
* RC0
|
||
* update to 2.0.0-rc.0
|
||
|
||
<a id="0.0.5"></a>
|
||
## 0.0.5 (2016-05-01)
|
||
* PROVISIONAL - refers to @angular packages
|
||
* update to 0.0.0-5
|
||
|
||
<a id="0.0.4"></a>
|
||
## 0.0.4 (2016-04-30)
|
||
* PROVISIONAL - refers to @angular packages
|
||
* update to 0.0.0-3
|
||
* rxjs: "5.0.0-beta.6"
|
||
|
||
<a id="0.0.3"></a>
|
||
## 0.0.3 (2016-04-29)
|
||
* PROVISIONAL - refers to @angular packages
|
||
* update to 0.0.0-2
|
||
|
||
<a id="0.0.2"></a>
|
||
## 0.0.2 (2016-04-27)
|
||
* PROVISIONAL - refers to @angular packages
|
||
|
||
<a id="0.0.1"></a>
|
||
## 0.0.1 (2016-04-27)
|
||
* DO NOT USE. Not adapted to new package system.
|
||
* Initial cut for Angular 2 repackaged
|
||
* target forthcoming Angular 2 RC
|