UNPKG

every-plugin

Version:
129 lines (113 loc) 3.81 kB
import { existsSync, readFileSync } from "node:fs"; import { createRequire } from "node:module"; import { dirname, join } from "node:path"; import pkg from "../../package.json"; const require = createRequire(import.meta.url); declare const __EVERY_PLUGIN_VERSION__: string | undefined; function readPackageVersion(): string { try { return (require("../../package.json") as { version: string }).version; } catch { return "0.0.0"; } } function getInstalledPackageVersion(packageName: string, fallbackRange: string): string { try { let currentDir = dirname(require.resolve(packageName)); for (let i = 0; i < 5; i += 1) { const packageJsonPath = join(currentDir, "package.json"); if (existsSync(packageJsonPath)) { return (JSON.parse(readFileSync(packageJsonPath, "utf-8")) as { version: string }).version; } currentDir = dirname(currentDir); } throw new Error(`Could not resolve installed version for ${packageName}`); } catch { const match = fallbackRange.match(/\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?/); return match ? match[0] : fallbackRange.replace(/^[\^~>=<\s]+/, ""); } } export const PLUGIN_VERSION = typeof __EVERY_PLUGIN_VERSION__ === "string" ? __EVERY_PLUGIN_VERSION__ : readPackageVersion(); export interface SharedConfig { singleton: boolean; requiredVersion: string | false; strictVersion: boolean; eager: boolean; } export const SHARE_CONFIG: SharedConfig = { singleton: true, requiredVersion: false, strictVersion: false, eager: false, }; export const MF_CORE_SHARED_DEPS = { "every-plugin": { version: PLUGIN_VERSION, shareScope: "default", shareConfig: SHARE_CONFIG, }, effect: { version: getInstalledPackageVersion("effect", pkg.peerDependencies.effect), shareScope: "default", shareConfig: SHARE_CONFIG, }, zod: { version: getInstalledPackageVersion("zod", pkg.peerDependencies.zod), shareScope: "default", shareConfig: SHARE_CONFIG, }, "@orpc/contract": { version: getInstalledPackageVersion("@orpc/contract", pkg.peerDependencies["@orpc/contract"]), shareScope: "default", shareConfig: SHARE_CONFIG, }, "@orpc/client": { version: getInstalledPackageVersion("@orpc/client", pkg.peerDependencies["@orpc/client"]), shareScope: "default", shareConfig: SHARE_CONFIG, }, "@orpc/server": { version: getInstalledPackageVersion("@orpc/server", pkg.peerDependencies["@orpc/server"]), shareScope: "default", shareConfig: SHARE_CONFIG, }, } as const; export type CoreSharedDepName = keyof typeof MF_CORE_SHARED_DEPS; export interface AppSharedDepConfig { version: string; requiredVersion?: string | false; singleton?: boolean; strictVersion?: boolean; eager?: boolean; shareScope?: string; } export type AppSharedDeps = Record<string, AppSharedDepConfig>; export function buildMergedSharedDeps( appShared?: AppSharedDeps, ): Record<string, { version: string; shareScope: string; shareConfig: SharedConfig }> { const merged: Record<string, { version: string; shareScope: string; shareConfig: SharedConfig }> = {}; for (const [name, config] of Object.entries(MF_CORE_SHARED_DEPS)) { merged[name] = { version: config.version, shareScope: config.shareScope, shareConfig: config.shareConfig, }; } if (appShared) { for (const [name, config] of Object.entries(appShared)) { merged[name] = { version: config.version, shareScope: config.shareScope ?? "default", shareConfig: { singleton: config.singleton ?? false, requiredVersion: config.requiredVersion ?? false, strictVersion: config.strictVersion ?? false, eager: config.eager ?? false, }, }; } } return merged; }