@metriport/shared 0.19.5 → 0.20.0-alpha.0

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.
Files changed (121) hide show
  1. package/dist/common/__tests__/date.test.js +27 -0
  2. package/dist/common/__tests__/date.test.js.map +1 -1
  3. package/dist/common/date.d.ts +3 -0
  4. package/dist/common/date.d.ts.map +1 -1
  5. package/dist/common/date.js +14 -3
  6. package/dist/common/date.js.map +1 -1
  7. package/dist/domain/__tests__/dob.test.d.ts +2 -0
  8. package/dist/domain/__tests__/dob.test.d.ts.map +1 -0
  9. package/dist/domain/__tests__/dob.test.js +37 -0
  10. package/dist/domain/__tests__/dob.test.js.map +1 -0
  11. package/dist/domain/address/__tests__/normalize-zip.test.d.ts +1 -1
  12. package/dist/domain/address/__tests__/zip.test.d.ts +2 -0
  13. package/dist/domain/address/__tests__/zip.test.d.ts.map +1 -0
  14. package/dist/domain/address/__tests__/zip.test.js +83 -0
  15. package/dist/domain/address/__tests__/zip.test.js.map +1 -0
  16. package/dist/domain/address/city.d.ts +2 -0
  17. package/dist/domain/address/city.d.ts.map +1 -0
  18. package/dist/domain/address/city.js +9 -0
  19. package/dist/domain/address/city.js.map +1 -0
  20. package/dist/domain/contact/__tests__/email.test.js +41 -0
  21. package/dist/domain/contact/__tests__/email.test.js.map +1 -1
  22. package/dist/domain/contact/email.d.ts +20 -0
  23. package/dist/domain/contact/email.d.ts.map +1 -1
  24. package/dist/domain/contact/email.js +45 -1
  25. package/dist/domain/contact/email.js.map +1 -1
  26. package/dist/domain/dob.d.ts +2 -2
  27. package/dist/domain/dob.d.ts.map +1 -1
  28. package/dist/domain/dob.js +11 -15
  29. package/dist/domain/dob.js.map +1 -1
  30. package/dist/domain/jwt-token.d.ts +5 -0
  31. package/dist/domain/jwt-token.d.ts.map +1 -0
  32. package/dist/domain/jwt-token.js +3 -0
  33. package/dist/domain/jwt-token.js.map +1 -0
  34. package/dist/domain/patient/__tests__/ssn.test.d.ts +2 -0
  35. package/dist/domain/patient/__tests__/ssn.test.d.ts.map +1 -0
  36. package/dist/domain/patient/__tests__/ssn.test.js +54 -0
  37. package/dist/domain/patient/__tests__/ssn.test.js.map +1 -0
  38. package/dist/domain/patient/patient-import.js +1 -1
  39. package/dist/domain/patient/patient-import.js.map +1 -1
  40. package/dist/domain/patient/ssn.d.ts +3 -0
  41. package/dist/domain/patient/ssn.d.ts.map +1 -0
  42. package/dist/domain/patient/ssn.js +29 -0
  43. package/dist/domain/patient/ssn.js.map +1 -0
  44. package/dist/index.d.ts +4 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +4 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/interface/external/athenahealth/appointment.d.ts +16 -3
  49. package/dist/interface/external/athenahealth/appointment.d.ts.map +1 -1
  50. package/dist/interface/external/athenahealth/appointment.js +5 -5
  51. package/dist/interface/external/athenahealth/appointment.js.map +1 -1
  52. package/dist/interface/external/athenahealth/department.d.ts +2 -1
  53. package/dist/interface/external/athenahealth/department.d.ts.map +1 -1
  54. package/dist/interface/external/athenahealth/department.js +2 -2
  55. package/dist/interface/external/athenahealth/department.js.map +1 -1
  56. package/dist/interface/external/athenahealth/index.d.ts +0 -1
  57. package/dist/interface/external/athenahealth/index.d.ts.map +1 -1
  58. package/dist/interface/external/athenahealth/index.js +0 -1
  59. package/dist/interface/external/athenahealth/index.js.map +1 -1
  60. package/dist/interface/external/athenahealth/jwt-token.d.ts +11 -6
  61. package/dist/interface/external/athenahealth/jwt-token.d.ts.map +1 -1
  62. package/dist/interface/external/athenahealth/jwt-token.js +7 -2
  63. package/dist/interface/external/athenahealth/jwt-token.js.map +1 -1
  64. package/dist/interface/external/athenahealth/medication.d.ts +15 -3
  65. package/dist/interface/external/athenahealth/medication.d.ts.map +1 -1
  66. package/dist/interface/external/athenahealth/medication.js +8 -4
  67. package/dist/interface/external/athenahealth/medication.js.map +1 -1
  68. package/dist/interface/external/athenahealth/patient.d.ts +376 -540
  69. package/dist/interface/external/athenahealth/patient.d.ts.map +1 -1
  70. package/dist/interface/external/athenahealth/patient.js +10 -34
  71. package/dist/interface/external/athenahealth/patient.js.map +1 -1
  72. package/dist/interface/external/athenahealth/problem.d.ts +13 -2
  73. package/dist/interface/external/athenahealth/problem.d.ts.map +1 -1
  74. package/dist/interface/external/athenahealth/problem.js +6 -2
  75. package/dist/interface/external/athenahealth/problem.js.map +1 -1
  76. package/dist/interface/external/athenahealth/subscription.d.ts +10 -1
  77. package/dist/interface/external/athenahealth/subscription.d.ts.map +1 -1
  78. package/dist/interface/external/athenahealth/subscription.js +5 -2
  79. package/dist/interface/external/athenahealth/subscription.js.map +1 -1
  80. package/dist/interface/external/athenahealth/vitals.d.ts +62 -6
  81. package/dist/interface/external/athenahealth/vitals.d.ts.map +1 -1
  82. package/dist/interface/external/athenahealth/vitals.js +8 -3
  83. package/dist/interface/external/athenahealth/vitals.js.map +1 -1
  84. package/dist/interface/external/canvas/appointment.d.ts +68 -0
  85. package/dist/interface/external/canvas/appointment.d.ts.map +1 -0
  86. package/dist/interface/external/canvas/appointment.js +15 -0
  87. package/dist/interface/external/canvas/appointment.js.map +1 -0
  88. package/dist/interface/external/canvas/index.d.ts +3 -0
  89. package/dist/interface/external/canvas/index.d.ts.map +1 -0
  90. package/dist/interface/external/canvas/index.js +19 -0
  91. package/dist/interface/external/canvas/index.js.map +1 -0
  92. package/dist/interface/external/canvas/jwt-token.d.ts +31 -0
  93. package/dist/interface/external/canvas/jwt-token.d.ts.map +1 -0
  94. package/dist/interface/external/canvas/jwt-token.js +17 -0
  95. package/dist/interface/external/canvas/jwt-token.js.map +1 -0
  96. package/dist/interface/external/elation/appointment.d.ts +11 -3
  97. package/dist/interface/external/elation/appointment.d.ts.map +1 -1
  98. package/dist/interface/external/elation/appointment.js +8 -9
  99. package/dist/interface/external/elation/appointment.js.map +1 -1
  100. package/dist/interface/external/elation/index.d.ts +1 -1
  101. package/dist/interface/external/elation/index.d.ts.map +1 -1
  102. package/dist/interface/external/elation/index.js +1 -1
  103. package/dist/interface/external/elation/index.js.map +1 -1
  104. package/dist/interface/external/elation/jwt-token.d.ts +20 -0
  105. package/dist/interface/external/elation/jwt-token.d.ts.map +1 -0
  106. package/dist/interface/external/elation/jwt-token.js +13 -0
  107. package/dist/interface/external/elation/jwt-token.js.map +1 -0
  108. package/dist/interface/external/elation/patient.d.ts +47 -47
  109. package/dist/interface/external/elation/patient.d.ts.map +1 -1
  110. package/dist/interface/external/elation/patient.js +12 -12
  111. package/dist/interface/external/elation/patient.js.map +1 -1
  112. package/dist/interface/external/elation/subscription.d.ts +1 -1
  113. package/dist/interface/external/shared/ehr/patient.d.ts +250 -0
  114. package/dist/interface/external/shared/ehr/patient.d.ts.map +1 -0
  115. package/dist/interface/external/shared/ehr/patient.js +35 -0
  116. package/dist/interface/external/shared/ehr/patient.js.map +1 -0
  117. package/dist/medical/webhook/webhook-request.d.ts +543 -0
  118. package/dist/medical/webhook/webhook-request.d.ts.map +1 -1
  119. package/dist/medical/webhook/webhook-request.js +36 -23
  120. package/dist/medical/webhook/webhook-request.js.map +1 -1
  121. package/package.json +10 -2
@@ -8,5 +8,32 @@ describe("shared date functions", () => {
8
8
  expect((0, date_1.isValidISODate)("2024-12-18T04:18:01.263Z")).toEqual(true);
9
9
  });
10
10
  });
11
+ describe("validateIsPastOrPresentSafe", () => {
12
+ it("returns true for past dates", () => {
13
+ expect((0, date_1.validateIsPastOrPresentSafe)("2020-01-01")).toBe(true);
14
+ expect((0, date_1.validateIsPastOrPresentSafe)("1950-12-31")).toBe(true);
15
+ });
16
+ it("returns true for present date", () => {
17
+ const today = new Date().toISOString();
18
+ expect((0, date_1.validateIsPastOrPresentSafe)(today)).toBe(true);
19
+ });
20
+ it("returns false for future dates", () => {
21
+ const futureDate = "2525-01-01";
22
+ expect((0, date_1.validateIsPastOrPresentSafe)(futureDate)).toBe(false);
23
+ });
24
+ });
25
+ });
26
+ describe("validateDateIsAfter1900", () => {
27
+ it("returns true for dates after 1900", () => {
28
+ expect((0, date_1.validateDateIsAfter1900)("1999-12-31")).toBe(true);
29
+ expect((0, date_1.validateDateIsAfter1900)("1970-01-31")).toBe(true);
30
+ });
31
+ it("returns false for dates before 1900", () => {
32
+ expect((0, date_1.validateDateIsAfter1900)("1899-12-31")).toBe(false);
33
+ expect((0, date_1.validateDateIsAfter1900)("970-01-31")).toBe(false);
34
+ });
35
+ it("returns true for 1900-01-01", () => {
36
+ expect((0, date_1.validateDateIsAfter1900)("1900-01-01")).toBe(true);
37
+ });
11
38
  });
12
39
  //# sourceMappingURL=date.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.test.js","sourceRoot":"","sources":["../../../src/common/__tests__/date.test.ts"],"names":[],"mappings":";;AAAA,kCAAyC;AAEzC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,CAAC,IAAA,qBAAc,EAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,IAAA,qBAAc,EAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"date.test.js","sourceRoot":"","sources":["../../../src/common/__tests__/date.test.ts"],"names":[],"mappings":";;AAAA,kCAA+F;AAE/F,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,CAAC,IAAA,qBAAc,EAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,IAAA,qBAAc,EAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,IAAA,kCAA2B,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAA,kCAA2B,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,CAAC,IAAA,kCAA2B,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,UAAU,GAAG,YAAY,CAAC;YAChC,MAAM,CAAC,IAAA,kCAA2B,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,IAAA,8BAAuB,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,IAAA,8BAAuB,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,IAAA,8BAAuB,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAA,8BAAuB,EAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,IAAA,8BAAuB,EAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import dayjs, { ConfigType } from "dayjs";
2
2
  import { z } from "zod";
3
3
  export declare const ISO_DATE = "YYYY-MM-DD";
4
+ /** @see https://day.js.org/docs/en/parse/is-valid */
4
5
  export declare function isValidISODate(date: string): boolean;
6
+ export declare function validateDateOfBirth(date: string): boolean;
5
7
  export declare function validateIsPastOrPresent(date: string): boolean;
6
8
  export declare function validateIsPastOrPresentSafe(date: string): boolean;
9
+ export declare function validateDateIsAfter1900(date: string): boolean;
7
10
  export declare function validateDateRange(start: string, end: string): boolean;
8
11
  export declare const optionalDateSchema: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodString>>, string | null | undefined, string | null | undefined>;
9
12
  export declare const dateSchema: z.ZodEffects<z.ZodString, string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/common/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAqB,CAAC,EAAE,MAAM,KAAK,CAAC;AAK3C,eAAO,MAAM,QAAQ,eAAe,CAAC;AAErC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAMD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK7D;AACD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAQrE;AAID,eAAO,MAAM,kBAAkB,+GAIiB,CAAC;AAEjD,eAAO,MAAM,UAAU,2CAA0D,CAAC;AAElF,wBAAgB,kBAAkB,CAChC,IAAI,CAAC,EAAE,IAAI,EACX,MAAM,GAAE,KAAK,CAAC,YAA4B,GACzC,MAAM,CAER;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAE5F;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,UAAU,EACjB,YAAY,GAAE,KAAK,GAAG,MAAc,GACnC,MAAM,CAIR"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/common/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAqB,CAAC,EAAE,MAAM,KAAK,CAAC;AAK3C,eAAO,MAAM,QAAQ,eAAe,CAAC;AAErC,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAMD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK7D;AACD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAQrE;AAID,eAAO,MAAM,kBAAkB,+GAIiB,CAAC;AAEjD,eAAO,MAAM,UAAU,2CAA0D,CAAC;AAElF,wBAAgB,kBAAkB,CAChC,IAAI,CAAC,EAAE,IAAI,EACX,MAAM,GAAE,KAAK,CAAC,YAA4B,GACzC,MAAM,CAER;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAE5F;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,UAAU,EACjB,YAAY,GAAE,KAAK,GAAG,MAAc,GACnC,MAAM,CAIR"}
@@ -3,13 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.sortDate = exports.buildDayjs = exports.elapsedTimeFromNow = exports.dateSchema = exports.optionalDateSchema = exports.validateDateRange = exports.validateIsPastOrPresentSafe = exports.validateIsPastOrPresent = exports.isValidISODate = exports.ISO_DATE = void 0;
6
+ exports.sortDate = exports.buildDayjs = exports.elapsedTimeFromNow = exports.dateSchema = exports.optionalDateSchema = exports.validateDateRange = exports.validateDateIsAfter1900 = exports.validateIsPastOrPresentSafe = exports.validateIsPastOrPresent = exports.validateDateOfBirth = exports.isValidISODate = exports.ISO_DATE = void 0;
7
7
  const dayjs_1 = __importDefault(require("dayjs"));
8
8
  const utc_1 = __importDefault(require("dayjs/plugin/utc"));
9
9
  const zod_1 = require("zod");
10
10
  const bad_request_1 = require("../error/bad-request");
11
11
  dayjs_1.default.extend(utc_1.default);
12
12
  exports.ISO_DATE = "YYYY-MM-DD";
13
+ /** @see https://day.js.org/docs/en/parse/is-valid */
13
14
  function isValidISODate(date) {
14
15
  return buildDayjs(date, exports.ISO_DATE, true).isValid();
15
16
  }
@@ -17,6 +18,10 @@ exports.isValidISODate = isValidISODate;
17
18
  function isValidISODateOptional(date) {
18
19
  return date ? isValidISODate(date) : true;
19
20
  }
21
+ function validateDateOfBirth(date) {
22
+ return validateIsPastOrPresent(date) && validateDateIsAfter1900(date);
23
+ }
24
+ exports.validateDateOfBirth = validateDateOfBirth;
20
25
  function validateIsPastOrPresent(date) {
21
26
  if (!validateIsPastOrPresentSafe(date)) {
22
27
  throw new bad_request_1.BadRequestError(`Date can't be in the future`, undefined, { date });
@@ -25,13 +30,19 @@ function validateIsPastOrPresent(date) {
25
30
  }
26
31
  exports.validateIsPastOrPresent = validateIsPastOrPresent;
27
32
  function validateIsPastOrPresentSafe(date) {
28
- if ((0, dayjs_1.default)(date).isAfter((0, dayjs_1.default)()))
33
+ if (buildDayjs(date).isAfter(buildDayjs()))
29
34
  return false;
30
35
  return true;
31
36
  }
32
37
  exports.validateIsPastOrPresentSafe = validateIsPastOrPresentSafe;
38
+ function validateDateIsAfter1900(date) {
39
+ const dateToCheck = buildDayjs(date);
40
+ const year1900 = buildDayjs("1900-01-01");
41
+ return dateToCheck.isSame(year1900) || dateToCheck.isAfter(year1900);
42
+ }
43
+ exports.validateDateIsAfter1900 = validateDateIsAfter1900;
33
44
  function validateDateRange(start, end) {
34
- if ((0, dayjs_1.default)(start).isAfter(end)) {
45
+ if (buildDayjs(start).isAfter(end)) {
35
46
  throw new bad_request_1.BadRequestError(`Invalid date range: 'start' must be before 'end'`, undefined, {
36
47
  start,
37
48
  end,
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/common/date.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0C;AAC1C,2DAAmC;AACnC,6BAA2C;AAC3C,sDAAuD;AAEvD,eAAK,CAAC,MAAM,CAAC,aAAG,CAAC,CAAC;AAEL,QAAA,QAAQ,GAAG,YAAY,CAAC;AAErC,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,UAAU,CAAC,IAAI,EAAE,gBAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACpD,CAAC;AAFD,wCAEC;AAED,SAAS,sBAAsB,CAAC,IAA+B;IAC7D,OAAO,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAY;IAClD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;QACtC,MAAM,IAAI,6BAAe,CAAC,6BAA6B,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;KAC/E;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AALD,0DAKC;AACD,SAAgB,2BAA2B,CAAC,IAAY;IACtD,IAAI,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAA,eAAK,GAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAHD,kEAGC;AAED,SAAgB,iBAAiB,CAAC,KAAa,EAAE,GAAW;IAC1D,IAAI,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC7B,MAAM,IAAI,6BAAe,CAAC,kDAAkD,EAAE,SAAS,EAAE;YACvF,KAAK;YACL,GAAG;SACJ,CAAC,CAAC;KACJ;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AARD,8CAQC;AAED,MAAM,aAAa,GAAsB,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE5D,QAAA,kBAAkB,GAAG,OAAC;KAChC,MAAM,EAAE;KACR,IAAI,EAAE;KACN,OAAO,EAAE;KACT,MAAM,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;AAEpC,QAAA,UAAU,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAElF,SAAgB,kBAAkB,CAChC,IAAW,EACX,SAA6B,aAAa;IAE1C,OAAO,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AALD,gDAKC;AAED,SAAgB,UAAU,CAAC,IAAiB,EAAE,MAAe,EAAE,MAAgB;IAC7E,OAAO,eAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAFD,gCAEC;AAED,SAAgB,QAAQ,CACtB,KAAiB,EACjB,KAAiB,EACjB,eAA+B,KAAK;IAEpC,OAAO,YAAY,KAAK,MAAM;QAC5B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AARD,4BAQC"}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/common/date.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dob.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dob.test.d.ts","sourceRoot":"","sources":["../../../src/domain/__tests__/dob.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const dob_1 = require("../dob");
4
+ describe("dob", () => {
5
+ describe("normalizeDob", () => {
6
+ it("should throw an error if zip is an empty string", () => {
7
+ expect(() => (0, dob_1.normalizeDob)("")).toThrow();
8
+ });
9
+ it("should work when gets valid dob", () => {
10
+ const res = (0, dob_1.normalizeDob)("1945-01-01");
11
+ expect(res).toBeTruthy();
12
+ expect(res).toEqual("1945-01-01");
13
+ });
14
+ });
15
+ describe("safe normalizeDobSafe", () => {
16
+ it("should return undefined when it gets empty string", () => {
17
+ const input = "";
18
+ const expectedOutput = undefined;
19
+ expect((0, dob_1.normalizeDobSafe)(input)).toBe(expectedOutput);
20
+ });
21
+ it("should throw when gets invalid date", () => {
22
+ expect(() => (0, dob_1.normalizeDob)("something thats not a date")).toThrow();
23
+ });
24
+ describe("examples from the wild", () => {
25
+ const tests = [
26
+ { input: "1951-03-29 ", expectedOutput: "1951-03-29" },
27
+ { input: "Jan 1, 1951", expectedOutput: "1951-01-01" },
28
+ ];
29
+ for (const { input, expectedOutput } of tests) {
30
+ it(`should return ${expectedOutput} when input is ${input}`, () => {
31
+ expect((0, dob_1.normalizeDobSafe)(input)).toBe(expectedOutput);
32
+ });
33
+ }
34
+ });
35
+ });
36
+ });
37
+ //# sourceMappingURL=dob.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dob.test.js","sourceRoot":"","sources":["../../../src/domain/__tests__/dob.test.ts"],"names":[],"mappings":";;AAAA,gCAAwD;AAExD,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,kBAAY,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,GAAG,GAAG,IAAA,kBAAY,EAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,cAAc,GAAG,SAAS,CAAC;YACjC,MAAM,CAAC,IAAA,sBAAgB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,kBAAY,EAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG;gBACZ,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE;gBACtD,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE;aACvD,CAAC;YACF,KAAK,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,KAAK,EAAE;gBAC7C,EAAE,CAAC,iBAAiB,cAAc,kBAAkB,KAAK,EAAE,EAAE,GAAG,EAAE;oBAChE,MAAM,CAAC,IAAA,sBAAgB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=normalize-zip.test.d.ts.map
2
+ //# sourceMappingURL=normalize-zip.test.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=zip.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.test.d.ts","sourceRoot":"","sources":["../../../../src/domain/address/__tests__/zip.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const faker_1 = require("@faker-js/faker");
4
+ const zip_1 = require("../zip");
5
+ function getFiveDigitZip() {
6
+ return faker_1.faker.number.int({ min: 10000, max: 99999 }).toString();
7
+ }
8
+ describe("zip", () => {
9
+ describe("normalizeZipCodeNew", () => {
10
+ it("returns the result of the normalizeFn param", () => {
11
+ const expectedOutput = getFiveDigitZip();
12
+ const normalizeFn = jest.fn(() => expectedOutput);
13
+ expect((0, zip_1.normalizeZipCodeNew)("54321", normalizeFn)).toBe(expectedOutput);
14
+ });
15
+ it("should throw an error if zip is an empty string", () => {
16
+ const normalizeFn = jest.fn(() => undefined);
17
+ expect(() => (0, zip_1.normalizeZipCodeNew)("54321", normalizeFn)).toThrow();
18
+ });
19
+ });
20
+ describe("safe normalizeZipCodeNewSafe", () => {
21
+ it("should return undefined when it gets empty string", () => {
22
+ const input = "";
23
+ const expectedOutput = undefined;
24
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
25
+ });
26
+ it("should return undefined when it gets space", () => {
27
+ const input = " ";
28
+ const expectedOutput = undefined;
29
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
30
+ });
31
+ it("should handle 5 digits", () => {
32
+ const input = getFiveDigitZip();
33
+ const expectedOutput = input;
34
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
35
+ });
36
+ it("should trim input prefix", () => {
37
+ const expectedOutput = getFiveDigitZip();
38
+ const input = " " + expectedOutput;
39
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
40
+ });
41
+ it("should trim input suffix", () => {
42
+ const expectedOutput = getFiveDigitZip();
43
+ const input = expectedOutput + " ";
44
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
45
+ });
46
+ it("should return undefined for zip codes that are too short", () => {
47
+ const input = "12";
48
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBeUndefined();
49
+ });
50
+ it("should handle short zip codes", () => {
51
+ const input = "123";
52
+ const expectedOutput = "00123";
53
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
54
+ });
55
+ it("should return padded first 4 characters when contains dash at position 4", () => {
56
+ const input = "1234-6677";
57
+ const expectedOutput = "01234";
58
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
59
+ });
60
+ it("should return first 5 characters when zip code length is 10", () => {
61
+ const input = "12345-6677";
62
+ const expectedOutput = "12345";
63
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
64
+ });
65
+ it("should return undefined if zip contains non-digit and non-dash characters (length 9)", () => {
66
+ const input = "12345-667a";
67
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBeUndefined();
68
+ });
69
+ it("should return undefined if zip contains non-digit and non-dash characters (length 5)", () => {
70
+ const input = "1234a";
71
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBeUndefined();
72
+ });
73
+ describe("examples from the wild", () => {
74
+ const tests = [{ input: "2468", expectedOutput: "02468" }];
75
+ for (const { input, expectedOutput } of tests) {
76
+ it(`should return ${expectedOutput} when input is ${input}`, () => {
77
+ expect((0, zip_1.normalizeZipCodeNewSafe)(input)).toBe(expectedOutput);
78
+ });
79
+ }
80
+ });
81
+ });
82
+ });
83
+ //# sourceMappingURL=zip.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.test.js","sourceRoot":"","sources":["../../../../src/domain/address/__tests__/zip.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function normalizeCity(city: string): string;
2
+ //# sourceMappingURL=city.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"city.d.ts","sourceRoot":"","sources":["../../../src/domain/address/city.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeCity = void 0;
4
+ const title_case_1 = require("../../common/title-case");
5
+ function normalizeCity(city) {
6
+ return (0, title_case_1.toTitleCase)(city).trim();
7
+ }
8
+ exports.normalizeCity = normalizeCity;
9
+ //# sourceMappingURL=city.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"city.js","sourceRoot":"","sources":["../../../src/domain/address/city.ts"],"names":[],"mappings":";;;AAAA,wDAAsD;AAEtD,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,IAAA,wBAAW,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAFD,sCAEC"}
@@ -36,4 +36,45 @@ describe("Email Utility Functions", () => {
36
36
  });
37
37
  });
38
38
  });
39
+ describe("email", () => {
40
+ describe("normalizeEmailNewSafe", () => {
41
+ it("should return undefined when it gets empty string", () => {
42
+ const input = "";
43
+ expect((0, email_1.normalizeEmailNewSafe)(input)).toBeUndefined();
44
+ });
45
+ it("should return undefined when it gets space", () => {
46
+ const input = " ";
47
+ expect((0, email_1.normalizeEmailNewSafe)(input)).toBeUndefined();
48
+ });
49
+ it("should handle example", () => {
50
+ const input = email_1.exampleEmail;
51
+ const expectedOutput = input;
52
+ expect((0, email_1.normalizeEmailNewSafe)(input)).toBe(expectedOutput);
53
+ });
54
+ it("should lowercase input", () => {
55
+ const expectedOutput = email_1.exampleEmail;
56
+ const input = expectedOutput.toUpperCase();
57
+ expect((0, email_1.normalizeEmailNewSafe)(input)).toBe(expectedOutput);
58
+ });
59
+ it("should trim input prefix", () => {
60
+ const expectedOutput = email_1.exampleEmail;
61
+ const input = " " + expectedOutput;
62
+ expect((0, email_1.normalizeEmailNewSafe)(input)).toBe(expectedOutput);
63
+ });
64
+ it("should trim input suffix", () => {
65
+ const expectedOutput = email_1.exampleEmail;
66
+ const input = expectedOutput + " ";
67
+ expect((0, email_1.normalizeEmailNewSafe)(input)).toBe(expectedOutput);
68
+ });
69
+ it("should relace mailto: prefix", () => {
70
+ const expectedOutput = email_1.exampleEmail;
71
+ const input = "mailto:" + expectedOutput;
72
+ expect((0, email_1.normalizeEmailNewSafe)(input)).toBe(expectedOutput);
73
+ });
74
+ it("should return undefined for emails that invalid", () => {
75
+ const input = "this.is.not.an.email";
76
+ expect((0, email_1.normalizeEmailNewSafe)(input)).toBeUndefined();
77
+ });
78
+ });
79
+ });
39
80
  //# sourceMappingURL=email.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.test.js","sourceRoot":"","sources":["../../../../src/domain/contact/__tests__/email.test.ts"],"names":[],"mappings":";;AAAA,oCAA8E;AAE9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,IAAA,oBAAY,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,CAAC,IAAA,oBAAY,EAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,IAAA,oBAAY,EAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,CAAC,IAAA,oBAAY,EAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,IAAA,sBAAc,EAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,CAAC,IAAA,sBAAc,EAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,IAAA,4BAAoB,EAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,4BAAoB,EAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,4BAAoB,EAAC,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"email.test.js","sourceRoot":"","sources":["../../../../src/domain/contact/__tests__/email.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,26 @@
1
1
  export declare const exampleEmail = "test@test.com";
2
2
  export declare function isEmail(email: string): boolean;
3
3
  export declare function isEmailValid(email: string): boolean;
4
+ /**
5
+ * @deprecated Use noramlizeEmailBase instead
6
+ */
4
7
  export declare function normalizeEmail(email: string): string;
8
+ /**
9
+ * @deprecated Use normalizeEmailNew instead
10
+ */
5
11
  export declare function normalizeEmailStrict(email: string): string;
12
+ /**
13
+ * Returns the base email without the `mailto:` prefix and in lowercase
14
+ */
15
+ export declare function noramlizeEmailBase(email: string): string;
16
+ /**
17
+ * Returns the base email without the mailto prefix and in lowercase
18
+ * If the email is not valid, returns undefined
19
+ */
20
+ export declare function normalizeEmailNewSafe(email: string, normalizeBase?: (email: string) => string): string | undefined;
21
+ /**
22
+ * Returns the base email without the mailto prefix and in lowercase
23
+ * If the email is not valid, throws an error
24
+ */
25
+ export declare function normalizeEmailNew(email: string): string;
6
26
  //# sourceMappingURL=email.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/domain/contact/email.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMnD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1D"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/domain/contact/email.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAG5C,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AASD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAA2B,GAC5D,MAAM,GAAG,SAAS,CAIpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvD"}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeEmailStrict = exports.normalizeEmail = exports.isEmailValid = exports.isEmail = exports.exampleEmail = void 0;
3
+ exports.normalizeEmailNew = exports.normalizeEmailNewSafe = exports.noramlizeEmailBase = exports.normalizeEmailStrict = exports.normalizeEmail = exports.isEmailValid = exports.isEmail = exports.exampleEmail = void 0;
4
4
  const zod_1 = require("zod");
5
+ const bad_request_1 = require("../../error/bad-request");
5
6
  exports.exampleEmail = "test@test.com";
7
+ const mailtoPrefix = "mailto:";
6
8
  function isEmail(email) {
7
9
  return email.includes("@");
8
10
  }
@@ -18,11 +20,17 @@ function isEmailValid(email) {
18
20
  return true;
19
21
  }
20
22
  exports.isEmailValid = isEmailValid;
23
+ /**
24
+ * @deprecated Use noramlizeEmailBase instead
25
+ */
21
26
  function normalizeEmail(email) {
22
27
  const trimmedEmail = email.trim();
23
28
  return trimmedEmail.toLowerCase();
24
29
  }
25
30
  exports.normalizeEmail = normalizeEmail;
31
+ /**
32
+ * @deprecated Use normalizeEmailNew instead
33
+ */
26
34
  function normalizeEmailStrict(email) {
27
35
  const normalEmail = normalizeEmail(email);
28
36
  if (!isEmailValid(normalEmail))
@@ -30,4 +38,40 @@ function normalizeEmailStrict(email) {
30
38
  return normalEmail;
31
39
  }
32
40
  exports.normalizeEmailStrict = normalizeEmailStrict;
41
+ /**
42
+ * Returns the base email without the `mailto:` prefix and in lowercase
43
+ */
44
+ function noramlizeEmailBase(email) {
45
+ return removeMailto(email.trim().toLowerCase());
46
+ }
47
+ exports.noramlizeEmailBase = noramlizeEmailBase;
48
+ function removeMailto(email) {
49
+ if (email.startsWith(mailtoPrefix)) {
50
+ return email.slice(mailtoPrefix.length);
51
+ }
52
+ return email;
53
+ }
54
+ /**
55
+ * Returns the base email without the mailto prefix and in lowercase
56
+ * If the email is not valid, returns undefined
57
+ */
58
+ function normalizeEmailNewSafe(email, normalizeBase = noramlizeEmailBase) {
59
+ const baseEmail = normalizeBase(email);
60
+ if (!isEmailValid(baseEmail))
61
+ return undefined;
62
+ return baseEmail;
63
+ }
64
+ exports.normalizeEmailNewSafe = normalizeEmailNewSafe;
65
+ /**
66
+ * Returns the base email without the mailto prefix and in lowercase
67
+ * If the email is not valid, throws an error
68
+ */
69
+ function normalizeEmailNew(email) {
70
+ const emailOrUndefined = normalizeEmailNewSafe(email);
71
+ if (!emailOrUndefined) {
72
+ throw new bad_request_1.BadRequestError("Invalid email", undefined, { email });
73
+ }
74
+ return emailOrUndefined;
75
+ }
76
+ exports.normalizeEmailNew = normalizeEmailNew;
33
77
  //# sourceMappingURL=email.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/domain/contact/email.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,YAAY,GAAG,eAAe,CAAC;AAE5C,SAAgB,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAFD,0BAEC;AAED,SAAgB,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,cAAc,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AAND,oCAMC;AAED,SAAgB,cAAc,CAAC,KAAa;IAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAHD,wCAGC;AAED,SAAgB,oBAAoB,CAAC,KAAa;IAChD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAClE,OAAO,WAAW,CAAC;AACrB,CAAC;AAJD,oDAIC"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/domain/contact/email.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,yDAA0D;AAE7C,QAAA,YAAY,GAAG,eAAe,CAAC;AAC5C,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,SAAgB,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAFD,0BAEC;AAED,SAAgB,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,cAAc,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AAND,oCAMC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAHD,wCAGC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,KAAa;IAChD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAClE,OAAO,WAAW,CAAC;AACrB,CAAC;AAJD,oDAIC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAClD,CAAC;AAFD,gDAEC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QAClC,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KACzC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CACnC,KAAa,EACb,gBAA2C,kBAAkB;IAE7D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,SAAS,CAAC;AACnB,CAAC;AAPD,sDAOC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,IAAI,6BAAe,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;KAClE;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAND,8CAMC"}
@@ -1,3 +1,3 @@
1
- export declare function normalizeDateSafe(date: string): string | undefined;
2
- export declare function normalizeDate(date: string): string;
1
+ export declare function normalizeDobSafe(date: string): string | undefined;
2
+ export declare function normalizeDob(date: string): string;
3
3
  //# sourceMappingURL=dob.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dob.d.ts","sourceRoot":"","sources":["../../src/domain/dob.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMlE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD"}
1
+ {"version":3,"file":"dob.d.ts","sourceRoot":"","sources":["../../src/domain/dob.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD"}
@@ -1,25 +1,21 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.normalizeDate = exports.normalizeDateSafe = void 0;
3
+ exports.normalizeDob = exports.normalizeDobSafe = void 0;
7
4
  const date_1 = require("../common/date");
8
- const dayjs_1 = __importDefault(require("dayjs"));
9
- function normalizeDateSafe(date) {
5
+ function normalizeDobSafe(date) {
10
6
  const trimmedDate = date.trim();
11
- const parsedDate = (0, dayjs_1.default)(trimmedDate);
12
- if (!parsedDate.isValid())
7
+ if (trimmedDate.length < 1)
13
8
  return undefined;
14
- // TODO Check if date is in future
15
- return parsedDate.format(date_1.ISO_DATE);
9
+ if (!(0, date_1.validateDateOfBirth)(trimmedDate))
10
+ throw new Error("Invalid date of birth.");
11
+ return (0, date_1.buildDayjs)(trimmedDate).format(date_1.ISO_DATE);
16
12
  }
17
- exports.normalizeDateSafe = normalizeDateSafe;
18
- function normalizeDate(date) {
19
- const dateOrUndefined = normalizeDateSafe(date);
13
+ exports.normalizeDobSafe = normalizeDobSafe;
14
+ function normalizeDob(date) {
15
+ const dateOrUndefined = normalizeDobSafe(date);
20
16
  if (!dateOrUndefined)
21
- throw new Error("Invalid date.");
17
+ throw new Error("Invalid date of birth.");
22
18
  return dateOrUndefined;
23
19
  }
24
- exports.normalizeDate = normalizeDate;
20
+ exports.normalizeDob = normalizeDob;
25
21
  //# sourceMappingURL=dob.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dob.js","sourceRoot":"","sources":["../../src/domain/dob.ts"],"names":[],"mappings":";;;;;;AAAA,yCAA0C;AAC1C,kDAA0B;AAE1B,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,IAAA,eAAK,EAAC,WAAW,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAAE,OAAO,SAAS,CAAC;IAC5C,kCAAkC;IAClC,OAAO,UAAU,CAAC,MAAM,CAAC,eAAQ,CAAC,CAAC;AACrC,CAAC;AAND,8CAMC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACvD,OAAO,eAAe,CAAC;AACzB,CAAC;AAJD,sCAIC"}
1
+ {"version":3,"file":"dob.js","sourceRoot":"","sources":["../../src/domain/dob.ts"],"names":[],"mappings":";;;AAAA,yCAA2E;AAE3E,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,CAAC,IAAA,0BAAmB,EAAC,WAAW,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACjF,OAAO,IAAA,iBAAU,EAAC,WAAW,CAAC,CAAC,MAAM,CAAC,eAAQ,CAAC,CAAC;AAClD,CAAC;AALD,4CAKC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAChE,OAAO,eAAe,CAAC;AACzB,CAAC;AAJD,oCAIC"}
@@ -0,0 +1,5 @@
1
+ export type JwtTokenInfo = {
2
+ access_token: string;
3
+ exp: Date;
4
+ };
5
+ //# sourceMappingURL=jwt-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-token.d.ts","sourceRoot":"","sources":["../../src/domain/jwt-token.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,IAAI,CAAC;CACX,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=jwt-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-token.js","sourceRoot":"","sources":["../../src/domain/jwt-token.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ssn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssn.test.d.ts","sourceRoot":"","sources":["../../../../src/domain/patient/__tests__/ssn.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ssn_1 = require("../ssn");
4
+ describe("normalizeSsn", () => {
5
+ describe("safe normalizeSsnSafe", () => {
6
+ it(`returns undefined if ssn is empty`, async () => {
7
+ const result = (0, ssn_1.normalizeSsnSafe)("");
8
+ expect(result).toBe(undefined);
9
+ });
10
+ it(`returns undefined if ssn is less than 9 digits`, async () => {
11
+ const result = (0, ssn_1.normalizeSsnSafe)("12345678");
12
+ expect(result).toBe(undefined);
13
+ });
14
+ it(`discards right-most digits if more than 9 digits`, async () => {
15
+ const result = (0, ssn_1.normalizeSsnSafe)("12345678901234567890");
16
+ expect(result).toBe("123456789");
17
+ });
18
+ it(`pads with zeros if less than 9 digits and padZeros is true`, async () => {
19
+ const result = (0, ssn_1.normalizeSsnSafe)("123", true);
20
+ expect(result).toBe("000000123");
21
+ });
22
+ it(`does not pad with zeros if less than 2 digits and padZeros is true`, async () => {
23
+ const result = (0, ssn_1.normalizeSsnSafe)("1", true);
24
+ expect(result).toBeUndefined();
25
+ });
26
+ it(`does not pad with zeros if less than 9 digits and padZeros is false`, async () => {
27
+ const result = (0, ssn_1.normalizeSsnSafe)("123", false);
28
+ expect(result).toBeUndefined();
29
+ });
30
+ it(`does not pad with zeros if less than 9 digits and padZeros is not set`, async () => {
31
+ const result = (0, ssn_1.normalizeSsnSafe)("123");
32
+ expect(result).toBeUndefined();
33
+ });
34
+ });
35
+ describe("normalizeSsn", () => {
36
+ it(`throws if ssn is empty`, async () => {
37
+ expect(() => (0, ssn_1.normalizeSsn)("")).toThrow();
38
+ });
39
+ it(`throws if ssn is less than 9 digits`, async () => {
40
+ expect(() => (0, ssn_1.normalizeSsn)("12345678")).toThrow();
41
+ });
42
+ describe("multiple formats", () => {
43
+ const ssnValid = "000000000";
44
+ const ssnsToCheck = [ssnValid, " 000000000 ", "000-00-0000", "a00b0000c000d"];
45
+ for (const ssn of ssnsToCheck) {
46
+ it(`ssn: ${ssn}`, async () => {
47
+ const result = (0, ssn_1.normalizeSsn)(ssn);
48
+ expect(result).toBe(ssnValid);
49
+ });
50
+ }
51
+ });
52
+ });
53
+ });
54
+ //# sourceMappingURL=ssn.test.js.map