UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

60 lines (58 loc) • 2.45 kB
import { fileExists, listFiles, readText } from "./fs.mjs"; import { OBSOLETE_FILES } from "./obsolete-files.mjs"; import { Effect } from "effect"; //#region src/services/scaffold/upgrade-audit/manifest.ts const readConfigKeys = (projectDir) => Effect.gen(function* () { if (!(yield* fileExists(projectDir, "bos.config.json"))) return []; const parsed = JSON.parse(yield* readText(projectDir, "bos.config.json")); return Object.keys(parsed); }); const existingOf = (projectDir, paths) => Effect.gen(function* () { const existing = []; for (const path of paths) if (yield* fileExists(projectDir, path)) existing.push(path); return existing; }); const localPluginName = (entry) => { return (typeof entry.development === "string" ? entry.development : "").match(/^local:plugins\/([^/]+)$/)?.[1] ?? null; }; const pluginInventory = (projectDir) => Effect.gen(function* () { if (!(yield* fileExists(projectDir, "bos.config.json"))) return []; const config = JSON.parse(yield* readText(projectDir, "bos.config.json")); const inventories = []; for (const [key, entry] of Object.entries(config.plugins ?? {})) { const name = localPluginName(entry) ?? key; inventories.push({ name, hasBackend: yield* fileExists(projectDir, `plugins/${name}/src/index.ts`), hasWeb: yield* fileExists(projectDir, `plugins/${name}/web`), extendsParent: typeof entry.extends === "string", variables: entry.variables ? Object.keys(entry.variables) : [], secrets: Array.isArray(entry.secrets) ? entry.secrets.map(String) : [] }); } return inventories; }); const buildManifest = (projectDir, tier, blockerCount, warnCount, importRewrites, configKeys, routerSeam) => Effect.gen(function* () { const deleteFiles = yield* existingOf(projectDir, OBSOLETE_FILES); const plugins = yield* pluginInventory(projectDir); const schemaFile = yield* fileExists(projectDir, "api/src/db/schema.ts"); const migrationFiles = yield* listFiles(projectDir, "api/src/db/migrations/**/*"); return { tier, blockerCount, warnCount, deleteFiles, importRewrites: importRewrites.filter((rewrite) => rewrite.files.length > 0), configKeys, routerSeam, authoredConfigTarget: "bos.app.ts", plugins, db: { schemaFile: schemaFile ? "api/src/db/schema.ts" : null, migrationsDir: migrationFiles.length > 0 ? "api/src/db/migrations" : null } }; }); //#endregion export { buildManifest, readConfigKeys }; //# sourceMappingURL=manifest.mjs.map