@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
36 lines (32 loc) • 1.62 kB
JavaScript
;
var autoContext_constant = require('../../../../constant/dto/auto-context.constant.js');
var autoDtoContextQueue_utility = require('../../../auto-dto-context-queue.utility.js');
var registerAutoDtoChild_utility = require('../../../register-auto-dto-child.utility.js');
/**
* Pushes DTO auto-context onto the provided DTO prototype so property decorators can read it later.
* @param {object} target - DTO prototype to annotate.
* @param {EApiRouteType} method - Route method currently being generated.
* @param {EApiDtoType} dtoType - DTO type currently being generated.
* @param {WeakSet<object>} [visited] - Set of visited prototypes to avoid infinite recursion.
*/
function DtoAutoContextPush(target, method, dtoType, visited) {
if (!target)
return;
const stack = Reflect.getMetadata?.(autoContext_constant.AUTO_CONTEXT_DTO_CONSTANT.METADATA_KEY, target) ?? [];
stack.push({ dtoType, method });
Reflect.defineMetadata?.(autoContext_constant.AUTO_CONTEXT_DTO_CONSTANT.METADATA_KEY, stack, target);
autoDtoContextQueue_utility.FlushAutoDtoContextExecutions(target);
visited ??= new WeakSet();
if (visited.has(target))
return;
visited.add(target);
// eslint-disable-next-line @elsikora/typescript/no-unsafe-function-type
const children = registerAutoDtoChild_utility.GetRegisteredAutoDtoChildren(target);
if (!children)
return;
for (const child of children) {
DtoAutoContextPush(child.prototype, method, dtoType, visited);
}
}
exports.DtoAutoContextPush = DtoAutoContextPush;
//# sourceMappingURL=push.utility.js.map