MCPcopy Create free account
hub / github.com/dmno-dev/bumpy / loadPackageConfig

Function loadPackageConfig

packages/bumpy/src/core/config.ts:41–78  ·  view source on GitHub ↗
(
  pkgDir: string,
  rootConfig: BumpyConfig,
  pkgName: string,
)

Source from the content-addressed store, hash-verified

39
40/** Load per-package bumpy config from package.json["bumpy"] or .bumpy.config.json */
41export async function loadPackageConfig(
42 pkgDir: string,
43 rootConfig: BumpyConfig,
44 pkgName: string,
45): Promise<PackageConfig> {
46 // Start with what's in the root config's packages map
47 const rootPkgConfig = findPackageConfig(rootConfig, pkgName);
48
49 // Layer on package.json["bumpy"]
50 let pkgJsonConfig: PackageConfig = {};
51 try {
52 const pkg = await readJson<Record<string, unknown>>(resolve(pkgDir, 'package.json'));
53 if (pkg.bumpy && typeof pkg.bumpy === 'object') {
54 pkgJsonConfig = pkg.bumpy as PackageConfig;
55 }
56 } catch {
57 // ignore
58 }
59
60 // Block custom commands from per-package config unless the root explicitly allows them.
61 // Commands defined in the root config's `packages` map are always trusted.
62 const CUSTOM_CMD_KEYS = ['buildCommand', 'publishCommand', 'checkPublished'] as const;
63 const disallowedKeys = CUSTOM_CMD_KEYS.filter((k) => pkgJsonConfig[k] != null);
64 if (disallowedKeys.length > 0 && !isCustomCommandAllowed(pkgName, rootConfig)) {
65 const fields = disallowedKeys.map((k) => `"${k}"`).join(', ');
66 throw new Error(
67 `Package "${pkgName}" defines custom command(s) (${fields}) in its package.json "bumpy" config, ` +
68 'but the root config does not allow this.\n' +
69 'Custom commands execute shell commands during publishing and must be explicitly enabled.\n\n' +
70 'To fix this, either:\n' +
71 ' 1. Move the command(s) to .bumpy/_config.json under "packages" (always trusted)\n' +
72 ` 2. Add "allowCustomCommands": true (or ["${pkgName}"]) to .bumpy/_config.json`,
73 );
74 }
75
76 // Merge: root packages map → package.json["bumpy"] (later wins)
77 return mergePackageConfig(rootPkgConfig, pkgJsonConfig);
78}
79
80/** Find a package config from the root config, supporting glob patterns */
81function findPackageConfig(config: BumpyConfig, pkgName: string): PackageConfig {

Callers 2

findChangedPackagesFunction · 0.90
loadWorkspacePackageFunction · 0.90

Calls 3

findPackageConfigFunction · 0.85
isCustomCommandAllowedFunction · 0.85
mergePackageConfigFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…