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/adapters/file/database.d.ts +2 -2
- package/dist/adapters/file/filesystem.d.ts +2 -2
- package/dist/adapters/file/google-cloud-storage.d.ts +2 -2
- package/dist/adapters/storage/progres.d.ts +1 -1
- package/dist/client.d.ts +3 -3
- package/dist/client.js +1 -1
- package/dist/client.mjs +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +31 -53
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -54
- package/dist/index.mjs.map +1 -1
- package/dist/internals/{index-bbPCIbir.d.ts → index-BAB_APmb.d.ts} +2 -2
- package/dist/internals/index-BAB_APmb.d.ts.map +1 -0
- package/dist/internals/{index-BWztjrw_.d.ts → index-CvfRsxEZ.d.ts} +6 -13
- package/dist/internals/index-CvfRsxEZ.d.ts.map +1 -0
- package/dist/internals/{index-BDB4idmt.d.ts → index-D4VXQ1FB.d.ts} +2 -2
- package/dist/internals/index-D4VXQ1FB.d.ts.map +1 -0
- package/dist/internals/{index-Do-zNOpD.mjs → index-DGau0Wqf.mjs} +19 -1
- package/dist/internals/index-DGau0Wqf.mjs.map +1 -0
- package/dist/internals/{index-CT01T3qs.js → index-tNCIyuCp.js} +19 -1
- package/dist/internals/index-tNCIyuCp.js.map +1 -0
- package/package.json +3 -3
- package/dist/internals/index-BDB4idmt.d.ts.map +0 -1
- package/dist/internals/index-BWztjrw_.d.ts.map +0 -1
- package/dist/internals/index-CT01T3qs.js.map +0 -1
- package/dist/internals/index-Do-zNOpD.mjs.map +0 -1
- package/dist/internals/index-bbPCIbir.d.ts.map +0 -1
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-
|
|
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-
|
|
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 (
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
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)
|