mirror of
https://github.com/unraid/api.git
synced 2026-01-10 18:50:11 -06:00
separates Unraid Connect from the API ## Summary by CodeRabbit - **New Features** - Introduced a unified, JSON-schema-based settings system for API configuration and plugin settings, accessible via new GraphQL queries and mutations. - Added modular NestJS plugin architecture for Unraid Connect, including new modules for cloud, remote access, and system/network management. - Added granular connection and remote access state tracking, with new GraphQL types and resolvers for cloud and connection status. - Implemented event-driven and service-based management for SSO users, API keys, and dynamic remote access. - Enhanced UI components and queries to support unified settings and restart detection. - **Improvements** - Refactored configuration and state management to use service-based patterns, replacing direct store access and Redux logic. - Migrated legacy config files to new JSON formats with validation and persistence helpers. - Centralized global dependencies and shared services for plugins and CLI modules. - Improved logging, error handling, and lifecycle management for connections and background jobs. - Updated and expanded documentation for plugin development and settings management. - **Bug Fixes** - Improved handling of missing config files and ensured safe persistence. - Enhanced error reporting and validation in remote access and connection services. - **Removals** - Removed deprecated Redux slices, listeners, and legacy cloud/remote access logic. - Deleted obsolete test files, scripts, and unused code related to the old state/store approach. - **Tests** - Added new unit tests for settings merging, URL resolution, and cloud connectivity checks. - **Style** - Applied consistent formatting, import reorganization, and code style improvements across modules. - **Chores** - Updated build scripts, Dockerfiles, and development environment setup to support new dependencies and workflows. - Expanded .gitignore and configuration files for improved build artifact management.
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import type { Get } from "type-fest";
|
|
|
|
/**
|
|
* Converts a Comma Separated (CSV) string to an array of strings.
|
|
*
|
|
* @example
|
|
* csvStringToArray('one,two,three') // ['one', 'two', 'three']
|
|
* csvStringToArray('one, two, three') // ['one', 'two', 'three']
|
|
* csvStringToArray(null) // []
|
|
* csvStringToArray(undefined) // []
|
|
* csvStringToArray('') // []
|
|
*
|
|
* @param csvString - The Comma Separated string to convert
|
|
* @param opts - Options
|
|
* @param opts.noEmpty - Whether to omit empty strings. Default is true.
|
|
* @returns An array of strings
|
|
*/
|
|
export function csvStringToArray(
|
|
csvString?: string | null,
|
|
opts: { noEmpty?: boolean } = { noEmpty: true }
|
|
): string[] {
|
|
if (!csvString) return [];
|
|
const result = csvString.split(',').map((item) => item.trim());
|
|
if (opts.noEmpty) {
|
|
return result.filter((item) => item !== '');
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Retrieves a nested value from an object using a dot notation path.
|
|
*
|
|
* @example
|
|
* const obj = { a: { b: { c: 'value' } } };
|
|
* getNestedValue(obj, 'a.b.c') // 'value'
|
|
* getNestedValue(obj, 'a.b') // { c: 'value' }
|
|
* getNestedValue(obj, 'a.b.d') // undefined
|
|
*
|
|
* @param obj - The object to retrieve the value from
|
|
* @param path - The dot notation path to the value
|
|
* @returns The nested value or undefined if the path is invalid
|
|
*/
|
|
export function getNestedValue<TObj extends object, TPath extends string>(
|
|
obj: TObj,
|
|
path: TPath
|
|
): Get<TObj, TPath> {
|
|
return path.split('.').reduce((acc, part) => acc?.[part], obj as any) as Get<TObj, TPath>;
|
|
}
|