@bobfrankston/userconfig
v1.0.3
Published
Read/write user config from %USERPROFILE%\.userconfig\npm.json5
Readme
@bobfrankston/userconfig
Single source of truth for user-level npm/dev configuration at %USERPROFILE%\.userconfig\npm.json5.
Used by @bobfrankston/npmglobalize, @bobfrankston/reloc, and other tools.
Install
npm install @bobfrankston/userconfigConfig file
npm.json5 has two kinds of entries:
- Common fields — shared across tools (scope, npmVisibility)
- App sections — tool-specific settings (reloc, etc.)
{
// ─── Common fields ───
scope: "@bobfrankston", // npm scope for publishing
npmVisibility: "public", // default publish visibility: "public" or "private"
// ─── App-specific sections ───
reloc: {
dirs: ["y:\\dev\\homecontrol", "y:\\dev\\projects"],
},
}Common fields
| Field | Type | Description |
|---|---|---|
| scope | string | npm scope, e.g. "@bobfrankston" |
| npmVisibility | "public" | "private" | Default publish visibility |
App sections
| Section | Tool | Fields |
|---|---|---|
| reloc | @bobfrankston/reloc | dirs — default scan directories |
New tools can add their own sections without conflicting.
Usage
import { readConfig, getSection, setSection, configPath } from '@bobfrankston/userconfig';
// Read common fields
const config = readConfig();
console.log(config.scope); // "@bobfrankston"
console.log(config.npmVisibility); // "public"
// Read an app section
const reloc = getSection('reloc');
console.log(reloc?.dirs);
// Write an app section (preserves everything else)
setSection('reloc', { dirs: ['y:\\dev\\homecontrol'] });
// Low-level: read any JSON5-ish file
import { readJson5, writeJson5 } from '@bobfrankston/userconfig';
const data = readJson5('/path/to/file.json5');API
| Export | Description |
|---|---|
| configDir | %USERPROFILE%\.userconfig |
| configPath | %USERPROFILE%\.userconfig\npm.json5 |
| readConfig() | Read the full config (typed as NpmConfig) |
| writeConfig(data) | Write the full config |
| getSection(name) | Get a top-level key |
| setSection(name, value) | Set a top-level key (preserves others) |
| readJson5(file) | Parse any JSON5-ish file |
| writeJson5(file, data) | Write JSON to a file (creates dirs) |
Types
interface NpmCommonConfig {
scope?: string;
npmVisibility?: 'public' | 'private';
}
interface RelocConfig {
dirs?: string[];
}
interface NpmConfig extends NpmCommonConfig {
reloc?: RelocConfig;
[key: string]: any; // other app sections
}