@bedrockio/model 0.3.0 → 0.3.1

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.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.hasAccess = hasAccess;
7
7
  var _errors = require("./errors");
8
+ var _utils = require("./utils");
8
9
  var _warn = _interopRequireDefault(require("./warn"));
9
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
11
  /**
@@ -28,10 +29,10 @@ function hasAccess(allowed = 'all', options = {}) {
28
29
  return document.id == authUser.id;
29
30
  } else if (token === 'user') {
30
31
  assertOptions(token, options);
31
- return document.user?.id == authUser.id;
32
+ return (0, _utils.isEqual)(document.user, authUser);
32
33
  } else if (token === 'owner') {
33
34
  assertOptions(token, options);
34
- return document.owner?.id == authUser.id;
35
+ return (0, _utils.isEqual)(document.owner, authUser);
35
36
  } else {
36
37
  return scopes?.includes(token);
37
38
  }
package/dist/cjs/index.js CHANGED
@@ -7,7 +7,8 @@ var _exportNames = {
7
7
  createSchema: true,
8
8
  loadModel: true,
9
9
  loadModelDir: true,
10
- addValidators: true
10
+ addValidators: true,
11
+ isEqual: true
11
12
  };
12
13
  Object.defineProperty(exports, "addValidators", {
13
14
  enumerable: true,
@@ -21,6 +22,12 @@ Object.defineProperty(exports, "createSchema", {
21
22
  return _schema.createSchema;
22
23
  }
23
24
  });
25
+ Object.defineProperty(exports, "isEqual", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _utils.isEqual;
29
+ }
30
+ });
24
31
  Object.defineProperty(exports, "loadModel", {
25
32
  enumerable: true,
26
33
  get: function () {
@@ -36,6 +43,7 @@ Object.defineProperty(exports, "loadModelDir", {
36
43
  var _schema = require("./schema");
37
44
  var _load = require("./load");
38
45
  var _validation = require("./validation");
46
+ var _utils = require("./utils");
39
47
  var _testing = require("./testing");
40
48
  Object.keys(_testing).forEach(function (key) {
41
49
  if (key === "default" || key === "__esModule") return;
package/dist/cjs/utils.js CHANGED
@@ -6,12 +6,32 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getField = getField;
7
7
  exports.getInnerField = getInnerField;
8
8
  exports.isDateField = isDateField;
9
+ exports.isEqual = isEqual;
9
10
  exports.isMongooseSchema = isMongooseSchema;
10
11
  exports.isNumberField = isNumberField;
11
12
  exports.isReferenceField = isReferenceField;
12
13
  exports.isSchemaTypedef = isSchemaTypedef;
13
14
  var _mongoose = _interopRequireDefault(require("mongoose"));
14
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ // Mongoose provides an "equals" method on both documents and
17
+ // ObjectIds, however it does not provide a static method to
18
+ // compare two unknown values that may be either, so provide
19
+ // it here.
20
+ function isEqual(a, b) {
21
+ if (a === b) {
22
+ return true;
23
+ } else if (a instanceof _mongoose.default.Document) {
24
+ return a.equals(b);
25
+ } else if (b instanceof _mongoose.default.Document) {
26
+ return b.equals(a);
27
+ } else if (a instanceof _mongoose.default.Types.ObjectId) {
28
+ return a.equals(b);
29
+ } else if (b instanceof _mongoose.default.Types.ObjectId) {
30
+ return b.equals(a);
31
+ } else {
32
+ return false;
33
+ }
34
+ }
15
35
  function isMongooseSchema(obj) {
16
36
  return obj instanceof _mongoose.default.Schema;
17
37
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bedrockio/model",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Bedrock utilities for model creation.",
5
5
  "type": "module",
6
6
  "scripts": {
package/src/access.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { ImplementationError } from './errors';
2
+ import { isEqual } from './utils';
2
3
  import warn from './warn';
3
4
 
4
5
  /**
@@ -20,10 +21,10 @@ export function hasAccess(allowed = 'all', options = {}) {
20
21
  return document.id == authUser.id;
21
22
  } else if (token === 'user') {
22
23
  assertOptions(token, options);
23
- return document.user?.id == authUser.id;
24
+ return isEqual(document.user, authUser);
24
25
  } else if (token === 'owner') {
25
26
  assertOptions(token, options);
26
- return document.owner?.id == authUser.id;
27
+ return isEqual(document.owner, authUser);
27
28
  } else {
28
29
  return scopes?.includes(token);
29
30
  }
package/src/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { createSchema } from './schema';
2
2
  export { loadModel, loadModelDir } from './load';
3
3
  export { addValidators } from './validation';
4
+ export { isEqual } from './utils';
4
5
  export * from './testing';
5
6
  export * from './errors';
package/src/utils.js CHANGED
@@ -1,5 +1,25 @@
1
1
  import mongoose from 'mongoose';
2
2
 
3
+ // Mongoose provides an "equals" method on both documents and
4
+ // ObjectIds, however it does not provide a static method to
5
+ // compare two unknown values that may be either, so provide
6
+ // it here.
7
+ export function isEqual(a, b) {
8
+ if (a === b) {
9
+ return true;
10
+ } else if (a instanceof mongoose.Document) {
11
+ return a.equals(b);
12
+ } else if (b instanceof mongoose.Document) {
13
+ return b.equals(a);
14
+ } else if (a instanceof mongoose.Types.ObjectId) {
15
+ return a.equals(b);
16
+ } else if (b instanceof mongoose.Types.ObjectId) {
17
+ return b.equals(a);
18
+ } else {
19
+ return false;
20
+ }
21
+ }
22
+
3
23
  export function isMongooseSchema(obj) {
4
24
  return obj instanceof mongoose.Schema;
5
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../src/access.js"],"names":[],"mappings":"AAGA;;GAEG;AACH,oCAFW,MAAM,GAAC,MAAM,EAAE,yBA2BzB"}
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../src/access.js"],"names":[],"mappings":"AAIA;;GAEG;AACH,oCAFW,MAAM,GAAC,MAAM,EAAE,yBA2BzB"}
package/types/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { createSchema } from "./schema";
2
2
  export { addValidators } from "./validation";
3
+ export { isEqual } from "./utils";
3
4
  export * from "./testing";
4
5
  export * from "./errors";
5
6
  export { loadModel, loadModelDir } from "./load";
package/types/load.d.ts CHANGED
@@ -4,73 +4,7 @@
4
4
  * @param {string} name
5
5
  * @returns mongoose.Model
6
6
  */
7
- export function loadModel(definition: object, name: string): mongoose.Model<any, any, any, any, any, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, any, any, any, {
8
- [x: string]: any;
9
- }, {
10
- autoIndex?: boolean;
11
- autoCreate?: boolean;
12
- bufferCommands?: boolean;
13
- bufferTimeoutMS?: number;
14
- capped?: number | boolean | {
15
- size?: number;
16
- max?: number;
17
- autoIndexId?: boolean;
18
- };
19
- collation?: mongoose.mongo.CollationOptions;
20
- collectionOptions?: mongoose.mongo.CreateCollectionOptions;
21
- timeseries?: mongoose.mongo.TimeSeriesCollectionOptions;
22
- expireAfterSeconds?: number;
23
- expires?: string | number;
24
- collection?: string;
25
- discriminatorKey?: string;
26
- excludeIndexes?: boolean;
27
- id?: boolean;
28
- _id?: boolean;
29
- minimize?: boolean;
30
- optimisticConcurrency?: boolean;
31
- pluginTags?: string[];
32
- read?: string;
33
- writeConcern?: mongoose.mongo.WriteConcern;
34
- safe?: boolean | {
35
- w?: string | number;
36
- wtimeout?: number;
37
- j?: boolean;
38
- };
39
- shardKey?: Record<string, unknown>;
40
- strict?: boolean | "throw";
41
- strictQuery?: boolean | "throw";
42
- toJSON: {
43
- getters: boolean;
44
- versionKey: boolean;
45
- transform: (doc: any, ret: any, options: any) => void;
46
- } | mongoose.ToObjectOptions<any>;
47
- toObject: {
48
- getters: boolean;
49
- versionKey: boolean;
50
- transform: (doc: any, ret: any, options: any) => void;
51
- } | mongoose.ToObjectOptions<any>;
52
- typeKey?: string;
53
- validateBeforeSave?: boolean;
54
- validateModifiedOnly?: boolean;
55
- versionKey?: string | boolean;
56
- selectPopulatedPaths?: boolean;
57
- skipVersioning?: {
58
- [key: string]: boolean;
59
- };
60
- storeSubdocValidationError?: boolean;
61
- timestamps: boolean | mongoose.SchemaTimestampsConfig;
62
- suppressReservedKeysWarning?: boolean;
63
- statics?: {
64
- [x: string]: any;
65
- };
66
- methods?: any;
67
- query?: any;
68
- castNonArrays?: boolean;
69
- virtuals?: mongoose.SchemaOptionsVirtualsPropertyType<any, any, any>;
70
- overwriteModels?: boolean;
71
- }, any, any>> & {
72
- [x: string]: any;
73
- };
7
+ export function loadModel(definition: object, name: string): any;
74
8
  /**
75
9
  * Loads all model definitions in the given directory.
76
10
  * Returns the full loaded model set.
@@ -1 +1 @@
1
- {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../src/load.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,sCAJW,MAAM,QACN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAahB;AAED;;;;GAIG;AACH,sCAFW,MAAM,mBAkBhB"}
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../src/load.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,sCAJW,MAAM,QACN,MAAM,OAahB;AAED;;;;GAIG;AACH,sCAFW,MAAM,mBAkBhB"}
package/types/schema.d.ts CHANGED
@@ -6,10 +6,9 @@
6
6
  * @param {mongoose.SchemaOptions} options
7
7
  * @returns mongoose.Schema
8
8
  */
9
- export function createSchema(definition: object, options?: mongoose.SchemaOptions): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, any, any, any, {
10
- [x: string]: any;
11
- }, {
9
+ export function createSchema(definition: object, options?: mongoose.SchemaOptions): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, any, any, any, any, {
12
10
  autoIndex?: boolean;
11
+ autoSearchIndex?: boolean;
13
12
  autoCreate?: boolean;
14
13
  bufferCommands?: boolean;
15
14
  bufferTimeoutMS?: number;
@@ -62,10 +61,8 @@ export function createSchema(definition: object, options?: mongoose.SchemaOption
62
61
  storeSubdocValidationError?: boolean;
63
62
  timestamps: boolean | mongoose.SchemaTimestampsConfig;
64
63
  suppressReservedKeysWarning?: boolean;
65
- statics?: {
66
- [x: string]: any;
67
- };
68
- methods?: any;
64
+ statics?: mongoose.AddThisParameter<any, mongoose.Model<any, {}, {}, {}, any, any>>;
65
+ methods?: mongoose.AddThisParameter<any, any> & mongoose.AnyObject;
69
66
  query?: any;
70
67
  castNonArrays?: boolean;
71
68
  virtuals?: mongoose.SchemaOptionsVirtualsPropertyType<any, any, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.js"],"names":[],"mappings":"AAoBA;;;;;;;GAOG;AACH,yCAJW,MAAM,YACN,SAAS,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuChC;AAED,iEAsBC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.js"],"names":[],"mappings":"AAoBA;;;;;;;GAOG;AACH,yCAJW,MAAM,YACN,SAAS,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuChC;AAED,iEAsBC"}
package/types/utils.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export function isEqual(a: any, b: any): boolean;
1
2
  export function isMongooseSchema(obj: any): boolean;
2
3
  export function isReferenceField(obj: any, path: any): boolean;
3
4
  export function isDateField(obj: any, path: any): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":"AAEA,oDAEC;AAED,+DAEC;AAED,0DAEC;AAED,4DAEC;AAOD,mDAGC;AAuBD,mDAYC;AAKD,wDAEC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":"AAMA,iDAcC;AAED,oDAEC;AAED,+DAEC;AAED,0DAEC;AAED,4DAEC;AAOD,mDAGC;AAuBD,mDAYC;AAKD,wDAEC"}