51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import type { Command } from "./types";
|
|
|
|
/**
|
|
* Type-safe helper to create a command definition.
|
|
*
|
|
* @param command The command definition
|
|
* @returns The command object
|
|
*/
|
|
export function createCommand(command: Command): Command {
|
|
return command;
|
|
}
|
|
|
|
/**
|
|
* JSON Replacer function for serialization
|
|
* Handles safe serialization of BigInt values to strings
|
|
*/
|
|
export const jsonReplacer = (_key: string, value: unknown): unknown => {
|
|
if (typeof value === 'bigint') {
|
|
return value.toString();
|
|
}
|
|
return value;
|
|
};
|
|
|
|
/**
|
|
* Deep merge utility
|
|
*/
|
|
export function deepMerge(target: any, source: any): any {
|
|
if (typeof target !== 'object' || target === null) {
|
|
return source;
|
|
}
|
|
if (typeof source !== 'object' || source === null) {
|
|
return source;
|
|
}
|
|
|
|
const output = { ...target };
|
|
|
|
Object.keys(source).forEach(key => {
|
|
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
|
|
if (!(key in target)) {
|
|
Object.assign(output, { [key]: source[key] });
|
|
} else {
|
|
output[key] = deepMerge(target[key], source[key]);
|
|
}
|
|
} else {
|
|
Object.assign(output, { [key]: source[key] });
|
|
}
|
|
});
|
|
|
|
return output;
|
|
}
|