import plugins from '../'; async function executeSequentially(params: T[], action: (t: T) => Promise): Promise { console.log(`executeSequentially ${params.length} items params[0]=${params[0]}`); return params.reduce(async (previousPromise: Promise, param: T) => { await previousPromise; console.log(`done param=${param}`); return action(param); }, Promise.resolve()); } export async function remove(itemIds: string[]): Promise { return executeSequentially(itemIds, itemId => { console.log('destroying', itemId); return plugins.client.items.destroy(itemId).then(() => { console.log('destroyed', itemId); }); }); } export async function removeAll(projectsRecords: any, itemTypeId: string): Promise { const itemIds = projectsRecords .filter((item: any) => { return item.itemType === itemTypeId; }).map((item: any) => { return item.id; }); console.log(`Removing ${itemIds.length} ${plugins.constants.getName(itemTypeId)}s`); if (itemIds.length === 0) { return 0; } return remove(itemIds); } export async function execute(projectId: string): Promise { const projectsRecords: any = await plugins.records.allRecordsForProject(projectId); if (!projectsRecords) { console.error('projectsRecords===null, nothing to remove'); } else { console.log('projectsRecords.length', projectsRecords.length); const themeConfigIds = await removeAll(projectsRecords, plugins.constants.TYPE.themeConfiguration); console.log(`Removed ${themeConfigIds} themeconfigurations`); const products = await removeAll(projectsRecords, plugins.constants.TYPE.product); console.log(`Removed ${products} products`); const buttons = await removeAll(projectsRecords, plugins.constants.TYPE.globalButton); console.log(`Removed ${buttons} buttons`); const siteConfigIds = await removeAll(projectsRecords, plugins.constants.TYPE.siteConfig); console.log(`Removed ${siteConfigIds} siteConfigs`); const footerLayoutIds = await removeAll(projectsRecords, plugins.constants.TYPE.footerLayout); console.log(`Removed ${footerLayoutIds} footerlayouts`); const headerLayoutIds = await removeAll(projectsRecords, plugins.constants.TYPE.headerLayout); console.log(`Removed ${headerLayoutIds} headerLayouts`); const menuItemIds = await removeAll(projectsRecords, plugins.constants.TYPE.homepageMenuItem); console.log(`Removed ${menuItemIds} menuItems`); const contentPageIds = await removeAll(projectsRecords, plugins.constants.TYPE.contentPage); console.log(`Removed ${contentPageIds} contentpages`); const merchants = await removeAll(projectsRecords, plugins.constants.TYPE.merchant); console.log(`Removed ${merchants} merchants`); const projectsRecordsAfter = await plugins.records.allRecordsForProject(projectId); if (projectsRecordsAfter === null) { console.log('projectsRecordsAfter==null!'); } else { console.error('projectsRecordsAfter.length', projectsRecordsAfter.length); } } const removedEditor = await plugins.editors.remove(projectId); console.log(`Removed editor ${removedEditor}`); const removedToken = await plugins.tokens.remove(projectId); console.log(`Removed token ${removedToken}`); const removedRole = await plugins.roles.remove(projectId); console.log(`Removed role ${removedRole}`); const removedEnvironment = await plugins.environments.remove(projectId); console.log(`Removed environment ${removedEnvironment}`); }