mirror of
https://github.com/hanzoai/firebase-js-sdk.git
synced 2026-09-24 16:59:10 +00:00
* Split storage and storage-compat (#5271) * separate storage-compat from storage * commit * fix tests * wat? * build storage-compat * save * fixing some compat tests * format * update import path * format * get compat tests to work * format * update package json * cleanup * format * address comments * Update packages/storage-compat/test/unit/service.test.ts Co-authored-by: Christina Holland <[email protected]> * add missing dev dep * Update packages/storage-compat/package.json * Update packages/storage-compat/package.json * Update deps after v8 release * update compat version * Split database and database-compat (#5276) * compile database * pass database tests * compile and test database-compat * pass all tests * prettier * cleanup * fix lint * address comments * what is going on with ci * use correct case in import path * uppercase * rename * fix component name * Repo refactoring for v9 (#5325) * rename folders * rename folders * migrate app and app-compat * migrate installations and analytics * migrate app check * migrate auth * migrate functions * migrate messaging * migrate performance * migrate remoteconfig * remove v8 code * update versions * migrate firebase * fix merge issues * save * fix firebase builds * update changeset config * update build scripts * update release script * fix functions typings * remove redundant typings * update path * treat external dependencies correctly * fix lint * remove firestore-compat references * fix build issues * update build scripts * update pkg json * fix test * fix some tests * fix some tests * fix integration tests * fixes * fix dep * update ci tests * resolve todos * remove exp references * docgen build * export FirebaseError (#5349) * firebase packaging update (#5348) * Fei v9 main firestore (#5319) * compile firestore * update typings path * compile firestore compat * lint compat * make test work * get most tests work * build * remove special paths * update firestore-compat pkg json * fix merge issues * Simplify bundles * Prettier * Fix Bundle compile * Fix build * address comments * console build * Fix all tests * Prettier * fix merge issues * fix typo * update paths * app-exp * fix lint * correct path * fix * fix compat lint * fix firestore integration * fix workflow * update dep * Always block on Auth (#5340) * Always block on Auth * Don't block on token if already recevied * fix lint * build firestore * remove memory only tests * fix firebase integration tests * enable more build and tests * add firestore-compat to firebase dep * fix auth compat class * enable auth test * auth package doc * Update API reports Co-authored-by: Sebastian Schmidt <[email protected]> Co-authored-by: Feiyang1 <[email protected]> * rebasing * Create registerMessagingCompat.ts * Add changeset for v9 (#5350) * add changeset * publish messaging interop * add firestore bumps * update changeset * Revert "Create registerMessagingCompat.ts" This reverts commit 0b95a5167e403ffc0dbcd9dd7dcb7cda754e510d. * Revert "rebasing" This reverts commit a8bf697157aaa29e8450acb626aae81ad5b542e1. * Update index.d.ts (#5355) * Fix Context Check in `Messaging-Compat` (#5353) * Add Rules Unit Testing v2 skeleton for v9 release (#5352) * Reset package for next major version. * Switch emulator script to node-fetch. * Migrate the other request call to fetch. * Update packages/rules-unit-testing/package.json Co-authored-by: Feiyang <[email protected]> * Create stale-ducks-live.md * Revert version change. Co-authored-by: Feiyang <[email protected]> * fix import path (#5356) * Add new types and function stubs for RUT vNext. (#5316) * Add new types and function stubs. * Fix types for testEnv.emulators. * Add util functions. * Add withFunctionTriggersDisabled overloads. * Improve typing for EmulatorConfig. * Fix tests. * Rename test_environment.ts to initialize.ts. * Add a dummy test to make CI pass. * Implement emulators discovery in RUTv2. (#5334) * Add new types and function stubs. * Fix types for testEnv.emulators. * Add util functions. * Add withFunctionTriggersDisabled overloads. * Improve typing for EmulatorConfig. * Fix tests. * Rename test_environment.ts to initialize.ts. * Add a dummy test to make CI pass. * Implement emulators discovery. * Use URL object from global. * Fix unreachable error code. * Implement most of RUTv2 features. (#5343) * Implement most of RUTv2 features. * Switch to compat instances. * Remove legacy code. * Use public typings for release (#5358) * use public typings for storage * use public typings for database * Implement rest of RUTv2 features. (#5360) * Implement loading rules and withFunctionTriggersDisabled. * Implement clearFirestore and storage. * Add missing await. * Add default bucketUrl. * Use alternative method to clear bucket. * Use default param (review feedback). * Storage typing updates (#5359) * rename to StorageError * more type safety * Update API reports * update api report Co-authored-by: Feiyang1 <[email protected]> * correct component name * fix installtions-compat typing * remove rules-unit-testing from ignore list * reenable things * support mjs files * correct matching pattern * transform only @firebase/util * use public types for database doc * transform all but compat packages Co-authored-by: Sebastian Schmidt <[email protected]> Co-authored-by: Feiyang1 <[email protected]> Co-authored-by: kai <[email protected]> Co-authored-by: Yuchen Shi <[email protected]> Co-authored-by: Kai Wu <[email protected]>
150 lines
4.0 KiB
JavaScript
150 lines
4.0 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
import {
|
|
browserLocalPersistence,
|
|
browserSessionPersistence,
|
|
indexedDBLocalPersistence,
|
|
inMemoryPersistence
|
|
} from '@firebase/auth';
|
|
|
|
const INDEXED_DB_NAME = 'firebaseLocalStorageDb';
|
|
|
|
// Save these variables for test utils use below, since some tests may delete them.
|
|
const indexedDB = window.indexedDB;
|
|
const localStorage = window.localStorage;
|
|
const sessionStorage = window.sessionStorage;
|
|
|
|
export async function clearPersistence() {
|
|
sessionStorage.clear();
|
|
localStorage.clear();
|
|
// HACK: Deleting databases in Firefox sometimes take a few seconds. Let's just return early.
|
|
return withTimeout(
|
|
1000,
|
|
dbPromise(indexedDB.deleteDatabase(INDEXED_DB_NAME))
|
|
).catch(e => {
|
|
console.error(e);
|
|
return;
|
|
});
|
|
}
|
|
|
|
export async function localStorageSnap() {
|
|
return dumpStorage(localStorage);
|
|
}
|
|
export async function localStorageSet(dict) {
|
|
setInStorage(localStorage, dict);
|
|
}
|
|
export async function sessionStorageSnap() {
|
|
return dumpStorage(sessionStorage);
|
|
}
|
|
export async function sessionStorageSet(dict) {
|
|
setInStorage(sessionStorage, dict);
|
|
}
|
|
|
|
const DB_OBJECTSTORE_NAME = 'firebaseLocalStorage';
|
|
|
|
export async function indexedDBSnap() {
|
|
const db = await dbPromise(indexedDB.open(INDEXED_DB_NAME));
|
|
let entries;
|
|
try {
|
|
const store = db
|
|
.transaction([DB_OBJECTSTORE_NAME], 'readonly')
|
|
.objectStore(DB_OBJECTSTORE_NAME);
|
|
entries = await dbPromise(store.getAll());
|
|
} catch {
|
|
// May throw if DB_OBJECTSTORE_NAME is never created -- this is normal.
|
|
return {};
|
|
}
|
|
const result = {};
|
|
for (const { fbase_key: key, value } of entries) {
|
|
result[key] = value;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
export async function setPersistenceMemory() {
|
|
return auth.setPersistence(inMemoryPersistence);
|
|
}
|
|
|
|
export async function setPersistenceSession() {
|
|
return auth.setPersistence(browserSessionPersistence);
|
|
}
|
|
|
|
export async function setPersistenceLocalStorage() {
|
|
return auth.setPersistence(browserLocalPersistence);
|
|
}
|
|
|
|
export async function setPersistenceIndexedDB() {
|
|
return auth.setPersistence(indexedDBLocalPersistence);
|
|
}
|
|
|
|
// Mock functions for testing edge cases
|
|
export async function makeIndexedDBReadonly() {
|
|
IDBObjectStore.prototype.add = IDBObjectStore.prototype.put = () => {
|
|
return {
|
|
error: 'add/put is disabled for test purposes',
|
|
readyState: 'done',
|
|
addEventListener(event, listener) {
|
|
if (event === 'error') {
|
|
void Promise.resolve({}).then(listener);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
}
|
|
|
|
function dumpStorage(storage) {
|
|
const result = {};
|
|
for (let i = 0; i < storage.length; i++) {
|
|
const key = storage.key(i);
|
|
result[key] = JSON.parse(storage.getItem(key));
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function setInStorage(storage, dict) {
|
|
for (const [key, value] of Object.entries(dict)) {
|
|
if (value === undefined) {
|
|
storage.removeItem(key);
|
|
} else {
|
|
storage.setItem(key, JSON.stringify(value));
|
|
}
|
|
}
|
|
}
|
|
|
|
function dbPromise(dbRequest) {
|
|
return new Promise((resolve, reject) => {
|
|
dbRequest.addEventListener('success', () => {
|
|
resolve(dbRequest.result);
|
|
});
|
|
dbRequest.addEventListener('error', () => {
|
|
reject(dbRequest.error);
|
|
});
|
|
dbRequest.addEventListener('blocked', () => {
|
|
reject('blocked');
|
|
});
|
|
});
|
|
}
|
|
|
|
function withTimeout(ms, promise) {
|
|
return Promise.race([
|
|
new Promise((_, reject) =>
|
|
setTimeout(() => reject(new Error('operation timed out')), ms)
|
|
),
|
|
promise
|
|
]);
|
|
}
|