proto.io 0.0.146 → 0.0.148

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -3,8 +3,8 @@ import { Server } from '@o2ter/server-js';
3
3
  import { Q as QueryValidator, g as generateId } from './internals/random-BjV_01xP.mjs';
4
4
  import { P as PVK } from './internals/private-BUpLAMZi.mjs';
5
5
  import { asyncStream, asyncIterableToArray, isBinaryData, base64ToBuffer } from '@o2ter/utils-js';
6
- import { T as TQuery, M as MASTER_USER_HEADER_NAME, a as MASTER_PASS_HEADER_NAME, A as AUTH_COOKIE_KEY, b as TUser, P as ProtoType, s as serialize, d as deserialize, U as UPLOAD_TOKEN_HEADER_NAME } from './internals/index-Do-zNOpD.mjs';
7
- export { c as ProtoClient, e as classExtends, j as isFile, f as isObject, i as isQuery, h as isRole, g as isUser } from './internals/index-Do-zNOpD.mjs';
6
+ import { T as TQuery, M as MASTER_USER_HEADER_NAME, a as MASTER_PASS_HEADER_NAME, A as AUTH_COOKIE_KEY, b as TUser, P as ProtoType, s as serialize, d as deserialize, U as UPLOAD_TOKEN_HEADER_NAME } from './internals/index-DGau0Wqf.mjs';
7
+ export { c as ProtoClient, e as classExtends, j as isFile, f as isObject, i as isQuery, h as isRole, g as isUser } from './internals/index-DGau0Wqf.mjs';
8
8
  import { d as decodeUpdateOp, T as TObject, i as isShape, a as isPointer, b as isRelation, c as defaultObjectKeyTypes, e as isPrimitive } from './internals/index-EOtjV6U_.mjs';
9
9
  import jwt from 'jsonwebtoken';
10
10
  import { Blob } from 'node:buffer';
@@ -316,9 +316,10 @@ class ProtoQuery extends TQuery {
316
316
  });
317
317
  }
318
318
  async insert(attrs, options) {
319
- const beforeSave = this._proto[PVK].triggers?.beforeSave?.[this.className];
320
- const afterSave = this._proto[PVK].triggers?.afterSave?.[this.className];
321
319
  const context = options?.context ?? {};
320
+ const silent = _.castArray(options?.silent ?? []);
321
+ const beforeSave = _.includes(silent, 'beforeSave') ? null : this._proto[PVK].triggers?.beforeSave?.[this.className];
322
+ const afterSave = _.includes(silent, 'afterSave') ? null : this._proto[PVK].triggers?.afterSave?.[this.className];
322
323
  const object = this._proto.Object(this.className);
323
324
  for (const [key, value] of _.toPairs(attrs)) {
324
325
  object[PVK].mutated[key] = { $set: value };
@@ -338,9 +339,10 @@ class ProtoQuery extends TQuery {
338
339
  return result;
339
340
  }
340
341
  async insertMany(values, options) {
341
- const beforeSave = this._proto[PVK].triggers?.beforeSave?.[this.className];
342
- const afterSave = this._proto[PVK].triggers?.afterSave?.[this.className];
343
342
  const context = options?.context ?? {};
343
+ const silent = _.castArray(options?.silent ?? []);
344
+ const beforeSave = _.includes(silent, 'beforeSave') ? null : this._proto[PVK].triggers?.beforeSave?.[this.className];
345
+ const afterSave = _.includes(silent, 'afterSave') ? null : this._proto[PVK].triggers?.afterSave?.[this.className];
344
346
  if (_.isFunction(beforeSave) || _.isFunction(afterSave)) {
345
347
  const objects = _.map(values, attr => {
346
348
  const object = this._proto.Object(this.className);
@@ -371,9 +373,10 @@ class ProtoQuery extends TQuery {
371
373
  }, values);
372
374
  }
373
375
  async updateOne(update, options) {
374
- const beforeSave = this._proto[PVK].triggers?.beforeSave?.[this.className];
375
- const afterSave = this._proto[PVK].triggers?.afterSave?.[this.className];
376
376
  const context = options?.context ?? {};
377
+ const silent = _.castArray(options?.silent ?? []);
378
+ const beforeSave = _.includes(silent, 'beforeSave') ? null : this._proto[PVK].triggers?.beforeSave?.[this.className];
379
+ const afterSave = _.includes(silent, 'afterSave') ? null : this._proto[PVK].triggers?.afterSave?.[this.className];
377
380
  if (_.isFunction(beforeSave)) {
378
381
  const object = this._objectMethods(_.first(await asyncIterableToArray(this._dispatcher(options).find({ ...this._queryOptions, limit: 1 }))));
379
382
  if (!object)
@@ -389,9 +392,10 @@ class ProtoQuery extends TQuery {
389
392
  return result;
390
393
  }
391
394
  async upsertOne(update, setOnInsert, options) {
392
- const beforeSave = this._proto[PVK].triggers?.beforeSave?.[this.className];
393
- const afterSave = this._proto[PVK].triggers?.afterSave?.[this.className];
394
395
  const context = options?.context ?? {};
396
+ const silent = _.castArray(options?.silent ?? []);
397
+ const beforeSave = _.includes(silent, 'beforeSave') ? null : this._proto[PVK].triggers?.beforeSave?.[this.className];
398
+ const afterSave = _.includes(silent, 'afterSave') ? null : this._proto[PVK].triggers?.afterSave?.[this.className];
395
399
  if (_.isFunction(beforeSave)) {
396
400
  let object = this._objectMethods(_.first(await asyncIterableToArray(this._dispatcher(options).find({ ...this._queryOptions, limit: 1 }))));
397
401
  if (object) {
@@ -426,9 +430,10 @@ class ProtoQuery extends TQuery {
426
430
  return result;
427
431
  }
428
432
  async deleteOne(options) {
429
- const beforeDelete = this._proto[PVK].triggers?.beforeDelete?.[this.className];
430
- const afterDelete = this._proto[PVK].triggers?.afterDelete?.[this.className];
431
433
  const context = options?.context ?? {};
434
+ const silent = _.castArray(options?.silent ?? []);
435
+ const beforeDelete = _.includes(silent, 'beforeDelete') ? null : this._proto[PVK].triggers?.beforeDelete?.[this.className];
436
+ const afterDelete = _.includes(silent, 'afterDelete') ? null : this._proto[PVK].triggers?.afterDelete?.[this.className];
432
437
  let result;
433
438
  if (_.isFunction(beforeDelete)) {
434
439
  const object = this._objectMethods(_.first(await asyncIterableToArray(this._dispatcher(options).find({ ...this._queryOptions, limit: 1 }))));
@@ -449,9 +454,10 @@ class ProtoQuery extends TQuery {
449
454
  return result;
450
455
  }
451
456
  async deleteMany(options) {
452
- const beforeDelete = this._proto[PVK].triggers?.beforeDelete?.[this.className];
453
- const afterDelete = this._proto[PVK].triggers?.afterDelete?.[this.className];
454
457
  const context = options?.context ?? {};
458
+ const silent = _.castArray(options?.silent ?? []);
459
+ const beforeDelete = _.includes(silent, 'beforeDelete') ? null : this._proto[PVK].triggers?.beforeDelete?.[this.className];
460
+ const afterDelete = _.includes(silent, 'afterDelete') ? null : this._proto[PVK].triggers?.afterDelete?.[this.className];
455
461
  if (_.isFunction(beforeDelete) || _.isFunction(afterDelete)) {
456
462
  const objects = this._objectMethods(await asyncIterableToArray(this._dispatcher(options).find(this._queryOptions)));
457
463
  if (_.isEmpty(objects))
@@ -797,14 +803,16 @@ class ProtoInternal {
797
803
  return func(proxy(payload ?? proto));
798
804
  const { callback, validator } = func;
799
805
  const roles = await proto.currentRoles();
800
- if (!!validator?.requireUser && !(await proto.currentUser()))
801
- throw Error('No permission');
802
- if (!!validator?.requireMaster && !options?.master)
803
- throw Error('No permission');
804
- if (_.isArray(validator?.requireAnyUserRoles) && !_.some(validator?.requireAnyUserRoles, x => _.includes(roles, x)))
805
- throw Error('No permission');
806
- if (_.isArray(validator?.requireAllUserRoles) && _.some(validator?.requireAllUserRoles, x => !_.includes(roles, x)))
807
- throw Error('No permission');
806
+ if (!options?.master) {
807
+ if (!!validator?.requireUser && !(await proto.currentUser()))
808
+ throw Error('No permission');
809
+ if (!!validator?.requireMaster)
810
+ throw Error('No permission');
811
+ if (_.isArray(validator?.requireAnyUserRoles) && !_.some(validator?.requireAnyUserRoles, x => _.includes(roles, x)))
812
+ throw Error('No permission');
813
+ if (_.isArray(validator?.requireAllUserRoles) && _.some(validator?.requireAllUserRoles, x => !_.includes(roles, x)))
814
+ throw Error('No permission');
815
+ }
808
816
  return callback(proxy(payload ?? proto));
809
817
  }
810
818
  async varifyPassword(proto, user, password, options) {
@@ -923,31 +931,16 @@ class ProtoInternal {
923
931
  }
924
932
  }
925
933
  async saveFile(proto, object, options) {
926
- const beforeSave = this.triggers?.beforeSaveFile;
927
- const afterSave = this.triggers?.afterSaveFile;
928
- const context = options?.context ?? {};
929
- if (_.isFunction(beforeSave)) {
930
- await beforeSave(proxy(Object.setPrototypeOf({ object, context }, proto)));
931
- }
932
934
  if (object.objectId) {
933
935
  object = await this.updateFile(proto, object, options);
934
936
  }
935
937
  else {
936
938
  object = await this.createFile(proto, object, options);
937
939
  }
938
- if (_.isFunction(afterSave)) {
939
- await afterSave(proxy(Object.setPrototypeOf({ object, context }, proto)));
940
- }
941
940
  return object;
942
941
  }
943
942
  async deleteFile(proto, object, options) {
944
- const beforeDelete = this.triggers?.beforeDeleteFile;
945
- const afterDelete = this.triggers?.afterDeleteFile;
946
943
  object = await object.fetchIfNeeded(['token'], options);
947
- const context = options?.context ?? {};
948
- if (_.isFunction(beforeDelete)) {
949
- await beforeDelete(proxy(Object.setPrototypeOf({ object, context }, proto)));
950
- }
951
944
  const deleted = await proto.Query('File')
952
945
  .equalTo('_id', object.objectId)
953
946
  .deleteOne(options);
@@ -957,9 +950,6 @@ class ProtoInternal {
957
950
  object[PVK].extra = {};
958
951
  }
959
952
  this.destroyFileData(proto, object.token);
960
- if (_.isFunction(afterDelete)) {
961
- await afterDelete(proxy(Object.setPrototypeOf({ object, context }, proto)));
962
- }
963
953
  return object;
964
954
  }
965
955
  fileData(proto, object, options) {
@@ -1407,18 +1397,6 @@ class ProtoService extends ProtoType {
1407
1397
  this[PVK].triggers.afterDelete = {};
1408
1398
  this[PVK].triggers.afterDelete[name] = callback;
1409
1399
  }
1410
- beforeSaveFile(callback) {
1411
- this[PVK].triggers.beforeSaveFile = callback;
1412
- }
1413
- afterSaveFile(callback) {
1414
- this[PVK].triggers.afterSaveFile = callback;
1415
- }
1416
- beforeDeleteFile(callback) {
1417
- this[PVK].triggers.beforeDeleteFile = callback;
1418
- }
1419
- afterDeleteFile(callback) {
1420
- this[PVK].triggers.afterDeleteFile = callback;
1421
- }
1422
1400
  lockTable(className, update) {
1423
1401
  return this.storage.lockTable(className, update);
1424
1402
  }
@@ -1585,11 +1563,11 @@ var classesRoute = (router, proto) => {
1585
1563
  if (!_.includes(classes, name))
1586
1564
  return res.sendStatus(404);
1587
1565
  await response(res, async () => {
1588
- const { operation, context, random, attributes, update, setOnInsert, ...options } = deserialize(req.body);
1566
+ const { operation, context, silent, random, attributes, update, setOnInsert, ...options } = deserialize(req.body);
1589
1567
  const payload = proto.connect(req);
1590
1568
  const query = payload.Query(name);
1591
1569
  query[PVK].options = options;
1592
- const opts = { master: payload.isMaster, context };
1570
+ const opts = { master: payload.isMaster, context, silent };
1593
1571
  switch (operation) {
1594
1572
  case 'explain':
1595
1573
  if (!payload.isMaster)