First, be sure to:
- fully upgrade all your Angular packages (check with
ng version
) - as stated in the official Angular documentation:
If you are updating from one major version to another, then we recommend that you do not skip major versions. Follow the instructions to incrementally update to the next major version, testing and validating at each step. For example, if you want to update from version 15.x.x to version 17.x.x, we recommend that you update to the latest 16.x.x release first. After successfully updating to 16.x.x, you can then update to 17.x.x.
So if you update from version < 9, please do the other migrations first. The version 9 migration is especially important, as a wrongly done migration could lead to the loss of all previously stored data.
ng update @ngx-pwa/local-storage
- Angular 17 is required.
- RxJS >= 7.4 is required. RxJS 6 is not supported.
All things that were deprecated in version 16 are removed in version 17.
LocalStorage
service is removed. The StorageMap
replacement exists since v8 now, so it is time to move forward.
Migration is very simple:
// Before
import { LocalStorage } from '@ngx-pwa/local-storage';
@Injectable()
export class YourService {
constructor(private storage: LocalStorage) {
this.storage.getItem('key').subscribe();
this.storage.setItem('key', 'value').subscribe();
this.storage.removeItem('key').subscribe();
this.storage.clear().subscribe();
this.storage.length;
}
}
// After
import { StorageMap } from '@ngx-pwa/local-storage';
@Injectable()
export class YourService {
constructor(private storage: StorageMap) {
this.storage.get('key').subscribe();
this.storage.set('key', 'value').subscribe();
this.storage.delete('key').subscribe();
this.storage.clear().subscribe();
this.storage.size;
}
}
Minor typings differences:
- the
StorageMap
read method returnsundefined
if thekey
does not exist (theLocalStorage
one returnednull
), so update any explicit condition:
// Before
this.storage.getItem('key').subscribe((data) => {
if (data !== null) {}
});
// After
this.storage.get('key').subscribe((data) => {
if (data !== undefined) {}
});
- the
StorageMap
writing methods returnundefined
(theLocalStorage
ones returnedtrue
): it is unlikely to concern you, as the return is useless for these methods
Specific JSONSchemaXXX
interfaces are removed. They were introduced in very old versions of this library as a workaround to some TypeScript issues which are gone for a long time now. Since version 8, you should have used the generic JSONSchema
interface.
Example:
// Before
const schema: JSONSchemaString = { type: 'string' };
// After
const schema: JSONSchema = { type: 'string' };
JSONValidator
is removed. It was an internal utility class which is limited, could change at any time and is out of scope of this library.
If you need a JSON validator, there are far better and dedicated libraries available like ajv.
LocalDatabase
is removed. It was an internal utility class, and overriding it is an undocumented behavior. If you are doing so, you are basically rewriting your own storage library, so using this one makes no sense, you can use your service directly.