UNPKG

@neo4j/cypher-builder

Version:

A programmatic API for building Cypher queries for Neo4j

43 lines (42 loc) 1.46 kB
"use strict"; /* * Copyright (c) "Neo4j" * Neo4j Sweden AB [http://neo4j.com] */ Object.defineProperty(exports, "__esModule", { value: true }); exports.mixin = mixin; /** * Decorator for mixins. Support for adding mixins into classes * Based on https://www.typescriptlang.org/docs/handbook/mixins.html * * All "Mixin" classes will be inherited by the decorated class. Note that mixin classes must be abstract * Typings will not automatically be updated, but exporting an interface with the same name will fix typings * * @example * ```ts * export interface MyClass extends WithName, WithAge * \@mixin(WithName, WithAge) * export class MyClass{} * ``` */ function mixin(...mixins) { return (constructor) => { return applyMixins(constructor, mixins); }; } /** Applies mixins into a class * Based on https://www.typescriptlang.org/docs/handbook/mixins.html */ function applyMixins(baseClass, mixins) { for (const baseCtor of mixins) { for (const name of Object.getOwnPropertyNames(baseCtor.prototype)) { if (name !== "constructor") { // Base class constructor takes precedence over mixins Object.defineProperty(baseClass.prototype, name, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ?? Object.create(null)); } } } return baseClass; }