mirror of
https://github.com/JonasunderscoreJones/jonas_jones-api.git
synced 2025-10-25 01:59:18 +02:00
some progress
This commit is contained in:
parent
aea93a5527
commit
e3c15bd288
1388 changed files with 306946 additions and 68323 deletions
53
node_modules/mongoose/lib/helpers/update/moveImmutableProperties.js
generated
vendored
Normal file
53
node_modules/mongoose/lib/helpers/update/moveImmutableProperties.js
generated
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
'use strict';
|
||||
|
||||
const get = require('../get');
|
||||
|
||||
/**
|
||||
* Given an update, move all $set on immutable properties to $setOnInsert.
|
||||
* This should only be called for upserts, because $setOnInsert bypasses the
|
||||
* strictness check for immutable properties.
|
||||
*/
|
||||
|
||||
module.exports = function moveImmutableProperties(schema, update, ctx) {
|
||||
if (update == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const keys = Object.keys(update);
|
||||
for (const key of keys) {
|
||||
const isDollarKey = key.startsWith('$');
|
||||
|
||||
if (key === '$set') {
|
||||
const updatedPaths = Object.keys(update[key]);
|
||||
for (const path of updatedPaths) {
|
||||
_walkUpdatePath(schema, update[key], path, update, ctx);
|
||||
}
|
||||
} else if (!isDollarKey) {
|
||||
_walkUpdatePath(schema, update, key, update, ctx);
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
function _walkUpdatePath(schema, op, path, update, ctx) {
|
||||
const schematype = schema.path(path);
|
||||
if (schematype == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
let immutable = get(schematype, 'options.immutable', null);
|
||||
if (immutable == null) {
|
||||
return;
|
||||
}
|
||||
if (typeof immutable === 'function') {
|
||||
immutable = immutable.call(ctx, ctx);
|
||||
}
|
||||
|
||||
if (!immutable) {
|
||||
return;
|
||||
}
|
||||
|
||||
update.$setOnInsert = update.$setOnInsert || {};
|
||||
update.$setOnInsert[path] = op[path];
|
||||
delete op[path];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue