* feat: wip add relation * feat: add relation for custom and standards objects * fix: use enum instead of magic string * fix: remove dead code & fix tests * fix: typo * fix: BooleanFilter is missing * fix: Malformed result error
56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
|
|
import { FieldMetadataInterface } from 'src/tenant/schema-builder/interfaces/field-metadata.interface';
|
|
|
|
import { stringifyWithoutKeyQuote } from 'src/tenant/query-builder/utils/stringify-without-key-quote.util';
|
|
|
|
import { ArgsAliasFactory } from './args-alias.factory';
|
|
|
|
@Injectable()
|
|
export class ArgsStringFactory {
|
|
constructor(private readonly argsAliasFactory: ArgsAliasFactory) {}
|
|
create(
|
|
initialArgs: Record<string, any> | undefined,
|
|
fieldMetadataCollection: FieldMetadataInterface[],
|
|
): string | null {
|
|
if (!initialArgs) {
|
|
return null;
|
|
}
|
|
let argsString = '';
|
|
const computedArgs = this.argsAliasFactory.create(
|
|
initialArgs,
|
|
fieldMetadataCollection,
|
|
);
|
|
|
|
for (const key in computedArgs) {
|
|
// Check if the value is not undefined
|
|
if (computedArgs[key] === undefined) {
|
|
continue;
|
|
}
|
|
|
|
if (typeof computedArgs[key] === 'string') {
|
|
// If it's a string, add quotes
|
|
argsString += `${key}: "${computedArgs[key]}", `;
|
|
} else if (
|
|
typeof computedArgs[key] === 'object' &&
|
|
computedArgs[key] !== null
|
|
) {
|
|
// If it's an object (and not null), stringify it
|
|
argsString += `${key}: ${stringifyWithoutKeyQuote(
|
|
computedArgs[key],
|
|
)}, `;
|
|
} else {
|
|
// For other types (number, boolean), add as is
|
|
argsString += `${key}: ${computedArgs[key]}, `;
|
|
}
|
|
}
|
|
|
|
// Remove trailing comma and space, if present
|
|
if (argsString.endsWith(', ')) {
|
|
argsString = argsString.slice(0, -2);
|
|
}
|
|
|
|
return argsString;
|
|
}
|
|
}
|