mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
0139b91b5d
* chore: Replace lodash with es-toolkit Migrate all direct lodash imports to es-toolkit/compat for a smaller, faster, lodash-compatible utility library. Transitive lodash usage from other packages remains unchanged. * fix: Restore isPlainObject semantics in CanCan policy The lodash migration aliased `isObject` to `lodash/isPlainObject` and the codemod incorrectly mapped the local name to es-toolkit's `isObject`, which also returns true for arrays and functions. This caused condition objects in policy definitions to be skipped, breaking authorization checks across the codebase. * fix: Restore unicode-aware length counting in validators es-toolkit/compat's size() returns string.length, while lodash's _.size() counts unicode code points. Switch to [...value].length to preserve the previous behavior so multi-byte characters like emoji count as one.
38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { flatten } from "es-toolkit/compat";
|
|
import stores from "~/stores";
|
|
import { flattenTree } from "@shared/utils/tree";
|
|
|
|
/**
|
|
* Delete all databases in the browser.
|
|
*
|
|
* @returns A promise that resolves when all databases have been deleted.
|
|
*/
|
|
export async function deleteAllDatabases() {
|
|
if (!window.indexedDB) {
|
|
return;
|
|
}
|
|
|
|
if ("databases" in window.indexedDB) {
|
|
const databases = await window.indexedDB.databases();
|
|
|
|
for (const database of databases) {
|
|
if (database.name) {
|
|
window.indexedDB.deleteDatabase(database.name);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
// If the browser does not support listing databases, we need to manually delete as best we can
|
|
// by iterating over all known collections and documents.
|
|
await Promise.all(
|
|
stores.collections.orderedData.map(async (collection) => {
|
|
const nodes = flatten(collection.documents?.map(flattenTree));
|
|
|
|
return nodes.map(async (node) => {
|
|
window.indexedDB.deleteDatabase(`document.${node.id}`);
|
|
});
|
|
})
|
|
);
|
|
}
|