@quatrain/core 1.2.1 → 1.2.2

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.
@@ -11,4 +11,8 @@ export declare class NotFoundError extends ResourceError {
11
11
  }
12
12
  export declare class GoneError extends ResourceError {
13
13
  }
14
+ export declare class ValidationError extends ResourceError {
15
+ errors: Record<string, string>;
16
+ constructor(message: string, errors?: Record<string, string>);
17
+ }
14
18
  //# sourceMappingURL=ResourcesErrors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesErrors.d.ts","sourceRoot":"","sources":["../../src/common/ResourcesErrors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAK7B;AAED,qBAAa,eAAgB,SAAQ,aAAa;CAAG;AAErD,qBAAa,iBAAkB,SAAQ,aAAa;CAAG;AAEvD,qBAAa,cAAe,SAAQ,aAAa;CAAG;AAEpD,qBAAa,aAAc,SAAQ,aAAa;CAAG;AAEnD,qBAAa,SAAU,SAAQ,aAAa;CAAG"}
1
+ {"version":3,"file":"ResourcesErrors.d.ts","sourceRoot":"","sources":["../../src/common/ResourcesErrors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAK7B;AAED,qBAAa,eAAgB,SAAQ,aAAa;CAAG;AAErD,qBAAa,iBAAkB,SAAQ,aAAa;CAAG;AAEvD,qBAAa,cAAe,SAAQ,aAAa;CAAG;AAEpD,qBAAa,aAAc,SAAQ,aAAa;CAAG;AAEnD,qBAAa,SAAU,SAAQ,aAAa;CAAG;AAE/C,qBAAa,eAAgB,SAAQ,aAAa;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;CAIlE"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GoneError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = exports.ResourceError = void 0;
3
+ exports.ValidationError = exports.GoneError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = exports.ResourceError = void 0;
4
4
  class ResourceError extends Error {
5
5
  constructor(message) {
6
6
  super(message);
@@ -23,4 +23,12 @@ exports.NotFoundError = NotFoundError;
23
23
  class GoneError extends ResourceError {
24
24
  }
25
25
  exports.GoneError = GoneError;
26
+ class ValidationError extends ResourceError {
27
+ errors;
28
+ constructor(message, errors = {}) {
29
+ super(message);
30
+ this.errors = errors;
31
+ }
32
+ }
33
+ exports.ValidationError = ValidationError;
26
34
  //# sourceMappingURL=ResourcesErrors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesErrors.js","sourceRoot":"","sources":["../../src/common/ResourcesErrors.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAc,SAAQ,KAAK;IACrC,YAAY,OAAe;QACxB,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IACpC,CAAC;CACH;AAND,sCAMC;AAED,MAAa,eAAgB,SAAQ,aAAa;CAAG;AAArD,0CAAqD;AAErD,MAAa,iBAAkB,SAAQ,aAAa;CAAG;AAAvD,8CAAuD;AAEvD,MAAa,cAAe,SAAQ,aAAa;CAAG;AAApD,wCAAoD;AAEpD,MAAa,aAAc,SAAQ,aAAa;CAAG;AAAnD,sCAAmD;AAEnD,MAAa,SAAU,SAAQ,aAAa;CAAG;AAA/C,8BAA+C"}
1
+ {"version":3,"file":"ResourcesErrors.js","sourceRoot":"","sources":["../../src/common/ResourcesErrors.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAc,SAAQ,KAAK;IACrC,YAAY,OAAe;QACxB,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IACpC,CAAC;CACH;AAND,sCAMC;AAED,MAAa,eAAgB,SAAQ,aAAa;CAAG;AAArD,0CAAqD;AAErD,MAAa,iBAAkB,SAAQ,aAAa;CAAG;AAAvD,8CAAuD;AAEvD,MAAa,cAAe,SAAQ,aAAa;CAAG;AAApD,wCAAoD;AAEpD,MAAa,aAAc,SAAQ,aAAa;CAAG;AAAnD,sCAAmD;AAEnD,MAAa,SAAU,SAAQ,aAAa;CAAG;AAA/C,8BAA+C;AAE/C,MAAa,eAAgB,SAAQ,aAAa;IACxC,MAAM,CAAwB;IAErC,YAAY,OAAe,EAAE,SAAiC,EAAE;QAC7D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACvB,CAAC;CACH;AAPD,0CAOC"}
@@ -14,5 +14,6 @@ export declare class BaseObject extends AbstractObject {
14
14
  static fromBackend<T>(path: string): Promise<T>;
15
15
  static fromDataObject<T extends BaseObjectType>(dao: DataObjectClass<any>): any;
16
16
  asReference(): any;
17
+ validate(): void;
17
18
  }
18
19
  //# sourceMappingURL=BaseObject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseObject.d.ts","sourceRoot":"","sources":["../../src/components/BaseObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,qBAAa,UAAW,SAAQ,cAAc;IAE3C,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAgD;IAE5E,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM;IAI9B,MAAM,CAAC,cAAc,CAAC,KAAK,GAAE,GAAU;WAuB1B,UAAU,CACpB,GAAG,GAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAqB,EAChE,KAAK,GAAE,GAAU,GACjB,OAAO,CAAC,cAAc,CAAC;IAkB1B,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,GAAE,GAAU,GAAG,GAAG;WAiB9D,OAAO,CACjB,GAAG,GAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAqB,EAChE,KAAK,GAAE,GAAU,GACjB,OAAO,CAAC,GAAG,CAAC;WA6BF,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAYrD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,cAAc,EAC3C,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,GACzB,GAAG;IAMN,WAAW;CAGb"}
1
+ {"version":3,"file":"BaseObject.d.ts","sourceRoot":"","sources":["../../src/components/BaseObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,qBAAa,UAAW,SAAQ,cAAc;IAE3C,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAgD;IAE5E,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM;IAI9B,MAAM,CAAC,cAAc,CAAC,KAAK,GAAE,GAAU;WAuB1B,UAAU,CACpB,GAAG,GAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAqB,EAChE,KAAK,GAAE,GAAU,GACjB,OAAO,CAAC,cAAc,CAAC;IAkB1B,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,GAAE,GAAU,GAAG,GAAG;WAiB9D,OAAO,CACjB,GAAG,GAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAqB,EAChE,KAAK,GAAE,GAAU,GACjB,OAAO,CAAC,GAAG,CAAC;WA6BF,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAYrD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,cAAc,EAC3C,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,GACzB,GAAG;IAMN,WAAW;IAQX,QAAQ;CAiBV"}
@@ -5,6 +5,7 @@ const ObjectUri_1 = require("./ObjectUri");
5
5
  const DataObject_1 = require("./DataObject");
6
6
  const BaseObjectProperties_1 = require("./BaseObjectProperties");
7
7
  const AbstractObject_1 = require("./AbstractObject");
8
+ const ResourcesErrors_1 = require("../common/ResourcesErrors");
8
9
  class BaseObject extends AbstractObject_1.AbstractObject {
9
10
  static PROPS_DEFINITION = BaseObjectProperties_1.BaseObjectProperties;
10
11
  static getProperty(key) {
@@ -75,6 +76,21 @@ class BaseObject extends AbstractObject_1.AbstractObject {
75
76
  asReference() {
76
77
  return this._dataObject.toReference();
77
78
  }
79
+ validate() {
80
+ const errors = {};
81
+ const props = this.constructor.PROPS_DEFINITION || [];
82
+ for (const prop of props) {
83
+ if (prop.mandatory) {
84
+ const val = this.get(prop.name);
85
+ if (val === undefined || val === null || val === '') {
86
+ errors[prop.name] = `${prop.name} is required`;
87
+ }
88
+ }
89
+ }
90
+ if (Object.keys(errors).length > 0) {
91
+ throw new ResourcesErrors_1.ValidationError('Validation failed', errors);
92
+ }
93
+ }
78
94
  }
79
95
  exports.BaseObject = BaseObject;
80
96
  //# sourceMappingURL=BaseObject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseObject.js","sourceRoot":"","sources":["../../src/components/BaseObject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseObject.js","sourceRoot":"","sources":["../../src/components/BaseObject.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -24,9 +24,9 @@ import { BaseObjectType } from './components/types/BaseObjectType';
24
24
  import { Proxy } from './components/types/ProxyConstructor';
25
25
  import { UserType, User, UserProperties } from './components/User';
26
26
  import { EntityType, Entity } from './components/Entity';
27
- import { BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError } from './common/ResourcesErrors';
27
+ import { BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError, ValidationError } from './common/ResourcesErrors';
28
28
  import * as htmlType from './properties/types/PropertyHTMLType';
29
29
  import { DataObjectParams } from './components/types/DataObjectParams';
30
- export { htmlType, statuses, Core, Property, BaseProperty, BooleanProperty, DateTimeProperty, EnumProperty, HashProperty, CollectionProperty, ArrayProperty, ObjectProperty, NumberProperty, returnAs, StringProperty, MapProperty, FileProperty, ObjectUri, DataObject, AbstractObject, BaseObject, BaseObjectProperties, User, UserProperties, Entity, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError, };
30
+ export { htmlType, statuses, Core, Property, BaseProperty, BooleanProperty, DateTimeProperty, EnumProperty, HashProperty, CollectionProperty, ArrayProperty, ObjectProperty, NumberProperty, returnAs, StringProperty, MapProperty, FileProperty, ObjectUri, DataObject, AbstractObject, BaseObject, BaseObjectProperties, User, UserProperties, Entity, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, GoneError, ValidationError, };
31
31
  export type { BasePropertyType, BooleanPropertyType, DataObjectParams, DateTimePropertyType, EnumPropertyType, HashPropertyType, CollectionPropertyType, ArrayPropertyType, ObjectPropertyType, NumberPropertyType, StringPropertyType, MapPropertyType, FilePropertyType, DataObjectClass, DataObjectProperties, BaseObjectType, UserType, Proxy, EntityType, };
32
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.GoneError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = exports.Entity = exports.UserProperties = exports.User = exports.BaseObjectProperties = exports.BaseObject = exports.AbstractObject = exports.DataObject = exports.ObjectUri = exports.FileProperty = exports.MapProperty = exports.StringProperty = exports.returnAs = exports.NumberProperty = exports.ObjectProperty = exports.ArrayProperty = exports.CollectionProperty = exports.HashProperty = exports.EnumProperty = exports.DateTimeProperty = exports.BooleanProperty = exports.BaseProperty = exports.Property = exports.Core = exports.statuses = exports.htmlType = void 0;
36
+ exports.ValidationError = exports.GoneError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = exports.Entity = exports.UserProperties = exports.User = exports.BaseObjectProperties = exports.BaseObject = exports.AbstractObject = exports.DataObject = exports.ObjectUri = exports.FileProperty = exports.MapProperty = exports.StringProperty = exports.returnAs = exports.NumberProperty = exports.ObjectProperty = exports.ArrayProperty = exports.CollectionProperty = exports.HashProperty = exports.EnumProperty = exports.DateTimeProperty = exports.BooleanProperty = exports.BaseProperty = exports.Property = exports.Core = exports.statuses = exports.htmlType = void 0;
37
37
  const Core_1 = require("./Core");
38
38
  Object.defineProperty(exports, "Core", { enumerable: true, get: function () { return Core_1.Core; } });
39
39
  const statuses = __importStar(require("./common/statuses"));
@@ -86,6 +86,7 @@ Object.defineProperty(exports, "UnauthorizedError", { enumerable: true, get: fun
86
86
  Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: function () { return ResourcesErrors_1.ForbiddenError; } });
87
87
  Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return ResourcesErrors_1.NotFoundError; } });
88
88
  Object.defineProperty(exports, "GoneError", { enumerable: true, get: function () { return ResourcesErrors_1.GoneError; } });
89
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return ResourcesErrors_1.ValidationError; } });
89
90
  const htmlType = __importStar(require("./properties/types/PropertyHTMLType"));
90
91
  exports.htmlType = htmlType;
91
92
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA6B;AAsD1B,qFAtDM,WAAI,OAsDN;AArDP,4DAA6C;AAoD1C,4BAAQ;AAnDX,oDAAgD;AAqD7C,yFArDM,mBAAQ,OAqDN;AApDX,4DAA0E;AAqDvE,6FArDM,2BAAY,OAqDN;AApDf,gEAAgF;AA8D7E,+FA9DM,+BAAc,OA8DN;AA7DjB,gEAAgF;AA2D7E,+FA3DM,+BAAc,OA2DN;AA1DjB,4DAA0E;AAqDvE,6FArDM,2BAAY,OAqDN;AApDf,kEAGqC;AA+ClC,gGAjDA,iCAAe,OAiDA;AA9ClB,gEAIoC;AAgDjC,+FAnDA,+BAAc,OAmDA;AAEd,yFAnDA,yBAAQ,OAmDA;AAjDX,oEAGsC;AAuCnC,iGAzCA,mCAAgB,OAyCA;AAtCnB,4DAA0E;AAwCvE,6FAxCM,2BAAY,OAwCN;AAvCf,wEAGwC;AAqCrC,mGAvCA,uCAAkB,OAuCA;AApCrB,8DAA6E;AAqC1E,8FArCM,6BAAa,OAqCN;AApChB,0DAAuE;AAyCpE,4FAzCM,yBAAW,OAyCN;AAxCd,4DAA0E;AAyCvE,6FAzCM,2BAAY,OAyCN;AAxCf,gEAA4D;AA2CzD,+FA3CM,+BAAc,OA2CN;AA1CjB,sDAAkD;AAwC/C,0FAxCM,qBAAS,OAwCN;AAtCZ,wDAAoD;AAuCjD,2FAvCM,uBAAU,OAuCN;AArCb,wDAAoD;AAuCjD,2FAvCM,uBAAU,OAuCN;AAtCb,4EAAwE;AAuCrE,qGAvCM,2CAAoB,OAuCN;AAnCvB,4CAAkE;AAoC/D,qFApCgB,WAAI,OAoChB;AACJ,+FArCsB,qBAAc,OAqCtB;AApCjB,gDAAwD;AAqCrD,uFArCkB,eAAM,OAqClB;AAnCT,8DAMiC;AA8B9B,gGAnCA,iCAAe,OAmCA;AACf,kGAnCA,mCAAiB,OAmCA;AACjB,+FAnCA,gCAAc,OAmCA;AACd,8FAnCA,+BAAa,OAmCA;AACb,0FAnCA,2BAAS,OAmCA;AAjCZ,8EAA+D;AAI5D,4BAAQ"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA6B;AAuD1B,qFAvDM,WAAI,OAuDN;AAtDP,4DAA6C;AAqD1C,4BAAQ;AApDX,oDAAgD;AAsD7C,yFAtDM,mBAAQ,OAsDN;AArDX,4DAA0E;AAsDvE,6FAtDM,2BAAY,OAsDN;AArDf,gEAAgF;AA+D7E,+FA/DM,+BAAc,OA+DN;AA9DjB,gEAAgF;AA4D7E,+FA5DM,+BAAc,OA4DN;AA3DjB,4DAA0E;AAsDvE,6FAtDM,2BAAY,OAsDN;AArDf,kEAGqC;AAgDlC,gGAlDA,iCAAe,OAkDA;AA/ClB,gEAIoC;AAiDjC,+FApDA,+BAAc,OAoDA;AAEd,yFApDA,yBAAQ,OAoDA;AAlDX,oEAGsC;AAwCnC,iGA1CA,mCAAgB,OA0CA;AAvCnB,4DAA0E;AAyCvE,6FAzCM,2BAAY,OAyCN;AAxCf,wEAGwC;AAsCrC,mGAxCA,uCAAkB,OAwCA;AArCrB,8DAA6E;AAsC1E,8FAtCM,6BAAa,OAsCN;AArChB,0DAAuE;AA0CpE,4FA1CM,yBAAW,OA0CN;AAzCd,4DAA0E;AA0CvE,6FA1CM,2BAAY,OA0CN;AAzCf,gEAA4D;AA4CzD,+FA5CM,+BAAc,OA4CN;AA3CjB,sDAAkD;AAyC/C,0FAzCM,qBAAS,OAyCN;AAvCZ,wDAAoD;AAwCjD,2FAxCM,uBAAU,OAwCN;AAtCb,wDAAoD;AAwCjD,2FAxCM,uBAAU,OAwCN;AAvCb,4EAAwE;AAwCrE,qGAxCM,2CAAoB,OAwCN;AApCvB,4CAAkE;AAqC/D,qFArCgB,WAAI,OAqChB;AACJ,+FAtCsB,qBAAc,OAsCtB;AArCjB,gDAAwD;AAsCrD,uFAtCkB,eAAM,OAsClB;AApCT,8DAOiC;AA8B9B,gGApCA,iCAAe,OAoCA;AACf,kGApCA,mCAAiB,OAoCA;AACjB,+FApCA,gCAAc,OAoCA;AACd,8FApCA,+BAAa,OAoCA;AACb,0FApCA,2BAAS,OAoCA;AACT,gGApCA,iCAAe,OAoCA;AAlClB,8EAA+D;AAI5D,4BAAQ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quatrain/core",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "Core objects for business apps",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,7 +20,7 @@
20
20
  "author": "Quatrain Développement SAS <developers@quatrain.com>",
21
21
  "license": "AGPL-3.0-only",
22
22
  "devDependencies": {
23
- "@quatrain/testing": "^1.1.0",
23
+ "@quatrain/testing": "^1.1.1",
24
24
  "@tsconfig/recommended": "^1.0.1",
25
25
  "@types/jest": "^29.5.12",
26
26
  "@types/node": "^22.10.1",
@@ -33,7 +33,7 @@
33
33
  "typescript": "^5.2.2"
34
34
  },
35
35
  "dependencies": {
36
- "@quatrain/log": "^1.2.0",
36
+ "@quatrain/log": "^1.2.1",
37
37
  "node-persist": "^4.0.4",
38
38
  "which": "^5.0.0"
39
39
  },
@@ -15,3 +15,12 @@ export class ForbiddenError extends ResourceError {}
15
15
  export class NotFoundError extends ResourceError {}
16
16
 
17
17
  export class GoneError extends ResourceError {}
18
+
19
+ export class ValidationError extends ResourceError {
20
+ public errors: Record<string, string>
21
+
22
+ constructor(message: string, errors: Record<string, string> = {}) {
23
+ super(message)
24
+ this.errors = errors
25
+ }
26
+ }
@@ -5,6 +5,7 @@ import { BaseObjectType } from './types/BaseObjectType'
5
5
  import { BaseObjectProperties } from './BaseObjectProperties'
6
6
  import { AbstractObject } from './AbstractObject'
7
7
  import { DataObjectType } from './types/DataObjectType'
8
+ import { ValidationError } from '../common/ResourcesErrors'
8
9
 
9
10
  export class BaseObject extends AbstractObject {
10
11
  // implements BaseObjectClass {
@@ -130,4 +131,26 @@ export class BaseObject extends AbstractObject {
130
131
  asReference() {
131
132
  return this._dataObject.toReference()
132
133
  }
134
+
135
+ /**
136
+ * Validates the object's properties against the model definition.
137
+ * Throws a ValidationError if any mandatory properties are missing or empty.
138
+ */
139
+ validate() {
140
+ const errors: Record<string, string> = {}
141
+ const props = (this.constructor as typeof BaseObject).PROPS_DEFINITION || []
142
+
143
+ for (const prop of props) {
144
+ if (prop.mandatory) {
145
+ const val = this.get(prop.name)
146
+ if (val === undefined || val === null || val === '') {
147
+ errors[prop.name] = `${prop.name} is required`
148
+ }
149
+ }
150
+ }
151
+
152
+ if (Object.keys(errors).length > 0) {
153
+ throw new ValidationError('Validation failed', errors)
154
+ }
155
+ }
133
156
  }
package/src/index.ts CHANGED
@@ -45,6 +45,7 @@ import {
45
45
  ForbiddenError,
46
46
  NotFoundError,
47
47
  GoneError,
48
+ ValidationError,
48
49
  } from './common/ResourcesErrors'
49
50
  import * as htmlType from './properties/types/PropertyHTMLType'
50
51
  import { DataObjectParams } from './components/types/DataObjectParams'
@@ -80,6 +81,7 @@ export {
80
81
  ForbiddenError,
81
82
  NotFoundError,
82
83
  GoneError,
84
+ ValidationError,
83
85
  }
84
86
 
85
87
  export type {