@botler/1403-form-filler-module 1.2.4 → 1.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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=canvasser-data-mapper.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasser-data-mapper.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/canvasser-data-mapper.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const canvasser_data_mapper_1 = require("../canvasser-data-mapper");
5
+ const { sanitizeName, capitalizeName } = canvasser_data_mapper_1.CanvasserDataMapper._testing;
6
+ // ---------------------------------------------------------------------------
7
+ // sanitizeName
8
+ // ---------------------------------------------------------------------------
9
+ (0, vitest_1.describe)("sanitizeName", () => {
10
+ (0, vitest_1.it)("preserves simple names", () => {
11
+ (0, vitest_1.expect)(sanitizeName("Smith")).toBe("Smith");
12
+ (0, vitest_1.expect)(sanitizeName("Jane")).toBe("Jane");
13
+ });
14
+ (0, vitest_1.it)("preserves hyphens in compound names", () => {
15
+ (0, vitest_1.expect)(sanitizeName("Mary-Jane")).toBe("Mary-Jane");
16
+ (0, vitest_1.expect)(sanitizeName("Jean-Pierre")).toBe("Jean-Pierre");
17
+ });
18
+ (0, vitest_1.it)("preserves straight apostrophes", () => {
19
+ (0, vitest_1.expect)(sanitizeName("O'Brien")).toBe("O'Brien");
20
+ (0, vitest_1.expect)(sanitizeName("D'Arcy")).toBe("D'Arcy");
21
+ });
22
+ (0, vitest_1.it)("normalizes curly apostrophes to straight", () => {
23
+ // Right single quotation mark U+2019
24
+ (0, vitest_1.expect)(sanitizeName("O\u2019Brien")).toBe("O'Brien");
25
+ // Left single quotation mark U+2018
26
+ (0, vitest_1.expect)(sanitizeName("O\u2018Brien")).toBe("O'Brien");
27
+ });
28
+ (0, vitest_1.it)("preserves periods anywhere in names", () => {
29
+ (0, vitest_1.expect)(sanitizeName("St. James")).toBe("St. James");
30
+ (0, vitest_1.expect)(sanitizeName("Jr.")).toBe("Jr.");
31
+ });
32
+ (0, vitest_1.it)("preserves diacritics / accented characters", () => {
33
+ (0, vitest_1.expect)(sanitizeName("François")).toBe("François");
34
+ (0, vitest_1.expect)(sanitizeName("René")).toBe("René");
35
+ (0, vitest_1.expect)(sanitizeName("Jean-François")).toBe("Jean-François");
36
+ });
37
+ (0, vitest_1.it)("preserves digits and symbols", () => {
38
+ (0, vitest_1.expect)(sanitizeName("Smith123")).toBe("Smith123");
39
+ (0, vitest_1.expect)(sanitizeName("Jane!@#")).toBe("Jane!@#");
40
+ (0, vitest_1.expect)(sanitizeName("O'Brien$%^")).toBe("O'Brien$%^");
41
+ });
42
+ (0, vitest_1.it)("preserves leading/trailing special characters", () => {
43
+ (0, vitest_1.expect)(sanitizeName("--Smith")).toBe("--Smith");
44
+ (0, vitest_1.expect)(sanitizeName("'Brien")).toBe("'Brien");
45
+ (0, vitest_1.expect)(sanitizeName("Smith--")).toBe("Smith--");
46
+ (0, vitest_1.expect)(sanitizeName("..Smith..")).toBe("..Smith..");
47
+ });
48
+ (0, vitest_1.it)("preserves brackets and other printable characters", () => {
49
+ (0, vitest_1.expect)(sanitizeName("Smith (Jr)")).toBe("Smith (Jr)");
50
+ (0, vitest_1.expect)(sanitizeName("Jane [Doe]")).toBe("Jane [Doe]");
51
+ (0, vitest_1.expect)(sanitizeName("Test {Name}")).toBe("Test {Name}");
52
+ });
53
+ (0, vitest_1.it)("trims leading/trailing whitespace", () => {
54
+ (0, vitest_1.expect)(sanitizeName(" Smith ")).toBe("Smith");
55
+ (0, vitest_1.expect)(sanitizeName(" Jane Doe ")).toBe("Jane Doe");
56
+ (0, vitest_1.expect)(sanitizeName("Van Der Berg")).toBe("Van Der Berg");
57
+ });
58
+ (0, vitest_1.it)("returns empty string for null/undefined/empty", () => {
59
+ (0, vitest_1.expect)(sanitizeName(null)).toBe("");
60
+ (0, vitest_1.expect)(sanitizeName(undefined)).toBe("");
61
+ (0, vitest_1.expect)(sanitizeName("")).toBe("");
62
+ });
63
+ (0, vitest_1.it)("handles complex real-world names", () => {
64
+ (0, vitest_1.expect)(sanitizeName("Mary-Jane O'Brien")).toBe("Mary-Jane O'Brien");
65
+ (0, vitest_1.expect)(sanitizeName("St. Clair-D'Angelo")).toBe("St. Clair-D'Angelo");
66
+ });
67
+ });
68
+ // ---------------------------------------------------------------------------
69
+ // capitalizeName
70
+ // ---------------------------------------------------------------------------
71
+ (0, vitest_1.describe)("capitalizeName", () => {
72
+ (0, vitest_1.it)("capitalizes first letter", () => {
73
+ (0, vitest_1.expect)(capitalizeName("smith")).toBe("Smith");
74
+ });
75
+ (0, vitest_1.it)("capitalizes after spaces", () => {
76
+ (0, vitest_1.expect)(capitalizeName("van der berg")).toBe("Van Der Berg");
77
+ });
78
+ (0, vitest_1.it)("capitalizes after hyphens", () => {
79
+ (0, vitest_1.expect)(capitalizeName("mary-jane")).toBe("Mary-Jane");
80
+ (0, vitest_1.expect)(capitalizeName("jean-pierre")).toBe("Jean-Pierre");
81
+ });
82
+ (0, vitest_1.it)("capitalizes after apostrophes", () => {
83
+ (0, vitest_1.expect)(capitalizeName("o'brien")).toBe("O'Brien");
84
+ (0, vitest_1.expect)(capitalizeName("d'arcy")).toBe("D'Arcy");
85
+ });
86
+ (0, vitest_1.it)("capitalizes after periods", () => {
87
+ (0, vitest_1.expect)(capitalizeName("st. james")).toBe("St. James");
88
+ });
89
+ (0, vitest_1.it)("returns null/undefined as-is", () => {
90
+ (0, vitest_1.expect)(capitalizeName(null)).toBeNull();
91
+ (0, vitest_1.expect)(capitalizeName(undefined)).toBeUndefined();
92
+ });
93
+ (0, vitest_1.it)("returns empty string as-is", () => {
94
+ (0, vitest_1.expect)(capitalizeName("")).toBe("");
95
+ });
96
+ });
97
+ //# sourceMappingURL=canvasser-data-mapper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasser-data-mapper.test.js","sourceRoot":"","sources":["../../src/__tests__/canvasser-data-mapper.test.ts"],"names":[],"mappings":"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"}
@@ -75,13 +75,15 @@ export declare class CanvasserDataMapper {
75
75
  */
76
76
  private static capitalizeName;
77
77
  /**
78
- * Remove any non-alphabetical characters from a string.
79
- * Keeps only Unicode letters and spaces. Returns empty string for null/undefined.
78
+ * Normalize a human name: curly apostrophes are converted to straight
79
+ * apostrophes, and leading/trailing whitespace is trimmed.
80
+ * All printable characters (brackets, periods, digits, etc.) are preserved.
81
+ * Returns empty string for null/undefined.
80
82
  *
81
- * @param value - The string to sanitize
82
- * @returns Sanitized string containing only letters and spaces
83
+ * @param value - The name string to normalize
84
+ * @returns Normalized, trimmed name string
83
85
  */
84
- private static sanitizeAlpha;
86
+ private static sanitizeName;
85
87
  /**
86
88
  * Format a phone number to the standard (XXX) XXX-XXXX format.
87
89
  * Handles 10-digit and 11-digit (1 + area code) North American numbers.
@@ -106,5 +108,10 @@ export declare class CanvasserDataMapper {
106
108
  * @returns Parsed Date or undefined if parsing fails
107
109
  */
108
110
  private static parseDate;
111
+ /** @internal Exposed for unit testing only. */
112
+ static readonly _testing: {
113
+ sanitizeName: typeof CanvasserDataMapper.sanitizeName;
114
+ capitalizeName: typeof CanvasserDataMapper.capitalizeName;
115
+ };
109
116
  }
110
117
  //# sourceMappingURL=canvasser-data-mapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasser-data-mapper.d.ts","sourceRoot":"","sources":["../src/canvasser-data-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIhD,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IACjC,yGAAyG;IACzG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC7B;;;;;;;;;;;OAWG;WACW,eAAe,CAC1B,OAAO,EAAE,gBAAgB,EACzB,SAAS,CAAC,EAAE,mBAAmB,GAC/B,aAAa;IAiFhB;;;;;OAKG;WACW,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAY/D;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAqBhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAqBrC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAsBhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;CA+B1B"}
1
+ {"version":3,"file":"canvasser-data-mapper.d.ts","sourceRoot":"","sources":["../src/canvasser-data-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIhD,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IACjC,yGAAyG;IACzG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC7B;;;;;;;;;;;OAWG;WACW,eAAe,CAC1B,OAAO,EAAE,gBAAgB,EACzB,SAAS,CAAC,EAAE,mBAAmB,GAC/B,aAAa;IAiFhB;;;;;OAKG;WACW,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAY/D;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAqBhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAqBrC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAS3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAsBhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAgCxB,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,CAAC,QAAQ;;;MAItB;CACJ"}
@@ -47,9 +47,9 @@ class CanvasserDataMapper {
47
47
  const middleName = this.capitalizeName(profile.middleName) ?? profile.middleName;
48
48
  const fillerData = {
49
49
  // Required name fields
50
- surname: this.sanitizeAlpha(lastName),
51
- givenName: this.sanitizeAlpha(firstName),
52
- middleName: middleName ? this.sanitizeAlpha(middleName) : undefined,
50
+ surname: this.sanitizeName(lastName),
51
+ givenName: this.sanitizeName(firstName),
52
+ middleName: middleName ? this.sanitizeName(middleName) : undefined,
53
53
  // Phone number — prefer mobileNumber, fall back to additionalPhones[0]
54
54
  telephoneNumber: this.formatPhoneNumber(profile.mobileNumber || (profile.additionalPhones?.[0] ?? "")),
55
55
  // Email address (from users table)
@@ -161,26 +161,23 @@ class CanvasserDataMapper {
161
161
  return name;
162
162
  return name
163
163
  .toLowerCase()
164
- .replace(/(?:^|[\s\-'])\S/g, (char) => char.toUpperCase());
164
+ .replace(/(?:^|[\s\-'.'\u2019])\S/g, (char) => char.toUpperCase());
165
165
  }
166
166
  /**
167
- * Remove any non-alphabetical characters from a string.
168
- * Keeps only Unicode letters and spaces. Returns empty string for null/undefined.
167
+ * Normalize a human name: curly apostrophes are converted to straight
168
+ * apostrophes, and leading/trailing whitespace is trimmed.
169
+ * All printable characters (brackets, periods, digits, etc.) are preserved.
170
+ * Returns empty string for null/undefined.
169
171
  *
170
- * @param value - The string to sanitize
171
- * @returns Sanitized string containing only letters and spaces
172
+ * @param value - The name string to normalize
173
+ * @returns Normalized, trimmed name string
172
174
  */
173
- static sanitizeAlpha(value) {
175
+ static sanitizeName(value) {
174
176
  if (!value)
175
177
  return "";
176
- try {
177
- // Prefer Unicode letter class to support diacritics
178
- return value.replace(/[^\p{L} ]/gu, "").trim();
179
- }
180
- catch {
181
- // Fallback to ASCII letters if Unicode property escapes are unsupported
182
- return value.replace(/[^A-Za-z ]/g, "").trim();
183
- }
178
+ // Normalize curly apostrophes to straight apostrophes
179
+ const normalized = value.replace(/[\u2018\u2019]/g, "'");
180
+ return normalized.trim();
184
181
  }
185
182
  /**
186
183
  * Format a phone number to the standard (XXX) XXX-XXXX format.
@@ -253,6 +250,11 @@ class CanvasserDataMapper {
253
250
  }
254
251
  return undefined;
255
252
  }
253
+ /** @internal Exposed for unit testing only. */
254
+ static _testing = {
255
+ sanitizeName: CanvasserDataMapper.sanitizeName.bind(CanvasserDataMapper),
256
+ capitalizeName: CanvasserDataMapper.capitalizeName.bind(CanvasserDataMapper),
257
+ };
256
258
  }
257
259
  exports.CanvasserDataMapper = CanvasserDataMapper;
258
260
  //# sourceMappingURL=canvasser-data-mapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasser-data-mapper.js","sourceRoot":"","sources":["../src/canvasser-data-mapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvasser-data-mapper.js","sourceRoot":"","sources":["../src/canvasser-data-mapper.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botler/1403-form-filler-module",
3
- "version": "1.2.4",
3
+ "version": "1.3.1",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Fills Alberta Form 1403 PDFs for canvassers. Fetches data from Neon PostgreSQL, fills PDF form fields, overlays cursive signatures, flattens to image-PDFs, merges per-batch, and uploads to S3.",
6
6
  "main": "dist/index.js",
@@ -32,7 +32,8 @@
32
32
  "start:single": "npx tsx src/cli.ts --id",
33
33
  "start:all": "npx tsx src/cli.ts --all",
34
34
  "start:dry-run": "npx tsx src/cli.ts --all --dry-run",
35
- "typecheck": "tsc --noEmit"
35
+ "typecheck": "tsc --noEmit",
36
+ "test": "vitest run"
36
37
  },
37
38
  "dependencies": {
38
39
  "@aws-sdk/client-s3": "^3.859.0",
@@ -47,7 +48,8 @@
47
48
  "@types/node": "latest",
48
49
  "@types/pg": "latest",
49
50
  "tsx": "latest",
50
- "typescript": "latest"
51
+ "typescript": "latest",
52
+ "vitest": "^4.0.18"
51
53
  },
52
54
  "engines": {
53
55
  "node": ">=18"