UNPKG

@launchql/core

Version:

LaunchQL Package and Migration Tools

63 lines (62 loc) 2.44 kB
import { sync as glob } from 'glob'; import { basename } from 'path'; import { getLatestChange, parseControlFile } from '../files'; import { errors } from '@launchql/types'; /** * List all modules by parsing .control files in the provided directory. */ export const listModules = (workspaceDir) => { const moduleFiles = glob(`${workspaceDir}/**/*.control`).filter((file) => !/node_modules/.test(file)); return moduleFiles.reduce((acc, file) => { const module = parseControlFile(file, workspaceDir); acc[basename(file).split('.control')[0]] = module; return acc; }, {}); }; /** * Get the latest change from the launchql.plan file for a specific module. */ export const latestChange = (sqlmodule, modules, basePath) => { const module = modules[sqlmodule]; if (!module) { throw errors.MODULE_NOT_FOUND({ name: sqlmodule }); } const planPath = `${basePath}/${module.path}/launchql.plan`; return getLatestChange(planPath); }; /** * Get the latest change and version for a specific module. */ export const latestChangeAndVersion = (sqlmodule, modules, basePath) => { const module = modules[sqlmodule]; if (!module) { throw errors.MODULE_NOT_FOUND({ name: sqlmodule }); } const planPath = `${basePath}/${module.path}/launchql.plan`; const change = getLatestChange(planPath); const pkg = require(`${basePath}/${module.path}/package.json`); return { change, version: pkg.version }; }; /** * Get extensions and modules required by a specific module. */ export const getExtensionsAndModules = (sqlmodule, modules) => { const module = modules[sqlmodule]; if (!module) { throw errors.MODULE_NOT_FOUND({ name: sqlmodule }); } const native = module.requires.filter((req) => !Object.keys(modules).includes(req)); const sqitch = module.requires.filter((req) => Object.keys(modules).includes(req)); return { native, sqitch }; }; /** * Get extensions and modules with their latest changes and versions. */ export const getExtensionsAndModulesChanges = (sqlmodule, modules, basePath) => { const { native, sqitch } = getExtensionsAndModules(sqlmodule, modules); const sqitchWithDetails = sqitch.map((mod) => { const { change, version } = latestChangeAndVersion(mod, modules, basePath); return { name: mod, latest: change, version }; }); return { native, sqitch: sqitchWithDetails }; };