()
| 77 | * Exported for testing. |
| 78 | */ |
| 79 | export function loadManagedFileSettings(): { |
| 80 | settings: SettingsJson | null |
| 81 | errors: ValidationError[] |
| 82 | } { |
| 83 | const errors: ValidationError[] = [] |
| 84 | let merged: SettingsJson = {} |
| 85 | let found = false |
| 86 | |
| 87 | const { settings, errors: baseErrors } = parseSettingsFile( |
| 88 | getManagedSettingsFilePath(), |
| 89 | ) |
| 90 | errors.push(...baseErrors) |
| 91 | if (settings && Object.keys(settings).length > 0) { |
| 92 | merged = mergeWith(merged, settings, settingsMergeCustomizer) |
| 93 | found = true |
| 94 | } |
| 95 | |
| 96 | const dropInDir = getManagedSettingsDropInDir() |
| 97 | try { |
| 98 | const entries = getFsImplementation() |
| 99 | .readdirSync(dropInDir) |
| 100 | .filter( |
| 101 | d => |
| 102 | (d.isFile() || d.isSymbolicLink()) && |
| 103 | d.name.endsWith('.json') && |
| 104 | !d.name.startsWith('.'), |
| 105 | ) |
| 106 | .map(d => d.name) |
| 107 | .sort() |
| 108 | for (const name of entries) { |
| 109 | const { settings, errors: fileErrors } = parseSettingsFile( |
| 110 | join(dropInDir, name), |
| 111 | ) |
| 112 | errors.push(...fileErrors) |
| 113 | if (settings && Object.keys(settings).length > 0) { |
| 114 | merged = mergeWith(merged, settings, settingsMergeCustomizer) |
| 115 | found = true |
| 116 | } |
| 117 | } |
| 118 | } catch (e) { |
| 119 | const code = getErrnoCode(e) |
| 120 | if (code !== 'ENOENT' && code !== 'ENOTDIR') { |
| 121 | logError(e) |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | return { settings: found ? merged : null, errors } |
| 126 | } |
| 127 | |
| 128 | /** |
| 129 | * Check which file-based managed settings sources are present. |
no test coverage detected