@ebowwa/claude-code-config-mcp 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +275 -0
- package/dist/index.js.map +1 -1
- package/dist/precedence.d.ts +115 -0
- package/dist/precedence.d.ts.map +1 -0
- package/dist/precedence.js +354 -0
- package/dist/precedence.js.map +1 -0
- package/dist/tool-catalog.json +850 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/package.json +8 -3
- package/.claude/CLAUDE.md +0 -3
- package/bun.lock +0 -206
- package/lmdb.db +0 -0
- package/lmdb.db-lock +0 -0
- package/src/index.js +0 -2171
- package/src/index.ts +0 -1981
- package/src/types.js +0 -53
- package/src/types.ts +0 -237
- package/src/utils/errors.js +0 -231
- package/src/utils/errors.ts +0 -210
- package/src/utils/file.js +0 -251
- package/src/utils/file.ts +0 -174
- package/src/utils/path.js +0 -169
- package/src/utils/path.ts +0 -173
- package/test/test.js +0 -136
- package/test/test.ts +0 -79
- package/test/write-test.js +0 -153
- package/test/write-test.ts +0 -102
- package/tsconfig.json +0 -21
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings scope levels in order of precedence (highest to lowest)
|
|
3
|
+
*/
|
|
4
|
+
export declare enum SettingsScope {
|
|
5
|
+
MANAGED = "managed",
|
|
6
|
+
CLI = "cli",
|
|
7
|
+
LOCAL = "local",
|
|
8
|
+
PROJECT = "project",
|
|
9
|
+
USER = "user"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Generic settings type (extends Record to allow any valid settings structure)
|
|
13
|
+
*/
|
|
14
|
+
export type Settings = Record<string, unknown>;
|
|
15
|
+
/**
|
|
16
|
+
* Scope-specific settings with metadata
|
|
17
|
+
*/
|
|
18
|
+
export interface ScopedSettings {
|
|
19
|
+
scope: SettingsScope;
|
|
20
|
+
settings: Settings;
|
|
21
|
+
path?: string;
|
|
22
|
+
exists?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* All scope settings
|
|
26
|
+
*/
|
|
27
|
+
export interface AllScopedSettings {
|
|
28
|
+
managed: ScopedSettings;
|
|
29
|
+
cli: ScopedSettings;
|
|
30
|
+
local: ScopedSettings;
|
|
31
|
+
project: ScopedSettings;
|
|
32
|
+
user: ScopedSettings;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Array merge strategy
|
|
36
|
+
*/
|
|
37
|
+
export declare enum ArrayMergeStrategy {
|
|
38
|
+
/** Override lower scope arrays entirely */
|
|
39
|
+
OVERRIDE = "override",
|
|
40
|
+
/** Concatenate arrays (higher scope first) */
|
|
41
|
+
CONCATENATE = "concatenate",
|
|
42
|
+
/** Merge arrays by unique identifier (requires id field) */
|
|
43
|
+
MERGE_BY_ID = "mergeById"
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Merge options
|
|
47
|
+
*/
|
|
48
|
+
export interface MergeOptions {
|
|
49
|
+
/** Array merge strategy (default: OVERRIDE) */
|
|
50
|
+
arrayStrategy?: ArrayMergeStrategy;
|
|
51
|
+
/** Fields that should use concatenate strategy */
|
|
52
|
+
concatenateFields?: string[];
|
|
53
|
+
/** Fields that should use mergeById strategy */
|
|
54
|
+
mergeByIdFields?: string[];
|
|
55
|
+
/** Deep merge nested objects (default: true) */
|
|
56
|
+
deepMerge?: boolean;
|
|
57
|
+
/** Whether to track which scope each value came from */
|
|
58
|
+
trackSources?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Merged settings with source tracking
|
|
62
|
+
*/
|
|
63
|
+
export interface MergedSettings extends Settings {
|
|
64
|
+
/** Map of setting paths to their source scope */
|
|
65
|
+
_sources?: Record<string, SettingsScope>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the scope that provides a specific setting key
|
|
69
|
+
*/
|
|
70
|
+
export declare function getScopeForKey(key: string, scopedSettings: AllScopedSettings): SettingsScope | null;
|
|
71
|
+
/**
|
|
72
|
+
* Settings merger class
|
|
73
|
+
*/
|
|
74
|
+
export declare class SettingsMerger {
|
|
75
|
+
private defaultOptions;
|
|
76
|
+
constructor(defaultOptions?: MergeOptions);
|
|
77
|
+
/**
|
|
78
|
+
* Merge all scope settings according to precedence
|
|
79
|
+
* managed > CLI > local > project > user
|
|
80
|
+
*/
|
|
81
|
+
merge(scopedSettings: AllScopedSettings, options?: MergeOptions): MergedSettings;
|
|
82
|
+
/**
|
|
83
|
+
* Get the scope that provides a specific setting key
|
|
84
|
+
*/
|
|
85
|
+
getScope(key: string, scopedSettings: AllScopedSettings): SettingsScope | null;
|
|
86
|
+
/**
|
|
87
|
+
* Detect scope for a settings object based on its location
|
|
88
|
+
*/
|
|
89
|
+
detectScope(settingsPath: string): SettingsScope | null;
|
|
90
|
+
/**
|
|
91
|
+
* Create scoped settings from raw settings
|
|
92
|
+
*/
|
|
93
|
+
createScopedSettings(scope: SettingsScope, settings: Settings, path?: string, exists?: boolean): ScopedSettings;
|
|
94
|
+
/**
|
|
95
|
+
* Create empty scoped settings for all scopes
|
|
96
|
+
*/
|
|
97
|
+
createEmptyScopedSettings(): AllScopedSettings;
|
|
98
|
+
/**
|
|
99
|
+
* Validate scoped settings structure
|
|
100
|
+
*/
|
|
101
|
+
validateScopedSettings(scopedSettings: AllScopedSettings): boolean;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Default merger instance
|
|
105
|
+
*/
|
|
106
|
+
export declare const defaultMerger: SettingsMerger;
|
|
107
|
+
/**
|
|
108
|
+
* Convenience function to merge settings
|
|
109
|
+
*/
|
|
110
|
+
export declare function mergeSettings(scopedSettings: AllScopedSettings, options?: MergeOptions): MergedSettings;
|
|
111
|
+
/**
|
|
112
|
+
* Convenience function to get scope for a key
|
|
113
|
+
*/
|
|
114
|
+
export declare function getScope(key: string, scopedSettings: AllScopedSettings): SettingsScope | null;
|
|
115
|
+
//# sourceMappingURL=precedence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"precedence.d.ts","sourceRoot":"","sources":["../src/precedence.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,2CAA2C;IAC3C,QAAQ,aAAa;IACrB,8CAA8C;IAC9C,WAAW,gBAAgB;IAC3B,4DAA4D;IAC5D,WAAW,cAAc;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gDAAgD;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAmID;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,iBAAiB,GAChC,aAAa,GAAG,IAAI,CAqBtB;AAwFD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAAe;gBAEzB,cAAc,CAAC,EAAE,YAAY;IASzC;;;OAGG;IACH,KAAK,CAAC,cAAc,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,cAAc;IAuChF;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,GAAG,aAAa,GAAG,IAAI;IAI9E;;OAEG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAqCvD;;OAEG;IACH,oBAAoB,CAClB,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,UAAO,GACZ,cAAc;IASjB;;OAEG;IACH,yBAAyB,IAAI,iBAAiB;IAU9C;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,iBAAiB,GAAG,OAAO;CAqBnE;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,gBAAuB,CAAC;AAElD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,cAAc,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE,YAAY,GACrB,cAAc,CAEhB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,iBAAiB,GAChC,aAAa,GAAG,IAAI,CAEtB"}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// 5-Level Settings Precedence System
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Implements the settings precedence hierarchy:
|
|
5
|
+
// managed > CLI > local > project > user
|
|
6
|
+
// ============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Settings scope levels in order of precedence (highest to lowest)
|
|
9
|
+
*/
|
|
10
|
+
export var SettingsScope;
|
|
11
|
+
(function (SettingsScope) {
|
|
12
|
+
SettingsScope["MANAGED"] = "managed";
|
|
13
|
+
SettingsScope["CLI"] = "cli";
|
|
14
|
+
SettingsScope["LOCAL"] = "local";
|
|
15
|
+
SettingsScope["PROJECT"] = "project";
|
|
16
|
+
SettingsScope["USER"] = "user";
|
|
17
|
+
})(SettingsScope || (SettingsScope = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Array merge strategy
|
|
20
|
+
*/
|
|
21
|
+
export var ArrayMergeStrategy;
|
|
22
|
+
(function (ArrayMergeStrategy) {
|
|
23
|
+
/** Override lower scope arrays entirely */
|
|
24
|
+
ArrayMergeStrategy["OVERRIDE"] = "override";
|
|
25
|
+
/** Concatenate arrays (higher scope first) */
|
|
26
|
+
ArrayMergeStrategy["CONCATENATE"] = "concatenate";
|
|
27
|
+
/** Merge arrays by unique identifier (requires id field) */
|
|
28
|
+
ArrayMergeStrategy["MERGE_BY_ID"] = "mergeById";
|
|
29
|
+
})(ArrayMergeStrategy || (ArrayMergeStrategy = {}));
|
|
30
|
+
/**
|
|
31
|
+
* Deep merge two objects
|
|
32
|
+
*/
|
|
33
|
+
function deepMerge(target, source, options) {
|
|
34
|
+
const result = { ...target };
|
|
35
|
+
for (const key of Object.keys(source)) {
|
|
36
|
+
const sourceValue = source[key];
|
|
37
|
+
const targetValue = result[key];
|
|
38
|
+
if (sourceValue === undefined) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Handle null values
|
|
42
|
+
if (sourceValue === null) {
|
|
43
|
+
result[key] = null;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Handle arrays
|
|
47
|
+
if (Array.isArray(sourceValue)) {
|
|
48
|
+
if (Array.isArray(targetValue)) {
|
|
49
|
+
result[key] = mergeArrays(key, sourceValue, targetValue, options);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
result[key] = sourceValue;
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// Handle nested objects
|
|
57
|
+
if (options.deepMerge !== false &&
|
|
58
|
+
typeof sourceValue === 'object' &&
|
|
59
|
+
sourceValue !== null &&
|
|
60
|
+
!Array.isArray(sourceValue) &&
|
|
61
|
+
targetValue !== null &&
|
|
62
|
+
typeof targetValue === 'object' &&
|
|
63
|
+
!Array.isArray(targetValue)) {
|
|
64
|
+
result[key] = deepMerge(targetValue, sourceValue, options);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
// Primitive values - override
|
|
68
|
+
result[key] = sourceValue;
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Merge arrays based on strategy
|
|
74
|
+
*/
|
|
75
|
+
function mergeArrays(key, sourceArray, targetArray, options) {
|
|
76
|
+
// Check for field-specific strategies
|
|
77
|
+
if (options.concatenateFields?.includes(key)) {
|
|
78
|
+
return [...sourceArray, ...targetArray];
|
|
79
|
+
}
|
|
80
|
+
if (options.mergeByIdFields?.includes(key)) {
|
|
81
|
+
return mergeArraysById(sourceArray, targetArray);
|
|
82
|
+
}
|
|
83
|
+
// Use global strategy
|
|
84
|
+
switch (options.arrayStrategy) {
|
|
85
|
+
case ArrayMergeStrategy.CONCATENATE:
|
|
86
|
+
return [...sourceArray, ...targetArray];
|
|
87
|
+
case ArrayMergeStrategy.MERGE_BY_ID:
|
|
88
|
+
return mergeArraysById(sourceArray, targetArray);
|
|
89
|
+
case ArrayMergeStrategy.OVERRIDE:
|
|
90
|
+
default:
|
|
91
|
+
return sourceArray;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Merge arrays by unique ID field
|
|
96
|
+
*/
|
|
97
|
+
function mergeArraysById(sourceArray, targetArray) {
|
|
98
|
+
const merged = new Map();
|
|
99
|
+
// Add target items first (lower precedence)
|
|
100
|
+
for (const item of targetArray) {
|
|
101
|
+
if (typeof item === 'object' && item !== null && 'id' in item) {
|
|
102
|
+
merged.set(String(item.id), item);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Override/add source items (higher precedence)
|
|
106
|
+
for (const item of sourceArray) {
|
|
107
|
+
if (typeof item === 'object' && item !== null && 'id' in item) {
|
|
108
|
+
merged.set(String(item.id), item);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Return merged array + items without IDs (from source first, then target)
|
|
112
|
+
const withIds = Array.from(merged.values());
|
|
113
|
+
const sourceWithoutIds = sourceArray.filter((item) => typeof item !== 'object' || item === null || !('id' in item));
|
|
114
|
+
const targetWithoutIds = targetArray.filter((item) => typeof item !== 'object' || item === null || !('id' in item));
|
|
115
|
+
return [...sourceWithoutIds, ...targetWithoutIds, ...withIds];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the scope that provides a specific setting key
|
|
119
|
+
*/
|
|
120
|
+
export function getScopeForKey(key, scopedSettings) {
|
|
121
|
+
// Check scopes in precedence order (highest to lowest)
|
|
122
|
+
const scopes = [
|
|
123
|
+
SettingsScope.MANAGED,
|
|
124
|
+
SettingsScope.CLI,
|
|
125
|
+
SettingsScope.LOCAL,
|
|
126
|
+
SettingsScope.PROJECT,
|
|
127
|
+
SettingsScope.USER,
|
|
128
|
+
];
|
|
129
|
+
// Navigate the key path (e.g., "mcpServers.server1" -> settings.mcpServers.server1)
|
|
130
|
+
for (const scope of scopes) {
|
|
131
|
+
if (scopedSettings[scope].exists && scopedSettings[scope].settings) {
|
|
132
|
+
const value = getNestedValue(scopedSettings[scope].settings, key);
|
|
133
|
+
if (value !== undefined) {
|
|
134
|
+
return scope;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get nested value from object using dot notation
|
|
142
|
+
*/
|
|
143
|
+
function getNestedValue(obj, path) {
|
|
144
|
+
const keys = path.split('.');
|
|
145
|
+
let current = obj;
|
|
146
|
+
for (const key of keys) {
|
|
147
|
+
if (current === null || typeof current !== 'object') {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
current = current[key];
|
|
151
|
+
}
|
|
152
|
+
return current;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Set nested value in object using dot notation
|
|
156
|
+
*/
|
|
157
|
+
function setNestedValue(obj, path, value) {
|
|
158
|
+
const keys = path.split('.');
|
|
159
|
+
const lastKey = keys.pop();
|
|
160
|
+
if (!lastKey) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
let current = obj;
|
|
164
|
+
for (const key of keys) {
|
|
165
|
+
if (!(key in current) || typeof current[key] !== 'object') {
|
|
166
|
+
current[key] = {};
|
|
167
|
+
}
|
|
168
|
+
current = current[key];
|
|
169
|
+
}
|
|
170
|
+
current[lastKey] = value;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Track source scopes for settings
|
|
174
|
+
*/
|
|
175
|
+
function trackSources(settings, scopedSettings, options) {
|
|
176
|
+
const sources = {};
|
|
177
|
+
if (!options.trackSources) {
|
|
178
|
+
return sources;
|
|
179
|
+
}
|
|
180
|
+
// Get all keys from settings (including nested)
|
|
181
|
+
const allKeys = getAllKeys(settings);
|
|
182
|
+
for (const key of allKeys) {
|
|
183
|
+
const scope = getScopeForKey(key, scopedSettings);
|
|
184
|
+
if (scope) {
|
|
185
|
+
sources[key] = scope;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return sources;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get all keys from object (including nested keys with dot notation)
|
|
192
|
+
*/
|
|
193
|
+
function getAllKeys(obj, prefix = '') {
|
|
194
|
+
const keys = [];
|
|
195
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
196
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
197
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
198
|
+
keys.push(...getAllKeys(value, fullKey));
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
keys.push(fullKey);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return keys;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Settings merger class
|
|
208
|
+
*/
|
|
209
|
+
export class SettingsMerger {
|
|
210
|
+
defaultOptions;
|
|
211
|
+
constructor(defaultOptions) {
|
|
212
|
+
this.defaultOptions = {
|
|
213
|
+
arrayStrategy: ArrayMergeStrategy.OVERRIDE,
|
|
214
|
+
deepMerge: true,
|
|
215
|
+
trackSources: false,
|
|
216
|
+
...defaultOptions,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Merge all scope settings according to precedence
|
|
221
|
+
* managed > CLI > local > project > user
|
|
222
|
+
*/
|
|
223
|
+
merge(scopedSettings, options) {
|
|
224
|
+
const opts = { ...this.defaultOptions, ...options };
|
|
225
|
+
// Start with user scope (lowest precedence)
|
|
226
|
+
let result = scopedSettings.user.exists
|
|
227
|
+
? { ...scopedSettings.user.settings }
|
|
228
|
+
: {};
|
|
229
|
+
// Apply project scope
|
|
230
|
+
if (scopedSettings.project.exists) {
|
|
231
|
+
result = deepMerge(result, scopedSettings.project.settings, opts);
|
|
232
|
+
}
|
|
233
|
+
// Apply local scope
|
|
234
|
+
if (scopedSettings.local.exists) {
|
|
235
|
+
result = deepMerge(result, scopedSettings.local.settings, opts);
|
|
236
|
+
}
|
|
237
|
+
// Apply CLI scope
|
|
238
|
+
if (scopedSettings.cli.exists) {
|
|
239
|
+
result = deepMerge(result, scopedSettings.cli.settings, opts);
|
|
240
|
+
}
|
|
241
|
+
// Apply managed scope (highest precedence)
|
|
242
|
+
if (scopedSettings.managed.exists) {
|
|
243
|
+
result = deepMerge(result, scopedSettings.managed.settings, opts);
|
|
244
|
+
}
|
|
245
|
+
// Track sources if requested
|
|
246
|
+
const sources = trackSources(result, scopedSettings, opts);
|
|
247
|
+
const merged = result;
|
|
248
|
+
if (Object.keys(sources).length > 0) {
|
|
249
|
+
merged._sources = sources;
|
|
250
|
+
}
|
|
251
|
+
return merged;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get the scope that provides a specific setting key
|
|
255
|
+
*/
|
|
256
|
+
getScope(key, scopedSettings) {
|
|
257
|
+
return getScopeForKey(key, scopedSettings);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Detect scope for a settings object based on its location
|
|
261
|
+
*/
|
|
262
|
+
detectScope(settingsPath) {
|
|
263
|
+
const path = settingsPath.toLowerCase();
|
|
264
|
+
if (path.includes('/managed/') || path.includes('\\managed\\')) {
|
|
265
|
+
return SettingsScope.MANAGED;
|
|
266
|
+
}
|
|
267
|
+
// Check for local scope before CLI scope (files starting with .local.)
|
|
268
|
+
if (path.includes('.local.claude') || path.includes('.local.')) {
|
|
269
|
+
return SettingsScope.LOCAL;
|
|
270
|
+
}
|
|
271
|
+
// CLI config (claude.json or .claude.json in home directory)
|
|
272
|
+
// Must not be in .config or .claude directories
|
|
273
|
+
if ((path.includes('claude.json') || path.includes('.claude.json')) &&
|
|
274
|
+
!path.includes('/.config/') &&
|
|
275
|
+
!path.includes('\\.config\\') &&
|
|
276
|
+
!path.includes('/.claude/') &&
|
|
277
|
+
!path.includes('\\.claude\\')) {
|
|
278
|
+
return SettingsScope.CLI;
|
|
279
|
+
}
|
|
280
|
+
// Project scope (.claude directory)
|
|
281
|
+
if (path.includes('/.claude/') || path.includes('\\.claude\\')) {
|
|
282
|
+
return SettingsScope.PROJECT;
|
|
283
|
+
}
|
|
284
|
+
// User scope (.config directory)
|
|
285
|
+
if (path.includes('/.config/') ||
|
|
286
|
+
path.includes('\\.config\\') ||
|
|
287
|
+
path.includes('config.json')) {
|
|
288
|
+
return SettingsScope.USER;
|
|
289
|
+
}
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Create scoped settings from raw settings
|
|
294
|
+
*/
|
|
295
|
+
createScopedSettings(scope, settings, path, exists = true) {
|
|
296
|
+
return {
|
|
297
|
+
scope,
|
|
298
|
+
settings: exists ? { ...settings } : {},
|
|
299
|
+
path,
|
|
300
|
+
exists,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Create empty scoped settings for all scopes
|
|
305
|
+
*/
|
|
306
|
+
createEmptyScopedSettings() {
|
|
307
|
+
return {
|
|
308
|
+
managed: this.createScopedSettings(SettingsScope.MANAGED, {}, '', false),
|
|
309
|
+
cli: this.createScopedSettings(SettingsScope.CLI, {}, '', false),
|
|
310
|
+
local: this.createScopedSettings(SettingsScope.LOCAL, {}, '', false),
|
|
311
|
+
project: this.createScopedSettings(SettingsScope.PROJECT, {}, '', false),
|
|
312
|
+
user: this.createScopedSettings(SettingsScope.USER, {}, '', false),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Validate scoped settings structure
|
|
317
|
+
*/
|
|
318
|
+
validateScopedSettings(scopedSettings) {
|
|
319
|
+
const requiredScopes = [
|
|
320
|
+
'managed',
|
|
321
|
+
'cli',
|
|
322
|
+
'local',
|
|
323
|
+
'project',
|
|
324
|
+
'user',
|
|
325
|
+
];
|
|
326
|
+
for (const scope of requiredScopes) {
|
|
327
|
+
if (!scopedSettings[scope]) {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
const scoped = scopedSettings[scope];
|
|
331
|
+
if (!('scope' in scoped) || !('settings' in scoped) || !('exists' in scoped)) {
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return true;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Default merger instance
|
|
340
|
+
*/
|
|
341
|
+
export const defaultMerger = new SettingsMerger();
|
|
342
|
+
/**
|
|
343
|
+
* Convenience function to merge settings
|
|
344
|
+
*/
|
|
345
|
+
export function mergeSettings(scopedSettings, options) {
|
|
346
|
+
return defaultMerger.merge(scopedSettings, options);
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Convenience function to get scope for a key
|
|
350
|
+
*/
|
|
351
|
+
export function getScope(key, scopedSettings) {
|
|
352
|
+
return defaultMerger.getScope(key, scopedSettings);
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=precedence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"precedence.js","sourceRoot":"","sources":["../src/precedence.ts"],"names":[],"mappings":"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"}
|