UNPKG

appwrite-utils-cli

Version:

Appwrite Utility Functions to help with database management, data conversion, data import, migrations, and much more. Meant to be used as a CLI tool, I do not recommend installing this in frontend environments.

36 lines (35 loc) 1.69 kB
import { Databases, Query } from "node-appwrite"; import { delay, tryAwaitWithRetry } from "../utils/helperFunctions.js"; import { fetchAllCollections } from "../collections/methods.js"; import { MessageFormatter } from "../shared/messageFormatter.js"; export const fetchAllDatabases = async (database) => { const databases = await tryAwaitWithRetry(async () => await database.list([Query.limit(25)])); const allDatabases = databases.databases; if (allDatabases.length === 0) return []; let lastDatabaseId = allDatabases[allDatabases.length - 1].$id; while (databases.databases.length === 25) { const moreDatabases = await database.list([ Query.limit(25), Query.cursorAfter(lastDatabaseId), ]); allDatabases.push(...moreDatabases.databases); if (moreDatabases.databases.length < 25) break; lastDatabaseId = moreDatabases.databases[moreDatabases.databases.length - 1].$id; } return allDatabases; }; export const wipeDatabase = async (database, databaseId) => { MessageFormatter.info(`Wiping database: ${databaseId}`, { prefix: "Database" }); const existingCollections = await fetchAllCollections(databaseId, database); let collectionsDeleted = []; for (const { $id: collectionId, name } of existingCollections) { MessageFormatter.info(`Deleting collection: ${collectionId}`, { prefix: "Database" }); collectionsDeleted.push({ collectionId, collectionName: name }); await tryAwaitWithRetry(async () => await database.deleteCollection(databaseId, collectionId)); await delay(100); } return collectionsDeleted; };