import { deletePath } from './filemanager.js' interface FeatureData { paths: string[] dependencies: string[] devDependencies: string[] } export const features = [ 'Live', 'Speakers', 'Schedule', 'Ondemands', 'Staff Zone', 'Downloads', 'Survey', 'Questions', 'FAQs', 'Trivia Game', 'PWA', 'Notifications', ] as const export type Features = (typeof features)[number] const featuresMap = new Map([ [ 'Live', { paths: ['src/app/features/live', 'src/app/pages/logged/streaming'], dependencies: [], devDependencies: [], }, ], ['Speakers', { paths: ['src/app/features/speaker'], dependencies: [], devDependencies: [] }], ['Schedule', { paths: ['src/app/features/schedule'], dependencies: [], devDependencies: [] }], [ 'Ondemands', { paths: ['src/app/features/ondemand', 'src/app/pages/logged/ondemands'], dependencies: ['@vimeo/player'], devDependencies: ['@types/vimeo__player'], }, ], [ 'Staff Zone', { paths: ['src/app/features/staff'], dependencies: ['html5-qrcode', 'html2canvas-pro'], devDependencies: [], }, ], ['Survey', { paths: ['src/app/features/survey'], dependencies: [], devDependencies: [] }], ['Questions', { paths: ['src/app/features/questions'], dependencies: [], devDependencies: [] }], ['Downloads', { paths: ['src/app/pages/logged/downloads'], dependencies: [], devDependencies: [] }], ['FAQs', { paths: ['src/app/pages/faq'], dependencies: [], devDependencies: [] }], [ 'Trivia Game', { paths: ['src/app/features/game', 'src/app/pages/logged/game'], dependencies: [], devDependencies: [], }, ], [ 'PWA', { paths: [ 'src/app/core/services/pwa.service.ts', 'src/app/shared/components', 'public/manifest.webmanifest', 'public/manifest.dev.webmanifest', 'public/icons', 'ngsw-config.json', ], dependencies: [], devDependencies: [], }, ], [ 'Notifications', { paths: [ 'src/app/core/services/notifications.service.ts', 'src/app/core/services/push-notification.service.ts', 'src/app/features/notifications', 'src/app/pages/logged/notifications', ], dependencies: [], devDependencies: [], }, ], ]) export const resolveSelectedFeatures = (selectedFeatures: Features[] = []) => { const resolved = new Set(selectedFeatures) if (resolved.has('Notifications')) { resolved.add('PWA') } return [...resolved] } const getFeaturesData = (selectedFeatures: Features[] = []) => { const resolvedFeatures = resolveSelectedFeatures(selectedFeatures) return { selected: resolvedFeatures.map((feature) => featuresMap.get(feature)!), skip: features .filter((feature) => !resolvedFeatures.includes(feature)) .map((feature) => featuresMap.get(feature)!), } } export const handleSelectedFeatures = (targetPath: string, selectedFeatures: Features[] = []) => { const { selected, skip } = getFeaturesData(selectedFeatures) const paths = skip.map((d) => d.paths).flat() const dependencies = selected.map((d) => d.dependencies).flat() const devDependencies = selected.map((d) => d.devDependencies).flat() paths.forEach((relativePath) => deletePath(targetPath, relativePath)) return { dependencies, devDependencies } }