Files
api/packages/unraid-shared/src/util/data.ts
Pujit Mehrotra c132f28281 chore: extract connect to an API plugin (#1367)
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.
2025-06-10 15:16:26 -04:00

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>;
}