MCPcopy Create free account
hub / github.com/mikro-orm/mikro-orm / defineProperties

Method defineProperties

packages/core/src/entity/EntityHelper.ts:136–174  ·  view source on GitHub ↗

* Defines getter and setter for every owning side of m:1 and 1:1 relation. This is then used for propagation of * changes to the inverse side of bi-directional relations. Rest of the properties are also defined this way to * achieve dirtiness, which is then used for fast checks whether we need

(meta: EntityMetadata<T>, em: EntityManager)

Source from the content-addressed store, hash-verified

134 * than on its prototype. Thanks to this we still have those properties enumerable (e.g. part of `Object.keys(entity)`).
135 */
136 private static defineProperties<T extends object>(meta: EntityMetadata<T>, em: EntityManager): void {
137 Object.values<EntityProperty<T>>(meta.properties).forEach(prop => {
138 const isCollection = [ReferenceKind.ONE_TO_MANY, ReferenceKind.MANY_TO_MANY].includes(prop.kind);
139 // oxfmt-ignore
140 const isReference = [ReferenceKind.ONE_TO_ONE, ReferenceKind.MANY_TO_ONE].includes(prop.kind) && (prop.inversedBy || prop.mappedBy) && !prop.mapToPk;
141
142 if (isReference) {
143 Object.defineProperty(meta.prototype, prop.name, {
144 set(val: AnyEntity) {
145 EntityHelper.defineReferenceProperty(meta, prop, this, em.getHydrator());
146 this[prop.name] = val;
147 },
148 configurable: true,
149 });
150 return;
151 }
152
153 if (prop.inherited || prop.primary || prop.accessor || prop.persist === false || prop.embedded || isCollection) {
154 return;
155 }
156
157 Object.defineProperty(meta.prototype, prop.name, {
158 set(val) {
159 Object.defineProperty(this, prop.name, {
160 get() {
161 return this.__helper?.__data[prop.name];
162 },
163 set(val) {
164 this.__helper.__data[prop.name] = val;
165 },
166 enumerable: true,
167 configurable: true,
168 });
169 this.__helper.__data[prop.name] = val;
170 },
171 configurable: true,
172 });
173 });
174 }
175
176 static defineCustomInspect<T extends object>(meta: EntityMetadata<T>): void {
177 // @ts-ignore

Callers 6

Type.tsFile · 0.80
Collection.tsFile · 0.80
decorateMethod · 0.80
defineBasePropertiesMethod · 0.80
ensurePropagationMethod · 0.80
Reference.tsFile · 0.80

Calls 1

valuesMethod · 0.45

Tested by

no test coverage detected