@pocket-architect/core 0.1.16 → 0.1.18

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/build/EntityId.js CHANGED
@@ -5,6 +5,7 @@ var tslib_1 = require("tslib");
5
5
  var uuid_by_string_1 = tslib_1.__importDefault(require("uuid-by-string"));
6
6
  var cuid2_1 = require("@paralleldrive/cuid2");
7
7
  var hashids_1 = tslib_1.__importDefault(require("hashids"));
8
+ var HashError_1 = require("./error/HashError");
8
9
  var EntityId = /** @class */ (function () {
9
10
  function EntityId(recordId, isHash, uuid) {
10
11
  if (recordId === void 0) { recordId = null; }
@@ -38,8 +39,14 @@ var EntityId = /** @class */ (function () {
38
39
  return hashids.encode(this.toPrimitive().toString());
39
40
  };
40
41
  EntityId.prototype.fromHash = function (hash) {
42
+ if (!hash) {
43
+ return this;
44
+ }
41
45
  var hashids = new (hashids_1.default.bind.apply(hashids_1.default, tslib_1.__spreadArray([void 0], this.hashOptions, false)))();
42
46
  var num = hashids.decode(hash)[0];
47
+ if (!num) {
48
+ throw new HashError_1.HashError("Invalid hash ".concat(hash));
49
+ }
43
50
  this._recordId = (typeof this._recordId === 'string' ? num.toString() : num);
44
51
  this.createUUID();
45
52
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityId.js","sourceRoot":"","sources":["../src/EntityId.ts"],"names":[],"mappings":";;;;AAAA,0EAAuC;AACvC,8CAA+C;AAC/C,4DAA8B;AAE9B;IAIE,kBAAY,QAAkB,EAAE,MAAsB,EAAE,IAAmB;QAA/D,yBAAA,EAAA,eAAkB;QAAE,uBAAA,EAAA,cAAsB;QAAE,qBAAA,EAAA,WAAmB;QAHjE,cAAS,GAAW,IAAI,CAAC;QACzB,UAAK,GAAW,IAAI,CAAC;QAG7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,QAAkB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,6BAAU,GAAlB;QACE,IAAI,CAAC,KAAK,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAA,gBAAQ,GAAE,EAAE,IAAA,wBAAU,EAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,sBAAI,iCAAW;aAAf;YACE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;;;OAAA;IAED,yBAAM,GAAN;QACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAM,OAAO,QAAO,iBAAO,YAAP,iBAAO,kCAAI,IAAI,CAAC,WAAW,YAAC,CAAC;QACjD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,2BAAQ,GAAR,UAAS,IAAY;QACnB,IAAM,OAAO,QAAO,iBAAO,YAAP,iBAAO,kCAAI,IAAI,CAAC,WAAW,YAAC,CAAC;QACjD,IAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,GAAM,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAAW,GAAX;QACE,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,2BAAQ,GAAR;QACE,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,yBAAM,GAAN,UAAO,EAAe;QACpB,OAAO,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC;IACjC,CAAC;IACH,eAAC;AAAD,CAAC,AAjDD,IAiDC;AAjDY,4BAAQ"}
1
+ {"version":3,"file":"EntityId.js","sourceRoot":"","sources":["../src/EntityId.ts"],"names":[],"mappings":";;;;AAAA,0EAAuC;AACvC,8CAA+C;AAC/C,4DAA8B;AAC9B,+CAA4C;AAE5C;IAIE,kBAAY,QAAkB,EAAE,MAAsB,EAAE,IAAmB;QAA/D,yBAAA,EAAA,eAAkB;QAAE,uBAAA,EAAA,cAAsB;QAAE,qBAAA,EAAA,WAAmB;QAHjE,cAAS,GAAW,IAAI,CAAC;QACzB,UAAK,GAAW,IAAI,CAAC;QAG7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,QAAkB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,6BAAU,GAAlB;QACE,IAAI,CAAC,KAAK,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAA,gBAAQ,GAAE,EAAE,IAAA,wBAAU,EAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,sBAAI,iCAAW;aAAf;YACE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;;;OAAA;IAED,yBAAM,GAAN;QACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAM,OAAO,QAAO,iBAAO,YAAP,iBAAO,kCAAI,IAAI,CAAC,WAAW,YAAC,CAAC;QACjD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,2BAAQ,GAAR,UAAS,IAAY;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAM,OAAO,QAAO,iBAAO,YAAP,iBAAO,kCAAI,IAAI,CAAC,WAAW,YAAC,CAAC;QACjD,IAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,qBAAS,CAAC,uBAAgB,IAAI,CAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,SAAS,GAAM,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAAW,GAAX;QACE,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,2BAAQ,GAAR;QACE,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,yBAAM,GAAN,UAAO,EAAe;QACpB,OAAO,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC;IACjC,CAAC;IACH,eAAC;AAAD,CAAC,AAvDD,IAuDC;AAvDY,4BAAQ"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var tslib_1 = require("tslib");
4
4
  var EntityId_1 = require("./EntityId");
5
+ var HashError_1 = require("./error/HashError");
5
6
  var TestId = /** @class */ (function (_super) {
6
7
  tslib_1.__extends(TestId, _super);
7
8
  function TestId() {
@@ -30,6 +31,23 @@ describe('ValueObject', function () {
30
31
  return [2 /*return*/];
31
32
  });
32
33
  }); });
34
+ test('fromHash', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
35
+ return tslib_1.__generator(this, function (_a) {
36
+ expect.assertions(4);
37
+ expect((new Test2Id(undefined, true)).toPrimitive()).toEqual(null);
38
+ expect((new Test2Id(null, true)).toPrimitive()).toEqual(null);
39
+ try {
40
+ new Test2Id('123', true);
41
+ }
42
+ catch (err) {
43
+ // eslint-disable-next-line jest/no-conditional-expect
44
+ expect(err).toBeInstanceOf(HashError_1.HashError);
45
+ // eslint-disable-next-line jest/no-conditional-expect
46
+ expect(err.message).toEqual('Invalid hash 123');
47
+ }
48
+ return [2 /*return*/];
49
+ });
50
+ }); });
33
51
  test('toHash', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
34
52
  var id, id2, id3;
35
53
  return tslib_1.__generator(this, function (_a) {
@@ -1 +1 @@
1
- {"version":3,"file":"EntityId.spec.js","sourceRoot":"","sources":["../src/EntityId.spec.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAEtC;IAAqB,kCAAgB;IAArC;;IACA,CAAC;IAAD,aAAC;AAAD,CAAC,AADD,CAAqB,mBAAQ,GAC5B;AAED;IAAsB,mCAAgB;IAAtC;;IACA,CAAC;IAAD,cAAC;AAAD,CAAC,AADD,CAAsB,mBAAQ,GAC7B;AAED,QAAQ,CAAC,aAAa,EAAE;IACtB,IAAI,CAAC,MAAM,EAAE;;;YACL,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,GAAG,GAAG,IAAI,mBAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEtB,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;;;SACzC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE;;;YACP,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;YAEhE,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEnD,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,cAAM,OAAA,GAAG,CAAC,MAAM,EAAE,EAAZ,CAAY,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;;;SACrE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"EntityId.spec.js","sourceRoot":"","sources":["../src/EntityId.spec.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AACtC,+CAA4C;AAE5C;IAAqB,kCAAgB;IAArC;;IACA,CAAC;IAAD,aAAC;AAAD,CAAC,AADD,CAAqB,mBAAQ,GAC5B;AAED;IAAsB,mCAAgB;IAAtC;;IACA,CAAC;IAAD,cAAC;AAAD,CAAC,AADD,CAAsB,mBAAQ,GAC7B;AAED,QAAQ,CAAC,aAAa,EAAE;IACtB,IAAI,CAAC,MAAM,EAAE;;;YACL,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,GAAG,GAAG,IAAI,mBAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEtB,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;;;SACzC,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,EAAE;;YACf,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAErB,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnE,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE9D,IAAI,CAAC;gBACH,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,sDAAsD;gBACtD,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,qBAAS,CAAC,CAAC;gBACtC,sDAAsD;gBACtD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAClD,CAAC;;;SACF,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,EAAE;;;YACP,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;YAEhE,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEnD,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,cAAM,OAAA,GAAG,CAAC,MAAM,EAAE,EAAZ,CAAY,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;;;SACrE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare class HashError extends Error {
2
+ constructor(message: string);
3
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HashError = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var HashError = /** @class */ (function (_super) {
6
+ tslib_1.__extends(HashError, _super);
7
+ function HashError(message) {
8
+ var _this = _super.call(this, message) || this;
9
+ Object.setPrototypeOf(_this, HashError.prototype);
10
+ return _this;
11
+ }
12
+ return HashError;
13
+ }(Error));
14
+ exports.HashError = HashError;
15
+ //# sourceMappingURL=HashError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HashError.js","sourceRoot":"","sources":["../../src/error/HashError.ts"],"names":[],"mappings":";;;;AACA;IACwB,qCAAK;IAC3B,mBAAY,OAAe;QACzB,YAAA,MAAK,YAAC,OAAO,CAAC,SAAC;QACf,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;;IACnD,CAAC;IACH,gBAAC;AAAD,CAAC,AAND,CACwB,KAAK,GAK5B;AALK,8BAAS"}
package/build/index.d.ts CHANGED
@@ -2,4 +2,5 @@ import { Entity } from './Entity';
2
2
  import { EntityId } from './EntityId';
3
3
  import { ValueObject } from './ValueObject';
4
4
  import { AggregateRoot } from './AggregateRoot';
5
- export { Entity, EntityId, ValueObject, AggregateRoot };
5
+ import { HashError } from './error/HashError';
6
+ export { Entity, EntityId, ValueObject, AggregateRoot, HashError };
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AggregateRoot = exports.ValueObject = exports.EntityId = exports.Entity = void 0;
3
+ exports.HashError = exports.AggregateRoot = exports.ValueObject = exports.EntityId = exports.Entity = void 0;
4
4
  var Entity_1 = require("./Entity");
5
5
  Object.defineProperty(exports, "Entity", { enumerable: true, get: function () { return Entity_1.Entity; } });
6
6
  var EntityId_1 = require("./EntityId");
@@ -9,4 +9,6 @@ var ValueObject_1 = require("./ValueObject");
9
9
  Object.defineProperty(exports, "ValueObject", { enumerable: true, get: function () { return ValueObject_1.ValueObject; } });
10
10
  var AggregateRoot_1 = require("./AggregateRoot");
11
11
  Object.defineProperty(exports, "AggregateRoot", { enumerable: true, get: function () { return AggregateRoot_1.AggregateRoot; } });
12
+ var HashError_1 = require("./error/HashError");
13
+ Object.defineProperty(exports, "HashError", { enumerable: true, get: function () { return HashError_1.HashError; } });
12
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAMhC,uFANO,eAAM,OAMP;AALR,uCAAsC;AAMpC,yFANO,mBAAQ,OAMP;AALV,6CAA4C;AAM1C,4FANO,yBAAW,OAMP;AALb,iDAAgD;AAM9C,8FANO,6BAAa,OAMP"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAOhC,uFAPO,eAAM,OAOP;AANR,uCAAsC;AAOpC,yFAPO,mBAAQ,OAOP;AANV,6CAA4C;AAO1C,4FAPO,yBAAW,OAOP;AANb,iDAAgD;AAO9C,8FAPO,6BAAa,OAOP;AANf,+CAA8C;AAO5C,0FAPO,qBAAS,OAOP"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pocket-architect/core",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -1,4 +1,5 @@
1
1
  import { EntityId } from './EntityId';
2
+ import {HashError} from "./error/HashError";
2
3
 
3
4
  class TestId extends EntityId<number> {
4
5
  }
@@ -17,7 +18,21 @@ describe('ValueObject', () => {
17
18
  const id4 = new Test2Id('9KdMR', true);
18
19
  expect(id4.toPrimitive()).toEqual('123')
19
20
  });
21
+ test('fromHash', async () => {
22
+ expect.assertions(4);
20
23
 
24
+ expect((new Test2Id(undefined, true)).toPrimitive()).toEqual(null);
25
+ expect((new Test2Id(null, true)).toPrimitive()).toEqual(null);
26
+
27
+ try {
28
+ new Test2Id('123', true)
29
+ } catch (err) {
30
+ // eslint-disable-next-line jest/no-conditional-expect
31
+ expect(err).toBeInstanceOf(HashError);
32
+ // eslint-disable-next-line jest/no-conditional-expect
33
+ expect(err.message).toEqual('Invalid hash 123');
34
+ }
35
+ });
21
36
  test('toHash', async () => {
22
37
  const id = new Test2Id('123');
23
38
  expect(id.toHash()).toEqual('9KdMR');
package/src/EntityId.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import createUUID from 'uuid-by-string'
2
2
  import { createId } from '@paralleldrive/cuid2'
3
3
  import Hashids from 'hashids';
4
+ import {HashError} from "./error/HashError";
4
5
 
5
6
  export class EntityId<T> {
6
7
  protected _recordId: T|null = null;
@@ -33,8 +34,14 @@ export class EntityId<T> {
33
34
  }
34
35
 
35
36
  fromHash(hash: string) : EntityId<T> {
37
+ if (!hash) {
38
+ return this;
39
+ }
36
40
  const hashids = new Hashids(...this.hashOptions);
37
41
  const num = hashids.decode(hash)[0];
42
+ if (!num) {
43
+ throw new HashError(`Invalid hash ${hash}`);
44
+ }
38
45
  this._recordId = <T>(typeof this._recordId === 'string' ? num.toString() : num);
39
46
  this.createUUID();
40
47
  return this;
@@ -0,0 +1,8 @@
1
+
2
+ export
3
+ class HashError extends Error {
4
+ constructor(message: string) {
5
+ super(message);
6
+ Object.setPrototypeOf(this, HashError.prototype);
7
+ }
8
+ }
package/src/index.ts CHANGED
@@ -2,10 +2,12 @@ import { Entity } from './Entity';
2
2
  import { EntityId } from './EntityId';
3
3
  import { ValueObject } from './ValueObject';
4
4
  import { AggregateRoot } from './AggregateRoot';
5
+ import { HashError } from './error/HashError';
5
6
 
6
7
  export {
7
8
  Entity,
8
9
  EntityId,
9
10
  ValueObject,
10
- AggregateRoot
11
+ AggregateRoot,
12
+ HashError
11
13
  }