UNPKG

2.37 kBJavaScriptView Raw
1"use strict";
2/*
3 * @adonisjs/lucid
4 *
5 * (c) Harminder Virk <virk@adonisjs.com>
6 *
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
9 */
10Object.defineProperty(exports, "__esModule", { value: true });
11exports.proxyHandler = void 0;
12/**
13 * A proxy trap to add support for custom getters and setters
14 */
15exports.proxyHandler = {
16 get(target, key, receiver) {
17 const Model = target.constructor;
18 const column = Model.$getColumn(key);
19 /**
20 * Fetch the attribute value, when attribute exists and
21 * doesn't have a getter
22 */
23 if (column && !column.hasGetter) {
24 const attributeValue = target.$getAttribute(key);
25 if (attributeValue === undefined) {
26 return Reflect.get(target, key, receiver);
27 }
28 return attributeValue;
29 }
30 /**
31 * Fetch the relation when property is defined as a relationship
32 */
33 const relation = Model.$getRelation(key);
34 if (relation) {
35 return target.$getRelated(key);
36 }
37 return Reflect.get(target, key, receiver);
38 },
39 set(target, key, value, receiver) {
40 const Model = target.constructor;
41 const column = Model.$getColumn(key);
42 /**
43 * Set value as an attribute when column is defined and
44 * their isn't any setter for it.
45 */
46 if (column && !column.hasSetter) {
47 target.$setAttribute(key, value);
48 Reflect.set(target, key, value, receiver);
49 return true;
50 }
51 /**
52 * Fetch the relation when property is defined as a relationship
53 */
54 const relation = Model.$getRelation(key);
55 if (relation) {
56 target.$setRelated(key, value);
57 return true;
58 }
59 return Reflect.set(target, key, value, receiver);
60 },
61 defineProperty(target, key, value) {
62 const Model = target.constructor;
63 const column = Model.$getColumn(key);
64 /**
65 * Set the attribute along side defining the property
66 */
67 if (column && !column.hasSetter && value.value !== undefined) {
68 target.$setAttribute(key, value.value);
69 }
70 return Reflect.defineProperty(target, key, value);
71 },
72};