var capacitorPreferences = (function (exports, core) {
    'use strict';

    const Preferences = core.registerPlugin('Preferences', {
        web: () => Promise.resolve().then(function () { return web; }).then(m => new m.PreferencesWeb()),
    });

    class PreferencesWeb extends core.WebPlugin {
        constructor() {
            super(...arguments);
            this.group = 'CapacitorStorage';
        }
        async configure({ group }) {
            if (typeof group === 'string') {
                this.group = group;
            }
        }
        async get(options) {
            const value = this.impl.getItem(this.applyPrefix(options.key));
            return { value };
        }
        async set(options) {
            this.impl.setItem(this.applyPrefix(options.key), options.value);
        }
        async remove(options) {
            this.impl.removeItem(this.applyPrefix(options.key));
        }
        async keys() {
            const keys = this.rawKeys().map(k => k.substring(this.prefix.length));
            return { keys };
        }
        async clear() {
            for (const key of this.rawKeys()) {
                this.impl.removeItem(key);
            }
        }
        async migrate() {
            var _a;
            const migrated = [];
            const existing = [];
            const oldprefix = '_cap_';
            const keys = Object.keys(this.impl).filter(k => k.indexOf(oldprefix) === 0);
            for (const oldkey of keys) {
                const key = oldkey.substring(oldprefix.length);
                const value = (_a = this.impl.getItem(oldkey)) !== null && _a !== void 0 ? _a : '';
                const { value: currentValue } = await this.get({ key });
                if (typeof currentValue === 'string') {
                    existing.push(key);
                }
                else {
                    await this.set({ key, value });
                    migrated.push(key);
                }
            }
            return { migrated, existing };
        }
        async removeOld() {
            const oldprefix = '_cap_';
            const keys = Object.keys(this.impl).filter(k => k.indexOf(oldprefix) === 0);
            for (const oldkey of keys) {
                this.impl.removeItem(oldkey);
            }
        }
        get impl() {
            return window.localStorage;
        }
        get prefix() {
            return this.group === 'NativeStorage' ? '' : `${this.group}.`;
        }
        rawKeys() {
            return Object.keys(this.impl).filter(k => k.indexOf(this.prefix) === 0);
        }
        applyPrefix(key) {
            return this.prefix + key;
        }
    }

    var web = /*#__PURE__*/Object.freeze({
        __proto__: null,
        PreferencesWeb: PreferencesWeb
    });

    exports.Preferences = Preferences;

    return exports;

})({}, capacitorExports);
//# sourceMappingURL=plugin.js.map
